@cloudflare/kumo 1.13.0 → 1.14.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 (182) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/ai/component-registry.json +47 -21
  3. package/ai/component-registry.md +243 -15
  4. package/ai/schemas.ts +3 -2
  5. package/dist/.build-complete +1 -1
  6. package/dist/ai/schemas.d.ts +10 -2
  7. package/dist/ai/schemas.d.ts.map +1 -1
  8. package/dist/ai/schemas.js +175 -173
  9. package/dist/ai/schemas.js.map +1 -1
  10. package/dist/chunks/Legend-mkh1v83sz972e29d.js +407 -0
  11. package/dist/chunks/Legend-mkh1v83sz972e29d.js.map +1 -0
  12. package/dist/chunks/{breadcrumbs-e564gabk59go37cg.js → breadcrumbs-gr907zcoo65rpn90.js} +2 -2
  13. package/dist/chunks/{breadcrumbs-e564gabk59go37cg.js.map → breadcrumbs-gr907zcoo65rpn90.js.map} +1 -1
  14. package/dist/chunks/{button-b1yp3lbrhjr9eg07.js → button-d82sexqgnd834eaa.js} +2 -2
  15. package/dist/chunks/{button-b1yp3lbrhjr9eg07.js.map → button-d82sexqgnd834eaa.js.map} +1 -1
  16. package/dist/chunks/{checkbox-khvh0efmlzvlo6qi.js → checkbox-gebzflhsvo6zkcrm.js} +3 -3
  17. package/dist/chunks/{checkbox-khvh0efmlzvlo6qi.js.map → checkbox-gebzflhsvo6zkcrm.js.map} +1 -1
  18. package/dist/chunks/{clipboard-text-jvrlvyz5ulm49h5b.js → clipboard-text-nnmfwusts804p1qd.js} +4 -4
  19. package/dist/chunks/{clipboard-text-jvrlvyz5ulm49h5b.js.map → clipboard-text-nnmfwusts804p1qd.js.map} +1 -1
  20. package/dist/chunks/{combobox-hdstt4dqqxbtxwod.js → combobox-ds8qzpuaagb1udzg.js} +88 -77
  21. package/dist/chunks/combobox-ds8qzpuaagb1udzg.js.map +1 -0
  22. package/dist/chunks/{command-palette-l8dym46a74o7j8ci.js → command-palette-essubhvibj84mhx8.js} +3 -3
  23. package/dist/chunks/{command-palette-l8dym46a74o7j8ci.js.map → command-palette-essubhvibj84mhx8.js.map} +1 -1
  24. package/dist/chunks/{dialog-emk68n0piw8u7hkb.js → dialog-hmfums1yr41afbsx.js} +2 -2
  25. package/dist/chunks/{dialog-emk68n0piw8u7hkb.js.map → dialog-hmfums1yr41afbsx.js.map} +1 -1
  26. package/dist/chunks/{dropdown-ejgjnn9gq3daua1h.js → dropdown-nhhm3rddlt7fmd2a.js} +2 -2
  27. package/dist/chunks/{dropdown-ejgjnn9gq3daua1h.js.map → dropdown-nhhm3rddlt7fmd2a.js.map} +1 -1
  28. package/dist/chunks/{empty-crbntv0dhud7besh.js → empty-h3qhwtx0z8arupc9.js} +2 -2
  29. package/dist/chunks/{empty-crbntv0dhud7besh.js.map → empty-h3qhwtx0z8arupc9.js.map} +1 -1
  30. package/dist/chunks/{engine-javascript-hi1kqifa6nkcridk.js → engine-javascript-cvvdau2e8o59vsx6.js} +5 -5
  31. package/dist/chunks/{engine-javascript-hi1kqifa6nkcridk.js.map → engine-javascript-cvvdau2e8o59vsx6.js.map} +1 -1
  32. package/dist/chunks/{field-ftrgblg9mbmz9eo3.js → field-pcsc33yrvgq6g9ll.js} +3 -3
  33. package/dist/chunks/{field-ftrgblg9mbmz9eo3.js.map → field-pcsc33yrvgq6g9ll.js.map} +1 -1
  34. package/dist/chunks/input-area-oyw0rq0q2wm0blmb.js +74 -0
  35. package/dist/chunks/input-area-oyw0rq0q2wm0blmb.js.map +1 -0
  36. package/dist/chunks/{input-group-g6qyhe5jvpe02hee.js → input-group-fjq64pzze8kklmni.js} +3 -3
  37. package/dist/chunks/{input-group-g6qyhe5jvpe02hee.js.map → input-group-fjq64pzze8kklmni.js.map} +1 -1
  38. package/dist/chunks/{input-me56hug8sl0u650q.js → input-oaa51811nxs0z2mw.js} +20 -20
  39. package/dist/chunks/input-oaa51811nxs0z2mw.js.map +1 -0
  40. package/dist/chunks/{label-eooot7dhtfvw7n3x.js → label-m5dcn3mqhnmi0dgq.js} +3 -3
  41. package/dist/chunks/{label-eooot7dhtfvw7n3x.js.map → label-m5dcn3mqhnmi0dgq.js.map} +1 -1
  42. package/dist/chunks/{link-moetfdbgxda0yhwg.js → link-desli097365ac82o.js} +2 -2
  43. package/dist/chunks/{link-moetfdbgxda0yhwg.js.map → link-desli097365ac82o.js.map} +1 -1
  44. package/dist/chunks/{menubar-c2zwv4mbo3xqq7is.js → menubar-eir09makes5l9xby.js} +2 -2
  45. package/dist/chunks/{menubar-c2zwv4mbo3xqq7is.js.map → menubar-eir09makes5l9xby.js.map} +1 -1
  46. package/dist/chunks/{meter-em2hfu8j2rhmf5ae.js → meter-kl2puqzdbfkwrok9.js} +2 -2
  47. package/dist/chunks/{meter-em2hfu8j2rhmf5ae.js.map → meter-kl2puqzdbfkwrok9.js.map} +1 -1
  48. package/dist/chunks/{pagination-xt93wvwvow4z44lc.js → pagination-c2sv9vs43whhvznh.js} +3 -3
  49. package/dist/chunks/{pagination-xt93wvwvow4z44lc.js.map → pagination-c2sv9vs43whhvznh.js.map} +1 -1
  50. package/dist/chunks/{popover-irccwetx73p8pnua.js → popover-ji1zh9zqrj6at834.js} +2 -2
  51. package/dist/chunks/{popover-irccwetx73p8pnua.js.map → popover-ji1zh9zqrj6at834.js.map} +1 -1
  52. package/dist/chunks/radio-cnsup12f302rxkxl.js +200 -0
  53. package/dist/chunks/radio-cnsup12f302rxkxl.js.map +1 -0
  54. package/dist/chunks/{select-jxxef2rf76pgdrf8.js → select-hgn6ikyor1p6jd9r.js} +21 -14
  55. package/dist/chunks/select-hgn6ikyor1p6jd9r.js.map +1 -0
  56. package/dist/chunks/{sensitive-input-i7ey1w0ky7nco012.js → sensitive-input-drdu6upod3ucl6vt.js} +34 -34
  57. package/dist/chunks/sensitive-input-drdu6upod3ucl6vt.js.map +1 -0
  58. package/dist/chunks/switch-n7zyzirax1l016n2.js +241 -0
  59. package/dist/chunks/switch-n7zyzirax1l016n2.js.map +1 -0
  60. package/dist/chunks/{table-d4ql7fjvok30xs1f.js → table-l2yy3jtkbhvqlq43.js} +3 -3
  61. package/dist/chunks/table-l2yy3jtkbhvqlq43.js.map +1 -0
  62. package/dist/chunks/{tabs-n3rcvuzx0gbslyy6.js → tabs-omc1n6jaxkf41pvg.js} +2 -2
  63. package/dist/chunks/{tabs-n3rcvuzx0gbslyy6.js.map → tabs-omc1n6jaxkf41pvg.js.map} +1 -1
  64. package/dist/chunks/{toast-j05qj3vk688ht1i1.js → toast-bkvbwc1x3s7fbzkt.js} +3 -3
  65. package/dist/chunks/{toast-j05qj3vk688ht1i1.js.map → toast-bkvbwc1x3s7fbzkt.js.map} +1 -1
  66. package/dist/chunks/{tooltip-es2dwwbhftg4k2jy.js → tooltip-nwvv7fhpqpo2rqlc.js} +2 -2
  67. package/dist/chunks/{tooltip-es2dwwbhftg4k2jy.js.map → tooltip-nwvv7fhpqpo2rqlc.js.map} +1 -1
  68. package/dist/chunks/{vendor-base-ui-kxxocm122zr4pipe.js → vendor-base-ui-lgoligkf81eyvnde.js} +21 -21
  69. package/dist/chunks/{vendor-base-ui-kxxocm122zr4pipe.js.map → vendor-base-ui-lgoligkf81eyvnde.js.map} +1 -1
  70. package/dist/code/server.js +0 -2
  71. package/dist/code/server.js.map +1 -1
  72. package/dist/code.js +2 -3
  73. package/dist/code.js.map +1 -1
  74. package/dist/components/breadcrumbs.js +1 -1
  75. package/dist/components/button.js +1 -1
  76. package/dist/components/chart.js +1 -1
  77. package/dist/components/checkbox.js +1 -1
  78. package/dist/components/clipboard-text.js +1 -1
  79. package/dist/components/combobox.js +1 -1
  80. package/dist/components/command-palette.js +1 -1
  81. package/dist/components/dialog.js +1 -1
  82. package/dist/components/dropdown.js +1 -1
  83. package/dist/components/empty.js +1 -1
  84. package/dist/components/field.js +1 -1
  85. package/dist/components/flow.js +1435 -1431
  86. package/dist/components/flow.js.map +1 -1
  87. package/dist/components/input.js +3 -3
  88. package/dist/components/label.js +1 -1
  89. package/dist/components/link.js +1 -1
  90. package/dist/components/menubar.js +1 -1
  91. package/dist/components/meter.js +1 -1
  92. package/dist/components/pagination.js +1 -1
  93. package/dist/components/popover.js +1 -1
  94. package/dist/components/radio.js +1 -1
  95. package/dist/components/select.js +1 -1
  96. package/dist/components/sensitive-input.js +1 -1
  97. package/dist/components/switch.js +1 -1
  98. package/dist/components/table.js +1 -1
  99. package/dist/components/tabs.js +1 -1
  100. package/dist/components/toast.js +2 -2
  101. package/dist/components/tooltip.js +1 -1
  102. package/dist/index.js +69 -68
  103. package/dist/primitives/accordion.js +1 -1
  104. package/dist/primitives/alert-dialog.js +1 -1
  105. package/dist/primitives/autocomplete.js +1 -1
  106. package/dist/primitives/avatar.js +1 -1
  107. package/dist/primitives/button.js +1 -1
  108. package/dist/primitives/checkbox-group.js +1 -1
  109. package/dist/primitives/checkbox.js +1 -1
  110. package/dist/primitives/collapsible.js +1 -1
  111. package/dist/primitives/combobox.js +1 -1
  112. package/dist/primitives/context-menu.js +1 -1
  113. package/dist/primitives/csp-provider.js +1 -1
  114. package/dist/primitives/dialog.js +1 -1
  115. package/dist/primitives/direction-provider.js +1 -1
  116. package/dist/primitives/drawer.js +1 -1
  117. package/dist/primitives/field.js +1 -1
  118. package/dist/primitives/fieldset.js +1 -1
  119. package/dist/primitives/form.js +1 -1
  120. package/dist/primitives/input.js +1 -1
  121. package/dist/primitives/menu.js +1 -1
  122. package/dist/primitives/menubar.js +1 -1
  123. package/dist/primitives/meter.js +1 -1
  124. package/dist/primitives/navigation-menu.js +1 -1
  125. package/dist/primitives/number-field.js +1 -1
  126. package/dist/primitives/popover.js +1 -1
  127. package/dist/primitives/preview-card.js +1 -1
  128. package/dist/primitives/progress.js +1 -1
  129. package/dist/primitives/radio-group.js +1 -1
  130. package/dist/primitives/radio.js +1 -1
  131. package/dist/primitives/scroll-area.js +1 -1
  132. package/dist/primitives/select.js +1 -1
  133. package/dist/primitives/separator.js +1 -1
  134. package/dist/primitives/slider.js +1 -1
  135. package/dist/primitives/switch.js +1 -1
  136. package/dist/primitives/tabs.js +1 -1
  137. package/dist/primitives/toast.js +1 -1
  138. package/dist/primitives/toggle-group.js +1 -1
  139. package/dist/primitives/toggle.js +1 -1
  140. package/dist/primitives/toolbar.js +1 -1
  141. package/dist/primitives/tooltip.js +1 -1
  142. package/dist/primitives.js +1 -1
  143. package/dist/scripts/theme-generator/config.d.ts.map +1 -1
  144. package/dist/scripts/theme-generator/config.js +12 -3
  145. package/dist/scripts/theme-generator/config.js.map +1 -1
  146. package/dist/src/code/code-highlighted.d.ts +2 -2
  147. package/dist/src/code/code-highlighted.d.ts.map +1 -1
  148. package/dist/src/code/provider.d.ts +2 -2
  149. package/dist/src/code/provider.d.ts.map +1 -1
  150. package/dist/src/components/chart/EChart.d.ts +7 -2
  151. package/dist/src/components/chart/EChart.d.ts.map +1 -1
  152. package/dist/src/components/chart/TimeseriesChart.d.ts.map +1 -1
  153. package/dist/src/components/combobox/combobox.d.ts.map +1 -1
  154. package/dist/src/components/flow/diagram.d.ts.map +1 -1
  155. package/dist/src/components/input/input-area.d.ts.map +1 -1
  156. package/dist/src/components/radio/index.d.ts +1 -1
  157. package/dist/src/components/radio/index.d.ts.map +1 -1
  158. package/dist/src/components/radio/radio.d.ts +43 -4
  159. package/dist/src/components/radio/radio.d.ts.map +1 -1
  160. package/dist/src/components/select/select.d.ts.map +1 -1
  161. package/dist/src/components/switch/switch.d.ts +8 -8
  162. package/dist/src/components/switch/switch.d.ts.map +1 -1
  163. package/dist/src/index.d.ts +1 -1
  164. package/dist/src/index.d.ts.map +1 -1
  165. package/dist/styles/kumo-binding.css +5 -0
  166. package/dist/styles/kumo-standalone.css +1 -1
  167. package/dist/styles/theme-kumo.css +7 -0
  168. package/package.json +3 -6
  169. package/scripts/theme-generator/config.ts +12 -3
  170. package/dist/chunks/Legend-o2bjbo2pp24c2fqd.js +0 -402
  171. package/dist/chunks/Legend-o2bjbo2pp24c2fqd.js.map +0 -1
  172. package/dist/chunks/combobox-hdstt4dqqxbtxwod.js.map +0 -1
  173. package/dist/chunks/input-area-hxtyrqpp44m18j72.js +0 -59
  174. package/dist/chunks/input-area-hxtyrqpp44m18j72.js.map +0 -1
  175. package/dist/chunks/input-me56hug8sl0u650q.js.map +0 -1
  176. package/dist/chunks/radio-394mfs3au5m8cgd8.js +0 -125
  177. package/dist/chunks/radio-394mfs3au5m8cgd8.js.map +0 -1
  178. package/dist/chunks/select-jxxef2rf76pgdrf8.js.map +0 -1
  179. package/dist/chunks/sensitive-input-i7ey1w0ky7nco012.js.map +0 -1
  180. package/dist/chunks/switch-b0xo8fxsfzv87krj.js +0 -257
  181. package/dist/chunks/switch-b0xo8fxsfzv87krj.js.map +0 -1
  182. package/dist/chunks/table-d4ql7fjvok30xs1f.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # @cloudflare/kumo
