@cloudflare/kumo 2.2.2 → 2.4.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 (252) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/ai/component-registry.json +194 -128
  3. package/ai/component-registry.md +412 -221
  4. package/ai/schemas.ts +8 -2
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +58 -38
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/ai/schemas.js +14 -4
  9. package/dist/ai/schemas.js.map +1 -1
  10. package/dist/chunks/SankeyChart-npoyr1j06svoxsfe.js +770 -0
  11. package/dist/chunks/SankeyChart-npoyr1j06svoxsfe.js.map +1 -0
  12. package/dist/chunks/{autocomplete-mhrvtq4y5n21vr0t.js → autocomplete-cvp5fsdt6gh0p3vu.js} +86 -68
  13. package/dist/chunks/autocomplete-cvp5fsdt6gh0p3vu.js.map +1 -0
  14. package/dist/chunks/{badge-kqox9toi0sygfbno.js → badge-c1th6h6ahz7eu49q.js} +80 -19
  15. package/dist/chunks/badge-c1th6h6ahz7eu49q.js.map +1 -0
  16. package/dist/chunks/banner-es5iwuk4pf25e29e.js +120 -0
  17. package/dist/chunks/banner-es5iwuk4pf25e29e.js.map +1 -0
  18. package/dist/chunks/{breadcrumbs-ohstavaqvycoremm.js → breadcrumbs-j214mimk5zj4ffp4.js} +8 -6
  19. package/dist/chunks/breadcrumbs-j214mimk5zj4ffp4.js.map +1 -0
  20. package/dist/chunks/{button-oevxukl0zmwoq4tb.js → button-mnrxu6dud2x5js5b.js} +19 -17
  21. package/dist/chunks/{button-oevxukl0zmwoq4tb.js.map → button-mnrxu6dud2x5js5b.js.map} +1 -1
  22. package/dist/chunks/{checkbox-h6vkv17lnq854z2c.js → checkbox-dqih8tzzt3vhp870.js} +25 -19
  23. package/dist/chunks/checkbox-dqih8tzzt3vhp870.js.map +1 -0
  24. package/dist/chunks/{clipboard-text-kyy71jmx7umdh8k8.js → clipboard-text-mrut8z3dt1w0efxz.js} +4 -4
  25. package/dist/chunks/{clipboard-text-kyy71jmx7umdh8k8.js.map → clipboard-text-mrut8z3dt1w0efxz.js.map} +1 -1
  26. package/dist/chunks/{collapsible-ej6p2bq758sw30nk.js → collapsible-nzqcf9zwnjkxqzr6.js} +21 -17
  27. package/dist/chunks/collapsible-nzqcf9zwnjkxqzr6.js.map +1 -0
  28. package/dist/chunks/{combobox-g3cudlfajecou4va.js → combobox-dpptfpcmqfrso1xa.js} +123 -111
  29. package/dist/chunks/combobox-dpptfpcmqfrso1xa.js.map +1 -0
  30. package/dist/chunks/{command-palette-eep807rf6iapoz8r.js → command-palette-fqhyacp33fhyf696.js} +12 -12
  31. package/dist/chunks/{command-palette-eep807rf6iapoz8r.js.map → command-palette-fqhyacp33fhyf696.js.map} +1 -1
  32. package/dist/chunks/dialog-my9fioafdstq50mi.js +134 -0
  33. package/dist/chunks/dialog-my9fioafdstq50mi.js.map +1 -0
  34. package/dist/chunks/{dropdown-cobpydatw4vlb3ov.js → dropdown-g4sb4cw9ffqaw5gx.js} +54 -44
  35. package/dist/chunks/dropdown-g4sb4cw9ffqaw5gx.js.map +1 -0
  36. package/dist/chunks/{empty-n3r7xutkb9sxjaso.js → empty-n17inn1z67bpohkw.js} +2 -2
  37. package/dist/chunks/{empty-n3r7xutkb9sxjaso.js.map → empty-n17inn1z67bpohkw.js.map} +1 -1
  38. package/dist/chunks/{field-l1oapopp6kjnephi.js → field-c8o7h3rlam4c9pcx.js} +3 -3
  39. package/dist/chunks/{field-l1oapopp6kjnephi.js.map → field-c8o7h3rlam4c9pcx.js.map} +1 -1
  40. package/dist/chunks/{input-area-gudamx1ruz8rxiw2.js → input-area-eurk3seud30ricwn.js} +4 -4
  41. package/dist/chunks/{input-area-gudamx1ruz8rxiw2.js.map → input-area-eurk3seud30ricwn.js.map} +1 -1
  42. package/dist/chunks/{input-i3os21puacqw4r75.js → input-en8hhb14mmt3tfwn.js} +3 -3
  43. package/dist/chunks/{input-i3os21puacqw4r75.js.map → input-en8hhb14mmt3tfwn.js.map} +1 -1
  44. package/dist/chunks/{input-group-gy08vju7eoogil8k.js → input-group-d09ocmjcbdai0gze.js} +70 -70
  45. package/dist/chunks/input-group-d09ocmjcbdai0gze.js.map +1 -0
  46. package/dist/chunks/{label-i0bj94d43irz0k1x.js → label-c8rz453pti66slki.js} +3 -3
  47. package/dist/chunks/{label-i0bj94d43irz0k1x.js.map → label-c8rz453pti66slki.js.map} +1 -1
  48. package/dist/chunks/{layer-card-hyz8lfxceudt05pv.js → layer-card-er4flkcxmzfug8jw.js} +2 -2
  49. package/dist/chunks/{layer-card-hyz8lfxceudt05pv.js.map → layer-card-er4flkcxmzfug8jw.js.map} +1 -1
  50. package/dist/chunks/{link-lkzjiitte3l29q87.js → link-i6vnwyjcwvjz5btm.js} +20 -19
  51. package/dist/chunks/{link-lkzjiitte3l29q87.js.map → link-i6vnwyjcwvjz5btm.js.map} +1 -1
  52. package/dist/chunks/menubar-ng5if56amh1tto4j.js +98 -0
  53. package/dist/chunks/menubar-ng5if56amh1tto4j.js.map +1 -0
  54. package/dist/chunks/{meter-jbxkh6gfggx1kjna.js → meter-d5igshkjqttl1fdj.js} +2 -2
  55. package/dist/chunks/{meter-jbxkh6gfggx1kjna.js.map → meter-d5igshkjqttl1fdj.js.map} +1 -1
  56. package/dist/chunks/{pagination-ceetno8sc1rd0wr2.js → pagination-bw7vwca4wrfjm8vb.js} +3 -3
  57. package/dist/chunks/{pagination-ceetno8sc1rd0wr2.js.map → pagination-bw7vwca4wrfjm8vb.js.map} +1 -1
  58. package/dist/chunks/{popover-i4opvl9g0as52fyx.js → popover-ozf1j7oi7pxiudyz.js} +4 -2
  59. package/dist/chunks/popover-ozf1j7oi7pxiudyz.js.map +1 -0
  60. package/dist/chunks/{radio-g56o5rftpu1qpxuv.js → radio-gpg6kmzonr2cayq1.js} +54 -46
  61. package/dist/chunks/radio-gpg6kmzonr2cayq1.js.map +1 -0
  62. package/dist/chunks/select-dw9iw35ug7yer3o3.js +237 -0
  63. package/dist/chunks/select-dw9iw35ug7yer3o3.js.map +1 -0
  64. package/dist/chunks/{sensitive-input-hokm527ollnz9dqc.js → sensitive-input-dgoxjtoxl4zqa51v.js} +101 -92
  65. package/dist/chunks/sensitive-input-dgoxjtoxl4zqa51v.js.map +1 -0
  66. package/dist/chunks/sidebar-hzio700cg85f7f31.js +1014 -0
  67. package/dist/chunks/sidebar-hzio700cg85f7f31.js.map +1 -0
  68. package/dist/chunks/{surface-ck1nt2uqfzmod4sz.js → surface-iyejjbqogjbo7ise.js} +2 -2
  69. package/dist/chunks/{surface-ck1nt2uqfzmod4sz.js.map → surface-iyejjbqogjbo7ise.js.map} +1 -1
  70. package/dist/chunks/{switch-fv0ttj24uhocvuh8.js → switch-g8f77h69h34xld06.js} +50 -45
  71. package/dist/chunks/switch-g8f77h69h34xld06.js.map +1 -0
  72. package/dist/chunks/{table-nsfcgpo93gfetrhh.js → table-e1te1im2tt2ez05y.js} +2 -2
  73. package/dist/chunks/{table-nsfcgpo93gfetrhh.js.map → table-e1te1im2tt2ez05y.js.map} +1 -1
  74. package/dist/chunks/{table-of-contents-fzyv7uhnnyr13dqu.js → table-of-contents-jco9kvt48d34dwsw.js} +34 -30
  75. package/dist/chunks/table-of-contents-jco9kvt48d34dwsw.js.map +1 -0
  76. package/dist/chunks/{tabs-g8ier5pehjpfxauf.js → tabs-hice1yy5q2t889z8.js} +6 -4
  77. package/dist/chunks/tabs-hice1yy5q2t889z8.js.map +1 -0
  78. package/dist/chunks/{toast-ofqlfmddcyka091n.js → toast-kvbgct0jvfmn4mas.js} +29 -27
  79. package/dist/chunks/{toast-ofqlfmddcyka091n.js.map → toast-kvbgct0jvfmn4mas.js.map} +1 -1
  80. package/dist/chunks/{tooltip-icvb67awe1zolz61.js → tooltip-ken77ixya0qpidie.js} +13 -13
  81. package/dist/chunks/{tooltip-icvb67awe1zolz61.js.map → tooltip-ken77ixya0qpidie.js.map} +1 -1
  82. package/dist/chunks/vendor-base-ui-knphx7dts1vm1x37.js +24710 -0
  83. package/dist/chunks/vendor-base-ui-knphx7dts1vm1x37.js.map +1 -0
  84. package/dist/chunks/{vendor-floating-ui-dwag5e88viikh2zs.js → vendor-floating-ui-c4mwmh0xmfzevy9l.js} +5 -5
  85. package/dist/chunks/{vendor-floating-ui-dwag5e88viikh2zs.js.map → vendor-floating-ui-c4mwmh0xmfzevy9l.js.map} +1 -1
  86. package/dist/chunks/vendor-utils-m5h2xu7s2rs3pgk5.js +217 -0
  87. package/dist/chunks/vendor-utils-m5h2xu7s2rs3pgk5.js.map +1 -0
  88. package/dist/code.js +1 -1
  89. package/dist/components/autocomplete.js +1 -1
  90. package/dist/components/badge.js +1 -1
  91. package/dist/components/banner.js +1 -1
  92. package/dist/components/breadcrumbs.js +1 -1
  93. package/dist/components/button.js +1 -1
  94. package/dist/components/chart.js +1 -1
  95. package/dist/components/checkbox.js +1 -1
  96. package/dist/components/clipboard-text.js +1 -1
  97. package/dist/components/collapsible.js +1 -1
  98. package/dist/components/combobox.js +1 -1
  99. package/dist/components/command-palette.js +1 -1
  100. package/dist/components/dialog.js +1 -1
  101. package/dist/components/dropdown.js +1 -1
  102. package/dist/components/empty.js +1 -1
  103. package/dist/components/field.js +1 -1
  104. package/dist/components/input-group.js +1 -1
  105. package/dist/components/input.js +3 -3
  106. package/dist/components/label.js +1 -1
  107. package/dist/components/layer-card.js +1 -1
  108. package/dist/components/link.js +1 -1
  109. package/dist/components/menubar.js +1 -1
  110. package/dist/components/meter.js +1 -1
  111. package/dist/components/pagination.js +1 -1
  112. package/dist/components/popover.js +1 -1
  113. package/dist/components/radio.js +1 -1
  114. package/dist/components/select.js +1 -1
  115. package/dist/components/sensitive-input.js +1 -1
  116. package/dist/components/sidebar.js +22 -23
  117. package/dist/components/surface.js +1 -1
  118. package/dist/components/switch.js +1 -1
  119. package/dist/components/table-of-contents.js +1 -1
  120. package/dist/components/table.js +1 -1
  121. package/dist/components/tabs.js +1 -1
  122. package/dist/components/toast.js +2 -2
  123. package/dist/components/tooltip.js +1 -1
  124. package/dist/index.js +122 -123
  125. package/dist/primitives/accordion.js +1 -1
  126. package/dist/primitives/alert-dialog.js +1 -1
  127. package/dist/primitives/autocomplete.js +1 -1
  128. package/dist/primitives/avatar.js +1 -1
  129. package/dist/primitives/button.js +1 -1
  130. package/dist/primitives/checkbox-group.js +1 -1
  131. package/dist/primitives/checkbox.js +1 -1
  132. package/dist/primitives/collapsible.js +1 -1
  133. package/dist/primitives/combobox.js +1 -1
  134. package/dist/primitives/context-menu.js +1 -1
  135. package/dist/primitives/csp-provider.js +1 -1
  136. package/dist/primitives/dialog.js +1 -1
  137. package/dist/primitives/direction-provider.js +1 -1
  138. package/dist/primitives/drawer.js +1 -1
  139. package/dist/primitives/field.js +1 -1
  140. package/dist/primitives/fieldset.js +1 -1
  141. package/dist/primitives/form.js +1 -1
  142. package/dist/primitives/input.js +1 -1
  143. package/dist/primitives/menu.js +1 -1
  144. package/dist/primitives/menubar.js +1 -1
  145. package/dist/primitives/meter.js +1 -1
  146. package/dist/primitives/navigation-menu.js +1 -1
  147. package/dist/primitives/number-field.js +1 -1
  148. package/dist/primitives/otp-field.js +1 -1
  149. package/dist/primitives/popover.js +1 -1
  150. package/dist/primitives/preview-card.js +1 -1
  151. package/dist/primitives/progress.js +1 -1
  152. package/dist/primitives/radio-group.js +1 -1
  153. package/dist/primitives/radio.js +1 -1
  154. package/dist/primitives/scroll-area.js +1 -1
  155. package/dist/primitives/select.js +1 -1
  156. package/dist/primitives/separator.js +1 -1
  157. package/dist/primitives/slider.js +1 -1
  158. package/dist/primitives/switch.js +1 -1
  159. package/dist/primitives/tabs.js +1 -1
  160. package/dist/primitives/toast.js +1 -1
  161. package/dist/primitives/toggle-group.js +1 -1
  162. package/dist/primitives/toggle.js +1 -1
  163. package/dist/primitives/toolbar.js +1 -1
  164. package/dist/primitives/tooltip.js +1 -1
  165. package/dist/primitives.js +1 -1
  166. package/dist/scripts/theme-generator/config.d.ts.map +1 -1
  167. package/dist/scripts/theme-generator/config.js +37 -39
  168. package/dist/scripts/theme-generator/config.js.map +1 -1
  169. package/dist/scripts/theme-generator/generate-css.d.ts.map +1 -1
  170. package/dist/scripts/theme-generator/types.d.ts +8 -2
  171. package/dist/scripts/theme-generator/types.d.ts.map +1 -1
  172. package/dist/src/components/autocomplete/autocomplete.d.ts +1 -0
  173. package/dist/src/components/autocomplete/autocomplete.d.ts.map +1 -1
  174. package/dist/src/components/autocomplete/index.d.ts +1 -0
  175. package/dist/src/components/autocomplete/index.d.ts.map +1 -1
  176. package/dist/src/components/badge/badge.d.ts +51 -3
  177. package/dist/src/components/badge/badge.d.ts.map +1 -1
  178. package/dist/src/components/banner/banner.d.ts +14 -7
  179. package/dist/src/components/banner/banner.d.ts.map +1 -1
  180. package/dist/src/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  181. package/dist/src/components/button/button.d.ts.map +1 -1
  182. package/dist/src/components/chart/SankeyChart.d.ts +6 -1
  183. package/dist/src/components/chart/SankeyChart.d.ts.map +1 -1
  184. package/dist/src/components/chart/TimeseriesChart.d.ts +43 -1
  185. package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
  186. package/dist/src/components/checkbox/checkbox.d.ts.map +1 -1
  187. package/dist/src/components/collapsible/collapsible.d.ts.map +1 -1
  188. package/dist/src/components/combobox/combobox.d.ts +1 -0
  189. package/dist/src/components/combobox/combobox.d.ts.map +1 -1
  190. package/dist/src/components/combobox/index.d.ts +1 -0
  191. package/dist/src/components/combobox/index.d.ts.map +1 -1
  192. package/dist/src/components/dialog/dialog.d.ts +11 -4
  193. package/dist/src/components/dialog/dialog.d.ts.map +1 -1
  194. package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
  195. package/dist/src/components/input-group/input-group-button.d.ts.map +1 -1
  196. package/dist/src/components/input-group/input-group-input.d.ts.map +1 -1
  197. package/dist/src/components/input-group/input-group.d.ts.map +1 -1
  198. package/dist/src/components/link/link.d.ts.map +1 -1
  199. package/dist/src/components/menubar/menubar.d.ts.map +1 -1
  200. package/dist/src/components/popover/popover.d.ts.map +1 -1
  201. package/dist/src/components/radio/radio.d.ts.map +1 -1
  202. package/dist/src/components/select/select.d.ts.map +1 -1
  203. package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -1
  204. package/dist/src/components/sidebar/index.d.ts +1 -1
  205. package/dist/src/components/sidebar/index.d.ts.map +1 -1
  206. package/dist/src/components/sidebar/sidebar.d.ts +159 -146
  207. package/dist/src/components/sidebar/sidebar.d.ts.map +1 -1
  208. package/dist/src/components/switch/switch.d.ts.map +1 -1
  209. package/dist/src/components/table-of-contents/table-of-contents.d.ts.map +1 -1
  210. package/dist/src/components/tabs/tabs.d.ts.map +1 -1
  211. package/dist/src/components/toast/toast.d.ts.map +1 -1
  212. package/dist/src/index.d.ts +1 -1
  213. package/dist/src/index.d.ts.map +1 -1
  214. package/dist/styles/kumo-binding.css +0 -18
  215. package/dist/styles/kumo-standalone.css +1 -1
  216. package/dist/styles/kumo.css +37 -0
  217. package/dist/styles/theme-kumo.css +30 -37
  218. package/package.json +5 -2
  219. package/scripts/generate-primitives.ts +6 -1
  220. package/scripts/theme-generator/config.ts +38 -40
  221. package/scripts/theme-generator/generate-css.ts +4 -1
  222. package/scripts/theme-generator/types.ts +8 -2
  223. package/dist/chunks/SankeyChart-dkq90770ad7hgzx3.js +0 -635
  224. package/dist/chunks/SankeyChart-dkq90770ad7hgzx3.js.map +0 -1
  225. package/dist/chunks/autocomplete-mhrvtq4y5n21vr0t.js.map +0 -1
  226. package/dist/chunks/badge-kqox9toi0sygfbno.js.map +0 -1
  227. package/dist/chunks/banner-ip2lm8r87hich557.js +0 -88
  228. package/dist/chunks/banner-ip2lm8r87hich557.js.map +0 -1
  229. package/dist/chunks/breadcrumbs-ohstavaqvycoremm.js.map +0 -1
  230. package/dist/chunks/checkbox-h6vkv17lnq854z2c.js.map +0 -1
  231. package/dist/chunks/collapsible-ej6p2bq758sw30nk.js.map +0 -1
  232. package/dist/chunks/combobox-g3cudlfajecou4va.js.map +0 -1
  233. package/dist/chunks/dialog-fo3qhv9fgiadq5gp.js +0 -115
  234. package/dist/chunks/dialog-fo3qhv9fgiadq5gp.js.map +0 -1
  235. package/dist/chunks/dropdown-cobpydatw4vlb3ov.js.map +0 -1
  236. package/dist/chunks/input-group-gy08vju7eoogil8k.js.map +0 -1
  237. package/dist/chunks/menubar-jalggrag4utvdpey.js +0 -96
  238. package/dist/chunks/menubar-jalggrag4utvdpey.js.map +0 -1
  239. package/dist/chunks/popover-i4opvl9g0as52fyx.js.map +0 -1
  240. package/dist/chunks/radio-g56o5rftpu1qpxuv.js.map +0 -1
  241. package/dist/chunks/select-g1xvti1k1hj7xe5t.js +0 -226
  242. package/dist/chunks/select-g1xvti1k1hj7xe5t.js.map +0 -1
  243. package/dist/chunks/sensitive-input-hokm527ollnz9dqc.js.map +0 -1
  244. package/dist/chunks/sidebar-oan40ylmqkyui21w.js +0 -875
  245. package/dist/chunks/sidebar-oan40ylmqkyui21w.js.map +0 -1
  246. package/dist/chunks/switch-fv0ttj24uhocvuh8.js.map +0 -1
  247. package/dist/chunks/table-of-contents-fzyv7uhnnyr13dqu.js.map +0 -1
  248. package/dist/chunks/tabs-g8ier5pehjpfxauf.js.map +0 -1
  249. package/dist/chunks/vendor-base-ui-nbyiqqi138hcoz52.js +0 -24639
  250. package/dist/chunks/vendor-base-ui-nbyiqqi138hcoz52.js.map +0 -1
  251. package/dist/chunks/vendor-utils-ixnhxmehwihk5tr7.js +0 -534
  252. package/dist/chunks/vendor-utils-ixnhxmehwihk5tr7.js.map +0 -1
