@cloudflare/kumo 2.4.1 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/ai/component-registry.json +34 -4
  3. package/ai/component-registry.md +176 -3
  4. package/ai/schemas.ts +1 -0
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +2 -0
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/ai/schemas.js +45 -43
  9. package/dist/ai/schemas.js.map +1 -1
  10. package/dist/chunks/{SankeyChart-npoyr1j06svoxsfe.js → SankeyChart-i1m7zv0lys3j0iq6.js} +74 -69
  11. package/dist/chunks/SankeyChart-i1m7zv0lys3j0iq6.js.map +1 -0
  12. package/dist/chunks/{dialog-my9fioafdstq50mi.js → dialog-3mpu1i1wssrsz8i6.js} +11 -11
  13. package/dist/chunks/dialog-3mpu1i1wssrsz8i6.js.map +1 -0
  14. package/dist/chunks/sidebar-nbdw4rgvuabxp5nj.js +1144 -0
  15. package/dist/chunks/sidebar-nbdw4rgvuabxp5nj.js.map +1 -0
  16. package/dist/chunks/{tabs-hice1yy5q2t889z8.js → tabs-ho9t1gkq22jb855l.js} +51 -28
  17. package/dist/chunks/tabs-ho9t1gkq22jb855l.js.map +1 -0
  18. package/dist/components/chart.js +1 -1
  19. package/dist/components/dialog.js +1 -1
  20. package/dist/components/flow.js +3 -2
  21. package/dist/components/flow.js.map +1 -1
  22. package/dist/components/sidebar.js +1 -1
  23. package/dist/components/tabs.js +1 -1
  24. package/dist/index.js +5 -5
  25. package/dist/src/components/chart/EChart.d.ts.map +1 -1
  26. package/dist/src/components/flow/connectors.d.ts.map +1 -1
  27. package/dist/src/components/sidebar/sidebar.d.ts +14 -2
  28. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -1
  29. package/dist/src/components/tabs/tabs.d.ts.map +1 -1
  30. package/dist/styles/kumo-binding.css +27 -20
  31. package/dist/styles/kumo-standalone.css +1 -1
  32. package/package.json +2 -2
  33. package/dist/chunks/SankeyChart-npoyr1j06svoxsfe.js.map +0 -1
  34. package/dist/chunks/dialog-my9fioafdstq50mi.js.map +0 -1
  35. package/dist/chunks/sidebar-hzio700cg85f7f31.js +0 -1014
  36. package/dist/chunks/sidebar-hzio700cg85f7f31.js.map +0 -1
  37. package/dist/chunks/tabs-hice1yy5q2t889z8.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # @cloudflare/kumo
2
2
 
3
+ ## 2.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - b06e35b: Allow unprefixed Dialog max-width classes to override the default viewport cap at desktop breakpoints.
8
+
9
+ ## 2.5.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 7401701: Sidebar: mobile rewrite, smooth collapse transitions, and new props
14
+
15
+ **New features:**
16
+ - `mobileBreakpoint` prop on Provider — configurable viewport width for mobile detection
17
+ - `contentClassName` prop on Sidebar root — pass-through class for the inner content container
18
+ - Controlled mobile state — `open` prop now controls the mobile sidebar too, not just desktop
19
+
20
+ **Fixes:**
21
+ - Replaced Base UI Dialog mobile sidebar with a plain `<nav>` + backdrop for simpler, more predictable transitions
22
+ - Collapsible sections now animate closed smoothly when the sidebar collapses instead of snapping shut
23
+ - Removed `hidden` class from `Sidebar.MenuSub` so sub-menus participate in collapse animations
24
+ - Removed `inertValue` React-version helper — `SidebarSlidingView` now sets `inert` imperatively for React 18 compatibility
25
+ - Restored `inert` on closed `SidebarCollapsibleContent` while removing its `data-open` attribute
26
+
27
+ **Styling:**
28
+ - `bg-kumo-tint` → `bg-(--sidebar-active-bg)` CSS variable for active/hover/focus backgrounds
29
+ - Icon opacity `0.5` → `0.4`; chevron gains hover opacity transition
30
+ - Header gains `shrink-0` and animated padding on collapse
31
+ - Content scroll area gains animated `gap` transition and `tabIndex={-1}` on viewport
32
+ - Sliding views container gains `max-w-(--sidebar-width)` to prevent overflow
33
+ - Mobile sidebar uses `--sidebar-animation-duration` CSS variable for slide transition
34
+
35
+ ### Patch Changes
36
+
37
+ - f957dbc: Add React 18 and React 19 compatibility checks for Kumo tests.
38
+ - ac46184: Fix `Chart` (and `SankeyChart`) rendering in dark mode. The chart canvas
39
+ now stays transparent so the surrounding `bg-kumo-*` surface shows through
40
+ symmetrically in both modes, and ECharts' built-in `"dark"` theme is
41
+ applied when `isDarkMode` is true so the tooltip card, axes, splitLines,
42
+ and legend text are themed correctly.
43
+ - e25a3d6: fix(sidebar): add text truncation with ellipsis to Sidebar.MenuButton content
44
+
45
+ Previously, `Sidebar.MenuButton` used `overflow-hidden` which clipped long text without showing an ellipsis. Now uses `truncate` to match `Sidebar.MenuSubButton`'s behavior.
46
+
47
+ - d3feec0: Fix segmented `Tabs` scroll fade, scroll-into-view, and ring styling:
48
+ - Rewrite CSS scroll-fade masking to use `@property`-animated custom properties, fixing proportional fade rendering across browsers.
49
+ - Scroll the selected tab into view on click so it stays visible in overflowing tab lists.
50
+ - Move `ring ring-kumo-hairline/70` from the inner list to the root container so the segmented variant ring wraps the entire component correctly.
51
+
52
+ - f831482: Fix Flow connector rendering in Firefox by emitting valid SVG path data without array commas and setting visible overflow on the SVG element attribute.
53
+ - 4a8b992: Restore React 18-compatible Sidebar inert attribute handling while keeping the full React compatibility CI suite.
54
+
3
55
  ## 2.4.1
4
56
 
