@cloudflare/kumo 1.4.0 → 1.5.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.
- package/CHANGELOG.md +19 -0
- package/README.md +15 -7
- package/ai/component-registry.json +45 -127
- package/ai/component-registry.md +95 -100
- package/ai/schemas.ts +5 -4
- package/dist/.build-complete +1 -1
- package/dist/button-Bh96oxRL.js.map +1 -1
- package/dist/catalog.js +1 -1
- package/dist/{checkbox-C1LPq8eL.js → checkbox-CWANiedi.js} +3 -3
- package/dist/{checkbox-C1LPq8eL.js.map → checkbox-CWANiedi.js.map} +1 -1
- package/dist/{clipboard-text-CJSI9X2m.js → clipboard-text-CqueQiB8.js} +2 -2
- package/dist/{clipboard-text-CJSI9X2m.js.map → clipboard-text-CqueQiB8.js.map} +1 -1
- package/dist/{combobox-CWxn5aHA.js → combobox-C9koouxM.js} +4 -4
- package/dist/{combobox-CWxn5aHA.js.map → combobox-C9koouxM.js.map} +1 -1
- package/dist/command-line/cli.js +5 -5
- package/dist/command-line/commands/doc.js +3 -3
- package/dist/command-line/commands/ls.js +2 -2
- package/dist/{command-palette-J50WKjS7.js → command-palette-TGXgr6Vq.js} +2 -2
- package/dist/{command-palette-J50WKjS7.js.map → command-palette-TGXgr6Vq.js.map} +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/clipboard-text.js +1 -1
- package/dist/components/combobox.js +1 -1
- package/dist/components/command-palette.js +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/input.js +8 -7
- package/dist/components/label.js +1 -1
- package/dist/components/link.js +1 -1
- package/dist/components/menubar.js +1 -1
- package/dist/components/meter.js +1 -1
- package/dist/components/pagination.js +1 -1
- package/dist/components/popover.js +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/select.js +1 -1
- package/dist/components/sensitive-input.js +1 -1
- package/dist/components/switch.js +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/toast.js +5 -4
- package/dist/components/tooltip.js +1 -1
- package/dist/dialog-CpCeOqSZ.js +97 -0
- package/dist/dialog-CpCeOqSZ.js.map +1 -0
- package/dist/{dropdown-BAyk1knz.js → dropdown-DFeFcKfn.js} +3 -3
- package/dist/{dropdown-BAyk1knz.js.map → dropdown-DFeFcKfn.js.map} +1 -1
- package/dist/{field-B7ORz5ej.js → field-Dt-XuSaQ.js} +3 -3
- package/dist/{field-B7ORz5ej.js.map → field-Dt-XuSaQ.js.map} +1 -1
- package/dist/index.js +106 -104
- package/dist/{input-D6YgDfDG.js → input-GZAWBXYX.js} +3 -3
- package/dist/{input-D6YgDfDG.js.map → input-GZAWBXYX.js.map} +1 -1
- package/dist/{input-area-DN_Ncliw.js → input-area-CS1-ceY4.js} +21 -19
- package/dist/input-area-CS1-ceY4.js.map +1 -0
- package/dist/{input-group-BXzBwH4p.js → input-group-COo-wz5O.js} +2 -2
- package/dist/{input-group-BXzBwH4p.js.map → input-group-COo-wz5O.js.map} +1 -1
- package/dist/label-ChZ2Pp5p.js +58 -0
- package/dist/label-ChZ2Pp5p.js.map +1 -0
- package/dist/{link-CcuZKqob.js → link-Mj2WM1AS.js} +2 -2
- package/dist/{link-CcuZKqob.js.map → link-Mj2WM1AS.js.map} +1 -1
- package/dist/{menubar-CzimiryS.js → menubar-CbXWXQYR.js} +2 -2
- package/dist/{menubar-CzimiryS.js.map → menubar-CbXWXQYR.js.map} +1 -1
- package/dist/{meter-BrJnHJ3Q.js → meter-Bu5f3mAc.js} +2 -2
- package/dist/{meter-BrJnHJ3Q.js.map → meter-Bu5f3mAc.js.map} +1 -1
- package/dist/{pagination-D0x9KQSk.js → pagination-Bm8eMWpj.js} +2 -2
- package/dist/{pagination-D0x9KQSk.js.map → pagination-Bm8eMWpj.js.map} +1 -1
- package/dist/{popover-CtKDH8Yc.js → popover-D7yeRosi.js} +2 -2
- package/dist/{popover-CtKDH8Yc.js.map → popover-D7yeRosi.js.map} +1 -1
- package/dist/primitives/accordion.js +1 -1
- package/dist/primitives/alert-dialog.js +1 -1
- package/dist/primitives/autocomplete.js +1 -1
- package/dist/primitives/avatar.js +1 -1
- package/dist/primitives/button.js +1 -1
- package/dist/primitives/checkbox-group.js +1 -1
- package/dist/primitives/checkbox.js +1 -1
- package/dist/primitives/collapsible.js +1 -1
- package/dist/primitives/combobox.js +1 -1
- package/dist/primitives/context-menu.js +1 -1
- package/dist/primitives/dialog.js +1 -1
- package/dist/primitives/direction-provider.js +1 -1
- package/dist/primitives/field.js +1 -1
- package/dist/primitives/fieldset.js +1 -1
- package/dist/primitives/form.js +1 -1
- package/dist/primitives/input.js +1 -1
- package/dist/primitives/menu.js +1 -1
- package/dist/primitives/menubar.js +1 -1
- package/dist/primitives/meter.js +1 -1
- package/dist/primitives/navigation-menu.js +1 -1
- package/dist/primitives/number-field.js +1 -1
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/preview-card.js +1 -1
- package/dist/primitives/progress.js +1 -1
- package/dist/primitives/radio-group.js +1 -1
- package/dist/primitives/radio.js +1 -1
- package/dist/primitives/scroll-area.js +1 -1
- package/dist/primitives/select.js +1 -1
- package/dist/primitives/separator.js +1 -1
- package/dist/primitives/slider.js +1 -1
- package/dist/primitives/switch.js +1 -1
- package/dist/primitives/tabs.js +1 -1
- package/dist/primitives/toast.js +1 -1
- package/dist/primitives/toggle-group.js +1 -1
- package/dist/primitives/toggle.js +1 -1
- package/dist/primitives/toolbar.js +1 -1
- package/dist/primitives/tooltip.js +1 -1
- package/dist/primitives.js +1 -1
- package/dist/{radio-CYejLANA.js → radio-CKn09bGo.js} +2 -2
- package/dist/{radio-CYejLANA.js.map → radio-CKn09bGo.js.map} +1 -1
- package/dist/{schemas-DCw6TIy0.js → schemas-B-D2OT-O.js} +7 -8
- package/dist/{schemas-DCw6TIy0.js.map → schemas-B-D2OT-O.js.map} +1 -1
- package/dist/{select-D4rKQAax.js → select-DvpgiOau.js} +3 -3
- package/dist/{select-D4rKQAax.js.map → select-DvpgiOau.js.map} +1 -1
- package/dist/{sensitive-input-DYvAmxkN.js → sensitive-input-BuYT6U6C.js} +4 -4
- package/dist/{sensitive-input-DYvAmxkN.js.map → sensitive-input-BuYT6U6C.js.map} +1 -1
- package/dist/src/components/button/button.d.ts +20 -12
- package/dist/src/components/button/button.d.ts.map +1 -1
- package/dist/src/components/dialog/dialog.d.ts +54 -13
- package/dist/src/components/dialog/dialog.d.ts.map +1 -1
- package/dist/src/components/dialog/index.d.ts +1 -1
- package/dist/src/components/dialog/index.d.ts.map +1 -1
- package/dist/src/components/input/index.d.ts +1 -1
- package/dist/src/components/input/index.d.ts.map +1 -1
- package/dist/src/components/input/input-area.d.ts +19 -0
- package/dist/src/components/input/input-area.d.ts.map +1 -1
- package/dist/src/components/label/label.d.ts +5 -3
- package/dist/src/components/label/label.d.ts.map +1 -1
- package/dist/src/components/toast/index.d.ts +1 -1
- package/dist/src/components/toast/index.d.ts.map +1 -1
- package/dist/src/components/toast/toast.d.ts +2 -0
- package/dist/src/components/toast/toast.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/styles/kumo-standalone.css +1 -1
- package/dist/{switch-z7FE1nQE.js → switch-Tu34uFoa.js} +3 -3
- package/dist/{switch-z7FE1nQE.js.map → switch-Tu34uFoa.js.map} +1 -1
- package/dist/{table-Sd2Etb1N.js → table-BUmvaBj8.js} +2 -2
- package/dist/{table-Sd2Etb1N.js.map → table-BUmvaBj8.js.map} +1 -1
- package/dist/{tabs-DAEeuQLd.js → tabs-B7THfqHW.js} +2 -2
- package/dist/{tabs-DAEeuQLd.js.map → tabs-B7THfqHW.js.map} +1 -1
- package/dist/{toast-B8ebpHaU.js → toast-Du4y8qng.js} +16 -14
- package/dist/{toast-B8ebpHaU.js.map → toast-Du4y8qng.js.map} +1 -1
- package/dist/{tooltip-C4DRhJi1.js → tooltip-BxV1H6AV.js} +2 -2
- package/dist/{tooltip-C4DRhJi1.js.map → tooltip-BxV1H6AV.js.map} +1 -1
- package/dist/{vendor-base-ui-kX0wjdav.js → vendor-base-ui-CQ6wEonS.js} +5 -5
- package/dist/{vendor-base-ui-kX0wjdav.js.map → vendor-base-ui-CQ6wEonS.js.map} +1 -1
- package/package.json +2 -2
- package/scripts/component-registry/index.ts +68 -12
- package/dist/dialog-x9n9wI13.js +0 -77
- package/dist/dialog-x9n9wI13.js.map +0 -1
- package/dist/input-area-DN_Ncliw.js.map +0 -1
- package/dist/label-B4FY8MX_.js +0 -50
- package/dist/label-B4FY8MX_.js.map +0 -1
package/dist/primitives/field.js
CHANGED
package/dist/primitives/form.js
CHANGED
package/dist/primitives/input.js
CHANGED
package/dist/primitives/menu.js
CHANGED
package/dist/primitives/meter.js
CHANGED
package/dist/primitives/radio.js
CHANGED
package/dist/primitives/tabs.js
CHANGED
package/dist/primitives/toast.js
CHANGED
package/dist/primitives.js
CHANGED
|
@@ -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-
|
|
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-CQ6wEonS.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, b6 as A, b7 as y } from "./vendor-base-ui-
|
|
5
|
+
import { R as k, N as I, O as w, b6 as A, b7 as y } from "./vendor-base-ui-CQ6wEonS.js";
|
|
6
6
|
const j = {
|
|
7
7
|
variant: {
|
|
8
8
|
default: {
|
|
@@ -122,4 +122,4 @@ export {
|
|
|
122
122
|
G as b,
|
|
123
123
|
V as r
|
|
124
124
|
};
|
|
125
|
-
//# sourceMappingURL=radio-
|
|
125
|
+
//# sourceMappingURL=radio-CKn09bGo.js.map
|
|
@@ -1 +1 @@
|
|
|
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\n/** Radio variant definitions mapping variant names to their Tailwind classes. */\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 /**\n * Visual variant.\n * - `\"default\"` — Standard radio appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\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/**\n * Radio — radio button group for single-select choices.\n *\n * Compound component: `Radio.Group` (with built-in Fieldset) and `Radio.Item`.\n * Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.\n *\n * @example\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 */\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":";;;;;AAOO,MAAMA,IAAsB;AAAA,EACjC,SAAS;AAAA,IACP,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,IAEf,OAAO;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GAEaC,IAA8B;AAAA,EACzC,SAAS;AACX;AAeO,SAASC,EAAc;AAAA,EAC5B,SAAAC,IAAUF,EAA4B;AACxC,IAA4B,IAAI;AAC9B,SAAOG,EAAGJ,EAAoB,QAAQG,CAAO,EAAE,OAAO;AACxD;AASA,MAAME,IAAoBC,EAEvB;AAAA,EACD,iBAAiB;AACnB,CAAC,GAgHKC,IAAYC;AAAA,EAChB,CAAC,EAAE,WAAAC,GAAW,UAAAC,GAAU,SAAAP,IAAU,WAAW,OAAAQ,GAAO,OAAAC,EAAA,GAASC,MAAQ;AACnE,UAAM,EAAE,iBAAAC,EAAA,IAAoBC,EAAWV,CAAiB;AAExD,WACE,gBAAAW;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWZ;AAAA,UACT;AAAA;AAAA;AAAA,UAGAU,MAAoB,SAAS;AAAA,UAC7BJ,IAAW,kCAAkC;AAAA,UAC7CD;AAAA,QAAA;AAAA,QAGF,UAAA;AAAA,UAAA,gBAAAQ;AAAA,YAACC;AAAAA,YAAA;AAAA,cACC,KAAAL;AAAA,cACA,OAAAD;AAAA,cACA,UAAAF;AAAA,cACA,WAAWN;AAAA,gBACT;AAAA,gBACAD,MAAY,UAAU,qBAAqB;AAAA,gBAC3C,CAACO,KACC;AAAA,gBACF;AAAA,cAAA;AAAA,cAGF,UAAA,gBAAAO,EAACE,GAAA,EAAoB,WAAU,oCAC7B,UAAA,gBAAAF,EAAC,QAAA,EAAK,WAAU,oCAAA,CAAoC,EAAA,CACtD;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAAA,EAAC,QAAA,EAAK,WAAU,2CAA2C,UAAAN,EAAA,CAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGvE;AACF;AAEAJ,EAAU,cAAc;AAGxB,SAASa,EAAW;AAAA,EAClB,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,OAAAd;AAAA,EACA,eAAAe;AAAA,EACA,UAAAjB;AAAA,EACA,iBAAAI,IAAkB;AAAA,EAClB,MAAAc;AAAA,EACA,WAAAnB;AACF,GAAoB;AAClB,2BACGJ,EAAkB,UAAlB,EAA2B,OAAO,EAAE,iBAAAS,KACnC,UAAA,gBAAAG;AAAA,IAACY;AAAAA,IAAA;AAAA,MACC,cAAAH;AAAA,MACA,OAAAd;AAAA,MACA,eAAe,CAACkB,MAAaH,IAAgBG,CAAkB;AAAA,MAC/D,UAAApB;AAAA,MACA,MAAAkB;AAAA,MAEA,UAAA,gBAAAZ;AAAA,QAACe;AAAAA,QAAA;AAAA,UACC,WAAW3B;AAAA,YACT;AAAA,YACAK;AAAA,UAAA;AAAA,UAGF,UAAA;AAAA,YAAA,gBAAAQ,EAACe,GAAA,EAAgB,WAAU,yCACxB,UAAAX,GACH;AAAA,YACA,gBAAAJ;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWb;AAAA,kBACT;AAAA,kBACAmB,MAAgB,aAAa,aAAa;AAAA,gBAAA;AAAA,gBAG3C,UAAAD;AAAA,cAAA;AAAA,YAAA;AAAA,YAEFE,KAAS,gBAAAP,EAAC,KAAA,EAAE,WAAU,4BAA4B,UAAAO,GAAM;AAAA,YACxDC,KAAe,gBAAAR,EAAC,KAAA,EAAE,WAAU,4BAA4B,UAAAQ,EAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACvE;AAAA,EAAA,GAEJ;AAEJ;AAEAL,EAAW,cAAc;AAoBlB,MAAMa,IAAQ;AAAA,EACnB,MAAM1B;AAAA,EACN,OAAOa;AACT;"}
|
|
1
|
+
{"version":3,"file":"radio-CKn09bGo.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\n/** Radio variant definitions mapping variant names to their Tailwind classes. */\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 /**\n * Visual variant.\n * - `\"default\"` — Standard radio appearance\n * - `\"error\"` — Error state for validation failures\n * @default \"default\"\n */\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/**\n * Radio — radio button group for single-select choices.\n *\n * Compound component: `Radio.Group` (with built-in Fieldset) and `Radio.Item`.\n * Built on `@base-ui/react/radio-group` + `@base-ui/react/radio`.\n *\n * @example\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 */\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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"}
|
|
@@ -3030,18 +3030,15 @@ const g = k([
|
|
|
3030
3030
|
className: c().optional()
|
|
3031
3031
|
// Additional CSS classes merged via `cn()`.
|
|
3032
3032
|
}), Sa = b({
|
|
3033
|
+
shape: v(["base", "square", "circle"]).optional(),
|
|
3034
|
+
size: v(["xs", "sm", "base", "lg"]).optional(),
|
|
3035
|
+
variant: v(["primary", "secondary", "ghost", "destructive", "secondary-destructive", "outline"]).optional(),
|
|
3033
3036
|
children: k([c(), y(), h(), w(), g]).optional(),
|
|
3034
3037
|
className: c().optional(),
|
|
3035
3038
|
icon: k([c(), y(), h(), w(), g]).optional(),
|
|
3036
3039
|
// Icon from `@phosphor-icons/react` or a React element. Rendered before children.
|
|
3037
3040
|
loading: h().optional(),
|
|
3038
3041
|
// Shows a loading spinner and disables interaction.
|
|
3039
|
-
shape: v(["base", "square", "circle"]).optional(),
|
|
3040
|
-
// Button shape. - `"base"` — Default rectangular button - `"square"` — Square button for icon-only actions - `"circle"` — Circular button for icon-only actions
|
|
3041
|
-
size: v(["xs", "sm", "base", "lg"]).optional(),
|
|
3042
|
-
// Button size. - `"xs"` — Extra small for compact UIs - `"sm"` — Small for secondary actions - `"base"` — Default size - `"lg"` — Large for primary CTAs
|
|
3043
|
-
variant: v(["primary", "secondary", "ghost", "destructive", "secondary-destructive", "outline"]).optional(),
|
|
3044
|
-
// Visual style of the button. - `"primary"` — High-emphasis, brand-colored for primary actions - `"secondary"` — Default style with border for most actions - `"ghost"` — Minimal, no background for tertiary actions - `"destructive"` — Danger button for destructive actions - `"secondary-destructive"` — Secondary style with destructive text - `"outline"` — Bordered with transparent background
|
|
3045
3042
|
id: c().optional(),
|
|
3046
3043
|
lang: c().optional(),
|
|
3047
3044
|
title: c().optional(),
|
|
@@ -3475,8 +3472,10 @@ const g = k([
|
|
|
3475
3472
|
// Tooltip content displayed next to the label via an info icon.
|
|
3476
3473
|
className: c().optional(),
|
|
3477
3474
|
// Additional CSS classes merged via `cn()`.
|
|
3475
|
+
htmlFor: c().optional(),
|
|
3476
|
+
// The id of the form element this label is associated with
|
|
3478
3477
|
asContent: h().optional()
|
|
3479
|
-
// When
|
|
3478
|
+
// When true, only renders the inline content (indicators, tooltip) without the outer label element with font styling. Useful when composed inside another label element that already provides the text styling.
|
|
3480
3479
|
}), Ma = b({
|
|
3481
3480
|
children: k([c(), y(), h(), w(), g]).optional(),
|
|
3482
3481
|
className: c().optional()
|
|
@@ -3856,4 +3855,4 @@ export {
|
|
|
3856
3855
|
ls as validateElementProps,
|
|
3857
3856
|
ps as validateUITree
|
|
3858
3857
|
};
|
|
3859
|
-
//# sourceMappingURL=schemas-
|
|
3858
|
+
//# sourceMappingURL=schemas-B-D2OT-O.js.map
|