@@ -115,19 +115,17 @@ Collection sub-component (wraps AutocompleteBase)
115
115
  ```tsx
116
116
  <div className="w-80">
117
117
  <Autocomplete
118
- items={countries}
119
- label="Country"
120
- description="Start typing to filter countries"
121
- filter={(item: Country, query: string) =>
122
- item.label.toLowerCase().includes(query.toLowerCase())
123
- }
118
+ items={languages}
119
+ label="Language"
120
+ description="Start typing to filter languages"
121
+ filter={filter}
124
122
  >
125
- <Autocomplete.InputGroup placeholder="Search countries…" />
123
+ <Autocomplete.InputGroup placeholder="Search a language…" />
126
124
  <Autocomplete.Content>
127
125
  <Autocomplete.List>
128
- {(item: Country) => (
129
- <Autocomplete.Item key={item.code} value={item}>
130
- {item.label}
126
+ {(item: Language) => (
127
+ <Autocomplete.Item key={item.value} value={item}>
128
+ {item.emoji} {item.label}
131
129
  </Autocomplete.Item>
132
130
  )}
133
131
  </Autocomplete.List>
@@ -142,9 +140,7 @@ Collection sub-component (wraps AutocompleteBase)
142
140
  items={countries}
143
141
  label="Country"
144
142
  error={{ message: "Please enter a valid country", match: true }}
145
- filter={(item: Country, query: string) =>
146
- item.label.toLowerCase().includes(query.toLowerCase())
147
- }
143
+ filter={filter}
148
144
  >
149
145
  <Autocomplete.InputGroup placeholder="Search countries…" />
150
146
  <Autocomplete.Content>
@@ -294,6 +290,9 @@ Small status label for categorizing or highlighting content.
294
290
  - `"teal"`: Teal badge
295
291
  - `"teal-subtle"`: Subtle teal badge
296
292
  - `"blue"`: Blue badge
293
+ - `appearance`: enum [default: filled]
294
+ - `"filled"`: Filled badge with background color (default)
295
+ - `"dot"`: Outlined badge with a colored circle dot indicating status
297
296
  - `className`: string
298
297
  Additional CSS classes merged via `cn()`.
299
298
  - `children`: ReactNode
@@ -301,7 +300,7 @@ Small status label for categorizing or highlighting content.
301
300
 
302
301
  **Colors (kumo tokens used):**
303
302
 
304
- `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-tint`, `bg-kumo-warning-tint`, `border-kumo-brand`, `border-kumo-fill`, `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-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`
305
304
 
306
305
  **Examples:**
307
306
 
@@ -323,7 +322,6 @@ Small status label for categorizing or highlighting content.
323
322
  <Badge variant="neutral">Neutral</Badge>
324
323
  <Badge variant="red">Red</Badge>
325
324
  <Badge variant="orange">Orange</Badge>
326
- <Badge variant="green">Green</Badge>
327
325
  <Badge variant="teal">Teal</Badge>
328
326
  <Badge variant="blue">Blue</Badge>
329
327
  <Badge variant="purple">Purple</Badge>
@@ -337,6 +335,15 @@ Small status label for categorizing or highlighting content.
337
335
  </p>
338
336
  ```
339
337
 
338
+ ```tsx
339
+ <div className="flex flex-wrap items-center gap-2">
340
+ <Badge variant="success" appearance="dot">Healthy</Badge>
341
+ <Badge variant="warning" appearance="dot">Warning</Badge>
342
+ <Badge variant="error" appearance="dot">Error</Badge>
343
+ <Badge variant="neutral" appearance="dot">Neutral</Badge>
344
+ </div>
345
+ ```
346
+
340
347
 
341
348
  ---
342
349
 
@@ -352,6 +359,10 @@ Full-width message bar for informational, warning, or error notices. Supports st
352
359
 
353
360
  **Props:**
354
361
 
362
+ - `className`: string
363
+ Additional CSS classes merged via `cn()`.
364
+ - `id`: string
365
+ - `lang`: string
355
366
  - `icon`: ReactNode
356
367
  Icon element rendered before the banner content (e.g. from `@phosphor-icons/react`).
357
368
  - `title`: string
@@ -366,12 +377,11 @@ Full-width message bar for informational, warning, or error notices. Supports st
366
377
  - `"default"`: Informational banner for general messages
367
378
  - `"alert"`: Warning banner for cautionary messages
368
379
  - `"error"`: Error banner for critical issues
369
- - `className`: string
370
- Additional CSS classes merged via `cn()`.
380
+ - `"secondary"`: Neutral banner for secondary messages
371
381
 
