@cloudflare/kumo 1.1.0 → 1.2.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 (145) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +21 -0
  3. package/ai/component-registry.json +21 -2
  4. package/ai/component-registry.md +15 -2
  5. package/ai/schemas.ts +3 -1
  6. package/dist/.build-complete +1 -1
  7. package/dist/{breadcrumbs-B5SY2CWj.js → breadcrumbs-DyKi7BcP.js} +2 -2
  8. package/dist/{breadcrumbs-B5SY2CWj.js.map → breadcrumbs-DyKi7BcP.js.map} +1 -1
  9. package/dist/{button-E2-hZMZE.js → button-Bh96oxRL.js} +3 -3
  10. package/dist/{button-E2-hZMZE.js.map → button-Bh96oxRL.js.map} +1 -1
  11. package/dist/catalog.js +1 -1
  12. package/dist/{checkbox-BexIU_lZ.js → checkbox-C1LPq8eL.js} +3 -3
  13. package/dist/{checkbox-BexIU_lZ.js.map → checkbox-C1LPq8eL.js.map} +1 -1
  14. package/dist/{clipboard-text-BFHWMjmr.js → clipboard-text-CJSI9X2m.js} +3 -3
  15. package/dist/{clipboard-text-BFHWMjmr.js.map → clipboard-text-CJSI9X2m.js.map} +1 -1
  16. package/dist/{combobox-Dld0kS0U.js → combobox-CWxn5aHA.js} +4 -4
  17. package/dist/{combobox-Dld0kS0U.js.map → combobox-CWxn5aHA.js.map} +1 -1
  18. package/dist/command-line/cli.js +0 -0
  19. package/dist/command-line/commands/add.js +0 -0
  20. package/dist/command-line/commands/blocks.js +0 -0
  21. package/dist/command-line/commands/doc.js +0 -0
  22. package/dist/command-line/commands/init.js +0 -0
  23. package/dist/command-line/commands/ls.js +0 -0
  24. package/dist/{command-palette-BgQ680BG.js → command-palette-BxmGYxBv.js} +2 -2
  25. package/dist/{command-palette-BgQ680BG.js.map → command-palette-BxmGYxBv.js.map} +1 -1
  26. package/dist/components/breadcrumbs.js +1 -1
  27. package/dist/components/button.js +1 -1
  28. package/dist/components/checkbox.js +1 -1
  29. package/dist/components/clipboard-text.js +1 -1
  30. package/dist/components/combobox.js +1 -1
  31. package/dist/components/command-palette.js +1 -1
  32. package/dist/components/dialog.js +1 -1
  33. package/dist/components/dropdown.js +1 -1
  34. package/dist/components/empty.js +1 -1
  35. package/dist/components/field.js +1 -1
  36. package/dist/components/input.js +3 -3
  37. package/dist/components/label.js +1 -1
  38. package/dist/components/link.js +1 -1
  39. package/dist/components/menubar.js +1 -1
  40. package/dist/components/meter.js +1 -1
  41. package/dist/components/pagination.js +1 -1
  42. package/dist/components/popover.js +1 -1
  43. package/dist/components/radio.js +1 -1
  44. package/dist/components/select.js +1 -1
  45. package/dist/components/sensitive-input.js +1 -1
  46. package/dist/components/switch.js +1 -1
  47. package/dist/components/table.js +1 -1
  48. package/dist/components/tabs.js +1 -1
  49. package/dist/components/toast.js +6 -4
  50. package/dist/components/tooltip.js +1 -1
  51. package/dist/{dialog-B1TaN0oR.js → dialog-BxXPA2vI.js} +2 -2
  52. package/dist/{dialog-B1TaN0oR.js.map → dialog-BxXPA2vI.js.map} +1 -1
  53. package/dist/{dropdown-D0rhYKeG.js → dropdown-BAyk1knz.js} +7 -7
  54. package/dist/{dropdown-D0rhYKeG.js.map → dropdown-BAyk1knz.js.map} +1 -1
  55. package/dist/{empty-DzCqjea-.js → empty-D03cbzRS.js} +2 -2
  56. package/dist/{empty-DzCqjea-.js.map → empty-D03cbzRS.js.map} +1 -1
  57. package/dist/{field-V3J0Ql_V.js → field-B7ORz5ej.js} +3 -3
  58. package/dist/{field-V3J0Ql_V.js.map → field-B7ORz5ej.js.map} +1 -1
  59. package/dist/index.js +66 -65
  60. package/dist/{input-Dqvc2AB_.js → input-D6YgDfDG.js} +3 -3
  61. package/dist/{input-Dqvc2AB_.js.map → input-D6YgDfDG.js.map} +1 -1
  62. package/dist/{input-area-B9qajxvZ.js → input-area-DN_Ncliw.js} +10 -10
  63. package/dist/{input-area-B9qajxvZ.js.map → input-area-DN_Ncliw.js.map} +1 -1
  64. package/dist/{input-group-Bl6tgD5-.js → input-group-BXzBwH4p.js} +29 -29
  65. package/dist/{input-group-Bl6tgD5-.js.map → input-group-BXzBwH4p.js.map} +1 -1
  66. package/dist/{label-87HQArUG.js → label-B4FY8MX_.js} +2 -2
  67. package/dist/{label-87HQArUG.js.map → label-B4FY8MX_.js.map} +1 -1
  68. package/dist/{link-6TIZ4JIw.js → link-CcuZKqob.js} +8 -8
  69. package/dist/{link-6TIZ4JIw.js.map → link-CcuZKqob.js.map} +1 -1
  70. package/dist/{menubar-DLwLRFB1.js → menubar-CzimiryS.js} +2 -2
  71. package/dist/{menubar-DLwLRFB1.js.map → menubar-CzimiryS.js.map} +1 -1
  72. package/dist/{meter-DKUuvXxS.js → meter-BrJnHJ3Q.js} +2 -2
  73. package/dist/{meter-DKUuvXxS.js.map → meter-BrJnHJ3Q.js.map} +1 -1
  74. package/dist/{pagination-C4HQqodz.js → pagination-D0x9KQSk.js} +2 -2
  75. package/dist/{pagination-C4HQqodz.js.map → pagination-D0x9KQSk.js.map} +1 -1
  76. package/dist/{popover-DhdIqrP7.js → popover-BfGLC2s6.js} +4 -4
  77. package/dist/{popover-DhdIqrP7.js.map → popover-BfGLC2s6.js.map} +1 -1
  78. package/dist/primitives/accordion.js +1 -1
  79. package/dist/primitives/alert-dialog.js +1 -1
  80. package/dist/primitives/autocomplete.js +1 -1
  81. package/dist/primitives/avatar.js +1 -1
  82. package/dist/primitives/button.js +1 -1
  83. package/dist/primitives/checkbox-group.js +1 -1
  84. package/dist/primitives/checkbox.js +1 -1
  85. package/dist/primitives/collapsible.js +1 -1
  86. package/dist/primitives/combobox.js +1 -1
  87. package/dist/primitives/context-menu.js +1 -1
  88. package/dist/primitives/dialog.js +1 -1
  89. package/dist/primitives/direction-provider.js +1 -1
  90. package/dist/primitives/field.js +1 -1
  91. package/dist/primitives/fieldset.js +1 -1
  92. package/dist/primitives/form.js +1 -1
  93. package/dist/primitives/input.js +1 -1
  94. package/dist/primitives/menu.js +1 -1
  95. package/dist/primitives/menubar.js +1 -1
  96. package/dist/primitives/meter.js +1 -1
  97. package/dist/primitives/navigation-menu.js +1 -1
  98. package/dist/primitives/number-field.js +1 -1
  99. package/dist/primitives/popover.js +1 -1
  100. package/dist/primitives/preview-card.js +1 -1
  101. package/dist/primitives/progress.js +1 -1
  102. package/dist/primitives/radio-group.js +1 -1
  103. package/dist/primitives/radio.js +1 -1
  104. package/dist/primitives/scroll-area.js +1 -1
  105. package/dist/primitives/select.js +1 -1
  106. package/dist/primitives/separator.js +1 -1
  107. package/dist/primitives/slider.js +1 -1
  108. package/dist/primitives/switch.js +1 -1
  109. package/dist/primitives/tabs.js +1 -1
  110. package/dist/primitives/toast.js +1 -1
  111. package/dist/primitives/toggle-group.js +1 -1
  112. package/dist/primitives/toggle.js +1 -1
  113. package/dist/primitives/toolbar.js +1 -1
  114. package/dist/primitives/tooltip.js +1 -1
  115. package/dist/primitives.js +1 -1
  116. package/dist/{radio-BVAG7hNp.js → radio-CYejLANA.js} +6 -6
  117. package/dist/{radio-BVAG7hNp.js.map → radio-CYejLANA.js.map} +1 -1
  118. package/dist/{schemas-Cbid4MwW.js → schemas-C2YJKpDC.js} +5 -1
  119. package/dist/{schemas-Cbid4MwW.js.map → schemas-C2YJKpDC.js.map} +1 -1
  120. package/dist/{select-B5Vb3zou.js → select-D4rKQAax.js} +4 -4
  121. package/dist/{select-B5Vb3zou.js.map → select-D4rKQAax.js.map} +1 -1
  122. package/dist/{sensitive-input-D5HCV04N.js → sensitive-input-DYvAmxkN.js} +19 -19
  123. package/dist/{sensitive-input-D5HCV04N.js.map → sensitive-input-DYvAmxkN.js.map} +1 -1
  124. package/dist/src/components/toast/index.d.ts +2 -0
  125. package/dist/src/components/toast/index.d.ts.map +1 -1
  126. package/dist/src/components/toast/toast.d.ts +53 -3
  127. package/dist/src/components/toast/toast.d.ts.map +1 -1
  128. package/dist/src/index.d.ts +1 -1
  129. package/dist/src/index.d.ts.map +1 -1
  130. package/dist/styles/kumo-standalone.css +1 -1
  131. package/dist/{switch-D4duMhJ0.js → switch-z7FE1nQE.js} +3 -3
  132. package/dist/{switch-D4duMhJ0.js.map → switch-z7FE1nQE.js.map} +1 -1
  133. package/dist/{table-KuvHGpL8.js → table-Sd2Etb1N.js} +2 -2
  134. package/dist/{table-KuvHGpL8.js.map → table-Sd2Etb1N.js.map} +1 -1
  135. package/dist/{tabs-lQup-IbT.js → tabs-DAEeuQLd.js} +2 -2
  136. package/dist/{tabs-lQup-IbT.js.map → tabs-DAEeuQLd.js.map} +1 -1
  137. package/dist/toast-B8ebpHaU.js +248 -0
  138. package/dist/toast-B8ebpHaU.js.map +1 -0
  139. package/dist/{tooltip-DJWsDTWJ.js → tooltip-C4DRhJi1.js} +6 -6
  140. package/dist/{tooltip-DJWsDTWJ.js.map → tooltip-C4DRhJi1.js.map} +1 -1
  141. package/dist/{vendor-base-ui-DWIDNgE1.js → vendor-base-ui-kX0wjdav.js} +32 -31
  142. package/dist/{vendor-base-ui-DWIDNgE1.js.map → vendor-base-ui-kX0wjdav.js.map} +1 -1
  143. package/package.json +46 -46
  144. package/dist/toast-8YyyQuqZ.js +0 -69
  145. package/dist/toast-8YyyQuqZ.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { y as c } from "../vendor-base-ui-DWIDNgE1.js";
