@cloudflare/kumo 2.5.1 → 2.6.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 (193) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/ai/component-registry.json +176 -124
  3. package/ai/component-registry.md +171 -51
  4. package/ai/schemas.ts +23 -12
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +75 -48
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/ai/schemas.js +207 -197
  9. package/dist/ai/schemas.js.map +1 -1
  10. package/dist/chunks/SankeyChart-g1tng405ml2e0qg2.js +890 -0
  11. package/dist/chunks/SankeyChart-g1tng405ml2e0qg2.js.map +1 -0
  12. package/dist/chunks/{autocomplete-d0w42h1frdu03df6.js → autocomplete-hgprlcuf0ixbbo6d.js} +18 -18
  13. package/dist/chunks/{autocomplete-d0w42h1frdu03df6.js.map → autocomplete-hgprlcuf0ixbbo6d.js.map} +1 -1
  14. package/dist/chunks/{breadcrumbs-j214mimk5zj4ffp4.js → breadcrumbs-lyj8ljudrm2owx5y.js} +2 -2
  15. package/dist/chunks/{breadcrumbs-j214mimk5zj4ffp4.js.map → breadcrumbs-lyj8ljudrm2owx5y.js.map} +1 -1
  16. package/dist/chunks/button-gtdhvogt5rlrf1is.js +237 -0
  17. package/dist/chunks/button-gtdhvogt5rlrf1is.js.map +1 -0
  18. package/dist/chunks/{checkbox-dqih8tzzt3vhp870.js → checkbox-byg8t8r9vbmif696.js} +3 -3
  19. package/dist/chunks/{checkbox-dqih8tzzt3vhp870.js.map → checkbox-byg8t8r9vbmif696.js.map} +1 -1
  20. package/dist/chunks/{clipboard-text-mrut8z3dt1w0efxz.js → clipboard-text-lf909phvldd8rfk8.js} +4 -4
  21. package/dist/chunks/{clipboard-text-mrut8z3dt1w0efxz.js.map → clipboard-text-lf909phvldd8rfk8.js.map} +1 -1
  22. package/dist/chunks/{collapsible-nzqcf9zwnjkxqzr6.js → collapsible-dl61f8gd4j897hmv.js} +4 -4
  23. package/dist/chunks/{collapsible-nzqcf9zwnjkxqzr6.js.map → collapsible-dl61f8gd4j897hmv.js.map} +1 -1
  24. package/dist/chunks/{combobox-msvukodjsqzlvpqc.js → combobox-dxff22zxzq846nec.js} +4 -4
  25. package/dist/chunks/{combobox-msvukodjsqzlvpqc.js.map → combobox-dxff22zxzq846nec.js.map} +1 -1
  26. package/dist/chunks/{command-palette-fqhyacp33fhyf696.js → command-palette-i4r0402b838wiy0j.js} +21 -21
  27. package/dist/chunks/{command-palette-fqhyacp33fhyf696.js.map → command-palette-i4r0402b838wiy0j.js.map} +1 -1
  28. package/dist/chunks/{dialog-3mpu1i1wssrsz8i6.js → dialog-g1b8161nbyixdit0.js} +7 -7
  29. package/dist/chunks/{dialog-3mpu1i1wssrsz8i6.js.map → dialog-g1b8161nbyixdit0.js.map} +1 -1
  30. package/dist/chunks/{dropdown-g4sb4cw9ffqaw5gx.js → dropdown-irp18txvgz8590e9.js} +27 -27
  31. package/dist/chunks/{dropdown-g4sb4cw9ffqaw5gx.js.map → dropdown-irp18txvgz8590e9.js.map} +1 -1
  32. package/dist/chunks/{empty-n17inn1z67bpohkw.js → empty-daa6d7u9oleaw24a.js} +2 -2
  33. package/dist/chunks/{empty-n17inn1z67bpohkw.js.map → empty-daa6d7u9oleaw24a.js.map} +1 -1
  34. package/dist/chunks/{field-c8o7h3rlam4c9pcx.js → field-f1hy08um3jf9jos6.js} +3 -3
  35. package/dist/chunks/{field-c8o7h3rlam4c9pcx.js.map → field-f1hy08um3jf9jos6.js.map} +1 -1
  36. package/dist/chunks/{input-area-eurk3seud30ricwn.js → input-area-bwyujceeulpfkpxv.js} +4 -4
  37. package/dist/chunks/{input-area-eurk3seud30ricwn.js.map → input-area-bwyujceeulpfkpxv.js.map} +1 -1
  38. package/dist/chunks/{input-en8hhb14mmt3tfwn.js → input-f2ct7obgdzypjmp2.js} +3 -3
  39. package/dist/chunks/{input-en8hhb14mmt3tfwn.js.map → input-f2ct7obgdzypjmp2.js.map} +1 -1
  40. package/dist/chunks/{input-group-d09ocmjcbdai0gze.js → input-group-kcd3jin5pbdijmw8.js} +5 -5
  41. package/dist/chunks/{input-group-d09ocmjcbdai0gze.js.map → input-group-kcd3jin5pbdijmw8.js.map} +1 -1
  42. package/dist/chunks/{label-c8rz453pti66slki.js → label-himqjkdhh0hgfdsa.js} +3 -3
  43. package/dist/chunks/{label-c8rz453pti66slki.js.map → label-himqjkdhh0hgfdsa.js.map} +1 -1
  44. package/dist/chunks/{layer-card-er4flkcxmzfug8jw.js → layer-card-cshi5vydqg3phyfx.js} +2 -2
  45. package/dist/chunks/{layer-card-er4flkcxmzfug8jw.js.map → layer-card-cshi5vydqg3phyfx.js.map} +1 -1
  46. package/dist/chunks/{link-i6vnwyjcwvjz5btm.js → link-bw21ofmgg58igq5n.js} +4 -4
  47. package/dist/chunks/{link-i6vnwyjcwvjz5btm.js.map → link-bw21ofmgg58igq5n.js.map} +1 -1
  48. package/dist/chunks/{menubar-ng5if56amh1tto4j.js → menubar-m12wcbbucuszspw4.js} +2 -2
  49. package/dist/chunks/{menubar-ng5if56amh1tto4j.js.map → menubar-m12wcbbucuszspw4.js.map} +1 -1
  50. package/dist/chunks/{meter-d5igshkjqttl1fdj.js → meter-dn8vgc0smpk0du75.js} +4 -4
  51. package/dist/chunks/{meter-d5igshkjqttl1fdj.js.map → meter-dn8vgc0smpk0du75.js.map} +1 -1
  52. package/dist/chunks/{pagination-bw7vwca4wrfjm8vb.js → pagination-oafyxvdndm9m8250.js} +3 -3
  53. package/dist/chunks/{pagination-bw7vwca4wrfjm8vb.js.map → pagination-oafyxvdndm9m8250.js.map} +1 -1
  54. package/dist/chunks/{popover-ozf1j7oi7pxiudyz.js → popover-bbxr39l1lx175hum.js} +18 -18
  55. package/dist/chunks/{popover-ozf1j7oi7pxiudyz.js.map → popover-bbxr39l1lx175hum.js.map} +1 -1
  56. package/dist/chunks/radio-ffx05ih9nc764evh.js +226 -0
  57. package/dist/chunks/radio-ffx05ih9nc764evh.js.map +1 -0
  58. package/dist/chunks/{select-dw9iw35ug7yer3o3.js → select-kl1skfh3pmwc33rp.js} +6 -6
  59. package/dist/chunks/{select-dw9iw35ug7yer3o3.js.map → select-kl1skfh3pmwc33rp.js.map} +1 -1
  60. package/dist/chunks/{sensitive-input-dgoxjtoxl4zqa51v.js → sensitive-input-izmbyk1t7r56ciiq.js} +4 -4
  61. package/dist/chunks/{sensitive-input-dgoxjtoxl4zqa51v.js.map → sensitive-input-izmbyk1t7r56ciiq.js.map} +1 -1
  62. package/dist/chunks/{sidebar-nbdw4rgvuabxp5nj.js → sidebar-ior8rnhsd7gy5am5.js} +49 -49
  63. package/dist/chunks/sidebar-ior8rnhsd7gy5am5.js.map +1 -0
  64. package/dist/chunks/{surface-iyejjbqogjbo7ise.js → surface-g5a1buofz4erjov2.js} +2 -2
  65. package/dist/chunks/{surface-iyejjbqogjbo7ise.js.map → surface-g5a1buofz4erjov2.js.map} +1 -1
  66. package/dist/chunks/{switch-g8f77h69h34xld06.js → switch-kh8a6l3l0hszm9h4.js} +3 -3
  67. package/dist/chunks/{switch-g8f77h69h34xld06.js.map → switch-kh8a6l3l0hszm9h4.js.map} +1 -1
  68. package/dist/chunks/{table-e1te1im2tt2ez05y.js → table-dz2k55oab66h2vi9.js} +2 -2
  69. package/dist/chunks/{table-e1te1im2tt2ez05y.js.map → table-dz2k55oab66h2vi9.js.map} +1 -1
  70. package/dist/chunks/{tabs-ho9t1gkq22jb855l.js → tabs-kcw98wibdz4mhpkc.js} +2 -2
  71. package/dist/chunks/{tabs-ho9t1gkq22jb855l.js.map → tabs-kcw98wibdz4mhpkc.js.map} +1 -1
  72. package/dist/chunks/{toast-kvbgct0jvfmn4mas.js → toast-dkdo1lu72tnefya6.js} +7 -7
  73. package/dist/chunks/{toast-kvbgct0jvfmn4mas.js.map → toast-dkdo1lu72tnefya6.js.map} +1 -1
  74. package/dist/chunks/toolbar-o7xe6pd189evdd53.js +172 -0
  75. package/dist/chunks/toolbar-o7xe6pd189evdd53.js.map +1 -0
  76. package/dist/chunks/{tooltip-ken77ixya0qpidie.js → tooltip-eqnhjdbvwapy8gj4.js} +4 -4
  77. package/dist/chunks/{tooltip-ken77ixya0qpidie.js.map → tooltip-eqnhjdbvwapy8gj4.js.map} +1 -1
  78. package/dist/chunks/{vendor-base-ui-knphx7dts1vm1x37.js → vendor-base-ui-f9z44m829vvptrg0.js} +2209 -2207
  79. package/dist/chunks/{vendor-base-ui-knphx7dts1vm1x37.js.map → vendor-base-ui-f9z44m829vvptrg0.js.map} +1 -1
  80. package/dist/code.js +1 -1
  81. package/dist/components/autocomplete.js +1 -1
  82. package/dist/components/breadcrumbs.js +1 -1
  83. package/dist/components/button.js +1 -1
  84. package/dist/components/chart.js +1 -1
  85. package/dist/components/checkbox.js +1 -1
  86. package/dist/components/clipboard-text.js +1 -1
  87. package/dist/components/collapsible.js +1 -1
  88. package/dist/components/combobox.js +1 -1
  89. package/dist/components/command-palette.js +1 -1
  90. package/dist/components/dialog.js +1 -1
  91. package/dist/components/dropdown.js +1 -1
  92. package/dist/components/empty.js +1 -1
  93. package/dist/components/field.js +1 -1
  94. package/dist/components/input-group.js +1 -1
  95. package/dist/components/input.js +3 -3
  96. package/dist/components/label.js +1 -1
  97. package/dist/components/layer-card.js +1 -1
  98. package/dist/components/link.js +1 -1
  99. package/dist/components/menubar.js +1 -1
  100. package/dist/components/meter.js +1 -1
  101. package/dist/components/pagination.js +1 -1
  102. package/dist/components/popover.js +1 -1
  103. package/dist/components/radio.js +1 -1
  104. package/dist/components/select.js +1 -1
  105. package/dist/components/sensitive-input.js +1 -1
  106. package/dist/components/sidebar.js +1 -1
  107. package/dist/components/surface.js +1 -1
  108. package/dist/components/switch.js +1 -1
  109. package/dist/components/table.js +1 -1
  110. package/dist/components/tabs.js +1 -1
  111. package/dist/components/toast.js +2 -2
  112. package/dist/components/toolbar.js +8 -0
  113. package/dist/components/toolbar.js.map +1 -0
  114. package/dist/components/tooltip.js +1 -1
  115. package/dist/index.js +199 -195
  116. package/dist/index.js.map +1 -1
  117. package/dist/primitives/accordion.js +1 -1
  118. package/dist/primitives/alert-dialog.js +1 -1
  119. package/dist/primitives/autocomplete.js +1 -1
  120. package/dist/primitives/avatar.js +1 -1
  121. package/dist/primitives/button.js +1 -1
  122. package/dist/primitives/checkbox-group.js +1 -1
  123. package/dist/primitives/checkbox.js +1 -1
  124. package/dist/primitives/collapsible.js +1 -1
  125. package/dist/primitives/combobox.js +1 -1
  126. package/dist/primitives/context-menu.js +1 -1
  127. package/dist/primitives/csp-provider.js +1 -1
  128. package/dist/primitives/dialog.js +1 -1
  129. package/dist/primitives/direction-provider.js +1 -1
  130. package/dist/primitives/drawer.js +1 -1
  131. package/dist/primitives/field.js +1 -1
  132. package/dist/primitives/fieldset.js +1 -1
  133. package/dist/primitives/form.js +1 -1
  134. package/dist/primitives/input.js +1 -1
  135. package/dist/primitives/menu.js +1 -1
  136. package/dist/primitives/menubar.js +1 -1
  137. package/dist/primitives/meter.js +1 -1
  138. package/dist/primitives/navigation-menu.js +1 -1
  139. package/dist/primitives/number-field.js +1 -1
  140. package/dist/primitives/otp-field.js +1 -1
  141. package/dist/primitives/popover.js +1 -1
  142. package/dist/primitives/preview-card.js +1 -1
  143. package/dist/primitives/progress.js +1 -1
  144. package/dist/primitives/radio-group.js +1 -1
  145. package/dist/primitives/radio.js +1 -1
  146. package/dist/primitives/scroll-area.js +1 -1
  147. package/dist/primitives/select.js +1 -1
  148. package/dist/primitives/separator.js +1 -1
  149. package/dist/primitives/slider.js +1 -1
  150. package/dist/primitives/switch.js +1 -1
  151. package/dist/primitives/tabs.js +1 -1
  152. package/dist/primitives/toast.js +1 -1
  153. package/dist/primitives/toggle-group.js +1 -1
  154. package/dist/primitives/toggle.js +1 -1
  155. package/dist/primitives/toolbar.js +1 -1
  156. package/dist/primitives/tooltip.js +1 -1
  157. package/dist/primitives.js +1 -1
  158. package/dist/scripts/theme-generator/config.d.ts.map +1 -1
  159. package/dist/scripts/theme-generator/config.js +13 -2
  160. package/dist/scripts/theme-generator/config.js.map +1 -1
  161. package/dist/src/components/button/button.d.ts +5 -5
  162. package/dist/src/components/button/button.d.ts.map +1 -1
  163. package/dist/src/components/chart/EChart.d.ts +12 -4
  164. package/dist/src/components/chart/EChart.d.ts.map +1 -1
  165. package/dist/src/components/chart/Legend.d.ts +11 -2
  166. package/dist/src/components/chart/Legend.d.ts.map +1 -1
  167. package/dist/src/components/chart/TimeseriesChart.d.ts +15 -1
  168. package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
  169. package/dist/src/components/radio/index.d.ts +1 -1
  170. package/dist/src/components/radio/index.d.ts.map +1 -1
  171. package/dist/src/components/radio/radio.d.ts +49 -10
  172. package/dist/src/components/radio/radio.d.ts.map +1 -1
  173. package/dist/src/components/radio/radio.type-spec.d.ts +12 -0
  174. package/dist/src/components/radio/radio.type-spec.d.ts.map +1 -0
  175. package/dist/src/components/toolbar/index.d.ts +2 -0
  176. package/dist/src/components/toolbar/index.d.ts.map +1 -0
  177. package/dist/src/components/toolbar/toolbar.d.ts +50 -0
  178. package/dist/src/components/toolbar/toolbar.d.ts.map +1 -0
  179. package/dist/src/index.d.ts +2 -1
  180. package/dist/src/index.d.ts.map +1 -1
  181. package/dist/styles/kumo-standalone.css +1 -1
  182. package/dist/styles/theme-kumo.css +11 -4
  183. package/package.json +5 -1
  184. package/scripts/component-registry/discovery.ts +16 -11
  185. package/scripts/component-registry/metadata.ts +30 -0
  186. package/scripts/theme-generator/config.ts +14 -2
  187. package/dist/chunks/SankeyChart-i1m7zv0lys3j0iq6.js +0 -775
  188. package/dist/chunks/SankeyChart-i1m7zv0lys3j0iq6.js.map +0 -1
  189. package/dist/chunks/button-mnrxu6dud2x5js5b.js +0 -210
  190. package/dist/chunks/button-mnrxu6dud2x5js5b.js.map +0 -1
  191. package/dist/chunks/radio-gpg6kmzonr2cayq1.js +0 -218
  192. package/dist/chunks/radio-gpg6kmzonr2cayq1.js.map +0 -1
  193. package/dist/chunks/sidebar-nbdw4rgvuabxp5nj.js.map +0 -1