2
2
 
3
+ ## 1.14.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 8b2d6a0: Add radio card appearance via `appearance="card"` prop on Radio.Group and Radio.Item. Cards display a bordered, selectable container with title and description. Also adds `description` prop to Radio.Item for helper text. Supports vertical and horizontal orientations, error state, and disabled state.
8
+ - abbf586: Expose Chart `optionUpdateBehavior` to control how ECharts applies option updates; `notMerge` now defaults to `false`.
9
+ - c6aa554: Add neutral variant to Switch component and improve accessibility
10
+ - New `variant="neutral"` option: monochrome switch with squircle shape, matching the design from stratus
11
+ - Improved off-state visibility for default variant with darker background/ring colors
12
+ - Removed `error` variant (not useful for toggle switches)
13
+ - Added defensive fallback so invalid variant values don't cause runtime crashes
14
+
15
+ ### Patch Changes
16
+
17
+ - f2e17d7: removed `outline-none` to bring back focus states on all buttons
18
+ - eba693e: Fix flaky vitest "Closing rpc while fetch was pending" error in deep-imports test
19
+ - db91f50: Fix InputArea label click not focusing textarea. Use FieldBase.Control with render callback to properly associate the label with the textarea element.
20
+ - 80afd4d: Fix TypeScript return types for ShikiProvider and CodeHighlighted components.
21
+
22
+ Changed return type from `ReactNode` to `React.JSX.Element` to resolve JSX compatibility errors. This fixes issues when consuming these components in projects with stricter TypeScript configurations (e.g., `skipLibCheck: false`), where `ReactNode` was incorrectly inferred as a valid JSX element return type.
23
+
24
+ - dc9742d: Fix table header font size to ensure consistent rendering across dashboards with different default font sizes
25
+ - f94fee7: Add dedicated `kumo-placeholder` text color token and use it for Input, InputArea, SensitiveInput, and CommandPalette placeholder text. The new token provides better visual distinction between placeholder and active text in both light and dark modes.
26
+ - 66012b7: Replace the package-level ESLint pass with Oxlint JS plugin coverage for the remaining jsx-a11y rules, and pin the library build to `es2022` with a post-build browser-compat test that blocks newer runtime APIs from shipping in `dist`.
27
+ - e8acdd8: fix(Select): prevent chevron overflow with long multi-select values
28
+
29
+ Added `min-w-0 truncate` to the value element and `shrink-0` to the chevron icon so that long option names truncate gracefully instead of pushing the chevron outside the select bounds.
30
+
31
+ ## 1.13.1
32
+
33
+ ### Patch Changes
34
+
35
+ - c272f6a: Fix combobox caret icon to use text-kumo-subtle with fill-current instead of invalid fill-kumo-subtle token
36
+ - 5e12c15: fix TimeseriesChart brush cursor not activating when loading prop transitions from true to false
37
+
3
38
  ## 1.13.0
4
39
 
5
40
  ### Minor Changes
@@ -322,7 +322,7 @@
322
322
  "ghost": "text-kumo-default hover:bg-kumo-tint shadow-none bg-inherit",
323
323
  "destructive": "bg-kumo-danger !text-white hover:bg-kumo-danger/70",
324
324
  "secondary-destructive": "bg-kumo-base !text-kumo-danger ring not-disabled:hover:border-secondary! not-disabled:hover:bg-kumo-base disabled:bg-kumo-base/50 disabled:!text-kumo-danger/70 ring-kumo-line data-[state=open]:bg-kumo-base",
325
- "outline": "text-kumo-default ring-2 ring-kumo-ring"
325
+ "outline": "bg-transparent text-kumo-default ring-2 ring-kumo-ring"
326
326
  },
327
327
  "stateClasses": {
328
328
  "primary": {
@@ -2134,7 +2134,6 @@
2134
2134
  "bg-kumo-fill-hover",
2135
2135
  "bg-kumo-overlay",
2136
2136
  "border-kumo-line",
2137
- "fill-kumo-ring",
2138
2137
  "ring-kumo-line",
2139
2138
  "text-kumo-default",
2140
2139
  "text-kumo-strong",
@@ -3718,6 +3717,28 @@
3718
3717
  "horizontal"
3719
3718
  ]
3720
3719
  },
3720
+ "appearance": {
3721
+ "type": "enum",
3722
+ "optional": true,
3723
+ "description": "Visual appearance applied to all Radio.Item children.\n- `\"default\"` — Standard inline radio items\n- `\"card\"` — Choice card with border, padding, and highlighted selection state\n\nIndividual items can override this with their own `appearance` prop.",
3724
+ "values": [
3725
+ "default",
3726
+ "card"
3727
+ ],
3728
+ "descriptions": {
3729
+ "default": "Standard inline radio item",
3730
+ "card": "Choice card appearance with border, padding, and highlighted selection state"
3731
+ },
3732
+ "classes": {
3733
+ "card": "rounded-lg border border-kumo-ring bg-kumo-base p-3 transition-colors hover:bg-kumo-tint has-[[data-checked]]:border-kumo-interact has-[[data-checked]]:bg-kumo-tint"
3734
+ },
3735
+ "stateClasses": {
3736
+ "card": {
3737
+ "hover": "hover:bg-kumo-tint"
3738
+ }
3739
+ },
3740
+ "default": "default"
3741
+ },
3721
3742
  "error": {
3722
3743
  "type": "string",
3723
3744
  "optional": true,
@@ -3741,7 +3762,7 @@
3741
3762
  "controlPosition": {
3742
3763
  "type": "enum",
3743
3764
  "optional": true,
3744
- "description": "Position of radio control relative to label: \"start\" (default) puts radio before label, \"end\" puts label before radio",
3765
+ "description": "Position of radio control relative to label: \"start\" (default) puts radio before label, \"end\" puts label before radio. Note: In card appearance, the control is always positioned at the end.",
3745
3766
  "values": [
3746
3767
  "start",
3747
3768
  "end"
@@ -3763,14 +3784,20 @@
3763
3784
  "<Radio.Group legend=\"Account type\" value={value} onValueChange={setValue}>\n <Radio.Item label=\"Personal\" value=\"personal\" />\n <Radio.Item label=\"Business\" value=\"business\" />\n <Radio.Item label=\"Enterprise\" value=\"enterprise\" />\n </Radio.Group>",
3764
3785
  "<Radio.Group\n legend=\"Size\"\n orientation=\"horizontal\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item label=\"Small\" value=\"sm\" />\n <Radio.Item label=\"Medium\" value=\"md\" />\n <Radio.Item label=\"Large\" value=\"lg\" />\n </Radio.Group>",
3765
3786
  "<Radio.Group\n legend=\"Shipping method\"\n description=\"Choose how you'd like to receive your order\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item label=\"Standard (5-7 days)\" value=\"standard\" />\n <Radio.Item label=\"Express (2-3 days)\" value=\"express\" />\n <Radio.Item label=\"Overnight\" value=\"overnight\" />\n </Radio.Group>",
3766
- "<Radio.Group\n legend=\"Payment method\"\n error=\"Please select a payment method to continue\"\n >\n <Radio.Item label=\"Credit Card\" value=\"card\" variant=\"error\" />\n <Radio.Item label=\"PayPal\" value=\"paypal\" variant=\"error\" />\n <Radio.Item label=\"Bank Transfer\" value=\"bank\" variant=\"error\" />\n </Radio.Group>",
3767
- "<div className=\"flex flex-col gap-6\">\n <Radio.Group legend=\"Disabled group\" disabled defaultValue=\"a\">\n <Radio.Item label=\"Option A\" value=\"a\" />\n <Radio.Item label=\"Option B\" value=\"b\" />\n </Radio.Group>\n <Radio.Group legend=\"Individual disabled\" defaultValue=\"available\">\n <Radio.Item label=\"Available\" value=\"available\" />\n <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n </Radio.Group>\n </div>",
3768
- "<Radio.Group legend=\"Preferences\" controlPosition=\"end\" defaultValue=\"a\">\n <Radio.Item label=\"Label before radio\" value=\"a\" />\n <Radio.Item label=\"Another option\" value=\"b\" />\n </Radio.Group>"
3787
+ "<div className=\"grid grid-cols-2 gap-6\">\n <Radio.Group\n legend=\"Payment method\"\n error=\"Please select a payment method to continue\"\n >\n <Radio.Item label=\"Credit Card\" value=\"card\" variant=\"error\" />\n <Radio.Item label=\"PayPal\" value=\"paypal\" variant=\"error\" />\n </Radio.Group>\n <Radio.Group\n legend=\"Payment method\"\n appearance=\"card\"\n error=\"Please select a payment method to continue\"\n >\n <Radio.Item\n label=\"Credit Card\"\n description=\"Pay with Visa, Mastercard, American Express, or Elo.\"\n value=\"card\"\n variant=\"error\"\n />\n <Radio.Item\n label=\"PayPal\"\n description=\"Pay with your PayPal account.\"\n value=\"paypal\"\n variant=\"error\"\n />\n </Radio.Group>\n </div>",
3788
+ "<div className=\"grid grid-cols-2 gap-6\">\n <Radio.Group legend=\"Disabled group\" disabled defaultValue=\"a\">\n <Radio.Item label=\"Option A\" value=\"a\" />\n <Radio.Item label=\"Option B\" value=\"b\" />\n </Radio.Group>\n <Radio.Group legend=\"Individual disabled\" defaultValue=\"available\">\n <Radio.Item label=\"Available\" value=\"available\" />\n <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n </Radio.Group>\n <Radio.Group\n legend=\"Disabled card group\"\n appearance=\"card\"\n disabled\n defaultValue=\"a\"\n >\n <Radio.Item\n label=\"Option A\"\n description=\"This option is disabled.\"\n value=\"a\"\n />\n <Radio.Item\n label=\"Option B\"\n description=\"This option is disabled.\"\n value=\"b\"\n />\n </Radio.Group>\n <Radio.Group\n legend=\"Individual disabled card\"\n appearance=\"card\"\n defaultValue=\"available\"\n >\n <Radio.Item\n label=\"Available\"\n description=\"This option can be selected.\"\n value=\"available\"\n />\n <Radio.Item\n label=\"Unavailable\"\n description=\"This option is not available.\"\n value=\"unavailable\"\n disabled\n />\n </Radio.Group>\n </div>",
3789
+ "<Radio.Group legend=\"Preferences\" controlPosition=\"end\" defaultValue=\"a\">\n <Radio.Item label=\"Label before radio\" value=\"a\" />\n <Radio.Item label=\"Another option\" value=\"b\" />\n </Radio.Group>",
3790
+ "<Radio.Group\n legend=\"Choose a plan\"\n appearance=\"card\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item\n label=\"Free\"\n description=\"For personal or hobby projects that aren't business-critical.\"\n value=\"free\"\n />\n <Radio.Item\n label=\"Pro\"\n description=\"For professional websites that aren't business-critical.\"\n value=\"pro\"\n />\n <Radio.Item\n label=\"Business\"\n description=\"For small businesses operating online.\"\n value=\"business\"\n />\n <Radio.Item\n label=\"Contract\"\n description=\"For mission-critical applications that are core to your business.\"\n value=\"contract\"\n />\n </Radio.Group>",
3791
+ "<Radio.Group\n legend=\"Choose a plan\"\n appearance=\"card\"\n orientation=\"horizontal\"\n value={value}\n onValueChange={setValue}\n >\n <Radio.Item\n label=\"Free\"\n description=\"For personal or hobby projects that aren't business-critical.\"\n value=\"free\"\n />\n <Radio.Item\n label=\"Pro\"\n description=\"For professional websites that aren't business-critical.\"\n value=\"pro\"\n />\n <Radio.Item\n label=\"Business\"\n description=\"For small businesses operating online.\"\n value=\"business\"\n />\n <Radio.Item\n label=\"Contract\"\n description=\"For mission-critical applications that are core to your business.\"\n value=\"contract\"\n />\n </Radio.Group>"
3769
3792
  ],
3770
3793
  "colors": [
3771
3794
  "bg-kumo-base",
3772
3795
  "bg-kumo-contrast",
3796
+ "bg-kumo-tint",
3797
+ "border-kumo-danger",
3798
+ "border-kumo-interact",
3773
3799
  "border-kumo-line",
3800
+ "border-kumo-ring",
3774
3801
  "ring-kumo-danger",
3775
3802
  "ring-kumo-line",
3776
3803
  "ring-kumo-ring",
@@ -3864,6 +3891,8 @@
3864
3891
  "<Select aria-label=\"Loading select\" className=\"w-[200px]\" loading />",
3865
3892
  "<Select\n label=\"Assignee\"\n className=\"w-[200px]\"\n loading={loading}\n value={value}\n onValueChange={(v) => setValue(v as string | null)}\n placeholder=\"Select assignee\"\n items={items}\n />",
3866
3893
  "<Select\n label=\"Visible Columns\"\n className=\"w-[250px]\"\n multiple\n renderValue={(value) => {\n if (value.length > 3) {\n return (\n <span className=\"line-clamp-1\">\n {value.slice(0, 2).join(\", \") + ` and ${value.length - 2} more`}\n </span>\n );\n }\n return <span>{value.join(\", \")}</span>;\n }}\n value={value}\n onValueChange={(v) => setValue(v as string[])}\n >\n <Select.Option value=\"Name\">Name</Select.Option>\n <Select.Option value=\"Location\">Location</Select.Option>\n <Select.Option value=\"Size\">Size</Select.Option>\n <Select.Option value=\"Read\">Read</Select.Option>\n <Select.Option value=\"Write\">Write</Select.Option>\n <Select.Option value=\"CreatedAt\">Created At</Select.Option>\n </Select>",
3894
+ "<Select\n label=\"Compliance Frameworks\"\n className=\"w-[280px]\"\n multiple\n value={value}\n onValueChange={(v) => setValue(v as string[])}\n >\n <Select.Option value=\"European Union Privacy Regulation\">\n European Union Privacy Regulation\n </Select.Option>\n <Select.Option value=\"California Consumer Protection Act\">\n California Consumer Protection Act\n </Select.Option>\n <Select.Option value=\"Health Insurance Portability Act\">\n Health Insurance Portability Act\n </Select.Option>\n <Select.Option value=\"Payment Card Industry Standard\">\n Payment Card Industry Standard\n </Select.Option>\n </Select>",
3895
+ "<Select\n label=\"Issue Types\"\n className=\"w-[220px]\"\n multiple\n renderValue={(selected) => (\n <span className=\"flex items-center gap-2\">\n <span>Issue Types</span>\n {selected.length > 0 && (\n <Badge variant=\"secondary\">{selected.length}</Badge>\n )}\n </span>\n )}\n value={value}\n onValueChange={(v) => setValue(v as string[])}\n >\n {allOptions.map((option) => (\n <Select.Option key={option.value} value={option.value}>\n {option.label}\n </Select.Option>\n ))}\n </Select>",
3867
3896
  "<Select\n label=\"Author\"\n description=\"Select the primary author for this document\"\n className=\"w-[200px]\"\n onValueChange={(v) => setValue(v as (typeof authors)[0] | null)}\n value={value}\n isItemEqualToValue={(item, value) => item?.id === value?.id}\n renderValue={(author) => {\n return author?.name ?? \"Select an author\";\n }}\n >\n {authors.map((author) => (\n <Select.Option key={author.id} value={author}>\n <div className=\"flex w-[300px] items-center justify-between gap-2\">\n <Text>{author.name}</Text>\n <Text variant=\"secondary\">{author.title}</Text>\n </div>\n </Select.Option>\n ))}\n </Select>"
3868
3897
  ],
3869
3898
  "colors": [
@@ -4102,17 +4131,14 @@
4102
4131
  "variant": {
4103
4132
  "type": "enum",
4104
4133
  "optional": true,
4105
- "description": "Visual variant: \"default\" or \"error\" for validation failures (visual only, no error text)",
4134
+ "description": "Visual variant: \"default\" (pill, brand color) or \"neutral\" (squircle, monochrome)",
4106
4135
  "values": [
4107
4136
  "default",
4108
- "error"
4137
+ "neutral"
4109
4138
  ],
4110
4139
  "descriptions": {
4111
- "default": "Default switch appearance",
4112
- "error": "Error state for validation failures"
4113
- },
4114
- "classes": {
4115
- "error": "ring-kumo-danger"
4140
+ "default": "Default switch with squircle shape and brand blue color",
4141
+ "neutral": "Monochrome switch with squircle shape for subtle toggles"
4116
4142
  },
4117
4143
  "default": "default"
4118
4144
  },
@@ -4211,16 +4237,15 @@
4211
4237
  "<Switch label=\"Switch\" checked={checked} onCheckedChange={setChecked} />",
4212
4238
  "<Switch label=\"Switch\" checked={false} onCheckedChange={() => {}} />",
4213
4239
  "<Switch label=\"Switch\" checked={true} onCheckedChange={() => {}} />",
4214
- "<Switch label=\"Disabled\" checked={false} disabled />"
4240
+ "<Switch label=\"Disabled\" checked={false} disabled />",
4241
+ "<Switch\n label=\"Neutral switch\"\n variant=\"neutral\"\n checked={checked}\n onCheckedChange={setChecked}\n />",
4242
+ "<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Neutral off\"\n variant=\"neutral\"\n checked={false}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral on\"\n variant=\"neutral\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral disabled\"\n variant=\"neutral\"\n checked={false}\n disabled\n />\n </div>",
4243
+ "<div className=\"flex flex-col gap-4\">\n <Switch\n label=\"Default variant\"\n checked={true}\n onCheckedChange={() => {}}\n />\n <Switch\n label=\"Neutral variant\"\n variant=\"neutral\"\n checked={true}\n onCheckedChange={() => {}}\n />\n </div>"
4215
4244
  ],
4216
4245
  "colors": [
4217
- "bg-kumo-brand",
4218
- "bg-kumo-brand-hover",
4219
- "bg-kumo-danger",
4220
- "bg-kumo-interact",
4221
- "bg-kumo-recessed",
4246
+ "bg-kumo-base",
4222
4247
  "border-kumo-line",
4223
- "ring-kumo-danger",
4248
+ "ring-kumo-line",
4224
4249
  "text-kumo-danger",
4225
4250
  "text-kumo-default",
4226
4251
  "text-kumo-subtle"
@@ -4708,7 +4733,8 @@
4708
4733
  "examples": [
4709
4734
  "<TooltipProvider>\n <Tooltip content=\"Add new item\" asChild>\n <Button shape=\"square\" icon={PlusIcon} aria-label=\"Add new item\" />\n </Tooltip>\n </TooltipProvider>",
4710
4735
  "<TooltipProvider>\n <Tooltip content=\"Add\" asChild>\n <Button shape=\"square\" icon={PlusIcon} aria-label=\"Add\" />\n </Tooltip>\n </TooltipProvider>",
4711
- "<TooltipProvider>\n <div className=\"flex gap-2\">\n <Tooltip content=\"Add\" asChild>\n <Button shape=\"square\" icon={PlusIcon} aria-label=\"Add\" />\n </Tooltip>\n <Tooltip content=\"Change language\" asChild>\n <Button\n shape=\"square\"\n icon={TranslateIcon}\n aria-label=\"Change language\"\n />\n </Tooltip>\n </div>\n </TooltipProvider>"
4736
+ "<TooltipProvider>\n <div className=\"flex gap-2\">\n <Tooltip content=\"Add\" asChild>\n <Button shape=\"square\" icon={PlusIcon} aria-label=\"Add\" />\n </Tooltip>\n <Tooltip content=\"Change language\" asChild>\n <Button\n shape=\"square\"\n icon={TranslateIcon}\n aria-label=\"Change language\"\n />\n </Tooltip>\n </div>\n </TooltipProvider>",
4737
+ "<TooltipProvider>\n <Tooltip\n content=\"Click to learn more\"\n className=\"inline-flex items-center gap-1.5 rounded-full bg-kumo-brand px-3 py-1.5 text-sm font-medium text-white shadow-md transition-transform hover:scale-105 active:scale-95\"\n >\n <Info className=\"size-4\" />\n <span>Help</span>\n </Tooltip>\n </TooltipProvider>"
4712
4738
  ],
4713
4739
  "colors": [
4714
4740
  "bg-kumo-base",
@@ -1209,7 +1209,7 @@ Combobox — autocomplete input with filterable dropdown list. Compound compone
1209
1209
 
1210
1210
  **Colors (kumo tokens used):**
1211
1211
 
1212
- `bg-kumo-control`, `bg-kumo-fill-hover`, `bg-kumo-overlay`, `border-kumo-line`, `fill-kumo-ring`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
1212
+ `bg-kumo-control`, `bg-kumo-fill-hover`, `bg-kumo-overlay`, `border-kumo-line`, `ring-kumo-line`, `text-kumo-default`, `text-kumo-strong`, `text-kumo-subtle`
1213
1213
 
1214
1214
  **Sub-Components:**
1215
1215
 
@@ -3815,6 +3815,13 @@ Radio — radio button group for single-select choices. Compound component: `Ra
3815
3815
  Child Radio.Item components
3816
3816
  - `orientation`: enum
3817
3817
  Layout direction of the radio items
3818
+ - `appearance`: enum [default: default]
3819
+ - `"default"`: Standard inline radio item
3820
+ - `"card"`: Choice card appearance with border, padding, and highlighted selection state
3821
+
3822
+ **State Classes:**
3823
+ - `"card"`:
3824
+ - `hover`: `hover:bg-kumo-tint`
3818
3825
  - `error`: string
3819
3826
  Error message for the group
3820
3827
  - `description`: ReactNode
@@ -3824,7 +3831,7 @@ Radio — radio button group for single-select choices. Compound component: `Ra
3824
3831
  - `disabled`: boolean
3825
3832
  Whether all radios in the group are disabled
3826
3833
  - `controlPosition`: enum
3827
- Position of radio control relative to label: "start" (default) puts radio before label, "end" puts label before radio
3834
+ Position of radio control relative to label: "start" (default) puts radio before label, "end" puts label before radio. Note: In card appearance, the control is always positioned at the end.
3828
3835
  - `name`: string
3829
3836
  Form submission name for the radio group
3830
3837
  - `className`: string
@@ -3832,7 +3839,7 @@ Radio — radio button group for single-select choices. Compound component: `Ra
3832
3839
 
3833
3840
  **Colors (kumo tokens used):**
3834
3841
 
3835
- `bg-kumo-base`, `bg-kumo-contrast`, `border-kumo-line`, `ring-kumo-danger`, `ring-kumo-line`, `ring-kumo-ring`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
3842
+ `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`
3836
3843
 
3837
3844
  **Examples:**
3838
3845
 
@@ -3875,18 +3882,37 @@ Radio — radio button group for single-select choices. Compound component: `Ra
3875
3882
  ```
3876
3883
 
3877
3884
  ```tsx
3878
- <Radio.Group
3879
- legend="Payment method"
3880
- error="Please select a payment method to continue"
3881
- >
3882
- <Radio.Item label="Credit Card" value="card" variant="error" />
3883
- <Radio.Item label="PayPal" value="paypal" variant="error" />
3884
- <Radio.Item label="Bank Transfer" value="bank" variant="error" />
3885
- </Radio.Group>
3885
+ <div className="grid grid-cols-2 gap-6">
3886
+ <Radio.Group
3887
+ legend="Payment method"
3888
+ error="Please select a payment method to continue"
3889
+ >
3890
+ <Radio.Item label="Credit Card" value="card" variant="error" />
3891
+ <Radio.Item label="PayPal" value="paypal" variant="error" />
3892
+ </Radio.Group>
3893
+ <Radio.Group
3894
+ legend="Payment method"
3895
+ appearance="card"
3896
+ error="Please select a payment method to continue"
3897
+ >
3898
+ <Radio.Item
3899
+ label="Credit Card"
3900
+ description="Pay with Visa, Mastercard, American Express, or Elo."
3901
+ value="card"
3902
+ variant="error"
3903
+ />
3904
+ <Radio.Item
3905
+ label="PayPal"
3906
+ description="Pay with your PayPal account."
3907
+ value="paypal"
3908
+ variant="error"
3909
+ />
3910
+ </Radio.Group>
3911
+ </div>
3886
3912
  ```
3887
3913
 
3888
3914
  ```tsx
3889
- <div className="flex flex-col gap-6">
3915
+ <div className="grid grid-cols-2 gap-6">
3890
3916
  <Radio.Group legend="Disabled group" disabled defaultValue="a">
3891
3917
  <Radio.Item label="Option A" value="a" />
3892
3918
  <Radio.Item label="Option B" value="b" />
@@ -3895,6 +3921,40 @@ Radio — radio button group for single-select choices. Compound component: `Ra
3895
3921
  <Radio.Item label="Available" value="available" />
3896
3922
  <Radio.Item label="Unavailable" value="unavailable" disabled />
3897
3923
  </Radio.Group>
3924
+ <Radio.Group
3925
+ legend="Disabled card group"
3926
+ appearance="card"
3927
+ disabled
3928
+ defaultValue="a"
3929
+ >
3930
+ <Radio.Item
3931
+ label="Option A"
3932
+ description="This option is disabled."
3933
+ value="a"
3934
+ />
3935
+ <Radio.Item
3936
+ label="Option B"
3937
+ description="This option is disabled."
3938
+ value="b"
3939
+ />
3940
+ </Radio.Group>
3941
+ <Radio.Group
3942
+ legend="Individual disabled card"
3943
+ appearance="card"
3944
+ defaultValue="available"
3945
+ >
3946
+ <Radio.Item
3947
+ label="Available"
3948
+ description="This option can be selected."
3949
+ value="available"
3950
+ />
3951
+ <Radio.Item
3952
+ label="Unavailable"
3953
+ description="This option is not available."
3954
+ value="unavailable"
3955
+ disabled
3956
+ />
3957
+ </Radio.Group>
3898
3958
  </div>
3899
3959
  ```
3900
3960
 
@@ -3905,6 +3965,67 @@ Radio — radio button group for single-select choices. Compound component: `Ra
3905
3965
  </Radio.Group>
3906
3966
  ```
3907
3967
 
3968
+ ```tsx
3969
+ <Radio.Group
3970
+ legend="Choose a plan"
3971
+ appearance="card"
3972
+ value={value}
3973
+ onValueChange={setValue}
3974
+ >
3975
+ <Radio.Item
3976
+ label="Free"
3977
+ description="For personal or hobby projects that aren't business-critical."
3978
+ value="free"
3979
+ />
3980
+ <Radio.Item
3981
+ label="Pro"
3982
+ description="For professional websites that aren't business-critical."
3983
+ value="pro"
3984
+ />
3985
+ <Radio.Item
3986
+ label="Business"
3987
+ description="For small businesses operating online."
3988
+ value="business"
3989
+ />
3990
+ <Radio.Item
3991
+ label="Contract"
3992
+ description="For mission-critical applications that are core to your business."
3993
+ value="contract"
3994
+ />
3995
+ </Radio.Group>
3996
+ ```
3997
+
3998
+ ```tsx
3999
+ <Radio.Group
4000
+ legend="Choose a plan"
4001
+ appearance="card"
4002
+ orientation="horizontal"
4003
+ value={value}
4004
+ onValueChange={setValue}
4005
+ >
4006
+ <Radio.Item
4007
+ label="Free"
4008
+ description="For personal or hobby projects that aren't business-critical."
4009
+ value="free"
4010
+ />
4011
+ <Radio.Item
4012
+ label="Pro"
4013
+ description="For professional websites that aren't business-critical."
4014
+ value="pro"
4015
+ />
4016
+ <Radio.Item
4017
+ label="Business"
4018
+ description="For small businesses operating online."
4019
+ value="business"
4020
+ />
4021
+ <Radio.Item
4022
+ label="Contract"
4023
+ description="For mission-critical applications that are core to your business."
4024
+ value="contract"
4025
+ />
4026
+ </Radio.Group>
4027
+ ```
4028
+
3908
4029
 
3909
4030
  ---
3910
4031
 
@@ -4087,6 +4208,53 @@ Option sub-component
4087
4208
  </Select>
4088
4209
  ```
4089
4210
 
4211
+ ```tsx
4212
+ <Select
4213
+ label="Compliance Frameworks"
4214
+ className="w-[280px]"
4215
+ multiple
4216
+ value={value}
4217
+ onValueChange={(v) => setValue(v as string[])}
4218
+ >
4219
+ <Select.Option value="European Union Privacy Regulation">
4220
+ European Union Privacy Regulation
4221
+ </Select.Option>
4222
+ <Select.Option value="California Consumer Protection Act">
4223
+ California Consumer Protection Act
4224
+ </Select.Option>
4225
+ <Select.Option value="Health Insurance Portability Act">
4226
+ Health Insurance Portability Act
4227
+ </Select.Option>
4228
+ <Select.Option value="Payment Card Industry Standard">
4229
+ Payment Card Industry Standard
4230
+ </Select.Option>
4231
+ </Select>
4232
+ ```
4233
+
4234
+ ```tsx
4235
+ <Select
4236
+ label="Issue Types"
4237
+ className="w-[220px]"
4238
+ multiple
4239
+ renderValue={(selected) => (
4240
+ <span className="flex items-center gap-2">
4241
+ <span>Issue Types</span>
4242
+ {selected.length > 0 && (
4243
+ <Badge variant="secondary">{selected.length}</Badge>
4244
+ )}
4245
+ </span>
4246
+ )}
4247
+ value={value}
4248
+ onValueChange={(v) => setValue(v as string[])}
4249
+ >
4250
+ {allOptions.map((option) => (
4251
+ <Select.Option key={option.value} value={option.value}>
4252
+ {option.label}
4253
+ </Select.Option>
4254
+ ))}
4255
+ </Select>
4256
+ ```
4257
+
4090
4258
  ```tsx
4091
4259
  <Select
4092
4260
  label="Author"
@@ -4316,8 +4484,8 @@ Switch component
4316
4484
  **Props:**
4317
4485
 
4318
4486
  - `variant`: enum [default: default]
4319
- - `"default"`: Default switch appearance
4320
- - `"error"`: Error state for validation failures
4487
+ - `"default"`: Default switch with squircle shape and brand blue color
4488
+ - `"neutral"`: Monochrome switch with squircle shape for subtle toggles
4321
4489
  - `label`: ReactNode
4322
4490
  Label content for the switch (Field wrapper is built-in) - can be a string or any React node. Optional when used standalone for visual-only purposes.
4323
4491
  - `labelTooltip`: ReactNode
@@ -4345,7 +4513,7 @@ Switch component
4345
4513
 
4346
4514
  **Colors (kumo tokens used):**
4347
4515
 
4348
- `bg-kumo-brand`, `bg-kumo-brand-hover`, `bg-kumo-danger`, `bg-kumo-interact`, `bg-kumo-recessed`, `border-kumo-line`, `ring-kumo-danger`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
4516
+ `bg-kumo-base`, `border-kumo-line`, `ring-kumo-line`, `text-kumo-danger`, `text-kumo-default`, `text-kumo-subtle`
4349
4517
 
4350
4518
  **Sub-Components:**
4351
4519
 
@@ -4379,6 +4547,54 @@ Props:
4379
4547
  <Switch label="Disabled" checked={false} disabled />
4380
4548
  ```
4381
4549
 
4550
+ ```tsx
4551
+ <Switch
4552
+ label="Neutral switch"
4553
+ variant="neutral"
4554
+ checked={checked}
4555
+ onCheckedChange={setChecked}
4556
+ />
4557
+ ```
4558
+
4559
+ ```tsx
4560
+ <div className="flex flex-col gap-4">
4561
+ <Switch
4562
+ label="Neutral off"
4563
+ variant="neutral"
4564
+ checked={false}
4565
+ onCheckedChange={() => {}}
4566
+ />
4567
+ <Switch
4568
+ label="Neutral on"
4569
+ variant="neutral"
4570
+ checked={true}
4571
+ onCheckedChange={() => {}}
4572
+ />
4573
+ <Switch
4574
+ label="Neutral disabled"
4575
+ variant="neutral"
4576
+ checked={false}
4577
+ disabled
4578
+ />
4579
+ </div>
4580
+ ```
4581
+
4582
+ ```tsx
4583
+ <div className="flex flex-col gap-4">
4584
+ <Switch
4585
+ label="Default variant"
4586
+ checked={true}
4587
+ onCheckedChange={() => {}}
4588
+ />
4589
+ <Switch
4590
+ label="Neutral variant"
4591
+ variant="neutral"
4592
+ checked={true}
4593
+ onCheckedChange={() => {}}
4594
+ />
4595
+ </div>
4596
+ ```
4597
+
4382
4598
 
4383
4599
  ---
4384
4600
 
@@ -5041,6 +5257,18 @@ Accessible popup that shows additional information on hover/focus. Wrap your app
5041
5257
  </TooltipProvider>
5042
5258
  ```
5043
5259
 
5260
+ ```tsx
5261
+ <TooltipProvider>
5262
+ <Tooltip
5263
+ content="Click to learn more"
5264
+ className="inline-flex items-center gap-1.5 rounded-full bg-kumo-brand px-3 py-1.5 text-sm font-medium text-white shadow-md transition-transform hover:scale-105 active:scale-95"
5265
+ >
5266
+ <Info className="size-4" />
5267
+ <span>Help</span>
5268
+ </Tooltip>
5269
+ </TooltipProvider>
5270
+ ```
5271
+
5044
5272
 
5045
5273
  ---
5046
5274
 
package/ai/schemas.ts CHANGED
@@ -606,11 +606,12 @@ export const RadioPropsSchema = z.object({
606
606
  legend: z.string(), // Legend text for the group (required for accessibility)
607
607
  children: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Child Radio.Item components
608
608
  orientation: z.enum(["vertical", "horizontal"]).optional(), // Layout direction of the radio items
609
+ appearance: z.enum(["default", "card"]).optional(), // Visual appearance applied to all Radio.Item children. - `"default"` — Standard inline radio items - `"card"` — Choice card with border, padding, and highlighted selection state Individual items can override this with their own `appearance` prop.
609
610
  error: z.string().optional(), // Error message for the group
610
611
  description: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Helper text for the group
611
612
  value: z.string().optional(), // Value of the radio that should be selected (controlled)
612
613
  disabled: z.boolean().optional(), // Whether all radios in the group are disabled
613
- controlPosition: z.enum(["start", "end"]).optional(), // Position of radio control relative to label: "start" (default) puts radio before label, "end" puts label before radio
614
+ controlPosition: z.enum(["start", "end"]).optional(), // Position of radio control relative to label: "start" (default) puts radio before label, "end" puts label before radio. Note: In card appearance, the control is always positioned at the end.
614
615
  name: z.string().optional(), // Form submission name for the radio group
615
616
  className: z.string().optional(), // Additional CSS classes
616
617
  });
@@ -665,7 +666,7 @@ export const SurfacePropsSchema = z.object({
665
666
  });
666
667
 
667
668
  export const SwitchPropsSchema = z.object({
668
- variant: z.enum(["default", "error"]).optional(), // Visual variant: "default" or "error" for validation failures (visual only, no error text)
669
+ variant: z.enum(["default", "neutral"]).optional(), // Visual variant: "default" (pill, brand color) or "neutral" (squircle, monochrome)
669
670
  label: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Label content for the switch (Field wrapper is built-in) - can be a string or any React node. Optional when used standalone for visual-only purposes.
670
671
  labelTooltip: z.union([z.string(), z.number(), z.boolean(), z.null(), DynamicValueSchema]).optional(), // Tooltip content to display next to the label via an info icon
671
672
  required: z.boolean().optional(), // Whether the switch is required. When explicitly false, shows "(optional)" text after the label.
@@ -1 +1 @@
1
- 1773669446441
1
+ 1773854944431
@@ -828,6 +828,10 @@ export declare const RadioPropsSchema: z.ZodObject<{
828
828
  horizontal: "horizontal";
829
829
  vertical: "vertical";
830
830
  }>>;
831
+ appearance: z.ZodOptional<z.ZodEnum<{
832
+ default: "default";
833
+ card: "card";
834
+ }>>;
831
835
  error: z.ZodOptional<z.ZodString>;
832
836
  description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodObject<{
833
837
  path: z.ZodString;
@@ -916,7 +920,7 @@ export declare const SurfacePropsSchema: z.ZodObject<{
916
920
  export declare const SwitchPropsSchema: z.ZodObject<{
917
921
  variant: z.ZodOptional<z.ZodEnum<{
918
922
  default: "default";
919
- error: "error";
923
+ neutral: "neutral";
920
924
  }>>;
921
925
  label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodObject<{
922
926
  path: z.ZodString;
@@ -1806,6 +1810,10 @@ export declare const ComponentPropsSchemas: {
1806
1810
  horizontal: "horizontal";
1807
1811
  vertical: "vertical";
1808
1812
  }>>;
1813
+ appearance: z.ZodOptional<z.ZodEnum<{
1814
+ default: "default";
1815
+ card: "card";
1816
+ }>>;
1809
1817
  error: z.ZodOptional<z.ZodString>;
1810
1818
  description: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodObject<{
1811
1819
  path: z.ZodString;
@@ -1894,7 +1902,7 @@ export declare const ComponentPropsSchemas: {
1894
1902
  readonly Switch: z.ZodObject<{
1895
1903
  variant: z.ZodOptional<z.ZodEnum<{
1896
1904
  default: "default";
1897
- error: "error";
1905
+ neutral: "neutral";
1898
1906
  }>>;
1899
1907
  label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull, z.ZodObject<{
1900
1908
  path: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../ai/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../ai/schemas.ts"],"names":[],"mappings":"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"}