5
57
  ### Patch Changes
@@ -2816,9 +2816,10 @@
2816
2816
  "examples": [
2817
2817
  "<Dialog.Root>\n <Dialog.Trigger render={(p) => <Button {...p}>Click me</Button>} />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-start justify-between gap-4\">\n <Dialog.Title className=\"text-2xl font-semibold\">\n Modal Title\n </Dialog.Title>\n <Dialog.Close\n aria-label=\"Close\"\n render={(props) => (\n <Button\n {...props}\n variant=\"secondary\"\n shape=\"square\"\n icon={<X />}\n aria-label=\"Close\"\n />\n )}\n />\n </div>\n <Dialog.Description className=\"text-kumo-subtle\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua.\n </Dialog.Description>\n </Dialog>\n </Dialog.Root>",
2818
2818
  "<Dialog.Root>\n <Dialog.Trigger render={(p) => <Button {...p}>Delete</Button>} />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-start justify-between gap-4\">\n <Dialog.Title className=\"text-2xl font-semibold\">\n Modal Title\n </Dialog.Title>\n <Dialog.Close\n aria-label=\"Close\"\n render={(props) => (\n <Button\n {...props}\n variant=\"secondary\"\n shape=\"square\"\n icon={<X />}\n aria-label=\"Close\"\n />\n )}\n />\n </div>\n <Dialog.Description className=\"text-kumo-subtle\">\n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do\n eiusmod tempor incididunt ut labore et dolore magna aliqua.\n </Dialog.Description>\n <div className=\"mt-8 flex justify-end gap-2\">\n <Dialog.Close\n render={(props) => (\n <Button variant=\"secondary\" {...props}>\n Cancel\n </Button>\n )}\n />\n <Dialog.Close\n render={(props) => (\n <Button variant=\"destructive\" {...props}>\n Delete\n </Button>\n )}\n />\n </div>\n </Dialog>\n </Dialog.Root>",
2819
+ "<Dialog.Root>\n <Dialog.Trigger render={(p) => <Button {...p}>Open capped dialog</Button>} />\n <Dialog className=\"max-w-lg p-8\">\n <div className=\"mb-4 flex items-start justify-between gap-4\">\n <Dialog.Title className=\"text-2xl font-semibold\">\n Max width override\n </Dialog.Title>\n <Dialog.Close\n aria-label=\"Close\"\n render={(props) => (\n <Button\n {...props}\n variant=\"secondary\"\n shape=\"square\"\n icon={<X />}\n aria-label=\"Close\"\n />\n )}\n />\n </div>\n <Dialog.Description className=\"text-kumo-subtle\">\n This dialog uses <code>className=\"max-w-lg\"</code> and should stay\n capped around 512px on desktop.\n </Dialog.Description>\n <div className=\"mt-4 truncate rounded-md border border-kumo-line bg-kumo-recessed p-3 font-mono text-sm\">\n abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\n </div>\n </Dialog>\n </Dialog.Root>",
2819
2820
  "<Dialog.Root disablePointerDismissal>\n <Dialog.Trigger\n render={(p) => (\n <Button {...p} variant=\"destructive\">\n Delete Project\n </Button>\n )}\n />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-kumo-danger/20\">\n <Warning size={20} className=\"text-kumo-danger\" />\n </div>\n <Dialog.Title className=\"text-xl font-semibold\">\n Delete Project?\n </Dialog.Title>\n </div>\n <Dialog.Description className=\"text-kumo-subtle\">\n This action cannot be undone. This will permanently delete the project\n and all associated data.\n </Dialog.Description>\n <div className=\"mt-8 flex justify-end gap-2\">\n <Dialog.Close\n render={(props) => (\n <Button variant=\"secondary\" {...props}>\n Cancel\n </Button>\n )}\n />\n <Dialog.Close\n render={(props) => (\n <Button variant=\"destructive\" {...props}>\n Delete\n </Button>\n )}\n />\n </div>\n </Dialog>\n </Dialog.Root>",
2820
2821
  "<Dialog.Root role=\"alertdialog\">\n <Dialog.Trigger\n render={(p) => (\n <Button {...p} variant=\"destructive\">\n Delete Account\n </Button>\n )}\n />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-center gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-kumo-danger/20\">\n <Warning size={20} className=\"text-kumo-danger\" weight=\"fill\" />\n </div>\n <Dialog.Title className=\"text-xl font-semibold\">\n Delete Account?\n </Dialog.Title>\n </div>\n <Dialog.Description className=\"text-kumo-subtle\">\n This action cannot be undone. All your data will be permanently\n removed from our servers. Are you sure you want to proceed?\n </Dialog.Description>\n <div className=\"mt-8 flex justify-end gap-2\">\n <Dialog.Close\n render={(props) => (\n <Button variant=\"secondary\" {...props}>\n Cancel\n </Button>\n )}\n />\n <Dialog.Close\n render={(props) => (\n <Button variant=\"destructive\" {...props}>\n Delete Account\n </Button>\n )}\n />\n </div>\n </Dialog>\n </Dialog.Root>",
2821
- "<Dialog.Root>\n <Dialog.Trigger render={(p) => <Button {...p}>Open Form</Button>} />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-start justify-between gap-4\">\n <Dialog.Title className=\"text-2xl font-semibold\">\n Create Resource\n </Dialog.Title>\n <Dialog.Close\n aria-label=\"Close\"\n render={(props) => (\n <Button\n {...props}\n variant=\"secondary\"\n shape=\"square\"\n icon={<X />}\n aria-label=\"Close\"\n />\n )}\n />\n </div>\n <Dialog.Description className=\"mb-4 text-kumo-subtle\">\n Select a region for your new resource.\n </Dialog.Description>\n <Select\n className=\"w-full\"\n renderValue={(v) =>\n regions.find((r) => r.value === v)?.label ?? \"Select region...\"\n }\n >\n {regions.map((region) => (\n <Select.Option key={region.value} value={region.value}>\n {region.label}\n </Select.Option>\n ))}\n </Select>\n <div className=\"mt-8 flex justify-end gap-2\">\n <Dialog.Close\n render={(props) => (\n <Button variant=\"secondary\" {...props}>\n Cancel\n </Button>\n )}\n />\n <Button variant=\"primary\">Create</Button>\n </div>\n </Dialog>\n </Dialog.Root>",
2822
+ "<Dialog.Root>\n <Dialog.Trigger render={(p) => <Button {...p}>Open Form</Button>} />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-start justify-between gap-4\">\n <Dialog.Title className=\"text-2xl font-semibold\">\n Create Resource\n </Dialog.Title>\n <Dialog.Close\n aria-label=\"Close\"\n render={(props) => (\n <Button\n {...props}\n variant=\"secondary\"\n shape=\"square\"\n icon={<X />}\n aria-label=\"Close\"\n />\n )}\n />\n </div>\n <Dialog.Description className=\"mb-4 text-kumo-subtle\">\n Select a region for your new resource.\n </Dialog.Description>\n <Select\n className=\"w-full\"\n placeholder=\"Select region...\"\n renderValue={(v) =>\n regions.find((r) => r.value === v)?.label\n }\n >\n {regions.map((region) => (\n <Select.Option key={region.value} value={region.value}>\n {region.label}\n </Select.Option>\n ))}\n </Select>\n <div className=\"mt-8 flex justify-end gap-2\">\n <Dialog.Close\n render={(props) => (\n <Button variant=\"secondary\" {...props}>\n Cancel\n </Button>\n )}\n />\n <Button variant=\"primary\">Create</Button>\n </div>\n </Dialog>\n </Dialog.Root>",
2822
2823
  "<Dialog.Root>\n <Dialog.Trigger render={(p) => <Button {...p}>Open Form</Button>} />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-start justify-between gap-4\">\n <Dialog.Title className=\"text-2xl font-semibold\">\n Create Resource\n </Dialog.Title>\n <Dialog.Close\n aria-label=\"Close\"\n render={(props) => (\n <Button\n {...props}\n variant=\"secondary\"\n shape=\"square\"\n icon={<X />}\n aria-label=\"Close\"\n />\n )}\n />\n </div>\n <Dialog.Description className=\"mb-4 text-kumo-subtle\">\n Search and select a region for your new resource.\n </Dialog.Description>\n <Combobox value={value} onValueChange={setValue} items={regions}>\n <Combobox.TriggerInput\n className=\"w-full\"\n placeholder=\"Search regions...\"\n />\n <Combobox.Content>\n <Combobox.Empty>No regions found</Combobox.Empty>\n <Combobox.List>\n {(item: { value: string; label: string }) => (\n <Combobox.Item key={item.value} value={item}>\n {item.label}\n </Combobox.Item>\n )}\n </Combobox.List>\n </Combobox.Content>\n </Combobox>\n <div className=\"mt-8 flex justify-end gap-2\">\n <Dialog.Close\n render={(props) => (\n <Button variant=\"secondary\" {...props}>\n Cancel\n </Button>\n )}\n />\n <Button variant=\"primary\">Create</Button>\n </div>\n </Dialog>\n </Dialog.Root>",
2823
2824
  "<Dialog.Root>\n <Dialog.Trigger render={(p) => <Button {...p}>Open Form</Button>} />\n <Dialog className=\"p-8\">\n <div className=\"mb-4 flex items-start justify-between gap-4\">\n <Dialog.Title className=\"text-2xl font-semibold\">\n Resource Actions\n </Dialog.Title>\n <Dialog.Close\n aria-label=\"Close\"\n render={(props) => (\n <Button\n {...props}\n variant=\"secondary\"\n shape=\"square\"\n icon={<X />}\n aria-label=\"Close\"\n />\n )}\n />\n </div>\n <Dialog.Description className=\"mb-4 text-kumo-subtle\">\n Choose an action for the selected resource.\n </Dialog.Description>\n <DropdownMenu>\n <DropdownMenu.Trigger render={<Button>Actions</Button>} />\n <DropdownMenu.Content>\n <DropdownMenu.Item>Edit</DropdownMenu.Item>\n <DropdownMenu.Item>Duplicate</DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item variant=\"danger\">Delete</DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu>\n <div className=\"mt-8 flex justify-end\">\n <Dialog.Close\n render={(props) => (\n <Button variant=\"secondary\" {...props}>\n Close\n </Button>\n )}\n />\n </div>\n </Dialog>\n </Dialog.Root>"
2824
2825
  ],