@@ -6,7 +6,7 @@
6
6
 
7
7
  ### Autocomplete
8
8
 
9
- Autocomplete — free-form text input with an optional filtered suggestion list. Unlike Combobox, the input value is not restricted to items in the list. Use Combobox when the selected value must come from the list. Compound component: `Autocomplete` (Root), `.InputGroup`, `.Content`, `.Item`, `.GroupLabel`, `.Group`, `.Separator`, `.List`, `.Collection`. `InputGroup` renders the text input with Input component styling. Pass a `size` prop to `InputGroup` to match the Input component sizes.
9
+ Autocomplete — free-form text input with an optional filtered suggestion list.
10
10
 
11
11
  **Type:** component
12
12
 
@@ -300,7 +300,7 @@ Small status label for categorizing or highlighting content.
300
300
 
301
301
  **Colors (kumo tokens used):**
302
302
 
303
- `bg-kumo-badge-blue`, `bg-kumo-badge-inverted`, `bg-kumo-badge-neutral`, `bg-kumo-badge-orange`, `bg-kumo-badge-purple`, `bg-kumo-badge-red`, `bg-kumo-badge-teal`, `bg-kumo-badge-teal-subtle`, `bg-kumo-danger-tint`, `bg-kumo-fill`, `bg-kumo-info-tint`, `bg-kumo-success`, `bg-kumo-success-tint`, `bg-kumo-warning-tint`, `border-kumo-brand`, `border-kumo-fill`, `ring-kumo-hairline`, `text-kumo-badge-inverted`, `text-kumo-badge-neutral-subtle`, `text-kumo-badge-teal-subtle`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-link`, `text-kumo-success`, `text-kumo-warning`
303
+ `bg-kumo-badge-blue`, `bg-kumo-badge-green`, `bg-kumo-badge-inverted`, `bg-kumo-badge-neutral`, `bg-kumo-badge-orange`, `bg-kumo-badge-purple`, `bg-kumo-badge-red`, `bg-kumo-badge-teal`, `bg-kumo-badge-teal-subtle`, `bg-kumo-danger-tint`, `bg-kumo-fill`, `bg-kumo-info-tint`, `bg-kumo-success`, `bg-kumo-success-tint`, `bg-kumo-warning-tint`, `border-kumo-brand`, `border-kumo-fill`, `ring-kumo-hairline`, `text-kumo-badge-inverted`, `text-kumo-badge-neutral-subtle`, `text-kumo-badge-teal-subtle`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-link`, `text-kumo-success`, `text-kumo-warning`
304
304
 
