@cloudflare/kumo 1.16.0 → 1.18.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 (286) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/ai/USAGE.md +38 -30
  3. package/ai/component-registry.json +237 -93
  4. package/ai/component-registry.md +421 -45
  5. package/ai/schemas.ts +15 -5
  6. package/dist/.build-complete +1 -1
  7. package/dist/ai/schemas.d.ts +105 -49
  8. package/dist/ai/schemas.d.ts.map +1 -1
  9. package/dist/ai/schemas.js +187 -174
  10. package/dist/ai/schemas.js.map +1 -1
  11. package/dist/chunks/{Legend-bov5dqf08wemc2qj.js → Legend-o0ntojbaplmszwk0.js} +4 -2
  12. package/dist/chunks/Legend-o0ntojbaplmszwk0.js.map +1 -0
  13. package/dist/chunks/badge-dan90i0rzy4pwa1j.js +102 -0
  14. package/dist/chunks/badge-dan90i0rzy4pwa1j.js.map +1 -0
  15. package/dist/chunks/banner-eiwcnk7ts21s3bnb.js +79 -0
  16. package/dist/chunks/banner-eiwcnk7ts21s3bnb.js.map +1 -0
  17. package/dist/chunks/{breadcrumbs-m79gm4gjwbfajpna.js → breadcrumbs-k39s28qx05vbxxth.js} +3 -3
  18. package/dist/chunks/{breadcrumbs-m79gm4gjwbfajpna.js.map → breadcrumbs-k39s28qx05vbxxth.js.map} +1 -1
  19. package/dist/chunks/{button-j0hi0afn33w9lxgi.js → button-cdxnqcgzwko8ooha.js} +55 -53
  20. package/dist/chunks/button-cdxnqcgzwko8ooha.js.map +1 -0
  21. package/dist/chunks/{checkbox-lawmt1894wr6rpgi.js → checkbox-kt1uojk2f9e0d0h1.js} +46 -55
  22. package/dist/chunks/checkbox-kt1uojk2f9e0d0h1.js.map +1 -0
  23. package/dist/chunks/{clipboard-text-ohx8kkpxisz382rj.js → clipboard-text-vcbvmtne4zjk4b18.js} +55 -54
  24. package/dist/chunks/clipboard-text-vcbvmtne4zjk4b18.js.map +1 -0
  25. package/dist/chunks/{code-liq1g6f5lhee305d.js → code-cz0w1y5z4h29a9eg.js} +18 -18
  26. package/dist/chunks/code-cz0w1y5z4h29a9eg.js.map +1 -0
  27. package/dist/chunks/{combobox-ft0u7rfaxawk0r0c.js → combobox-he2hd9e2ruknq5mp.js} +97 -82
  28. package/dist/chunks/combobox-he2hd9e2ruknq5mp.js.map +1 -0
  29. package/dist/chunks/{command-palette-b31nq4wk7o7gx4sa.js → command-palette-jc1w07jwakxvj23a.js} +159 -155
  30. package/dist/chunks/command-palette-jc1w07jwakxvj23a.js.map +1 -0
  31. package/dist/chunks/{dialog-l5tmwxrzp9g83jmw.js → dialog-oqh8l3l3zutpibxx.js} +22 -20
  32. package/dist/chunks/dialog-oqh8l3l3zutpibxx.js.map +1 -0
  33. package/dist/chunks/{dropdown-icy3xatdwhzr4une.js → dropdown-ncwhcd912vmone8k.js} +96 -90
  34. package/dist/chunks/dropdown-ncwhcd912vmone8k.js.map +1 -0
  35. package/dist/chunks/{empty-hrwtammqp0b2nvtf.js → empty-cj898km1r8xwuw44.js} +2 -2
  36. package/dist/chunks/{empty-hrwtammqp0b2nvtf.js.map → empty-cj898km1r8xwuw44.js.map} +1 -1
  37. package/dist/chunks/{field-csje72m7j9403fj5.js → field-krp6z6vfbkrvufz2.js} +3 -3
  38. package/dist/chunks/{field-csje72m7j9403fj5.js.map → field-krp6z6vfbkrvufz2.js.map} +1 -1
  39. package/dist/chunks/input-area-no30c09udyjxshu5.js +78 -0
  40. package/dist/chunks/input-area-no30c09udyjxshu5.js.map +1 -0
  41. package/dist/chunks/{input-group-cjsy8kh4vf9312xl.js → input-group-lxdd09p60cf27pe1.js} +26 -26
  42. package/dist/chunks/input-group-lxdd09p60cf27pe1.js.map +1 -0
  43. package/dist/chunks/{input-c8jmidy7gdqfiky1.js → input-h48k3uagzrgb98au.js} +40 -36
  44. package/dist/chunks/input-h48k3uagzrgb98au.js.map +1 -0
  45. package/dist/chunks/{label-i46xnnzdh9bsxk6a.js → label-latndvb1ngem7we8.js} +3 -3
  46. package/dist/chunks/{label-i46xnnzdh9bsxk6a.js.map → label-latndvb1ngem7we8.js.map} +1 -1
  47. package/dist/chunks/{layer-card-mu2w82x6ko1nhhtr.js → layer-card-l5yjvrxry1dhte57.js} +8 -8
  48. package/dist/chunks/{layer-card-mu2w82x6ko1nhhtr.js.map → layer-card-l5yjvrxry1dhte57.js.map} +1 -1
  49. package/dist/chunks/{link-o7yfj4kwgl19fklp.js → link-hn5ejal7nhh0o0b4.js} +2 -2
  50. package/dist/chunks/{link-o7yfj4kwgl19fklp.js.map → link-hn5ejal7nhh0o0b4.js.map} +1 -1
  51. package/dist/chunks/{loader-m5wfmqwgucrr4i5v.js → loader-hr2w7cpqeev3p3vl.js} +9 -6
  52. package/dist/chunks/loader-hr2w7cpqeev3p3vl.js.map +1 -0
  53. package/dist/chunks/{menubar-g1wqqjuyyfvsim83.js → menubar-f1pilzooe5mue7c4.js} +20 -20
  54. package/dist/chunks/menubar-f1pilzooe5mue7c4.js.map +1 -0
  55. package/dist/chunks/{meter-cqkrg5axjenbsuue.js → meter-gfa1hz9fhjnvx784.js} +2 -2
  56. package/dist/chunks/{meter-cqkrg5axjenbsuue.js.map → meter-gfa1hz9fhjnvx784.js.map} +1 -1
  57. package/dist/chunks/pagination-cu5lm6p5dxuycta4.js +243 -0
  58. package/dist/chunks/pagination-cu5lm6p5dxuycta4.js.map +1 -0
  59. package/dist/chunks/{popover-jurf834u2uywluux.js → popover-h300w4vit0s2ayej.js} +31 -28
  60. package/dist/chunks/popover-h300w4vit0s2ayej.js.map +1 -0
  61. package/dist/chunks/portal-provider-hwmkdmkpvct0cb76.js +18 -0
  62. package/dist/chunks/portal-provider-hwmkdmkpvct0cb76.js.map +1 -0
  63. package/dist/chunks/{radio-l9dzm6sohcvvrsdc.js → radio-jouttv89lbvhs55r.js} +47 -50
  64. package/dist/chunks/radio-jouttv89lbvhs55r.js.map +1 -0
  65. package/dist/chunks/select-kva5ru5f673kah1m.js +179 -0
  66. package/dist/chunks/select-kva5ru5f673kah1m.js.map +1 -0
  67. package/dist/chunks/{sensitive-input-lvtccf3iqc06lj7b.js → sensitive-input-hd4tpqkzifad1yca.js} +90 -84
  68. package/dist/chunks/sensitive-input-hd4tpqkzifad1yca.js.map +1 -0
  69. package/dist/chunks/{sidebar-l6rk9o5qf8k5vth1.js → sidebar-hljy3ssm8itc0ucx.js} +5 -5
  70. package/dist/chunks/sidebar-hljy3ssm8itc0ucx.js.map +1 -0
  71. package/dist/chunks/skeleton-line-epxenksfesr2fkcv.js +33 -0
  72. package/dist/chunks/skeleton-line-epxenksfesr2fkcv.js.map +1 -0
  73. package/dist/chunks/surface-cilvbyhmyujz1bee.js +36 -0
  74. package/dist/chunks/surface-cilvbyhmyujz1bee.js.map +1 -0
  75. package/dist/chunks/switch-ihaydbzem62bey4p.js +243 -0
  76. package/dist/chunks/switch-ihaydbzem62bey4p.js.map +1 -0
  77. package/dist/chunks/table-inweecadl3her7pd.js +183 -0
  78. package/dist/chunks/table-inweecadl3her7pd.js.map +1 -0
  79. package/dist/chunks/tabs-e7eh7l3mpk3xgmwq.js +92 -0
  80. package/dist/chunks/{tabs-n0t7iro7wr0pzgk2.js.map → tabs-e7eh7l3mpk3xgmwq.js.map} +1 -1
  81. package/dist/chunks/{text-gzt92mlji1lug13d.js → text-nmyi1rkwdj37f30f.js} +24 -22
  82. package/dist/chunks/text-nmyi1rkwdj37f30f.js.map +1 -0
  83. package/dist/chunks/{toast-r9ajsces7xp8l85w.js → toast-bpz6iaq54u9jmuu8.js} +62 -60
  84. package/dist/chunks/toast-bpz6iaq54u9jmuu8.js.map +1 -0
  85. package/dist/chunks/toml-nczb2z9n0o23o3ci.js +8 -0
  86. package/dist/chunks/toml-nczb2z9n0o23o3ci.js.map +1 -0
  87. package/dist/chunks/{tooltip-hnc71tg4gz2gpcvc.js → tooltip-belkznz8t8333h5f.js} +28 -21
  88. package/dist/chunks/tooltip-belkznz8t8333h5f.js.map +1 -0
  89. package/dist/chunks/{vendor-base-ui-ccr5l0ynrievzzv3.js → vendor-base-ui-k7bzesq81ie36nya.js} +55 -51
  90. package/dist/chunks/{vendor-base-ui-ccr5l0ynrievzzv3.js.map → vendor-base-ui-k7bzesq81ie36nya.js.map} +1 -1
  91. package/dist/code/server.js +10 -9
  92. package/dist/code/server.js.map +1 -1
  93. package/dist/code.js +3 -2
  94. package/dist/code.js.map +1 -1
  95. package/dist/components/badge.js +1 -1
  96. package/dist/components/banner.js +1 -1
  97. package/dist/components/breadcrumbs.js +1 -1
  98. package/dist/components/button.js +1 -1
  99. package/dist/components/chart.js +1 -1
  100. package/dist/components/checkbox.js +1 -1
  101. package/dist/components/clipboard-text.js +1 -1
  102. package/dist/components/code.js +1 -1
  103. package/dist/components/combobox.js +1 -1
  104. package/dist/components/command-palette.js +1 -1
  105. package/dist/components/dialog.js +1 -1
  106. package/dist/components/dropdown.js +1 -1
  107. package/dist/components/empty.js +1 -1
  108. package/dist/components/field.js +1 -1
  109. package/dist/components/flow.js +5 -4
  110. package/dist/components/flow.js.map +1 -1
  111. package/dist/components/input.js +3 -3
  112. package/dist/components/label.js +1 -1
  113. package/dist/components/layer-card.js +1 -1
  114. package/dist/components/link.js +1 -1
  115. package/dist/components/loader.js +2 -2
  116. package/dist/components/menubar.js +1 -1
  117. package/dist/components/meter.js +1 -1
  118. package/dist/components/pagination.js +1 -1
  119. package/dist/components/popover.js +1 -1
  120. package/dist/components/radio.js +1 -1
  121. package/dist/components/select.js +1 -1
  122. package/dist/components/sensitive-input.js +1 -1
  123. package/dist/components/sidebar.js +1 -1
  124. package/dist/components/surface.js +1 -1
  125. package/dist/components/switch.js +1 -1
  126. package/dist/components/table.js +1 -1
  127. package/dist/components/tabs.js +1 -1
  128. package/dist/components/text.js +1 -1
  129. package/dist/components/toast.js +2 -2
  130. package/dist/components/tooltip.js +1 -1
  131. package/dist/index.js +76 -74
  132. package/dist/index.js.map +1 -1
  133. package/dist/primitives/accordion.js +1 -1
  134. package/dist/primitives/alert-dialog.js +1 -1
  135. package/dist/primitives/autocomplete.js +1 -1
  136. package/dist/primitives/avatar.js +1 -1
  137. package/dist/primitives/button.js +1 -1
  138. package/dist/primitives/checkbox-group.js +1 -1
  139. package/dist/primitives/checkbox.js +1 -1
  140. package/dist/primitives/collapsible.js +1 -1
  141. package/dist/primitives/combobox.js +1 -1
  142. package/dist/primitives/context-menu.js +1 -1
  143. package/dist/primitives/csp-provider.js +1 -1
  144. package/dist/primitives/dialog.js +1 -1
  145. package/dist/primitives/direction-provider.js +1 -1
  146. package/dist/primitives/drawer.js +1 -1
  147. package/dist/primitives/field.js +1 -1
  148. package/dist/primitives/fieldset.js +1 -1
  149. package/dist/primitives/form.js +1 -1
  150. package/dist/primitives/input.js +1 -1
  151. package/dist/primitives/menu.js +1 -1
  152. package/dist/primitives/menubar.js +1 -1
  153. package/dist/primitives/meter.js +1 -1
  154. package/dist/primitives/navigation-menu.js +1 -1
  155. package/dist/primitives/number-field.js +1 -1
  156. package/dist/primitives/popover.js +1 -1
  157. package/dist/primitives/preview-card.js +1 -1
  158. package/dist/primitives/progress.js +1 -1
  159. package/dist/primitives/radio-group.js +1 -1
  160. package/dist/primitives/radio.js +1 -1
  161. package/dist/primitives/scroll-area.js +1 -1
  162. package/dist/primitives/select.js +1 -1
  163. package/dist/primitives/separator.js +1 -1
  164. package/dist/primitives/slider.js +1 -1
  165. package/dist/primitives/switch.js +1 -1
  166. package/dist/primitives/tabs.js +1 -1
  167. package/dist/primitives/toast.js +1 -1
  168. package/dist/primitives/toggle-group.js +1 -1
  169. package/dist/primitives/toggle.js +1 -1
  170. package/dist/primitives/toolbar.js +1 -1
  171. package/dist/primitives/tooltip.js +1 -1
  172. package/dist/primitives.js +1 -1
  173. package/dist/scripts/theme-generator/config.d.ts.map +1 -1
  174. package/dist/scripts/theme-generator/config.js +226 -43
  175. package/dist/scripts/theme-generator/config.js.map +1 -1
  176. package/dist/src/code/provider.d.ts.map +1 -1
  177. package/dist/src/code/server.d.ts.map +1 -1
  178. package/dist/src/code/types.d.ts +1 -1
  179. package/dist/src/code/types.d.ts.map +1 -1
  180. package/dist/src/components/badge/badge.d.ts +76 -21
  181. package/dist/src/components/badge/badge.d.ts.map +1 -1
  182. package/dist/src/components/banner/banner.d.ts +5 -3
  183. package/dist/src/components/banner/banner.d.ts.map +1 -1
  184. package/dist/src/components/button/button.d.ts +4 -2
  185. package/dist/src/components/button/button.d.ts.map +1 -1
  186. package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
  187. package/dist/src/components/checkbox/checkbox.d.ts +1 -1
  188. package/dist/src/components/checkbox/checkbox.d.ts.map +1 -1
  189. package/dist/src/components/clipboard-text/clipboard-text.d.ts +2 -0
  190. package/dist/src/components/clipboard-text/clipboard-text.d.ts.map +1 -1
  191. package/dist/src/components/code/code.d.ts.map +1 -1
  192. package/dist/src/components/combobox/combobox.d.ts +8 -1
  193. package/dist/src/components/combobox/combobox.d.ts.map +1 -1
  194. package/dist/src/components/command-palette/command-palette.d.ts +9 -2
  195. package/dist/src/components/command-palette/command-palette.d.ts.map +1 -1
  196. package/dist/src/components/command-palette/types.d.ts +7 -0
  197. package/dist/src/components/command-palette/types.d.ts.map +1 -1
  198. package/dist/src/components/dialog/dialog.d.ts +8 -1
  199. package/dist/src/components/dialog/dialog.d.ts.map +1 -1
  200. package/dist/src/components/dropdown/dropdown.d.ts +17 -2
  201. package/dist/src/components/dropdown/dropdown.d.ts.map +1 -1
  202. package/dist/src/components/flow/diagram.d.ts.map +1 -1
  203. package/dist/src/components/input/input-area.d.ts.map +1 -1
  204. package/dist/src/components/input/input.d.ts +1 -2
  205. package/dist/src/components/input/input.d.ts.map +1 -1
  206. package/dist/src/components/loader/loader.d.ts +7 -1
  207. package/dist/src/components/loader/loader.d.ts.map +1 -1
  208. package/dist/src/components/loader/skeleton-line.d.ts +2 -1
  209. package/dist/src/components/loader/skeleton-line.d.ts.map +1 -1
  210. package/dist/src/components/pagination/pagination.d.ts +11 -1
  211. package/dist/src/components/pagination/pagination.d.ts.map +1 -1
  212. package/dist/src/components/popover/popover.d.ts +8 -1
  213. package/dist/src/components/popover/popover.d.ts.map +1 -1
  214. package/dist/src/components/radio/radio.d.ts +1 -1
  215. package/dist/src/components/radio/radio.d.ts.map +1 -1
  216. package/dist/src/components/select/select.d.ts +74 -3
  217. package/dist/src/components/select/select.d.ts.map +1 -1
  218. package/dist/src/components/sensitive-input/sensitive-input.d.ts +1 -1
  219. package/dist/src/components/sensitive-input/sensitive-input.d.ts.map +1 -1
  220. package/dist/src/components/surface/surface.d.ts +23 -23
  221. package/dist/src/components/surface/surface.d.ts.map +1 -1
  222. package/dist/src/components/switch/switch.d.ts.map +1 -1
  223. package/dist/src/components/table/table.d.ts +34 -2
  224. package/dist/src/components/table/table.d.ts.map +1 -1
  225. package/dist/src/components/tabs/tabs.d.ts.map +1 -1
  226. package/dist/src/components/text/text.d.ts +5 -0
  227. package/dist/src/components/text/text.d.ts.map +1 -1
  228. package/dist/src/components/toast/toast.d.ts +16 -9
  229. package/dist/src/components/toast/toast.d.ts.map +1 -1
  230. package/dist/src/components/tooltip/tooltip.d.ts +21 -6
  231. package/dist/src/components/tooltip/tooltip.d.ts.map +1 -1
  232. package/dist/src/index.d.ts +1 -0
  233. package/dist/src/index.d.ts.map +1 -1
  234. package/dist/src/utils/index.d.ts +1 -0
  235. package/dist/src/utils/index.d.ts.map +1 -1
  236. package/dist/src/utils/portal-provider.d.ts +56 -0
  237. package/dist/src/utils/portal-provider.d.ts.map +1 -0
  238. package/dist/styles/kumo-binding.css +52 -46
  239. package/dist/styles/kumo-standalone.css +1 -1
  240. package/dist/styles/theme-fedramp.css +6 -6
  241. package/dist/styles/theme-kumo.css +183 -64
  242. package/dist/utils.js +8 -6
  243. package/dist/utils.js.map +1 -1
  244. package/package.json +2 -2
  245. package/scripts/component-registry/index.test.ts +4 -4
  246. package/scripts/component-registry/metadata.ts +3 -3
  247. package/scripts/theme-generator/config.ts +236 -43
  248. package/dist/chunks/Legend-bov5dqf08wemc2qj.js.map +0 -1
  249. package/dist/chunks/badge-mrshucy2530o70cq.js +0 -56
  250. package/dist/chunks/badge-mrshucy2530o70cq.js.map +0 -1
  251. package/dist/chunks/banner-vzdjbqsb6em7tmdk.js +0 -75
  252. package/dist/chunks/banner-vzdjbqsb6em7tmdk.js.map +0 -1
  253. package/dist/chunks/button-j0hi0afn33w9lxgi.js.map +0 -1
  254. package/dist/chunks/checkbox-lawmt1894wr6rpgi.js.map +0 -1
  255. package/dist/chunks/clipboard-text-ohx8kkpxisz382rj.js.map +0 -1
  256. package/dist/chunks/code-liq1g6f5lhee305d.js.map +0 -1
  257. package/dist/chunks/combobox-ft0u7rfaxawk0r0c.js.map +0 -1
  258. package/dist/chunks/command-palette-b31nq4wk7o7gx4sa.js.map +0 -1
  259. package/dist/chunks/dialog-l5tmwxrzp9g83jmw.js.map +0 -1
  260. package/dist/chunks/dropdown-icy3xatdwhzr4une.js.map +0 -1
  261. package/dist/chunks/input-area-jko15sbc6zeage3l.js +0 -74
  262. package/dist/chunks/input-area-jko15sbc6zeage3l.js.map +0 -1
  263. package/dist/chunks/input-c8jmidy7gdqfiky1.js.map +0 -1
  264. package/dist/chunks/input-group-cjsy8kh4vf9312xl.js.map +0 -1
  265. package/dist/chunks/loader-m5wfmqwgucrr4i5v.js.map +0 -1
  266. package/dist/chunks/menubar-g1wqqjuyyfvsim83.js.map +0 -1
  267. package/dist/chunks/pagination-e3dp8bd80s35f7sd.js +0 -224
  268. package/dist/chunks/pagination-e3dp8bd80s35f7sd.js.map +0 -1
  269. package/dist/chunks/popover-jurf834u2uywluux.js.map +0 -1
  270. package/dist/chunks/radio-l9dzm6sohcvvrsdc.js.map +0 -1
  271. package/dist/chunks/select-hnt87e3cfos48qql.js +0 -130
  272. package/dist/chunks/select-hnt87e3cfos48qql.js.map +0 -1
  273. package/dist/chunks/sensitive-input-lvtccf3iqc06lj7b.js.map +0 -1
  274. package/dist/chunks/sidebar-l6rk9o5qf8k5vth1.js.map +0 -1
  275. package/dist/chunks/skeleton-line-1j5exu6vv07mmhfb.js +0 -28
  276. package/dist/chunks/skeleton-line-1j5exu6vv07mmhfb.js.map +0 -1
  277. package/dist/chunks/surface-dhshylwccuaz91d1.js +0 -21
  278. package/dist/chunks/surface-dhshylwccuaz91d1.js.map +0 -1
  279. package/dist/chunks/switch-fukrbip86khvqjn7.js +0 -241
  280. package/dist/chunks/switch-fukrbip86khvqjn7.js.map +0 -1
  281. package/dist/chunks/table-orfgzwvxh8yr90dk.js +0 -155
  282. package/dist/chunks/table-orfgzwvxh8yr90dk.js.map +0 -1
  283. package/dist/chunks/tabs-n0t7iro7wr0pzgk2.js +0 -86
  284. package/dist/chunks/text-gzt92mlji1lug13d.js.map +0 -1
  285. package/dist/chunks/toast-r9ajsces7xp8l85w.js.map +0 -1
  286. package/dist/chunks/tooltip-hnc71tg4gz2gpcvc.js.map +0 -1
@@ -17,12 +17,23 @@ Small status label for categorizing or highlighting content.
17
17
  **Props:**
18
18
 
19
19
  - `variant`: enum [default: primary]
20
- - `"primary"`: Default high-emphasis badge for important labels
21
- - `"secondary"`: Subtle badge for secondary information
22
- - `"destructive"`: Error or danger state indicator
23
- - `"success"`: Success or positive state indicator
24
- - `"outline"`: Bordered badge with transparent background
20
+ - `"primary"`: Primary badge
21
+ - `"secondary"`: Secondary badge
22
+ - `"error"`: Error badge
23
+ - `"warning"`: Warning badge
24
+ - `"success"`: Success badge
25
+ - `"destructive"`: Deprecated. Use red instead.
26
+ - `"info"`: Info badge
25
27
  - `"beta"`: Indicates beta or experimental features
28
+ - `"outline"`: Bordered badge with transparent background
29
+ - `"red"`: Red badge
30
+ - `"green"`: Green badge
31
+ - `"neutral"`: Neutral badge
32
+ - `"orange"`: Orange badge
33
+ - `"purple"`: Purple badge
34
+ - `"teal"`: Teal badge
35
+ - `"teal-subtle"`: Subtle teal badge
36
+ - `"blue"`: Blue badge
26
37
  - `className`: string
27
38
  Additional CSS classes merged via `cn()`.
28
39
  - `children`: ReactNode
@@ -30,7 +41,7 @@ Small status label for categorizing or highlighting content.
30
41
 
31
42
  **Colors (kumo tokens used):**
32
43
 
33
- `bg-kumo-contrast`, `bg-kumo-danger`, `bg-kumo-fill`, `bg-kumo-success`, `border-kumo-brand`, `border-kumo-fill`, `text-kumo-default`, `text-kumo-inverse`, `text-kumo-link`
44
+ `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`
34
45
 
35
46
  **Examples:**
36
47
 
@@ -38,21 +49,31 @@ Small status label for categorizing or highlighting content.
38
49
  <div className="flex flex-wrap items-center gap-2">
39
50
  <Badge variant="primary">Primary</Badge>
40
51
  <Badge variant="secondary">Secondary</Badge>
41
- <Badge variant="destructive">Destructive</Badge>
52
+ <Badge variant="error">Error</Badge>
42
53
  <Badge variant="success">Success</Badge>
54
+ <Badge variant="warning">Warning</Badge>
55
+ <Badge variant="info">Info</Badge>
43
56
  <Badge variant="outline">Outline</Badge>
44
57
  <Badge variant="beta">Beta</Badge>
45
58
  </div>
46
59
  ```
47
60
 
48
61
  ```tsx
49
- <Badge variant="primary">Primary</Badge>
62
+ <div className="flex flex-wrap items-center gap-2">
63
+ <Badge variant="neutral">Neutral</Badge>
64
+ <Badge variant="red">Red</Badge>
65
+ <Badge variant="orange">Orange</Badge>
66
+ <Badge variant="green">Green</Badge>
67
+ <Badge variant="teal">Teal</Badge>
68
+ <Badge variant="blue">Blue</Badge>
69
+ <Badge variant="purple">Purple</Badge>
70
+ </div>
50
71
  ```
51
72
 
52
73
  ```tsx
53
74
  <p className="flex items-center gap-2">
54
75
  Workers
55
- <Badge variant="beta">Beta</Badge>
76
+ <Badge variant="secondary">New</Badge>
56
77
  </p>
57
78
  ```
58
79
 
@@ -77,6 +98,8 @@ Full-width message bar for informational, warning, or error notices. Supports st
77
98
  Primary heading text for the banner. Use for i18n string injection.
78
99
  - `description`: ReactNode
79
100
  Secondary description text displayed below the title. Use for i18n string injection.
101
+ - `action`: ReactNode
102
+ Action slot rendered at the trailing end of the banner (e.g. a CTA button or link). Only used in structured mode (with `title` or `description`).
80
103
  - `text`: string
81
104
  - `children`: ReactNode
82
105
  - `variant`: enum [default: default]
@@ -93,7 +116,7 @@ Full-width message bar for informational, warning, or error notices. Supports st
93
116
  **Examples:**
94
117
 
95
118
  ```tsx
96
- <div className="space-y-3">
119
+ <div className="w-full space-y-3">
97
120
  <Banner
98
121
  icon={<Info weight="fill" />}
99
122
  title="Update available"
@@ -150,6 +173,48 @@ Full-width message bar for informational, warning, or error notices. Supports st
150
173
  />
151
174
  ```
152
175
 
176
+ ```tsx
177
+ <div className="w-full space-y-3">
178
+ <Banner
179
+ icon={<Info weight="fill" />}
180
+ title="Update available"
181
+ description="A new version is ready to install."
182
+ action={<Button size="sm">Update now</Button>}
183
+ />
184
+ <Banner
185
+ icon={<Info weight="fill" />}
186
+ title="Update available"
187
+ description="A new version is ready to install."
188
+ action={
189
+ <Button
190
+ size="sm"
191
+ variant="ghost"
192
+ shape="square"
193
+ icon={X}
194
+ aria-label="Dismiss"
195
+ />
196
+ }
197
+ />
198
+ </div>
199
+ ```
200
+
201
+ ```tsx
202
+ <Banner
203
+ icon={<Warning weight="fill" />}
204
+ variant="alert"
205
+ title="Session expiring"
206
+ description="Your session will expire in 5 minutes."
207
+ action={
208
+ <>
209
+ <Button size="sm" variant="secondary">
210
+ Dismiss
211
+ </Button>
212
+ <Button size="sm">Extend session</Button>
213
+ </>
214
+ }
215
+ />
216
+ ```
217
+
153
218
  ```tsx
154
219
  <Banner icon={<Info />}>This is a simple banner using children.</Banner>
155
220
  ```
@@ -308,9 +373,9 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
308
373
  Icon from `@phosphor-icons/react` or a React element. Rendered before children.
309
374
  - `loading`: boolean
310
375
  Shows a loading spinner and disables interaction.
376
+ - `title`: string
311
377
  - `id`: string
312
378
  - `lang`: string
313
- - `title`: string
314
379
  - `disabled`: boolean
315
380
  - `name`: string
316
381
  - `type`: enum
@@ -318,7 +383,7 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
318
383
 
319
384
  **Colors (kumo tokens used):**
320
385
 
321
- `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `bg-kumo-tint`, `ring-kumo-line`, `ring-kumo-ring`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
386
+ `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `bg-kumo-tint`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
322
387
 
323
388
  **Examples:**
324
389
 
@@ -378,6 +443,21 @@ Primary action trigger. Supports multiple variants, sizes, shapes, icons, and lo
378
443
  </div>
379
444
  ```
380
445
 
446
+ ```tsx
447
+ <div className="flex flex-wrap items-center gap-3">
448
+ <Button variant="secondary" title="Create a new Worker">
449
+ Create Worker
450
+ </Button>
451
+ <Button
452
+ variant="secondary"
453
+ shape="square"
454
+ icon={PlusIcon}
455
+ aria-label="Add item"
456
+ title="Add item"
457
+ />
458
+ </div>
459
+ ```
460
+
381
461
 
382
462
  ---
383
463
 
@@ -399,8 +479,8 @@ Checkbox component
399
479
 
400
480
  **State Classes:**
401
481
  - `"default"`:
402
- - `focus`: `[&:focus-within>span]:ring-kumo-ring`
403
- - `hover`: `[&:hover>span]:ring-kumo-ring`
482
+ - `focus`: `[&:focus-within>span]:ring-kumo-hairline`
483
+ - `hover`: `[&:hover>span]:ring-kumo-hairline`
404
484
  - `label`: ReactNode
405
485
  Label content for the checkbox (enables built-in Field wrapper) - can be a string or any React node
406
486
  - `labelTooltip`: ReactNode
@@ -424,7 +504,7 @@ Checkbox component
424
504
 
425
505
  **Colors (kumo tokens used):**
426
506
 
427
- `bg-kumo-base`, `bg-kumo-contrast`, `border-kumo-line`, `ring-kumo-contrast`, `ring-kumo-danger`, `ring-kumo-line`, `ring-kumo-ring`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-inverse`, `text-kumo-subtle`
507
+ `bg-kumo-base`, `bg-kumo-contrast`, `ring-kumo-contrast`, `ring-kumo-danger`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-inverse`, `text-kumo-subtle`
428
508
 
429
509
  **Styling:**
430
510
 
@@ -435,8 +515,8 @@ Checkbox component
435
515
  - `checked`: `bg-kumo-contrast`, `text-kumo-inverse`
436
516
  - `indeterminate`: `bg-kumo-contrast`, `text-kumo-inverse`
437
517
  - `error`: `ring-kumo-danger`
438
- - `hover`: `ring-kumo-ring`
439
- - `focus`: `ring-kumo-ring`
518
+ - `hover`: `ring-kumo-hairline`
519
+ - `focus`: `ring-kumo-hairline`
440
520
  - `disabled`: `opacity-50`, `cursor-not-allowed`
441
521
  - **Icons:**
442
522
  - `ph-check` (checked) size 12
@@ -547,6 +627,8 @@ Read-only text field with a one-click copy-to-clipboard button.
547
627
  - `"lg"`: Large clipboard text for prominent display
548
628
  - `text`: string (required)
549
629
  The text to display and copy to clipboard.
630
+ - `textToCopy`: string
631
+ If provided, this text will be copied to clipboard instead of the `text` prop.
550
632
  - `className`: string
551
633
  Additional CSS classes merged via `cn()`.
552
634
  - `tooltip`: object
@@ -610,6 +692,13 @@ Read-only text field with a one-click copy-to-clipboard button.
610
692
  <ClipboardText text="0c239dd2" />
611
693
  ```
612
694
 
695
+ ```tsx
696
+ <ClipboardText
697
+ text="sk_live_***********"
698
+ textToCopy="sk_live_51H8_abc123"
699
+ />
700
+ ```
701
+
613
702
  ```tsx
614
703
  <ClipboardText
615
704
  text="npx kumo add button"
@@ -1204,6 +1293,7 @@ Props:
1204
1293
  - `alignOffset`: ComboboxBase.Positioner.Props["alignOffset"]
1205
1294
  - `side`: ComboboxBase.Positioner.Props["side"]
1206
1295
  - `sideOffset`: ComboboxBase.Positioner.Props["sideOffset"]
1296
+ - `container`: PortalContainer
1207
1297
 
1208
1298
  #### Combobox.TriggerValue
1209
1299
 
@@ -1398,6 +1488,42 @@ Usage:
1398
1488
  </div>
1399
1489
  ```
1400
1490
 
1491
+ ```tsx
1492
+ <div className="flex flex-wrap gap-4 items-start">
1493
+ <Combobox value="Apple" items={fruits} disabled>
1494
+ <Combobox.TriggerInput
1495
+ className="w-[200px]"
1496
+ placeholder="Select fruit"
1497
+ />
1498
+ <Combobox.Content>
1499
+ <Combobox.Empty />
1500
+ <Combobox.List>
1501
+ {(item: string) => (
1502
+ <Combobox.Item key={item} value={item}>
1503
+ {item}
1504
+ </Combobox.Item>
1505
+ )}
1506
+ </Combobox.List>
1507
+ </Combobox.Content>
1508
+ </Combobox>
1509
+
1510
+ <Combobox value={languages[0]} items={languages} disabled>
1511
+ <Combobox.TriggerValue className="w-[200px]" />
1512
+ <Combobox.Content>
1513
+ <Combobox.Input placeholder="Search" />
1514
+ <Combobox.Empty />
1515
+ <Combobox.List>
1516
+ {(item: Language) => (
1517
+ <Combobox.Item key={item.value} value={item}>
1518
+ {item.emoji} {item.label}
1519
+ </Combobox.Item>
1520
+ )}
1521
+ </Combobox.List>
1522
+ </Combobox.Content>
1523
+ </Combobox>
1524
+ </div>
1525
+ ```
1526
+
1401
1527
  ```tsx
1402
1528
  <div className="w-80">
1403
1529
  <Combobox
@@ -1525,6 +1651,8 @@ CommandPalette — accessible command palette / spotlight search overlay. Compo
1525
1651
  Whether the dialog is open
1526
1652
  - `children`: ReactNode
1527
1653
  Child content - typically one or more Panel components
1654
+ - `container`: PortalContainer
1655
+ Container element for the portal. Use this to render the command palette inside a Shadow DOM or custom container. Overrides `KumoPortalProvider` context.
1528
1656
 
1529
1657
  **Colors (kumo tokens used):**
1530
1658
 
@@ -2006,6 +2134,8 @@ Dialog component
2006
2134
  Additional CSS classes merged via `cn()`.
2007
2135
  - `children`: ReactNode
2008
2136
  Dialog content (typically Title, Description, Close, and action buttons).
2137
+ - `container`: PortalContainer
2138
+ Container element for the portal. Use this to render the dialog inside a Shadow DOM or custom container. Overrides `KumoPortalProvider` context.
2009
2139
  - `size`: enum [default: base]
2010
2140
  - `"base"`: Default dialog width
2011
2141
  - `"sm"`: Small dialog for simple confirmations
@@ -2014,7 +2144,7 @@ Dialog component
2014
2144
 
2015
2145
  **Colors (kumo tokens used):**
2016
2146
 
2017
- `bg-kumo-base`, `text-kumo-default`
2147
+ `bg-kumo-base`, `bg-kumo-recessed`, `text-kumo-default`
2018
2148
 
2019
2149
  **Styling:**
