Skip to content

feat(frontend): Vuetify labs checkbox groups - #1001

Merged
ajslater merged 9 commits into
developfrom
vuetify-checkbox-groups
Oct 29, 2026
Merged

ajslater merged 9 commits into
developfrom
vuetify-checkbox-groups

Conversation

@ajslater

Copy link
Copy Markdown
Owner

Summary

Adopts Vuetify 4.3's labs VCheckboxGroup in six places, one commit per component so any one can be reverted on its own.

  • Labs registration: vuetify({ autoImport: { labs: true } }). A group hands its own (possibly unset) color to its boxes, so VCheckboxGroup defaults to primary like VCheckbox. Groups line up with lone checkboxes app-wide: global.scss drops the labs CSS's 16px label and 6px box indents and spaces inline boxes 16px apart.
  • Derived formats: the write formats, titled by comicbox, are added to tagging-choices.json instead of being hand-written in two components.
  • Fix: require a default write format. ComicboxTaggingDefaultsSerializer.validate_default_formats rejects an empty list, a non-list and unknown ids. comicbox refuses a write with no formats, and the admin tab autosaves, so unchecking the last format used to break every online-tagging write.
  • Edit Tags → Formats: checkboxes instead of a chip select. The last checked format is disabled and the group says why; this replaces enforceMinFormat and its undeclared lastFormats. On md and up the hint sits beside the boxes, so the toolbar stays one 64px row; on phones it stacks and the toolbar wraps.
  • Admin → Tagging → Metadata Formats: same at-least-one rule; the docs links stay in the hint (messages, since hint is one string). A row already saved empty shows an error instead of autosaving a default.
  • Online Tag → Sources: a source without an API key is disabled with a hint pointing to Admin → Tagging; an empty selection explains why Search is disabled.
  • Table column picker: one group per category. Clicks still go through toggleColumn, so a new column lands in canonical position.
  • Browser drawer → Show Collection Levels: one click still sends one setSettings call with only the flag it flipped.
  • Admin → Defaults → Show Collections: the locked top collection's reason is the group's hint.

vuetify-split-btn makes the same one-line vite.config.js change, so whichever merges second applies cleanly.

Test plan

  • New specs: edit-panel-formats, browser-settings-collection; new cases in tagging-tab, launcher-dialog, browser-table-column-picker-standalone, defaults-tab. Each first mount asserts the VCheckboxGroup component resolves. Backend: empty, non-list and unknown formats are 400s.
  • make lint, make ty, make test-frontend, make build-frontend, make test pass.
  • Checked all six in the dev stack at desktop and phone width: alignment, disabled-box hints, Space toggles a focused box, each group's accessible name.

🤖 Generated with Claude Code

ajslater and others added 9 commits October 29, 2026 14:40
Auto-import the labs components (VCheckboxGroup, VSplitBtn). A checkbox
group passes its own color to its boxes even when unset, so give groups
the primary color checkboxes already default to, and line groups up with
a lone checkbox: drop the labs CSS's 16px label and 6px box indents and
space inline boxes apart.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the write formats, titled by comicbox, to tagging-choices.json so the
tag editor and the admin Tagging tab stop hand-writing the list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
comicbox refuses a write with no formats, so an empty default made every
file in an online-tagging session fail. Reject an empty list, a non-list
and unknown format ids.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the Formats chip select with checkboxes. The last checked format
is disabled and the group says why, which replaces enforceMinFormat and
its undeclared lastFormats. The hint sits beside the boxes on a wide
toolbar and under them, with the toolbar wrapping, on a narrow one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The last checked format is disabled and explained, so auto-save can't
write an empty list. A row already saved empty shows an error instead of
auto-saving a default on open. The docs links stay in the field's hint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A source without an API key is disabled with a hint pointing to Admin >
Tagging, and an empty selection explains why Search is disabled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each category is a group titled by its label. A click still goes through
toggleColumn, so a new column lands in canonical position, not at the end.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A click still sends one setSettings call with only the flag it flipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The locked top collection's reason becomes the group's hint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ajslater
ajslater merged commit 7d7a543 into develop Oct 29, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant