diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..61d73c7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,73 @@ +name: Bug report +description: Report a reproducible bug or regression. +title: "[Bug]: " +labels: + - bug +body: + - type: checkboxes + id: checks + attributes: + label: Pre-flight + options: + - label: I searched existing issues and did not find a duplicate. + required: true + - label: I can reproduce this on the latest version. + required: true + + - type: textarea + id: summary + attributes: + label: What happened? + description: Describe the current behavior and what you expected. + placeholder: A clear, concise description of the bug. + validations: + required: true + + - type: textarea + id: steps + attributes: + label: Steps to reproduce + placeholder: | + 1. Go to ... + 2. Click on ... + 3. Observe ... + validations: + required: true + + - type: input + id: version + attributes: + label: App version + description: Version, tag, or commit SHA. + placeholder: 0.1.0 + validations: + required: false + + - type: dropdown + id: os + attributes: + label: OS + options: + - macOS + - Windows + - Linux + - Other + validations: + required: true + + - type: textarea + id: logs + attributes: + label: Relevant logs + description: Paste any relevant output. + render: shell + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional context + description: Add screenshots, recordings, or extra context if helpful. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/documentation_improvement.yml b/.github/ISSUE_TEMPLATE/documentation_improvement.yml new file mode 100644 index 0000000..bd5c95f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation_improvement.yml @@ -0,0 +1,59 @@ +name: Documentation improvement +description: Report unclear, missing, or incorrect documentation. +title: "[Docs]: " +labels: + - documentation +body: + - type: checkboxes + id: checks + attributes: + label: Pre-flight + options: + - label: I searched existing issues and did not find a duplicate. + required: true + + - type: input + id: location + attributes: + label: Documentation location + description: Link to the file/page/section that needs improvement. + placeholder: docs/specs/feeds.md or URL + validations: + required: true + + - type: textarea + id: issue + attributes: + label: What is unclear or incorrect? + description: Describe the specific problem. + validations: + required: true + + - type: textarea + id: improvement + attributes: + label: Suggested improvement + description: What change would make this clearer or more accurate? + validations: + required: true + + - type: dropdown + id: audience + attributes: + label: Who is affected most? + options: + - New contributors + - Existing contributors + - End users + - Maintainers + - Everyone + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional context + description: Include examples, snippets/screenshots, or related links. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..f27fc74 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,55 @@ +name: Feature request +description: Suggest an improvement or a new capability. +title: "[Feature]: " +labels: + - enhancement +body: + - type: checkboxes + id: checks + attributes: + label: Pre-flight + options: + - label: I searched existing issues and did not find a duplicate. + required: true + + - type: textarea + id: problem + attributes: + label: Problem to solve + description: What user problem or workflow gap does this address? + placeholder: Describe the pain point. + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: Proposed solution + description: Describe the behavior you want. + placeholder: Describe the ideal outcome. + validations: + required: true + + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: Any workarounds or alternative approaches? + validations: + required: false + + - type: textarea + id: scope + attributes: + label: Scope and impact + description: Note affected areas (UI, backend, search, settings, etc.). + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional context + description: Mockups, references, or examples are helpful. + validations: + required: false diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..d9b0d34 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,49 @@ +# Pull Request + +## Summary + +Describe what changed and why. + +## Related Issues + +Closes # + +## Type of Change + +- [ ] Fix +- [ ] Feature +- [ ] Refactor +- [ ] Docs +- [ ] Chore + +## Validation + +List what you ran and the result. + +```bash +pnpm typecheck +pnpm test +pnpm lint +pnpm format +``` + +If Rust code changed: + +```bash +cd src-tauri +cargo fmt --check +cargo clippy --all-targets --all-features -- -D warnings + +# OR +cargo clippy --fix --allow-dirty && cargo fmt +``` + +## Screenshots (If UI Changed) + +Attach screenshots or a short recording. + +## Checklist + +- [ ] I have read CONTRIBUTING.md +- [ ] I kept this PR focused and reasonably small +- [ ] I updated docs/tests where relevant diff --git a/CHANGELOG.md b/CHANGELOG.md index 528ee7f..882ac0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Image (single or gallery) & video player with blob downloading - Group notifications by reason & post, with clickable links to subjects and posts +- Added dedicated post/thread view. ### 2026-04-06 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..6e8adce --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,78 @@ +# Contributing to Lazurite Desktop + +Thanks for helping improve Lazurite. + +## Setup + +1. Install prerequisites: + - Node.js 20+ + - pnpm + - Rust stable toolchain (for Tauri/backend work) +1. Install dependencies: + +```bash +pnpm install +``` + +For Rust/Tauri development: + +```sh +cd src-tauri +cargo check && cargo build +``` + +1. Run the app: + +```bash +# Frontend only +pnpm dev + +# Full desktop app (Tauri + frontend) +pnpm tauri dev +``` + +## Before Opening a Pull Request + +Run the following from the repository root: + +```bash +pnpm typecheck +pnpm test +pnpm lint +pnpm format +``` + +If your changes touch Rust code, also run: + +```bash +cd src-tauri +cargo fmt --check +cargo clippy --all-targets --all-features -- -D warnings +``` + +## Project Conventions + +- Use pnpm for frontend workflows. +- Keep Tauri commands in `src-tauri/src/commands.rs` and keep command handlers thin. +- Put business logic in focused Rust modules, then call those from commands. +- Follow Solid patterns used in this repo (for example, `Show`/`For`/`Index` where appropriate). +- Follow the design system in `docs/design.md` for UI work. +- Do not ignore lint rules. +- Frontend errors should be human-readable; logs should be detailed and technical. + +## Pull Request Expectations + +- Keep changes focused and scoped. +- Link related issues (for example, `Closes #123`). +- Include screenshots or short recordings for visible UI changes. +- Update docs/specs when behavior or architecture changes. +- Add or update tests when practical. + +## Security + +Please do not open public issues for security vulnerabilities. +Contact the [maintainers privately](mailto:info@stormlightlabs.org). + +## License + +By contributing, you agree that your contributions are licensed under the MIT License. diff --git a/src/components/rail/AppRail.tsx b/src/components/rail/AppRail.tsx index 6b2aab6..9087dd8 100644 --- a/src/components/rail/AppRail.tsx +++ b/src/components/rail/AppRail.tsx @@ -3,7 +3,7 @@ import { useAppShellUi } from "$/contexts/app-shell-ui"; import { openUrl } from "@tauri-apps/plugin-opener"; import { Show } from "solid-js"; import { AccountSwitcher } from "../account/AccountSwitcher"; -import { ArrowIcon } from "../shared/Icon"; +import { RailFoldIcon } from "../shared/Icon"; import { Wordmark } from "../Wordmark"; import { RailActionButton, RailButton } from "./AppRailButton"; @@ -19,8 +19,8 @@ function RailHeader(props: { collapsed: boolean; onToggleCollapse: () => void }) aria-label={props.collapsed ? "Expand app rail" : "Collapse app rail"} aria-pressed={props.collapsed} onClick={() => props.onToggleCollapse()}> - }> - + }> + diff --git a/src/components/search/SearchQueryInput.tsx b/src/components/search/SearchQueryInput.tsx index e000ea5..8c898a3 100644 --- a/src/components/search/SearchQueryInput.tsx +++ b/src/components/search/SearchQueryInput.tsx @@ -91,9 +91,7 @@ function SearchInputField( function LoadingIndicator(props: { loading: boolean }) { return ( - - - + ); } diff --git a/src/components/shared/Icon.tsx b/src/components/shared/Icon.tsx index 73509b8..9b33bab 100644 --- a/src/components/shared/Icon.tsx +++ b/src/components/shared/Icon.tsx @@ -228,6 +228,22 @@ export function SettingsIcon(props: IconProps & { kind: SettingsIconKind }) { ); } +export function RailFoldIcon(props: JSX.HTMLAttributes & { class?: string; kind: "open" | "close" }) { + const [local, rest] = splitProps(props, ["class", "kind"]); + return ( + + + + + + + + + + + ); +} + export function ArrowIcon( props: JSX.HTMLAttributes & { class?: string; direction: "up" | "down" | "left" | "right" }, ) {