2
+ import { y as c } from "../vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  c as Switch
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { z as a } from "../vendor-base-ui-DWIDNgE1.js";
2
+ import { z as a } from "../vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  a as Tabs
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { i as s } from "../vendor-base-ui-DWIDNgE1.js";
2
+ import { i as s } from "../vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  s as Toast
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { T as r } from "../vendor-base-ui-DWIDNgE1.js";
2
+ import { T as r } from "../vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  r as ToggleGroup
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { A as g } from "../vendor-base-ui-DWIDNgE1.js";
2
+ import { A as g } from "../vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  g as Toggle
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { E as r } from "../vendor-base-ui-DWIDNgE1.js";
2
+ import { E as r } from "../vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  r as Toolbar
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { G as t } from "../vendor-base-ui-DWIDNgE1.js";
2
+ import { G as t } from "../vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  t as Tooltip
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { a as o, b as e, c as r, d as i, B as t, e as l, C as u, f as n, g as c, h as p, j as b, D as d, k as g, l as C, F as T, I as m, m as v, M as x, n as A, o as M, p as S, q as D, r as F, s as h, t as G, R as P, v as k, w, S as R, x as f, y as B, z as I, i as N, A as j, T as q, E as y, G as z, u as E } from "./vendor-base-ui-DWIDNgE1.js";
2
+ import { a as o, b as e, c as r, d as i, B as t, e as l, C as u, f as n, g as c, h as p, j as b, D as d, k as g, l as C, F as T, I as m, m as v, M as x, n as A, o as M, p as S, q as D, r as F, s as h, t as G, R as P, v as k, w, S as R, x as f, y as B, z as I, i as N, A as j, T as q, E as y, G as z, u as E } from "./vendor-base-ui-kX0wjdav.js";
3
3
  export {
4
4
  o as Accordion,
5
5
  e as AlertDialog,
@@ -2,7 +2,7 @@
2
2
  import { jsx as e, jsxs as c } from "react/jsx-runtime";
3
3
  import { forwardRef as h, createContext as N, useContext as b } from "react";
4
4
  import { c as t } from "./cn-Bhsu1vx2.js";
5
- import { R as k, N as I, O as w, bf as A, bg as y } from "./vendor-base-ui-DWIDNgE1.js";
5
+ import { R as k, N as I, O as w, b6 as A, b7 as y } from "./vendor-base-ui-kX0wjdav.js";
6
6
  const j = {
7
7
  variant: {
8
8
  default: {
@@ -71,18 +71,18 @@ function m({
71
71
  value: l,
72
72
  onValueChange: f,
73
73
  disabled: p,
74
- controlPosition: g = "start",
75
- name: x,
74
+ controlPosition: x = "start",
75
+ name: g,
76
76
  className: R
77
77
  }) {
78
- return /* @__PURE__ */ e(u.Provider, { value: { controlPosition: g }, children: /* @__PURE__ */ e(
78
+ return /* @__PURE__ */ e(u.Provider, { value: { controlPosition: x }, children: /* @__PURE__ */ e(
79
79
  k,
80
80
  {
81
81
  defaultValue: n,
82
82
  value: l,
83
83
  onValueChange: (v) => f?.(v),
84
84
  disabled: p,
85
- name: x,
85
+ name: g,
86
86
  children: /* @__PURE__ */ c(
87
87
  I,
88
88
  {
@@ -122,4 +122,4 @@ export {
122
122
  G as b,
123
123
  V as r
124
124
  };
125
- //# sourceMappingURL=radio-BVAG7hNp.js.map
125
+ //# sourceMappingURL=radio-CYejLANA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"radio-BVAG7hNp.js","sources":["../src/components/radio/radio.tsx"],"sourcesContent":["import { forwardRef, createContext, useContext, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Fieldset } from \"@base-ui/react/fieldset\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\n\nexport const KUMO_RADIO_VARIANTS = {\n variant: {\n default: {\n classes: \"ring-kumo-line\",\n description: \"Default radio appearance\",\n },\n error: {\n classes: \"ring-destructive\",\n description: \"Error state for validation failures\",\n },\n },\n} as const;\n\nexport const KUMO_RADIO_DEFAULT_VARIANTS = {\n variant: \"default\",\n} as const;\n\n// Derived types from KUMO_RADIO_VARIANTS\nexport type KumoRadioVariant = keyof typeof KUMO_RADIO_VARIANTS.variant;\n\nexport interface KumoRadioVariantsProps {\n variant?: KumoRadioVariant;\n}\n\nexport function radioVariants({\n variant = KUMO_RADIO_DEFAULT_VARIANTS.variant,\n}: KumoRadioVariantsProps = {}) {\n return cn(KUMO_RADIO_VARIANTS.variant[variant].classes);\n}\n\n// Legacy type alias for backwards compatibility\nexport type RadioVariant = KumoRadioVariant;\n\n/** Position of the radio control relative to its label */\nexport type RadioControlPosition = \"start\" | \"end\";\n\n// Context for passing controlPosition from Group to Items\nconst RadioGroupContext = createContext<{\n controlPosition: RadioControlPosition;\n}>({\n controlPosition: \"start\",\n});\n\n/**\n * Radio group component props (with built-in Fieldset and RadioGroup)\n *\n * @example\n * // Basic usage\n * ```tsx\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Horizontal layout\n * ```tsx\n * <Radio.Group legend=\"Size\" orientation=\"horizontal\" defaultValue=\"md\">\n * <Radio.Item label=\"Small\" value=\"sm\" />\n * <Radio.Item label=\"Medium\" value=\"md\" />\n * <Radio.Item label=\"Large\" value=\"lg\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // With error and description\n * ```tsx\n * <Radio.Group\n * legend=\"Payment method\"\n * error=\"Please select a payment method\"\n * description=\"Choose how you'd like to pay\"\n * >\n * <Radio.Item label=\"Credit Card\" value=\"card\" />\n * <Radio.Item label=\"PayPal\" value=\"paypal\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Controlled\n * ```tsx\n * const [value, setValue] = useState(\"email\");\n * <Radio.Group legend=\"Contact\" value={value} onValueChange={setValue}>\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"Phone\" value=\"phone\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Label before radio (controlPosition=\"end\")\n * ```tsx\n * <Radio.Group legend=\"Options\" controlPosition=\"end\" defaultValue=\"a\">\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * <Radio.Item label=\"Option B\" value=\"b\" />\n * </Radio.Group>\n * ```\n */\nexport interface RadioGroupProps {\n /** Legend text for the group (required for accessibility) */\n legend: string;\n /** Child Radio.Item components */\n children: ReactNode;\n /** Layout direction of the radio items */\n orientation?: \"vertical\" | \"horizontal\";\n /** Error message for the group */\n error?: string;\n /** Helper text for the group */\n description?: ReactNode;\n /** Value of the radio that should be initially selected (uncontrolled) */\n defaultValue?: string;\n /** Value of the radio that should be selected (controlled) */\n value?: string;\n /** Event handler called when radio value changes */\n onValueChange?: (value: string) => void;\n /** Whether all radios in the group are disabled */\n disabled?: boolean;\n /** Position of radio control relative to label: \"start\" (default) puts radio before label, \"end\" puts label before radio */\n controlPosition?: RadioControlPosition;\n /** Form submission name for the radio group */\n name?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Individual radio item within a group\n *\n * @example\n * ```tsx\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * ```\n *\n * @example\n * // Disabled item\n * ```tsx\n * <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n * ```\n */\nexport type RadioItemProps = {\n /** Visual variant: \"default\" or \"error\" for validation failures */\n variant?: RadioVariant;\n /** Label text displayed next to radio (required) */\n label: string;\n /** Value of the radio (required) */\n value: string;\n /** Additional CSS classes for the label wrapper */\n className?: string;\n /** Whether the radio is disabled */\n disabled?: boolean;\n};\n\n// Radio.Item for use within Radio.Group\nconst RadioItem = forwardRef<HTMLButtonElement, RadioItemProps>(\n ({ className, disabled, variant = \"default\", label, value }, ref) => {\n const { controlPosition } = useContext(RadioGroupContext);\n\n return (\n <label\n className={cn(\n \"group relative inline-flex items-center gap-2\",\n // \"start\" (default): radio before label\n // \"end\": label before radio using flex-row-reverse\n controlPosition === \"end\" && \"flex-row-reverse justify-end\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <BaseRadio.Root\n ref={ref}\n value={value}\n disabled={disabled}\n className={cn(\n \"flex h-4 w-4 items-center justify-center rounded-full border-0 bg-kumo-base ring\",\n variant === \"error\" ? \"ring-kumo-danger\" : \"ring-kumo-line\",\n !disabled &&\n \"group-hover:ring-kumo-ring focus-visible:ring-kumo-ring focus-visible:outline-offset-3\",\n \"data-checked:bg-kumo-contrast\",\n )}\n >\n <BaseRadio.Indicator className=\"flex items-center justify-center\">\n <span className=\"h-2 w-2 rounded-full bg-kumo-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n <span className=\"text-base font-medium text-kumo-default\">{label}</span>\n </label>\n );\n },\n);\n\nRadioItem.displayName = \"Radio.Item\";\n\n// Radio.Group with built-in Fieldset and RadioGroup\nfunction RadioGroup({\n legend,\n children,\n orientation = \"vertical\",\n error,\n description,\n defaultValue,\n value,\n onValueChange,\n disabled,\n controlPosition = \"start\",\n name,\n className,\n}: RadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ controlPosition }}>\n <BaseRadioGroup\n defaultValue={defaultValue}\n value={value}\n onValueChange={(newValue) => onValueChange?.(newValue as string)}\n disabled={disabled}\n name={name}\n >\n <Fieldset.Root\n className={cn(\n \"flex flex-col gap-4 rounded-lg border border-kumo-line p-4\",\n className,\n )}\n >\n <Fieldset.Legend className=\"text-lg font-medium text-kumo-default\">\n {legend}\n </Fieldset.Legend>\n <div\n className={cn(\n \"flex gap-2\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n )}\n >\n {children}\n </div>\n {error && <p className=\"text-sm text-kumo-danger\">{error}</p>}\n {description && <p className=\"text-sm text-kumo-subtle\">{description}</p>}\n </Fieldset.Root>\n </BaseRadioGroup>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = \"Radio.Group\";\n\n// Export RadioGroup directly for external usage\nexport { RadioGroup };\n\n// Radio namespace object (not a component itself - use Radio.Group with Radio.Item)\nexport const Radio = {\n Item: RadioItem,\n Group: RadioGroup,\n};\n"],"names":["KUMO_RADIO_VARIANTS","KUMO_RADIO_DEFAULT_VARIANTS","radioVariants","variant","cn","RadioGroupContext","createContext","RadioItem","forwardRef","className","disabled","label","value","ref","controlPosition","useContext","jsxs","jsx","BaseRadio.Root","BaseRadio.Indicator","RadioGroup","legend","children","orientation","error","description","defaultValue","onValueChange","name","BaseRadioGroup","newValue","Fieldset.Root","Fieldset.Legend","Radio"],"mappings":"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"}
1
+ {"version":3,"file":"radio-CYejLANA.js","sources":["../src/components/radio/radio.tsx"],"sourcesContent":["import { forwardRef, createContext, useContext, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { Fieldset } from \"@base-ui/react/fieldset\";\nimport { RadioGroup as BaseRadioGroup } from \"@base-ui/react/radio-group\";\nimport { Radio as BaseRadio } from \"@base-ui/react/radio\";\n\nexport const KUMO_RADIO_VARIANTS = {\n variant: {\n default: {\n classes: \"ring-kumo-line\",\n description: \"Default radio appearance\",\n },\n error: {\n classes: \"ring-destructive\",\n description: \"Error state for validation failures\",\n },\n },\n} as const;\n\nexport const KUMO_RADIO_DEFAULT_VARIANTS = {\n variant: \"default\",\n} as const;\n\n// Derived types from KUMO_RADIO_VARIANTS\nexport type KumoRadioVariant = keyof typeof KUMO_RADIO_VARIANTS.variant;\n\nexport interface KumoRadioVariantsProps {\n variant?: KumoRadioVariant;\n}\n\nexport function radioVariants({\n variant = KUMO_RADIO_DEFAULT_VARIANTS.variant,\n}: KumoRadioVariantsProps = {}) {\n return cn(KUMO_RADIO_VARIANTS.variant[variant].classes);\n}\n\n// Legacy type alias for backwards compatibility\nexport type RadioVariant = KumoRadioVariant;\n\n/** Position of the radio control relative to its label */\nexport type RadioControlPosition = \"start\" | \"end\";\n\n// Context for passing controlPosition from Group to Items\nconst RadioGroupContext = createContext<{\n controlPosition: RadioControlPosition;\n}>({\n controlPosition: \"start\",\n});\n\n/**\n * Radio group component props (with built-in Fieldset and RadioGroup)\n *\n * @example\n * // Basic usage\n * ```tsx\n * <Radio.Group legend=\"Notification preference\" defaultValue=\"email\">\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"SMS\" value=\"sms\" />\n * <Radio.Item label=\"Push\" value=\"push\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Horizontal layout\n * ```tsx\n * <Radio.Group legend=\"Size\" orientation=\"horizontal\" defaultValue=\"md\">\n * <Radio.Item label=\"Small\" value=\"sm\" />\n * <Radio.Item label=\"Medium\" value=\"md\" />\n * <Radio.Item label=\"Large\" value=\"lg\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // With error and description\n * ```tsx\n * <Radio.Group\n * legend=\"Payment method\"\n * error=\"Please select a payment method\"\n * description=\"Choose how you'd like to pay\"\n * >\n * <Radio.Item label=\"Credit Card\" value=\"card\" />\n * <Radio.Item label=\"PayPal\" value=\"paypal\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Controlled\n * ```tsx\n * const [value, setValue] = useState(\"email\");\n * <Radio.Group legend=\"Contact\" value={value} onValueChange={setValue}>\n * <Radio.Item label=\"Email\" value=\"email\" />\n * <Radio.Item label=\"Phone\" value=\"phone\" />\n * </Radio.Group>\n * ```\n *\n * @example\n * // Label before radio (controlPosition=\"end\")\n * ```tsx\n * <Radio.Group legend=\"Options\" controlPosition=\"end\" defaultValue=\"a\">\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * <Radio.Item label=\"Option B\" value=\"b\" />\n * </Radio.Group>\n * ```\n */\nexport interface RadioGroupProps {\n /** Legend text for the group (required for accessibility) */\n legend: string;\n /** Child Radio.Item components */\n children: ReactNode;\n /** Layout direction of the radio items */\n orientation?: \"vertical\" | \"horizontal\";\n /** Error message for the group */\n error?: string;\n /** Helper text for the group */\n description?: ReactNode;\n /** Value of the radio that should be initially selected (uncontrolled) */\n defaultValue?: string;\n /** Value of the radio that should be selected (controlled) */\n value?: string;\n /** Event handler called when radio value changes */\n onValueChange?: (value: string) => void;\n /** Whether all radios in the group are disabled */\n disabled?: boolean;\n /** Position of radio control relative to label: \"start\" (default) puts radio before label, \"end\" puts label before radio */\n controlPosition?: RadioControlPosition;\n /** Form submission name for the radio group */\n name?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\n/**\n * Individual radio item within a group\n *\n * @example\n * ```tsx\n * <Radio.Item label=\"Option A\" value=\"a\" />\n * ```\n *\n * @example\n * // Disabled item\n * ```tsx\n * <Radio.Item label=\"Unavailable\" value=\"unavailable\" disabled />\n * ```\n */\nexport type RadioItemProps = {\n /** Visual variant: \"default\" or \"error\" for validation failures */\n variant?: RadioVariant;\n /** Label text displayed next to radio (required) */\n label: string;\n /** Value of the radio (required) */\n value: string;\n /** Additional CSS classes for the label wrapper */\n className?: string;\n /** Whether the radio is disabled */\n disabled?: boolean;\n};\n\n// Radio.Item for use within Radio.Group\nconst RadioItem = forwardRef<HTMLButtonElement, RadioItemProps>(\n ({ className, disabled, variant = \"default\", label, value }, ref) => {\n const { controlPosition } = useContext(RadioGroupContext);\n\n return (\n <label\n className={cn(\n \"group relative inline-flex items-center gap-2\",\n // \"start\" (default): radio before label\n // \"end\": label before radio using flex-row-reverse\n controlPosition === \"end\" && \"flex-row-reverse justify-end\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <BaseRadio.Root\n ref={ref}\n value={value}\n disabled={disabled}\n className={cn(\n \"flex h-4 w-4 items-center justify-center rounded-full border-0 bg-kumo-base ring\",\n variant === \"error\" ? \"ring-kumo-danger\" : \"ring-kumo-line\",\n !disabled &&\n \"group-hover:ring-kumo-ring focus-visible:ring-kumo-ring focus-visible:outline-offset-3\",\n \"data-checked:bg-kumo-contrast\",\n )}\n >\n <BaseRadio.Indicator className=\"flex items-center justify-center\">\n <span className=\"h-2 w-2 rounded-full bg-kumo-base\" />\n </BaseRadio.Indicator>\n </BaseRadio.Root>\n <span className=\"text-base font-medium text-kumo-default\">{label}</span>\n </label>\n );\n },\n);\n\nRadioItem.displayName = \"Radio.Item\";\n\n// Radio.Group with built-in Fieldset and RadioGroup\nfunction RadioGroup({\n legend,\n children,\n orientation = \"vertical\",\n error,\n description,\n defaultValue,\n value,\n onValueChange,\n disabled,\n controlPosition = \"start\",\n name,\n className,\n}: RadioGroupProps) {\n return (\n <RadioGroupContext.Provider value={{ controlPosition }}>\n <BaseRadioGroup\n defaultValue={defaultValue}\n value={value}\n onValueChange={(newValue) => onValueChange?.(newValue as string)}\n disabled={disabled}\n name={name}\n >\n <Fieldset.Root\n className={cn(\n \"flex flex-col gap-4 rounded-lg border border-kumo-line p-4\",\n className,\n )}\n >\n <Fieldset.Legend className=\"text-lg font-medium text-kumo-default\">\n {legend}\n </Fieldset.Legend>\n <div\n className={cn(\n \"flex gap-2\",\n orientation === \"vertical\" ? \"flex-col\" : \"flex-row flex-wrap\",\n )}\n >\n {children}\n </div>\n {error && <p className=\"text-sm text-kumo-danger\">{error}</p>}\n {description && <p className=\"text-sm text-kumo-subtle\">{description}</p>}\n </Fieldset.Root>\n </BaseRadioGroup>\n </RadioGroupContext.Provider>\n );\n}\n\nRadioGroup.displayName = \"Radio.Group\";\n\n// Export RadioGroup directly for external usage\nexport { RadioGroup };\n\n// Radio namespace object (not a component itself - use Radio.Group with Radio.Item)\nexport const Radio = {\n Item: RadioItem,\n Group: RadioGroup,\n};\n"],"names":["KUMO_RADIO_VARIANTS","KUMO_RADIO_DEFAULT_VARIANTS","radioVariants","variant","cn","RadioGroupContext","createContext","RadioItem","forwardRef","className","disabled","label","value","ref","controlPosition","useContext","jsxs","jsx","BaseRadio.Root","BaseRadio.Indicator","RadioGroup","legend","children","orientation","error","description","defaultValue","onValueChange","name","BaseRadioGroup","newValue","Fieldset.Root","Fieldset.Legend","Radio"],"mappings":"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"}
@@ -3385,7 +3385,11 @@ const m = y([
3385
3385
  children: y([c(), v(), d(), z(), m]).optional()
3386
3386
  // Child text content
3387
3387
  }), na = _({
3388
+ variant: k(["default", "error", "warning"]).optional(),
3389
+ className: c().optional(),
3390
+ // Additional CSS classes
3388
3391
  children: y([c(), v(), d(), z(), m]).optional()
3392
+ // Child elements
3389
3393
  }), oa = _({
3390
3394
  align: k(["start", "center", "end"]).optional(),
3391
3395
  asChild: d().optional(),
@@ -3536,4 +3540,4 @@ export {
3536
3540
  ua as validateElementProps,
3537
3541
  la as validateUITree
3538
3542
  };
3539
- //# sourceMappingURL=schemas-Cbid4MwW.js.map
3543
+ //# sourceMappingURL=schemas-C2YJKpDC.js.map