305
305
  **Examples:**
306
306
 
@@ -321,6 +321,7 @@ Small status label for categorizing or highlighting content.
321
321
  <div className="flex flex-wrap items-center gap-2">
322
322
  <Badge variant="neutral">Neutral</Badge>
323
323
  <Badge variant="red">Red</Badge>
324
+ <Badge variant="green">Green</Badge>
324
325
  <Badge variant="orange">Orange</Badge>
325
326
  <Badge variant="teal">Teal</Badge>
326
327
  <Badge variant="blue">Blue</Badge>
@@ -628,8 +629,7 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
628
629
 
629
630
  **State Classes:**
630
631
  - `"primary"`:
631
- - `hover`: `hover:bg-kumo-brand-hover`
632
- - `disabled`: `disabled:bg-kumo-brand/50`
632
+ - `disabled`: `disabled:opacity-50`
633
633
  - `"secondary"`:
634
634
  - `not-disabled`: `not-disabled:hover:bg-kumo-tint`
635
635
  - `disabled`: `disabled:bg-kumo-base/50 disabled:!text-kumo-default/70`
@@ -637,11 +637,13 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
637
637
  - `"ghost"`:
638
638
  - `hover`: `hover:bg-kumo-tint`
639
639
  - `"destructive"`:
640
- - `hover`: `hover:bg-kumo-danger/70`
640
+ - `disabled`: `disabled:opacity-50`
641
641
  - `"secondary-destructive"`:
642
- - `not-disabled`: `not-disabled:hover:bg-kumo-base`
642
+ - `not-disabled`: `not-disabled:hover:!text-kumo-danger not-disabled:hover:ring-kumo-danger/30`
643
643
  - `disabled`: `disabled:bg-kumo-base/50 disabled:!text-kumo-danger/70`
644
644
  - `data-state`: `data-[state=open]:bg-kumo-base`
645
+ - `"outline"`:
646
+ - `not-disabled`: `not-disabled:hover:text-kumo-strong not-disabled:hover:ring-kumo-focus/25`
645
647
  - `children`: ReactNode
646
648
  - `className`: string
647
649
  - `icon`: ReactNode
@@ -658,7 +660,7 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
658
660
 
659
661
  **Colors (kumo tokens used):**
660
662
 
661
- `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `bg-kumo-tint`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
663
+ `bg-kumo-base`, `bg-kumo-tint`, `ring-kumo-brand`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
662
664
 
663
665
  **Examples:**
664
666
 
@@ -1462,7 +1464,7 @@ Props:
1462
1464
 
1463
1465
  ### Collapsible
1464
1466
 
1465
- Collapsible — a composable disclosure component for showing/hiding content. Built on Base UI's Collapsible with full composition support. ## Basic Usage ```tsx const [open, setOpen] = useState(false); <Collapsible.Root open={open} onOpenChange={setOpen}> <Collapsible.Trigger render={<Button variant="ghost" />}> Show details </Collapsible.Trigger> <Collapsible.Panel className="mt-2"> <Text>Hidden content revealed when expanded.</Text> </Collapsible.Panel> </Collapsible.Root> ``` ## With Default Styling Use `DefaultTrigger` and `DefaultPanel` for the classic Kumo style: ```tsx <Collapsible.Root> <Collapsible.DefaultTrigger>Show details</Collapsible.DefaultTrigger> <Collapsible.DefaultPanel> <Text>Content with border-left accent</Text> </Collapsible.DefaultPanel> </Collapsible.Root> ``` ## Controlled Accordion Pattern ```tsx const [activeIndex, setActiveIndex] = useState<number | null>(null); {items.map((item, i) => ( <Collapsible.Root key={i} open={activeIndex === i} onOpenChange={(open) => setActiveIndex(open ? i : null)} > <Collapsible.DefaultTrigger>{item.title}</Collapsible.DefaultTrigger> <Collapsible.DefaultPanel>{item.content}</Collapsible.DefaultPanel> </Collapsible.Root> ))} ```
1467
+ Collapsible — a composable disclosure component for showing/hiding content.
1466
1468
 
1467
1469
  **Type:** component
1468
1470
 
@@ -1613,7 +1615,7 @@ Props:
1613
1615
 
1614
1616
  ### Combobox
1615
1617
 
1616
- Combobox — autocomplete input with filterable dropdown list. Compound component: `Combobox` (Root), `.TriggerInput`, `.TriggerValue`, `.TriggerMultipleWithInput`, `.Content`, `.Item`, `.Chip`, `.Input`, `.Empty`, `.GroupLabel`, `.Group`, `.List`, `.Collection`.
1618
+ Combobox — autocomplete input with filterable dropdown list.
1617
1619
 
1618
1620
  **Type:** component
1619
1621
 
@@ -2117,7 +2119,7 @@ Icon sub-component (wraps ComboboxBase)
2117
2119
 
2118
2120
  ### CommandPalette
2119
2121
 
2120
- CommandPalette — accessible command palette / spotlight search overlay. Compound component: `CommandPalette.Root` (or `.Dialog` + `.Panel`), `.Input`, `.List`, `.Results`, `.Items`, `.Group`, `.GroupLabel`, `.Item`, `.ResultItem`, `.HighlightedText`, `.Empty`, `.Loading`, `.Footer`. Built on `@base-ui/react/autocomplete` + `@base-ui/react/dialog`.
2122
+ CommandPalette — accessible command palette / spotlight search overlay.
2121
2123
 
2122
2124
  **Type:** component
2123
2125
 
@@ -2422,7 +2424,7 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
2422
2424
 
2423
2425
  ### DatePicker
2424
2426
 
2425
- DatePicker — a date selection calendar. Built on [react-day-picker](https://daypicker.dev) with Kumo styling. Supports three selection modes: single, multiple, and range.
2427
+ DatePicker — a date selection calendar.
2426
2428
 
2427
2429
  **Type:** component
2428
2430
 
@@ -2601,7 +2603,7 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
2601
2603
 
2602
2604
  ### DateRangePicker
2603
2605
 
2604
- DateRangePicker — dual-calendar date range selector. Renders two side-by-side month calendars with click-to-select start/end dates, hover preview of the range, a timezone footer, and a reset button.
2606
+ DateRangePicker — dual-calendar date range selector.
2605
2607
 
2606
2608
  **Type:** component
2607
2609
 
@@ -3026,7 +3028,7 @@ Close sub-component
3026
3028
 
3027
3029
  ### DropdownMenu
3028
3030
 
3029
- DropdownMenu — accessible dropdown menu anchored to a trigger. Compound component: `DropdownMenu` (Root), `.Trigger`, `.Content`, `.Item`, `.LinkItem`, `.CheckboxItem`, `.RadioGroup`, `.RadioItem`, `.RadioItemIndicator`, `.Sub`, `.SubTrigger`, `.SubContent`, `.Label`, `.Separator`, `.Shortcut`, `.Group`. Built on `@base-ui/react/menu`.
3031
+ DropdownMenu — accessible dropdown menu anchored to a trigger.
3030
3032
 
3031
3033
  **Type:** component
3032
3034
 
@@ -4351,7 +4353,7 @@ Description sub-component
4351
4353
 
4352
4354
  ### Label
4353
4355
 
4354
- Label component for form fields. Provides a standardized way to display labels with optional indicators: - Optional indicator: gray "(optional)" text when `showOptional={true}` - Tooltip: info icon with hover tooltip for additional context
4356
+ Label component for form fields.
4355
4357
 
4356
4358
  **Type:** component
4357
4359
 
@@ -4695,7 +4697,7 @@ Animated circular spinner for indicating loading states.
4695
4697
 
4696
4698
  ### MenuBar
4697
4699
 
4698
- MenuBar — horizontal icon-button toolbar with keyboard arrow-key navigation. Each option renders as a `<button>` with a Tooltip. The active option is visually highlighted with an elevated background.
4700
+ MenuBar — horizontal icon-button toolbar with keyboard arrow-key navigation.
4699
4701
 
4700
4702
  **Type:** component
4701
4703
 
@@ -5291,7 +5293,7 @@ Close sub-component
5291
5293
 
5292
5294
  ### Radio
5293
5295
 
5294
- Radio — radio button group for single-select choices. Compound component: `Radio.Group` (with built-in Fieldset), `Radio.Item`, and `Radio.Legend`. Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.
5296
+ Radio — radio button group for single-select choices.
5295
5297
 
5296
5298
  **Type:** component
5297
5299
 
@@ -5301,12 +5303,9 @@ Radio — radio button group for single-select choices. Compound component: `Ra
5301
5303
 