372
382
  **Colors (kumo tokens used):**
373
383
 
374
- `bg-kumo-danger-tint`, `bg-kumo-info-tint`, `bg-kumo-warning-tint`, `border-kumo-danger`, `border-kumo-info`, `border-kumo-warning`, `text-kumo-danger`, `text-kumo-info`, `text-kumo-warning`
384
+ `bg-kumo-banner-info`, `bg-kumo-banner-warning`, `bg-kumo-contrast`, `bg-kumo-danger-tint`, `text-kumo-danger`, `text-kumo-info`, `text-kumo-subtle`, `text-kumo-warning`
375
385
 
376
386
  **Examples:**
377
387
 
@@ -394,6 +404,12 @@ Full-width message bar for informational, warning, or error notices. Supports st
394
404
  title="Save failed"
395
405
  description="We couldn't save your changes. Please try again."
396
406
  />
407
+ <Banner
408
+ icon={<Info weight="fill" />}
409
+ variant="secondary"
410
+ title="Maintenance scheduled"
411
+ description="This service will be unavailable for 10 minutes."
412
+ />
397
413
  </div>
398
414
  ```
399
415
 
@@ -3972,7 +3988,7 @@ InputGroup component
3972
3988
 
3973
3989
  **Colors (kumo tokens used):**
3974
3990
 
3975
- `border-kumo-line`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-line`
3991
+ `border-kumo-focus`, `border-kumo-line`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-line`
3976
3992
 
3977
3993
  **Sub-Components:**
3978
3994
 
@@ -4079,6 +4095,7 @@ Description sub-component
4079
4095
  />
4080
4096
  <InputGroup.Addon align="end">
4081
4097
  <InputGroup.Button
4098
+ shape="square"
4082
4099
  className="text-kumo-subtle"
4083
4100
  icon={show ? EyeSlashIcon : EyeIcon}
4084
4101
  aria-label={show ? "Hide password" : "Show password"}
@@ -4100,11 +4117,11 @@ Description sub-component
4100
4117
  {searchValue && (
4101
4118
  <InputGroup.Addon align="end" className="pr-1">
4102
4119
  <InputGroup.Button
4120
+ shape="square"
4121
+ icon={XIcon}
4103
4122
  aria-label="Clear search"
4104
4123
  onClick={() => setSearchValue("")}
4105
- >
4106
- <XIcon />
4107
- </InputGroup.Button>
4124
+ />
4108
4125
  </InputGroup.Addon>
4109
4126
  )}
4110
4127
  <InputGroup.Button variant="secondary" onClick={() => {}}>
@@ -4125,8 +4142,10 @@ Description sub-component
4125
4142
  />
4126
4143
  <InputGroup.Addon align="end">
4127
4144
  <InputGroup.Button
4145
+ shape="square"
4128
4146
  className="text-kumo-subtle"
4129
4147
  icon={QuestionIcon}
4148
+ aria-label="Query language help"
4130
4149
  tooltip="Query language help"
4131
4150
  onClick={() => {}}
4132
4151
  />
@@ -4283,6 +4302,7 @@ Description sub-component
4283
4302
  />
4284
4303
  <InputGroup.Addon align="end">
4285
4304
  <InputGroup.Button
4305
+ shape="square"
4286
4306
  className="text-kumo-subtle"
4287
4307
  icon={show ? EyeSlashIcon : EyeIcon}
4288
4308
  aria-label={show ? "Hide password" : "Show password"}
@@ -5623,7 +5643,7 @@ Select component
5623
5643
 
5624
5644
  **Colors (kumo tokens used):**
5625
5645
 
5626
- `bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-hairline`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-brand`, `ring-kumo-focus`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-placeholder`, `text-kumo-subtle`
5646
+ `bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-hairline`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-brand`, `ring-kumo-danger`, `ring-kumo-focus`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-placeholder`, `text-kumo-subtle`
5627
5647
 
5628
5648
  **Styling:**
5629
5649
 
@@ -5710,7 +5730,6 @@ Separator sub-component
5710
5730
  <Select
5711
5731
  label="Issue Type"
5712
5732
  description="Choose the category that best describes your issue"
5713
- error={!value ? "Please select an issue type" : undefined}
5714
5733
  className="w-[280px]"
5715
5734
  value={value}
5716
5735
  onValueChange={(v) => setValue(v as string | null)}
@@ -5722,6 +5741,20 @@ Separator sub-component
5722
5741
  />
5723
5742
  ```
5724
5743
 
5744
+ ```tsx
5745
+ <Select
5746
+ label="Issue Type"
5747
+ error="Please select an issue type"
5748
+ className="w-[280px]"
5749
+ value={null}
5750
+ items={{
5751
+ bug: "Bug",
5752
+ documentation: "Documentation",
5753
+ feature: "Feature",
5754
+ }}
5755
+ />
5756
+ ```
5757
+
5725
5758
  ```tsx
5726
5759
  <Select
5727
5760
  label="Category"
@@ -6085,7 +6118,7 @@ Password/secret input that masks its value by default and reveals on click. Incl
6085
6118
 
6086
6119
  ### Sidebar
6087
6120
 
6088
- 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`.
6121
+ 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`.
6089
6122
 
6090
6123
  **Type:** component
6091
6124
 
@@ -6118,6 +6151,12 @@ Sidebar — responsive navigation panel with expand/collapse support. Compound
6118
6151
  Minimum width in pixels when resizing.
6119
6152
  - `maxWidth`: number
6120
6153
  Maximum width in pixels when resizing.
6154
+ - `contained`: boolean
6155
+ When true, the collapsed sidebar uses absolute positioning instead of fixed, keeping it scoped inside a bounded parent. Useful for demos and embedded sidebars.
6156
+ - `peekable`: boolean
6157
+ When true, hovering or focusing the collapsed sidebar temporarily expands it. The `state` will be `"peeking"` during the peek. Moving away collapses it back.
6158
+ - `animationDuration`: number
6159
+ Duration of sidebar expand/collapse animation in milliseconds.
6121
6160
  - `children`: ReactNode
6122
6161
  Content — typically `<Sidebar>` + main content.
6123
6162
  - `className`: string
@@ -6125,7 +6164,7 @@ Sidebar — responsive navigation panel with expand/collapse support. Compound
6125
6164
 
6126
6165
  **Colors (kumo tokens used):**
6127
6166
 
6128
- `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-hairline`, `bg-kumo-overlay`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-brand`, `ring-kumo-hairline`, `text-kumo-default`, `text-kumo-subtle`
6167
+ `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-hairline`, `bg-kumo-line`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-brand`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
6129
6168
 
6130
6169
  **Styling:**
6131
6170
 
@@ -6148,6 +6187,9 @@ Props:
6148
6187
  - `defaultWidth`: number
6149
6188
  - `minWidth`: number
6150
6189
  - `maxWidth`: number
6190
+ - `contained`: boolean
6191
+ - `peekable`: boolean
6192
+ - `animationDuration`: number
6151
6193
  - `children`: ReactNode (required)
6152
6194
  - `className`: string
6153
6195
 
@@ -6156,36 +6198,28 @@ Props:
6156
6198
  Header sub-component
6157
6199
 
6158
6200
  Props:
6159
- - `collapsible`: boolean
6160
- - `defaultOpen`: boolean
6161
- - `open`: boolean
6201
+ - `icon`: React.ComponentType<{ className?: string
6162
6202
 
6163
6203
  #### Sidebar.Content
6164
6204
 
6165
6205
  Content sub-component
6166
6206
 
6167
6207
  Props:
6168
- - `collapsible`: boolean
6169
- - `defaultOpen`: boolean
6170
- - `open`: boolean
6208
+ - `icon`: React.ComponentType<{ className?: string
6171
6209
 
6172
6210
  #### Sidebar.Footer
6173
6211
 
6174
6212
  Footer sub-component
6175
6213
 
6176
6214
  Props:
6177
- - `collapsible`: boolean
6178
- - `defaultOpen`: boolean
6179
- - `open`: boolean
6215
+ - `icon`: React.ComponentType<{ className?: string
6180
6216
 
6181
6217
  #### Sidebar.Group
6182
6218
 
6183
6219
  Group sub-component
6184
6220
 
6185
6221
  Props:
6186
- - `collapsible`: boolean
6187
- - `defaultOpen`: boolean
6188
- - `open`: boolean
6222
+ - `icon`: React.ComponentType<{ className?: string
6189
6223
 
6190
6224
  #### Sidebar.GroupLabel
6191
6225
 
@@ -6194,13 +6228,6 @@ GroupLabel sub-component
6194
6228
  Props:
6195
6229
  - `icon`: React.ComponentType<{ className?: string
6196
6230
 
6197
- #### Sidebar.GroupContent
6198
-
6199
- GroupContent sub-component
6200
-
6201
- Props:
6202
- - `icon`: React.ComponentType<{ className?: string
6203
-
6204
6231
  #### Sidebar.Menu
6205
6232
 
6206
6233
  Menu sub-component
@@ -6222,14 +6249,6 @@ MenuButton sub-component
6222
6249
  Props:
6223
6250
  - `icon`: React.ComponentType<{ className?: string
6224
6251
 
6225
- #### Sidebar.MenuAction
6226
-
6227
- MenuAction sub-component
6228
-
6229
- Props:
6230
- - `active`: boolean
6231
- - `href`: string
6232
-
6233
6252
  #### Sidebar.MenuBadge
6234
6253
 
6235
6254
  MenuBadge sub-component
@@ -6267,29 +6286,33 @@ Props:
6267
6286
  Separator sub-component
6268
6287
 
6269
6288
  Props:
6270
- - `placeholder`: string
6271
- - `shortcut`: string
6272
-
6273
- #### Sidebar.Input
6274
-
6275
- Input sub-component
6276
-
6277
- Props:
6278
- - `placeholder`: string
6279
- - `shortcut`: string
6289
+ - `defaultOpen`: boolean
6290
+ - `open`: boolean
6280
6291
 
6281
6292
  #### Sidebar.Trigger
6282
6293
 
6283
6294
  Trigger sub-component
6284
6295
 
6296
+ Props:
6297
+ - `defaultOpen`: boolean
6298
+ - `open`: boolean
6299
+
6285
6300
  #### Sidebar.Rail
6286
6301
 
6287
6302
  Rail sub-component
6288
6303
 
6304
+ Props:
6305
+ - `defaultOpen`: boolean
6306
+ - `open`: boolean
6307
+
6289
6308
  #### Sidebar.ResizeHandle
6290
6309
 
6291
6310
  ResizeHandle sub-component
6292
6311
 
6312
+ Props:
6313
+ - `defaultOpen`: boolean
6314
+ - `open`: boolean
6315
+
6293
6316
  #### Sidebar.MenuChevron
6294
6317
 
6295
6318
  MenuChevron sub-component
@@ -6301,20 +6324,46 @@ Props:
6301
6324
 
6302
6325
  Collapsible sub-component
6303
6326
 
6327
+ Props:
6328
+ - `defaultOpen`: boolean
6329
+ - `open`: boolean
6330
+
6304
6331
  #### Sidebar.CollapsibleTrigger
6305
6332
 
6306
6333
  CollapsibleTrigger sub-component
6307
6334
 
6335
+ Props:
6336
+ - `render`: React.ReactElement (required)
6337
+
6308
6338
  #### Sidebar.CollapsibleContent
6309
6339
 
6310
6340
  CollapsibleContent sub-component
6311
6341
 
6342
+ Props:
6343
+ - `activeKey`: string (required)
6344
+ - `direction`: "left" | "right"
6345
+
6346
+ #### Sidebar.SlidingViews
6347
+
6348
+ SlidingViews sub-component
6349
+
6350
+ Props:
6351
+ - `activeKey`: string (required)
6352
+ - `direction`: "left" | "right"
6353
+
6354
+ #### Sidebar.SlidingView
6355
+
6356
+ SlidingView sub-component
6357
+
6358
+ Props:
6359
+ - `value`: string (required)
6360
+
6312
6361
 
6313
6362
  **Examples:**
6314
6363
 
6315
6364
  ```tsx
6316
6365
  <DemoContainer>
6317
- <Sidebar.Provider defaultOpen className="min-h-0! h-full">
6366
+ <Sidebar.Provider contained defaultOpen className="min-h-0! h-full">
6318
6367
  <Sidebar>