@@ -5049,6 +5050,11 @@
5049
5050
  "optional": true,
5050
5051
  "description": "Duration of sidebar expand/collapse animation in milliseconds."
5051
5052
  },
5053
+ "mobileBreakpoint": {
5054
+ "type": "number",
5055
+ "optional": true,
5056
+ "description": "Viewport width (in px) below which the sidebar renders as a mobile dialog sheet instead of the desktop aside rail."
5057
+ },
5052
5058
  "children": {
5053
5059
  "type": "ReactNode",
5054
5060
  "optional": true,
@@ -5066,16 +5072,16 @@
5066
5072
  "<DemoContainer>\n <Sidebar.Provider contained\n defaultOpen\n resizable\n defaultWidth={240}\n minWidth={180}\n maxWidth={400}\n className=\"min-h-0! h-full\"\n >\n <Sidebar>\n <Sidebar.Header>\n <BrandLogo />\n </Sidebar.Header>\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={HouseIcon} active>\n Home\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Storage\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n <Sidebar.Footer>\n <Sidebar.Trigger />\n </Sidebar.Footer>\n <Sidebar.ResizeHandle />\n </Sidebar>\n <DemoMain>\n <p>Drag the sidebar edge to resize</p>\n </DemoMain>\n </Sidebar.Provider>\n </DemoContainer>",
5067
5073
  "<DemoContainer>\n <Sidebar.Provider contained defaultOpen side=\"right\" className=\"min-h-0! h-full\">\n <DemoMain />\n <Sidebar>\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.GroupLabel>Details</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={GearIcon} active>\n Properties\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Metrics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={BellIcon}>Alerts</Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar>\n </Sidebar.Provider>\n </DemoContainer>",
5068
5074
  "<DemoContainer>\n <Sidebar.Provider contained defaultOpen peekable className=\"min-h-0! h-full\">\n <Sidebar>\n <Sidebar.Header>\n <BrandLogo />\n </Sidebar.Header>\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={HouseIcon} tooltip=\"Home\" active>\n Home\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon} tooltip=\"Analytics\">\n Analytics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={CodeIcon} tooltip=\"Compute\">\n Compute\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={DatabaseIcon} tooltip=\"Storage\">\n Storage\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n <Sidebar.Footer>\n <Sidebar.Trigger />\n </Sidebar.Footer>\n </Sidebar>\n <DemoMain>\n <PeekStateIndicator />\n </DemoMain>\n </Sidebar.Provider>\n </DemoContainer>",
5075
+ "<div className=\"relative h-[420px] w-full overflow-hidden rounded-lg border border-kumo-line bg-kumo-base\">\n <Sidebar.Provider contained defaultOpen className=\"min-h-0! h-full\">\n <Sidebar>\n <Sidebar.Header>\n <BrandLogo />\n </Sidebar.Header>\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={HouseIcon} active>\n Home\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={GlobeIcon}>\n Domains\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Group>\n <Sidebar.GroupLabel>Platform</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Storage\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ShieldCheckIcon}>\n Security\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={LockIcon}>\n Zero Trust\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={GearIcon}>\n Settings\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Group>\n <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuItem>\n <Sidebar.Collapsible autoScrollOnOpen>\n <Sidebar.CollapsibleTrigger\n render={\n <Sidebar.MenuButton icon={CodeIcon}>\n Workers\n <Sidebar.MenuChevron />\n </Sidebar.MenuButton>\n }\n />\n <Sidebar.CollapsibleContent>\n <Sidebar.MenuSub>\n <Sidebar.MenuSubButton>Overview</Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>Deployments</Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>Observability</Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>Settings</Sidebar.MenuSubButton>\n </Sidebar.MenuSub>\n </Sidebar.CollapsibleContent>\n </Sidebar.Collapsible>\n </Sidebar.MenuItem>\n <Sidebar.MenuButton icon={CubeIcon}>\n Containers\n <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n <Sidebar.Footer>\n <Sidebar.Trigger />\n </Sidebar.Footer>\n </Sidebar>\n <DemoMain>\n <p>Open Workers near the bottom of the list</p>\n </DemoMain>\n </Sidebar.Provider>\n </div>",
5069
5076
  "<DemoContainer>\n <Sidebar.Provider contained defaultOpen className=\"min-h-0! h-full\">\n <Sidebar>\n <Sidebar.Header>\n <button\n type=\"button\"\n onClick={() =>\n setSurface((s) => (s === \"account\" ? \"zone\" : \"account\"))\n }\n className=\"flex w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm font-medium text-kumo-default hover:bg-kumo-tint transition-colors\"\n >\n <ArrowsLeftRightIcon className=\"size-4 shrink-0 text-kumo-brand\" />\n <span className=\"flex-1 text-left font-semibold text-kumo-strong\">\n {surface === \"account\" ? \"Account Nav\" : \"Zone Nav\"}\n </span>\n </button>\n </Sidebar.Header>\n\n <Sidebar.SlidingViews\n activeKey={surface}\n direction={surface === \"zone\" ? \"left\" : \"right\"}\n >\n <Sidebar.SlidingView value=\"account\">\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.GroupLabel>Account</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={HouseIcon} active>\n Home\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={UserIcon}>\n Members\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={GearIcon}>\n Settings\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar.SlidingView>\n\n <Sidebar.SlidingView value=\"zone\">\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.GroupLabel>Zone</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={GlobeIcon} active>\n Overview\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ShieldCheckIcon}>\n Security\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={LockIcon}>\n SSL/TLS\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Caching\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar.SlidingView>\n </Sidebar.SlidingViews>\n </Sidebar>\n <DemoMain>\n <div className=\"flex flex-col items-center gap-2\">\n <p className=\"font-medium text-kumo-default\">\n Active: {surface === \"account\" ? \"Account\" : \"Zone\"} surface\n </p>\n <p>\n Click the header button to slide between views\n </p>\n </div>\n </DemoMain>\n </Sidebar.Provider>\n </DemoContainer>",
5070
- "<DemoContainer>\n <Sidebar.Provider contained defaultOpen peekable className=\"min-h-0! h-full\">\n <Sidebar>\n <Sidebar.Header>\n <AccountSwitcher />\n </Sidebar.Header>\n <Sidebar.SlidingViews\n activeKey={surface}\n direction={surface === \"domain\" ? \"left\" : \"right\"}\n >\n <Sidebar.SlidingView value=\"account\">\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton\n icon={MagnifyingGlassIcon}\n tooltip=\"Search\"\n className=\"ring ring-kumo-line group-data-[state=collapsed]/sidebar:ring-transparent\"\n >\n Quick search&hellip;\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={HouseIcon} active>\n Home\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics & Logs\n </Sidebar.MenuButton>\n <Sidebar.MenuButton\n icon={GlobeIcon}\n onClick={() => setSurface(\"domain\")}\n >\n Domains\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Group>\n <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuItem>\n <Sidebar.Collapsible defaultOpen>\n <Sidebar.CollapsibleTrigger\n render={\n <Sidebar.MenuButton icon={CodeIcon}>\n Compute\n <Sidebar.MenuChevron />\n </Sidebar.MenuButton>\n }\n />\n <Sidebar.CollapsibleContent>\n <Sidebar.MenuSub>\n <Sidebar.MenuSubItem>\n <Sidebar.Collapsible>\n <Sidebar.CollapsibleTrigger\n render={\n <Sidebar.MenuSubButton>\n Workers & Pages\n <Sidebar.MenuChevron />\n </Sidebar.MenuSubButton>\n }\n />\n <Sidebar.CollapsibleContent>\n <Sidebar.MenuSub>\n <Sidebar.MenuSubButton>\n Overview\n </Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>\n Workers\n </Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>\n Pages\n </Sidebar.MenuSubButton>\n </Sidebar.MenuSub>\n </Sidebar.CollapsibleContent>\n </Sidebar.Collapsible>\n </Sidebar.MenuSubItem>\n <Sidebar.MenuSubButton>\n Durable Objects\n </Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>\n Containers\n <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>\n </Sidebar.MenuSubButton>\n </Sidebar.MenuSub>\n </Sidebar.CollapsibleContent>\n </Sidebar.Collapsible>\n </Sidebar.MenuItem>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Storage\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Group>\n <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={ShieldCheckIcon}>\n Security\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={LockIcon}>\n Zero Trust\n <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar.SlidingView>\n\n <Sidebar.SlidingView value=\"domain\">\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton\n icon={ArrowLeftIcon}\n onClick={() => setSurface(\"account\")}\n >\n Back\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n <Sidebar.Group>\n <Sidebar.GroupLabel>example.com</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={GlobeIcon} active>\n Overview\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ShieldCheckIcon}>\n Security\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={LockIcon}>\n SSL/TLS\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Caching\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar.SlidingView>\n </Sidebar.SlidingViews>\n\n <Sidebar.Footer>\n <Sidebar.Trigger />\n </Sidebar.Footer>\n </Sidebar>\n <DemoMain />\n </Sidebar.Provider>\n </DemoContainer>"
5077
+ "<DemoContainer>\n <Sidebar.Provider contained defaultOpen peekable className=\"min-h-0! h-full\">\n <Sidebar>\n <Sidebar.Header>\n <AccountSwitcher />\n </Sidebar.Header>\n <Sidebar.SlidingViews\n activeKey={surface}\n direction={surface === \"domain\" ? \"left\" : \"right\"}\n >\n <Sidebar.SlidingView value=\"account\">\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton\n icon={MagnifyingGlassIcon}\n tooltip=\"Search\"\n className=\"ring ring-kumo-line group-data-[state=collapsed]/sidebar:ring-transparent mb-3 group-data-[state=collapsed]/sidebar:mb-0 transition-[margin] duration-(--sidebar-animation-duration)\"\n >\n Quick search&hellip;\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={HouseIcon} active>\n Home\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics & Logs\n </Sidebar.MenuButton>\n <Sidebar.MenuButton\n icon={GlobeIcon}\n onClick={() => setSurface(\"domain\")}\n >\n Domains\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Group>\n <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuItem>\n <Sidebar.Collapsible defaultOpen>\n <Sidebar.CollapsibleTrigger\n render={\n <Sidebar.MenuButton icon={CodeIcon}>\n Compute\n <Sidebar.MenuChevron />\n </Sidebar.MenuButton>\n }\n />\n <Sidebar.CollapsibleContent>\n <Sidebar.MenuSub>\n <Sidebar.MenuSubItem>\n <Sidebar.Collapsible>\n <Sidebar.CollapsibleTrigger\n render={\n <Sidebar.MenuSubButton>\n Workers & Pages\n <Sidebar.MenuChevron />\n </Sidebar.MenuSubButton>\n }\n />\n <Sidebar.CollapsibleContent>\n <Sidebar.MenuSub>\n <Sidebar.MenuSubButton>\n Overview\n </Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>\n Workers\n </Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>\n Pages\n </Sidebar.MenuSubButton>\n </Sidebar.MenuSub>\n </Sidebar.CollapsibleContent>\n </Sidebar.Collapsible>\n </Sidebar.MenuSubItem>\n <Sidebar.MenuSubButton>\n Durable Objects\n </Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>\n Containers\n <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>\n </Sidebar.MenuSubButton>\n </Sidebar.MenuSub>\n </Sidebar.CollapsibleContent>\n </Sidebar.Collapsible>\n </Sidebar.MenuItem>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Storage\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Group>\n <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={ShieldCheckIcon}>\n Security\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={LockIcon}>\n Zero Trust\n <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar.SlidingView>\n\n <Sidebar.SlidingView value=\"domain\">\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.Menu>\n <Sidebar.MenuButton\n icon={ArrowLeftIcon}\n onClick={() => setSurface(\"account\")}\n >\n Back\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n <Sidebar.Group>\n <Sidebar.GroupLabel>example.com</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={GlobeIcon} active>\n Overview\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ShieldCheckIcon}>\n Security\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={LockIcon}>\n SSL/TLS\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Caching\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar.SlidingView>\n </Sidebar.SlidingViews>\n\n <Sidebar.Footer>\n <Sidebar.Trigger />\n </Sidebar.Footer>\n </Sidebar>\n <DemoMain />\n </Sidebar.Provider>\n </DemoContainer>",
5078
+ "<div className=\"relative h-[540px] w-full overflow-hidden rounded-lg border border-kumo-line bg-kumo-base\">\n <Sidebar.Provider contained mobileBreakpoint={9999} className=\"h-full\">\n <Sidebar>\n <Sidebar.Header>\n <BrandLogo />\n </Sidebar.Header>\n <Sidebar.Content>\n <Sidebar.Group>\n <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={HouseIcon} active>\n Home\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={ChartBarIcon}>\n Analytics\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={GlobeIcon}>\n Domains\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Group>\n <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={CodeIcon}>\n Compute\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={DatabaseIcon}>\n Storage\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n </Sidebar.Content>\n <Sidebar.Footer>\n <Sidebar.Trigger />\n </Sidebar.Footer>\n </Sidebar>\n <DemoMain>\n <MobileToggleButton />\n <p>Click the button to open the mobile sidebar</p>\n <p className=\"text-sm text-kumo-subtle\">\n Press Escape or click the backdrop to close\n </p>\n </DemoMain>\n </Sidebar.Provider>\n </div>"
5071
5079
  ],
