Repository navigation
Adopt Input and Select everywhere and refresh the docs screenshots - #79
Merged
Merged
Conversation
Every text-like field and every dropdown in the dialogs, the Settings panels, the admin-portal modals and both login screens is the shared Input or Select: one height, focus ring, label wiring and error announcement. Labels are passed as `label` (fields that had an unlinked <label> are now reachable by label), add rows carry an aria-label, and every value, handler, disabled, required, min, placeholder, id and name is unchanged. Empty "Select …" entries the user can pick back stay selectable options. Select gains `groups` (labelled optgroups) so the site form keeps its country regions. Input and Select generate stable ids with useId. color-scheme is set per theme block, so native date pickers follow the theme; the per-dialog dark-only hacks are gone. The documented exceptions stay raw (inline row-rename editors, the two ARIA comboboxes, the Gantt cell editor, the header SiteSelector, the phone-only Settings section picker, the credentials copy fields) and rawFormControls.test.ts pins them: raw controls are counted per component against an allowlist that may only shrink. The colour allowlist is lowered for the stylesheets whose removed rules held literals. Also fixes the demo seed on a real PostgreSQL: the notifications insert reused placeholders in the SELECT list and the duplicate check, which is deduced as text vs character varying and refused; the key is passed separately now and a test pins the statement shape. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FPFQEucReHG1Wo9R6PpEpj
All 49 screenshots retaken with the canonical pipeline (capture.py,
capture_collab.py, capture_admin.py) against the one demo seed and the
1.7–1.9 UI. The collab capture read GET /api/projects as a bare list; the
endpoint answers {"items": [...]}, so the helper accepts both.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FPFQEucReHG1Wo9R6PpEpj
Deploying milestone-planner with
|
| Latest commit: |
089a049
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://2b1474e3.milestone-planner.pages.dev |
| Branch Preview URL: | https://fix-ui-guidelines-debt-3.milestone-planner.pages.dev |
…nder Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FPFQEucReHG1Wo9R6PpEpj
CI's diff-coverage gate counted the one-line onChange handlers of the converted fields as uncovered: the tests rendered them but never changed them. Each dialog and panel test now fires a change on every converted field and asserts the value or the payload it ends up in (diff coverage 77 % -> 99 %). The self-only staff field in AssignmentModal gets a constant label: that branch is always a staff assignment, so the equipment alternative was dead. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FPFQEucReHG1Wo9R6PpEpj
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.
Why
The last item of the UI_GUIDELINES debt plan: dialogs, Settings panels, the admin-portal modals and both login screens still styled their own
<input>/<select>with local.inputclasses (85 text-like inputs and 28 selects across 30 files), so field height, focus ring, label wiring and error announcement differed from form to form. The docs screenshots also predated #76–#78 and the new demo seed.Release 1.9.0.
What changed
Input/Select(components/common). Visible labels are passed aslabel(same text, including*), so fields that had an unlinked<label>are now reachable by label for the first time; add-row inputs carry anaria-label. Everyvalue, handler,disabled,required,min,placeholder,idandnameis unchanged. Empty "Select …" entries that could be picked back stay normal, selectable options (placeholderrenders a disabled option and is used only where that is the intent).Selectgainsgroups(labelled<optgroup>s after the flat options) so the site form keeps its country regions.Input/Selectgenerate theirs withuseId()instead of a per-render random id.color-schemeis set per theme block invariables.css/themes.css; the per-dialogcolor-scheme: darkand inverted calendar-icon hacks are gone (a light-theme user used to get a dark calendar popup in two dialogs).TagPickersearch), the GanttCustomColumnCelleditor, the headerSiteSelector, the phone-onlySettingsHubsection picker and the read-only copy fields ofCredentialsModal.src/components/__tests__/rawFormControls.test.tscounts raw text-like inputs and selects per component (comments ignored) againstrawFormControlsAllowlist.json, which holds exactly those exceptions. A count may only fall, and the allowlist must not name a file that no longer needs it. The colour ratchet was lowered for the 13 stylesheets whose removed rules held literals.seed_demostopped on a real PostgreSQL right before the notifications and staff notes — the notifications insert reused$1/$2/$7both in theSELECTlist and in theWHERE NOT EXISTScomparison, which Postgres deduces as text vs character varying. The key is now passed as its own placeholders;test_no_statement_uses_a_placeholder_twicepins the shape. The collab capture readGET /api/projectsas a bare list; it answers{"items": [...]}, so the helper accepts both.Visible changes to check
bg-primary, small radius).Select groups).Tests
getByLabelTextin its existing test (new assertions in the Equipment, Predefined phases, Sites, Phase, Subphase, Project, Vacation, Calendar/EquipmentBlock, admin create and organization-details tests); a newAbsenceTypeSelect.test.tsxcovers the colour dot in the icon slot, thearia-label, the "No type" choice and the number/null mapping.FormControls.test.tsx: option groups render as labelled optgroups; the ratchet test checks its own counter (typed, untyped and multi-line tags, native-only inputs, comments).tsc, eslint on the 42 changed files andnpm run buildare clean. Backend:ruff, the seed tests (11) andmkdocs build --strictpass.trail checkreports 18 "conflicts"; all are keyword matches ("Start Date"/"End Date" fields against a learning about clearing state at start, "shared picker", the removed SQL screenshot file, allowlist numbers) — nothing a learning ruled out is reintroduced.https://claude.ai/code/session_01FPFQEucReHG1Wo9R6PpEpj
Generated by Claude Code