Skip to content

Adopt shadcn Nova menus and buttons, with contextual icon sizes - #625

Merged
MaggieAppleton merged 9 commits into
mainfrom
menu-standard
Oct 15, 2026
Merged

MaggieAppleton merged 9 commits into
mainfrom
menu-standard

Conversation

@MaggieAppleton

@MaggieAppleton MaggieAppleton commented Oct 15, 2026 •

Copy link
Copy Markdown
Collaborator

Adopts shadcn's Nova style as the standard for menus and buttons, makes icon size contextual, and records the rules in apps/web/DESIGN.md.

Menus

Shared --menu-* tokens and .app-menu-item / .app-menu-separator now follow Nova:

  • Panel padding stays at 4px.
  • Items are 28px, with 4px × 6px padding, a 6px icon gap and 6px corners. The normal and compact densities now match.
  • Dividers are 1px and run through the panel padding to both edges, with 4px above and below.
  • The Build blockers popover uses the shared item tokens. Its titles used to sit high in 34px rows.
Before After
Menu before Menu after
Blockers before Blockers after

Buttons

  • Scale: btn-xs 24px, btn-sm 28px, btn-md 32px, btn-lg 36px, plus icon-only btn-icon-xs (24px) and btn-icon (28px).
  • Renames: btn-compact becomes btn-xs (20 uses). btn-sm grows from 24px to 28px (80 uses).
  • Icons: each size sets its icon through --btn-icon-size: 12px at xs, 14px at sm, 16px at md and lg.
Before After
Buttons before Buttons after

Icons

LineIcon now defaults to 16px, and explicit 14px icons are now 16px.

Size is contextual:

  • 16px: menus, medium and large buttons, icon buttons and standalone icons.
  • 14px: beside small text, such as badges (IconLabel stays at 14px), pills, capsules and small buttons.
  • 12px: compact controls.

Design contract

packages/icons/src/icon.tsx changed only its default size, and its props still spread onto the <svg> as before. Its reviewed exception is renewed in a separate commit, approved by the design owner.

Verification

  • bun run types passes.
  • bun test shows no new failures against a clean base on the same machine. The design-contract, design-record, dprint and oxlint checks pass on the changed files.
  • Not run locally: the Chromium E2E suite. btn-sm is 4px taller, so layout assertions may move; CI will tell.
flowchart LR
  T["--menu-* tokens (Nova)"] --> MI[".app-menu-item / MenuItem"] --> M["every shared menu"]
  T --> BB["build blockers popover"]
  S["btn-xs / sm / md / lg"] --> I["--btn-icon-size 12 / 14 / 16"]
  D["LineIcon default 16"] --> C["contextual sizes: 16 / 14 / 12"]
Loading

🤖 Generated with Claude Code

@MaggieAppleton
MaggieAppleton force-pushed the menu-standard branch 5 times, most recently from eef1c2e to c402a38 Compare October 15, 2026 11:19
MaggieAppleton and others added 9 commits October 15, 2026 12:29
Menus: 4px panel, 28px items (4px by 6px padding, 6px gap, medium radius),
edge-to-edge 1px dividers with 4px above and below. Normal and compact density
now match.

Buttons: btn-xs 24px, btn-sm 28px, btn-md 32px, btn-lg 36px, btn-icon-xs and
btn-icon; btn-compact becomes btn-xs. Each size sets its icon through
--btn-icon-size: 12px at xs, 14px at sm, 16px above.

Icons default to 16px. Size is contextual: 16px in menus, buttons and
standalone, 14px beside small text such as badges, 12px in compact controls.
DESIGN.md records the menu, button, icon and progressive-disclosure rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
packages/icons/src/icon.tsx changed only its default size from 14 to 16. Its
props still spread onto the <svg> as before; caller styling flows the same way.
Renewal approved by the design owner in session.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nova's btn-sm uses the extra-small text role, which left Reopen and Discard
smaller than the attribution and "Show in document" beside them. The resolved
footer's buttons keep the small text role, as its link already does.

The icon-size check now expects the size a button sets through
--btn-icon-size rather than the icon's declared width, since the button
decides its icon size.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The "Show in document" link's negative margin now matches btn-sm's 10px
padding, so its glyph lines up with the attribution avatar again, and the
avatar returns to 14px beside the small attribution text to match the 14px
icon btn-sm sets. The resolved footer uses Nova's 4px button gap so the link
and both actions still fit one line at phone width, and wraps rather than
squeezing the link when a card is narrower.

The icon-size check measures each icon's intended size from an out-of-flow
copy, so icons a container sizes in CSS (btn-sm, compact icon buttons) are
compared with that size rather than their width attribute.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 20 files whose reviews this PR voids change only icon sizes (14 to 16,
icon defaults), btn-compact to btn-xs, size-3.5 to size-4, and a literal
text-sm on four resolved-footer buttons. No class, style or spread data flow
changed. Approved by the design owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Reopen, Discard and the confirm prompt keep btn-sm's own extra-small text
instead of overriding it, and the Show in document link and the decision's
attribution use the same --text-xs role, so the settled card's footer reads as
one quiet size, as every other small button does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only literal text-size classes changed in resolved-actions.tsx and card.tsx; no
class, style or spread data flow changed. Approved by the design owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… after rebase

Only icon sizes and btn-compact to btn-xs changed on top of main; no class,
style or spread data flow changed. Approved by the design owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…controls

After rebasing onto the sidebar audit work, only icon sizes (14 to 16) changed
in account-menu.tsx, project-sidebar.tsx and design-audit/controls.tsx; no class,
style or spread data flow changed. Approved by the design owner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaggieAppleton
MaggieAppleton merged commit d66b163 into main Oct 15, 2026
24 checks passed
@MaggieAppleton
MaggieAppleton deleted the menu-standard branch October 15, 2026 11:53
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