Skip to content

Refresh components, theme and tooltip for a modern instrument-panel look (v5.6.0) - #650

Merged
novykh merged 5 commits into
masterfrom
ui-polish-components
Nov 5, 2026
Merged

novykh merged 5 commits into
masterfrom
ui-polish-components

Conversation

@novykh

@novykh novykh commented Nov 5, 2026

Copy link
Copy Markdown
Member

Refresh the components, theme and tooltip for a modern instrument-panel look. Existing prop contracts are kept. Released as v5.6.0.

What changed

  • Theme: new tokens (controlBorder, textInfo, primaryHover, primaryPressed, *SoftText), constants.CONTROL_SIZES (24/28/32px) shared by buttons, fields, selects and icon buttons, light primary is now green70, and IBM Plex Sans in typography.
  • Button: link flavour and compact. IconButton: square control sizes, focusableWhenDisabled, and the standard Tooltip. ButtonGroup variant="segmented". New useRovingFocus hook for toolbars.
  • Tabs: variant, icon, count, built-in tab roles and arrow keys.
  • Pill: soft look by default (filled keeps the old look), dot, muted. New StatusWord and MarkCounts.
  • Tooltip: one dark bubble for every non-plain content. Accepts a string, a node, a function, or { title, description }. New TooltipInk inks custom content (and your own dark surfaces) with tooltipText.
  • Focus: exported focusRing, focusRingOutline, fieldFocusRing and fieldFocusWithinRing mixins. Keyboard focus rings across controls.
  • Toggle: aria-* and title reach the hidden switch input. Icon falls back to currentColor.
  • One shared floating shadow for drops, menus, Select and copy feedback.

Breaking

  • News is no longer exported. No usage found in cloud-frontend or charts.

Tests

  • Jest: 142 suites, 1645 tests pass. build:cjs and build:es6 succeed.
  • Every changed component has Storybook stories.

- Theme: green70 primary with hover/pressed keys, surface ladder (grey195
  panels, grey190 sidebar), neutral field borders (controlBorder grey130),
  soft status text keys, dark limedSpruce tooltip, flat panelBgGrad.
- Controls sized by CONTROL_SIZES (24/28/32), green keyboard focus rings,
  0.4 disabled; Button link flavour and compact size, IconButton sizes,
  focusableWhenDisabled and useRovingFocus, segmented ButtonGroup.
- Pill soft default with filled, dot and muted; StatusWord and MarkCounts.
- Tabs line/contained variants with icon and count slots and tablist ARIA.
- Tooltip: 600ms delay, no arrow, { title, description } content, bubble
  inks custom content with tooltipText; TooltipInk for app-drawn surfaces;
  IconButton uses the standard bubble; inputs keep a given background on
  focus.
- Exported focusRing mixins plus fieldFocusWithinRing.
- IBM Plex Sans in global styles; News organism removed.
- Storybook autodocs and usage pages for every component, story render test
  in light and dark, Playwright visual test setup.
…and Toggle

- Focusable disabled IconButtons cancel activation so they cannot submit or
  reset a surrounding form, while keeping focus and their tooltip.
- Tooltip treats only plain objects with title or description as the
  structured card; arrays and other React content render as given.
- useRovingFocus clamps the active index to the remaining items so one
  item always stays reachable by Tab.
- StatusWord renders its detail node without string coercion.
- Toggle forwards aria-* and title from toggleProps to the switch input.
…Word detail

- One visuallyHidden mixin for toggle, checkbox, mark counts and copy live region
- controlSize falls back to the canonical CONTROL_SIZES
- dropdownStyles exports floatingShadowValue so Select no longer parses a css fragment
- StatusWord renders detail={0} with its separator
- Merge MarkCounts tests that shared one arrangement
@novykh
novykh merged commit 265a431 into master Nov 5, 2026
3 checks passed
@novykh
novykh deleted the ui-polish-components branch November 5, 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