6319
6368
  <Sidebar.Content>
6320
6369
  <Sidebar.Group>
@@ -6347,9 +6396,31 @@ CollapsibleContent sub-component
6347
6396
  />
6348
6397
  <Sidebar.CollapsibleContent>
6349
6398
  <Sidebar.MenuSub>
6350
- <Sidebar.MenuSubButton>
6351
- Workers & Pages
6352
- </Sidebar.MenuSubButton>
6399
+ <Sidebar.MenuSubItem>
6400
+ <Sidebar.Collapsible>
6401
+ <Sidebar.CollapsibleTrigger
6402
+ render={
6403
+ <Sidebar.MenuSubButton>
6404
+ Workers & Pages
6405
+ <Sidebar.MenuChevron />
6406
+ </Sidebar.MenuSubButton>
6407
+ }
6408
+ />
6409
+ <Sidebar.CollapsibleContent>
6410
+ <Sidebar.MenuSub>
6411
+ <Sidebar.MenuSubButton>
6412
+ Overview
6413
+ </Sidebar.MenuSubButton>
6414
+ <Sidebar.MenuSubButton>
6415
+ Workers
6416
+ </Sidebar.MenuSubButton>
6417
+ <Sidebar.MenuSubButton>
6418
+ Pages
6419
+ </Sidebar.MenuSubButton>
6420
+ </Sidebar.MenuSub>
6421
+ </Sidebar.CollapsibleContent>
6422
+ </Sidebar.Collapsible>
6423
+ </Sidebar.MenuSubItem>
6353
6424
  <Sidebar.MenuSubButton>
6354
6425
  Durable Objects
6355
6426
  </Sidebar.MenuSubButton>
@@ -6371,64 +6442,7 @@ CollapsibleContent sub-component
6371
6442
 
6372
6443
  ```tsx
6373
6444
  <DemoContainer>
6374
- <Sidebar.Provider defaultOpen className="min-h-0! h-full">
6375
- <Sidebar>
6376
- <Sidebar.Content>
6377
- {/* GroupContent is required for collapsible groups (provides grid-rows animation) */}
6378
- <Sidebar.Group collapsible defaultOpen>
6379
- <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
6380
- <Sidebar.GroupContent>
6381
- <Sidebar.Menu>
6382
- <Sidebar.MenuButton icon={HouseIcon} active>
6383
- Home
6384
- </Sidebar.MenuButton>
6385
- <Sidebar.MenuButton icon={ChartBarIcon}>
6386
- Analytics
6387
- </Sidebar.MenuButton>
6388
- <Sidebar.MenuButton icon={GlobeIcon}>
6389
- Domains
6390
- </Sidebar.MenuButton>
6391
- </Sidebar.Menu>
6392
- </Sidebar.GroupContent>
6393
- </Sidebar.Group>
6394
-
6395
- <Sidebar.Group collapsible defaultOpen>
6396
- <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
6397
- <Sidebar.GroupContent>
6398
- <Sidebar.Menu>
6399
- <Sidebar.MenuButton icon={CodeIcon}>
6400
- Compute
6401
- </Sidebar.MenuButton>
6402
- <Sidebar.MenuButton icon={DatabaseIcon}>
6403
- Storage
6404
- </Sidebar.MenuButton>
6405
- </Sidebar.Menu>
6406
- </Sidebar.GroupContent>
6407
- </Sidebar.Group>
6408
-
6409
- <Sidebar.Group collapsible defaultOpen={false}>
6410
- <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>
6411
- <Sidebar.GroupContent>
6412
- <Sidebar.Menu>
6413
- <Sidebar.MenuButton icon={ShieldCheckIcon}>
6414
- Security
6415
- </Sidebar.MenuButton>
6416
- <Sidebar.MenuButton icon={LockIcon}>
6417
- Zero Trust
6418
- </Sidebar.MenuButton>
6419
- </Sidebar.Menu>
6420
- </Sidebar.GroupContent>
6421
- </Sidebar.Group>
6422
- </Sidebar.Content>
6423
- </Sidebar>
6424
- <DemoMain />
6425
- </Sidebar.Provider>
6426
- </DemoContainer>
6427
- ```
6428
-
6429
- ```tsx
6430
- <DemoContainer>
6431
- <Sidebar.Provider defaultOpen className="min-h-0! h-full">
6445
+ <Sidebar.Provider contained defaultOpen className="min-h-0! h-full">
6432
6446
  <Sidebar>
6433
6447
  <Sidebar.Header>
6434
6448
  <BrandLogo />
@@ -6457,7 +6471,7 @@ CollapsibleContent sub-component
6457
6471
  </Sidebar>
6458
6472
  <DemoMain>
6459
6473
  <ToggleButton />
6460
- <p className="text-sm">
6474
+ <p>
6461
6475
  Click the button or the sidebar trigger to toggle
6462
6476
  </p>
6463
6477
  </DemoMain>
@@ -6467,97 +6481,7 @@ CollapsibleContent sub-component
6467
6481
 
6468
6482
  ```tsx
6469
6483
  <DemoContainer>
6470
- <Sidebar.Provider defaultOpen className="min-h-0! h-full">
6471
- <Sidebar>
6472
- <Sidebar.Header>
6473
- <AccountSwitcher />
6474
- </Sidebar.Header>
6475
-
6476
- <Sidebar.Content>
6477
- <div className="px-1 pb-2">
6478
- <Sidebar.Input placeholder="Quick search..." shortcut="⌘K" />
6479
- </div>
6480
-
6481
- <Sidebar.Group>
6482
- <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
6483
- <Sidebar.Menu>
6484
- <Sidebar.MenuButton icon={HouseIcon} active>
6485
- Home
6486
- </Sidebar.MenuButton>
6487
- <Sidebar.MenuButton icon={ChartBarIcon}>
6488
- Analytics & Logs
6489
- </Sidebar.MenuButton>
6490
- <Sidebar.MenuButton icon={GlobeIcon}>
6491
- Domains
6492
- </Sidebar.MenuButton>
6493
- </Sidebar.Menu>
6494
- </Sidebar.Group>
6495
-
6496
- <Sidebar.Separator />
6497
-
6498
- <Sidebar.Group>
6499
- <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
6500
- <Sidebar.Menu>
6501
- <Sidebar.MenuItem>
6502
- <Sidebar.Collapsible defaultOpen>
6503
- <Sidebar.CollapsibleTrigger
6504
- render={
6505
- <Sidebar.MenuButton icon={CodeIcon}>
6506
- Compute
6507
- <Sidebar.MenuChevron />
6508
- </Sidebar.MenuButton>
6509
- }
6510
- />
6511
- <Sidebar.CollapsibleContent>
6512
- <Sidebar.MenuSub>
6513
- <Sidebar.MenuSubButton>
6514
- Workers & Pages
6515
- </Sidebar.MenuSubButton>
6516
- <Sidebar.MenuSubButton>
6517
- Durable Objects
6518
- </Sidebar.MenuSubButton>
6519
- <Sidebar.MenuSubButton>
6520
- Containers
6521
- <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>
6522
- </Sidebar.MenuSubButton>
6523
- </Sidebar.MenuSub>
6524
- </Sidebar.CollapsibleContent>
6525
- </Sidebar.Collapsible>
6526
- </Sidebar.MenuItem>
6527
- <Sidebar.MenuButton icon={DatabaseIcon}>
6528
- Storage
6529
- </Sidebar.MenuButton>
6530
- </Sidebar.Menu>
6531
- </Sidebar.Group>
6532
-
6533
- <Sidebar.Group>
6534
- <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>
6535
- <Sidebar.Menu>
6536
- <Sidebar.MenuButton icon={ShieldCheckIcon}>
6537
- Security
6538
- </Sidebar.MenuButton>
6539
- <Sidebar.MenuButton icon={LockIcon}>
6540
- Zero Trust
6541
- <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>
6542
- </Sidebar.MenuButton>
6543
- </Sidebar.Menu>
6544
- </Sidebar.Group>
6545
- </Sidebar.Content>
6546
-
6547
- <Sidebar.Footer>
6548
- <Sidebar.MenuButton icon={GearIcon}>
6549
- Manage account
6550
- </Sidebar.MenuButton>
6551
- </Sidebar.Footer>
6552
- </Sidebar>
6553
- <DemoMain />
6554
- </Sidebar.Provider>
6555
- </DemoContainer>
6556
- ```
6557
-
6558
- ```tsx
6559
- <DemoContainer>
6560
- <Sidebar.Provider
6484
+ <Sidebar.Provider contained
6561
6485
  defaultOpen
