Changelog
Latest updates and features. See what changed in each release.
Minor changes
- 810d820
Add the
xAxisHideLabelOverlapprop toTimeseriesChart, defaulting totrue.
Patch changes
- 99b17fb
Match CodeHighlighted loading and error fallback styling to highlighted code. Reset host app backgrounds, borders, and pre border radii to keep the frame and spacing consistent while syntax colors load.
- 6a093a5
Fix disabled
Inputtext color. It used an undefinedtext-kumo-disabledtoken, so disabled inputs looked the same as enabled ones. It now usestext-kumo-inactive. - e16f41f
Fix
Paginationpage validation. The page input only accepts whole numbers written as digits, so it no longer callssetPagewithNaN, fractions, or values like0x10and1e1. Invalid input now restores the current page. WithtotalCount={0}, or whenpageis past the last page, Next and Last are disabled and nothing requests page 0. - fedc8a7
Fix three
TagInputbugs:readOnlynow prevents all value changes. Tags can no longer be removed with their remove buttons or Backspace, and new tags can't be added by typing, pasting, or blurring.- Pasting comma- or newline-separated text now merges it with the draft text and replaces the current selection before splitting it into tags. Previously, text you were already typing was lost.
- Native forms now submit the accepted tags. With
name, each tag is submitted as its own form value, so the empty draft is no longer sent. Withrequired, validation passes as soon as there is at least one tag.
- 947065a
Fix
TimeseriesChartcrashing withRangeError: Maximum call stack size exceededon large datasets. Marker clustering no longer spreads every timestamp intoMath.max/Math.min, and is skipped entirely when the chart has no markers.
Minor changes
- 88850d5
Add
tooltipTimestampFormatto TimeseriesChart for formatting standard and marker tooltip timestamps in a consumer-selected time zone. - 5282710
Add a segmented appearance to Radio groups for compact, mutually exclusive choices.
- 3d93312
Add
appearance="card"andorientationtoCheckbox.Group, plusappearanceanddescriptiontoCheckbox.Item. Card groups render as one card with dividers (rows when vertical, a two-column grid when horizontal), matchingRadio.Group's card appearance. - 1846759
DropdownMenu submenu and row improvements:
- An open submenu's trigger stays highlighted (
data-popup-open). - Every menu row (Item, LinkItem, SubTrigger, CheckboxItem, RadioItem) uses the same
bg-kumo-tinthighlight androunded-mdradius. - Submenus line up with their trigger by default.
SubContent's defaultsideOffsetandalignOffsetdepend on the resolved side, so they stay correct if the submenu has to move above or below the trigger. - The menu popup now animates with Base UI's
data-starting-style/data-ending-style(the olddata-[state=*]classes never matched). - New
DropdownMenu.PositionerandDropdownMenu.Popupparts.ContentandSubContentare built from them, and you can compose them yourself.DropdownMenu.Portalnow respectsKumoPortalProvider. SubTrigger'siconprop acceptsIcon | ReactNode.- Icons are spaced by the row's
gap-2, so element and component icons line up identically. - Rows without an icon (including labels) are inset automatically when another row in the same menu has an icon, so their text lines up.
insetstill forces it.
- An open submenu's trigger stays highlighted (
- 81b0ef4
Add Base UI-style composable Popover parts while preserving the legacy
Popover.ContentAPI. - 49317c6
Render
Radio.Groupcards as one card with dividers (rows when vertical, a two-column grid when horizontal), give card radio controls a 1px ring, and tighten card groups' legend and description gaps to matchField. - 1cb4773
Allow translating optional markers and label tooltip accessible names with KumoLocaleProvider, with Label-level overrides for custom content.
- 85afbd0
Add
Slidercomponent for picking a number, or a range between two numbers, by dragging a thumb along a track. Built on Base UI's Slider: pass an array tovalueordefaultValuefor a range. Shows each thumb's value in a badge below the track and the minimum and maximum at either end, formats them withformat, and supportssmandbasesizes. - 2f9b17f
Allow LayerDialog actions to use a ButtonGroup split button for related alternate submit outcomes.
Patch changes
- 2c53422
Fix Autocomplete highlighted item background to use
bg-kumo-tint, matching Combobox and Select. - 09a9dae
Apply dropdown icon spacing and sizing to element icons while preserving their custom classes.
- df14b5d
Bump
@base-ui/reactto 1.9.0. Brings Base UI bug fixes across Menu, Popover, Select, Combobox, Drawer, Dialog, and more, plus the preview menu filtering primitives (Menu.FilterProvider,Menu.Input) via@cloudflare/kumo/primitives/menu. - cdb7e0f
Button and LinkButton: optically center text by lifting it slightly, and trim the leading padding when an icon precedes text so the icon side matches the trailing padding.
- dc7c513
Stop throwing on malformed URL hashes while syncing table-of-contents sections. Hashes that can't be percent-decoded are matched as-is, so ids containing a literal
%still deep-link. - f7d6829
Keep Popover arrows visible when content clips or scrolls by using a compatibility-safe opacity transition.
- 03aa5ae
Remove unused Tabs indicator entrance animation styles.
- dae9cdd
Keep transient copy feedback visible until the final repeated copy click settles across Kumo copy controls.
- 7e0ff40
Fix
Flowconnectors bending when nodes have a top margin by aligning connector offsets with their anchors. - a8c946a
Match a linkable Badge's focus outline to its pill shape.
- c3b0294
Replace the internal class merging dependency with
cn. - 86af1a1
Stop
LayerDialog.Bodyfrom clipping the top of its first child. The body now has a little top padding so a leading input's border and focus ring stay visible, and the top scroll fade no longer masks content in Safari before the scroll area is measured. - d97d751
Restore
LayerDialog.Actions.PrimaryandLayerDialogPrimaryPropsas deprecated aliases ofLayerDialog.ActionandLayerDialogActionProps, so dialogs written against 2.14 keep working. - bfb4140
Fix
Loadercrashing withcan't access property "height"in browsers with SVG disabled (e.g. Tor Browser at the "Safest" security level). The spinner is now sized viawidth/heightSVG attributes instead of an inlinestyle. Note that sizing classes passed viaclassName(e.g.size-4) now take precedence over thesizeprop. - aef723c
Hide outside-month dates by default in multi-month DatePicker views so dates and range highlights are not duplicated between panels. Preserve single-month behavior and explicit showOutsideDays overrides.
- 6701f40
Fire
Sidebar.CollapsibleonOpenChangeCompletewhen the sidebar or mobile drawer shows or hides an open section. Before, the callback fired only when the section itself toggled. - 462516f
Stop logging runtime warnings for deprecated Text heading variants. The variants remain marked as deprecated in the TypeScript API.
- 17d094e
Render the
Sidebar.MenuSubguide line as anaria-hiddenlist item so the sub-menu list only contains<li>children. - 543dc8a
Slider: render the current value badge in the high-contrast (black) color instead of the brand blue, with a subtle grey fill when disabled. The filled track is now lighter in dark mode so it stands out from the background.
- 72b3346
Fix
Flownodes with a customrenderelement briefly laying out at the wrong position on mount. Unpositioned nodes are now measured as absolutely positioned elements, so their first reported width matches their final width. - 5ee4a03
TagInput: ignore Enter, comma and Tab while an IME composition is active, so confirming a Japanese/Chinese/Korean conversion no longer creates a tag early.
- 7d91721
Preserve ButtonGroup's outer corners while an overlay control is open.
- 828866a
Prevent Select separators from causing a horizontal scrollbar.
- f46e8bc
Update the Cloudflare logo cloud colors to match the current brand asset.
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.