@cloudflare/kumo 1.15.0 → 1.16.0

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 (158) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/ai/component-registry.json +317 -13
  3. package/ai/component-registry.md +507 -26
  4. package/ai/schemas.ts +18 -2
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +57 -2
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/ai/schemas.js +366 -341
  9. package/dist/ai/schemas.js.map +1 -1
  10. package/dist/chunks/{Legend-mkh1v83sz972e29d.js → Legend-bov5dqf08wemc2qj.js} +112 -100
  11. package/dist/chunks/Legend-bov5dqf08wemc2qj.js.map +1 -0
  12. package/dist/chunks/{checkbox-bvzuggmadtqawis4.js → checkbox-lawmt1894wr6rpgi.js} +3 -3
  13. package/dist/chunks/{checkbox-bvzuggmadtqawis4.js.map → checkbox-lawmt1894wr6rpgi.js.map} +1 -1
  14. package/dist/chunks/{clipboard-text-mwcknzn75qdvigrd.js → clipboard-text-ohx8kkpxisz382rj.js} +3 -3
  15. package/dist/chunks/{clipboard-text-mwcknzn75qdvigrd.js.map → clipboard-text-ohx8kkpxisz382rj.js.map} +1 -1
  16. package/dist/chunks/{combobox-ndbaroqh1c0u49ye.js → combobox-ft0u7rfaxawk0r0c.js} +4 -4
  17. package/dist/chunks/{combobox-ndbaroqh1c0u49ye.js.map → combobox-ft0u7rfaxawk0r0c.js.map} +1 -1
  18. package/dist/chunks/{command-palette-ejoszjfivybu9yi5.js → command-palette-b31nq4wk7o7gx4sa.js} +2 -2
  19. package/dist/chunks/{command-palette-ejoszjfivybu9yi5.js.map → command-palette-b31nq4wk7o7gx4sa.js.map} +1 -1
  20. package/dist/chunks/{dialog-gkmecnx48ge38jrr.js → dialog-l5tmwxrzp9g83jmw.js} +2 -2
  21. package/dist/chunks/{dialog-gkmecnx48ge38jrr.js.map → dialog-l5tmwxrzp9g83jmw.js.map} +1 -1
  22. package/dist/chunks/{dropdown-i8n7nv3cvkvb1x3e.js → dropdown-icy3xatdwhzr4une.js} +2 -2
  23. package/dist/chunks/{dropdown-i8n7nv3cvkvb1x3e.js.map → dropdown-icy3xatdwhzr4une.js.map} +1 -1
  24. package/dist/chunks/{field-lweivfadxgpqhuqi.js → field-csje72m7j9403fj5.js} +3 -3
  25. package/dist/chunks/{field-lweivfadxgpqhuqi.js.map → field-csje72m7j9403fj5.js.map} +1 -1
  26. package/dist/chunks/hcl-hcu7d6ja6t540ijn.js +8 -0
  27. package/dist/chunks/hcl-hcu7d6ja6t540ijn.js.map +1 -0
  28. package/dist/chunks/{input-area-obli4ufvu40bfpgp.js → input-area-jko15sbc6zeage3l.js} +4 -4
  29. package/dist/chunks/{input-area-obli4ufvu40bfpgp.js.map → input-area-jko15sbc6zeage3l.js.map} +1 -1
  30. package/dist/chunks/{input-ko2dne1givlxq7sz.js → input-c8jmidy7gdqfiky1.js} +3 -3
  31. package/dist/chunks/{input-ko2dne1givlxq7sz.js.map → input-c8jmidy7gdqfiky1.js.map} +1 -1
  32. package/dist/chunks/{input-group-dwtsd04lzf2bcsdo.js → input-group-cjsy8kh4vf9312xl.js} +2 -2
  33. package/dist/chunks/{input-group-dwtsd04lzf2bcsdo.js.map → input-group-cjsy8kh4vf9312xl.js.map} +1 -1
  34. package/dist/chunks/{label-kjahhybc191quieo.js → label-i46xnnzdh9bsxk6a.js} +2 -2
  35. package/dist/chunks/{label-kjahhybc191quieo.js.map → label-i46xnnzdh9bsxk6a.js.map} +1 -1
  36. package/dist/chunks/{link-lpzl5s47pmobk361.js → link-o7yfj4kwgl19fklp.js} +2 -2
  37. package/dist/chunks/{link-lpzl5s47pmobk361.js.map → link-o7yfj4kwgl19fklp.js.map} +1 -1
  38. package/dist/chunks/{menubar-ifxxdoa35zz79z1q.js → menubar-g1wqqjuyyfvsim83.js} +2 -2
  39. package/dist/chunks/{menubar-ifxxdoa35zz79z1q.js.map → menubar-g1wqqjuyyfvsim83.js.map} +1 -1
  40. package/dist/chunks/{meter-fbtqfg0okpwmaiju.js → meter-cqkrg5axjenbsuue.js} +2 -2
  41. package/dist/chunks/{meter-fbtqfg0okpwmaiju.js.map → meter-cqkrg5axjenbsuue.js.map} +1 -1
  42. package/dist/chunks/{pagination-eo0gzzm7v5w8niqe.js → pagination-e3dp8bd80s35f7sd.js} +3 -3
  43. package/dist/chunks/{pagination-eo0gzzm7v5w8niqe.js.map → pagination-e3dp8bd80s35f7sd.js.map} +1 -1
  44. package/dist/chunks/{popover-dd7hi5ajeoq9od1i.js → popover-jurf834u2uywluux.js} +2 -2
  45. package/dist/chunks/{popover-dd7hi5ajeoq9od1i.js.map → popover-jurf834u2uywluux.js.map} +1 -1
  46. package/dist/chunks/{radio-oi9iw7ls1t04j377.js → radio-l9dzm6sohcvvrsdc.js} +2 -2
  47. package/dist/chunks/{radio-oi9iw7ls1t04j377.js.map → radio-l9dzm6sohcvvrsdc.js.map} +1 -1
  48. package/dist/chunks/{select-0m0xklfwdlx8dwba.js → select-hnt87e3cfos48qql.js} +3 -3
  49. package/dist/chunks/{select-0m0xklfwdlx8dwba.js.map → select-hnt87e3cfos48qql.js.map} +1 -1
  50. package/dist/chunks/{sensitive-input-rjpykxn2llh0thx1.js → sensitive-input-lvtccf3iqc06lj7b.js} +4 -4
  51. package/dist/chunks/{sensitive-input-rjpykxn2llh0thx1.js.map → sensitive-input-lvtccf3iqc06lj7b.js.map} +1 -1
  52. package/dist/chunks/sidebar-l6rk9o5qf8k5vth1.js +875 -0
  53. package/dist/chunks/sidebar-l6rk9o5qf8k5vth1.js.map +1 -0
  54. package/dist/chunks/{switch-lv4mrrkfl5uc99xo.js → switch-fukrbip86khvqjn7.js} +3 -3
  55. package/dist/chunks/{switch-lv4mrrkfl5uc99xo.js.map → switch-fukrbip86khvqjn7.js.map} +1 -1
  56. package/dist/chunks/{table-fh7jmfip27vdapxm.js → table-orfgzwvxh8yr90dk.js} +2 -2
  57. package/dist/chunks/{table-fh7jmfip27vdapxm.js.map → table-orfgzwvxh8yr90dk.js.map} +1 -1
  58. package/dist/chunks/{tabs-hy6oa7xtf96d9mxt.js → tabs-n0t7iro7wr0pzgk2.js} +2 -2
  59. package/dist/chunks/{tabs-hy6oa7xtf96d9mxt.js.map → tabs-n0t7iro7wr0pzgk2.js.map} +1 -1
  60. package/dist/chunks/{toast-kswfqmjysxcrwij3.js → toast-r9ajsces7xp8l85w.js} +8 -8
  61. package/dist/chunks/{toast-kswfqmjysxcrwij3.js.map → toast-r9ajsces7xp8l85w.js.map} +1 -1
  62. package/dist/chunks/{tooltip-k68wcv9mrigb7rcb.js → tooltip-hnc71tg4gz2gpcvc.js} +2 -2
  63. package/dist/chunks/{tooltip-k68wcv9mrigb7rcb.js.map → tooltip-hnc71tg4gz2gpcvc.js.map} +1 -1
  64. package/dist/chunks/{vendor-base-ui-cpvkrhz4zgw9nw2b.js → vendor-base-ui-ccr5l0ynrievzzv3.js} +564 -563
  65. package/dist/chunks/{vendor-base-ui-cpvkrhz4zgw9nw2b.js.map → vendor-base-ui-ccr5l0ynrievzzv3.js.map} +1 -1
  66. package/dist/code/server.js +2 -1
  67. package/dist/code/server.js.map +1 -1
  68. package/dist/code.js +14 -13
  69. package/dist/code.js.map +1 -1
  70. package/dist/components/chart.js +1 -1
  71. package/dist/components/checkbox.js +1 -1
  72. package/dist/components/clipboard-text.js +1 -1
  73. package/dist/components/combobox.js +1 -1
  74. package/dist/components/command-palette.js +1 -1
  75. package/dist/components/dialog.js +1 -1
  76. package/dist/components/dropdown.js +1 -1
  77. package/dist/components/field.js +1 -1
  78. package/dist/components/flow.js +2138 -2087
  79. package/dist/components/flow.js.map +1 -1
  80. package/dist/components/input.js +3 -3
  81. package/dist/components/label.js +1 -1
  82. package/dist/components/link.js +1 -1
  83. package/dist/components/menubar.js +1 -1
  84. package/dist/components/meter.js +1 -1
  85. package/dist/components/pagination.js +1 -1
  86. package/dist/components/popover.js +1 -1
  87. package/dist/components/radio.js +1 -1
  88. package/dist/components/select.js +1 -1
  89. package/dist/components/sensitive-input.js +1 -1
  90. package/dist/components/sidebar.js +35 -0
  91. package/dist/components/sidebar.js.map +1 -0
  92. package/dist/components/switch.js +1 -1
  93. package/dist/components/table.js +1 -1
  94. package/dist/components/tabs.js +1 -1
  95. package/dist/components/toast.js +2 -2
  96. package/dist/components/tooltip.js +1 -1
  97. package/dist/index.js +194 -163
  98. package/dist/index.js.map +1 -1
  99. package/dist/primitives/accordion.js +1 -1
  100. package/dist/primitives/alert-dialog.js +1 -1
  101. package/dist/primitives/autocomplete.js +1 -1
  102. package/dist/primitives/avatar.js +1 -1
  103. package/dist/primitives/button.js +1 -1
  104. package/dist/primitives/checkbox-group.js +1 -1
  105. package/dist/primitives/checkbox.js +1 -1
  106. package/dist/primitives/collapsible.js +1 -1
  107. package/dist/primitives/combobox.js +1 -1
  108. package/dist/primitives/context-menu.js +1 -1
  109. package/dist/primitives/csp-provider.js +1 -1
  110. package/dist/primitives/dialog.js +1 -1
  111. package/dist/primitives/direction-provider.js +1 -1
  112. package/dist/primitives/drawer.js +1 -1
  113. package/dist/primitives/field.js +1 -1
  114. package/dist/primitives/fieldset.js +1 -1
  115. package/dist/primitives/form.js +1 -1
  116. package/dist/primitives/input.js +1 -1
  117. package/dist/primitives/menu.js +1 -1
  118. package/dist/primitives/menubar.js +1 -1
  119. package/dist/primitives/meter.js +1 -1
  120. package/dist/primitives/navigation-menu.js +1 -1
  121. package/dist/primitives/number-field.js +1 -1
  122. package/dist/primitives/popover.js +1 -1
  123. package/dist/primitives/preview-card.js +1 -1
  124. package/dist/primitives/progress.js +1 -1
  125. package/dist/primitives/radio-group.js +1 -1
  126. package/dist/primitives/radio.js +1 -1
  127. package/dist/primitives/scroll-area.js +1 -1
  128. package/dist/primitives/select.js +1 -1
  129. package/dist/primitives/separator.js +1 -1
  130. package/dist/primitives/slider.js +1 -1
  131. package/dist/primitives/switch.js +1 -1
  132. package/dist/primitives/tabs.js +1 -1
  133. package/dist/primitives/toast.js +1 -1
  134. package/dist/primitives/toggle-group.js +1 -1
  135. package/dist/primitives/toggle.js +1 -1
  136. package/dist/primitives/toolbar.js +1 -1
  137. package/dist/primitives/tooltip.js +1 -1
  138. package/dist/primitives.js +1 -1
  139. package/dist/src/code/provider.d.ts.map +1 -1
  140. package/dist/src/code/server.d.ts.map +1 -1
  141. package/dist/src/code/types.d.ts +1 -1
  142. package/dist/src/code/types.d.ts.map +1 -1
  143. package/dist/src/components/chart/EChart.d.ts.map +1 -1
  144. package/dist/src/components/chart/TimeseriesChart.d.ts +11 -1
  145. package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
  146. package/dist/src/components/flow/diagram.d.ts.map +1 -1
  147. package/dist/src/components/flow/node.d.ts.map +1 -1
  148. package/dist/src/components/flow/parallel.d.ts.map +1 -1
  149. package/dist/src/components/sidebar/index.d.ts +2 -0
  150. package/dist/src/components/sidebar/index.d.ts.map +1 -0
  151. package/dist/src/components/sidebar/sidebar.d.ts +556 -0
  152. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -0
  153. package/dist/src/index.d.ts +1 -0
  154. package/dist/src/index.d.ts.map +1 -1
  155. package/dist/styles/kumo-standalone.css +1 -1
  156. package/package.json +6 -2
  157. package/scripts/component-registry/index.ts +12 -0
  158. package/dist/chunks/Legend-mkh1v83sz972e29d.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @cloudflare/kumo