2020
2150
 
@@ -2877,13 +3007,13 @@ Input component
2877
3007
 
2878
3008
  **State Classes:**
2879
3009
  - `"default"`:
2880
- - `focus`: `focus:ring-kumo-ring`
3010
+ - `focus`: `focus:ring-kumo-hairline`
2881
3011
  - `"error"`:
2882
3012
  - `focus`: `focus:ring-kumo-danger`
2883
3013
 
2884
3014
  **Colors (kumo tokens used):**
2885
3015
 
2886
- `bg-kumo-control`, `ring-kumo-danger`, `ring-kumo-line`, `ring-kumo-ring`, `text-kumo-default`, `text-kumo-subtle`
3016
+ `bg-kumo-control`, `ring-kumo-danger`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-subtle`
2887
3017
 
2888
3018
  **Styling:**
2889
3019
 
@@ -2904,7 +3034,6 @@ Input component
2904
3034
  label="Email"
2905
3035
  placeholder="you@example.com"
2906
3036
  value="invalid-email"
2907
- variant="error"
2908
3037
  error="Please enter a valid email address"
2909
3038
  />
2910
3039
  ```
@@ -2914,7 +3043,6 @@ Input component
2914
3043
  label="Password"
2915
3044
  type="password"
2916
3045
  value="short"
