Changelog
Latest updates and features. See what changed in each release.
Minor changes
- da41be5
Update the bundled Base UI dependency to version 1.8.0 and expose its Combobox item collection and functional Toast update APIs.
- 9ad4c57
Add
ButtonGroupcomponent 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. Rendersrole="group". For grouping multiple independent buttons or inputs, useToolbarinstead. - d0b18d6
Add sidebar open-change completion callbacks.
- cd119ab
Add the TagInput component for creating and removing free-form values.
- 5d19dee
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. - 77489b5
Add an optional
yAxisMinIntervalprop toTimeseriesChartfor discrete data. - 6989681
Add support for footer text below
TimeseriesCharttooltip values. - 06321ce
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. - d4a3e71
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.
Patch changes
- de80043
Reset the native fieldset padding in radio and checkbox groups.
- 1175556
Refine Empty state typography and balance description text when it wraps.
- 5b1e222
Support nested LayerDialog drawers with independently layered backdrops and responsive mobile actions.
- 9c970e3
Add a plain CodeHighlighted variant for frameless, padding-free code blocks with a correctly positioned copy button.
- cfffa4e
Document app-root CSS isolation for reliable stacking of portaled components.
- 6e7bd82
Update formatting for Vite+ 0.3.1.
- 78d05b6
Use the up/down double chevron in Combobox value and input triggers to match Select.
- 86029e4
Add a visual regression contract for truncating text in default Tooltip triggers.
Patch changes
- 36fc155
Add
scrollItemIntoView()to preserve the position of visible sidebar items while honoring alignment for offscreen items.
Patch changes
- 7d5241d
Allow default Tooltip trigger children to control their line height, preventing inherited text from being clipped.
Minor changes
Patch changes
- d004940
Position dialogs near the top of the viewport instead of vertically centering them.
- 8f0a1f0
Use the elevated surface color for even rows in the default Table variant.
- 1ede8bf
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 floatingbg-kumo-basesurface. - 8482c50
fix(select): anchor the popup below the trigger and expose placement props
Select.Positionerrelied on Base UI'salignItemWithTriggerdefault (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 attext-base, so onxs/smtriggers the popup was much taller than its anchor, and Base UI's compensating shift detached it from the trigger — onxsit overhung by 12.5px above and 45.5px below and sat 8px to the left, covering adjacent content.The popup now prefers
bottomplacement 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 sideOffset4gap between trigger and popup, matching Combobox/Autocomplete align"start"alignment along the trigger edge alignOffset— additional offset along the alignment axis alignItemWithTriggerfalseopt back in to the native <select>overlayThe remaining Base UI Positioner controls are also forwarded unchanged:
anchor,arrowPadding,positionMethod,collisionAvoidance,collisionBoundary,collisionPadding,sticky, anddisableAnchorTracking.The popup also now tracks the trigger width via
min-w-(--anchor-width)instead ofmin-w-[calc(var(--anchor-width)+3px)], which existed to visually offset the old item-alignment shift. - 7526a6a
Allow non-heading Text variants to inherit line height from their surrounding context.
- b094a5a
Make
Combobox.Inputsit flush with the top and sides ofCombobox.Contentand remove its bottom corner rounding. - 20b7880
Reduce the trailing inset for buttons inside large InputGroup addons.
Minor changes
- 716e5b8
Add the
Textheadingvariant with a 16px semibold default and a 20pxsize="lg"option. The variant defaults to aspan, so callers choose heading semantics explicitly withas. Deprecate the numberedheading1,heading2, andheading3variants.
Patch changes
- d7a7a35
Collapsible.DefaultTriggernow usestext-kumo-default(neutral) withfont-mediuminstead of the bluetext-kumo-linkcolor. - 0db4f66
deprecate
MenuBarin favor of segmentedTabs- mark the
MenuBarcomponent (and its exports) as@deprecated; it will be removed in a future release - new usage should prefer
Tabswithvariant="segmented"(the defaultTabsvariant) - the runtime behaviour of
MenuBaris unchanged for existing consumers - remove the
MenuBardocumentation page and demos from the docs site
- mark the
- c64183b
Fix 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. - ef13cb4
Restore disabled and loading state handling for
Toolbar.Buttonso disabled controls expose the correct semantics and cannot be activated. - 51d0f03
Normalize shadows and outlines on tip-style overlays (Popover, Tooltip, ClipboardText, Chart tooltip).
- Drop the
shadow-kumo-tip-shadowcolor override so shadows use Tailwind's default translucent black instead of an opaque light-gray in light mode. - Tune shadow sizes: Popover, Tooltip, ClipboardText tooltip, and Chart tooltip use
shadow-md; ClipboardText's "Copied" toast keepsshadow-lgto match the Toast component. - Switch these overlays from
outline-kumo-filltooutline-kumo-line, matching every other floating surface (Dropdown, Select, Combobox, Dialog, etc.). - Rename
kumo-tip-shadow→kumo-arrow-edgeandkumo-tip-stroke→kumo-arrow-stroke. The tokens draw the border on Popover/Tooltip arrow SVGs, not a box shadow. Both now resolve tokumo-line, so the arrow border aligns with the popup outline in both modes.
- Drop the
- d586bf3
Add
scrollToItem(id, options?)touseSidebar()for imperatively scrolling a nav item into the sidebar viewport. Tag items with the newitemIdprop onSidebar.MenuButtonorSidebar.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-motionforces"auto".
Scrolls only the sidebar viewport (never the document) and works with
Sidebar.SlidingViews: items register with the provider via an internal map, soscrollToItemwalks up from the target to find its owning viewport rather than querying the DOM.
Minor changes
- aa6edff
Add icon support to filled Badge variants through the
iconprop, add linked-badge hover styles, and use the base surface background for outline badges.
Patch changes
- bba0f5e
Allow users to select and copy LinkButton text while preserving Button text selection behavior.
- c2c8d42
Update Table rows to use borderless, alternating background styling.
- 0ad1926
Fix hydration mismatch in the Sidebar's
useIsMobilehook on SSR frameworks like Next.js. The hook now usesuseSyncExternalStorewith a desktopgetServerSnapshot, so the server-rendered HTML (desktop<aside>) hydrates cleanly on mobile viewports before switching to the mobile overlay.
Minor changes
- 4b9a4dc
Allow Select and Combobox triggers to compose directly with
Toolbar.ButtonandToolbar.Inputthrough theirrenderprops, adding grouped styling and arrow-key focus management while preserving regularSelect.*andCombobox.*APIs.Deprecate Toolbar's configurable
sizeprop and size metadata exports. They remain functional for compatibility; omittingsizecontinues to use the base size.
Patch changes
- 65db2e6
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. - 0c58325
Expose all positioner props on Combobox.Content (
anchor,positionMethod,collisionAvoidance,collisionBoundary,collisionPadding,sticky,disableAnchorTracking). - 528d5ff
Populate InputArea props in component registry so the docs API reference table renders correctly
- 75c3b14
Fix Sidebar peeking state during SlidingViews transitions.
- 1d9b588
Fix Tabs overflow controls when tabs are removed and the remaining tabs fit.
Patch changes
- ff76f30
Update the default collapsible trigger and panel styling.
Collapsible.DefaultPanelnow 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 toDefaultPanelmay need to move those styles to their content, or useCollapsible.Panelfor a fully custom layout. - 7468623
Fix
initCatalogso 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 whilehasComponent,componentNames, and the other synchronous catalog APIs still reported no components. It now awaitsloadSchemas()directly.A failed schema load is also no longer cached: retrying
initCatalog(orloadSchemas) after a transient failure now re-attempts the import instead of returning the stale rejection. - d7639f2
Fix Shiki highlighter lifecycle in
ShikiProviderandCodeHighlighted.ShikiProviderno longer re-creates the highlighter when a parent rerender passes an equivalent inlinelanguagesarray — 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.CodeHighlightedmemoizes 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. - c599590
Reset the Tabs overflow control background so host button styles do not show through the scrim gradient.