Skip to content

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2) - #686

Merged
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence
Jul 9, 2026
Merged

refactor(ui): Item primitive adoption for state-fill list rows (convergence round 2)#686
jackwener merged 2 commits into
mainfrom
feat/item-row-convergence

Conversation

@jackwener

Copy link
Copy Markdown
Member

Round 2 of notes/ui-convergence-map-2026-07-09.md: Item becomes the one list-row implementation for state fills.

  • Item gains selected (→ governed --state-selected-bg token, data-selected hook) and interactive (suppress hover/pressed for inert geometry rows)
  • Migrated: models 连接行 (bespoke data-default fill retired; fix(desktop): 模型连接 rows speak the same row language as the catalog below #675 geometry preserved), daily-review archive rows (quiet-button recipe → Item with selected)
  • providerCatalogRow was already an Item — no bespoke fill left to fold
  • Deferred with reasons (recorded in the map): enabledProviderTrigger (accordion header semantics), settingsOsPermissionRow (static grid + contract-pinned structure, no fill), daily-review session rows (composite hover target), skills row (inert grid; interactive=false now exists for a future adoption), sidebar rows (densest contracts, by design)

Verified in worktree: ui 46/46 + desktop 2291/2291 exit-code gated, dead-css clean, alignment auditor clean, CDP captures on all four touched fixtures. Implemented by an opus worktree agent to the map spec.

jackwener added 2 commits July 9, 2026 22:10
…d 2)

Extend primitives/item.tsx with a `selected` prop (data-selected →
--state-selected-bg, the governed 6.5% foreground-alpha token) and an
`interactive` gate so inert geometry-only rows can borrow Item's
media/content/actions layout without a hover fill. Item already speaks
hover 4% / pressed 8% via Base UI useRender + render-prop composition.

Migrations:
- models 连接行 (enabledConnRow): data-default → Item `selected`; retire the
  bespoke [data-default] fill rule in models.css. #675 mx-2/pl-10/pr-6
  geometry preserved.
- daily-review archive rows: UiButton variant=quiet → Item render=<button>
  with `selected` for the active archive; ItemContent stacks title over the
  tabular-nums meta line. daily-review.css keeps only geometry + the
  selected-border accent.
- providerCatalogRow: already on Item (round 1 groundwork) — no change
  needed; its remaining CSS is pinned list-separator/logo-plate geometry.

Deferred/skipped (disproportionate contract risk, no state-fill to
converge — noted for a later round):
- enabledProviderTrigger: a Base UI AccordionTrigger header, not a list row;
  its hover already uses --state-hover-bg.
- settingsOsPermissionRow: static grid row w/ status ::before stripe, pinned
  by permissions-unified-card (grid/divider/div-actions) — Item's flex model
  conflicts, zero interactive fill to fold.
- daily-review session rows: composite (hover on the <li> container +
  non-interactive preview sibling outside the button) — not a single
  state-fill row.
- maka-skill-library-row: bespoke 3-col grid + 38px icon tile, hover on the
  parent <li>, pinned by skills.test.ts; interactive={false} support added
  so a future round can adopt without behavior change.
- sidebar .maka-list-row/.maka-nav-row: untouched by design (densest pins).

Verify: desktop 2291/2291, ui 46/46, check-dead-css clean,
audit-alignment clean (no new findings on any fixture).
@jackwener
jackwener merged commit 5532db7 into main Jul 9, 2026
3 checks passed
@Astro-Han
Astro-Han deleted the feat/item-row-convergence branch July 14, 2026 05:05
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