5072
5080
  "colors": [
5073
- "bg-kumo-base",
5074
5081
  "bg-kumo-brand",
5075
5082
  "bg-kumo-hairline",
5076
5083
  "bg-kumo-line",
5077
5084
  "bg-kumo-recessed",
5078
- "bg-kumo-tint",
5079
5085
  "border-kumo-line",
5080
5086
  "ring-kumo-brand",
5081
5087
  "text-kumo-default",
@@ -5135,6 +5141,10 @@
5135
5141
  "type": "number",
5136
5142
  "optional": true
5137
5143
  },
5144
+ "mobileBreakpoint": {
5145
+ "type": "number",
5146
+ "optional": true
5147
+ },
5138
5148
  "children": {
5139
5149
  "type": "ReactNode",
5140
5150
  "required": true
@@ -5292,6 +5302,10 @@
5292
5302
  "open": {
5293
5303
  "type": "boolean",
5294
5304
  "optional": true
5305
+ },
5306
+ "autoScrollOnOpen": {
5307
+ "type": "boolean",
5308
+ "optional": true
5295
5309
  }
5296
5310
  }
5297
5311
  },
@@ -5306,6 +5320,10 @@
5306
5320
  "open": {
5307
5321
  "type": "boolean",
5308
5322
  "optional": true
5323
+ },
5324
+ "autoScrollOnOpen": {
5325
+ "type": "boolean",
5326
+ "optional": true
5309
5327
  }