5302
5304
  **Props:**
5303
5305
 
5304
- - `legend`: string
5305
- Legend text for the group (required for accessibility). For more control over legend styling, omit this prop and use `<Radio.Legend>` as a child instead.
5306
- - `children`: ReactNode
5307
- Child Radio.Item components (and optionally a Radio.Legend)
5308
- - `orientation`: enum
5309
- Layout direction of the radio items
5306
+ - `variant`: enum [default: default]
5307
+ - `"default"`: Default radio appearance
5308
+ - `"error"`: Error state for validation failures
5310
5309
  - `appearance`: enum [default: default]
5311
5310
  - `"default"`: Standard inline radio item
5312
5311
  - `"card"`: Choice card appearance with border, padding, and highlighted selection state
@@ -5314,20 +5313,16 @@ Radio — radio button group for single-select choices. Compound component: `Ra
5314
5313
  **State Classes:**
5315
5314
  - `"card"`:
5316
5315
  - `hover`: `hover:bg-kumo-tint`
5317
- - `error`: string
5318
- Error message for the group
5319
- - `description`: ReactNode
5320
- Helper text for the group
5321
- - `value`: string
5322
- Value of the radio that should be selected (controlled)
5323
- - `disabled`: boolean
5324
- Whether all radios in the group are disabled
5325
- - `controlPosition`: enum
5326
- Position of radio control relative to label: "start" puts radio before label, "end" puts label before radio. Defaults to "start" for default appearance and "end" for card appearance.
5327
- - `name`: string
5328
- Form submission name for the radio group
5329
5316
  - `className`: string
5330
5317
  Additional CSS classes
5318
+ - `children`: ReactNode
5319
+ Child elements
5320
+ - `value`: T
5321
+ The controlled value of the selected radio item.
5322
+ - `defaultValue`: T
5323
+ The uncontrolled initial value of the selected radio item.
5324
+ - `onValueChange`: (value: T, eventDetails: RadioGroupChangeEventDetails) => void
5325
+ Callback fired when the selected value changes. The second argument carries native event details about the interaction.
5331
5326
 
5332
5327
  **Colors (kumo tokens used):**
5333
5328
 
@@ -5346,18 +5341,9 @@ Item sub-component
5346
5341
  Group sub-component
5347
5342
 
5348
5343
  Props:
5349
- - `legend`: string
5350
- - `children`: ReactNode (required)
5351
- - `orientation`: "vertical" | "horizontal"
5352
- - `appearance`: KumoRadioAppearance
5353
- - `error`: string
5354
- - `description`: ReactNode
5355
- - `value`: string
5356
- - `disabled`: boolean
5357
- - `label`: "start" puts radio before label (required)
5358
- - `controlPosition`: RadioControlPosition
5359
- - `name`: string
5360
- - `className`: string
5344
+ - `value`: T - The controlled value of the selected radio item.
5345
+ - `defaultValue`: T - The uncontrolled initial value of the selected radio item.
5346
+ - `onValueChange`: (value: T, eventDetails: RadioGroupChangeEventDetails) => void - Callback fired when the selected value changes. The second argument carries native event details about the interaction.
5361
5347
 
5362
5348
  #### Radio.Legend
5363
5349
 
@@ -5562,6 +5548,29 @@ Props:
5562
5548
  </Radio.Group>
5563
5549
  ```