6562
6486
  resizable
6563
6487
  defaultWidth={240}
@@ -6571,7 +6495,6 @@ CollapsibleContent sub-component
6571
6495
  </Sidebar.Header>
6572
6496
  <Sidebar.Content>
6573
6497
  <Sidebar.Group>
6574
- <Sidebar.GroupLabel>Overview</Sidebar.GroupLabel>
6575
6498
  <Sidebar.Menu>
6576
6499
  <Sidebar.MenuButton icon={HouseIcon} active>
6577
6500
  Home
@@ -6591,7 +6514,7 @@ CollapsibleContent sub-component
6591
6514
  <Sidebar.ResizeHandle />
6592
6515
  </Sidebar>
6593
6516
  <DemoMain>
6594
- <p className="text-sm">Drag the sidebar edge to resize</p>
6517
+ <p>Drag the sidebar edge to resize</p>
6595
6518
  </DemoMain>
6596
6519
  </Sidebar.Provider>
6597
6520
  </DemoContainer>
@@ -6599,7 +6522,7 @@ CollapsibleContent sub-component
6599
6522
 
6600
6523
  ```tsx
6601
6524
  <DemoContainer>
6602
- <Sidebar.Provider defaultOpen side="right" className="min-h-0! h-full">
6525
+ <Sidebar.Provider contained defaultOpen side="right" className="min-h-0! h-full">
6603
6526
  <DemoMain />
6604
6527
  <Sidebar>
6605
6528
  <Sidebar.Content>
@@ -6621,6 +6544,246 @@ CollapsibleContent sub-component
6621
6544
  </DemoContainer>
6622
6545
  ```
6623
6546
 
