Dechonk the UI: default controls to the small size variant - #4088
Dechonk the UI: default controls to the small size variant#4088wailingwombat wants to merge 5 commits into
Conversation
… size Console UI density is dominated by the medium control size, which the vast majority of call sites already override with `small`. Flip the default so untouched call sites get the compact control, and keep `medium` available as an explicit opt-out on Button and Input2. Also correct the Select large padding, which was falling through to the small value, so the three sizes line up with Input2 at 32/40/48px. Co-authored-by: Anna Nguyen <wailingwombat@users.noreply.github.com>
Menu rows were 36px tall from 8px vertical padding, which dwarfs the 32px trigger they hang off of. Drop to 4px vertical / 12px horizontal so a menu row matches the control that opened it. Co-authored-by: Anna Nguyen <wailingwombat@users.noreply.github.com>
…wed small prop Co-authored-by: Anna Nguyen <wailingwombat@users.noreply.github.com>
Soffi AI SummaryThis PR reduces the visual density ("dechonks") of the Console UI by flipping the default size variant for core form controls — Button, Input2/ComboBox, Select/SelectButton, and the legacy honorable Input — from Accompanying changes tighten dropdown list-item padding (from 8px/16px to 4px/12px) so menu rows visually match their now-shorter 32px triggers, add an explicit ChangesCompact UI controls (32px default size)
Updated: 2026-08-31 17:04 UTC |
|
Storybook preview: https://6a8c1fbd32d6c1cc8fc131a5-nowihblckw.chromatic.com/ |
Keeps the size chain honest now that small is the default, and stops eslint flagging the prop as unused.
… inputs Setting caption on the honorable Input root also shrank textareas, because honorable resolves the typography flags from props and the caption resolver runs after body2 regardless of declaration order. Put the smaller type on InputBase instead, where multi-line inputs never reach it, and give the large variant its 14px back.
|
plural review this |
Addresses PROD-4897 — dechonk the UI.
The theory behind this PR is that the console isn't chonky because its controls are badly designed, it's chonky because it defaults to the
mediumvariant of controls that already ship a perfectly goodsmallvariant. Most call sites already know this: 302 of the 535<Button>usages inassets/srcpasssmallexplicitly. This flips the defaults in the design system so the remaining ones come along too, rather than editing hundreds of call sites.No call site was touched and no size variant was removed, so reverting is a matter of flipping the defaults back.
What changes
Controls now render at 32px instead of 38–40px.
Buttonmedium, 38px, 14px typesmall, 32px, 12px typeInput2(andComboBox, which wraps it)medium, 40px, 14px typesmall, 32px, 12px typeSelect/SelectButtonmedium, 40pxsmall, 32pxInputButtonandInput2gain an explicitmediumprop so anything that genuinely needs the old size can ask for it, and an explicitsmallstill wins over it.largeis untouched, and the 16 buttons that pass it stay large.Dropdown menu rows got tighter.
ListBoxItemwas 8px vertical / 16px horizontal padding, making a 36px row hang off a control that is now 32px. It's now 4px / 12px, so a menu row matches the trigger that opened it.ListBoxFootermoves in step.Multi-line inputs keep the larger type. Shrinking a textarea's font to 12px makes prose genuinely harder to write, so the smaller type is set on honorable's
InputBasepart rather than on theInputroot — textareas render through theTextAreapart and never see it. Worth knowing if you touch this: settingcaption: trueon the root does not work here, because honorable resolves those typography flags from props and itscaptionresolver runs afterbody2regardless of declaration order, socaptionsilently wins. That's also why the 12px is written out asfontSize/letterSpacinginstead of using the alias, which would drag its own 16px line height along with it.Bug fix in
Select: the content padding readsize === 'medium' ? 9 : 5, so asize="large"select silently rendered with small padding. It's nowlarge ? 13 : medium ? 9 : 5, which lines the three sizes up withInput2at 32 / 40 / 48px.What this deliberately does not touch
Chips are already dense at 24px,
IconFrame'smediumis 32px and now lines up with the new control height, and table rows, tabs and card padding are a separate axis of chonk. If the control-size change lands well, those are the natural follow-ups.Test Plan
tsc --build, eslint, prettier and both vitest suites (design system + console, 167 tests) pass.Beyond that this is a pure default-size change with no behavioral surface, so verification was visual. I ran the design system Storybook and measured the rendered results in the browser:
smallones, andlargebuttons are still visibly larger.large, 32px for default, 32px forsmall, with 14/12/12px type respectively.Buttons — items 3 and 4 are the default size, items 5 and 6 are explicitly
small, and they now match:Button story showing default buttons matching the small variant
Select with its dropdown open — trigger and menu rows are now the same scale:
Select story with an open dropdown menu
Inputs — the first pair is
large, the rest are default andsmall:Input story showing large, default and small input sizes
To try it locally, run
yarn startinassets/. The vite config aliases@pluralsh/design-systemstraight todesign-system/src, so no design-system build step is needed. Worth looking at: rows that mix aButtonwith anIconFrameor aSelect, forms that mix legacyInputwithInput2, and long dropdown menus withdescriptiontext on their items.Test environment: https://console.your-env.onplural.sh/
Checklist
Plural Flow: console
To show artifacts inline, enable in settings.