5564
5550
 
5551
+ ```tsx
5552
+ <div className="grid grid-cols-2 gap-6">
5553
+ <Radio.Group<number>
5554
+ legend="Items per page"
5555
+ value={pageSize}
5556
+ onValueChange={setPageSize}
5557
+ >
5558
+ <Radio.Item<number> label="10" value={10} />
5559
+ <Radio.Item<number> label="25" value={25} />
5560
+ <Radio.Item<number> label="50" value={50} />
5561
+ </Radio.Group>
5562
+ <Radio.Group<ThemeType>
5563
+ legend="Theme"
5564
+ value={theme}
5565
+ onValueChange={setTheme}
5566
+ >
5567
+ <Radio.Item<ThemeType> label="Light" value={ThemeType.light} />
5568
+ <Radio.Item<ThemeType> label="Dark" value={ThemeType.dark} />
5569
+ <Radio.Item<ThemeType> label="System" value={ThemeType.system} />
5570
+ </Radio.Group>
5571
+ </div>
5572
+ ```
5573
+
5565
5574
  ```tsx
5566
5575
  <Radio.Group
5567
5576
  legend="Choose a plan"
@@ -6151,7 +6160,7 @@ Password/secret input that masks its value by default and reveals on click. Incl
6151
6160
 
6152
6161
  ### Sidebar
6153
6162
 
6154
- Sidebar — responsive navigation panel with expand/collapse support. Compound component: `Sidebar` (root `<aside>`), `.Provider`, `.Header`, `.Content`, `.Footer`, `.Group`, `.GroupLabel`, `.Menu`, `.MenuItem`, `.MenuButton`, `.MenuBadge`, `.MenuSub`, `.MenuSubItem`, `.MenuSubButton`, `.Separator`, `.Trigger`, `.Rail`, `.MenuChevron`, `.Collapsible`, `.CollapsibleTrigger`, `.CollapsibleContent`.
6163
+ Sidebar — responsive navigation panel with expand/collapse support.
6155
6164
 
6156
6165
  **Type:** component
6157
6166
 
@@ -7174,7 +7183,7 @@ Props:
7174
7183
 
7175
7184
  ### Table
7176
7185
 
7177
- Table — semantic HTML table with styled rows, cells, and selection support. Compound component: `Table` (Root), `.Header`, `.Head`, `.Body`, `.Row`, `.Cell`, `.Footer`, `.CheckCell`, `.CheckHead`, `.ResizeHandle`.
7186
+ Table — semantic HTML table with styled rows, cells, and selection support.
7178
7187
 
7179
7188
  **Type:** component
7180
7189
 
@@ -7629,7 +7638,7 @@ ResizeHandle sub-component
7629
7638
 
7630
7639
  ### TableOfContents
7631
7640
 
7632
- TableOfContents — presentational compound component for section navigation. Purely visual; all interaction logic (scroll tracking, active state management) is left to the consumer.
7641
+ TableOfContents — presentational compound component for section navigation.
7633
7642
 
7634
7643
  **Type:** component
7635
7644
 
@@ -8109,7 +8118,7 @@ Text component
8109
8118
 
8110
8119
  ### Toasty
8111
8120
 
8112
- Toasty — toast notification provider and viewport. Renders a `Toast.Provider` with a fixed-position viewport in the bottom-right corner. Toasts stack with smooth enter/exit animations, swipe-to-dismiss, and expand-on-hover. Built on `@base-ui/react/toast`.
8121
+ Toasty — toast notification provider and viewport.
8113
8122
 
8114
8123
  **Type:** component
8115
8124
 
@@ -8146,6 +8155,117 @@ Toasty — toast notification provider and viewport. Renders a `Toast.Provider`
8146
8155
  ```
8147
8156
 
8148
8157
 
