@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
@@ -1077,27 +1077,6 @@ Props:
1077
1077
  - `lang`: CodeLang
1078
1078
 
1079
1079
 
1080
- **Examples:**
1081
-
1082
- ```tsx
1083
- <CodeBlock
1084
- lang="tsx"
1085
- code={`const greeting = "Hello, World!";
1086
- console.log(greeting);`}
1087
- />
1088
- ```
1089
-
1090
- ```tsx
1091
- <Code
1092
- lang="bash"
1093
- code="export API_KEY={{apiKey}}"
1094
- values={{
1095
- apiKey: { value: "sk_live_123", highlight: true },
1096
- }}
1097
- />
1098
- ```
1099
-
1100
-
1101
1080
  ---
1102
1081
 
1103
1082
  ### Collapsible
@@ -3316,6 +3295,10 @@ Animated circular spinner for indicating loading states.
3316
3295
  <Loader size={24} />
3317
3296
  ```
3318
3297
 
3298
+ ```tsx
3299
+ <Loader className="text-kumo-subtle" />
3300
+ ```
3301
+
3319
3302
 
3320
3303
  ---
3321
3304
 
@@ -3351,20 +3334,20 @@ MenuBar — horizontal icon-button toolbar with keyboard arrow-key navigation.
3351
3334
 
3352
3335
  ```tsx
3353
3336
  <MenuBar
3354
- isActive="bold"
3337
+ isActive={active}
3355
3338
  optionIds
3356
3339
  options={[
3357
3340
  {
3358
3341
  icon: <TextBolderIcon />,
3359
3342
  id: "bold",
3360
3343
  tooltip: "Bold",
3361
- onClick: () => {},
3344
+ onClick: () => setActive(active === "bold" ? undefined : "bold"),
3362
3345
  },
3363
3346
  {
3364
3347
  icon: <TextItalicIcon />,
3365
3348
  id: "italic",
3366
3349
  tooltip: "Italic",
3367
- onClick: () => {},
3350
+ onClick: () => setActive(active === "italic" ? undefined : "italic"),
3368
3351
  },
3369
3352
  ]}
3370
3353
  />
@@ -3424,7 +3407,7 @@ Progress bar showing a measured value within a known range (e.g. quota usage).
3424
3407
  <Meter
3425
3408
  label="Upload progress"
3426
3409
  value={80}
3427
- indicatorClassName="from-green-500 via-green-500 to-green-500"
3410
+ indicatorClassName="from-kumo-success via-kumo-success to-kumo-success"
3428
3411
  />
3429
3412
  ```
3430
3413
 
@@ -4433,6 +4416,481 @@ Password/secret input that masks its value by default and reveals on click. Incl
4433
4416
  ```
4434
4417
 
4435
4418
 
