Minor changes

  • b1e51a8

    Add Enter key navigation to Pagination page number input and new pageSelector prop for dropdown mode

    • The page number input in Pagination.Controls now navigates on Enter key press (previously only on blur)
    • New pageSelector prop on Pagination.Controls: set to "dropdown" to render a Select dropdown instead of a text input for page selection
  • e676f0b

    Add disabled option support, groups, group labels, and separators to Select

    • Select.Option now accepts disabled and className props
    • New Select.Group and Select.GroupLabel sub-components for organizing options under labeled headers
    • New Select.Separator sub-component for visual dividers between groups
    • The items object-map prop now accepts SelectItemDescriptor values with disabled metadata
  • a685953

    Expose delay and closeDelay props on Tooltip component to control open and close timing. These props are forwarded to the underlying Base UI Trigger component.

Patch changes

  • dacf445

    Input and InputArea now automatically apply error styling when the error prop is truthy. You no longer need to set variant="error" separately - just pass an error message and the styling is applied automatically. The variant="error" prop is now deprecated but still works for backwards compatibility.

  • 44c26f5

    Adjust semantic tint usage for status/error ring styles across core form and feedback components.

    • Update background styles in Badge and Banner components to use *-tint tokens.
    • Update kumo-danger to a darker token to improve a11y contrast.
    • Update error ring styling in form components to use semantic tokens (now darker with token swap).
    • Removed text-color-badge-red-subtle token in replacement of the danger token.
    • Update theme generator color mappings used by these tints to improve visual consistency.
  • 2bb8628

    Fix CodeBlock crash when an unsupported lang value is passed at runtime. The codeVariants() function now uses optional chaining with a nullish coalescing fallback to the default language, matching the defensive pattern already used by switchVariants() and badgeVariants().

  • e8bcf6f

    fix(select): use ring-kumo-hairline token in Select popup (missed in PR #355)

  • c3beded

    Fix Select popup scrolling and height behavior; align popup/list structure with Base UI. Split popup into frame (Popup) and scroll container (List) to match Combobox pattern and fix touch scroll on long lists.

  • 4a2fb02

    fix(loader): add ARIA attributes for screen reader accessibility

    Added role="status" and aria-label="Loading" to the Loader SVG component to make it accessible to screen readers. This resolves a WCAG 2.1 SC 4.1.3 (Status Messages) violation where assistive technology users received no indication that content was loading.

  • 5e4c7b1

    Refine badge semantics/fill styling and banner tone updates

    • Rework Badge variant model to prioritize semantic variants (primary, secondary, error, warning, success, info) with updated descriptions and primary as default.
    • Keep token color variants for product-specific use cases while updating class mappings so semantic and token variants are distinct.
    • Slight updates to token color variants to meet a11y contrast requirements.
    • Update token color variants by replacing yellow with purple since yellow doesn't meet a11y contrast requirements, and keeping docs/demo examples in sync.
    • Update badge docs demos/content to focus on primary semantic badges and a consolidated "other variants" section.
    • Adjust banner variant surfaces (default, alert, error) to stronger tinted backgrounds and borders.
    • Update theme generator badge/semantic token mappings and regenerate theme-kumo.css to match the new badge color system.
  • 6458fae

    Fix Switch label click not toggling when a custom id prop is provided

    The id was not being forwarded to Base UI's Switch.Root, causing a mismatch between the label's htmlFor and the button's actual id.

  • cf6b917

    Align semantic token documentation and docs presentation updates.

    • Update colors.mdx token documentation structure.
    • Replaced kumo-ring with kumo-hairline for border/ring colors and all its instances in kumo components and docs.
    • Sync packages/kumo/ai/USAGE.md token reference categories and descriptions with the docs token guide.
    • Adjust the typo in the recessed dark token value in theme generator config and regenerate theme-kumo.css.
    • Updated kumo-fill-hover token value from neutral-700 to neutral-800

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 outline and beta variants unchanged
    • Deprecate primary (use inverted), secondary (use neutral), destructive (use red), success (use green)
    • 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 primary to neutral
  • 250a6dd

    Add action prop to Banner for rendering CTA buttons alongside structured title/description content without resorting to the children prop.

  • 8c244d2

    Refresh semantic surface color tokens and component surface usage.

    • Add and adopt kumo-canvas as the page-level surface token in theme output and docs usage.
    • Rebalance neutral token values in kumo-binding.css and generated theme variables for improved light/dark surface hierarchy.
    • Update surface-related component styling (LayerCard, MenuBar, Tabs) to align with the refreshed canvas/elevated/recessed layering model.
    • Update token usage guidance in ai/USAGE.md to reflect page vs component background roles.
  • ef15662

    Make timeseries' highlighted on hovering a data point

  • cd0c22f

    Add Shadow DOM support via KumoPortalProvider and container prop 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 overlays
    • PortalContainer - Type for portal container (HTMLElement, ShadowRoot, or ref)

    Component updates: All portal-based components now accept an optional container prop:

    • Dialog - container prop on Dialog component
    • DropdownMenu.Content - container prop
    • Combobox.Content - container prop
    • Select - container prop
    • Tooltip - container prop
    • Popover.Content - container prop
    • CommandPalette.Root and CommandPalette.Dialog - container prop
    • Toasty (Toast provider) - container prop

    Usage:

    Set once at the app level:

    <KumoPortalProvider container={shadowRoot}>
      <App />
    </KumoPortalProvider>
    

    Or override per component:

    <Dialog container={customContainer}>
      <Dialog.Title>Modal inside shadow DOM</Dialog.Title>
    </Dialog>
    

    When no provider or prop is set, components default to document.body (existing behavior).

  • 17f21f3

    SkeletonLine: add blockHeight prop to set a container height and vertically center the skeleton line within it

  • d1f697b

    Table: add sticky prop to Table.Head and Table.Cell for pinning columns to left/right edges, and sticky prop to Table.Header for sticky header rows. Uses isolate stacking context with z-0/z-1/z-2 layering.

  • 56e3640

    Add toml as a supported language for syntax highlighting in the Code component

  • f0c8952

    Add title prop to Button — wraps the button in a Tooltip when provided.

Patch changes

  • 7721bc5

    Checkbox.Group & Radio.Group: remove fieldset border box and simplify styling

    • Remove rounded-lg border border-kumo-line p-4 wrapper from both group fieldsets
    • Downsize legend from text-lg to text-base with inline-flex layout
    • Drop font-medium from Checkbox.Item and Radio.Item labels
  • 6c21970

    Fix missing disabled styling on Combobox triggers. TriggerValue and TriggerMultipleWithInput now apply opacity-50 and cursor-not-allowed when disabled, matching the behaviour of the Select component.

  • 0e4247a

    Update dialog backdrop overlay to use bg-kumo-recessed token

  • 0060bb9

    Remove ai/schemas.ts from 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-line styles into @layer base so Tailwind utility classes (e.g. className="h-6") can override the default height

  • eb68b35

    Tabs indicator now uses translate-x for its transition animation, replacing the CSS left transition with a GPU-accelerated transform.

  • e21a6df

    fix flow component not reflecting padding prop

  • 29c56fd

    Surface: replace as prop with Base UI render prop 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)
    <Surface as="section">...</Surface>
    
    // Preferred going forward
    <Surface render={<section />}>...</Surface>
    
  • 9272b4a

    Switch: polish squircle styling

    • Use ring-inset on thumb to prevent border protruding beyond the track
    • Make thumb ring transparent to remove visible border outline
    • Switch focus indicator from ring to outline with outline-offset-2 to avoid clashing with the track's own ring border
  • 6b15bac

    fix(Tabs): update segmented tab spacing and track styling

    • Adjust segmented Tabs list styling colour to bg-kumo-recessed and added ring to 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 truncate prop to Text component. When true, applies truncate min-w-0 classes to clip overflowing text with an ellipsis.