2
2
 
3
+ ## 1.16.0
4
+
5
+ ### Minor Changes
6
+
7
+ - c5f69b9: Make Chart components keyboard focusable with tabindex. Timeseries adds `ariaDescription` prop
8
+
9
+ ### Patch Changes
10
+
11
+ - b3c44f1: Generate component-registry files at build time, remove from git
12
+
13
+ Eliminates contributor friction by generating component-registry.json,
14
+ component-registry.md, and schemas.ts during the build process instead of
15
+ tracking them in git. Contributors will no longer see stale diffs or need to
16
+ manually regenerate these files.
17
+ - Add ai/component-registry.json and ai/component-registry.md to .gitignore
18
+ - Convert ai/schemas.ts to a stub file for TypeScript compilation
19
+ - Add codegen:registry to build script for deterministic generation
20
+
21
+ - 759f4e8: feat(code): add HCL (HashiCorp Configuration Language) as a supported syntax highlighting language
22
+ - a67fac7: fix(flow): connector lines no longer misalign when the page scrolls or a sidebar shifts the layout
23
+
24
+ `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.
25
+
26
+ 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.
27
+
28
+ - 15a344e: Add missing HCL language import to server-side Shiki bundle
29
+
30
+ The HCL language was added to SupportedLanguage type and the client-side
31
+ provider in a previous commit, but the server.tsx BUNDLED_LANGS object
32
+ was missed. This caused typecheck failures when building.
33
+
34
+ - 5d8d3a9: Sidebar: polish animations, fix separator reflow bug, improve header spacing
35
+ - 7e82920: Fix connector alignment and spacing between adjacent parallel nodes in Flow diagrams
36
+
3
37
  ## 1.15.0
4
38
 
5
39
  ### Minor Changes
@@ -1938,13 +1938,7 @@
1938
1938
  "description": "Additional CSS classes merged via `cn()`."
1939
1939
  }
1940
1940
  },
1941
- "examples": [
1942
- "<CodeBlock\n lang=\"tsx\"\n code={`const greeting = \"Hello, World!\";\nconsole.log(greeting);`}\n />",
1943
- "<CodeBlock\n lang=\"tsx\"\n code={`interface User {\n id: string;\n name: string;\n email: string;\n}\n\nconst user: User = {\n id: \"1\",\n name: \"John Doe\",\n email: \"john@example.com\"\n};`}\n />",
1944
- "<CodeBlock\n lang=\"bash\"\n code={`npm install @cloudflare/kumo\npnpm add @cloudflare/kumo`}\n />",
1945
- "<CodeBlock\n lang=\"jsonc\"\n code={`{\n \"name\": \"kumo\",\n \"version\": \"1.0.0\",\n \"dependencies\": {\n \"react\": \"^19.0.0\"\n }\n}`}\n />",
1946
- "<Code\n lang=\"bash\"\n code=\"export API_KEY={{apiKey}}\"\n values={{\n apiKey: { value: \"sk_live_123\", highlight: true },\n }}\n />"
1947
- ],
1941
+ "examples": [],
1948
1942
  "colors": [
1949
1943
  "bg-kumo-base",
1950
1944
  "border-kumo-fill",
@@ -3354,7 +3348,8 @@
3354
3348
  "examples": [
3355
3349
  "<Loader />",
3356
3350
  "<div className=\"flex items-center gap-4\">\n <Loader size=\"sm\" />\n <Loader size=\"base\" />\n <Loader size=\"lg\" />\n </div>",
3357
- "<Loader size={24} />"
3351
+ "<Loader size={24} />",
3352
+ "<Loader className=\"text-kumo-subtle\" />"
3358
3353
  ],
3359
3354
  "colors": []
3360
3355
  },