2917
- variant="error"
2918
3046
  error={{
2919
3047
  message: "Password must be at least 8 characters",
2920
3048
  match: "tooShort",
@@ -3079,7 +3207,7 @@ LayerCard component
3079
3207
 
3080
3208
  **Colors (kumo tokens used):**
3081
3209
 
3082
- `bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-recessed`, `ring-kumo-fill`, `ring-kumo-line`, `text-kumo-strong`
3210
+ `bg-kumo-base`, `bg-kumo-elevated`, `ring-kumo-fill`, `ring-kumo-line`, `text-kumo-strong`
3083
3211
 
3084
3212
  **Styling:**
3085
3213
 
@@ -3325,7 +3453,7 @@ MenuBar — horizontal icon-button toolbar with keyboard arrow-key navigation.
3325
3453
 
3326
3454
  **Colors (kumo tokens used):**
3327
3455
 
3328
- `bg-kumo-base`, `bg-kumo-fill`, `border-kumo-fill`
3456
+ `bg-kumo-base`, `bg-kumo-recessed`, `border-kumo-fill`, `border-kumo-recessed`
3329
3457
 
3330
3458
  **Styling:**
3331
3459
 
@@ -3445,7 +3573,7 @@ Pagination component
3445
3573
 
3446
3574
  **Colors (kumo tokens used):**
3447
3575
 
3448
- `border-kumo-line`, `text-kumo-strong`
3576
+ `border-kumo-line`, `ring-kumo-line`, `text-kumo-strong`
3449
3577
 
3450
3578
  **Styling:**
3451
3579
 
@@ -3480,6 +3608,8 @@ Props:
3480
3608
  Controls sub-component
3481
3609
 
3482
3610
  Props:
3611
+ - `Note`: ** `"dropdown"` renders an option for every page (required)
3612
+ - `pageSelector`: "input" | "dropdown"
3483
3613
  - `className`: string
3484
3614
 
3485
3615
  #### Pagination.Separator
@@ -3559,6 +3689,26 @@ Props:
3559
3689
  </Pagination>
3560
3690
  ```
3561
3691
 
3692
+ ```tsx
3693
+ <Pagination
3694
+ page={page}
3695
+ setPage={setPage}
3696
+ perPage={perPage}
3697
+ totalCount={500}
3698
+ >
3699
+ <Pagination.Info />
3700
+ <Pagination.Separator />
3701
+ <Pagination.PageSize
3702
+ value={perPage}
3703
+ onChange={(size) => {
3704
+ setPerPage(size);
3705
+ setPage(1);
3706
+ }}
3707
+ />
3708
+ <Pagination.Controls pageSelector="dropdown" />
3709
+ </Pagination>
3710
+ ```
3711
+
3562
3712
  ```tsx
3563
3713
  <Pagination
3564
3714
  page={page}
@@ -3822,7 +3972,7 @@ Radio — radio button group for single-select choices. Compound component: `Ra
3822
3972
 
3823
3973
  **Colors (kumo tokens used):**
3824
3974
 
3825
- `bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-tint`, `border-kumo-danger`, `border-kumo-interact`, `border-kumo-line`, `border-kumo-ring`, `ring-kumo-danger`, `ring-kumo-line`, `ring-kumo-ring`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
3975
+ `bg-kumo-base`, `bg-kumo-contrast`, `bg-kumo-tint`, `border-kumo-danger`, `border-kumo-hairline`, `border-kumo-interact`, `ring-kumo-danger`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
3826
3976
 
3827
3977
  **Sub-Components:**
3828
3978
 
@@ -4082,7 +4232,7 @@ Select component
4082
4232
 
4083
4233
  **Colors (kumo tokens used):**
4084
4234
 
4085
- `bg-kumo-base`, `bg-kumo-tint`, `ring-kumo-ring`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
4235
+ `bg-kumo-base`, `bg-kumo-line`, `bg-kumo-tint`, `ring-kumo-hairline`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
4086
4236
 
4087
4237
  **Styling:**
4088
4238
 
@@ -4095,6 +4245,18 @@ This is a compound component. Use these sub-components:
4095
4245
 
4096
4246
  Option sub-component
4097
4247
 
4248
+ #### Select.Group
4249
+
4250
+ Group sub-component
4251
+
4252
+ #### Select.GroupLabel
4253
+
4254
+ GroupLabel sub-component
4255
+
4256
+ #### Select.Separator
4257
+
4258
+ Separator sub-component
4259
+
4098
4260
 
4099
4261
  **Examples:**
4100
4262
 
@@ -4251,7 +4413,7 @@ Option sub-component
4251
4413
  <span className="flex items-center gap-2">
4252
4414
  <span>Issue Types</span>
4253
4415
  {selected.length > 0 && (
4254
- <Badge variant="secondary">{selected.length}</Badge>
4416
+ <Badge variant="neutral">{selected.length}</Badge>
4255
4417
  )}
4256
4418
  </span>
4257
4419
  )}
@@ -4289,6 +4451,93 @@ Option sub-component
4289
4451
  </Select>
4290
4452
  ```
4291
4453
 
4454
+ ```tsx
4455
+ <Select
4456
+ label="Deployment Region"
4457
+ placeholder="Choose a region..."
4458
+ className="w-[250px]"
4459
+ value={value}
4460
+ onValueChange={(v) => setValue(v as string | null)}
4461
+ >
4462
+ <Select.Option value="us-east">US East</Select.Option>
4463
+ <Select.Option value="us-west">US West</Select.Option>
4464
+ <Select.Option value="eu-west" disabled>
4465
+ EU West
4466
+ </Select.Option>
4467
+ <Select.Option value="ap-south" disabled>
4468
+ AP South
4469
+ </Select.Option>
4470
+ </Select>
4471
+ ```
4472
+
4473
+ ```tsx
4474
+ <Select
4475
+ label="Food"
4476
+ placeholder="Pick a food..."
4477
+ className="w-[220px]"
4478
+ value={value}
4479
+ onValueChange={(v) => setValue(v as string | null)}
4480
+ >
4481
+ <Select.Group>
4482
+ <Select.GroupLabel>Fruits</Select.GroupLabel>
4483
+ <Select.Option value="apple">Apple</Select.Option>
4484
+ <Select.Option value="banana">Banana</Select.Option>
4485
+ <Select.Option value="cherry">Cherry</Select.Option>
4486
+ </Select.Group>
4487
+ <Select.Separator />
4488
+ <Select.Group>
4489
+ <Select.GroupLabel>Vegetables</Select.GroupLabel>
4490
+ <Select.Option value="carrot">Carrot</Select.Option>
4491
+ <Select.Option value="broccoli">Broccoli</Select.Option>
4492
+ <Select.Option value="spinach">Spinach</Select.Option>
4493
+ </Select.Group>
4494
+ </Select>
4495
+ ```
4496
+
4497
+ ```tsx
4498
+ <Select
4499
+ label="Server Region"
4500
+ placeholder="Select a region..."
4501
+ className="w-[260px]"
4502
+ value={value}
4503
+ onValueChange={(v) => setValue(v as string | null)}
4504
+ >
4505
+ <Select.Group>
4506
+ <Select.GroupLabel>Available</Select.GroupLabel>
4507
+ <Select.Option value="us-east-1">US East (N. Virginia)</Select.Option>
4508
+ <Select.Option value="us-west-2">US West (Oregon)</Select.Option>
4509
+ <Select.Option value="eu-west-1">EU West (Ireland)</Select.Option>
4510
+ </Select.Group>
4511
+ <Select.Separator />
4512
+ <Select.Group>
4513
+ <Select.GroupLabel>Unavailable</Select.GroupLabel>
4514
+ <Select.Option value="ap-south-1" disabled>
4515
+ AP South (Mumbai)
4516
+ </Select.Option>
4517
+ <Select.Option value="sa-east-1" disabled>
4518
+ SA East (São Paulo)
4519
+ </Select.Option>
4520
+ </Select.Group>
4521
+ </Select>
4522
+ ```
4523
+
4524
+ ```tsx
4525
+ <Select
4526
+ label="Long List Select"
4527
+ description="Tests scrolling behavior with many options"
4528
+ placeholder="Choose an option..."
4529
+ className="w-[220px]"
4530
+ value={value}
4531
+ onValueChange={(v) => setValue(v as string | null)}
4532
+ >
4533
+ {longListItems.map((item) => (
4534
+ <Select.Option key={item.value} value={item.value}>
4535
+ {item.label}
4536
+ </Select.Option>
4537
+ ))}
4538
+ </Select>
4539
+ ```
4540
+
4292
4541
 
4293
4542
  ---
4294
4543
 
@@ -4343,7 +4592,7 @@ Password/secret input that masks its value by default and reveals on click. Incl
4343
4592
 
4344
4593
  **Colors (kumo tokens used):**
4345
4594
 
4346
- `bg-kumo-brand`, `bg-kumo-control`, `outline-kumo-ring`, `ring-kumo-ring`, `text-kumo-default`, `text-kumo-subtle`
4595
+ `bg-kumo-brand`, `bg-kumo-control`, `outline-kumo-hairline`, `ring-kumo-hairline`, `text-kumo-default`, `text-kumo-subtle`
4347
4596
 
4348
4597
  **Examples:**
4349
4598
 
@@ -4460,7 +4709,7 @@ Sidebar — responsive navigation panel with expand/collapse support. Compound
4460
4709
 
4461
4710
  **Colors (kumo tokens used):**
4462
4711
 
4463
- `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-line`, `bg-kumo-overlay`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-line`, `ring-kumo-ring`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
4712
+ `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-line`, `bg-kumo-overlay`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-line`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
4464
4713
 
4465
4714
  **Styling:**
4466
4715
 
@@ -4895,7 +5144,7 @@ CollapsibleContent sub-component
4895
5144
 
4896
5145
  ### Surface
4897
5146
 
4898
- Surface component
5147
+ Polymorphic container with consistent background, shadow, and border styling. Use the `render` prop to change the underlying element: ```tsx <Surface render={<section />} className="rounded-lg p-4">Card content</Surface> ```
4899
5148
 
4900
5149
  **Type:** component
4901
5150
 
@@ -4906,11 +5155,15 @@ Surface component
4906
5155
  **Props:**
4907
5156
 
4908
5157
  - `as`: React.ElementType
4909
- The HTML element type to render as (e.g. `"div"`, `"section"`, `"article"`).
4910
- - `className`: string
4911
- Additional CSS classes merged via `cn()`.
5158
+ - `render`: ReactNode
5159
+ Allows you to replace the component’s HTML element with a different tag, or compose it with another component.
5160
+
5161
+ Accepts a `ReactElement` or a function that returns the element to render.
4912
5162
  - `children`: ReactNode
4913
- Content rendered inside the surface.
5163
+ - `className`: string
5164
+ - `id`: string
5165
+ - `lang`: string
5166
+ - `title`: string
4914
5167
 
4915
5168
  **Colors (kumo tokens used):**
4916
5169
 
@@ -4933,13 +5186,13 @@ Surface component
4933
5186
 
4934
5187
  ```tsx
4935
5188
  <div className="flex flex-col gap-4">
4936
- <Surface as="section" className="rounded-lg p-4">
5189
+ <Surface render={<section />} className="rounded-lg p-4">
4937
5190
  <Text bold>As section element</Text>
4938
5191
  </Surface>
4939
- <Surface as="article" className="rounded-lg p-4">
5192
+ <Surface render={<article />} className="rounded-lg p-4">
4940
5193
  <Text bold>As article element</Text>
4941
5194
  </Surface>
4942
- <Surface as="aside" className="rounded-lg p-4">
5195
+ <Surface render={<aside />} className="rounded-lg p-4">
4943
5196
  <Text bold>As aside element</Text>
4944
5197
  </Surface>
4945
5198
  </div>
@@ -5066,14 +5319,17 @@ Props:
5066
5319
  ```
5067
5320
 
5068
5321
  ```tsx
5069
- <div className="flex flex-col gap-4">
5322
+ <div className="grid grid-cols-2 gap-x-8 gap-y-4">
5323
+ <Switch label="Default off" checked={false} onCheckedChange={() => {}} />
5324
+ <Switch label="Default on" checked={true} onCheckedChange={() => {}} />
5070
5325
  <Switch
5071
- label="Default variant"
5072
- checked={true}
5326
+ label="Neutral off"
5327
+ variant="neutral"
5328
+ checked={false}
5073
5329
  onCheckedChange={() => {}}
5074
5330
  />
5075
5331
  <Switch
5076
- label="Neutral variant"
5332
+ label="Neutral on"
5077
5333
  variant="neutral"
5078
5334
  checked={true}
5079
5335
  onCheckedChange={() => {}}
@@ -5081,6 +5337,15 @@ Props:
5081
5337
  </div>
5082
5338
  ```
5083
5339
 
5340
+ ```tsx
5341
+ <Switch
5342
+ id="my-custom-switch"
5343
+ label="Custom ID"
5344
+ checked={checked}
5345
+ onCheckedChange={setChecked}
5346
+ />
5347
+ ```
5348
+
5084
5349
  ```tsx
5085
5350
  <div className="flex flex-col gap-4">
5086
5351
  <Switch
@@ -5125,6 +5390,9 @@ Table — semantic HTML table with styled rows, cells, and selection support. C
5125
5390
  - `variant`: enum [default: default]
5126
5391
  - `"default"`: Default row variant
5127
5392
  - `"selected"`: Selected row variant
5393
+ - `sticky`: enum
5394
+ - `"left"`: Pin column to the left edge of the scroll container
5395
+ - `"right"`: Pin column to the right edge of the scroll container
5128
5396
  - `className`: string
5129
5397
  Additional CSS classes
5130
5398
  - `children`: ReactNode
@@ -5132,7 +5400,7 @@ Table — semantic HTML table with styled rows, cells, and selection support. C
5132
5400
 
5133
5401
  **Colors (kumo tokens used):**
5134
5402
 
5135
- `bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-ring`, `bg-kumo-tint`, `border-kumo-fill`, `text-kumo-default`, `text-kumo-strong`
5403
+ `bg-kumo-base`, `bg-kumo-elevated`, `bg-kumo-hairline`, `bg-kumo-tint`, `border-kumo-fill`, `text-kumo-default`, `text-kumo-strong`
5136
5404
 
5137
5405
  **Sub-Components:**
5138
5406
 
@@ -5336,6 +5604,78 @@ ResizeHandle sub-component
5336
5604
  </LayerCard>
5337
5605
  ```
5338
5606
 
5607
+ ```tsx
5608
+ <LayerCard>
5609
+ <LayerCard.Primary className="w-full max-w-md overflow-x-auto p-0">
5610
+ <Table>
5611
+ <Table.Header>
5612
+ <Table.Row>
5613
+ <Table.Head>Subject</Table.Head>
5614
+ <Table.Head>From</Table.Head>
5615
+ <Table.Head>Date</Table.Head>
5616
+ <Table.Head>Tags</Table.Head>
5617
+ <Table.Head sticky="right">
5618
+ <span className="sr-only">Actions</span>
5619
+ </Table.Head>
5620
+ </Table.Row>
5621
+ </Table.Header>
5622
+ <Table.Body>
5623
+ {emailData.map((row) => (
5624
+ <Table.Row key={row.id}>
5625
+ <Table.Cell className="whitespace-nowrap">
5626
+ {row.subject}
5627
+ </Table.Cell>
5628
+ <Table.Cell className="whitespace-nowrap">
5629
+ {row.from}
5630
+ </Table.Cell>
5631
+ <Table.Cell className="whitespace-nowrap">
5632
+ {row.date}
5633
+ </Table.Cell>
5634
+ <Table.Cell className="whitespace-nowrap">
5635
+ {row.tags ? (
5636
+ <div className="inline-flex gap-1">
5637
+ {row.tags.map((tag) => (
5638
+ <Badge key={tag}>{tag}</Badge>
5639
+ ))}
5640
+ </div>
5641
+ ) : (
5642
+ "—"
5643
+ )}
5644
+ </Table.Cell>
5645
+ <Table.Cell sticky="right" className="text-right">
5646
+ <DropdownMenu>
5647
+ <DropdownMenu.Trigger
5648
+ render={
5649
+ <Button
5650
+ variant="ghost"
5651
+ size="sm"
5652
+ shape="square"
5653
+ aria-label="More options"
5654
+ >
5655
+ <DotsThree weight="bold" size={16} />
5656
+ </Button>
5657
+ }
5658
+ />
5659
+ <DropdownMenu.Content>
5660
+ <DropdownMenu.Item icon={Eye}>View</DropdownMenu.Item>
5661
+ <DropdownMenu.Item icon={PencilSimple}>
5662
+ Edit
5663
+ </DropdownMenu.Item>
5664
+ <DropdownMenu.Separator />
5665
+ <DropdownMenu.Item icon={Trash} variant="danger">
5666
+ Delete
5667
+ </DropdownMenu.Item>
5668
+ </DropdownMenu.Content>
5669
+ </DropdownMenu>
5670
+ </Table.Cell>
5671
+ </Table.Row>
5672
+ ))}
5673
+ </Table.Body>
5674
+ </Table>
5675
+ </LayerCard.Primary>
5676
+ </LayerCard>
5677
+ ```
5678
+
5339
5679
  ```tsx
5340
5680
  <LayerCard>
5341
5681
  <LayerCard.Primary className="w-full overflow-x-auto p-0">
@@ -5466,7 +5806,7 @@ Tab navigation component with segmented or underline style. Built on Base UI Tab
5466
5806
 
5467
5807
  **Colors (kumo tokens used):**
5468
5808
 
5469
- `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-recessed`, `bg-kumo-surface`, `bg-kumo-tint`, `border-kumo-ring`, `ring-kumo-ring`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
5809
+ `bg-kumo-base`, `bg-kumo-brand`, `bg-kumo-recessed`, `bg-kumo-tint`, `border-kumo-hairline`, `ring-kumo-hairline`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
5470
5810
 
5471
5811
  **Styling:**
5472
5812
 
@@ -5601,6 +5941,8 @@ Text component
5601
5941
  - `"lg"`: Large text
5602
5942
  - `bold`: boolean
5603
5943
  Whether to use bold font weight (only applies to body variants).
5944
+ - `truncate`: boolean
5945
+ Whether to truncate overflowing text with an ellipsis. Adds `truncate min-w-0` classes.
5604
5946
  - `as`: React.ElementType
5605
5947
  The HTML element type to render as (e.g. `"span"`, `"p"`, `"h1"`). Auto-selected based on variant if omitted.
5606
5948
  - `children`: ReactNode
@@ -5678,6 +6020,15 @@ Text component
5678
6020
  </div>
5679
6021
  ```
5680
6022
 
6023
+ ```tsx
6024
+ <div className="w-64 rounded-lg border border-kumo-line bg-kumo-base p-4">
6025
+ <Text truncate>
6026
+ This is a long piece of text that will be truncated with an ellipsis
6027
+ when it overflows its container.
6028
+ </Text>
6029
+ </div>
6030
+ ```
6031
+
5681
6032
 
5682
6033
  ---
5683
6034
 
@@ -5706,7 +6057,7 @@ Toasty — toast notification provider and viewport. Renders a `Toast.Provider`
5706
6057
 
5707
6058
  **Colors (kumo tokens used):**
5708
6059
 
5709
- `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-danger`, `border-kumo-fill`, `border-kumo-info`, `border-kumo-success`, `border-kumo-warning`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-strong`, `text-kumo-subtle`, `text-kumo-success`, `text-kumo-warning`
6060
+ `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-success`, `ring-kumo-warning`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-info`, `text-kumo-strong`, `text-kumo-subtle`, `text-kumo-success`, `text-kumo-warning`
5710
6061
 
5711
6062
  **Styling:**
5712
6063
 
@@ -5780,6 +6131,31 @@ Accessible popup that shows additional information on hover/focus. Wrap your app
5780
6131
  </TooltipProvider>
5781
6132
  ```
5782
6133
 
6134
+ ```tsx
6135
+ <TooltipProvider>
6136
+ <div className="flex gap-4">
6137
+ <Tooltip content="Opens after 1 second" delay={1000} asChild>
6138
+ <Button variant="secondary">1s open delay</Button>
6139
+ </Tooltip>
6140
+ <Tooltip
6141
+ content="Stays open 500ms after leaving"
6142
+ closeDelay={500}
6143
+ asChild
6144
+ >
6145
+ <Button variant="secondary">500ms close delay</Button>
6146
+ </Tooltip>
6147
+ <Tooltip
6148
+ content="Instant open, stays 1s"
6149
+ delay={0}
6150
+ closeDelay={1000}
6151
+ asChild
6152
+ >
6153
+ <Button variant="secondary">Instant + 1s close</Button>
6154
+ </Tooltip>
6155
+ </div>
6156
+ </TooltipProvider>
6157
+ ```
6158
+
5783
6159
 
5784
6160
  ---
5785
6161