4419
+ ---
4420
+
4421
+ ### Sidebar
4422
+
4423
+ 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`.
4424
+
4425
+ **Type:** component
4426
+
4427
+ **Import:** `import { Sidebar } from "@cloudflare/kumo";`
4428
+
4429
+ **Category:** Other
4430
+
4431
+ **Props:**
4432
+
4433
+ - `defaultOpen`: boolean
4434
+ Initial open state when uncontrolled.
4435
+ - `open`: boolean
4436
+ Controlled open state.
4437
+ - `variant`: enum [default: sidebar]
4438
+ - `"sidebar"`: Standard sidebar with border separator
4439
+ - `"floating"`: Floating sidebar with shadow and rounded corners
4440
+ - `"inset"`: Inset sidebar within the content area
4441
+ - `side`: enum [default: left]
4442
+ - `"left"`: Left-aligned sidebar
4443
+ - `"right"`: Right-aligned sidebar
4444
+ - `collapsible`: enum [default: icon]
4445
+ - `"icon"`: Collapses to show icons only
4446
+ - `"offcanvas"`: Slides off screen when collapsed
4447
+ - `"none"`: Cannot be collapsed
4448
+ - `resizable`: boolean
4449
+ Enable drag-to-resize on the sidebar edge.
4450
+ - `defaultWidth`: number
4451
+ Initial width in pixels when resizable.
4452
+ - `minWidth`: number
4453
+ Minimum width in pixels when resizing.
4454
+ - `maxWidth`: number
4455
+ Maximum width in pixels when resizing.
4456
+ - `children`: ReactNode
4457
+ Content — typically `<Sidebar>` + main content.
4458
+ - `className`: string
4459
+ Additional CSS classes for the wrapper div.
4460
+
4461
+ **Colors (kumo tokens used):**
4462
+
4463
+ `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-line`, `bg-kumo-overlay`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-line`, `ring-kumo-ring`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
4464
+
4465
+ **Styling:**
4466
+
4467
+
4468
+ **Sub-Components:**
4469
+
4470
+ This is a compound component. Use these sub-components:
4471
+
4472
+ #### Sidebar.Provider
4473
+
4474
+ Provider sub-component
4475
+
4476
+ Props:
4477
+ - `defaultOpen`: boolean
4478
+ - `open`: boolean
4479
+ - `variant`: SidebarVariant
4480
+ - `side`: SidebarSide
4481
+ - `collapsible`: "icon" | "offcanvas" | "none"
4482
+ - `resizable`: boolean
4483
+ - `defaultWidth`: number
4484
+ - `minWidth`: number
4485
+ - `maxWidth`: number
4486
+ - `children`: ReactNode (required)
4487
+ - `className`: string
4488
+
4489
+ #### Sidebar.Header
4490
+
4491
+ Header sub-component
4492
+
4493
+ #### Sidebar.Content
4494
+
4495
+ Content sub-component
4496
+
4497
+ #### Sidebar.Footer
4498
+
4499
+ Footer sub-component
4500
+
4501
+ #### Sidebar.Group
4502
+
4503
+ Group sub-component
4504
+
4505
+ #### Sidebar.GroupLabel
4506
+
4507
+ GroupLabel sub-component
4508
+
4509
+ #### Sidebar.GroupContent
4510
+
4511
+ GroupContent sub-component
4512
+
4513
+ #### Sidebar.Menu
4514
+
4515
+ Menu sub-component
4516
+
4517
+ #### Sidebar.MenuItem
4518
+
4519
+ MenuItem sub-component
4520
+
4521
+ #### Sidebar.MenuButton
4522
+
4523
+ MenuButton sub-component
4524
+
4525
+ #### Sidebar.MenuAction
4526
+
4527
+ MenuAction sub-component
4528
+
4529
+ #### Sidebar.MenuBadge
4530
+
4531
+ MenuBadge sub-component
4532
+
4533
+ #### Sidebar.MenuSub
4534
+
4535
+ MenuSub sub-component
4536
+
4537
+ #### Sidebar.MenuSubItem
4538
+
4539
+ MenuSubItem sub-component
4540
+
4541
+ #### Sidebar.MenuSubButton
4542
+
4543
+ MenuSubButton sub-component
4544
+
4545
+ #### Sidebar.Separator
4546
+
4547
+ Separator sub-component
4548
+
4549
+ #### Sidebar.Input
4550
+
4551
+ Input sub-component
4552
+
4553
+ #### Sidebar.Trigger
4554
+
4555
+ Trigger sub-component
4556
+
4557
+ #### Sidebar.Rail
4558
+
4559
+ Rail sub-component
4560
+
4561
+ #### Sidebar.ResizeHandle
4562
+
4563
+ ResizeHandle sub-component
4564
+
4565
+ #### Sidebar.MenuChevron
4566
+
4567
+ MenuChevron sub-component
4568
+
4569
+ #### Sidebar.Collapsible
4570
+
4571
+ Collapsible sub-component
4572
+
4573
+ #### Sidebar.CollapsibleTrigger
4574
+
4575
+ CollapsibleTrigger sub-component
4576
+
4577
+ #### Sidebar.CollapsibleContent
4578
+
4579
+ CollapsibleContent sub-component
4580
+
4581
+
4582
+ **Examples:**
4583
+
4584
+ ```tsx
4585
+ <DemoContainer>
4586
+ <Sidebar.Provider defaultOpen className="min-h-0! h-full">
4587
+ <Sidebar>
4588
+ <Sidebar.Content>
4589
+ <Sidebar.Group>
4590
+ <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
4591
+ <Sidebar.Menu>
4592
+ <Sidebar.MenuButton icon={HouseIcon} active>
4593
+ Home
4594
+ </Sidebar.MenuButton>
4595
+ <Sidebar.MenuButton icon={ChartBarIcon}>
4596
+ Analytics
4597
+ </Sidebar.MenuButton>
4598
+ <Sidebar.MenuButton icon={GlobeIcon}>
4599
+ Domains
4600
+ </Sidebar.MenuButton>
4601
+ </Sidebar.Menu>
4602
+ </Sidebar.Group>
4603
+
4604
+ <Sidebar.Group>
4605
+ <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
4606
+ <Sidebar.Menu>
4607
+ <Sidebar.MenuItem>
4608
+ <Sidebar.Collapsible defaultOpen>
4609
+ <Sidebar.CollapsibleTrigger
4610
+ render={
4611
+ <Sidebar.MenuButton icon={CodeIcon}>
4612
+ Compute
4613
+ <Sidebar.MenuChevron />
4614
+ </Sidebar.MenuButton>
4615
+ }
4616
+ />
4617
+ <Sidebar.CollapsibleContent>
4618
+ <Sidebar.MenuSub>
4619
+ <Sidebar.MenuSubButton>
4620
+ Workers & Pages
4621
+ </Sidebar.MenuSubButton>
4622
+ <Sidebar.MenuSubButton>
4623
+ Durable Objects
4624
+ </Sidebar.MenuSubButton>
4625
+ </Sidebar.MenuSub>
4626
+ </Sidebar.CollapsibleContent>
4627
+ </Sidebar.Collapsible>
4628
+ </Sidebar.MenuItem>
4629
+ <Sidebar.MenuButton icon={DatabaseIcon}>
4630
+ Storage
4631
+ </Sidebar.MenuButton>
4632
+ </Sidebar.Menu>
4633
+ </Sidebar.Group>
4634
+ </Sidebar.Content>
4635
+ </Sidebar>
4636
+ <DemoMain />
4637
+ </Sidebar.Provider>
4638
+ </DemoContainer>
4639
+ ```
4640
+
4641
+ ```tsx
4642
+ <DemoContainer>
4643
+ <Sidebar.Provider defaultOpen className="min-h-0! h-full">
4644
+ <Sidebar>
4645
+ <Sidebar.Content>
4646
+ {/* GroupContent is required for collapsible groups (provides grid-rows animation) */}
4647
+ <Sidebar.Group collapsible defaultOpen>
4648
+ <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
4649
+ <Sidebar.GroupContent>
4650
+ <Sidebar.Menu>
4651
+ <Sidebar.MenuButton icon={HouseIcon} active>
4652
+ Home
4653
+ </Sidebar.MenuButton>
4654
+ <Sidebar.MenuButton icon={ChartBarIcon}>
4655
+ Analytics
4656
+ </Sidebar.MenuButton>
4657
+ <Sidebar.MenuButton icon={GlobeIcon}>
4658
+ Domains
4659
+ </Sidebar.MenuButton>
4660
+ </Sidebar.Menu>
4661
+ </Sidebar.GroupContent>
4662
+ </Sidebar.Group>
4663
+
4664
+ <Sidebar.Group collapsible defaultOpen>
4665
+ <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
4666
+ <Sidebar.GroupContent>
4667
+ <Sidebar.Menu>
4668
+ <Sidebar.MenuButton icon={CodeIcon}>
4669
+ Compute
4670
+ </Sidebar.MenuButton>
4671
+ <Sidebar.MenuButton icon={DatabaseIcon}>
4672
+ Storage
4673
+ </Sidebar.MenuButton>
4674
+ </Sidebar.Menu>
4675
+ </Sidebar.GroupContent>
4676
+ </Sidebar.Group>
4677
+
4678
+ <Sidebar.Group collapsible defaultOpen={false}>
4679
+ <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>
4680
+ <Sidebar.GroupContent>
4681
+ <Sidebar.Menu>
4682
+ <Sidebar.MenuButton icon={ShieldCheckIcon}>
4683
+ Security
4684
+ </Sidebar.MenuButton>
4685
+ <Sidebar.MenuButton icon={LockIcon}>
4686
+ Zero Trust
4687
+ </Sidebar.MenuButton>
4688
+ </Sidebar.Menu>
4689
+ </Sidebar.GroupContent>
4690
+ </Sidebar.Group>
4691
+ </Sidebar.Content>
4692
+ </Sidebar>
4693
+ <DemoMain />
4694
+ </Sidebar.Provider>
4695
+ </DemoContainer>
4696
+ ```
4697
+
4698
+ ```tsx
4699
+ <DemoContainer>
4700
+ <Sidebar.Provider defaultOpen className="min-h-0! h-full">
4701
+ <Sidebar>
4702
+ <Sidebar.Header>
4703
+ <BrandLogo />
4704
+ </Sidebar.Header>
4705
+ <Sidebar.Content>
4706
+ <Sidebar.Group>
4707
+ <Sidebar.Menu>
4708
+ <Sidebar.MenuButton icon={HouseIcon} tooltip="Home" active>
4709
+ Home
4710
+ </Sidebar.MenuButton>
4711
+ <Sidebar.MenuButton icon={ChartBarIcon} tooltip="Analytics">
4712
+ Analytics
4713
+ </Sidebar.MenuButton>
4714
+ <Sidebar.MenuButton icon={CodeIcon} tooltip="Compute">
4715
+ Compute
4716
+ </Sidebar.MenuButton>
4717
+ <Sidebar.MenuButton icon={DatabaseIcon} tooltip="Storage">
4718
+ Storage
4719
+ </Sidebar.MenuButton>
4720
+ </Sidebar.Menu>
4721
+ </Sidebar.Group>
4722
+ </Sidebar.Content>
4723
+ <Sidebar.Footer>
4724
+ <Sidebar.Trigger />
4725
+ </Sidebar.Footer>
4726
+ </Sidebar>
4727
+ <DemoMain>
4728
+ <ToggleButton />
4729
+ <p className="text-sm">
4730
+ Click the button or the sidebar trigger to toggle
4731
+ </p>
4732
+ </DemoMain>
4733
+ </Sidebar.Provider>
4734
+ </DemoContainer>
4735
+ ```
4736
+
4737
+ ```tsx
4738
+ <DemoContainer>
4739
+ <Sidebar.Provider defaultOpen className="min-h-0! h-full">
4740
+ <Sidebar>
4741
+ <Sidebar.Header>
4742
+ <AccountSwitcher />
4743
+ </Sidebar.Header>
4744
+
4745
+ <Sidebar.Content>
4746
+ <div className="px-1 pb-2">
4747
+ <Sidebar.Input placeholder="Quick search..." shortcut="⌘K" />
4748
+ </div>
4749
+
4750
+ <Sidebar.Group>
4751
+ <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
4752
+ <Sidebar.Menu>
4753
+ <Sidebar.MenuButton icon={HouseIcon} active>
4754
+ Home
4755
+ </Sidebar.MenuButton>
4756
+ <Sidebar.MenuButton icon={ChartBarIcon}>
4757
+ Analytics & Logs
4758
+ </Sidebar.MenuButton>
4759
+ <Sidebar.MenuButton icon={GlobeIcon}>
4760
+ Domains
4761
+ </Sidebar.MenuButton>
4762
+ </Sidebar.Menu>
4763
+ </Sidebar.Group>
4764
+
4765
+ <Sidebar.Separator />
4766
+
4767
+ <Sidebar.Group>
4768
+ <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
4769
+ <Sidebar.Menu>
4770
+ <Sidebar.MenuItem>
4771
+ <Sidebar.Collapsible defaultOpen>
4772
+ <Sidebar.CollapsibleTrigger
4773
+ render={
4774
+ <Sidebar.MenuButton icon={CodeIcon}>
4775
+ Compute
4776
+ <Sidebar.MenuChevron />
4777
+ </Sidebar.MenuButton>
4778
+ }
4779
+ />
4780
+ <Sidebar.CollapsibleContent>
4781
+ <Sidebar.MenuSub>
4782
+ <Sidebar.MenuSubButton>
4783
+ Workers & Pages
4784
+ </Sidebar.MenuSubButton>
4785
+ <Sidebar.MenuSubButton>
4786
+ Durable Objects
4787
+ </Sidebar.MenuSubButton>
4788
+ <Sidebar.MenuSubButton>
4789
+ Containers
4790
+ <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>
4791
+ </Sidebar.MenuSubButton>
4792
+ </Sidebar.MenuSub>
4793
+ </Sidebar.CollapsibleContent>
4794
+ </Sidebar.Collapsible>
4795
+ </Sidebar.MenuItem>
4796
+ <Sidebar.MenuButton icon={DatabaseIcon}>
4797
+ Storage
4798
+ </Sidebar.MenuButton>
4799
+ </Sidebar.Menu>
4800
+ </Sidebar.Group>
4801
+
4802
+ <Sidebar.Group>
4803
+ <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>
4804
+ <Sidebar.Menu>
4805
+ <Sidebar.MenuButton icon={ShieldCheckIcon}>
4806
+ Security
4807
+ </Sidebar.MenuButton>
4808
+ <Sidebar.MenuButton icon={LockIcon}>
4809
+ Zero Trust
4810
+ <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>
4811
+ </Sidebar.MenuButton>
4812
+ </Sidebar.Menu>
4813
+ </Sidebar.Group>
4814
+ </Sidebar.Content>
4815
+
4816
+ <Sidebar.Footer>
4817
+ <Sidebar.MenuButton icon={GearIcon}>
4818
+ Manage account
4819
+ </Sidebar.MenuButton>
4820
+ </Sidebar.Footer>
4821
+ </Sidebar>
4822
+ <DemoMain />
4823
+ </Sidebar.Provider>
4824
+ </DemoContainer>
4825
+ ```
4826
+
4827
+ ```tsx
4828
+ <DemoContainer>
4829
+ <Sidebar.Provider
4830
+ defaultOpen
4831
+ resizable
4832
+ defaultWidth={240}
4833
+ minWidth={180}
4834
+ maxWidth={400}
4835
+ className="min-h-0! h-full"
4836
+ >
4837
+ <Sidebar>
4838
+ <Sidebar.Header>
4839
+ <BrandLogo />
4840
+ </Sidebar.Header>
4841
+ <Sidebar.Content>
4842
+ <Sidebar.Group>
4843
+ <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
4844
+ <Sidebar.Menu>
4845
+ <Sidebar.MenuButton icon={HouseIcon} active>
4846
+ Home
4847
+ </Sidebar.MenuButton>
4848
+ <Sidebar.MenuButton icon={ChartBarIcon}>
4849
+ Analytics
4850
+ </Sidebar.MenuButton>
4851
+ <Sidebar.MenuButton icon={DatabaseIcon}>
4852
+ Storage
4853
+ </Sidebar.MenuButton>
4854
+ </Sidebar.Menu>
4855
+ </Sidebar.Group>
4856
+ </Sidebar.Content>
4857
+ <Sidebar.Footer>
4858
+ <Sidebar.Trigger />
4859
+ </Sidebar.Footer>
4860
+ <Sidebar.ResizeHandle />
4861
+ </Sidebar>
4862
+ <DemoMain>
4863
+ <p className="text-sm">Drag the sidebar edge to resize</p>
4864
+ </DemoMain>
4865
+ </Sidebar.Provider>
4866
+ </DemoContainer>
4867
+ ```
4868
+
4869
+ ```tsx
4870
+ <DemoContainer>
4871
+ <Sidebar.Provider defaultOpen side="right" className="min-h-0! h-full">
4872
+ <DemoMain />
4873
+ <Sidebar>
4874
+ <Sidebar.Content>
4875
+ <Sidebar.Group>
4876
+ <Sidebar.GroupLabel>Details</Sidebar.GroupLabel>
4877
+ <Sidebar.Menu>
4878
+ <Sidebar.MenuButton icon={GearIcon} active>
4879
+ Properties
4880
+ </Sidebar.MenuButton>
4881
+ <Sidebar.MenuButton icon={ChartBarIcon}>
4882
+ Metrics
4883
+ </Sidebar.MenuButton>
4884
+ <Sidebar.MenuButton icon={BellIcon}>Alerts</Sidebar.MenuButton>
4885
+ </Sidebar.Menu>
4886
+ </Sidebar.Group>
4887
+ </Sidebar.Content>
4888
+ </Sidebar>
4889
+ </Sidebar.Provider>
4890
+ </DemoContainer>
4891
+ ```
4892
+
4893
+
4436
4894
  ---