@@ -3387,9 +3382,9 @@
3387
3382
  }
3388
3383
  },
3389
3384
  "examples": [
3390
- "<MenuBar\n isActive=\"bold\"\n optionIds\n options={[\n {\n icon: <TextBolderIcon />,\n id: \"bold\",\n tooltip: \"Bold\",\n onClick: () => {},\n },\n {\n icon: <TextItalicIcon />,\n id: \"italic\",\n tooltip: \"Italic\",\n onClick: () => {},\n },\n ]}\n />",
3391
- "<MenuBar\n isActive=\"bold\"\n optionIds\n options={[\n {\n icon: <TextBolderIcon />,\n id: \"bold\",\n tooltip: \"Bold\",\n onClick: () => {},\n },\n {\n icon: <TextItalicIcon />,\n id: \"italic\",\n tooltip: \"Italic\",\n onClick: () => {},\n },\n ]}\n />",
3392
- "<MenuBar\n isActive=\"\"\n optionIds\n options={[\n {\n icon: <TextBolderIcon />,\n id: \"bold\",\n tooltip: \"Bold\",\n onClick: () => {},\n },\n {\n icon: <TextItalicIcon />,\n id: \"italic\",\n tooltip: \"Italic\",\n onClick: () => {},\n },\n ]}\n />"
3385
+ "<MenuBar\n isActive={active}\n optionIds\n options={[\n {\n icon: <TextBolderIcon />,\n id: \"bold\",\n tooltip: \"Bold\",\n onClick: () => setActive(active === \"bold\" ? undefined : \"bold\"),\n },\n {\n icon: <TextItalicIcon />,\n id: \"italic\",\n tooltip: \"Italic\",\n onClick: () => setActive(active === \"italic\" ? undefined : \"italic\"),\n },\n ]}\n />",
3386
+ "<MenuBar\n isActive={active}\n optionIds\n options={[\n {\n icon: <TextBolderIcon />,\n id: \"bold\",\n tooltip: \"Bold\",\n onClick: () => setActive(active === \"bold\" ? undefined : \"bold\"),\n },\n {\n icon: <TextItalicIcon />,\n id: \"italic\",\n tooltip: \"Italic\",\n onClick: () => setActive(active === \"italic\" ? undefined : \"italic\"),\n },\n ]}\n />",
3387
+ "<MenuBar\n isActive={active}\n optionIds\n options={[\n {\n icon: <TextBolderIcon />,\n id: \"bold\",\n tooltip: \"Bold\",\n onClick: () => setActive(active === \"bold\" ? undefined : \"bold\"),\n },\n {\n icon: <TextItalicIcon />,\n id: \"italic\",\n tooltip: \"Italic\",\n onClick: () => setActive(active === \"italic\" ? undefined : \"italic\"),\n },\n ]}\n />"
3393
3388
  ],
