Patch changes
- 7d91721
Preserve ButtonGroup's outer corners while an overlay control is open.
Latest updates and features. See what changed in each release.
Preserve ButtonGroup's outer corners while an overlay control is open.
Update the bundled Base UI dependency to version 1.8.0 and expose its Combobox item collection and functional Toast update APIs.
Add ButtonGroup component for joining a small set of tightly-coupled buttons into a single control — most commonly a split button (a primary action next to a dropdown trigger). Handles layout only: children keep their own variant, size, and shape while the group flattens inner corners and overlaps borders so the buttons share one seam. Renders role="group". For grouping multiple independent buttons or inputs, use Toolbar instead.
Add sidebar open-change completion callbacks.
Add the TagInput component for creating and removing free-form values.
Add InlineCopyText, a compact borderless copy control for short values in dense interfaces and table cells. It accepts string or rich children, Text typography props excluding heading variants, an explicit copied value for rich content, localized accessible labels, inline success feedback, and hover or focus icon reveal.
Add an optional yAxisMinInterval prop to TimeseriesChart for discrete data.
Add support for footer text below TimeseriesChart tooltip values.
Add a strict responsive LayerDialog component with automatic dismissal composition, alert-dialog semantics, mobile drawer behavior, and application-wide defaults for its built-in close and cancel copy through KumoLocaleProvider.
Add GlobeMap, an SVG orthographic globe with boundary-free hatched land, horizon-faded geographic markers, optional geographic guides, pointer and keyboard rotation, automatic rotation, Kumo-themed tooltips, and no WebGL or ECharts requirement.
Reset the native fieldset padding in radio and checkbox groups.
Refine Empty state typography and balance description text when it wraps.
Support nested LayerDialog drawers with independently layered backdrops and responsive mobile actions.
Add a plain CodeHighlighted variant for frameless, padding-free code blocks with a correctly positioned copy button.
Document app-root CSS isolation for reliable stacking of portaled components.
Update formatting for Vite+ 0.3.1.
Use the up/down double chevron in Combobox value and input triggers to match Select.
Add a visual regression contract for truncating text in default Tooltip triggers.
Add scrollItemIntoView() to preserve the position of visible sidebar items while honoring alignment for offscreen items.
Allow default Tooltip trigger children to control their line height, preventing inherited text from being clipped.
Position dialogs near the top of the viewport instead of vertically centering them.
Use the elevated surface color for even rows in the default Table variant.
fix(select): align the trigger surface with form controls
Select triggers now use bg-kumo-control, including their open and disabled
states, so they match Input, Combobox, and the rest of the form-control family.
Consumer background classes can still override the default without using
!important. The popup remains on the floating bg-kumo-base surface.
fix(select): anchor the popup below the trigger and expose placement props
Select.Positioner relied on Base UI's alignItemWithTrigger default (true),
which overlays the popup on the trigger so the selected option's text lands on
the trigger's value text, emulating a native <select>. Options always render at
text-base, so on xs/sm triggers the popup was much taller than its anchor,
and Base UI's compensating shift detached it from the trigger — on xs it
overhung by 12.5px above and 45.5px below and sat 8px to the left, covering
adjacent content.
The popup now prefers bottom placement and is offset from the trigger, with
Base UI's collision avoidance still flipping it automatically when the preferred
side lacks space. Placement is configurable:
| prop | default | notes |
|---|---|---|
side | "bottom" | preferred side; still flips automatically on collision |
sideOffset | 4 | gap between trigger and popup, matching Combobox/Autocomplete |
align | "start" | alignment along the trigger edge |
alignOffset | — | additional offset along the alignment axis |
alignItemWithTrigger | false | opt back in to the native <select> overlay |
The remaining Base UI Positioner controls are also forwarded unchanged:
anchor, arrowPadding, positionMethod, collisionAvoidance,
collisionBoundary, collisionPadding, sticky, and
disableAnchorTracking.
The popup also now tracks the trigger width via min-w-(--anchor-width) instead
of min-w-[calc(var(--anchor-width)+3px)], which existed to visually offset the
old item-alignment shift.
Allow non-heading Text variants to inherit line height from their surrounding context.
Make Combobox.Input sit flush with the top and sides of Combobox.Content and remove its bottom corner rounding.
Reduce the trailing inset for buttons inside large InputGroup addons.
Add the Text heading variant with a 16px semibold default and a 20px
size="lg" option. The variant defaults to a span, so callers choose heading
semantics explicitly with as. Deprecate the numbered heading1, heading2,
and heading3 variants.
Collapsible.DefaultTrigger now uses text-kumo-default (neutral) with font-medium instead of the blue text-kumo-link color.
deprecate MenuBar in favor of segmented Tabs
MenuBar component (and its exports) as @deprecated; it will be removed in a future releaseTabs with variant="segmented" (the default Tabs variant)MenuBar is unchanged for existing consumersMenuBar documentation page and demos from the docs siteFix Toast background clipping the ring outline at the corners — the inner background layer's radius (11px) was smaller than the root's rounded-xl (12px), painting over the ring at the corners. Matched them up.
Restore disabled and loading state handling for Toolbar.Button so disabled
controls expose the correct semantics and cannot be activated.
Normalize shadows and outlines on tip-style overlays (Popover, Tooltip, ClipboardText, Chart tooltip).
shadow-kumo-tip-shadow color override so shadows use Tailwind's default translucent black instead of an opaque light-gray in light mode.shadow-md; ClipboardText's "Copied" toast keeps shadow-lg to match the Toast component.outline-kumo-fill to outline-kumo-line, matching every other floating surface (Dropdown, Select, Combobox, Dialog, etc.).kumo-tip-shadow → kumo-arrow-edge and kumo-tip-stroke → kumo-arrow-stroke. The tokens draw the border on Popover/Tooltip arrow SVGs, not a box shadow. Both now resolve to kumo-line, so the arrow border aligns with the popup outline in both modes.Add scrollToItem(id, options?) to useSidebar() for imperatively scrolling
a nav item into the sidebar viewport. Tag items with the new itemId prop on
Sidebar.MenuButton or Sidebar.MenuItem.
Options:
align: "start" | "center" | "end" | "auto" (default "auto" — no-op if
the item is already visible; otherwise scroll the minimum distance).behavior: "auto" | "smooth" (default "auto" — instant, best for
cross-app landings so users don't watch the sidebar animate on entry).
prefers-reduced-motion forces "auto".Scrolls only the sidebar viewport (never the document) and works with
Sidebar.SlidingViews: items register with the provider via an internal
map, so scrollToItem walks up from the target to find its owning viewport
rather than querying the DOM.
Add icon support to filled Badge variants through the icon prop, add linked-badge hover styles, and use the base surface background for outline badges.
Allow users to select and copy LinkButton text while preserving Button text selection behavior.
Update Table rows to use borderless, alternating background styling.
Fix hydration mismatch in the Sidebar's useIsMobile hook on SSR frameworks like Next.js. The hook now uses useSyncExternalStore with a desktop getServerSnapshot, so the server-rendered HTML (desktop <aside>) hydrates cleanly on mobile viewports before switching to the mobile overlay.
Allow Select and Combobox triggers to compose directly with Toolbar.Button and Toolbar.Input through their render props, adding grouped styling and arrow-key focus management while preserving regular Select.* and Combobox.* APIs.
Deprecate Toolbar's configurable size prop and size metadata exports. They remain functional for compatibility; omitting size continues to use the base size.
Forward link-specific props in Tabs and Sidebar so link-rendered tabs can opt out of native button semantics, and Sidebar link buttons preserve attributes like aria-current.
Expose all positioner props on Combobox.Content (anchor, positionMethod, collisionAvoidance, collisionBoundary, collisionPadding, sticky, disableAnchorTracking).
Populate InputArea props in component registry so the docs API reference table renders correctly
Fix Sidebar peeking state during SlidingViews transitions.
Fix Tabs overflow controls when tabs are removed and the remaining tabs fit.
Update the default collapsible trigger and panel styling.
Collapsible.DefaultPanel now uses an inner content wrapper so the outer panel can animate height smoothly while clipping overflow during the transition. Consumers applying custom layout or spacing classes directly to DefaultPanel may need to move those styles to their content, or use Collapsible.Panel for a fully custom layout.
Fix initCatalog so it actually loads the validation schemas.
Previously it triggered a synchronous validation whose "schemas not loaded" error was swallowed, so await initCatalog(catalog) could resolve while hasComponent, componentNames, and the other synchronous catalog APIs still reported no components. It now awaits loadSchemas() directly.
A failed schema load is also no longer cached: retrying initCatalog (or loadSchemas) after a transient failure now re-attempts the import instead of returning the stale rejection.
Fix Shiki highlighter lifecycle in ShikiProvider and CodeHighlighted.
ShikiProvider no longer re-creates the highlighter when a parent rerender passes an equivalent inline languages array — initialization is keyed on the normalized language set. Highlighters are now disposed on unmount and when the engine or language set changes, instead of leaking. CodeHighlighted memoizes the highlighted HTML so unrelated rerenders (such as copy-button state changes) no longer re-highlight unchanged code, and initialization errors are logged once instead of on every render. Reinitializing after a failed initialization now clears the stale error state instead of showing it during the retry.
Reset the Tabs overflow control background so host button styles do not show through the scrim gradient.