8158
+ ---
8159
+
8160
+ ### Toolbar
8161
+
8162
+ Toolbar component
8163
+
8164
+ **Type:** component
8165
+
8166
+ **Import:** `import { Toolbar } from "@cloudflare/kumo";`
8167
+
8168
+ **Category:** Other
8169
+
8170
+ **Props:**
8171
+
8172
+ - `disabled`: boolean
8173
+ - `orientation`: ToolbarRoot.Orientation
8174
+ The orientation of the toolbar.
8175
+ - `loopFocus`: boolean
8176
+ If `true`, using keyboard navigation will wrap focus to the other end of the toolbar once the end is reached.
8177
+ - `id`: string
8178
+ - `lang`: string
8179
+ - `title`: string
8180
+ - `className`: string | object
8181
+ CSS class applied to the element, or a function that returns a class based on the component's state.
8182
+ - `render`: ReactNode
8183
+ Allows you to replace the component's HTML element with a different tag, or compose it with another component.
8184
+
8185
+ Accepts a `ReactElement` or a function that returns the element to render.
8186
+ - `children`: ReactNode
8187
+ Toolbar controls rendered as one grouped card.
8188
+ - `size`: enum [default: base]
8189
+ - `"xs"`: Extra small toolbar for compact UIs
8190
+ - `"sm"`: Small toolbar for secondary controls
8191
+ - `"base"`: Default toolbar size
8192
+ - `"lg"`: Large toolbar for prominent controls
8193
+
8194
+ **Colors (kumo tokens used):**
8195
+
8196
+ `bg-kumo-control`, `border-kumo-line`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-line`
8197
+
8198
+ **Sub-Components:**
8199
+
8200
+ This is a compound component. Use these sub-components:
8201
+
8202
+ #### Toolbar.Button
8203
+
8204
+ Button sub-component
8205
+
8206
+ #### Toolbar.Input
8207
+
8208
+ Input sub-component
8209
+
8210
+ #### Toolbar.InputGroup
8211
+
8212
+ InputGroup sub-component
8213
+
8214
+
8215
+ **Examples:**
8216
+
8217
+ ```tsx
8218
+ <Toolbar className="w-full max-w-md">
8219
+ <Toolbar.InputGroup aria-label="Search DNS records" className="flex-1">
8220
+ <InputGroup.Addon>
8221
+ <MagnifyingGlassIcon />
8222
+ </InputGroup.Addon>
8223
+ <InputGroup.Input placeholder="Search DNS records" />
8224
+ </Toolbar.InputGroup>
8225
+ <Toolbar.Button icon={FunnelSimpleIcon} aria-label="Filter" />
8226
+ <Toolbar.Button icon={GearSixIcon} aria-label="Settings" />
8227
+ </Toolbar>
8228
+ ```
8229
+
8230
+ ```tsx
8231
+ <div className="grid gap-3">
8232
+ {(["xs", "sm", "base", "lg"] as const).map((size) => (
8233
+ <div key={size} className="flex items-center gap-3">
8234
+ <span className="w-10 text-sm text-kumo-subtle">{size}</span>
8235
+ <Toolbar size={size} className="w-fit">
8236
+ <Toolbar.Input aria-label={`${size} search`} placeholder="Search..." />
8237
+ <Toolbar.Button>Apply</Toolbar.Button>
8238
+ </Toolbar>
8239
+ </div>
8240
+ ))}
8241
+ </div>
8242
+ ```
8243
+
8244
+ ```tsx
8245
+ <Toolbar className="w-full max-w-lg">
8246
+ <Toolbar.InputGroup aria-label="Worker subdomain" className="flex-1">
8247
+ <InputGroup.Input placeholder="my-worker" />
8248
+ <InputGroup.Suffix>.workers.dev</InputGroup.Suffix>
8249
+ </Toolbar.InputGroup>
8250
+ <Toolbar.Button>Visit</Toolbar.Button>
8251
+ </Toolbar>
8252
+ ```
8253
+
8254
+ ```tsx
8255
+ <Toolbar>
8256
+ <Toolbar.Button icon={UploadSimpleIcon}>Upload</Toolbar.Button>
8257
+ <Toolbar.Button icon={DownloadSimpleIcon}>Download</Toolbar.Button>
8258
+ </Toolbar>
8259
+ ```
8260
+
8261
+ ```tsx
8262
+ <Toolbar className="w-full max-w-lg">
8263
+ <Toolbar.Input aria-label="Search records" className="flex-1" placeholder="Search" />
8264
+ <Toolbar.Button icon={MagnifyingGlassIcon} aria-label="Search" />
8265
+ </Toolbar>
8266
+ ```
8267
+
8268
+
8149
8269
  ---
8150
8270
 
8151
8271
  ### Tooltip
@@ -8327,7 +8447,7 @@ Multi-line textarea input with Input variants and InputArea-specific dimensions
8327
8447
  ## Quick Reference
8328
8448
 
8329
8449
  **Components by Category:**
8330
- - **Other:** Autocomplete, CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, TableOfContents, DeleteResource
8450
+ - **Other:** Autocomplete, CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, TableOfContents, Toolbar, DeleteResource
8331
8451
  - **Display:** Badge, Breadcrumbs, Code, Collapsible, Empty, LayerCard, Meter, Text
8332
8452
  - **Feedback:** Banner, Loader, Toasty
8333
8453
  - **Action:** Button, ClipboardText
package/ai/schemas.ts CHANGED
@@ -641,17 +641,13 @@ export const PopoverPropsSchema = z.object({
641
641
  });
642
642
 
643
643
  export const RadioPropsSchema = z.object({
644
- legend: z.string().optional(), // Legend text for the group (required for accessibility). For more control over legend styling, omit this prop and use `<Radio.Legend>` as a child instead.
645
- children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child Radio.Item components (and optionally a Radio.Legend)
646
- orientation: z.enum(["vertical", "horizontal"]).optional(), // Layout direction of the radio items
647
- appearance: z.enum(["default", "card"]).optional(), // Visual appearance applied to all Radio.Item children. - `"default"` — Standard inline radio items - `"card"` — Choice card with border, padding, and highlighted selection state Individual items can override this with their own `appearance` prop.
648
- error: z.string().optional(), // Error message for the group
649
- description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text for the group
650
- value: z.string().optional(), // Value of the radio that should be selected (controlled)
651
- disabled: z.boolean().optional(), // Whether all radios in the group are disabled
652
- controlPosition: z.enum(["start", "end"]).optional(), // Position of radio control relative to label: "start" puts radio before label, "end" puts label before radio. Defaults to "start" for default appearance and "end" for card appearance.
653
- name: z.string().optional(), // Form submission name for the radio group
644
+ variant: z.enum(["default", "error"]).optional(),
645
+ appearance: z.enum(["default", "card"]).optional(),
654
646
  className: z.string().optional(), // Additional CSS classes
647
+ children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
648
+ value: z.unknown().optional(), // The controlled value of the selected radio item.
649
+ defaultValue: z.unknown().optional(), // The uncontrolled initial value of the selected radio item.
650
+ onValueChange: z.unknown().optional(), // Callback fired when the selected value changes. The second argument carries native event details about the interaction.
655
651
  });
656
652
 
657
653
  export const SelectPropsSchema = z.object({
@@ -793,6 +789,19 @@ export const ToastyPropsSchema = z.object({
793
789
  children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child elements
794
790
  });
795
791
 
792
+ export const ToolbarPropsSchema = z.object({
793
+ disabled: z.boolean().optional(),
794
+ orientation: z.unknown().optional(), // The orientation of the toolbar.
795
+ loopFocus: z.boolean().optional(), // If `true`, using keyboard navigation will wrap focus to the other end of the toolbar once the end is reached.
796
+ id: z.string().optional(),
797
+ lang: z.string().optional(),
798
+ title: z.string().optional(),
799
+ className: z.unknown().optional(), // CSS class applied to the element, or a function that returns a class based on the component's state.
800
+ render: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Allows you to replace the component's HTML element with a different tag, or compose it with another component. Accepts a `ReactElement` or a function that returns the element to render.
801
+ children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Toolbar controls rendered as one grouped card.
802
+ size: z.enum(["xs", "sm", "base", "lg"]).optional(), // Locks every toolbar item to this size.
803
+ });
804
+
796
805
  export const TooltipPropsSchema = z.object({
797
806
  side: z.enum(["top", "bottom", "left", "right"]).optional(),
798
807
  className: z.string().optional(), // Additional CSS classes
@@ -807,7 +816,7 @@ export const TooltipPropsSchema = z.object({
807
816
  /**
808
817
  * All valid component type names
809
818
  */
810
- export type KumoComponentType = "Autocomplete" | "Badge" | "Banner" | "Breadcrumbs" | "Button" | "Checkbox" | "ClipboardText" | "CloudflareLogo" | "Code" | "Collapsible" | "Combobox" | "CommandPalette" | "DatePicker" | "DateRangePicker" | "Dialog" | "DropdownMenu" | "Empty" | "Field" | "Grid" | "Input" | "InputArea" | "InputGroup" | "Label" | "LayerCard" | "Link" | "Loader" | "MenuBar" | "Meter" | "Pagination" | "Popover" | "Radio" | "Select" | "SensitiveInput" | "Sidebar" | "Surface" | "Switch" | "Table" | "TableOfContents" | "Tabs" | "Text" | "Toasty" | "Tooltip";
819
+ export type KumoComponentType = "Autocomplete" | "Badge" | "Banner" | "Breadcrumbs" | "Button" | "Checkbox" | "ClipboardText" | "CloudflareLogo" | "Code" | "Collapsible" | "Combobox" | "CommandPalette" | "DatePicker" | "DateRangePicker" | "Dialog" | "DropdownMenu" | "Empty" | "Field" | "Grid" | "Input" | "InputArea" | "InputGroup" | "Label" | "LayerCard" | "Link" | "Loader" | "MenuBar" | "Meter" | "Pagination" | "Popover" | "Radio" | "Select" | "SensitiveInput" | "Sidebar" | "Surface" | "Switch" | "Table" | "TableOfContents" | "Tabs" | "Text" | "Toasty" | "Toolbar" | "Tooltip";
811
820
 
812
821
  export const KumoComponentTypeSchema = z.enum([
813
822
  "Autocomplete",
@@ -851,6 +860,7 @@ export const KumoComponentTypeSchema = z.enum([
851
860
  "Tabs",
852
861
  "Text",
853
862
  "Toasty",
863
+ "Toolbar",
854
864
  "Tooltip",
855
865
  ]);
856
866
 
@@ -899,6 +909,7 @@ export const ComponentPropsSchemas = {
899
909
  Tabs: TabsPropsSchema,
900
910
  Text: TextPropsSchema,
901
911
  Toasty: ToastyPropsSchema,
912
+ Toolbar: ToolbarPropsSchema,
902
913
  Tooltip: TooltipPropsSchema,
903
914
  } as const;
904
915
 
@@ -956,4 +967,4 @@ export function validateUITree(tree: unknown): SafeParseResult<UITree> {
956
967
  /**
957
968
  * List of all component names (for catalog generation)
958
969
  */
959
- export const KUMO_COMPONENT_NAMES = ["Autocomplete", "Badge", "Banner", "Breadcrumbs", "Button", "Checkbox", "ClipboardText", "CloudflareLogo", "Code", "Collapsible", "Combobox", "CommandPalette", "DatePicker", "DateRangePicker", "Dialog", "DropdownMenu", "Empty", "Field", "Grid", "Input", "InputArea", "InputGroup", "Label", "LayerCard", "Link", "Loader", "MenuBar", "Meter", "Pagination", "Popover", "Radio", "Select", "SensitiveInput", "Sidebar", "Surface", "Switch", "Table", "TableOfContents", "Tabs", "Text", "Toasty", "Tooltip"] as const;
970
+ export const KUMO_COMPONENT_NAMES = ["Autocomplete", "Badge", "Banner", "Breadcrumbs", "Button", "Checkbox", "ClipboardText", "CloudflareLogo", "Code", "Collapsible", "Combobox", "CommandPalette", "DatePicker", "DateRangePicker", "Dialog", "DropdownMenu", "Empty", "Field", "Grid", "Input", "InputArea", "InputGroup", "Label", "LayerCard", "Link", "Loader", "MenuBar", "Meter", "Pagination", "Popover", "Radio", "Select", "SensitiveInput", "Sidebar", "Surface", "Switch", "Table", "TableOfContents", "Tabs", "Text", "Toasty", "Toolbar", "Tooltip"] as const;
@@ -1 +1 @@
1
- 1780927666222
1
+ 1782153248772