3394
3389
  "colors": [
3395
3390
  "bg-kumo-base",
@@ -3461,7 +3456,7 @@
3461
3456
  "<Meter label=\"Progress\" value={40} showValue={false} />",
3462
3457
  "<Meter label=\"Quota reached\" value={100} />",
3463
3458
  "<Meter label=\"Memory usage\" value={15} />",
3464
- "<Meter\n label=\"Upload progress\"\n value={80}\n indicatorClassName=\"from-green-500 via-green-500 to-green-500\"\n />"
3459
+ "<Meter\n label=\"Upload progress\"\n value={80}\n indicatorClassName=\"from-kumo-success via-kumo-success to-kumo-success\"\n />"
3465
3460
  ],
3466
3461
  "colors": [
3467
3462
  "bg-kumo-fill",
@@ -4154,6 +4149,298 @@
4154
4149
  "text-kumo-subtle"
4155
4150
  ]
4156
4151
  },
4152
+ "Sidebar": {
4153
+ "name": "Sidebar",
4154
+ "type": "component",
4155
+ "description": "Sidebar — responsive navigation panel with expand/collapse support. Compound component: `Sidebar` (root `<aside>`), `.Provider`, `.Header`, `.Content`, `.Footer`, `.Group`, `.GroupLabel`, `.GroupContent`, `.Menu`, `.MenuItem`, `.MenuButton`, `.MenuAction`, `.MenuBadge`, `.MenuSub`, `.MenuSubItem`, `.MenuSubButton`, `.Separator`, `.Input`, `.Trigger`, `.Rail`, `.MenuChevron`, `.Collapsible`, `.CollapsibleTrigger`, `.CollapsibleContent`. Built on `@base-ui/react/collapsible` + `@base-ui/react/dialog`.",
4156
+ "importPath": "@cloudflare/kumo",
4157
+ "category": "Other",
4158
+ "props": {
4159
+ "defaultOpen": {
4160
+ "type": "boolean",
4161
+ "optional": true,
4162
+ "description": "Initial open state when uncontrolled."
4163
+ },
4164
+ "open": {
4165
+ "type": "boolean",
4166
+ "optional": true,
4167
+ "description": "Controlled open state."
4168
+ },
4169
+ "variant": {
4170
+ "type": "enum",
4171
+ "optional": true,
4172
+ "description": "Sidebar layout variant.",
4173
+ "values": [
4174
+ "sidebar",
4175
+ "floating",
4176
+ "inset"
4177
+ ],
4178
+ "descriptions": {
4179
+ "sidebar": "Standard sidebar with border separator",
4180
+ "floating": "Floating sidebar with shadow and rounded corners",
4181
+ "inset": "Inset sidebar within the content area"
4182
+ },
4183
+ "default": "sidebar"
4184
+ },
4185
+ "side": {
4186
+ "type": "enum",
4187
+ "optional": true,
4188
+ "description": "Which side the sidebar is on.",
4189
+ "values": [
4190
+ "left",
4191
+ "right"
4192
+ ],
4193
+ "descriptions": {
4194
+ "left": "Left-aligned sidebar",
4195
+ "right": "Right-aligned sidebar"
4196
+ },
4197
+ "default": "left"
4198
+ },
4199
+ "collapsible": {
4200
+ "type": "enum",
4201
+ "optional": true,
4202
+ "values": [
4203
+ "icon",
4204
+ "offcanvas",
4205
+ "none"
4206
+ ],
4207
+ "descriptions": {
4208
+ "icon": "Collapses to show icons only",
4209
+ "offcanvas": "Slides off screen when collapsed",
4210
+ "none": "Cannot be collapsed"
4211
+ },
4212
+ "default": "icon"
4213
+ },
4214
+ "resizable": {
4215
+ "type": "boolean",
4216
+ "optional": true,
4217
+ "description": "Enable drag-to-resize on the sidebar edge."
4218
+ },
4219
+ "defaultWidth": {
4220
+ "type": "number",
4221
+ "optional": true,
4222
+ "description": "Initial width in pixels when resizable."
4223
+ },
4224
+ "minWidth": {
4225
+ "type": "number",
4226
+ "optional": true,
4227
+ "description": "Minimum width in pixels when resizing."
4228
+ },
4229
+ "maxWidth": {
4230
+ "type": "number",
4231
+ "optional": true,
4232
+ "description": "Maximum width in pixels when resizing."
4233
+ },
4234
+ "children": {
4235
+ "type": "ReactNode",
4236
+ "optional": true,
4237
+ "description": "Content — typically `<Sidebar>` + main content."
4238
+ },
4239
+ "className": {
4240
+ "type": "string",
4241
+ "optional": true,
4242
+ "description": "Additional CSS classes for the wrapper div."
4243
+ }
4244
+ },
4245
+ "examples": [
4246
+ "<DemoContainer>\n <Sidebar.Provider defaultOpen className=\"min-h-0! h-full\">\n <Sidebar>\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.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.MenuSubButton>\n Workers & Pages\n </Sidebar.MenuSubButton>\n <Sidebar.MenuSubButton>\n Durable Objects\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 </Sidebar.Content>\n </Sidebar>\n <DemoMain />\n </Sidebar.Provider>\n </DemoContainer>",
4247
+ "<DemoContainer>\n <Sidebar.Provider defaultOpen className=\"min-h-0! h-full\">\n <Sidebar>\n <Sidebar.Content>\n {/* GroupContent is required for collapsible groups (provides grid-rows animation) */}\n <Sidebar.Group collapsible defaultOpen>\n <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>\n <Sidebar.GroupContent>\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.GroupContent>\n </Sidebar.Group>\n\n <Sidebar.Group collapsible defaultOpen>\n <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>\n <Sidebar.GroupContent>\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.GroupContent>\n </Sidebar.Group>\n\n <Sidebar.Group collapsible defaultOpen={false}>\n <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>\n <Sidebar.GroupContent>\n <Sidebar.Menu>\n <Sidebar.MenuButton icon={ShieldCheckIcon}>\n Security\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={LockIcon}>\n Zero Trust\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.GroupContent>\n </Sidebar.Group>\n </Sidebar.Content>\n </Sidebar>\n <DemoMain />\n </Sidebar.Provider>\n </DemoContainer>",
4248
+ "<DemoContainer>\n <Sidebar.Provider 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.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 <ToggleButton />\n <p className=\"text-sm\">\n Click the button or the sidebar trigger to toggle\n </p>\n </DemoMain>\n </Sidebar.Provider>\n </DemoContainer>",
4249
+ "<DemoContainer>\n <Sidebar.Provider defaultOpen className=\"min-h-0! h-full\">\n <Sidebar>\n <Sidebar.Header>\n <AccountSwitcher />\n </Sidebar.Header>\n\n <Sidebar.Content>\n <div className=\"px-1 pb-2\">\n <Sidebar.Input placeholder=\"Quick search...\" shortcut=\"⌘K\" />\n </div>\n\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 & Logs\n </Sidebar.MenuButton>\n <Sidebar.MenuButton icon={GlobeIcon}>\n Domains\n </Sidebar.MenuButton>\n </Sidebar.Menu>\n </Sidebar.Group>\n\n <Sidebar.Separator />\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.MenuSubButton>\n Workers & Pages\n </Sidebar.MenuSubButton>\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\n <Sidebar.Footer>\n <Sidebar.MenuButton icon={GearIcon}>\n Manage account\n </Sidebar.MenuButton>\n </Sidebar.Footer>\n </Sidebar>\n <DemoMain />\n </Sidebar.Provider>\n </DemoContainer>",
4250
+ "<DemoContainer>\n <Sidebar.Provider\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.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={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 className=\"text-sm\">Drag the sidebar edge to resize</p>\n </DemoMain>\n </Sidebar.Provider>\n </DemoContainer>",
4251
+ "<DemoContainer>\n <Sidebar.Provider 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>"
4252
+ ],
4253
+ "colors": [
4254
+ "bg-kumo-base",
4255
+ "bg-kumo-brand",
4256
+ "bg-kumo-line",
4257
+ "bg-kumo-overlay",
4258
+ "bg-kumo-recessed",
4259
+ "bg-kumo-tint",
4260
+ "border-kumo-line",
4261
+ "ring-kumo-line",
4262
+ "ring-kumo-ring",
4263
+ "text-kumo-default",
4264
+ "text-kumo-strong",
4265
+ "text-kumo-subtle"
4266
+ ],
4267
+ "subComponents": {
4268
+ "Provider": {
4269
+ "name": "Provider",
4270
+ "description": "Provider sub-component",
4271
+ "props": {
4272
+ "defaultOpen": {
4273
+ "type": "boolean",
4274
+ "optional": true
4275
+ },
4276
+ "open": {
4277
+ "type": "boolean",
4278
+ "optional": true
4279
+ },
4280
+ "variant": {
4281
+ "type": "SidebarVariant",
4282
+ "optional": true
4283
+ },
4284
+ "side": {
4285
+ "type": "SidebarSide",
4286
+ "optional": true
4287
+ },
4288
+ "collapsible": {
4289
+ "type": "\"icon\" | \"offcanvas\" | \"none\"",
4290
+ "optional": true
4291
+ },
4292
+ "resizable": {
4293
+ "type": "boolean",
4294
+ "optional": true
4295
+ },
4296
+ "defaultWidth": {
4297
+ "type": "number",
4298
+ "optional": true
4299
+ },
4300
+ "minWidth": {
4301
+ "type": "number",
4302
+ "optional": true
4303
+ },
4304
+ "maxWidth": {
4305
+ "type": "number",
4306
+ "optional": true
4307
+ },
4308
+ "children": {
4309
+ "type": "ReactNode",
4310
+ "required": true
4311
+ },
4312
+ "className": {
4313
+ "type": "string",
4314
+ "optional": true
4315
+ }
4316
+ }
4317
+ },
4318
+ "Header": {
4319
+ "name": "Header",
4320
+ "description": "Header sub-component",
4321
+ "props": {}
4322
+ },
4323
+ "Content": {
4324
+ "name": "Content",
4325
+ "description": "Content sub-component",
4326
+ "props": {}
4327
+ },
4328
+ "Footer": {
4329
+ "name": "Footer",
4330
+ "description": "Footer sub-component",
4331
+ "props": {}
4332
+ },
4333
+ "Group": {
4334
+ "name": "Group",
4335
+ "description": "Group sub-component",
4336
+ "props": {}
4337
+ },
4338
+ "GroupLabel": {
4339
+ "name": "GroupLabel",
4340
+ "description": "GroupLabel sub-component",
4341
+ "props": {}
4342
+ },
4343
+ "GroupContent": {
4344
+ "name": "GroupContent",
4345
+ "description": "GroupContent sub-component",
4346
+ "props": {}
4347
+ },
4348
+ "Menu": {
4349
+ "name": "Menu",
4350
+ "description": "Menu sub-component",
4351
+ "props": {}
4352
+ },
4353
+ "MenuItem": {
4354
+ "name": "MenuItem",
4355
+ "description": "MenuItem sub-component",
4356
+ "props": {}
4357
+ },
4358
+ "MenuButton": {
4359
+ "name": "MenuButton",
4360
+ "description": "MenuButton sub-component",
4361
+ "props": {}
4362
+ },
4363
+ "MenuAction": {
4364
+ "name": "MenuAction",
4365
+ "description": "MenuAction sub-component",
4366
+ "props": {}
4367
+ },
4368
+ "MenuBadge": {
4369
+ "name": "MenuBadge",
4370
+ "description": "MenuBadge sub-component",
4371
+ "props": {}
4372
+ },
4373
+ "MenuSub": {
4374
+ "name": "MenuSub",
4375
+ "description": "MenuSub sub-component",
4376
+ "props": {}
4377
+ },
4378
+ "MenuSubItem": {
4379
+ "name": "MenuSubItem",
4380
+ "description": "MenuSubItem sub-component",
4381
+ "props": {}
4382
+ },
4383
+ "MenuSubButton": {
4384
+ "name": "MenuSubButton",
4385
+ "description": "MenuSubButton sub-component",
4386
+ "props": {}
4387
+ },
4388
+ "Separator": {
4389
+ "name": "Separator",
4390
+ "description": "Separator sub-component",
4391
+ "props": {}
4392
+ },
4393
+ "Input": {
4394
+ "name": "Input",
4395
+ "description": "Input sub-component",
4396
+ "props": {}
4397
+ },
4398
+ "Trigger": {
4399
+ "name": "Trigger",
4400
+ "description": "Trigger sub-component",
4401
+ "props": {}
4402
+ },
4403
+ "Rail": {
4404
+ "name": "Rail",
4405
+ "description": "Rail sub-component",
4406
+ "props": {}
4407
+ },
4408
+ "ResizeHandle": {
4409
+ "name": "ResizeHandle",
4410
+ "description": "ResizeHandle sub-component",
4411
+ "props": {}
4412
+ },
4413
+ "MenuChevron": {
4414
+ "name": "MenuChevron",
4415
+ "description": "MenuChevron sub-component",
4416
+ "props": {}
4417
+ },
4418
+ "Collapsible": {
4419
+ "name": "Collapsible",
4420
+ "description": "Collapsible sub-component",
4421
+ "props": {}
4422
+ },
4423
+ "CollapsibleTrigger": {
4424
+ "name": "CollapsibleTrigger",
4425
+ "description": "CollapsibleTrigger sub-component",
4426
+ "props": {}
4427
+ },
4428
+ "CollapsibleContent": {
4429
+ "name": "CollapsibleContent",
4430
+ "description": "CollapsibleContent sub-component",
4431
+ "props": {}
4432
+ }
4433
+ },
4434
+ "styling": {
4435
+ "width": {
4436
+ "expanded": "16rem",
4437
+ "icon": "3rem"
4438
+ },
4439
+ "mobile": {
4440
+ "breakpoint": 768
4441
+ }
4442
+ }
4443
+ },
4157
4444
  "Surface": {
4158
4445
  "name": "Surface",
4159
4446
  "type": "component",
@@ -4306,7 +4593,8 @@
4306
4593
  "<Switch label=\"Disabled\" checked={false} disabled />",
4307
4594
  "<Switch\n label=\"Neutral switch\"\n variant=\"neutral\"\n checked={checked}\n onCheckedChange={setChecked}\n />",
4308
4595
  "<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Neutral off\"\n variant=\"neutral\"\n checked={false}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral on\"\n variant=\"neutral\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral disabled\"\n variant=\"neutral\"\n checked={false}\n disabled\n />\n </div>",
4309
- "<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Default variant\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral variant\"\n variant=\"neutral\"\n checked={true}\n onCheckedChange={() => {}}\n />\n </div>"
4596
+ "<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Default variant\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral variant\"\n variant=\"neutral\"\n checked={true}\n onCheckedChange={() => {}}\n />\n </div>",
4597
+ "<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Small\"\n size=\"sm\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Base (default)\"\n size=\"base\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Large\"\n size=\"lg\"\n checked={true}\n onCheckedChange={() => {}}\n />\n </div>"
4310
4598
  ],