5310
5328
  }
5311
5329
  },
@@ -5320,6 +5338,10 @@
5320
5338
  "open": {
5321
5339
  "type": "boolean",
5322
5340
  "optional": true
5341
+ },
5342
+ "autoScrollOnOpen": {
5343
+ "type": "boolean",
5344
+ "optional": true
5323
5345
  }
5324
5346
  }
5325
5347
  },
@@ -5334,6 +5356,10 @@
5334
5356
  "open": {
5335
5357
  "type": "boolean",
5336
5358
  "optional": true
5359
+ },
5360
+ "autoScrollOnOpen": {
5361
+ "type": "boolean",
5362
+ "optional": true
5337
5363
  }
5338
5364
  }
5339
5365
  },
@@ -5358,6 +5384,10 @@
5358
5384
  "open": {
5359
5385
  "type": "boolean",
5360
5386
  "optional": true
5387
+ },
5388
+ "autoScrollOnOpen": {
5389
+ "type": "boolean",
5390
+ "optional": true
5361
5391
  }
5362
5392
  }
5363
5393
  },
@@ -2800,6 +2800,38 @@ Close sub-component
2800
2800
  </Dialog.Root>
2801
2801
  ```
2802
2802
 
2803
+ ```tsx
2804
+ <Dialog.Root>
2805
+ <Dialog.Trigger render={(p) => <Button {...p}>Open capped dialog</Button>} />
2806
+ <Dialog className="max-w-lg p-8">
2807
+ <div className="mb-4 flex items-start justify-between gap-4">
2808
+ <Dialog.Title className="text-2xl font-semibold">
2809
+ Max width override
2810
+ </Dialog.Title>
2811
+ <Dialog.Close
2812
+ aria-label="Close"
2813
+ render={(props) => (
2814
+ <Button
2815
+ {...props}
2816
+ variant="secondary"
2817
+ shape="square"
2818
+ icon={<X />}
2819
+ aria-label="Close"
2820
+ />
2821
+ )}
2822
+ />
2823
+ </div>
2824
+ <Dialog.Description className="text-kumo-subtle">
2825
+ This dialog uses <code>className="max-w-lg"</code> and should stay
2826
+ capped around 512px on desktop.
2827
+ </Dialog.Description>
2828
+ <div className="mt-4 truncate rounded-md border border-kumo-line bg-kumo-recessed p-3 font-mono text-sm">
2829
+ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
2830
+ </div>
2831
+ </Dialog>
2832
+ </Dialog.Root>
2833
+ ```
2834
+
2803
2835
  ```tsx
