cloudflare/kumo @cloudflare/kumo@1.17.0
cloudflare/kumo
Captured source
source ↗@cloudflare/kumo@1.17.0
Repository: cloudflare/kumo
Tag: @cloudflare/kumo@1.17.0
Published: 2026-04-03T14:35:26Z
Prerelease: no
Release notes:
Minor Changes
- 355a1b5: Badge: add color-based variants and deprecate semantic variants
- Add color variants:
red,orange,yellow,green,teal,blue,neutral,inverted - Add subtle variants for each color (
red-subtle,orange-subtle, etc.) with lighter backgrounds and darker text - Retain
outlineandbetavariants unchanged - Deprecate
primary(useinverted),secondary(useneutral),destructive(usered),success(usegreen) - Dark mode support: subtle variants flip to dark backgrounds with light text, regular color variants darken slightly, inverted flips to white bg with black text
- Default variant changed from
primarytoneutral
- 250a6dd: Add
actionprop to Banner for rendering CTA buttons alongside structured title/description content without resorting to thechildrenprop.
- 8c244d2: Refresh semantic surface color tokens and component surface usage.
- Add and adopt
kumo-canvasas the page-level surface token in theme output and docs usage. - Rebalance neutral token values in
kumo-binding.cssand generated theme variables for improved light/dark surface hierarchy. - Update surface-related component styling (
LayerCard,MenuBar,Tabs) to align with the refreshedcanvas/elevated/recessedlayering model. - Update token usage guidance in
ai/USAGE.mdto reflect page vs component background roles.
- ef15662: Make timeseries' highlighted on hovering a data point
- cd0c22f: Add Shadow DOM support via
KumoPortalProviderandcontainerprop on all portal-based components
All overlay components (Dialog, DropdownMenu, Combobox, Select, Tooltip, Popover, CommandPalette, Toast) now support rendering inside Shadow DOM or custom containers.
New exports:
KumoPortalProvider- Context provider to set default portal container for all overlaysPortalContainer- Type for portal container (HTMLElement, ShadowRoot, or ref)
Component updates: All portal-based components now accept an optional container prop:
Dialog-containerprop on Dialog componentDropdownMenu.Content-containerpropCombobox.Content-containerpropSelect-containerpropTooltip-containerpropPopover.Content-containerpropCommandPalette.RootandCommandPalette.Dialog-containerpropToasty(Toast provider) -containerprop
Usage:
Set once at the app level:
Or override per component:
Modal inside shadow DOM
When no provider or prop is set, components default to document.body (existing behavior).
- 17f21f3: SkeletonLine: add
blockHeightprop to set a container height and vertically center the skeleton line within it
- d1f697b: Table: add
stickyprop toTable.HeadandTable.Cellfor pinning columns to left/right edges, andstickyprop toTable.Headerfor sticky header rows. Usesisolatestacking context withz-0/z-1/z-2layering.
- 56e3640: Add
tomlas a supported language for syntax highlighting in the Code component
- f0c8952: Add
titleprop toButton— wraps the button in aTooltipwhen provided.
Patch Changes
- 7721bc5: Checkbox.Group & Radio.Group: remove fieldset border box and simplify styling
- Remove
rounded-lg border border-kumo-line p-4wrapper from both group fieldsets - Downsize legend from
text-lgtotext-basewith inline-flex layout - Drop
font-mediumfrom Checkbox.Item and Radio.Item labels
- 6c21970: Fix missing disabled styling on Combobox triggers.
TriggerValueandTriggerMultipleWithInputnow applyopacity-50andcursor-not-allowedwhen disabled, matching the behaviour of theSelectcomponent.
- 0e4247a: Update dialog backdrop overlay to use
bg-kumo-recessedtoken
- 0060bb9: Remove
ai/schemas.tsfrom version control (now fully generated at build time)
- 04a1f07: Fix LayerCard.Primary stacking order when sandwiched between LayerCard.Secondary elements
- 94d50e2: Fix SensitiveInput focus ring and global CSS pollution
- Fix focus ring not showing on container when inner input is focused (focus-within:outline)
- Add defensive styles to eye toggle and copy buttons to prevent global CSS pollution
- Fix inputVariants parentFocusIndicator using wrong selector ([&:has(:focus-within)] → focus-within:)
- db75c51: SkeletonLine: move
.skeleton-linestyles into@layer baseso Tailwind utility classes (e.g.className="h-6") can override the default height
- eb68b35: Tabs indicator now uses
translate-xfor its transition animation, replacing the CSSlefttransition with a GPU-accelerated transform.
- e21a6df: fix flow component not reflecting padding prop
- 29c56fd:
Surface: replaceasprop with Base UIrenderprop for polymorphism
The as prop used a hand-rolled generic forwardRef pattern (with as any casts) that conflicted with how the rest of the library handles polymorphism via Base UI's useRender hook.
Surface now accepts a render prop, consistent with Link and other components. The old as prop is kept as a deprecated alias and continues to work unchanged — no migration required.
// Still works (deprecated) ... // Preferred going forward }>...
- 9272b4a: Switch: polish squircle styling
- Use
ring-inseton thumb to prevent border protruding beyond the track - Make thumb ring transparent to remove visible border outline
- Switch focus indicator from
ringtooutlinewithoutline-offset-2to avoid clashing with the track's own ring border
- 6b15bac: fix(Tabs): update segmented tab spacing and track styling
- Adjust segmented
Tabslist styling colour tobg-kumo-recessedand addedringto make the Tabs background more visible - Remove extra edge spacing and keep the segmented track/indicator alignment consistent
- cfe814d: update toast styling to use a subtle ring and background that reflect each state.
- 7ac73d2: update status text token values for info and danger to improve a11y contrast ratio on banners.
- dcbf185: Add
truncateprop toTextcomponent. Whentrue, appliestruncate min-w-0classes to clip overflowing text with an ellipsis.