sync: merge 21 commits from upstream go-vikunja/vikunja - #10
Merged
Conversation
… dialogs and selects (go-vikunja#3228)
…ssistive technology Add disclosure semantics to dropdown/popup triggers (aria-expanded, Escape to close with focus return, drop the incorrect role=menu), aria-sort plus per-column labels on the table view, a debounced polite live region announcing quick-actions result counts, aria-pressed on editor toggle buttons, and an aria-label on the rich-text editing region. Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
The add-task footer renders inside ul.tasks via the draggable footer slot; as a div it was the one remaining invalid child of the kanban lists converted in go-vikunja#3234. Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
…arch condition The parent root-membership mirror always used the ILIKE fallback, so on ParadeDB a parent matching the search only via fuzzy/token matching kept its child as a duplicate root, and a substring-only ILIKE match could hide a child under a parent absent from the results. The assumed limitation no longer holds: pg_search plans ||| against the aliased parent_tasks inside the correlated NOT EXISTS as a regular BM25 scan (verified on 0.24.1), and score-free predicates never triggered the "unsupported query shape" error on older versions either. Part of go-vikunja#2954
…rent scopes The fuzzy mirror test is ParadeDB-only and fails without the previous commit (child returned as a second root). The multi-parent test pins the NOT EXISTS semantics from go-vikunja#3197: one in-scope and one out-of-scope parent must still nest the child. Part of go-vikunja#2954
Each attachment row was a button containing the download, copy-URL, delete and set-cover buttons — interactive elements nested inside an interactive element, which is invalid and confuses assistive-technology focus (axe: nested-interactive). The row is now a non-interactive container: the filename (and thumbnail) is the trigger that opens or downloads the attachment, and the action buttons are its siblings. Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
Opens the existing alt-text prompt right after an image is inserted (upload, paste and URL flows) so every new image gets a description. Cancelling leaves the image without alt text, and the node is deselected afterwards so the next insert appends instead of replacing. Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
The white hero heading sat directly on the photo, where its contrast depends on the image content. A bottom-weighted gradient scrim keeps it readable across the whole picture. Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
The trigger announced only the bare bucket name ("To-Do, button");
it now announces "Kanban bucket: To-Do".
Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
The bare count badges read as just a number to screen readers; they now carry an accessible name like "2 comments" / "1 attachment". Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
role=toolbar with a roving tabindex: Arrow keys move between buttons, one Tab stop, Tab leaves the toolbar, and the tab stop stays valid when buttons become disabled. Covered by an e2e keyboard-navigation spec. Also fixes the table-edit :disabled bindings, which referenced editor.can().X as a property (always truthy) so those buttons never actually disabled — surfaced by review while testing the roving focus. Claude-Session: https://claude.ai/code/session_018prq5WqRL38EGhPNQKqZUP
…2026-07-19 # Conflicts: # frontend/src/styles/custom-properties/colors.scss
📊 Dependency Size ChangesWarning This PR adds 165.4 kB of new dependencies, which exceeds the threshold of 100 kB.
Total size change: 165.4 kB |
Preview DeploymentPreview deployments for this PR are available at:
The preview environment will start automatically on first visit. Subsequent pushes to this PR will update the Run locally with Dockerdocker pull ghcr.io/docsales/vikunja:pr-10
docker run -p 3456:3456 ghcr.io/docsales/vikunja:pr-10Last updated for commit 6192b75 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Merges upstream's latest 21 commits (mostly accessibility fixes, a few bugfixes, dependency bumps) into this fork's main. One conflict, resolved:
colors.scss: both sides added new tokens near the same lines. Kept our--brand-pink/--brand-navyreference swatches and ported upstream's new--text-mutedtoken (same saturation/lightness upstream computed for 4.5:1 contrast, hue moved from their 220deg to our 331deg brand hue). Everything else (their--switch-view-active-background, dark-mode tokens) auto-merged cleanly since they reference--primary/--grey-*variables, which already resolve to our brand colors.What's incoming
fix(a11y)commits: editor toolbar tab stops, comment/attachment count announcements, bucket selector labeling, auth hero contrast, kanban bucket structure, expanded/sort/toggle state exposure, login tab order/errors/dialogs.fix(search): subtask parent search condition mirrored into ParadeDB BM25 matching.fix(user): stop double-encoding FrontendSettings on UpdateUser.fix(tasks): NULL-safe, search-aware subtask root condition.feat(editor): alt-text prompt on image insert.Verification
go build ./...clean (only the pre-existing, unrelatedexamples/plugins/exampleissue).pnpm install --frozen-lockfile+pnpm run buildclean.Not auto-merging this one - wanted eyes on it given the scope (21 commits) before it lands.