@cloudflare/kumo 2.5.2 → 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 +24 -0
  2. package/ai/component-registry.json +166 -119
  3. package/ai/component-registry.md +168 -50
  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-d52negr21cedr4rm.js → autocomplete-hgprlcuf0ixbbo6d.js} +18 -18
  13. package/dist/chunks/{autocomplete-d52negr21cedr4rm.js.map → autocomplete-hgprlcuf0ixbbo6d.js.map} +1 -1
  14. package/dist/chunks/{breadcrumbs-bfuf7g8hh36rg7h8.js → breadcrumbs-lyj8ljudrm2owx5y.js} +2 -2
  15. package/dist/chunks/{breadcrumbs-bfuf7g8hh36rg7h8.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-bt4nfv1i2142kykg.js → checkbox-byg8t8r9vbmif696.js} +3 -3
  19. package/dist/chunks/{checkbox-bt4nfv1i2142kykg.js.map → checkbox-byg8t8r9vbmif696.js.map} +1 -1
  20. package/dist/chunks/{clipboard-text-h3oi6wm5vj2q7q4h.js → clipboard-text-lf909phvldd8rfk8.js} +4 -4
  21. package/dist/chunks/{clipboard-text-h3oi6wm5vj2q7q4h.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-l6qcou2s3xmsbplp.js → combobox-dxff22zxzq846nec.js} +4 -4
  25. package/dist/chunks/{combobox-l6qcou2s3xmsbplp.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-frsjvok4w6i0fyex.js → empty-daa6d7u9oleaw24a.js} +2 -2
  33. package/dist/chunks/{empty-frsjvok4w6i0fyex.js.map → empty-daa6d7u9oleaw24a.js.map} +1 -1
  34. package/dist/chunks/{field-m57qcw5b1zt1ohfz.js → field-f1hy08um3jf9jos6.js} +3 -3
  35. package/dist/chunks/{field-m57qcw5b1zt1ohfz.js.map → field-f1hy08um3jf9jos6.js.map} +1 -1
  36. package/dist/chunks/{input-area-o2avpahffav0gydf.js → input-area-bwyujceeulpfkpxv.js} +4 -4
  37. package/dist/chunks/{input-area-o2avpahffav0gydf.js.map → input-area-bwyujceeulpfkpxv.js.map} +1 -1
  38. package/dist/chunks/{input-iahz0dpc9xdar2ju.js → input-f2ct7obgdzypjmp2.js} +3 -3
  39. package/dist/chunks/{input-iahz0dpc9xdar2ju.js.map → input-f2ct7obgdzypjmp2.js.map} +1 -1
  40. package/dist/chunks/{input-group-os810pmsqcftt6mq.js → input-group-kcd3jin5pbdijmw8.js} +5 -5
  41. package/dist/chunks/{input-group-os810pmsqcftt6mq.js.map → input-group-kcd3jin5pbdijmw8.js.map} +1 -1
  42. package/dist/chunks/{label-kib2hn4pkbn28c31.js → label-himqjkdhh0hgfdsa.js} +3 -3
  43. package/dist/chunks/{label-kib2hn4pkbn28c31.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-mvvg7qfvoqr5l4vt.js → pagination-oafyxvdndm9m8250.js} +3 -3
  53. package/dist/chunks/{pagination-mvvg7qfvoqr5l4vt.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-c79vjqmcytn2oujb.js → select-kl1skfh3pmwc33rp.js} +6 -6
  59. package/dist/chunks/{select-c79vjqmcytn2oujb.js.map → select-kl1skfh3pmwc33rp.js.map} +1 -1
  60. package/dist/chunks/{sensitive-input-mxbd0ayw2mbju4ii.js → sensitive-input-izmbyk1t7r56ciiq.js} +4 -4
  61. package/dist/chunks/{sensitive-input-mxbd0ayw2mbju4ii.js.map → sensitive-input-izmbyk1t7r56ciiq.js.map} +1 -1
  62. package/dist/chunks/{sidebar-dqw2uxx6xqln639l.js → sidebar-ior8rnhsd7gy5am5.js} +48 -48
  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-dld1q6qdzhe1uip7.js → switch-kh8a6l3l0hszm9h4.js} +3 -3
  67. package/dist/chunks/{switch-dld1q6qdzhe1uip7.js.map → switch-kh8a6l3l0hszm9h4.js.map} +1 -1
  68. package/dist/chunks/{table-l64wm81r9t67mtzm.js → table-dz2k55oab66h2vi9.js} +2 -2
  69. package/dist/chunks/{table-l64wm81r9t67mtzm.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-gewrapiiy5x9ak0o.js → toast-dkdo1lu72tnefya6.js} +7 -7
  73. package/dist/chunks/{toast-gewrapiiy5x9ak0o.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 +2 -2
  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-ov39dxshqbqrthhd.js +0 -210
  190. package/dist/chunks/button-ov39dxshqbqrthhd.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-dqw2uxx6xqln639l.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,7 +637,7 @@ 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
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`
@@ -660,7 +660,7 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
660
660
 
661
661
  **Colors (kumo tokens used):**
662
662
 
663
- `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `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`
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`
664
664
 
665
665
  **Examples:**
666
666
 
@@ -1464,7 +1464,7 @@ Props:
1464
1464
 
1465
1465
  ### Collapsible
1466
1466
 
1467
- 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.
1468
1468
 
1469
1469
  **Type:** component
1470
1470
 
@@ -1615,7 +1615,7 @@ Props:
1615
1615
 
1616
1616
  ### Combobox
1617
1617
 
1618
- 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.
1619
1619
 
1620
1620
  **Type:** component
1621
1621
 
@@ -2119,7 +2119,7 @@ Icon sub-component (wraps ComboboxBase)
2119
2119
 
2120
2120
  ### CommandPalette
2121
2121
 
2122
- 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.
2123
2123
 
2124
2124
  **Type:** component
2125
2125
 
@@ -2424,7 +2424,7 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
2424
2424
 
2425
2425
  ### DatePicker
2426
2426
 
2427
- 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.
2428
2428
 
2429
2429
  **Type:** component
2430
2430
 
@@ -2603,7 +2603,7 @@ DatePicker — a date selection calendar. Built on [react-day-picker](https://d
2603
2603
 
2604
2604
  ### DateRangePicker
2605
2605
 
2606
- 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.
2607
2607
 
2608
2608
  **Type:** component
2609
2609
 
@@ -3028,7 +3028,7 @@ Close sub-component
3028
3028
 
3029
3029
  ### DropdownMenu
3030
3030
 
3031
- 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.
3032
3032
 
3033
3033
  **Type:** component
3034
3034
 
@@ -4353,7 +4353,7 @@ Description sub-component
4353
4353
 
4354
4354
  ### Label
4355
4355
 
4356
- 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.
4357
4357
 
4358
4358
  **Type:** component
4359
4359
 
@@ -4697,7 +4697,7 @@ Animated circular spinner for indicating loading states.
4697
4697
 
4698
4698
  ### MenuBar
4699
4699
 
4700
- 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.
4701
4701
 
4702
4702
  **Type:** component
4703
4703
 
@@ -5293,7 +5293,7 @@ Close sub-component
5293
5293
 
5294
5294
  ### Radio
5295
5295
 
5296
- 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.
5297
5297
 
5298
5298
  **Type:** component
5299
5299
 
@@ -5303,12 +5303,9 @@ Radio — radio button group for single-select choices. Compound component: `Ra
5303
5303
 
5304
5304
  **Props:**
5305
5305
 
5306
- - `legend`: string
5307
- 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.
5308
- - `children`: ReactNode
5309
- Child Radio.Item components (and optionally a Radio.Legend)
5310
- - `orientation`: enum
5311
- Layout direction of the radio items
5306
+ - `variant`: enum [default: default]
5307
+ - `"default"`: Default radio appearance
5308
+ - `"error"`: Error state for validation failures
5312
5309
  - `appearance`: enum [default: default]
5313
5310
  - `"default"`: Standard inline radio item
5314
5311
  - `"card"`: Choice card appearance with border, padding, and highlighted selection state
@@ -5316,20 +5313,16 @@ Radio — radio button group for single-select choices. Compound component: `Ra
5316
5313
  **State Classes:**
5317
5314
  - `"card"`:
5318
5315
  - `hover`: `hover:bg-kumo-tint`
5319
- - `error`: string
5320
- Error message for the group
5321
- - `description`: ReactNode
5322
- Helper text for the group
5323
- - `value`: string
5324
- Value of the radio that should be selected (controlled)
5325
- - `disabled`: boolean
5326
- Whether all radios in the group are disabled
5327
- - `controlPosition`: enum
5328
- 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.
5329
- - `name`: string
5330
- Form submission name for the radio group
5331
5316
  - `className`: string
5332
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.
5333
5326
 
5334
5327
  **Colors (kumo tokens used):**
5335
5328
 
@@ -5348,18 +5341,9 @@ Item sub-component
5348
5341
  Group sub-component
5349
5342
 
5350
5343
  Props:
5351
- - `legend`: string
5352
- - `children`: ReactNode (required)
5353
- - `orientation`: "vertical" | "horizontal"
5354
- - `appearance`: KumoRadioAppearance
5355
- - `error`: string
5356
- - `description`: ReactNode
5357
- - `value`: string
5358
- - `disabled`: boolean
5359
- - `label`: "start" puts radio before label (required)
5360
- - `controlPosition`: RadioControlPosition
5361
- - `name`: string
5362
- - `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.
5363
5347
 
5364
5348
  #### Radio.Legend
5365
5349
 
@@ -5564,6 +5548,29 @@ Props:
5564
5548
  </Radio.Group>
5565
5549
  ```
5566
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
+
5567
5574
  ```tsx
5568
5575
  <Radio.Group
5569
5576
  legend="Choose a plan"
@@ -6153,7 +6160,7 @@ Password/secret input that masks its value by default and reveals on click. Incl
6153
6160
 
6154
6161
  ### Sidebar
6155
6162
 
6156
- 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.
6157
6164
 
6158
6165
  **Type:** component
6159
6166
 
@@ -7176,7 +7183,7 @@ Props:
7176
7183
 
7177
7184
  ### Table
7178
7185
 
7179
- 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.
7180
7187
 
7181
7188
  **Type:** component
7182
7189
 
@@ -7631,7 +7638,7 @@ ResizeHandle sub-component
7631
7638
 
7632
7639
  ### TableOfContents
7633
7640
 
7634
- 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.
7635
7642
 
7636
7643
  **Type:** component
7637
7644
 
@@ -8111,7 +8118,7 @@ Text component
8111
8118
 
8112
8119
  ### Toasty
8113
8120
 
8114
- 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.
8115
8122
 
8116
8123
  **Type:** component
8117
8124
 
@@ -8148,6 +8155,117 @@ Toasty — toast notification provider and viewport. Renders a `Toast.Provider`
8148
8155
  ```
8149
8156
 
8150
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
+
8151
8269
  ---
8152
8270
 
8153
8271
  ### Tooltip
@@ -8329,7 +8447,7 @@ Multi-line textarea input with Input variants and InputArea-specific dimensions
8329
8447
  ## Quick Reference
8330
8448
 
8331
8449
  **Components by Category:**
8332
- - **Other:** Autocomplete, CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, TableOfContents, DeleteResource
8450
+ - **Other:** Autocomplete, CloudflareLogo, DatePicker, Label, Link, SensitiveInput, Sidebar, Table, TableOfContents, Toolbar, DeleteResource
8333
8451
  - **Display:** Badge, Breadcrumbs, Code, Collapsible, Empty, LayerCard, Meter, Text
8334
8452
  - **Feedback:** Banner, Loader, Toasty
8335
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
- 1781116139367
1
+ 1782153248772