4437
4895
 
4438
4896
  ### Surface
@@ -4623,6 +5081,29 @@ Props:
4623
5081
  </div>
4624
5082
  ```
4625
5083
 
5084
+ ```tsx
5085
+ <div className="flex flex-col gap-4">
5086
+ <Switch
5087
+ label="Small"
5088
+ size="sm"
5089
+ checked={true}
5090
+ onCheckedChange={() => {}}
5091
+ />
5092
+ <Switch
5093
+ label="Base (default)"
5094
+ size="base"
5095
+ checked={true}
5096
+ onCheckedChange={() => {}}
5097
+ />
5098
+ <Switch
5099
+ label="Large"
5100
+ size="lg"
5101
+ checked={true}
5102
+ onCheckedChange={() => {}}
5103
+ />
5104
+ </div>
5105
+ ```
5106
+
4626
5107
 
4627
5108
  ---
4628
5109
 
@@ -5330,7 +5811,7 @@ Multi-line textarea input with Input variants and InputArea-specific dimensions
5330
5811
  - **Feedback:** Banner, Loader, Toasty
5331
5812
  - **Action:** Button, ClipboardText
5332
5813
  - **Input:** Checkbox, Combobox, DateRangePicker, Field, Input, Radio, Select, Switch
5333
- - **Other:** CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Table, DeleteResource
5814
+ - **Other:** CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, DeleteResource
5334
5815
  - **Navigation:** CommandPalette, MenuBar, Pagination, Tabs
5335
5816
  - **Overlay:** Dialog, DropdownMenu, Popover, Tooltip
5336
5817
  - **Layout:** Grid, Surface, PageHeader, ResourceListPage
package/ai/schemas.ts CHANGED
@@ -659,6 +659,20 @@ export const SensitiveInputPropsSchema = z.object({
659
659
  error: z.unknown().optional(), // Error message or validation error object
660
660
  });
661
661
 
662
+ export const SidebarPropsSchema = z.object({
663
+ defaultOpen: z.boolean().optional(), // Initial open state when uncontrolled.
664
+ open: z.boolean().optional(), // Controlled open state.
665
+ variant: z.enum(["sidebar", "floating", "inset"]).optional(), // Sidebar layout variant.
666
+ side: z.enum(["left", "right"]).optional(), // Which side the sidebar is on.
667
+ collapsible: z.enum(["icon", "offcanvas", "none"]).optional(),
668
+ resizable: z.boolean().optional(), // Enable drag-to-resize on the sidebar edge.
669
+ defaultWidth: z.number().optional(), // Initial width in pixels when resizable.
670
+ minWidth: z.number().optional(), // Minimum width in pixels when resizing.
671
+ maxWidth: z.number().optional(), // Maximum width in pixels when resizing.
672
+ children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Content — typically `<Sidebar>` + main content.
673
+ className: z.string().optional(), // Additional CSS classes for the wrapper div.
674
+ });
675
+
662
676
  export const SurfacePropsSchema = z.object({
663
677
  as: z.unknown().optional(), // The HTML element type to render as (e.g. `"div"`, `"section"`, `"article"`).
664
678
  className: z.string().optional(), // Additional CSS classes merged via `cn()`.
@@ -732,7 +746,7 @@ export const TooltipPropsSchema = z.object({
732
746
  /**
733
747
  * All valid component type names
734
748
  */
735
- export type KumoComponentType = "Badge" | "Banner" | "Breadcrumbs" | "Button" | "Checkbox" | "ClipboardText" | "CloudflareLogo" | "Code" | "Collapsible" | "Combobox" | "CommandPalette" | "DatePicker" | "DateRangePicker" | "Dialog" | "DropdownMenu" | "Empty" | "Field" | "Grid" | "Input" | "InputArea" | "Label" | "LayerCard" | "Link" | "Loader" | "MenuBar" | "Meter" | "Pagination" | "Popover" | "Radio" | "Select" | "SensitiveInput" | "Surface" | "Switch" | "Table" | "Tabs" | "Text" | "Toasty" | "Tooltip";
749
+ export type KumoComponentType = "Badge" | "Banner" | "Breadcrumbs" | "Button" | "Checkbox" | "ClipboardText" | "CloudflareLogo" | "Code" | "Collapsible" | "Combobox" | "CommandPalette" | "DatePicker" | "DateRangePicker" | "Dialog" | "DropdownMenu" | "Empty" | "Field" | "Grid" | "Input" | "InputArea" | "Label" | "LayerCard" | "Link" | "Loader" | "MenuBar" | "Meter" | "Pagination" | "Popover" | "Radio" | "Select" | "SensitiveInput" | "Sidebar" | "Surface" | "Switch" | "Table" | "Tabs" | "Text" | "Toasty" | "Tooltip";
736
750
 
737
751
  export const KumoComponentTypeSchema = z.enum([
738
752
  "Badge",
@@ -766,6 +780,7 @@ export const KumoComponentTypeSchema = z.enum([
766
780
  "Radio",
767
781
  "Select",
768
782
  "SensitiveInput",
783
+ "Sidebar",
769
784
  "Surface",
770
785
  "Switch",
771
786
  "Table",
@@ -810,6 +825,7 @@ export const ComponentPropsSchemas = {
810
825
  Radio: RadioPropsSchema,
811
826
  Select: SelectPropsSchema,
812
827
  SensitiveInput: SensitiveInputPropsSchema,
828
+ Sidebar: SidebarPropsSchema,
813
829
  Surface: SurfacePropsSchema,
814
830
  Switch: SwitchPropsSchema,
815
831
  Table: TablePropsSchema,
@@ -873,4 +889,4 @@ export function validateUITree(tree: unknown): SafeParseResult<UITree> {
873
889
  /**
874
890
  * List of all component names (for catalog generation)
875
891
  */
876
- export const KUMO_COMPONENT_NAMES = ["Badge", "Banner", "Breadcrumbs", "Button", "Checkbox", "ClipboardText", "CloudflareLogo", "Code", "Collapsible", "Combobox", "CommandPalette", "DatePicker", "DateRangePicker", "Dialog", "DropdownMenu", "Empty", "Field", "Grid", "Input", "InputArea", "Label", "LayerCard", "Link", "Loader", "MenuBar", "Meter", "Pagination", "Popover", "Radio", "Select", "SensitiveInput", "Surface", "Switch", "Table", "Tabs", "Text", "Toasty", "Tooltip"] as const;
892
+ export const KUMO_COMPONENT_NAMES = ["Badge", "Banner", "Breadcrumbs", "Button", "Checkbox", "ClipboardText", "CloudflareLogo", "Code", "Collapsible", "Combobox", "CommandPalette", "DatePicker", "DateRangePicker", "Dialog", "DropdownMenu", "Empty", "Field", "Grid", "Input", "InputArea", "Label", "LayerCard", "Link", "Loader", "MenuBar", "Meter", "Pagination", "Popover", "Radio", "Select", "SensitiveInput", "Sidebar", "Surface", "Switch", "Table", "Tabs", "Text", "Toasty", "Tooltip"] as const;
@@ -1 +1 @@
1
- 1774017754473
1
+ 1774299075389