6547
+ ```tsx
6548
+ <DemoContainer>
6549
+ <Sidebar.Provider contained defaultOpen className="min-h-0! h-full">
6550
+ <Sidebar>
6551
+ <Sidebar.Header>
6552
+ <button
6553
+ type="button"
6554
+ onClick={() =>
6555
+ setSurface((s) => (s === "account" ? "zone" : "account"))
6556
+ }
6557
+ className="flex w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm font-medium text-kumo-default hover:bg-kumo-tint transition-colors"
6558
+ >
6559
+ <ArrowsLeftRightIcon className="size-4 shrink-0 text-kumo-brand" />
6560
+ <span className="flex-1 text-left font-semibold text-kumo-strong">
6561
+ {surface === "account" ? "Account Nav" : "Zone Nav"}
6562
+ </span>
6563
+ </button>
6564
+ </Sidebar.Header>
6565
+
6566
+ <Sidebar.SlidingViews
6567
+ activeKey={surface}
6568
+ direction={surface === "zone" ? "left" : "right"}
6569
+ >
6570
+ <Sidebar.SlidingView value="account">
6571
+ <Sidebar.Content>
6572
+ <Sidebar.Group>
6573
+ <Sidebar.GroupLabel>Account</Sidebar.GroupLabel>
6574
+ <Sidebar.Menu>
6575
+ <Sidebar.MenuButton icon={HouseIcon} active>
6576
+ Home
6577
+ </Sidebar.MenuButton>
6578
+ <Sidebar.MenuButton icon={UserIcon}>
6579
+ Members
6580
+ </Sidebar.MenuButton>
6581
+ <Sidebar.MenuButton icon={ChartBarIcon}>
6582
+ Analytics
6583
+ </Sidebar.MenuButton>
6584
+ <Sidebar.MenuButton icon={GearIcon}>
6585
+ Settings
6586
+ </Sidebar.MenuButton>
6587
+ </Sidebar.Menu>
6588
+ </Sidebar.Group>
6589
+ </Sidebar.Content>
6590
+ </Sidebar.SlidingView>
6591
+
6592
+ <Sidebar.SlidingView value="zone">
6593
+ <Sidebar.Content>
6594
+ <Sidebar.Group>
6595
+ <Sidebar.GroupLabel>Zone</Sidebar.GroupLabel>
6596
+ <Sidebar.Menu>
6597
+ <Sidebar.MenuButton icon={GlobeIcon} active>
6598
+ Overview
6599
+ </Sidebar.MenuButton>
6600
+ <Sidebar.MenuButton icon={ShieldCheckIcon}>
6601
+ Security
6602
+ </Sidebar.MenuButton>
6603
+ <Sidebar.MenuButton icon={LockIcon}>
6604
+ SSL/TLS
6605
+ </Sidebar.MenuButton>
6606
+ <Sidebar.MenuButton icon={DatabaseIcon}>
6607
+ Caching
6608
+ </Sidebar.MenuButton>
6609
+ </Sidebar.Menu>
6610
+ </Sidebar.Group>
6611
+ </Sidebar.Content>
6612
+ </Sidebar.SlidingView>
6613
+ </Sidebar.SlidingViews>
6614
+ </Sidebar>
6615
+ <DemoMain>
6616
+ <div className="flex flex-col items-center gap-2">
6617
+ <p className="font-medium text-kumo-default">
6618
+ Active: {surface === "account" ? "Account" : "Zone"} surface
6619
+ </p>
6620
+ <p>
6621
+ Click the header button to slide between views
6622
+ </p>
6623
+ </div>
6624
+ </DemoMain>
6625
+ </Sidebar.Provider>
6626
+ </DemoContainer>
6627
+ ```
6628
+
6629
+ ```tsx
6630
+ <DemoContainer>
6631
+ <Sidebar.Provider contained defaultOpen peekable className="min-h-0! h-full">
6632
+ <Sidebar>
6633
+ <Sidebar.Header>
6634
+ <AccountSwitcher />
6635
+ </Sidebar.Header>
6636
+ <Sidebar.SlidingViews
6637
+ activeKey={surface}
6638
+ direction={surface === "domain" ? "left" : "right"}
6639
+ >
6640
+ <Sidebar.SlidingView value="account">
6641
+ <Sidebar.Content>
6642
+ <Sidebar.Group>
6643
+ <Sidebar.Menu>
6644
+ <Sidebar.MenuButton
6645
+ icon={MagnifyingGlassIcon}
6646
+ tooltip="Search"
6647
+ className="ring ring-kumo-line group-data-[state=collapsed]/sidebar:ring-transparent"
6648
+ >
6649
+ Quick search&hellip;
6650
+ </Sidebar.MenuButton>
6651
+ </Sidebar.Menu>
6652
+ </Sidebar.Group>
6653
+ <Sidebar.Group>
6654
+ <Sidebar.Menu>
6655
+ <Sidebar.MenuButton icon={HouseIcon} active>
6656
+ Home
6657
+ </Sidebar.MenuButton>
6658
+ <Sidebar.MenuButton icon={ChartBarIcon}>
6659
+ Analytics & Logs
6660
+ </Sidebar.MenuButton>
6661
+ <Sidebar.MenuButton
6662
+ icon={GlobeIcon}
6663
+ onClick={() => setSurface("domain")}
6664
+ >
6665
+ Domains
6666
+ </Sidebar.MenuButton>
6667
+ </Sidebar.Menu>
6668
+ </Sidebar.Group>
6669
+
6670
+ <Sidebar.Group>
6671
+ <Sidebar.GroupLabel>Build</Sidebar.GroupLabel>
6672
+ <Sidebar.Menu>
6673
+ <Sidebar.MenuItem>
6674
+ <Sidebar.Collapsible defaultOpen>
6675
+ <Sidebar.CollapsibleTrigger
6676
+ render={
6677
+ <Sidebar.MenuButton icon={CodeIcon}>
6678
+ Compute
6679
+ <Sidebar.MenuChevron />
6680
+ </Sidebar.MenuButton>
6681
+ }
6682
+ />
6683
+ <Sidebar.CollapsibleContent>
6684
+ <Sidebar.MenuSub>
6685
+ <Sidebar.MenuSubItem>
6686
+ <Sidebar.Collapsible>
6687
+ <Sidebar.CollapsibleTrigger
6688
+ render={
6689
+ <Sidebar.MenuSubButton>
6690
+ Workers & Pages
6691
+ <Sidebar.MenuChevron />
6692
+ </Sidebar.MenuSubButton>
6693
+ }
6694
+ />
6695
+ <Sidebar.CollapsibleContent>
6696
+ <Sidebar.MenuSub>
6697
+ <Sidebar.MenuSubButton>
6698
+ Overview
6699
+ </Sidebar.MenuSubButton>
6700
+ <Sidebar.MenuSubButton>
6701
+ Workers
6702
+ </Sidebar.MenuSubButton>
6703
+ <Sidebar.MenuSubButton>
6704
+ Pages
6705
+ </Sidebar.MenuSubButton>
6706
+ </Sidebar.MenuSub>
6707
+ </Sidebar.CollapsibleContent>
6708
+ </Sidebar.Collapsible>
6709
+ </Sidebar.MenuSubItem>
6710
+ <Sidebar.MenuSubButton>
6711
+ Durable Objects
6712
+ </Sidebar.MenuSubButton>
6713
+ <Sidebar.MenuSubButton>
6714
+ Containers
6715
+ <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>
6716
+ </Sidebar.MenuSubButton>
6717
+ </Sidebar.MenuSub>
6718
+ </Sidebar.CollapsibleContent>
6719
+ </Sidebar.Collapsible>
6720
+ </Sidebar.MenuItem>
6721
+ <Sidebar.MenuButton icon={DatabaseIcon}>
6722
+ Storage
6723
+ </Sidebar.MenuButton>
6724
+ </Sidebar.Menu>
6725
+ </Sidebar.Group>
6726
+
6727
+ <Sidebar.Group>
6728
+ <Sidebar.GroupLabel>Protect & Connect</Sidebar.GroupLabel>
6729
+ <Sidebar.Menu>
6730
+ <Sidebar.MenuButton icon={ShieldCheckIcon}>
6731
+ Security
6732
+ </Sidebar.MenuButton>
6733
+ <Sidebar.MenuButton icon={LockIcon}>
6734
+ Zero Trust
6735
+ <Sidebar.MenuBadge>Beta</Sidebar.MenuBadge>
6736
+ </Sidebar.MenuButton>
6737
+ </Sidebar.Menu>
6738
+ </Sidebar.Group>
6739
+ </Sidebar.Content>
6740
+ </Sidebar.SlidingView>
6741
+
6742
+ <Sidebar.SlidingView value="domain">
6743
+ <Sidebar.Content>
6744
+ <Sidebar.Group>
6745
+ <Sidebar.Menu>
6746
+ <Sidebar.MenuButton
6747
+ icon={ArrowLeftIcon}
6748
+ onClick={() => setSurface("account")}
6749
+ >
6750
+ Back
6751
+ </Sidebar.MenuButton>
6752
+ </Sidebar.Menu>
6753
+ </Sidebar.Group>
6754
+ <Sidebar.Group>
6755
+ <Sidebar.GroupLabel>example.com</Sidebar.GroupLabel>
6756
+ <Sidebar.Menu>
6757
+ <Sidebar.MenuButton icon={GlobeIcon} active>
6758
+ Overview
6759
+ </Sidebar.MenuButton>
6760
+ <Sidebar.MenuButton icon={ShieldCheckIcon}>
6761
+ Security
6762
+ </Sidebar.MenuButton>
6763
+ <Sidebar.MenuButton icon={LockIcon}>
6764
+ SSL/TLS
6765
+ </Sidebar.MenuButton>
6766
+ <Sidebar.MenuButton icon={ChartBarIcon}>
6767
+ Analytics
6768
+ </Sidebar.MenuButton>
6769
+ <Sidebar.MenuButton icon={DatabaseIcon}>
6770
+ Caching
6771
+ </Sidebar.MenuButton>
6772
+ </Sidebar.Menu>
6773
+ </Sidebar.Group>
6774
+ </Sidebar.Content>
6775
+ </Sidebar.SlidingView>
6776
+ </Sidebar.SlidingViews>
6777
+
6778
+ <Sidebar.Footer>
6779
+ <Sidebar.Trigger />
6780
+ </Sidebar.Footer>
6781
+ </Sidebar>
6782
+ <DemoMain />
6783
+ </Sidebar.Provider>
6784
+ </DemoContainer>
6785
+ ```
6786
+
6624
6787
 
6625
6788
  ---
6626
6789
 
@@ -7796,7 +7959,7 @@ Toasty — toast notification provider and viewport. Renders a `Toast.Provider`
7796
7959
 
7797
7960
  **Colors (kumo tokens used):**
7798
7961
 
7799
- `bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-control`, `bg-kumo-danger`, `bg-kumo-fill-hover`, `bg-kumo-info`, `bg-kumo-success`, `bg-kumo-warning`, `border-kumo-fill`, `ring-kumo-danger`, `ring-kumo-hairline`, `ring-kumo-info`, `ring-kumo-line`, `ring-kumo-success`, `ring-kumo-warning`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-subtle`, `text-kumo-success`, `text-kumo-warning`
7962
+ `bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-control`, `bg-kumo-danger-tint`, `bg-kumo-fill-hover`, `bg-kumo-info-tint`, `bg-kumo-success-tint`, `bg-kumo-warning-tint`, `border-kumo-fill`, `ring-kumo-danger`, `ring-kumo-hairline`, `ring-kumo-info`, `ring-kumo-line`, `ring-kumo-success`, `ring-kumo-warning`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-subtle`, `text-kumo-success`, `text-kumo-warning`
7800
7963
 
7801
7964
  **Styling:**
7802
7965
 
@@ -7907,6 +8070,34 @@ Usage:
7907
8070
  </TooltipProvider>
7908
8071
  ```
7909
8072
 
8073
+ ```tsx
8074
+ <TooltipProvider>
8075
+ <div className="flex w-full justify-between">
8076
+ <Tooltip
8077
+ content={longContent}
8078
+ side="bottom"
8079
+ render={<Button variant="secondary" />}
8080
+ >
8081
+ Near left edge
8082
+ </Tooltip>
8083
+ <Tooltip
8084
+ content={longContent}
8085
+ side="bottom"
8086
+ render={<Button variant="secondary" />}
8087
+ >
8088
+ Centered
8089
+ </Tooltip>
8090
+ <Tooltip
8091
+ content={longContent}
8092
+ side="bottom"
8093
+ render={<Button variant="secondary" />}
8094
+ >
8095
+ Near right edge
8096
+ </Tooltip>
8097
+ </div>
8098
+ </TooltipProvider>
8099
+ ```
8100
+
7910
8101
  ```tsx
7911
8102
  <TooltipProvider>
7912
8103
  <div className="flex gap-4">