Skip to content

feat(ui): settings-form UX — single-select, token form, checkbox & date-field consistency#638

Merged
CybotTM merged 3 commits into
mainfrom
feat/settings-form-ux
Jul 16, 2026
Merged

feat(ui): settings-form UX — single-select, token form, checkbox & date-field consistency#638
CybotTM merged 3 commits into
mainfrom
feat/settings-form-ux

Conversation

@CybotTM

@CybotTM CybotTM commented Jul 16, 2026

Copy link
Copy Markdown
Member

Summary

The settings-form UX review, implemented. Consolidates several reported issues into one coherent change.

Changes

  • Single-select reads as single, not multiSearchableSelect single now shows the chosen value IN the input (React-Select single style) instead of as a chip beside an empty search box. Opening lists all options (current highlighted, no pre-filter); typing filters; picking replaces; closing without a pick reverts. Multi keeps its removable chips + inline search unchanged.
  • API-token form redesign — create form first with a clear heading, token list below. "Full access" is a mode toggle ("By resource" / "Full access") that hides the scope grid and shows a warning that the wildcard grants all current and future rights (not a snapshot — verified against ApiScope::grants). The far-right scope table becomes a narrow, content-sized grid with read/write checkboxes right after each resource and a three-state select-all checkbox per column header.
  • Help-icon checkboxes align.field-check-row (Worklog-Sync prefs, admin dialogs) joins the same two-column grid as the plain checkboxes (label right-aligned col1, [checkbox + ⓘ] col2) instead of a left-aligned flex row.
  • Single date-field border — the generic .field input rule no longer out-specifies the borderless .date-field inside its pill wrap, so date fields show one border, not two.
  • 24px checkboxes — bumped from 20px to meet WCAG 2.2 AA target size (2.5.8), with the accent color.

Verification

  • bun run typecheck / lint clean; full suite 579 pass (incl. new tests for the value-in-input single revert, the token column select-all + indeterminate, and full-access hides-grid).
  • Visual at 1440px on the dev stack: single-select shows its value in the input; the token scope grid is narrow with grouped checkboxes; date fields have a single border. The .field-check-row sync checkboxes are data-gated (need a connected ticket system) so verified structurally via the WorklogSyncPreferences a11y test + the shared grid CSS.

Built largely via a sequential dynamic workflow; each piece was reviewed on its merits (one agent's scope-grid width was corrected — 1fr stretched it, leaving the far-right gap it was meant to fix).

Copilot AI review requested due to automatic review settings July 16, 2026 07:52
@sonarqubecloud

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the API token creation interface, introducing a segmented access mode control ("By resource" vs "Full access"), a redesigned scope grid with column-wise "select all" checkboxes, and improved accessibility for checkbox controls across several components. Additionally, the SearchableSelect component was updated to distinguish single-select and multi-select behaviors, displaying single-select values directly within the input. The review feedback suggests utilizing SolidJS's native prop:indeterminate binding in ApiTokenControls.tsx to simplify the checkbox state management, which would eliminate the need for manual refs and the createEffect hook.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread frontend/src/components/ApiTokenControls.tsx
Comment thread frontend/src/components/ApiTokenControls.tsx
CybotTM added 2 commits July 16, 2026 10:02
The generic .field input rule out-specifies .date-field-wrap > input.date-field
{border:0}, so the date input drew its own border inside the pill wrap's — a
double border. Exclude .date-field from the generic input border/focus rules so
the wrap carries the only border. And bump the settings checkboxes from 20px to
24px (WCAG 2.2 AA target size 2.5.8) with the accent color.

Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
Single-select SearchableSelect read like a multi-select — the chosen value sat
as a chip beside an empty search box. Rewrite single to a value-in-input (React-
Select single) control: the input DISPLAYS the selected label; opening lists all
options with the current one highlighted (no pre-filter); typing filters; picking
replaces the value; closing without a pick reverts to the selected label. A
`searching` flag (set on the native onInput, real typing only) gates filtering so
the resting label never pre-filters. Multi keeps its removable chips + inline
search unchanged.

Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
@CybotTM
CybotTM force-pushed the feat/settings-form-ux branch from c1787be to fe59260 Compare July 16, 2026 08:04
Token form: create form first (clear heading), token list below. "Full access"
is now a mode toggle ("By resource" vs "Full access") that hides the scope grid
and shows a warning stating the wildcard grants all current AND future rights (not
a snapshot — verified against ApiScope::grants). The scope table is replaced by a
narrow content-sized grid with the read/write checkboxes right after each resource
and a three-state select-all checkbox per column header.

Checkbox consistency: help-icon checkbox rows (.field-check-row, in
WorklogSyncPreferences and AdminCrudShell) join the same two-column grid as the
plain checkboxes — label right-aligned in column 1, [checkbox + help] in column 2
— instead of a left-aligned flex row. The label is a col1 <label for>; the help
trigger stays outside it so clicking it never toggles the box.

Signed-off-by: Sebastian Mendel <info@sebastianmendel.de>
@CybotTM
CybotTM force-pushed the feat/settings-form-ux branch from fe59260 to db9860a Compare July 16, 2026 08:15
@CybotTM
CybotTM merged commit 6f0199e into main Jul 16, 2026
15 checks passed
@CybotTM
CybotTM deleted the feat/settings-form-ux branch July 16, 2026 08:22
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.

2 participants