Minor changes

  • c5f69b9

    Make Chart components keyboard focusable with tabindex. Timeseries adds ariaDescription prop

Patch changes

  • b3c44f1

    Generate component-registry files at build time, remove from git

    Eliminates contributor friction by generating component-registry.json, component-registry.md, and schemas.ts during the build process instead of tracking them in git. Contributors will no longer see stale diffs or need to manually regenerate these files.

    • Add ai/component-registry.json and ai/component-registry.md to .gitignore
    • Convert ai/schemas.ts to a stub file for TypeScript compilation
    • Add codegen:registry to build script for deterministic generation
  • 759f4e8

    feat(code): add HCL (HashiCorp Configuration Language) as a supported syntax highlighting language

  • a67fac7

    fix(flow): connector lines no longer misalign when the page scrolls or a sidebar shifts the layout

    getBoundingClientRect values were stored in React state per node and later subtracted against a freshly-read container rect at connector-draw time. Any layout shift (sidebar open/close, page scroll, inner container scroll) between those two reads produced stale coordinates, causing connector lines to jump out of place or disappear entirely.

    Fix: add scroll and resize listeners (capture phase) at the FlowNode, FlowParallelNode, and FlowNodeList levels so all rects are remeasured after any layout shift. Connector computation in FlowNodeList and FlowParallelNode is also moved from the render phase into useLayoutEffect so the container rect and node rects are always read in the same synchronous pass.

  • 15a344e

    Add missing HCL language import to server-side Shiki bundle

    The HCL language was added to SupportedLanguage type and the client-side provider in a previous commit, but the server.tsx BUNDLED_LANGS object was missed. This caused typecheck failures when building.

  • 5d8d3a9

    Sidebar: polish animations, fix separator reflow bug, improve header spacing

  • 7e82920

    Fix connector alignment and spacing between adjacent parallel nodes in Flow diagrams

Minor changes

  • 73f554a

    Add success and info toast variants with semantic token styling. Migrate error/warning variants from raw CSS to semantic tokens for consistent theming.