4311
4599
  "colors": [
4312
4600
  "bg-kumo-base",
@@ -4375,6 +4663,9 @@
4375
4663
  "descriptions": {
4376
4664
  "auto": "Auto table layout - columns resize based on content",
4377
4665
  "fixed": "Fixed table layout - columns have equal width, controlled via colgroup"
4666
+ },
4667
+ "classes": {
4668
+ "fixed": "table-fixed"
4378
4669
  }
4379
4670
  },
4380
4671
  "variant": {
@@ -4387,6 +4678,9 @@
4387
4678
  "descriptions": {
4388
4679
  "default": "Default row variant",
4389
4680
  "selected": "Selected row variant"
4681
+ },
4682
+ "classes": {
4683
+ "selected": "bg-kumo-tint"
4390
4684
  }
4391
4685
  },
4392
4686
  "className": {
@@ -4712,6 +5006,13 @@
4712
5006
  "error": "Error toast for critical issues",
4713
5007
  "warning": "Warning toast for cautionary messages",
4714
5008
  "info": "Info toast for neutral informational messages"
5009
+ },
5010
+ "classes": {
5011
+ "default": "border-kumo-fill bg-kumo-control",
5012
+ "success": "border-kumo-success bg-kumo-control [&_[data-toast-icon]]:text-kumo-success [&_[data-toast-title]]:text-kumo-success",
5013
+ "error": "border-kumo-danger bg-kumo-control [&_[data-toast-icon]]:text-kumo-danger [&_[data-toast-title]]:text-kumo-danger",
5014
+ "warning": "border-kumo-warning bg-kumo-control [&_[data-toast-icon]]:text-kumo-warning [&_[data-toast-title]]:text-kumo-warning",
5015
+ "info": "border-kumo-info bg-kumo-control [&_[data-toast-icon]]:text-kumo-info [&_[data-toast-title]]:text-kumo-info"
4715
5016
  }
4716
5017
  },
4717
5018
  "className": {
@@ -5109,6 +5410,7 @@
5109
5410
  "Label",
5110
5411
  "Link",
5111
5412
  "SensitiveInput",
5413
+ "Sidebar",
5112
5414
  "Table",
5113
5415
  "DeleteResource"
5114
5416
  ],
@@ -5165,6 +5467,7 @@
5165
5467
  "ResourceListPage",
5166
5468
  "Select",
5167
5469
  "SensitiveInput",
5470
+ "Sidebar",
5168
5471
  "Surface",
5169
5472
  "Switch",
5170
5473
  "Table",
@@ -5205,6 +5508,7 @@
5205
5508
  "Radio",
5206
5509
  "Select",
5207
5510
  "SensitiveInput",
5511
+ "Sidebar",
5208
5512
  "Surface",
5209
5513
  "Switch",
5210
5514
  "Table",