2804
2836
  <Dialog.Root disablePointerDismissal>
2805
2837
  <Dialog.Trigger
@@ -2910,8 +2942,9 @@ Close sub-component
2910
2942
  </Dialog.Description>
2911
2943
  <Select
2912
2944
  className="w-full"
2945
+ placeholder="Select region..."
2913
2946
  renderValue={(v) =>
2914
- regions.find((r) => r.value === v)?.label ?? "Select region..."
2947
+ regions.find((r) => r.value === v)?.label
2915
2948
  }
2916
2949
  >
2917
2950
  {regions.map((region) => (
@@ -6157,6 +6190,8 @@ Sidebar — responsive navigation panel with expand/collapse support. Compound
6157
6190
  When true, hovering or focusing the collapsed sidebar temporarily expands it. The `state` will be `"peeking"` during the peek. Moving away collapses it back.
6158
6191
  - `animationDuration`: number
6159
6192
  Duration of sidebar expand/collapse animation in milliseconds.
6193
+ - `mobileBreakpoint`: number
6194
+ Viewport width (in px) below which the sidebar renders as a mobile dialog sheet instead of the desktop aside rail.
6160
6195
  - `children`: ReactNode
6161
6196
  Content — typically `<Sidebar>` + main content.
6162
6197
  - `className`: string
@@ -6164,7 +6199,7 @@ Sidebar — responsive navigation panel with expand/collapse support. Compound
6164
6199
 
6165
6200
  **Colors (kumo tokens used):**
6166
6201
 
6167
- `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-hairline`, `bg-kumo-line`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-brand`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
6202
+ `bg-kumo-brand`, `bg-kumo-hairline`, `bg-kumo-line`, `bg-kumo-recessed`, `border-kumo-line`, `ring-kumo-brand`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
6168
6203
 
6169
6204
  **Styling:**
6170
6205
 
@@ -6190,6 +6225,7 @@ Props:
6190
6225
  - `contained`: boolean
6191
6226
  - `peekable`: boolean
6192
6227
  - `animationDuration`: number
6228
+ - `mobileBreakpoint`: number
6193
6229
  - `children`: ReactNode (required)
6194
6230
  - `className`: string
6195
6231
 
@@ -6288,6 +6324,7 @@ Separator sub-component
6288
6324
  Props:
6289
6325
  - `defaultOpen`: boolean
6290
6326
  - `open`: boolean
6327
+ - `autoScrollOnOpen`: boolean
6291
6328
 
6292
6329
  #### Sidebar.Trigger
6293
6330
 
@@ -6296,6 +6333,7 @@ Trigger sub-component
6296
6333
  Props:
6297
6334
  - `defaultOpen`: boolean
6298
6335
  - `open`: boolean
6336
+ - `autoScrollOnOpen`: boolean
6299
6337
 
6300
6338
  #### Sidebar.Rail
6301
6339
 
@@ -6304,6 +6342,7 @@ Rail sub-component
6304
6342
  Props:
6305
6343
  - `defaultOpen`: boolean
6306
6344
  - `open`: boolean
6345
+ - `autoScrollOnOpen`: boolean
6307
6346
 
6308
6347
  #### Sidebar.ResizeHandle
6309
6348
 
@@ -6312,6 +6351,7 @@ ResizeHandle sub-component
6312
6351
  Props:
6313
6352
  - `defaultOpen`: boolean
6314
6353
  - `open`: boolean
6354
+ - `autoScrollOnOpen`: boolean
6315
6355
 
6316
6356
  #### Sidebar.MenuChevron
6317
6357
 
@@ -6327,6 +6367,7 @@ Collapsible sub-component
6327
6367
  Props:
6328
6368
  - `defaultOpen`: boolean
6329
6369
  - `open`: boolean
6370
+ - `autoScrollOnOpen`: boolean
6330
6371
 
6331
6372
  #### Sidebar.CollapsibleTrigger
6332
6373
 
@@ -6544,6 +6585,88 @@ Props:
6544
6585
  </DemoContainer>
6545
6586
  ```
6546
6587
 
6588
+ ```tsx
6589
+ <div className="relative h-[420px] w-full overflow-hidden rounded-lg border border-kumo-line bg-kumo-base">
6590
+ <Sidebar.Provider contained defaultOpen className="min-h-0! h-full">
6591
+ <Sidebar>
6592
+ <Sidebar.Header>
6593
+ <BrandLogo />
6594
+ </Sidebar.Header>
6595
+ <Sidebar.Content>
6596
+ <Sidebar.Group>
6597
+ <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
6598
+ <Sidebar.Menu>
6599
+ <Sidebar.MenuButton icon={HouseIcon} active>
6600
+ Home
6601
+ </Sidebar.MenuButton>
6602
+ <Sidebar.MenuButton icon={ChartBarIcon}>
6603
+ Analytics
6604
+ </Sidebar.MenuButton>
6605
+ <Sidebar.MenuButton icon={GlobeIcon}>
6606
+ Domains
6607
+ </Sidebar.MenuButton>
6608
+ </Sidebar.Menu>
6609
+ </Sidebar.Group>
6610
+
6611
+ <Sidebar.Group>
6612
+ <Sidebar.GroupLabel>Platform</Sidebar.GroupLabel>
6613
+ <Sidebar.Menu>
6614
+ <Sidebar.MenuButton icon={DatabaseIcon}>
6615
+ Storage
6616
+ </Sidebar.MenuButton>
6617
+ <Sidebar.MenuButton icon={ShieldCheckIcon}>
6618
+ Security
6619
+ </Sidebar.MenuButton>
6620
+ <Sidebar.MenuButton icon={LockIcon}>
6621
+ Zero Trust
6622
+ </Sidebar.MenuButton>
6623
+ <Sidebar.MenuButton icon={GearIcon}>
6624
+ Settings
6625
+ </Sidebar.MenuButton>
6626
+ </Sidebar.Menu>
6627
+ </Sidebar.Group>
6628
+
6629
+ <Sidebar.Group>
6630
+ <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
6631
+ <Sidebar.Menu>
6632
+ <Sidebar.MenuItem>
6633
+ <Sidebar.Collapsible autoScrollOnOpen>
6634
+ <Sidebar.CollapsibleTrigger
6635
+ render={
6636
+ <Sidebar.MenuButton icon={CodeIcon}>
6637
+ Workers
6638
+ <Sidebar.MenuChevron />
6639
+ </Sidebar.MenuButton>
6640
+ }
6641
+ />
6642
+ <Sidebar.CollapsibleContent>
6643
+ <Sidebar.MenuSub>
6644
+ <Sidebar.MenuSubButton>Overview</Sidebar.MenuSubButton>
6645
+ <Sidebar.MenuSubButton>Deployments</Sidebar.MenuSubButton>
6646
+ <Sidebar.MenuSubButton>Observability</Sidebar.MenuSubButton>
6647
+ <Sidebar.MenuSubButton>Settings</Sidebar.MenuSubButton>
6648
+ </Sidebar.MenuSub>
6649
+ </Sidebar.CollapsibleContent>
6650
+ </Sidebar.Collapsible>
6651
+ </Sidebar.MenuItem>
6652
+ <Sidebar.MenuButton icon={CubeIcon}>
6653
+ Containers
6654
+ <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>
6655
+ </Sidebar.MenuButton>
6656
+ </Sidebar.Menu>
6657
+ </Sidebar.Group>
6658
+ </Sidebar.Content>
6659
+ <Sidebar.Footer>
6660
+ <Sidebar.Trigger />
6661
+ </Sidebar.Footer>
6662
+ </Sidebar>
6663
+ <DemoMain>
6664
+ <p>Open Workers near the bottom of the list</p>
6665
+ </DemoMain>
6666
+ </Sidebar.Provider>
6667
+ </div>
6668
+ ```
6669
+
6547
6670
  ```tsx
6548
6671
  <DemoContainer>
6549
6672
  <Sidebar.Provider contained defaultOpen className="min-h-0! h-full">
@@ -6644,7 +6767,7 @@ Props:
6644
6767
  <Sidebar.MenuButton
6645
6768
  icon={MagnifyingGlassIcon}
6646
6769
  tooltip="Search"
6647
- className="ring ring-kumo-line group-data-[state=collapsed]/sidebar:ring-transparent"
6770
+ className="ring ring-kumo-line group-data-[state=collapsed]/sidebar:ring-transparent mb-3 group-data-[state=collapsed]/sidebar:mb-0 transition-[margin] duration-(--sidebar-animation-duration)"
6648
6771
  >
6649
6772
  Quick search&hellip;
6650
6773
  </Sidebar.MenuButton>
@@ -6784,6 +6907,56 @@ Props:
6784
6907
  </DemoContainer>
6785
6908
  ```
6786
6909
 
6910
+ ```tsx
6911
+ <div className="relative h-[540px] w-full overflow-hidden rounded-lg border border-kumo-line bg-kumo-base">
6912
+ <Sidebar.Provider contained mobileBreakpoint={9999} className="h-full">
6913
+ <Sidebar>
6914
+ <Sidebar.Header>
6915
+ <BrandLogo />
6916
+ </Sidebar.Header>
6917
+ <Sidebar.Content>
6918
+ <Sidebar.Group>
6919
+ <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
6920
+ <Sidebar.Menu>
6921
+ <Sidebar.MenuButton icon={HouseIcon} active>
6922
+ Home
6923
+ </Sidebar.MenuButton>
6924
+ <Sidebar.MenuButton icon={ChartBarIcon}>
6925
+ Analytics
6926
+ </Sidebar.MenuButton>
6927
+ <Sidebar.MenuButton icon={GlobeIcon}>
6928
+ Domains
6929
+ </Sidebar.MenuButton>
6930
+ </Sidebar.Menu>
6931
+ </Sidebar.Group>
6932
+
6933
+ <Sidebar.Group>
6934
+ <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
6935
+ <Sidebar.Menu>
6936
+ <Sidebar.MenuButton icon={CodeIcon}>
6937
+ Compute
6938
+ </Sidebar.MenuButton>
6939
+ <Sidebar.MenuButton icon={DatabaseIcon}>
6940
+ Storage
6941
+ </Sidebar.MenuButton>
6942
+ </Sidebar.Menu>
6943
+ </Sidebar.Group>
6944
+ </Sidebar.Content>
6945
+ <Sidebar.Footer>
6946
+ <Sidebar.Trigger />
6947
+ </Sidebar.Footer>
6948
+ </Sidebar>
6949
+ <DemoMain>
6950
+ <MobileToggleButton />
6951
+ <p>Click the button to open the mobile sidebar</p>
6952
+ <p className="text-sm text-kumo-subtle">
6953
+ Press Escape or click the backdrop to close
6954
+ </p>
6955
+ </DemoMain>
6956
+ </Sidebar.Provider>
6957
+ </div>
6958
+ ```
6959
+
6787
6960
 
6788
6961
  ---
6789
6962
 
package/ai/schemas.ts CHANGED
@@ -714,6 +714,7 @@ export const SidebarPropsSchema = z.object({
714
714
  contained: z.boolean().optional(), // When true, the collapsed sidebar uses absolute positioning instead of fixed, keeping it scoped inside a bounded parent. Useful for demos and embedded sidebars.
715
715
  peekable: z.boolean().optional(), // When true, hovering or focusing the collapsed sidebar temporarily expands it. The `state` will be `"peeking"` during the peek. Moving away collapses it back.
716
716
  animationDuration: z.number().optional(), // Duration of sidebar expand/collapse animation in milliseconds.
717
+ mobileBreakpoint: z.number().optional(), // Viewport width (in px) below which the sidebar renders as a mobile dialog sheet instead of the desktop aside rail.
717
718
  children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content — typically `<Sidebar>` + main content.
718
719
  className: z.string().optional(), // Additional CSS classes for the wrapper div.
719
720
  });
@@ -1 +1 @@
1
- 1780084158364
1
+ 1780927666222
@@ -1017,6 +1017,7 @@ export declare const SidebarPropsSchema: z.ZodObject<{
1017
1017
  contained: z.ZodOptional<z.ZodBoolean>;
1018
1018
  peekable: z.ZodOptional<z.ZodBoolean>;
1019
1019
  animationDuration: z.ZodOptional<z.ZodNumber>;
1020
+ mobileBreakpoint: z.ZodOptional<z.ZodNumber>;
1020
1021
  children: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodObject<{
1021
1022
  path: z.ZodString;
1022
1023
  }, z.core.$strip>]>]>>;
@@ -2163,6 +2164,7 @@ export declare const ComponentPropsSchemas: {
2163
2164
  contained: z.ZodOptional<z.ZodBoolean>;
2164
2165
  peekable: z.ZodOptional<z.ZodBoolean>;
2165
2166
  animationDuration: z.ZodOptional<z.ZodNumber>;
2167
+ mobileBreakpoint: z.ZodOptional<z.ZodNumber>;
2166
2168
  children: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodObject<{
2167
2169
  path: z.ZodString;
2168
2170
  }, z.core.$strip>]>]>>;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../ai/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,eAAe,CAAC,CAAC,IACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GACzC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAM7D;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;mBAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAM7D;;;GAGG;AAIH,MAAM,MAAM,eAAe,GACvB;IAAE,GAAG,EAAE,eAAe,EAAE,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,eAAe,EAAE,CAAA;CAAE,GACzB;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;CAAE,GACpC;IAAE,GAAG,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;CAAE,GACpC;IAAE,GAAG,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;CAAE,GACpC;IAAE,GAAG,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;CAAE,CAAC;AAkB1C,eAAO,MAAM,yBAAyB;;;;;;;4GAKpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAM5E;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;iBAM9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;iBAMvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAMlD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;iBAWlC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;iBAW5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;iBAIjC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iBAW9B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAOnC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+PpC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;iBAK1B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe9B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;iBAIpC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;iBAGhC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;iBAOrC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAK5B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;iBAElC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;iBAQ3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;iBAS3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;iBAS1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;iBAQ3B,CAAC;AAEH,eAAO,MAAM,oBAAoB,gCAAe,CAAC;AAEjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAahC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;iBAO3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiB1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;iBAS3B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;iBAUhC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;iBAE7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;iBAY3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmB5B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwBpC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAe7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAQ7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkB5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;iBAM3B,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;iBAMrC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;iBAW1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;iBAK7B,CAAC;AAMH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,eAAe,GAAG,gBAAgB,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,gBAAgB,GAAG,YAAY,GAAG,iBAAiB,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5jB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2ClC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CxB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQ9B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAMlD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAMjF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAErE;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,+fAAggB,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../ai/schemas.ts"],"names":[],"mappings":"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"}