Patch changes

  • 9fbf3a8

    Fix Radio compound component to use Object.assign pattern, enabling sub-component detection (Radio.Group, Radio.Item) in the component registry.

  • 3430785

    Revert outline button variant ring width from ring-2 (2px) back to ring (1px) to restore visual consistency with existing dashboard usage.

Patch changes

  • 839b0cb

    fix: update styling for mostly-used components with new greyscale tokens (combobox, dialog, input, layerCard, select & tabs) as well as homegrid and component preview backgrounds.

  • 7083a17

    Remove es2022 build target that caused Jest/babel-jest test failures in stratus

Minor changes

  • 8b2d6a0

    Add radio card appearance via appearance="card" prop on Radio.Group and Radio.Item. Cards display a bordered, selectable container with title and description. Also adds description prop to Radio.Item for helper text. Supports vertical and horizontal orientations, error state, and disabled state.

  • abbf586

    Expose Chart optionUpdateBehavior to control how ECharts applies option updates; notMerge now defaults to false.

  • c6aa554

    Add neutral variant to Switch component and improve accessibility

    • New variant="neutral" option: monochrome switch with squircle shape, matching the design from stratus
    • Improved off-state visibility for default variant with darker background/ring colors
    • Removed error variant (not useful for toggle switches)
    • Added defensive fallback so invalid variant values don't cause runtime crashes

Patch changes

  • f2e17d7

    removed outline-none to bring back focus states on all buttons

  • eba693e

    Fix flaky vitest "Closing rpc while fetch was pending" error in deep-imports test

  • db91f50

    Fix InputArea label click not focusing textarea. Use FieldBase.Control with render callback to properly associate the label with the textarea element.

  • 80afd4d

    Fix TypeScript return types for ShikiProvider and CodeHighlighted components.

    Changed return type from ReactNode to React.JSX.Element to resolve JSX compatibility errors. This fixes issues when consuming these components in projects with stricter TypeScript configurations (e.g., skipLibCheck: false), where ReactNode was incorrectly inferred as a valid JSX element return type.

  • dc9742d

    Fix table header font size to ensure consistent rendering across dashboards with different default font sizes

  • f94fee7

    Add dedicated kumo-placeholder text color token and use it for Input, InputArea, SensitiveInput, and CommandPalette placeholder text. The new token provides better visual distinction between placeholder and active text in both light and dark modes.

  • 66012b7

    Replace the package-level ESLint pass with Oxlint JS plugin coverage for the remaining jsx-a11y rules, and pin the library build to es2022 with a post-build browser-compat test that blocks newer runtime APIs from shipping in dist.

  • e8acdd8

    fix(Select): prevent chevron overflow with long multi-select values

    Added min-w-0 truncate to the value element and shrink-0 to the chevron icon so that long option names truncate gracefully instead of pushing the chevron outside the select bounds.

Patch changes

  • c272f6a

    Fix combobox caret icon to use text-kumo-subtle with fill-current instead of invalid fill-kumo-subtle token

  • 5e12c15

    fix TimeseriesChart brush cursor not activating when loading prop transitions from true to false

Minor changes

  • 56a8b35

    add xAxisTickFormat, yAxisTickFormat, and tooltipValueFormat props to TimeseriesChart; deprecate yAxisTickLabelFormat

    Deprecation: yAxisTickLabelFormat is deprecated

    If you were using yAxisTickLabelFormat to customize tooltip output, switch to tooltipValueFormat.

    Before:

    <TimeseriesChart yAxisTickLabelFormat={(v) => `${v} req/s`} />
    

    After:

    <TimeseriesChart tooltipValueFormat={(v) => `${v} req/s`} />
    

Patch changes

  • eda8362

    Fix combobox caret icon visibility by using fill-kumo-subtle instead of fill-kumo-ring

Minor changes

  • 4d6de27

    reorganize greyscale tokens and update color preferences

Patch changes

  • 2ff49b7

    updated button styles for outline and secondary

  • 59f7935

    Fix Jest module resolution failures and reduce Shiki bundle size

    Jest Fix:

    • Add chunkFileNames config to prevent double-dash filenames (e.g., combobox--ec3iibR.js) that Jest cannot resolve
    • Move chunks to dist/chunks/ subdirectory for cleaner structure

    Bundle Size Reduction:

    • Switch from full Shiki bundle to fine-grained imports via shiki/core
    • Reduce from ~300 language/theme chunks to ~16 bundled languages
    • Total JS files reduced from 358 to ~163 (54% reduction)

    Supported Languages: javascript, typescript, jsx, tsx, json, jsonc, html, css, python, yaml, markdown, graphql, sql, bash, shell, diff

    Breaking Change:

    • BundledLanguage type is now deprecated, use SupportedLanguage instead
    • Only the languages listed above are bundled; other Shiki languages are no longer available out of the box
  • 9eaf584

    Fix npm publish failure by removing cross-package dependency from prepublish hook

Showing 1-10 of 30