@wow-two-beta/ui 0.0.50 → 0.0.52
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/dist/actions/button/Button.d.ts +3 -2
- package/dist/actions/button/Button.d.ts.map +1 -1
- package/dist/actions/index.js +2 -2
- package/dist/actions/toggleButton/ToggleButton.d.ts +3 -1
- package/dist/actions/toggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/{chunk-23DELZVV.js → chunk-2YI5Y2U3.js} +3 -3
- package/dist/{chunk-23DELZVV.js.map → chunk-2YI5Y2U3.js.map} +1 -1
- package/dist/{chunk-VTVWJBOP.js → chunk-5QGU5FNP.js} +45 -33
- package/dist/chunk-5QGU5FNP.js.map +1 -0
- package/dist/{chunk-ZVOPRSED.js → chunk-EZ2NOHIL.js} +4 -4
- package/dist/{chunk-ZVOPRSED.js.map → chunk-EZ2NOHIL.js.map} +1 -1
- package/dist/{chunk-BEOOTUFV.js → chunk-FIZJCXNN.js} +4 -4
- package/dist/{chunk-BEOOTUFV.js.map → chunk-FIZJCXNN.js.map} +1 -1
- package/dist/{chunk-CWT5VEMU.js → chunk-MN46ESLR.js} +32 -23
- package/dist/chunk-MN46ESLR.js.map +1 -0
- package/dist/{chunk-BUWJN6SN.js → chunk-SA7OVNKQ.js} +10 -6
- package/dist/chunk-SA7OVNKQ.js.map +1 -0
- package/dist/{chunk-WU5JMO3N.js → chunk-TZETHHW5.js} +57 -39
- package/dist/chunk-TZETHHW5.js.map +1 -0
- package/dist/{chunk-3YNJTBYF.js → chunk-UJDAJMFJ.js} +7 -5
- package/dist/chunk-UJDAJMFJ.js.map +1 -0
- package/dist/{chunk-2TKPRR4X.js → chunk-V5RYX33D.js} +3 -3
- package/dist/{chunk-2TKPRR4X.js.map → chunk-V5RYX33D.js.map} +1 -1
- package/dist/{chunk-2CDU2ZKL.js → chunk-X5INLQTJ.js} +3 -3
- package/dist/{chunk-2CDU2ZKL.js.map → chunk-X5INLQTJ.js.map} +1 -1
- package/dist/{chunk-L235NITI.js → chunk-X7SQOMHC.js} +4 -4
- package/dist/chunk-X7SQOMHC.js.map +1 -0
- package/dist/display/index.js +3 -3
- package/dist/feedback/index.js +3 -3
- package/dist/forms/checkbox/Checkbox.d.ts +3 -2
- package/dist/forms/checkbox/Checkbox.d.ts.map +1 -1
- package/dist/forms/combobox/Combobox.d.ts.map +1 -1
- package/dist/forms/index.js +5 -5
- package/dist/forms/listbox/Listbox.d.ts +15 -8
- package/dist/forms/listbox/Listbox.d.ts.map +1 -1
- package/dist/forms/select/Select.d.ts +33 -26
- package/dist/forms/select/Select.d.ts.map +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/index.js +11 -11
- package/dist/layout/index.js +3 -3
- package/dist/layout/surface/Surface.d.ts +4 -10
- package/dist/layout/surface/Surface.d.ts.map +1 -1
- package/dist/nav/index.js +3 -3
- package/dist/nav/navigationMenu/NavigationMenu.d.ts.map +1 -1
- package/dist/overlays/hoverCard/HoverCard.d.ts.map +1 -1
- package/dist/overlays/index.js +2 -2
- package/dist/overlays/popover/Popover.d.ts +2 -8
- package/dist/overlays/popover/Popover.d.ts.map +1 -1
- package/dist/utils/ColorExtensions.d.ts +39 -0
- package/dist/utils/ColorExtensions.d.ts.map +1 -0
- package/dist/utils/Equality.d.ts +9 -24
- package/dist/utils/Equality.d.ts.map +1 -1
- package/dist/utils/Layers.d.ts +16 -14
- package/dist/utils/Layers.d.ts.map +1 -1
- package/dist/utils/SurfaceStyles.d.ts +7 -0
- package/dist/utils/SurfaceStyles.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-3YNJTBYF.js.map +0 -1
- package/dist/chunk-BUWJN6SN.js.map +0 -1
- package/dist/chunk-CWT5VEMU.js.map +0 -1
- package/dist/chunk-L235NITI.js.map +0 -1
- package/dist/chunk-VTVWJBOP.js.map +0 -1
- package/dist/chunk-WU5JMO3N.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/forms/label/Label.tsx","../src/forms/formHelperText/FormHelperText.tsx","../src/forms/formErrorMessage/FormErrorMessage.tsx","../src/forms/fieldset/Fieldset.tsx","../src/forms/legend/Legend.tsx","../src/forms/InputStyles.ts","../src/forms/textInput/TextInput.tsx","../src/forms/emailInput/EmailInput.tsx","../src/forms/telInput/TelInput.tsx","../src/forms/urlInput/UrlInput.tsx","../src/forms/numberInput/NumberInput.tsx","../src/forms/passwordInput/PasswordInput.tsx","../src/forms/searchInput/SearchInput.tsx","../src/forms/textarea/Textarea.tsx","../src/forms/checkbox/Checkbox.variants.ts","../src/forms/checkbox/Checkbox.tsx","../src/forms/radio/Radio.tsx","../src/forms/switch/Switch.tsx","../src/forms/slider/Slider.tsx","../src/forms/formField/FormField.tsx","../src/forms/checkboxField/CheckboxField.tsx","../src/forms/radioField/RadioField.tsx","../src/forms/switchField/SwitchField.tsx","../src/forms/checkboxGroup/CheckboxGroup.tsx","../src/forms/radioGroup/RadioGroup.tsx","../src/forms/pinInput/PinInput.tsx","../src/forms/maskedInput/MaskedInput.tsx","../src/forms/currencyInput/CurrencyInput.tsx","../src/forms/percentInput/PercentInput.tsx","../src/forms/characterCount/CharacterCount.tsx","../src/forms/inputAddon/InputAddon.tsx","../src/forms/inputGroup/InputGroup.tsx","../src/forms/labeledInput/LabeledInput.tsx","../src/forms/choiceCard/ChoiceCard.tsx","../src/forms/passwordStrength/PasswordStrength.tsx","../src/forms/filePicker/FilePicker.tsx","../src/forms/listbox/Listbox.tsx","../src/forms/select/Select.variants.ts","../src/forms/select/Select.tsx","../src/forms/multiSelect/MultiSelect.tsx","../src/forms/combobox/Combobox.tsx","../src/forms/MonthGrid.tsx","../src/forms/calendar/Calendar.tsx","../src/forms/dateField/DateField.tsx","../src/forms/timeField/TimeField.tsx","../src/forms/rangeCalendar/RangeCalendar.tsx","../src/forms/datePicker/DatePicker.tsx","../src/forms/timePicker/TimePicker.tsx","../src/forms/dateRangePicker/DateRangePicker.tsx","../src/forms/colorSwatch/ColorSwatch.variants.ts","../src/forms/colorSwatch/ColorSwatch.tsx","../src/forms/ColorExtensions.ts","../src/forms/colorField/ColorField.tsx","../src/forms/colorSlider/ColorSlider.tsx","../src/forms/colorArea/ColorArea.tsx","../src/forms/colorWheel/ColorWheel.tsx","../src/forms/colorSwatchPicker/ColorSwatchPicker.tsx","../src/forms/colorPicker/ColorPicker.tsx","../src/forms/stepper/Stepper.tsx","../src/forms/tagsInput/TagsInput.tsx","../src/forms/fileUpload/FileUpload.tsx","../src/forms/editable/Editable.tsx","../src/forms/wizard/Wizard.tsx","../src/forms/codeEditor/CodeEditor.tsx","../src/forms/markdownEditor/MarkdownEditor.tsx","../src/forms/jsonEditor/JSONEditor.tsx","../src/forms/recurrenceEditor/RecurrenceEditor.tsx","../src/forms/knob/Knob.tsx","../src/forms/keyboardShortcutPicker/KeyboardShortcutPicker.tsx","../src/forms/iconPicker/IconPicker.tsx","../src/forms/fontPicker/FontPicker.tsx","../src/forms/cronInput/CronInput.tsx","../src/forms/gradientPicker/GradientPicker.tsx","../src/forms/addressForm/AddressForm.tsx","../src/forms/phoneInput/PhoneInput.tsx","../src/forms/emojiPicker/EmojiPicker.tsx","../src/forms/reactionPicker/ReactionPicker.tsx","../src/forms/chatComposer/ChatComposer.tsx"],"names":["forwardRef","jsx","jsxs","useRef","useImperativeHandle","useState","Minus","TRACK_CLASS","useId","Children","isValidElement","cloneElement","SIZE","Check","ListboxItem","createContext","useContext","useCallback","useMemo","SelectTrigger","X","SelectItem","useEffect","MultiSelectTrigger","ChevronDown","MultiSelectItem","ComboboxInput","ComboboxItem","Calendar","DateField","TimeField","RangeCalendar","DatePicker","CalendarIcon","defaultFormat","TimePicker","DateRangePicker","Fragment","ColorSwatch","ColorField","ColorSlider","ratio","ColorArea","ColorWheel","ColorPicker","value","Stepper","StepperList","StepperStep","StepperPanel","TagsInput","FileUpload","EditablePreview","EditableInput","EditableSubmit","EditableCancel","Wizard","next","WizardSteps","WizardStep","WizardFooter","CodeEditor","MarkdownEditor","JSONEditor","ChevronRight","RecurrenceEditor","Knob","KeyboardShortcutPicker","Clock","Code","Eye","Link2","Map","Plus","Search","Tag","Upload","IconPicker","FontPicker","CronInput","GradientPicker","Trash","AddressForm","PhoneInput","EmojiPicker","Send"],"mappings":"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","file":"chunk-5QGU5FNP.js","sourcesContent":["import { forwardRef, type LabelHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\n\nexport interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {\n /** Show a `*` indicator. Auto-derived from `FormControl.isRequired` when present. */\n required?: boolean;\n}\n\n/**\n * `<label>` wired to `FormControl` context — when wrapped in a `FormControl`\n * it auto-fills `htmlFor` and `id`. Standalone use: pass `htmlFor` directly.\n */\nexport const Label = forwardRef<HTMLLabelElement, LabelProps>(\n ({ className, required, htmlFor, id, children, ...props }, ref) => {\n const ctx = useFormControl();\n const isRequired = required ?? ctx?.isRequired ?? false;\n return (\n <label\n ref={ref}\n htmlFor={htmlFor ?? ctx?.id}\n id={id ?? ctx?.labelId}\n className={cn(\n 'text-sm font-medium text-foreground',\n ctx?.isDisabled && 'opacity-60',\n className,\n )}\n {...props}\n >\n {children}\n {isRequired && <span className=\"ml-0.5 text-destructive\" aria-hidden=\"true\">*</span>}\n </label>\n );\n },\n);\nLabel.displayName = 'Label';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\n\nexport type FormHelperTextProps = ComponentPropsWithoutRef<'p'>;\n\n/**\n * Helper / hint text below a form control. Reads `helperId` from\n * `FormControl` so the input can reference it via `aria-describedby`.\n */\nexport const FormHelperText = forwardRef<HTMLParagraphElement, FormHelperTextProps>(\n ({ className, id, ...props }, ref) => {\n const ctx = useFormControl();\n return (\n <p\n ref={ref}\n id={id ?? ctx?.helperId}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n },\n);\nFormHelperText.displayName = 'FormHelperText';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\n\nexport type FormErrorMessageProps = ComponentPropsWithoutRef<'p'>;\n\n/**\n * Error copy under a form control. Renders only when the surrounding\n * `FormControl` is `isInvalid`. `id={errorId}` for `aria-describedby` wiring.\n */\nexport const FormErrorMessage = forwardRef<HTMLParagraphElement, FormErrorMessageProps>(\n ({ className, id, ...props }, ref) => {\n const ctx = useFormControl();\n if (ctx && !ctx.isInvalid) return null;\n return (\n <p\n ref={ref}\n id={id ?? ctx?.errorId}\n role=\"alert\"\n className={cn('text-sm text-destructive', className)}\n {...props}\n />\n );\n },\n);\nFormErrorMessage.displayName = 'FormErrorMessage';\n","import { forwardRef, type FieldsetHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type FieldsetProps = FieldsetHTMLAttributes<HTMLFieldSetElement>;\n\n/**\n * Semantic `<fieldset>` for grouping related controls. Pair with `Legend`\n * for the group label.\n */\nexport const Fieldset = forwardRef<HTMLFieldSetElement, FieldsetProps>(\n ({ className, ...props }, ref) => (\n <fieldset\n ref={ref}\n className={cn('m-0 min-w-0 border-0 p-0', className)}\n {...props}\n />\n ),\n);\nFieldset.displayName = 'Fieldset';\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\n\nexport type LegendProps = HTMLAttributes<HTMLLegendElement>;\n\n/**\n * `<legend>` styled to match `Label`. Pair with `Fieldset`.\n */\nexport const Legend = forwardRef<HTMLLegendElement, LegendProps>(\n ({ className, ...props }, ref) => (\n <legend\n ref={ref}\n className={cn('mb-2 text-sm font-medium text-foreground', className)}\n {...props}\n />\n ),\n);\nLegend.displayName = 'Legend';\n","// Shared visual primitives for form atoms. Co-located in `forms/` so imports\n// stay within-domain (ESLint boundaries allow same-domain imports).\n\nimport { tv, type VariantProps } from '../utils';\n\nexport const inputBaseVariants = tv({\n base: 'flex w-full rounded-md border bg-popover text-foreground placeholder:text-subtle-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 read-only:bg-muted',\n variants: {\n size: {\n xs: 'h-7 px-2 text-xs',\n sm: 'h-8 px-2.5 text-sm',\n md: 'h-10 px-3 text-sm',\n lg: 'h-12 px-4 text-base',\n },\n state: {\n default: 'border-input hover:border-border-strong',\n invalid: 'border-destructive focus-visible:ring-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n state: 'default',\n },\n});\n\nexport type InputBaseVariants = VariantProps<typeof inputBaseVariants>;\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface TextInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n InputBaseVariants {}\n\n/**\n * Single-line text input. For email/tel/url/number/password/search variants\n * use the dedicated input component (each carries only the props/buttons it\n * actually needs).\n */\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(\n ({ className, size, state, id, disabled, required, readOnly, ...props }, ref) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n return (\n <input\n ref={ref}\n type=\"text\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(inputBaseVariants({ size, state: finalState }), className)}\n {...props}\n />\n );\n },\n);\nTextInput.displayName = 'TextInput';\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface EmailInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n InputBaseVariants {}\n\n/** `<input type=\"email\">` with sensible defaults (autocomplete, inputmode). */\nexport const EmailInput = forwardRef<HTMLInputElement, EmailInputProps>(\n ({ className, size, state, id, disabled, required, readOnly, ...props }, ref) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n return (\n <input\n ref={ref}\n type=\"email\"\n autoComplete=\"email\"\n inputMode=\"email\"\n spellCheck={false}\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(inputBaseVariants({ size, state: finalState }), className)}\n {...props}\n />\n );\n },\n);\nEmailInput.displayName = 'EmailInput';\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface TelInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n InputBaseVariants {}\n\n/** `<input type=\"tel\">` with `inputmode=\"tel\"` and `autocomplete=\"tel\"`. */\nexport const TelInput = forwardRef<HTMLInputElement, TelInputProps>(\n ({ className, size, state, id, disabled, required, readOnly, ...props }, ref) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n return (\n <input\n ref={ref}\n type=\"tel\"\n autoComplete=\"tel\"\n inputMode=\"tel\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(inputBaseVariants({ size, state: finalState }), className)}\n {...props}\n />\n );\n },\n);\nTelInput.displayName = 'TelInput';\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface UrlInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n InputBaseVariants {}\n\n/** `<input type=\"url\">` with `inputmode=\"url\"` and `autocomplete=\"url\"`. */\nexport const UrlInput = forwardRef<HTMLInputElement, UrlInputProps>(\n ({ className, size, state, id, disabled, required, readOnly, ...props }, ref) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n return (\n <input\n ref={ref}\n type=\"url\"\n autoComplete=\"url\"\n inputMode=\"url\"\n spellCheck={false}\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(inputBaseVariants({ size, state: finalState }), className)}\n {...props}\n />\n );\n },\n);\nUrlInput.displayName = 'UrlInput';\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type InputHTMLAttributes,\n} from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface NumberInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n InputBaseVariants {\n step?: number;\n}\n\n/**\n * Numeric input with stepper buttons. Steppers are raw `<button>` elements\n * to keep the strict atom rule (NumberInput is L3; importing Button would\n * make this an atom-on-atom composition).\n */\nexport const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(\n (\n { className, size, state, id, disabled, required, readOnly, step = 1, ...props },\n forwardedRef,\n ) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n const inputRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement);\n\n const adjust = (direction: 1 | -1) => {\n const el = inputRef.current;\n if (!el || typeof el.stepUp !== 'function') return;\n if (direction === 1) el.stepUp(step);\n else el.stepDown(step);\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n const isDisabled = disabled ?? ctx?.isDisabled ?? false;\n\n return (\n <div className={cn('relative', className)}>\n <input\n ref={inputRef}\n type=\"number\"\n inputMode=\"decimal\"\n step={step}\n id={id ?? ctx?.id}\n disabled={isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(inputBaseVariants({ size, state: finalState }), 'pr-12 [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none')}\n {...props}\n />\n <div className=\"absolute right-1 top-1/2 flex -translate-y-1/2 items-center\">\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => adjust(-1)}\n aria-label=\"Decrement\"\n className=\"grid h-7 w-6 place-items-center rounded text-muted-foreground hover:bg-muted disabled:opacity-50\"\n >\n <Icon icon={Minus} size={14} />\n </button>\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => adjust(1)}\n aria-label=\"Increment\"\n className=\"grid h-7 w-6 place-items-center rounded text-muted-foreground hover:bg-muted disabled:opacity-50\"\n >\n <Icon icon={Plus} size={14} />\n </button>\n </div>\n </div>\n );\n },\n);\nNumberInput.displayName = 'NumberInput';\n","import { forwardRef, useState, type InputHTMLAttributes } from 'react';\nimport { Eye, EyeOff } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface PasswordInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n InputBaseVariants {\n /** Whether to render the visibility-toggle button. Default true. */\n toggleable?: boolean;\n}\n\n/**\n * Password input with optional visibility toggle. Toggle is a raw `<button>`\n * to keep the strict atom rule.\n */\nexport const PasswordInput = forwardRef<HTMLInputElement, PasswordInputProps>(\n (\n {\n className,\n size,\n state,\n id,\n disabled,\n required,\n readOnly,\n toggleable = true,\n autoComplete = 'current-password',\n ...props\n },\n ref,\n ) => {\n const [visible, setVisible] = useState(false);\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n const isDisabled = disabled ?? ctx?.isDisabled ?? false;\n\n return (\n <div className={cn('relative', className)}>\n <input\n ref={ref}\n type={visible ? 'text' : 'password'}\n autoComplete={autoComplete}\n spellCheck={false}\n id={id ?? ctx?.id}\n disabled={isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(inputBaseVariants({ size, state: finalState }), toggleable && 'pr-10')}\n {...props}\n />\n {toggleable && (\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={() => setVisible((v) => !v)}\n aria-label={visible ? 'Hide password' : 'Show password'}\n aria-pressed={visible}\n className=\"absolute right-1 top-1/2 grid h-8 w-8 -translate-y-1/2 place-items-center rounded text-muted-foreground hover:bg-muted disabled:opacity-50\"\n >\n <Icon icon={visible ? EyeOff : Eye} size={16} />\n </button>\n )}\n </div>\n );\n },\n);\nPasswordInput.displayName = 'PasswordInput';\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n type InputHTMLAttributes,\n} from 'react';\nimport { Search, X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface SearchInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>,\n InputBaseVariants {\n /** Show a clear (×) button when the input has a value. Default true. */\n clearable?: boolean;\n onClear?: () => void;\n}\n\n/**\n * Search input with leading search icon and optional clear button.\n * Buttons are raw `<button>` elements to keep the strict atom rule.\n */\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n (\n {\n className,\n size,\n state,\n id,\n disabled,\n required,\n readOnly,\n clearable = true,\n onClear,\n onChange,\n defaultValue,\n value,\n ...props\n },\n forwardedRef,\n ) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n const isDisabled = disabled ?? ctx?.isDisabled ?? false;\n const inputRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement);\n const isControlled = value !== undefined;\n const [uncontrolled, setUncontrolled] = useState(defaultValue ?? '');\n const currentValue = isControlled ? value : uncontrolled;\n const showClear = clearable && String(currentValue ?? '').length > 0;\n\n const handleClear = () => {\n const el = inputRef.current;\n if (el) {\n const setter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value')\n ?.set;\n setter?.call(el, '');\n el.dispatchEvent(new Event('input', { bubbles: true }));\n el.focus();\n }\n if (!isControlled) setUncontrolled('');\n onClear?.();\n };\n\n return (\n <div className={cn('relative', className)}>\n <Icon\n icon={Search}\n size={16}\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-subtle-foreground\"\n />\n <input\n ref={inputRef}\n type=\"search\"\n id={id ?? ctx?.id}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? (defaultValue as string | number | undefined) : undefined}\n onChange={(e) => {\n if (!isControlled) setUncontrolled(e.target.value);\n onChange?.(e);\n }}\n disabled={isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(\n inputBaseVariants({ size, state: finalState }),\n 'pl-9',\n showClear && 'pr-9',\n '[&::-webkit-search-cancel-button]:appearance-none',\n )}\n {...props}\n />\n {showClear && (\n <button\n type=\"button\"\n disabled={isDisabled}\n onClick={handleClear}\n aria-label=\"Clear search\"\n className=\"absolute right-1 top-1/2 grid h-8 w-8 -translate-y-1/2 place-items-center rounded text-subtle-foreground hover:bg-muted hover:text-muted-foreground\"\n >\n <Icon icon={X} size={14} />\n </button>\n )}\n </div>\n );\n },\n);\nSearchInput.displayName = 'SearchInput';\n","import { forwardRef, type TextareaHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface TextareaProps\n extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>,\n InputBaseVariants {}\n\n/**\n * Multi-line text input. Inherits the input visual base. For autosize, pair\n * with a sibling-domain hook in v1 — kept simple at L3.\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n { className, size, state, id, disabled, required, readOnly, rows = 3, ...props },\n ref,\n ) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n return (\n <textarea\n ref={ref}\n rows={rows}\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(\n inputBaseVariants({ size, state: finalState }),\n 'h-auto resize-y py-2',\n className,\n )}\n {...props}\n />\n );\n },\n);\nTextarea.displayName = 'Textarea';\n","import { tv, type VariantProps } from '../../utils';\n\nexport const checkboxVariants = tv({\n base: 'pointer-events-none grid h-full w-full place-items-center rounded-sm border transition-colors peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-1 peer-disabled:opacity-50',\n variants: {\n variant: {\n solid: 'border-input bg-background',\n soft: 'border-transparent',\n outline: 'bg-transparent',\n ghost: 'border-transparent bg-transparent',\n glass: 'border-white/40 bg-black/40 backdrop-blur-sm',\n 'glass-surface': 'border-white/60 bg-black/40 backdrop-blur-sm',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n },\n compoundVariants: [\n // === SOLID × tone — bg-background unchecked → tone fill checked ===\n { variant: 'solid', tone: 'primary', class: 'text-primary-foreground peer-checked:border-primary peer-checked:bg-primary' },\n { variant: 'solid', tone: 'neutral', class: 'text-background peer-checked:border-foreground peer-checked:bg-foreground' },\n { variant: 'solid', tone: 'danger', class: 'text-destructive-foreground peer-checked:border-destructive peer-checked:bg-destructive' },\n { variant: 'solid', tone: 'success', class: 'text-success-foreground peer-checked:border-success peer-checked:bg-success' },\n { variant: 'solid', tone: 'warning', class: 'text-warning-foreground peer-checked:border-warning peer-checked:bg-warning' },\n\n // === SOFT × tone — soft bg unchecked → strong tone fill checked ===\n { variant: 'soft', tone: 'primary', class: 'bg-primary-soft text-primary-soft-foreground peer-checked:bg-primary peer-checked:text-primary-foreground' },\n { variant: 'soft', tone: 'neutral', class: 'bg-muted text-foreground peer-checked:bg-foreground peer-checked:text-background' },\n { variant: 'soft', tone: 'danger', class: 'bg-destructive-soft text-destructive-soft-foreground peer-checked:bg-destructive peer-checked:text-destructive-foreground' },\n { variant: 'soft', tone: 'success', class: 'bg-success-soft text-success-soft-foreground peer-checked:bg-success peer-checked:text-success-foreground' },\n { variant: 'soft', tone: 'warning', class: 'bg-warning-soft text-warning-soft-foreground peer-checked:bg-warning peer-checked:text-warning-foreground' },\n\n // === OUTLINE × tone — tone border unchecked → tone fill checked ===\n { variant: 'outline', tone: 'primary', class: 'border-primary text-primary peer-checked:bg-primary peer-checked:text-primary-foreground' },\n { variant: 'outline', tone: 'neutral', class: 'border-border-strong text-foreground peer-checked:bg-foreground peer-checked:text-background' },\n { variant: 'outline', tone: 'danger', class: 'border-destructive text-destructive peer-checked:bg-destructive peer-checked:text-destructive-foreground' },\n { variant: 'outline', tone: 'success', class: 'border-success text-success peer-checked:bg-success peer-checked:text-success-foreground' },\n { variant: 'outline', tone: 'warning', class: 'border-warning text-warning peer-checked:bg-warning peer-checked:text-warning-foreground' },\n\n // === GHOST × tone — no border/bg unchecked → tone-tinted bg + tone check checked ===\n { variant: 'ghost', tone: 'primary', class: 'text-primary peer-checked:bg-primary/10' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground peer-checked:bg-muted' },\n { variant: 'ghost', tone: 'danger', class: 'text-destructive peer-checked:bg-destructive/10' },\n { variant: 'ghost', tone: 'success', class: 'text-success peer-checked:bg-success/10' },\n { variant: 'ghost', tone: 'warning', class: 'text-warning peer-checked:bg-warning/10' },\n\n // === GLASS × tone — dark glass stays on check; only the white check icon appears (peer-checked:opacity-100 on Check). Tone is preserved as text-white throughout — bg doesn't swap, matching the photo-overlay aesthetic. ===\n { variant: 'glass', tone: 'primary', class: 'text-white' },\n { variant: 'glass', tone: 'neutral', class: 'text-white' },\n { variant: 'glass', tone: 'danger', class: 'text-white' },\n { variant: 'glass', tone: 'success', class: 'text-white' },\n { variant: 'glass', tone: 'warning', class: 'text-white' },\n\n // === GLASS-SURFACE × tone — same: dark glass + white check on check. Border emphasis (white/80) optional on check for stronger affordance. ===\n { variant: 'glass-surface', tone: 'primary', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'neutral', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'danger', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'success', class: 'text-white peer-checked:border-white/80' },\n { variant: 'glass-surface', tone: 'warning', class: 'text-white peer-checked:border-white/80' },\n ],\n defaultVariants: {\n variant: 'solid',\n tone: 'primary',\n },\n});\n\nexport type CheckboxVariants = VariantProps<typeof checkboxVariants>;\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { Check, Minus } from 'lucide-react';\nimport { cn, ColorExtensions, CssExtensions, type ColorProp, type ColorTone, type SizePreset, type SizeUnion } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { checkboxVariants, type CheckboxVariants } from './Checkbox.variants';\n\nconst COMPONENT_NAME = 'Checkbox';\n\n/* Checkbox supports the 5-preset core (skips `2xl` — outsized for a form control). */\ntype CheckboxSizePreset = Extract<SizePreset, 'xs' | 'sm' | 'md' | 'lg' | 'xl'>;\nconst CHECKBOX_SIZE_PRESETS: ReadonlySet<string> = new Set<CheckboxSizePreset>([\n 'xs', 'sm', 'md', 'lg', 'xl',\n]);\n\n/* Outer wrapper box dim per preset. */\nconst BOX_SIZE_CLASS: Record<CheckboxSizePreset, string> = {\n xs: 'h-3.5 w-3.5', // 14px — dense / mobile-tight (consumer must ensure ≥24px hit target via wrapping label)\n sm: 'h-4 w-4', // 16px\n md: 'h-5 w-5', // 20px (default)\n lg: 'h-6 w-6', // 24px (WCAG-compliant standalone)\n xl: 'h-7 w-7', // 28px (emphasis / a11y-first)\n};\n\n/* Inner icon dim per preset — scales proportionally to box. */\nconst ICON_SIZE_CLASS: Record<CheckboxSizePreset, string> = {\n xs: 'h-2.5 w-2.5',\n sm: 'h-3 w-3',\n md: 'h-3.5 w-3.5',\n lg: 'h-4 w-4',\n xl: 'h-5 w-5',\n};\n\n/* Fallback icon dim when raw/object size used — middle of scale. */\nconst DEFAULT_ICON_CLASS = 'h-3 w-3';\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'color'>,\n CheckboxVariants {\n /* Size: preset (`xs|sm|md|lg|xl`) → box + icon scale · raw number/string → square inline · object → explicit dims. See `SizeUnion`. */\n size?: SizeUnion<CheckboxSizePreset>;\n\n /* Tristate visual — input stays `checked={false}` but renders as a dash with the same checked-state styling. */\n indeterminate?: boolean;\n\n /* Per-instance color override (string seed or slot object). Overrides the active `tone`'s theme tokens locally. */\n color?: ColorProp;\n}\n\n/* When indeterminate=true, apply the compound's checked classes regardless of peer-checked state. */\nconst INDETERMINATE_CHECKED_CLASS: Record<\n NonNullable<CheckboxVariants['variant']>,\n Record<NonNullable<CheckboxVariants['tone']>, string>\n> = {\n solid: {\n primary: 'bg-primary border-primary text-primary-foreground',\n neutral: 'bg-foreground border-foreground text-background',\n danger: 'bg-destructive border-destructive text-destructive-foreground',\n success: 'bg-success border-success text-success-foreground',\n warning: 'bg-warning border-warning text-warning-foreground',\n },\n soft: {\n primary: 'bg-primary text-primary-foreground',\n neutral: 'bg-foreground text-background',\n danger: 'bg-destructive text-destructive-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n },\n outline: {\n primary: 'bg-primary text-primary-foreground',\n neutral: 'bg-foreground text-background',\n danger: 'bg-destructive text-destructive-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n },\n ghost: {\n primary: 'bg-primary/10 text-primary',\n neutral: 'bg-muted text-foreground',\n danger: 'bg-destructive/10 text-destructive',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/10 text-warning',\n },\n /* Glass family keeps dark glass bg in indeterminate state (matches checked behavior). The Minus icon renders unconditionally; text-white from variant base makes it visible. */\n glass: {\n primary: 'text-white',\n neutral: 'text-white',\n danger: 'text-white',\n success: 'text-white',\n warning: 'text-white',\n },\n 'glass-surface': {\n primary: 'text-white border-white/80',\n neutral: 'text-white border-white/80',\n danger: 'text-white border-white/80',\n success: 'text-white border-white/80',\n warning: 'text-white border-white/80',\n },\n};\n\n/* Native checkbox with custom visual. Renders the input visually hidden but accessible — wrap in a `<label>` (or pair with `Label` via `FormControl`). Supports 6 variants × 5 tones matrix + indeterminate. */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n className,\n size = 'md',\n indeterminate,\n variant = 'solid',\n tone = 'primary',\n color,\n id,\n disabled,\n required,\n checked,\n ...props\n },\n ref,\n ) => {\n const ctx = useFormControl();\n const isDisabled = disabled ?? ctx?.isDisabled;\n\n /* Parse union-typed `size` — preset routes to box+icon class lookup, raw/object routes to inline dims. */\n const { preset: sizePreset, box: sizeBox } = CssExtensions.parseSizeUnion<CheckboxSizePreset>(\n size,\n CHECKBOX_SIZE_PRESETS,\n );\n const boxClass = sizePreset ? BOX_SIZE_CLASS[sizePreset] : undefined;\n const iconClass = sizePreset ? ICON_SIZE_CLASS[sizePreset] : DEFAULT_ICON_CLASS;\n const boxStyle = sizeBox ? CssExtensions.resolveBoxSize(sizeBox) : undefined;\n /* Per-instance color override → sets CSS vars on wrapper; the visual span inherits via cascade. */\n const colorStyle = ColorExtensions.toneColorOverride(color, tone as ColorTone | undefined);\n const composedStyle =\n colorStyle || boxStyle ? { ...colorStyle, ...boxStyle } : undefined;\n\n return (\n <span\n className={cn('relative inline-flex shrink-0', boxClass, className)}\n style={composedStyle}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n id={id ?? ctx?.id}\n disabled={isDisabled}\n required={required ?? ctx?.isRequired}\n checked={checked}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className=\"peer absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n {...props}\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n checkboxVariants({ variant, tone }),\n indeterminate\n ? INDETERMINATE_CHECKED_CLASS[variant][tone]\n /* Opacity gate lives on this span (a peer sibling of the input) — child-selector targets the SVG. peer-checked: cannot reach descendants directly. */\n : '[&>svg]:opacity-0 peer-checked:[&>svg]:opacity-100',\n )}\n >\n {indeterminate ? (\n <Minus className={iconClass} />\n ) : (\n <Check className={iconClass} />\n )}\n </span>\n </span>\n );\n },\n);\n\nCheckbox.displayName = COMPONENT_NAME;\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\n\nexport interface RadioProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZE_CLASS: Record<NonNullable<RadioProps['size']>, string> = {\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n};\n\n/**\n * Native radio button with custom visual. Use multiple with the same `name`\n * to form a mutually exclusive group; for arrow-key nav, wrap in\n * `RadioGroup` (L4).\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n ({ className, size = 'md', id, disabled, required, ...props }, ref) => {\n const ctx = useFormControl();\n return (\n <span className={cn('relative inline-flex shrink-0', SIZE_CLASS[size], className)}>\n <input\n ref={ref}\n type=\"radio\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n aria-invalid={ctx?.isInvalid || undefined}\n className=\"peer absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n {...props}\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none grid h-full w-full place-items-center rounded-full border border-input bg-background transition-colors',\n 'peer-checked:border-primary',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-1',\n 'peer-disabled:opacity-50',\n )}\n >\n <span className=\"h-2 w-2 rounded-full bg-primary opacity-0 peer-checked:opacity-100\" />\n </span>\n </span>\n );\n },\n);\nRadio.displayName = 'Radio';\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst TRACK_CLASS: Record<NonNullable<SwitchProps['size']>, string> = {\n sm: 'h-4 w-7',\n md: 'h-5 w-9',\n lg: 'h-6 w-11',\n};\nconst THUMB_CLASS: Record<NonNullable<SwitchProps['size']>, string> = {\n sm: 'h-3 w-3 peer-checked:translate-x-3',\n md: 'h-4 w-4 peer-checked:translate-x-4',\n lg: 'h-5 w-5 peer-checked:translate-x-5',\n};\n\n/**\n * Toggle switch — native checkbox styled as an iOS-style track + thumb.\n * Strict atom: no built-in label; pair via `FormControl` or wrap manually.\n */\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className, size = 'md', id, disabled, required, ...props }, ref) => {\n const ctx = useFormControl();\n return (\n <span className={cn('relative inline-flex shrink-0', TRACK_CLASS[size], className)}>\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n aria-invalid={ctx?.isInvalid || undefined}\n className=\"peer absolute inset-0 m-0 h-full w-full cursor-pointer opacity-0 disabled:cursor-not-allowed\"\n {...props}\n />\n <span\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none flex h-full w-full items-center rounded-full bg-input px-0.5 transition-colors',\n 'peer-checked:bg-primary',\n 'peer-focus-visible:ring-2 peer-focus-visible:ring-ring peer-focus-visible:ring-offset-1',\n 'peer-disabled:opacity-50',\n )}\n >\n <span\n className={cn(\n 'rounded-full bg-background shadow-sm transition-transform duration-150',\n THUMB_CLASS[size],\n )}\n />\n </span>\n </span>\n );\n },\n);\nSwitch.displayName = 'Switch';\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\n\nexport interface SliderProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst TRACK_CLASS: Record<NonNullable<SliderProps['size']>, string> = {\n sm: 'h-1',\n md: 'h-1.5',\n lg: 'h-2',\n};\n\n/**\n * Single-value range slider — native `<input type=\"range\">` styled across\n * browsers. Multi-thumb / range slider lives at L5.\n */\nexport const Slider = forwardRef<HTMLInputElement, SliderProps>(\n (\n { className, size = 'md', id, disabled, required, min = 0, max = 100, ...props },\n ref,\n ) => {\n const ctx = useFormControl();\n return (\n <input\n ref={ref}\n type=\"range\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n min={min}\n max={max}\n aria-invalid={ctx?.isInvalid || undefined}\n className={cn(\n 'w-full appearance-none bg-transparent disabled:cursor-not-allowed disabled:opacity-50',\n // WebKit\n '[&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-muted',\n `[&::-webkit-slider-runnable-track]:${TRACK_CLASS[size]}`,\n '[&::-webkit-slider-thumb]:mt-[-6px] [&::-webkit-slider-thumb]:h-4 [&::-webkit-slider-thumb]:w-4 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border-2 [&::-webkit-slider-thumb]:border-primary [&::-webkit-slider-thumb]:bg-background',\n // Firefox\n `[&::-moz-range-track]:${TRACK_CLASS[size]}`,\n '[&::-moz-range-track]:rounded-full [&::-moz-range-track]:bg-muted',\n '[&::-moz-range-thumb]:h-4 [&::-moz-range-thumb]:w-4 [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-2 [&::-moz-range-thumb]:border-primary [&::-moz-range-thumb]:bg-background',\n 'focus-visible:outline-none focus-visible:[&::-webkit-slider-thumb]:ring-2 focus-visible:[&::-webkit-slider-thumb]:ring-ring',\n className,\n )}\n {...props}\n />\n );\n },\n);\nSlider.displayName = 'Slider';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { FormControlProvider } from '../../primitives/formControlContext/FormControlContext';\nimport { Label } from '../label/Label';\nimport { FormHelperText } from '../formHelperText/FormHelperText';\nimport { FormErrorMessage } from '../formErrorMessage/FormErrorMessage';\n\nexport interface FormFieldProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Label text. Pass a node for richer content (e.g. label + tooltip). */\n label?: ReactNode;\n /** Helper / hint shown beneath the control. Hidden when `error` is set. */\n helper?: ReactNode;\n /** Error text — renders only when truthy. Sets `isInvalid` on the form context. */\n error?: ReactNode;\n /** Mark required (also exposes `isRequired` to the control via context). */\n isRequired?: boolean;\n /** Mark disabled (also exposes `isDisabled` to the control). */\n isDisabled?: boolean;\n /** Mark read-only (also exposes `isReadOnly` to the control). */\n isReadOnly?: boolean;\n /** The single form control (Input, Select, etc.) — receives wired id/aria via context. */\n children: ReactNode;\n}\n\n/**\n * One-stop label + control + helper + error wrapper. Wraps children in a\n * `FormControlProvider` so the inner control auto-wires `id`, `aria-describedby`,\n * `aria-invalid`, `disabled`, `required`, `readOnly`.\n */\nexport const FormField = forwardRef<HTMLDivElement, FormFieldProps>(\n (\n { label, helper, error, isRequired, isDisabled, isReadOnly, children, className, ...props },\n ref,\n ) => (\n <FormControlProvider\n isInvalid={Boolean(error)}\n isRequired={isRequired}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n >\n <div\n ref={ref}\n className={cn('flex flex-col gap-1.5', className)}\n {...props}\n >\n {label && <Label>{label}</Label>}\n {children}\n {error ? <FormErrorMessage>{error}</FormErrorMessage> : helper && <FormHelperText>{helper}</FormHelperText>}\n </div>\n </FormControlProvider>\n ),\n);\nFormField.displayName = 'FormField';\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useId } from '../../hooks';\nimport { Checkbox, type CheckboxProps } from '../checkbox/Checkbox';\n\nexport interface CheckboxFieldProps extends Omit<CheckboxProps, 'children'> {\n /** Right-side label. */\n label: ReactNode;\n /** Smaller helper / description below. */\n description?: ReactNode;\n /** Wrap-element className (the `<label>`). */\n wrapperClassName?: string;\n}\n\n/**\n * Checkbox + right-side label + optional description, wrapped in a single\n * `<label>` so clicking text toggles the box.\n */\nexport const CheckboxField = forwardRef<HTMLInputElement, CheckboxFieldProps>(\n ({ label, description, id, wrapperClassName, className, ...props }, ref) => {\n const generated = useId();\n const inputId = id ?? generated;\n return (\n <label\n htmlFor={inputId}\n className={cn('flex items-start gap-2.5 cursor-pointer', wrapperClassName)}\n >\n <Checkbox ref={ref} id={inputId} className={className} {...props} />\n <span className=\"flex flex-col gap-0.5 text-sm\">\n <span className=\"font-medium text-foreground\">{label}</span>\n {description && <span className=\"text-muted-foreground\">{description}</span>}\n </span>\n </label>\n );\n },\n);\nCheckboxField.displayName = 'CheckboxField';\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useId } from '../../hooks';\nimport { Radio, type RadioProps } from '../radio/Radio';\n\nexport interface RadioFieldProps extends Omit<RadioProps, 'children'> {\n label: ReactNode;\n description?: ReactNode;\n wrapperClassName?: string;\n}\n\n/**\n * Radio + right-side label + optional description, wrapped in a `<label>`.\n */\nexport const RadioField = forwardRef<HTMLInputElement, RadioFieldProps>(\n ({ label, description, id, wrapperClassName, className, ...props }, ref) => {\n const generated = useId();\n const inputId = id ?? generated;\n return (\n <label htmlFor={inputId} className={cn('flex items-start gap-2.5 cursor-pointer', wrapperClassName)}>\n <Radio ref={ref} id={inputId} className={className} {...props} />\n <span className=\"flex flex-col gap-0.5 text-sm\">\n <span className=\"font-medium text-foreground\">{label}</span>\n {description && <span className=\"text-muted-foreground\">{description}</span>}\n </span>\n </label>\n );\n },\n);\nRadioField.displayName = 'RadioField';\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useId } from '../../hooks';\nimport { Switch, type SwitchProps } from '../switch/Switch';\n\nexport interface SwitchFieldProps extends Omit<SwitchProps, 'children'> {\n label: ReactNode;\n description?: ReactNode;\n /** Place the switch on the left (default) or right of the label. */\n side?: 'left' | 'right';\n wrapperClassName?: string;\n}\n\n/**\n * Switch + label + optional description in a single clickable `<label>`.\n * `side=\"right\"` is the common settings-row pattern (label left, switch right).\n */\nexport const SwitchField = forwardRef<HTMLInputElement, SwitchFieldProps>(\n ({ label, description, side = 'left', id, wrapperClassName, className, ...props }, ref) => {\n const generated = useId();\n const inputId = id ?? generated;\n const text = (\n <span className=\"flex flex-col gap-0.5 text-sm\">\n <span className=\"font-medium text-foreground\">{label}</span>\n {description && <span className=\"text-muted-foreground\">{description}</span>}\n </span>\n );\n return (\n <label\n htmlFor={inputId}\n className={cn(\n 'flex cursor-pointer items-start gap-3',\n side === 'right' && 'flex-row-reverse justify-between',\n wrapperClassName,\n )}\n >\n <Switch ref={ref} id={inputId} className={className} {...props} />\n {text}\n </label>\n );\n },\n);\nSwitchField.displayName = 'SwitchField';\n","import { Children, cloneElement, forwardRef, isValidElement, type HTMLAttributes, type ReactElement, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Fieldset } from '../fieldset/Fieldset';\nimport { Legend } from '../legend/Legend';\nimport type { CheckboxFieldProps } from '../checkboxField/CheckboxField';\n\ninterface CheckboxGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>, 'onChange'> {\n /** Group legend (label-equivalent for fieldset). */\n legend?: ReactNode;\n /** Selected values (controlled). */\n value?: string[];\n /** Initial values (uncontrolled). */\n defaultValue?: string[];\n /** Fires whenever selection changes. */\n onValueChange?: (next: string[]) => void;\n /** Disable the whole group. */\n isDisabled?: boolean;\n /** Layout direction. Default `vertical`. */\n orientation?: 'horizontal' | 'vertical';\n /** `<CheckboxField>` children with `value=\"…\"` attached. */\n children: ReactNode;\n}\n\ninterface ChildLike extends CheckboxFieldProps {\n value?: string;\n}\n\n/**\n * Multi-select group of `CheckboxField` children. Each child must declare a\n * `value` prop the group uses to track selection.\n */\nexport const CheckboxGroup = forwardRef<HTMLFieldSetElement, CheckboxGroupProps>(\n (\n {\n legend,\n value,\n defaultValue,\n onValueChange,\n isDisabled,\n orientation = 'vertical',\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const [selected, setSelected] = useControlled<string[]>({\n controlled: value,\n default: defaultValue ?? [],\n onChange: onValueChange,\n });\n\n const toggle = (v: string | undefined) => {\n if (v === undefined) return;\n setSelected(selected.includes(v) ? selected.filter((x) => x !== v) : [...selected, v]);\n };\n\n return (\n <Fieldset ref={ref} disabled={isDisabled} className={cn(className)} {...props}>\n {legend && <Legend>{legend}</Legend>}\n <div className={cn('flex gap-3', orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap')}>\n {Children.map(children, (child) => {\n if (!isValidElement(child)) return child;\n const c = child as ReactElement<ChildLike>;\n const v = c.props.value;\n return cloneElement(c, {\n checked: v !== undefined && selected.includes(v),\n onChange: () => toggle(v),\n } as Partial<ChildLike>);\n })}\n </div>\n </Fieldset>\n );\n },\n);\nCheckboxGroup.displayName = 'CheckboxGroup';\n\nexport type { CheckboxGroupProps };\n","import { Children, cloneElement, forwardRef, isValidElement, useId, type HTMLAttributes, type ReactElement, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Fieldset } from '../fieldset/Fieldset';\nimport { Legend } from '../legend/Legend';\nimport type { RadioFieldProps } from '../radioField/RadioField';\n\ninterface RadioGroupProps extends Omit<HTMLAttributes<HTMLFieldSetElement>, 'onChange' | 'defaultValue'> {\n legend?: ReactNode;\n /** Shared `name` (required for native radio behavior). Auto-generated if omitted. */\n name?: string;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (next: string | null) => void;\n isDisabled?: boolean;\n orientation?: 'horizontal' | 'vertical';\n children: ReactNode;\n}\n\ninterface ChildLike extends RadioFieldProps {\n value?: string;\n}\n\n/**\n * Mutex group of `RadioField` children. Single-value selection; auto-generates\n * a shared `name` if not provided.\n */\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n (\n {\n legend,\n name,\n value,\n defaultValue,\n onValueChange,\n isDisabled,\n orientation = 'vertical',\n className,\n children,\n ...props\n },\n ref,\n ) => {\n const generatedName = useId();\n const groupName = name ?? generatedName;\n const [selected, setSelected] = useControlled<string | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange: onValueChange,\n });\n\n return (\n <Fieldset ref={ref} disabled={isDisabled} className={cn(className)} {...props}>\n {legend && <Legend>{legend}</Legend>}\n <div className={cn('flex gap-3', orientation === 'vertical' ? 'flex-col' : 'flex-row flex-wrap')}>\n {Children.map(children, (child) => {\n if (!isValidElement(child)) return child;\n const c = child as ReactElement<ChildLike>;\n const v = c.props.value;\n return cloneElement(c, {\n name: groupName,\n checked: v !== undefined && selected === v,\n onChange: () => setSelected(v ?? null),\n } as Partial<ChildLike>);\n })}\n </div>\n </Fieldset>\n );\n },\n);\nRadioGroup.displayName = 'RadioGroup';\n\nexport type { RadioGroupProps };\n","import {\n forwardRef,\n useImperativeHandle,\n useRef,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { inputBaseVariants } from '../InputStyles';\n\nexport interface PinInputProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'onChange'> {\n /** Number of digit cells. Default 6. */\n length?: number;\n /** Controlled value (full string). */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fires whenever the value changes. */\n onValueChange?: (value: string) => void;\n /** Fires when the user fills the final cell. */\n onComplete?: (value: string) => void;\n /** Restrict to digits (`numeric`) or any single char (`alphanumeric`). Default `numeric`. */\n type?: 'numeric' | 'alphanumeric';\n /** Cell visual size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n /** Render each cell as `*` (good for verification codes). */\n mask?: boolean;\n isDisabled?: boolean;\n}\n\nconst SIZE: Record<NonNullable<PinInputProps['size']>, string> = {\n sm: 'h-9 w-9 text-base',\n md: 'h-11 w-11 text-lg',\n lg: 'h-14 w-14 text-xl',\n};\n\n/**\n * One-time-code / PIN input — N single-character cells with auto-advance,\n * paste-spread, and backspace-to-previous behavior.\n */\nexport const PinInput = forwardRef<HTMLDivElement, PinInputProps>(\n (\n {\n length = 6,\n value,\n defaultValue,\n onValueChange,\n onComplete,\n type = 'numeric',\n size = 'md',\n mask,\n isDisabled,\n className,\n ...props\n },\n ref,\n ) => {\n const [val, setVal] = useControlled({\n controlled: value,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const cells = Array.from({ length }, (_, i) => val[i] ?? '');\n const inputs = useRef<(HTMLInputElement | null)[]>([]);\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(ref, () => wrapperRef.current as HTMLDivElement);\n\n const isAllowed = (ch: string) =>\n type === 'numeric' ? /^[0-9]$/.test(ch) : /^[A-Za-z0-9]$/.test(ch);\n\n const update = (next: string) => {\n const trimmed = next.slice(0, length);\n setVal(trimmed);\n if (trimmed.length === length) onComplete?.(trimmed);\n };\n\n const handleChange = (i: number, raw: string) => {\n const ch = raw.slice(-1);\n if (ch && !isAllowed(ch)) return;\n const arr = cells.slice();\n arr[i] = ch;\n const next = arr.join('').slice(0, length);\n update(next);\n if (ch && i < length - 1) inputs.current[i + 1]?.focus();\n };\n\n const handleKeyDown = (i: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !cells[i] && i > 0) {\n inputs.current[i - 1]?.focus();\n } else if (e.key === 'ArrowLeft' && i > 0) {\n e.preventDefault();\n inputs.current[i - 1]?.focus();\n } else if (e.key === 'ArrowRight' && i < length - 1) {\n e.preventDefault();\n inputs.current[i + 1]?.focus();\n }\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').replace(/\\s+/g, '');\n const filtered = pasted.split('').filter(isAllowed).join('');\n if (filtered) {\n e.preventDefault();\n update(filtered);\n const focusIdx = Math.min(filtered.length, length - 1);\n inputs.current[focusIdx]?.focus();\n }\n };\n\n return (\n <div ref={wrapperRef} className={cn('inline-flex gap-2', className)} {...props}>\n {cells.map((ch, i) => (\n <input\n key={i}\n ref={(el) => {\n inputs.current[i] = el;\n }}\n type={mask ? 'password' : 'text'}\n inputMode={type === 'numeric' ? 'numeric' : 'text'}\n autoComplete=\"one-time-code\"\n maxLength={1}\n disabled={isDisabled}\n value={ch}\n onChange={(e) => handleChange(i, e.target.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n className={cn(\n inputBaseVariants({ state: 'default' }),\n 'text-center font-medium',\n SIZE[size],\n )}\n />\n ))}\n </div>\n );\n },\n);\nPinInput.displayName = 'PinInput';\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface MaskedInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'value' | 'defaultValue' | 'onChange'>,\n InputBaseVariants {\n /** Mask pattern. `#` = digit, `A` = alpha, `*` = alphanumeric, anything else = literal. */\n mask: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n}\n\nfunction applyMask(raw: string, mask: string): string {\n let out = '';\n let r = 0;\n for (let m = 0; m < mask.length && r < raw.length; m++) {\n const tok = mask[m];\n const ch = raw[r];\n if (!tok || !ch) break;\n if (tok === '#') {\n if (/[0-9]/.test(ch)) {\n out += ch;\n r++;\n } else {\n r++;\n m--;\n }\n } else if (tok === 'A') {\n if (/[A-Za-z]/.test(ch)) {\n out += ch;\n r++;\n } else {\n r++;\n m--;\n }\n } else if (tok === '*') {\n if (/[A-Za-z0-9]/.test(ch)) {\n out += ch;\n r++;\n } else {\n r++;\n m--;\n }\n } else {\n // literal\n out += tok;\n if (ch === tok) r++;\n }\n }\n return out;\n}\n\n/**\n * Text input with a simple character-class mask. Tokens: `#` digit, `A`\n * letter, `*` alphanumeric. Anything else is a literal that's auto-inserted.\n *\n * Examples: `\"###-###-####\"` (US phone), `\"##/##/####\"` (date), `\"AAA-####\"`.\n */\nexport const MaskedInput = forwardRef<HTMLInputElement, MaskedInputProps>(\n (\n { className, size, state, mask, value, defaultValue, onValueChange, id, disabled, required, readOnly, ...props },\n ref,\n ) => {\n const ctx = useFormControl();\n const finalState = state ?? (ctx?.isInvalid ? 'invalid' : 'default');\n const [val, setVal] = useControlled({\n controlled: value,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n return (\n <input\n ref={ref}\n type=\"text\"\n value={val}\n onChange={(e) => setVal(applyMask(e.target.value, mask))}\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n readOnly={readOnly ?? ctx?.isReadOnly}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n className={cn(inputBaseVariants({ size, state: finalState }), className)}\n {...props}\n />\n );\n },\n);\nMaskedInput.displayName = 'MaskedInput';\n","import { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport { NumberInput, type NumberInputProps } from '../numberInput/NumberInput';\n\nexport interface CurrencyInputProps extends Omit<NumberInputProps, 'children'> {\n /** Currency symbol or 3-letter code displayed as a prefix. Default `\"$\"`. */\n symbol?: string;\n}\n\n/**\n * `NumberInput` with a leading currency symbol. Symbol shown as a non-input\n * decoration (input value is the bare number).\n */\nexport const CurrencyInput = forwardRef<HTMLInputElement, CurrencyInputProps>(\n ({ symbol = '$', className, ...props }, ref) => (\n <div className={cn('relative', className)}>\n <span className=\"pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground\">\n {symbol}\n </span>\n <NumberInput ref={ref} {...props} className=\"pl-7\" />\n </div>\n ),\n);\nCurrencyInput.displayName = 'CurrencyInput';\n","import { forwardRef } from 'react';\nimport { cn } from '../../utils';\nimport { NumberInput, type NumberInputProps } from '../numberInput/NumberInput';\n\nexport type PercentInputProps = Omit<NumberInputProps, 'children'>;\n\n/**\n * `NumberInput` with a trailing `%` decoration. Input value remains the\n * bare number (interpret as 0–100 in your form).\n */\nexport const PercentInput = forwardRef<HTMLInputElement, PercentInputProps>(\n ({ className, ...props }, ref) => (\n <div className={cn('relative', className)}>\n <NumberInput ref={ref} {...props} className=\"pr-16\" />\n <span className=\"pointer-events-none absolute right-12 top-1/2 -translate-y-1/2 text-sm text-muted-foreground\">\n %\n </span>\n </div>\n ),\n);\nPercentInput.displayName = 'PercentInput';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface CharacterCountProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Current length. */\n value: number;\n /** Maximum allowed length (also flips text to destructive when exceeded). */\n max: number;\n /** Show as `current / max` (default) or just `current`. */\n showMax?: boolean;\n}\n\n/**\n * Counter for character-limited fields. Drop in below a Textarea / Input.\n * Goes destructive once `value > max`.\n */\nexport const CharacterCount = forwardRef<HTMLDivElement, CharacterCountProps>(\n ({ value, max, showMax = true, className, ...props }, ref) => {\n const over = value > max;\n return (\n <div\n ref={ref}\n aria-live=\"polite\"\n className={cn(\n 'text-right text-xs',\n over ? 'text-destructive' : 'text-muted-foreground',\n className,\n )}\n {...props}\n >\n {value}{showMax && ` / ${max}`}\n </div>\n );\n },\n);\nCharacterCount.displayName = 'CharacterCount';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\n\nexport interface InputAddonProps extends ComponentPropsWithoutRef<'div'> {\n /** Element rendered to the left of the input (e.g. \"https://\"). */\n leading?: ReactNode;\n /** Element rendered to the right of the input (e.g. \".com\"). */\n trailing?: ReactNode;\n /** The input element (TextInput, EmailInput, etc.). */\n children: ReactNode;\n}\n\n/**\n * Wrap any input with leading and/or trailing addon slots — visually\n * connected to the input border. Common for protocol prefixes, units,\n * suffixes (\"https://\", \".com\", \"kg\").\n */\nexport const InputAddon = forwardRef<HTMLDivElement, InputAddonProps>(\n ({ leading, trailing, children, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'inline-flex w-full items-stretch [&>*]:rounded-none',\n '[&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md',\n '[&>*:not(:first-child)]:-ml-px',\n className,\n )}\n {...props}\n >\n {leading && (\n <span className=\"inline-flex shrink-0 items-center border border-input bg-muted px-3 text-sm text-muted-foreground\">\n {leading}\n </span>\n )}\n {children}\n {trailing && (\n <span className=\"inline-flex shrink-0 items-center border border-input bg-muted px-3 text-sm text-muted-foreground\">\n {trailing}\n </span>\n )}\n </div>\n ),\n);\nInputAddon.displayName = 'InputAddon';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface InputGroupProps extends ComponentPropsWithoutRef<'div'> {\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * Visually joins a row/column of inputs (TextInput, NumberInput, etc.)\n * — collapses inner radii so they read as one connected control. Mirror\n * of `actions/ButtonGroup`.\n */\nexport const InputGroup = forwardRef<HTMLDivElement, InputGroupProps>(\n ({ orientation = 'horizontal', className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'inline-flex w-full',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n orientation === 'horizontal'\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px',\n className,\n )}\n {...props}\n />\n ),\n);\nInputGroup.displayName = 'InputGroup';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useId } from '../../hooks';\nimport { Label } from '../label/Label';\n\nexport interface LabeledInputProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n label: ReactNode;\n /** The input element. Receives a generated `id` linked to the label. */\n children: React.ReactElement<{ id?: string }>;\n /** Optional inline-end label (e.g. \"Optional\"). */\n trailing?: ReactNode;\n}\n\n/**\n * Lighter alternative to `FormField` — just `Label` + control, no helper /\n * error / context wiring. Good for compact inline forms.\n */\nexport const LabeledInput = forwardRef<HTMLDivElement, LabeledInputProps>(\n ({ label, children, trailing, className, ...props }, ref) => {\n const generated = useId();\n const id = children.props.id ?? generated;\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)} {...props}>\n <div className=\"flex items-center justify-between\">\n <Label htmlFor={id}>{label}</Label>\n {trailing && <span className=\"text-xs text-muted-foreground\">{trailing}</span>}\n </div>\n {React.cloneElement(children, { id })}\n </div>\n );\n },\n);\nLabeledInput.displayName = 'LabeledInput';\n\nimport * as React from 'react';\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn } from '../../utils';\nimport { useId } from '../../hooks';\nimport { Radio, type RadioProps } from '../radio/Radio';\n\nexport interface ChoiceCardProps extends Omit<RadioProps, 'children' | 'size'> {\n label: ReactNode;\n description?: ReactNode;\n /** Optional icon rendered above the label. */\n icon?: ReactNode;\n /** Card size. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZE: Record<NonNullable<ChoiceCardProps['size']>, string> = {\n sm: 'p-3 text-xs',\n md: 'p-4 text-sm',\n lg: 'p-5 text-base',\n};\n\n/**\n * Radio styled as a clickable card with title + description + optional\n * icon. Common for plan/option pickers. Compose inside `RadioGroup` for\n * mutex selection.\n */\nexport const ChoiceCard = forwardRef<HTMLInputElement, ChoiceCardProps>(\n ({ label, description, icon, size = 'md', id, className, ...props }, ref) => {\n const generated = useId();\n const inputId = id ?? generated;\n return (\n <label\n htmlFor={inputId}\n className={cn(\n 'group relative block cursor-pointer rounded-lg border border-input bg-card text-card-foreground transition-colors',\n 'hover:border-border-strong has-[:checked]:border-primary has-[:checked]:bg-primary-soft/30',\n 'has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring',\n SIZE[size],\n className,\n )}\n >\n <Radio ref={ref} id={inputId} className=\"absolute right-3 top-3\" {...props} />\n <div className=\"flex items-start gap-3 pr-7\">\n {icon && <span className=\"text-muted-foreground\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"font-medium text-foreground\">{label}</div>\n {description && <div className=\"mt-0.5 text-muted-foreground\">{description}</div>}\n </div>\n </div>\n </label>\n );\n },\n);\nChoiceCard.displayName = 'ChoiceCard';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils';\n\nexport interface PasswordStrengthProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** The password to measure. */\n value: string;\n /** Override the score (0–4). When set, internal scoring is bypassed. */\n score?: 0 | 1 | 2 | 3 | 4;\n /** Hide the textual label under the bar. */\n hideLabel?: boolean;\n}\n\nconst LABELS = ['Too weak', 'Weak', 'Fair', 'Strong', 'Excellent'];\nconst TONE = ['bg-destructive', 'bg-destructive', 'bg-warning', 'bg-success', 'bg-success'];\n\nfunction scorePassword(pw: string): 0 | 1 | 2 | 3 | 4 {\n let score = 0;\n if (pw.length >= 8) score++;\n if (pw.length >= 12) score++;\n if (/[a-z]/.test(pw) && /[A-Z]/.test(pw)) score++;\n if (/\\d/.test(pw)) score++;\n if (/[^A-Za-z0-9]/.test(pw)) score++;\n return Math.min(4, score) as 0 | 1 | 2 | 3 | 4;\n}\n\n/**\n * Strength meter for password fields. Naive rule-based scoring 0–4. Pass\n * `score` to override (e.g. drive from `zxcvbn`).\n */\nexport const PasswordStrength = forwardRef<HTMLDivElement, PasswordStrengthProps>(\n ({ value, score, hideLabel, className, ...props }, ref) => {\n const s: 0 | 1 | 2 | 3 | 4 = score ?? (value.length === 0 ? 0 : scorePassword(value));\n const label = LABELS[s] ?? '';\n const tone = TONE[s] ?? 'bg-destructive';\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)} {...props}>\n <div className=\"flex gap-1\" aria-hidden=\"true\">\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className={cn(\n 'h-1 flex-1 rounded-full bg-muted transition-colors',\n i < s && tone,\n )}\n />\n ))}\n </div>\n {!hideLabel && value && (\n <div className=\"text-xs text-muted-foreground\">{label}</div>\n )}\n </div>\n );\n },\n);\nPasswordStrength.displayName = 'PasswordStrength';\n","import { forwardRef, useImperativeHandle, useRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { Upload } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport interface FilePickerProps extends Omit<ComponentPropsWithoutRef<'input'>, 'type' | 'value' | 'onChange' | 'size'> {\n /** Button label. Default `\"Choose file\"`. */\n label?: ReactNode;\n /** Fires with the chosen FileList when files are picked. */\n onFilesChange?: (files: FileList | null) => void;\n /** Filename(s) preview rendered next to the button. Pass `null` to hide. */\n preview?: ReactNode;\n /** Visual size of the button. Default `md`. */\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst SIZE: Record<NonNullable<FilePickerProps['size']>, string> = {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-4 text-sm',\n lg: 'h-12 px-6 text-base',\n};\n\n/**\n * Basic file picker — styled trigger button + visually-hidden native\n * `<input type=\"file\">`. For drag-drop / preview / progress, use the L5\n * `Dropzone` organism (planned).\n */\nexport const FilePicker = forwardRef<HTMLInputElement, FilePickerProps>(\n ({ label = 'Choose file', onFilesChange, preview, size = 'md', className, disabled, ...props }, ref) => {\n const inputRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle(ref, () => inputRef.current as HTMLInputElement);\n return (\n <div className={cn('inline-flex items-center gap-3', className)}>\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => inputRef.current?.click()}\n className={cn(\n 'inline-flex items-center gap-2 rounded-md border border-input bg-background font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n SIZE[size],\n )}\n >\n <Icon icon={Upload} size={16} />\n {label}\n </button>\n <input\n ref={inputRef}\n type=\"file\"\n disabled={disabled}\n className=\"sr-only\"\n onChange={(e) => onFilesChange?.(e.target.files)}\n {...props}\n />\n {preview && <span className=\"truncate text-sm text-muted-foreground\">{preview}</span>}\n </div>\n );\n },\n);\nFilePicker.displayName = 'FilePicker';\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ForwardedRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport { Check } from 'lucide-react';\nimport { cn, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n listboxEmptyVariants,\n listboxGroupLabelVariants,\n listboxItemVariants,\n listboxSeparatorVariants,\n listboxVariants,\n} from './Listbox.variants';\n\n/** Represents a function that matches items against the current selection. */\nexport type EqualityFn<T> = (a: T, b: T) => boolean;\n\n/** Provides the default equality (Object.is) — primitives + reference equality. */\nconst defaultEquals: EqualityFn<unknown> = (a, b) => Object.is(a, b);\n\n/** Represents the selection-indicator style applied to every item under this listbox. */\nexport type ListboxIndicator = 'check' | 'checkbox' | 'radio' | 'dot' | 'none';\n\n/** Represents the per-item registry entry maintained by the listbox. */\ninterface ItemEntry {\n id: string;\n value: unknown;\n disabled: boolean;\n}\n\n/** Represents the shape of the listbox context shared with descendants. */\ninterface ListboxContextValue {\n multiple: boolean;\n values: unknown[];\n isEqual: EqualityFn<unknown>;\n activeId: string | null;\n onItemSelect: (value: unknown) => void;\n registerItem: (entry: ItemEntry) => void;\n unregisterItem: (id: string) => void;\n setActiveId: (id: string | null) => void;\n indicator: ListboxIndicator;\n}\n\nconst ListboxContext = createContext<ListboxContextValue | null>(null);\n\nfunction useListboxContext() {\n const ctx = useContext(ListboxContext);\n if (!ctx) throw new Error('Listbox.Item / Group / Separator must be used inside <Listbox>');\n return ctx;\n}\n\ntype SingleProps<T> = {\n multiple?: false;\n value?: T;\n defaultValue?: T;\n onValueChange?: (value: T | undefined) => void;\n};\n\ntype MultiProps<T> = {\n multiple: true;\n value?: T[];\n defaultValue?: T[];\n onValueChange?: (value: T[]) => void;\n};\n\n/** Represents the props shared between single-select and multi-select modes. */\ntype CommonProps<T> = SurfaceVariants & {\n /** Disables all items when true. */\n disabled?: boolean;\n /** Compares item values for equality; defaults to `Object.is`. */\n isEqual?: EqualityFn<T>;\n /** Sets the selection-indicator style; default `check` (single) or `checkbox` (multi). */\n indicator?: ListboxIndicator;\n className?: string;\n children: ReactNode;\n};\n\nexport type ListboxProps<T = string> = Omit<\n HTMLAttributes<HTMLDivElement>,\n 'defaultValue' | 'onChange'\n> &\n (SingleProps<T> | MultiProps<T>) &\n CommonProps<T>;\n\nfunction ListboxImpl<T>(\n props: ListboxProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement {\n const {\n multiple = false,\n value,\n defaultValue,\n onValueChange,\n isEqual,\n indicator,\n variant,\n tone,\n radius,\n padding,\n elevation,\n disabled,\n className,\n children,\n onKeyDown,\n ...rest\n } = props as ListboxProps<T> & {\n multiple?: boolean;\n value?: T | T[];\n defaultValue?: T | T[];\n onValueChange?: ((v: T | undefined) => void) | ((v: T[]) => void);\n };\n\n const equals = (isEqual as EqualityFn<unknown> | undefined) ?? defaultEquals;\n const resolvedIndicator: ListboxIndicator = indicator ?? (multiple ? 'checkbox' : 'check');\n\n const initial: T | T[] | undefined = defaultValue ?? (multiple ? ([] as T[]) : undefined);\n const [current, setCurrent] = useControlled<T | T[] | undefined>({\n controlled: value,\n default: initial,\n onChange: onValueChange as (v: T | T[] | undefined) => void,\n });\n\n const values: unknown[] = useMemo(() => {\n if (Array.isArray(current)) return current as unknown[];\n return current === undefined ? [] : [current];\n }, [current]);\n\n const items = useRef<ItemEntry[]>([]);\n const [activeId, setActiveId] = useState<string | null>(null);\n\n const registerItem = useCallback((entry: ItemEntry) => {\n const idx = items.current.findIndex((i) => i.id === entry.id);\n if (idx >= 0) items.current[idx] = entry;\n else items.current.push(entry);\n }, []);\n\n const unregisterItem = useCallback((id: string) => {\n items.current = items.current.filter((i) => i.id !== id);\n }, []);\n\n const onItemSelect = useCallback(\n (next: unknown) => {\n if (multiple) {\n const cur = (Array.isArray(current) ? current : []) as unknown[];\n const has = cur.some((v) => equals(v, next));\n const out = has ? cur.filter((v) => !equals(v, next)) : [...cur, next];\n (setCurrent as (v: unknown[]) => void)(out);\n } else {\n (setCurrent as (v: unknown) => void)(next);\n }\n },\n [multiple, current, setCurrent, equals],\n );\n\n useEffect(() => {\n if (activeId) return;\n const firstSelected = items.current.find(\n (i) => !i.disabled && values.some((v) => equals(v, i.value)),\n );\n const firstEnabled = items.current.find((i) => !i.disabled);\n setActiveId((firstSelected ?? firstEnabled)?.id ?? null);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const moveActive = useCallback(\n (direction: 1 | -1, jump = 1) => {\n const list = items.current.filter((i) => !i.disabled);\n if (list.length === 0) return;\n const currentIdx = list.findIndex((i) => i.id === activeId);\n let nextIdx = currentIdx + direction * jump;\n if (currentIdx === -1) nextIdx = direction === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = 0;\n if (nextIdx >= list.length) nextIdx = list.length - 1;\n const nextEntry = list[nextIdx];\n if (nextEntry) setActiveId(nextEntry.id);\n },\n [activeId],\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n moveActive(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n moveActive(-1);\n break;\n case 'Home':\n event.preventDefault();\n moveActive(-1, items.current.length);\n break;\n case 'End':\n event.preventDefault();\n moveActive(1, items.current.length);\n break;\n case 'PageDown':\n event.preventDefault();\n moveActive(1, 10);\n break;\n case 'PageUp':\n event.preventDefault();\n moveActive(-1, 10);\n break;\n case 'Enter':\n case ' ': {\n if (!activeId) return;\n const entry = items.current.find((i) => i.id === activeId);\n if (!entry || entry.disabled) return;\n event.preventDefault();\n onItemSelect(entry.value);\n break;\n }\n }\n },\n [activeId, disabled, moveActive, onItemSelect, onKeyDown],\n );\n\n const ctx = useMemo<ListboxContextValue>(\n () => ({\n multiple,\n values,\n isEqual: equals,\n activeId,\n onItemSelect,\n registerItem,\n unregisterItem,\n setActiveId,\n indicator: resolvedIndicator,\n }),\n [\n multiple,\n values,\n equals,\n activeId,\n onItemSelect,\n registerItem,\n unregisterItem,\n resolvedIndicator,\n ],\n );\n\n /* Default padding is `xs` (p-1) for items breathing room — overridable. */\n const resolvedPadding = padding ?? 'xs';\n\n return (\n <ListboxContext.Provider value={ctx}>\n <div\n ref={ref}\n role=\"listbox\"\n tabIndex={disabled ? -1 : 0}\n aria-multiselectable={multiple || undefined}\n aria-activedescendant={activeId ?? undefined}\n aria-disabled={disabled || undefined}\n onKeyDown={handleKeyDown}\n className={cn(\n surfaceVariants({ variant, tone, radius, padding: resolvedPadding, elevation }),\n listboxVariants(),\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </ListboxContext.Provider>\n );\n}\n\nconst ListboxForwardRef = forwardRef(ListboxImpl) as <T = string>(\n props: ListboxProps<T> & { ref?: Ref<HTMLDivElement> },\n) => ReactElement;\n\n/* ---------- Indicator visuals ---------- */\n\n/** Provides the leading selection indicator (checkbox · radio · dot). */\nfunction LeadingIndicator({\n indicator,\n isSelected,\n}: {\n indicator: ListboxIndicator;\n isSelected: boolean;\n}) {\n if (indicator === 'checkbox') {\n return (\n <span\n aria-hidden\n className={cn(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded-sm border',\n isSelected\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-border',\n )}\n >\n {isSelected && <Check className=\"h-3 w-3\" />}\n </span>\n );\n }\n if (indicator === 'radio') {\n return (\n <span\n aria-hidden\n className={cn(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded-full border',\n isSelected ? 'border-primary' : 'border-border',\n )}\n >\n {isSelected && <span className=\"h-2 w-2 rounded-full bg-primary\" />}\n </span>\n );\n }\n if (indicator === 'dot') {\n return (\n <span\n aria-hidden\n className={cn(\n 'h-1.5 w-1.5 shrink-0 rounded-full',\n isSelected ? 'bg-primary' : 'bg-transparent',\n )}\n />\n );\n }\n return null;\n}\n\n/** Provides the trailing selection indicator (check icon). */\nfunction TrailingIndicator({\n indicator,\n isSelected,\n multiple,\n}: {\n indicator: ListboxIndicator;\n isSelected: boolean;\n multiple: boolean;\n}) {\n if (indicator === 'check' && isSelected) {\n return <Check className={cn('h-4 w-4 shrink-0', !multiple && 'opacity-80')} />;\n }\n return null;\n}\n\n/* ---------- Item ---------- */\n\n/** Represents the prop surface of `Listbox.Item`. */\nexport interface ListboxItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Holds the item value; compared via the parent listbox's `isEqual`. */\n value: unknown;\n /** Disables this item when true. */\n disabled?: boolean;\n /** Overrides the listbox-level indicator for this single item. */\n indicator?: ListboxIndicator;\n children: ReactNode;\n}\n\nexport const ListboxItem = forwardRef<HTMLDivElement, ListboxItemProps>(function ListboxItem(\n { value, disabled = false, indicator: itemIndicator, className, children, onClick, onPointerEnter, ...rest },\n forwardedRef,\n) {\n const ctx = useListboxContext();\n const id = useId();\n const ref = useRef<HTMLDivElement | null>(null);\n const indicator = itemIndicator ?? ctx.indicator;\n\n useEffect(() => {\n ctx.registerItem({ id, value, disabled });\n return () => ctx.unregisterItem(id);\n }, [ctx, id, value, disabled]);\n\n const isSelected = ctx.values.some((v) => ctx.isEqual(v, value));\n const isActive = ctx.activeId === id;\n const state = disabled\n ? 'disabled'\n : isSelected\n ? 'selected'\n : isActive\n ? 'active'\n : 'default';\n\n const setRefs = (node: HTMLDivElement | null) => {\n ref.current = node;\n if (typeof forwardedRef === 'function') forwardedRef(node);\n else if (forwardedRef) forwardedRef.current = node;\n };\n\n return (\n <div\n ref={setRefs}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n data-active={isActive ? '' : undefined}\n data-selected={isSelected ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n ctx.onItemSelect(value);\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n if (!disabled) ctx.setActiveId(id);\n }}\n className={cn(listboxItemVariants({ state }), className)}\n {...rest}\n >\n <LeadingIndicator indicator={indicator} isSelected={isSelected} />\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">{children}</span>\n <TrailingIndicator indicator={indicator} isSelected={isSelected} multiple={ctx.multiple} />\n </div>\n );\n});\n\n/** Represents the prop surface of `Listbox.Group`. */\nexport interface ListboxGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Renders an optional group heading above the contained items. */\n label?: ReactNode;\n children: ReactNode;\n}\n\n/** Provides a labelled group wrapping a subset of items. */\nexport function ListboxGroup({ label, children, className, ...rest }: ListboxGroupProps) {\n const labelId = useId();\n return (\n <div role=\"group\" aria-labelledby={label ? labelId : undefined} className={className} {...rest}>\n {label && (\n <div id={labelId} className={listboxGroupLabelVariants()}>\n {label}\n </div>\n )}\n {children}\n </div>\n );\n}\n\n/** Provides a thin horizontal rule between groups of items. */\nexport function ListboxSeparator(props: HTMLAttributes<HTMLDivElement>) {\n return <div role=\"separator\" className={listboxSeparatorVariants()} {...props} />;\n}\n\n/** Provides the message shown when no items match (e.g., after search filter). */\nexport function ListboxEmpty({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div role=\"presentation\" className={cn(listboxEmptyVariants(), className)} {...rest}>\n {children}\n </div>\n );\n}\n\ntype ListboxComponent = (<T = string>(\n props: ListboxProps<T> & { ref?: Ref<HTMLDivElement> },\n) => ReactElement) & {\n Item: typeof ListboxItem;\n Group: typeof ListboxGroup;\n Separator: typeof ListboxSeparator;\n Empty: typeof ListboxEmpty;\n};\n\nconst Listbox = ListboxForwardRef as ListboxComponent;\nListbox.Item = ListboxItem;\nListbox.Group = ListboxGroup;\nListbox.Separator = ListboxSeparator;\nListbox.Empty = ListboxEmpty;\n\nexport { Listbox };\nexport default Listbox;\n","import { tv, type VariantProps } from '../../utils';\n\nexport const selectTriggerVariants = tv({\n base: 'flex w-full items-center justify-between gap-2 rounded-md border bg-popover text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60 data-[state=open]:border-border-strong',\n variants: {\n size: {\n xs: 'h-7 gap-1.5 px-2.5 text-[11px]',\n sm: 'h-8 px-2.5 text-sm',\n md: 'h-10 px-3 text-sm',\n lg: 'h-12 px-4 text-base',\n },\n state: {\n default: 'border-input hover:border-border-strong',\n invalid: 'border-destructive focus-visible:ring-destructive',\n },\n },\n defaultVariants: {\n size: 'md',\n state: 'default',\n },\n});\n\nexport type SelectTriggerVariants = VariantProps<typeof selectTriggerVariants>;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { ChevronDown, X, Loader2 } from 'lucide-react';\nimport {\n cn,\n Equality,\n type EqualityComparer,\n type SurfaceVariants,\n} from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport {\n Listbox,\n ListboxItem,\n ListboxGroup,\n ListboxSeparator,\n ListboxEmpty,\n} from '../listbox';\nimport { SearchInput } from '../searchInput';\nimport { selectTriggerVariants, type SelectTriggerVariants } from './Select.variants';\n\n/* ────────── Option model ────────── */\n\n/** Represents a single dropdown option as `{ itemKey, value, label }` — V defaults to K. */\nexport interface SelectOption<K, V = K> {\n itemKey: K;\n value: V;\n label: ReactNode;\n disabled?: boolean;\n}\n\n/** Represents an internal item-registry entry — option + plain-text for substring search. */\ninterface ItemRegistryEntry<K, V> {\n itemKey: K;\n value: V;\n label: ReactNode;\n text: string;\n}\n\n/* ────────── Context ────────── */\n\ninterface SelectContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n selectedKey: unknown;\n hasSelection: boolean;\n onSelect: (entry: ItemRegistryEntry<unknown, unknown>) => void;\n onClear: () => void;\n keyEquals: EqualityComparer<unknown>;\n items: Array<ItemRegistryEntry<unknown, unknown>>;\n registerItem: (entry: ItemRegistryEntry<unknown, unknown>) => void;\n unregisterItem: (itemKey: unknown) => void;\n query: string;\n setQuery: (q: string) => void;\n disabled: boolean;\n isLoading: boolean;\n clearable: boolean;\n serializeKey: (key: unknown) => string;\n name?: string;\n invalid?: boolean;\n}\n\nconst SelectContext = createContext<SelectContextValue | null>(null);\n\nfunction useSelectContext() {\n const ctx = useContext(SelectContext);\n if (!ctx) throw new Error('Select.* must be used inside <Select>');\n return ctx;\n}\n\n/* ────────── Root ────────── */\n\n/** Represents the prop surface of the `Select` root. */\nexport interface SelectProps<K, V = K> {\n /** Holds the selected key; `null` = explicit clear, `undefined` = uncontrolled. */\n selected?: K | null;\n /** Holds the initial selected key for uncontrolled use. */\n defaultSelected?: K | null;\n /** Fires when an item is picked or cleared (`null` on clear). */\n onChange?: (selected: SelectOption<K, V> | null) => void;\n /** Compares keys for equality; defaults to `Equality.strictEquals`. */\n keyEquals?: EqualityComparer<K>;\n /** Disables interaction when true. */\n disabled?: boolean;\n /** Shows a spinner in the trigger and blocks interaction. */\n isLoading?: boolean;\n /** Renders a clear (×) button in the trigger when a value is set. */\n clearable?: boolean;\n /** Names the hidden form input that ships the serialized key. */\n name?: string;\n /** Serializes the key for the hidden form input; defaults to `String(key)`. */\n serializeKey?: (key: K) => string;\n /** Styles the trigger as invalid (red border, error ring). */\n invalid?: boolean;\n /** Opens the dropdown initially when uncontrolled. */\n defaultOpen?: boolean;\n /** Controls the dropdown open state. */\n open?: boolean;\n /** Fires when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Sets the floating placement of the dropdown. */\n placement?: React.ComponentProps<typeof Popover>['placement'];\n children: ReactNode;\n}\n\nfunction SelectImpl<K, V = K>({\n selected,\n defaultSelected,\n onChange,\n keyEquals,\n disabled = false,\n isLoading = false,\n clearable = false,\n name,\n serializeKey,\n invalid,\n defaultOpen = false,\n open: openProp,\n onOpenChange,\n placement = 'bottom',\n children,\n}: SelectProps<K, V>): ReactElement {\n const [openState, setOpenState] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [keyState, setKeyState] = useControlled<K | null>({\n controlled: selected,\n default: defaultSelected ?? null,\n /* Emits via `emitChange` below — needs both key + value, not just key. */\n onChange: undefined,\n });\n const [items, setItems] = useState<Array<ItemRegistryEntry<unknown, unknown>>>([]);\n const [query, setQuery] = useState('');\n\n /* Ref-stabilises consumer fns so they don't churn `useMemo` deps. */\n const keyEqualsRef = useRef(keyEquals);\n keyEqualsRef.current = keyEquals;\n const serializeKeyRef = useRef(serializeKey);\n serializeKeyRef.current = serializeKey;\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const keyEqualsFn = useCallback<EqualityComparer<unknown>>((a, b) => {\n const fn = keyEqualsRef.current as EqualityComparer<unknown> | undefined;\n return (fn ?? Equality.strictEquals)(a, b);\n }, []);\n\n const serializeKeyFn = useCallback((k: unknown) => {\n const fn = serializeKeyRef.current as ((k: unknown) => string) | undefined;\n return (fn ?? ((x) => String(x)))(k);\n }, []);\n\n const registerItem = useCallback(\n (entry: ItemRegistryEntry<unknown, unknown>) => {\n setItems((prev) => {\n const idx = prev.findIndex((p) => Object.is(p.itemKey, entry.itemKey));\n if (idx >= 0) {\n const existing = prev[idx];\n if (\n existing &&\n existing.label === entry.label &&\n existing.text === entry.text &&\n Object.is(existing.value, entry.value)\n ) {\n return prev;\n }\n const next = prev.slice();\n next[idx] = entry;\n return next;\n }\n return [...prev, entry];\n });\n },\n [],\n );\n\n const unregisterItem = useCallback((k: unknown) => {\n setItems((prev) => {\n const idx = prev.findIndex((p) => Object.is(p.itemKey, k));\n if (idx === -1) return prev;\n const next = prev.slice();\n next.splice(idx, 1);\n return next;\n });\n }, []);\n\n const emitChange = useCallback(\n (next: SelectOption<K, V> | null) => {\n onChangeRef.current?.(next);\n },\n [],\n );\n\n const onSelect = useCallback(\n (entry: ItemRegistryEntry<unknown, unknown>) => {\n (setKeyState as (v: unknown) => void)(entry.itemKey);\n setOpenState(false);\n setQuery('');\n emitChange({\n itemKey: entry.itemKey as K,\n value: entry.value as V,\n label: entry.label,\n });\n },\n [setKeyState, setOpenState, emitChange],\n );\n\n const onClear = useCallback(() => {\n (setKeyState as (v: unknown) => void)(null);\n emitChange(null);\n }, [setKeyState, emitChange]);\n\n const hasSelection = keyState !== null && keyState !== undefined;\n\n const ctx = useMemo<SelectContextValue>(\n () => ({\n open: openState,\n setOpen: setOpenState,\n selectedKey: keyState,\n hasSelection,\n onSelect,\n onClear,\n keyEquals: keyEqualsFn,\n items,\n registerItem,\n unregisterItem,\n query,\n setQuery,\n disabled,\n isLoading,\n clearable,\n serializeKey: serializeKeyFn,\n name,\n invalid,\n }),\n [\n openState,\n setOpenState,\n keyState,\n hasSelection,\n onSelect,\n onClear,\n keyEqualsFn,\n items,\n registerItem,\n unregisterItem,\n query,\n disabled,\n isLoading,\n clearable,\n serializeKeyFn,\n name,\n invalid,\n ],\n );\n\n return (\n <SelectContext.Provider value={ctx}>\n <Popover\n open={openState}\n onOpenChange={(o) => {\n setOpenState(o);\n if (!o) setQuery('');\n }}\n placement={placement}\n offset={4}\n >\n {children}\n </Popover>\n </SelectContext.Provider>\n );\n}\n\nconst Select = SelectImpl as (<K, V = K>(props: SelectProps<K, V>) => ReactElement) & {\n Trigger: typeof SelectTrigger;\n Value: typeof SelectValue;\n Content: typeof SelectContent;\n Item: typeof SelectItem;\n Group: typeof ListboxGroup;\n Separator: typeof ListboxSeparator;\n Empty: typeof ListboxEmpty;\n};\n\n/* ────────── Trigger ────────── */\n\n/** Contains the icon Tailwind classes per trigger size. */\nconst TRIGGER_ICON_CLASSES = {\n xs: 'h-3 w-3',\n sm: 'h-3.5 w-3.5',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n} as const;\n\n/** Contains the clear-button hit-box Tailwind classes per trigger size. */\nconst TRIGGER_CLEAR_BOX_CLASSES = {\n xs: 'h-4 w-4',\n sm: 'h-5 w-5',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n} as const;\n\n/** Contains the vertical-divider height Tailwind classes per trigger size. */\nconst TRIGGER_DIVIDER_CLASSES = {\n xs: 'h-3',\n sm: 'h-3.5',\n md: 'h-4',\n lg: 'h-5',\n} as const;\n\n/** Represents the prop surface of the `Select.Trigger`. */\nexport interface SelectTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'>,\n SelectTriggerVariants {\n children?: ReactNode;\n}\n\nexport const SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(\n function SelectTrigger({ size, state, className, children, ...rest }, ref) {\n const ctx = useSelectContext();\n const triggerState = state ?? (ctx.invalid ? 'invalid' : 'default');\n const showClear =\n ctx.clearable && ctx.hasSelection && !ctx.isLoading && !ctx.disabled;\n const sizeKey = size ?? 'md';\n const iconClass = TRIGGER_ICON_CLASSES[sizeKey];\n const clearBoxClass = TRIGGER_CLEAR_BOX_CLASSES[sizeKey];\n const dividerClass = TRIGGER_DIVIDER_CLASSES[sizeKey];\n return (\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={ctx.disabled || ctx.isLoading}\n aria-busy={ctx.isLoading || undefined}\n className={cn(selectTriggerVariants({ size, state: triggerState }), className)}\n {...rest}\n >\n {children ?? <SelectValue />}\n <span className=\"ml-auto flex shrink-0 items-center gap-1.5\">\n {showClear && (\n <>\n <span\n role=\"button\"\n tabIndex={0}\n aria-label=\"Clear selection\"\n onClick={(e) => {\n e.stopPropagation();\n ctx.onClear();\n }}\n onPointerDown={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n ctx.onClear();\n }\n }}\n className={cn(\n 'grid place-items-center rounded-full text-subtle-foreground transition-colors hover:bg-muted hover:text-foreground',\n clearBoxClass,\n )}\n >\n <X className={iconClass} />\n </span>\n {/* Separates the clear button from the chevron. */}\n <span aria-hidden className={cn('w-px bg-border', dividerClass)} />\n </>\n )}\n {ctx.isLoading ? (\n <Loader2 className={cn(iconClass, 'animate-spin text-subtle-foreground')} />\n ) : (\n <ChevronDown\n className={cn(\n iconClass,\n 'text-muted-foreground transition-transform',\n ctx.open && 'rotate-180',\n )}\n />\n )}\n </span>\n </button>\n </PopoverTrigger>\n );\n },\n);\n\n/* ────────── Value (label inside trigger) ────────── */\n\n/** Represents the prop surface of the `Select.Value`. */\nexport interface SelectValueProps {\n /** Shows when no item is selected. */\n placeholder?: ReactNode;\n /** Overrides the auto-resolved label (rendered as-is, no item lookup). */\n children?: ReactNode;\n}\n\n/** Provides the label shown inside the trigger for the currently selected item. */\nexport function SelectValue({ placeholder, children }: SelectValueProps) {\n const ctx = useSelectContext();\n if (children) return <span className=\"truncate\">{children}</span>;\n const match = ctx.hasSelection\n ? ctx.items.find((i) => ctx.keyEquals(i.itemKey, ctx.selectedKey))\n : undefined;\n const label =\n match?.label ?? (ctx.hasSelection ? ctx.serializeKey(ctx.selectedKey) : null);\n return (\n <span className={cn('truncate text-left', !label && 'text-subtle-foreground')}>\n {label ?? placeholder}\n </span>\n );\n}\n\n/* ────────── Content ────────── */\n\n/** Represents the prop surface of the `Select.Content`. */\nexport interface SelectContentProps extends SurfaceVariants {\n className?: string;\n /** Renders a search input above the items and filters by label substring. */\n searchable?: boolean;\n /** Sets the placeholder of the search input. */\n searchPlaceholder?: string;\n /** Renders this label when the search yields no matches. */\n noResultsLabel?: ReactNode;\n /** Locks the surface width to the trigger's width and truncates long items. */\n matchWidth?: boolean;\n children: ReactNode;\n}\n\n/** Provides the floating panel that hosts the items below the trigger. */\nexport function SelectContent({\n className,\n searchable = false,\n searchPlaceholder = 'Search…',\n noResultsLabel = 'No results',\n matchWidth = false,\n variant,\n tone,\n radius,\n padding,\n elevation,\n children,\n}: SelectContentProps) {\n const ctx = useSelectContext();\n const hasItems = ctx.items.length > 0;\n const visibleCount = ctx.query\n ? ctx.items.filter((i) => i.text.toLowerCase().includes(ctx.query.toLowerCase())).length\n : ctx.items.length;\n const showEmpty = hasItems && visibleCount === 0;\n\n return (\n <PopoverContent\n variant={variant}\n tone={tone}\n radius={radius}\n padding={padding ?? 'none'}\n elevation={elevation}\n className={cn(\n 'overflow-hidden',\n matchWidth\n ? 'w-[var(--anchor-width)] [&_[role=option]>span.flex-1>:first-child]:truncate'\n : 'w-auto min-w-[var(--anchor-width)]',\n className,\n )}\n >\n {searchable && (\n <div className=\"border-b border-border p-1\">\n <SearchInput\n size=\"sm\"\n autoFocus\n value={ctx.query}\n onChange={(e) => ctx.setQuery(e.target.value)}\n placeholder={searchPlaceholder}\n clearable\n onClear={() => ctx.setQuery('')}\n className=\"rounded-sm\"\n />\n </div>\n )}\n <Listbox<unknown>\n value={ctx.selectedKey ?? undefined}\n onValueChange={(k) => {\n if (k === null || k === undefined) return;\n const entry = ctx.items.find((i) => ctx.keyEquals(i.itemKey, k));\n if (entry) ctx.onSelect(entry);\n }}\n isEqual={ctx.keyEquals}\n variant=\"flat\"\n radius=\"none\"\n >\n {children}\n {showEmpty && <ListboxEmpty>{noResultsLabel}</ListboxEmpty>}\n </Listbox>\n {ctx.name && ctx.hasSelection && (\n <input type=\"hidden\" name={ctx.name} value={ctx.serializeKey(ctx.selectedKey)} />\n )}\n </PopoverContent>\n );\n}\n\n/* ────────── Item ────────── */\n\n/** Provides a plain-text representation of a ReactNode for substring search. */\nfunction extractText(node: ReactNode): string {\n if (node == null || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(extractText).join(' ');\n if (typeof node === 'object' && 'props' in node) {\n const props = (node as { props?: { children?: ReactNode } }).props;\n return extractText(props?.children);\n }\n return '';\n}\n\n/** Represents the prop surface of the `Select.Item`. */\nexport interface SelectItemProps<K = unknown, V = K> {\n /** Identifies the item; drives equality, ARIA, and search. */\n itemKey: K;\n /** Holds the rich payload returned via `onChange`; defaults to `itemKey`. */\n value?: V;\n /** Shows in the trigger when this item is selected. */\n label: ReactNode;\n /** Overrides in-list rendering; falls back to `label` when omitted. */\n children?: ReactNode;\n /** Overrides the searchable text; defaults to the text content of `label`. */\n text?: string;\n /** Disables this item when true. */\n disabled?: boolean;\n className?: string;\n}\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(function SelectItem(\n { itemKey, value, label, children, text, disabled, className },\n ref,\n) {\n const ctx = useSelectContext();\n const { registerItem, unregisterItem, query } = ctx;\n const resolvedValue = (value === undefined ? itemKey : value) as unknown;\n const itemText = useMemo(\n () => text ?? extractText(label) ?? extractText(children),\n [text, label, children],\n );\n\n useEffect(() => {\n registerItem({ itemKey, value: resolvedValue, label, text: itemText });\n return () => unregisterItem(itemKey);\n }, [registerItem, unregisterItem, itemKey, resolvedValue, label, itemText]);\n\n const matchesQuery =\n !query || itemText.toLowerCase().includes(query.toLowerCase());\n if (!matchesQuery) return null;\n\n /* Listbox compares via the wired keyEquals — same equality math as Select. */\n return (\n <ListboxItem ref={ref} value={itemKey} disabled={disabled} className={className}>\n {children ?? label}\n </ListboxItem>\n );\n}) as <K, V = K>(props: SelectItemProps<K, V> & { ref?: React.Ref<HTMLDivElement> }) => ReactElement;\n\nSelect.Trigger = SelectTrigger;\nSelect.Value = SelectValue;\nSelect.Content = SelectContent;\nSelect.Item = SelectItem as typeof SelectItem & ((props: SelectItemProps) => ReactElement);\nSelect.Group = ListboxGroup;\nSelect.Separator = ListboxSeparator;\nSelect.Empty = ListboxEmpty;\n\nexport { Select };\nexport default Select;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ChevronDown, X } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport type { SurfaceVariants } from '../../utils';\nimport {\n Listbox,\n ListboxItem,\n ListboxGroup,\n ListboxSeparator,\n ListboxEmpty,\n} from '../listbox';\nimport { selectTriggerVariants, type SelectTriggerVariants } from '../select/Select.variants';\n\ninterface MultiSelectContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n values: string[];\n setValues: (values: string[]) => void;\n labels: Record<string, ReactNode>;\n registerLabel: (value: string, label: ReactNode) => void;\n unregisterLabel: (value: string) => void;\n disabled: boolean;\n name?: string;\n invalid?: boolean;\n}\n\nconst MultiSelectContext = createContext<MultiSelectContextValue | null>(null);\n\nfunction useMultiSelectContext() {\n const ctx = useContext(MultiSelectContext);\n if (!ctx) throw new Error('MultiSelect.* must be used inside <MultiSelect>');\n return ctx;\n}\n\nexport interface MultiSelectProps {\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n disabled?: boolean;\n name?: string;\n invalid?: boolean;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n placement?: React.ComponentProps<typeof Popover>['placement'];\n children: ReactNode;\n}\n\nexport function MultiSelect({\n value,\n defaultValue,\n onValueChange,\n disabled = false,\n name,\n invalid,\n defaultOpen = false,\n open: openProp,\n onOpenChange,\n placement = 'bottom',\n children,\n}: MultiSelectProps) {\n const [openState, setOpenState] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [valuesState, setValuesState] = useControlled<string[]>({\n controlled: value,\n default: defaultValue ?? [],\n onChange: onValueChange,\n });\n const [labels, setLabels] = useState<Record<string, ReactNode>>({});\n\n const registerLabel = useCallback((v: string, label: ReactNode) => {\n setLabels((prev) => (prev[v] === label ? prev : { ...prev, [v]: label }));\n }, []);\n const unregisterLabel = useCallback((v: string) => {\n setLabels((prev) => {\n if (!(v in prev)) return prev;\n const next = { ...prev };\n delete next[v];\n return next;\n });\n }, []);\n\n const ctx = useMemo<MultiSelectContextValue>(\n () => ({\n open: openState,\n setOpen: setOpenState,\n values: valuesState,\n setValues: setValuesState,\n labels,\n registerLabel,\n unregisterLabel,\n disabled,\n name,\n invalid,\n }),\n [\n openState,\n setOpenState,\n valuesState,\n setValuesState,\n labels,\n registerLabel,\n unregisterLabel,\n disabled,\n name,\n invalid,\n ],\n );\n\n return (\n <MultiSelectContext.Provider value={ctx}>\n <Popover\n open={openState}\n onOpenChange={setOpenState}\n placement={placement}\n offset={6}\n >\n {children}\n </Popover>\n </MultiSelectContext.Provider>\n );\n}\n\nexport interface MultiSelectTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'>,\n SelectTriggerVariants {\n children?: ReactNode;\n}\n\nexport const MultiSelectTrigger = forwardRef<HTMLButtonElement, MultiSelectTriggerProps>(\n function MultiSelectTrigger(\n { size, state, className, onKeyDown, children, ...rest },\n ref,\n ) {\n const ctx = useMultiSelectContext();\n const triggerState = state ?? (ctx.invalid ? 'invalid' : 'default');\n return (\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n disabled={ctx.disabled}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === 'Backspace' && ctx.values.length > 0) {\n ctx.setValues(ctx.values.slice(0, -1));\n }\n }}\n className={cn(\n selectTriggerVariants({ size, state: triggerState }),\n 'h-auto min-h-10 flex-wrap py-1.5',\n className,\n )}\n {...rest}\n >\n {children ?? <MultiSelectTags />}\n <ChevronDown\n className={cn(\n 'h-4 w-4 shrink-0 self-center text-muted-foreground transition-transform',\n ctx.open && 'rotate-180',\n )}\n />\n </button>\n </PopoverTrigger>\n );\n },\n);\n\nexport interface MultiSelectTagsProps {\n /** Shown when no values selected. */\n placeholder?: ReactNode;\n}\n\nexport function MultiSelectTags({ placeholder }: MultiSelectTagsProps) {\n const ctx = useMultiSelectContext();\n if (ctx.values.length === 0) {\n return <span className=\"text-subtle-foreground\">{placeholder}</span>;\n }\n return (\n <span className=\"flex flex-1 flex-wrap items-center gap-1\">\n {ctx.values.map((v) => (\n <span\n key={v}\n className=\"inline-flex items-center gap-1 rounded-sm bg-muted px-1.5 py-0.5 text-xs\"\n >\n {ctx.labels[v] ?? v}\n {!ctx.disabled && (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label={`Remove ${typeof ctx.labels[v] === 'string' ? ctx.labels[v] : v}`}\n onClick={(e) => {\n e.stopPropagation();\n ctx.setValues(ctx.values.filter((x) => x !== v));\n }}\n onPointerDown={(e) => e.stopPropagation()}\n className=\"cursor-pointer rounded-sm p-0.5 hover:bg-border\"\n >\n <X className=\"h-3 w-3\" />\n </span>\n )}\n </span>\n ))}\n </span>\n );\n}\n\nexport interface MultiSelectContentProps extends SurfaceVariants {\n className?: string;\n children: ReactNode;\n}\n\nexport function MultiSelectContent({\n className,\n variant,\n tone,\n radius,\n padding,\n elevation,\n children,\n}: MultiSelectContentProps) {\n const ctx = useMultiSelectContext();\n return (\n <PopoverContent\n variant={variant}\n tone={tone}\n radius={radius}\n padding={padding ?? 'none'}\n elevation={elevation}\n className={cn('w-auto min-w-[var(--anchor-width)] overflow-hidden', className)}\n >\n <Listbox<string>\n multiple\n value={ctx.values}\n onValueChange={(v) => ctx.setValues(v)}\n variant=\"flat\"\n radius=\"none\"\n >\n {children}\n </Listbox>\n {ctx.name &&\n ctx.values.map((v) => <input key={v} type=\"hidden\" name={ctx.name} value={v} />)}\n </PopoverContent>\n );\n}\n\nexport interface MultiSelectItemProps {\n value: string;\n disabled?: boolean;\n className?: string;\n children: ReactNode;\n}\n\nexport const MultiSelectItem = forwardRef<HTMLDivElement, MultiSelectItemProps>(\n function MultiSelectItem(props, ref) {\n const ctx = useMultiSelectContext();\n /* Stable refs out of ctx — same rationale as SelectItem (see comment there). */\n const { registerLabel, unregisterLabel } = ctx;\n useEffect(() => {\n registerLabel(props.value, props.children);\n return () => unregisterLabel(props.value);\n }, [registerLabel, unregisterLabel, props.value, props.children]);\n return <ListboxItem ref={ref} {...props} />;\n },\n);\n\ntype MultiSelectComponent = typeof MultiSelect & {\n Trigger: typeof MultiSelectTrigger;\n Tags: typeof MultiSelectTags;\n Content: typeof MultiSelectContent;\n Item: typeof MultiSelectItem;\n Group: typeof ListboxGroup;\n Separator: typeof ListboxSeparator;\n Empty: typeof ListboxEmpty;\n};\n\n(MultiSelect as MultiSelectComponent).Trigger = MultiSelectTrigger;\n(MultiSelect as MultiSelectComponent).Tags = MultiSelectTags;\n(MultiSelect as MultiSelectComponent).Content = MultiSelectContent;\n(MultiSelect as MultiSelectComponent).Item = MultiSelectItem;\n(MultiSelect as MultiSelectComponent).Group = ListboxGroup;\n(MultiSelect as MultiSelectComponent).Separator = ListboxSeparator;\n(MultiSelect as MultiSelectComponent).Empty = ListboxEmpty;\n\nexport default MultiSelect as MultiSelectComponent;\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { Check } from 'lucide-react';\nimport { cn, composeRefs, surfaceVariants, type SurfaceVariants } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { AnchoredPositioner, DismissableLayer, Portal } from '../../primitives';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\nimport {\n listboxVariants,\n listboxItemVariants,\n listboxGroupLabelVariants,\n listboxSeparatorVariants,\n listboxEmptyVariants,\n} from '../listbox/Listbox.variants';\n\ninterface ComboboxItemEntry {\n id: string;\n value: string;\n disabled: boolean;\n label: ReactNode;\n}\n\ninterface ComboboxContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n value: string;\n setValue: (value: string) => void;\n inputValue: string;\n setInputValue: (input: string) => void;\n activeId: string | null;\n setActiveId: (id: string | null) => void;\n registerItem: (entry: ComboboxItemEntry) => void;\n unregisterItem: (id: string) => void;\n itemsRef: React.MutableRefObject<ComboboxItemEntry[]>;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n listboxId: string;\n disabled: boolean;\n invalid?: boolean;\n selectItem: (entry: ComboboxItemEntry, options?: { close?: boolean }) => void;\n}\n\nconst ComboboxContext = createContext<ComboboxContextValue | null>(null);\n\nfunction useComboboxContext() {\n const ctx = useContext(ComboboxContext);\n if (!ctx) throw new Error('Combobox.* must be used inside <Combobox>');\n return ctx;\n}\n\nexport interface ComboboxProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n inputValue?: string;\n defaultInputValue?: string;\n onInputChange?: (input: string) => void;\n disabled?: boolean;\n invalid?: boolean;\n name?: string;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** When the user picks an item, set the input value to its label. Default true. */\n fillInputOnSelect?: boolean;\n children: ReactNode;\n}\n\nexport function Combobox({\n value,\n defaultValue,\n onValueChange,\n inputValue,\n defaultInputValue,\n onInputChange,\n disabled = false,\n invalid,\n name,\n defaultOpen = false,\n open: openProp,\n onOpenChange,\n fillInputOnSelect = true,\n children,\n}: ComboboxProps) {\n const [openState, setOpenState] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const [valueState, setValueState] = useControlled({\n controlled: value,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const [inputState, setInputState] = useControlled({\n controlled: inputValue,\n default: defaultInputValue ?? '',\n onChange: onInputChange,\n });\n\n const itemsRef = useRef<ComboboxItemEntry[]>([]);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [activeId, setActiveId] = useState<string | null>(null);\n const listboxId = useId();\n\n const registerItem = useCallback((entry: ComboboxItemEntry) => {\n const idx = itemsRef.current.findIndex((i) => i.id === entry.id);\n if (idx >= 0) itemsRef.current[idx] = entry;\n else itemsRef.current.push(entry);\n }, []);\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter((i) => i.id !== id);\n }, []);\n\n const selectItem = useCallback(\n (entry: ComboboxItemEntry, opts?: { close?: boolean }) => {\n setValueState(entry.value);\n if (fillInputOnSelect) {\n const text = typeof entry.label === 'string' ? entry.label : entry.value;\n setInputState(text);\n }\n if (opts?.close ?? true) setOpenState(false);\n },\n [setValueState, setInputState, setOpenState, fillInputOnSelect],\n );\n\n const ctx = useMemo<ComboboxContextValue>(\n () => ({\n open: openState,\n setOpen: setOpenState,\n value: valueState,\n setValue: setValueState,\n inputValue: inputState,\n setInputValue: setInputState,\n activeId,\n setActiveId,\n registerItem,\n unregisterItem,\n itemsRef,\n inputRef,\n listboxId,\n disabled,\n invalid,\n selectItem,\n }),\n [\n openState,\n setOpenState,\n valueState,\n setValueState,\n inputState,\n setInputState,\n activeId,\n registerItem,\n unregisterItem,\n listboxId,\n disabled,\n invalid,\n selectItem,\n ],\n );\n\n return (\n <ComboboxContext.Provider value={ctx}>\n {children}\n {name && <input type=\"hidden\" name={name} value={valueState} />}\n </ComboboxContext.Provider>\n );\n}\n\nexport interface ComboboxInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'size'>,\n InputBaseVariants {}\n\nexport const ComboboxInput = forwardRef<HTMLInputElement, ComboboxInputProps>(\n function ComboboxInput(\n { className, size, state, onKeyDown, onFocus, ...rest },\n forwardedRef,\n ) {\n const ctx = useComboboxContext();\n const inputState = state ?? (ctx.invalid ? 'invalid' : 'default');\n\n const moveActive = useCallback(\n (direction: 1 | -1) => {\n const list = ctx.itemsRef.current.filter((i) => !i.disabled);\n if (list.length === 0) return;\n const idx = list.findIndex((i) => i.id === ctx.activeId);\n let nextIdx = idx + direction;\n if (idx === -1) nextIdx = direction === 1 ? 0 : list.length - 1;\n if (nextIdx < 0) nextIdx = list.length - 1;\n if (nextIdx >= list.length) nextIdx = 0;\n const next = list[nextIdx];\n if (next) ctx.setActiveId(next.id);\n },\n [ctx],\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || ctx.disabled) return;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!ctx.open) ctx.setOpen(true);\n else moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!ctx.open) ctx.setOpen(true);\n else moveActive(-1);\n break;\n case 'Home':\n if (ctx.open) {\n e.preventDefault();\n const first = ctx.itemsRef.current.find((i) => !i.disabled);\n if (first) ctx.setActiveId(first.id);\n }\n break;\n case 'End':\n if (ctx.open) {\n e.preventDefault();\n const list = ctx.itemsRef.current.filter((i) => !i.disabled);\n const last = list[list.length - 1];\n if (last) ctx.setActiveId(last.id);\n }\n break;\n case 'Enter': {\n if (!ctx.open || !ctx.activeId) return;\n const entry = ctx.itemsRef.current.find((i) => i.id === ctx.activeId);\n if (!entry || entry.disabled) return;\n e.preventDefault();\n ctx.selectItem(entry);\n break;\n }\n case 'Escape':\n if (ctx.open) {\n e.preventDefault();\n ctx.setOpen(false);\n } else if (ctx.inputValue) {\n e.preventDefault();\n ctx.setInputValue('');\n ctx.setValue('');\n }\n break;\n }\n };\n\n return (\n <input\n ref={composeRefs(forwardedRef, ctx.inputRef)}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={ctx.open}\n aria-controls={ctx.listboxId}\n aria-activedescendant={ctx.activeId ?? undefined}\n aria-autocomplete=\"list\"\n aria-disabled={ctx.disabled || undefined}\n disabled={ctx.disabled}\n value={ctx.inputValue}\n onChange={(e) => {\n ctx.setInputValue(e.target.value);\n if (!ctx.open) ctx.setOpen(true);\n // Clear active when input changes — re-init on next render of items.\n ctx.setActiveId(null);\n }}\n onFocus={(e) => {\n onFocus?.(e);\n if (!ctx.open) ctx.setOpen(true);\n }}\n onKeyDown={handleKeyDown}\n className={cn(inputBaseVariants({ size, state: inputState }), className)}\n {...rest}\n />\n );\n },\n);\n\nexport interface ComboboxContentProps extends SurfaceVariants {\n className?: string;\n placement?: React.ComponentProps<typeof AnchoredPositioner>['placement'];\n offset?: number;\n children: ReactNode;\n}\n\nexport function ComboboxContent({\n className,\n placement = 'bottom',\n offset = 6,\n variant,\n tone,\n radius,\n padding,\n elevation,\n children,\n}: ComboboxContentProps) {\n const ctx = useComboboxContext();\n if (!ctx.open) return null;\n /* Default to `xs` (p-1) so items breathe — same as Listbox. */\n const resolvedPadding = padding ?? 'xs';\n return (\n <Portal>\n <AnchoredPositioner\n anchor={ctx.inputRef.current}\n placement={placement}\n offset={offset}\n className=\"z-dropdown\"\n >\n <DismissableLayer\n onEscape={() => ctx.setOpen(false)}\n onOutsidePointerDown={(e) => {\n if (ctx.inputRef.current?.contains(e.target as Node)) return;\n ctx.setOpen(false);\n }}\n >\n <div\n id={ctx.listboxId}\n role=\"listbox\"\n className={cn(\n surfaceVariants({\n variant,\n tone,\n radius,\n padding: resolvedPadding,\n elevation,\n }),\n listboxVariants(),\n className,\n )}\n style={\n ctx.inputRef.current\n ? { minWidth: ctx.inputRef.current.offsetWidth }\n : undefined\n }\n >\n {children}\n </div>\n </DismissableLayer>\n </AnchoredPositioner>\n </Portal>\n );\n}\n\nexport interface ComboboxItemProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const ComboboxItem = forwardRef<HTMLDivElement, ComboboxItemProps>(function ComboboxItem(\n { value, disabled = false, className, children, onClick, onPointerEnter, ...rest },\n forwardedRef,\n) {\n const ctx = useComboboxContext();\n const id = useId();\n\n useEffect(() => {\n ctx.registerItem({ id, value, disabled, label: children });\n return () => ctx.unregisterItem(id);\n }, [ctx, id, value, disabled, children]);\n\n // Auto-set first matching item active on render if no active id.\n useEffect(() => {\n if (!ctx.activeId) {\n const list = ctx.itemsRef.current.filter((i) => !i.disabled);\n if (list[0]) ctx.setActiveId(list[0].id);\n }\n }, [ctx]);\n\n const isSelected = ctx.value === value;\n const isActive = ctx.activeId === id;\n const state = disabled\n ? 'disabled'\n : isSelected\n ? 'selected'\n : isActive\n ? 'active'\n : 'default';\n\n return (\n <div\n ref={forwardedRef}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n data-active={isActive ? '' : undefined}\n data-selected={isSelected ? '' : undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n ctx.selectItem({ id, value, disabled, label: children });\n }}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n if (!disabled) ctx.setActiveId(id);\n }}\n className={cn(listboxItemVariants({ state }), className)}\n {...rest}\n >\n <span className=\"flex-1\">{children}</span>\n {isSelected && <Check className=\"h-4 w-4 opacity-80\" />}\n </div>\n );\n});\n\nexport interface ComboboxGroupProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n children: ReactNode;\n}\n\nexport function ComboboxGroup({ label, children, className, ...rest }: ComboboxGroupProps) {\n const labelId = useId();\n return (\n <div role=\"group\" aria-labelledby={label ? labelId : undefined} className={className} {...rest}>\n {label && (\n <div id={labelId} className={listboxGroupLabelVariants()}>\n {label}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nexport function ComboboxSeparator(props: HTMLAttributes<HTMLDivElement>) {\n return <div role=\"separator\" className={listboxSeparatorVariants()} {...props} />;\n}\n\nexport function ComboboxEmpty({ children, className, ...rest }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div role=\"presentation\" className={cn(listboxEmptyVariants(), className)} {...rest}>\n {children}\n </div>\n );\n}\n\ntype ComboboxComponent = typeof Combobox & {\n Input: typeof ComboboxInput;\n Content: typeof ComboboxContent;\n Item: typeof ComboboxItem;\n Group: typeof ComboboxGroup;\n Separator: typeof ComboboxSeparator;\n Empty: typeof ComboboxEmpty;\n};\n\n(Combobox as ComboboxComponent).Input = ComboboxInput;\n(Combobox as ComboboxComponent).Content = ComboboxContent;\n(Combobox as ComboboxComponent).Item = ComboboxItem;\n(Combobox as ComboboxComponent).Group = ComboboxGroup;\n(Combobox as ComboboxComponent).Separator = ComboboxSeparator;\n(Combobox as ComboboxComponent).Empty = ComboboxEmpty;\n\nexport default Combobox as ComboboxComponent;\n","// Shared month-grid renderer for Calendar and RangeCalendar. Co-located in\n// `forms/` as a domain-internal helper. Owns:\n// - the 42-cell visual layout (header + weekday row + 6×7 grid)\n// - keyboard navigation (arrows / Home/End / PgUp/PgDn / Shift+PgUp/PgDn)\n// - focused-cell management (autofocus on focusedDate change)\n// - month nav buttons\n//\n// Consumers (Calendar, RangeCalendar) provide:\n// - their own selection state via `dayProps(date)` returning extra attrs\n// - `onDayActivate(date)` callback for click/Enter/Space\n//\n// Not exported from `forms/index.ts` — internal only.\n\nimport {\n useCallback,\n useEffect,\n useRef,\n type ButtonHTMLAttributes,\n type KeyboardEvent,\n} from 'react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport { cn } from '../utils';\nimport {\n MONTHS_LONG,\n WEEKDAYS_SHORT,\n addDays,\n addMonths,\n buildMonthGrid,\n isSameDay,\n isToday,\n startOfMonth,\n} from './DateExtensions';\n\nexport interface MonthGridDayProps\n extends Pick<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'className' | 'onPointerEnter' | 'onPointerLeave' | 'aria-selected'\n > {\n /** Extra `data-*` attributes (data-selected, data-range-start, etc.). */\n [key: `data-${string}`]: string | boolean | undefined;\n}\n\nexport interface MonthGridProps {\n /** First day of the visible month (use `startOfMonth(date)`). */\n viewMonth: Date;\n /** Called when prev/next steps the visible month. */\n onViewMonthChange: (date: Date) => void;\n /** The currently focused day (cell tabIndex=0). */\n focusedDate: Date;\n /** Called by keyboard navigation. */\n onFocusedDateChange: (date: Date) => void;\n /** Predicate marking a day as disabled. */\n isDayDisabled?: (date: Date) => boolean;\n /** Click / Enter / Space activation. */\n onDayActivate?: (date: Date, meta: { outOfMonth: boolean }) => void;\n /** Extra per-day attributes for selection styling and hover handlers. */\n dayProps?: (date: Date, meta: { outOfMonth: boolean }) => MonthGridDayProps | undefined;\n 'aria-label'?: string;\n className?: string;\n}\n\nexport function MonthGrid({\n viewMonth,\n onViewMonthChange,\n focusedDate,\n onFocusedDateChange,\n isDayDisabled,\n onDayActivate,\n dayProps,\n 'aria-label': ariaLabel = 'Calendar',\n className,\n}: MonthGridProps) {\n const gridRef = useRef<HTMLDivElement | null>(null);\n\n // Re-focus the active day cell when focusedDate changes (keyboard nav).\n useEffect(() => {\n const cell = gridRef.current?.querySelector<HTMLButtonElement>(\n `[data-date=\"${focusedDate.toDateString()}\"]`,\n );\n cell?.focus();\n }, [focusedDate]);\n\n const moveFocus = useCallback(\n (next: Date) => {\n if (\n next.getMonth() !== viewMonth.getMonth() ||\n next.getFullYear() !== viewMonth.getFullYear()\n ) {\n onViewMonthChange(startOfMonth(next));\n }\n onFocusedDateChange(next);\n },\n [viewMonth, onViewMonthChange, onFocusedDateChange],\n );\n\n const onCellKeyDown = useCallback(\n (e: KeyboardEvent<HTMLButtonElement>, date: Date, outOfMonth: boolean) => {\n switch (e.key) {\n case 'ArrowRight':\n e.preventDefault();\n moveFocus(addDays(date, 1));\n break;\n case 'ArrowLeft':\n e.preventDefault();\n moveFocus(addDays(date, -1));\n break;\n case 'ArrowDown':\n e.preventDefault();\n moveFocus(addDays(date, 7));\n break;\n case 'ArrowUp':\n e.preventDefault();\n moveFocus(addDays(date, -7));\n break;\n case 'Home':\n e.preventDefault();\n moveFocus(addDays(date, -date.getDay()));\n break;\n case 'End':\n e.preventDefault();\n moveFocus(addDays(date, 6 - date.getDay()));\n break;\n case 'PageDown':\n e.preventDefault();\n moveFocus(addMonths(date, e.shiftKey ? 12 : 1));\n break;\n case 'PageUp':\n e.preventDefault();\n moveFocus(addMonths(date, e.shiftKey ? -12 : -1));\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (!isDayDisabled?.(date)) onDayActivate?.(date, { outOfMonth });\n break;\n }\n },\n [moveFocus, onDayActivate, isDayDisabled],\n );\n\n const cells = buildMonthGrid(viewMonth.getFullYear(), viewMonth.getMonth());\n\n return (\n <div\n role=\"application\"\n aria-label={ariaLabel}\n className={cn(\n 'inline-flex flex-col gap-2 rounded-md border border-border bg-popover p-3 text-popover-foreground',\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between gap-2 px-1\">\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n onClick={() => onViewMonthChange(addMonths(viewMonth, -1))}\n className=\"grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronLeft className=\"h-4 w-4\" />\n </button>\n <div className=\"text-sm font-medium\" aria-live=\"polite\">\n {MONTHS_LONG[viewMonth.getMonth()]} {viewMonth.getFullYear()}\n </div>\n <button\n type=\"button\"\n aria-label=\"Next month\"\n onClick={() => onViewMonthChange(addMonths(viewMonth, 1))}\n className=\"grid h-7 w-7 place-items-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <ChevronRight className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Weekday row */}\n <div className=\"grid grid-cols-7 gap-0 px-1\">\n {WEEKDAYS_SHORT.map((w) => (\n <div\n key={w}\n className=\"grid h-7 w-9 place-items-center text-xs font-medium text-muted-foreground\"\n >\n {w}\n </div>\n ))}\n </div>\n\n {/* Day grid */}\n <div ref={gridRef} className=\"grid grid-cols-7 gap-0 px-1\" role=\"grid\">\n {cells.map(({ date, outOfMonth }) => {\n const disabled = isDayDisabled?.(date) ?? false;\n const isFocusedCell = isSameDay(focusedDate, date);\n const consumerProps = dayProps?.(date, { outOfMonth }) ?? {};\n const { className: cellClassName, ...consumerRest } = consumerProps as Record<\n string,\n unknown\n > & { className?: string };\n\n return (\n <button\n key={date.toDateString()}\n type=\"button\"\n role=\"gridcell\"\n data-date={date.toDateString()}\n aria-disabled={disabled || undefined}\n data-today={isToday(date) ? '' : undefined}\n data-out-of-month={outOfMonth ? '' : undefined}\n data-disabled={disabled ? '' : undefined}\n tabIndex={isFocusedCell ? 0 : -1}\n disabled={disabled}\n onClick={() => {\n if (disabled) return;\n onDayActivate?.(date, { outOfMonth });\n onFocusedDateChange(date);\n if (outOfMonth) onViewMonthChange(startOfMonth(date));\n }}\n onKeyDown={(e) => onCellKeyDown(e, date, outOfMonth)}\n {...(consumerRest as ButtonHTMLAttributes<HTMLButtonElement>)}\n className={cn(\n 'grid h-9 w-9 place-items-center text-sm transition-colors',\n 'hover:bg-muted hover:text-foreground',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n outOfMonth && 'text-muted-foreground/60',\n disabled && 'pointer-events-none opacity-40',\n cellClassName,\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n","import { forwardRef, useState, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { isDateDisabled, isSameDay, isToday, startOfMonth } from '../DateExtensions';\nimport { MonthGrid } from '../MonthGrid';\n\nexport interface CalendarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n /** Controlled selected date. */\n value?: Date | null;\n /** Uncontrolled initial selection. */\n defaultValue?: Date | null;\n /** Selection callback. */\n onChange?: (date: Date) => void;\n /** Initial visible month (uncontrolled). */\n defaultMonth?: Date;\n /** Minimum selectable date. */\n min?: Date | null;\n /** Maximum selectable date. */\n max?: Date | null;\n /** Custom disable predicate. */\n isDisabled?: (date: Date) => boolean;\n /** A11y label. */\n 'aria-label'?: string;\n}\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(function Calendar(\n {\n value,\n defaultValue,\n onChange,\n defaultMonth,\n min,\n max,\n isDisabled,\n 'aria-label': ariaLabel = 'Calendar',\n className,\n ...rest\n },\n ref,\n) {\n const [selected, setSelected] = useControlled<Date | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange: onChange as ((v: Date | null) => void) | undefined,\n });\n const [viewMonth, setViewMonth] = useState<Date>(\n () => startOfMonth(defaultMonth ?? selected ?? new Date()),\n );\n const [focusedDate, setFocusedDate] = useState<Date>(() => selected ?? new Date());\n\n return (\n <div ref={ref} className={cn(className)} {...rest}>\n <MonthGrid\n viewMonth={viewMonth}\n onViewMonthChange={setViewMonth}\n focusedDate={focusedDate}\n onFocusedDateChange={setFocusedDate}\n isDayDisabled={(d) => isDateDisabled(d, { min, max, isDisabled })}\n onDayActivate={(d) => setSelected(d)}\n dayProps={(date) => {\n const isSelectedCell = isSameDay(selected, date);\n return {\n 'aria-selected': isSelectedCell,\n 'data-selected': isSelectedCell ? '' : undefined,\n className: cn(\n 'rounded-sm',\n isToday(date) && !isSelectedCell && 'border border-border',\n isSelectedCell && 'bg-primary text-primary-foreground hover:bg-primary',\n ),\n };\n }}\n aria-label={ariaLabel}\n />\n </div>\n );\n});\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\nimport { formatISODate, parseISODate } from '../DateExtensions';\n\nexport interface DateFieldProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'value' | 'defaultValue' | 'onChange' | 'min' | 'max' | 'size'\n >,\n InputBaseVariants {\n value?: Date | null;\n defaultValue?: Date | null;\n onChange?: (date: Date | null) => void;\n min?: Date | null;\n max?: Date | null;\n}\n\nexport const DateField = forwardRef<HTMLInputElement, DateFieldProps>(function DateField(\n { value, defaultValue, onChange, min, max, size, state, className, id, disabled, required, ...rest },\n ref,\n) {\n const ctx = useFormControl();\n const [current, setCurrent] = useControlled<Date | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange,\n });\n return (\n <input\n ref={ref}\n type=\"date\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n value={formatISODate(current)}\n min={formatISODate(min)}\n max={formatISODate(max)}\n onChange={(e) => setCurrent(parseISODate(e.target.value))}\n className={cn(inputBaseVariants({ size, state: state ?? (ctx?.isInvalid ? 'invalid' : 'default') }), className)}\n {...rest}\n />\n );\n});\n","import { forwardRef, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\nimport { formatISOTime, parseISOTime } from '../DateExtensions';\n\nexport interface TimeValue {\n hours: number;\n minutes: number;\n}\n\nexport interface TimeFieldProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n InputBaseVariants {\n value?: TimeValue | null;\n defaultValue?: TimeValue | null;\n onChange?: (value: TimeValue | null) => void;\n}\n\nfunction timeToString(t: TimeValue | null | undefined): string {\n if (!t) return '';\n const date = new Date();\n date.setHours(t.hours, t.minutes, 0, 0);\n return formatISOTime(date);\n}\n\nexport const TimeField = forwardRef<HTMLInputElement, TimeFieldProps>(function TimeField(\n { value, defaultValue, onChange, size, state, className, id, disabled, required, ...rest },\n ref,\n) {\n const ctx = useFormControl();\n const [current, setCurrent] = useControlled<TimeValue | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange,\n });\n return (\n <input\n ref={ref}\n type=\"time\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n value={timeToString(current)}\n onChange={(e) => setCurrent(parseISOTime(e.target.value))}\n className={cn(inputBaseVariants({ size, state: state ?? (ctx?.isInvalid ? 'invalid' : 'default') }), className)}\n {...rest}\n />\n );\n});\n","import { forwardRef, useState, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport {\n isDateDisabled,\n isInRange,\n isSameDay,\n isToday,\n startOfDay,\n startOfMonth,\n} from '../DateExtensions';\nimport { MonthGrid } from '../MonthGrid';\n\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\nexport interface RangeCalendarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: DateRange | null;\n defaultValue?: DateRange | null;\n onChange?: (range: DateRange) => void;\n defaultMonth?: Date;\n min?: Date | null;\n max?: Date | null;\n isDisabled?: (date: Date) => boolean;\n 'aria-label'?: string;\n}\n\nexport const RangeCalendar = forwardRef<HTMLDivElement, RangeCalendarProps>(\n function RangeCalendar(\n {\n value,\n defaultValue,\n onChange,\n defaultMonth,\n min,\n max,\n isDisabled,\n 'aria-label': ariaLabel = 'Date range',\n className,\n ...rest\n },\n ref,\n ) {\n const [range, setRange] = useControlled<DateRange | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange: onChange as ((v: DateRange | null) => void) | undefined,\n });\n const [viewMonth, setViewMonth] = useState<Date>(\n () => startOfMonth(defaultMonth ?? range?.start ?? new Date()),\n );\n const [focusedDate, setFocusedDate] = useState<Date>(() => range?.start ?? new Date());\n const [hoveredDate, setHoveredDate] = useState<Date | null>(null);\n const [pendingStart, setPendingStart] = useState<Date | null>(null);\n\n const handleActivate = (date: Date) => {\n if (!pendingStart) {\n setPendingStart(date);\n setRange({ start: date, end: null });\n return;\n }\n const startTime = startOfDay(pendingStart).getTime();\n const endTime = startOfDay(date).getTime();\n const finalStart = startTime <= endTime ? pendingStart : date;\n const finalEnd = startTime <= endTime ? date : pendingStart;\n setRange({ start: finalStart, end: finalEnd });\n setPendingStart(null);\n };\n\n const previewEnd = pendingStart ? hoveredDate : range?.end;\n const isStart = (d: Date) =>\n isSameDay(d, range?.start ?? null) || isSameDay(d, pendingStart);\n const isEnd = (d: Date) => isSameDay(d, range?.end ?? null);\n const inRange = (d: Date) =>\n isInRange(d, pendingStart ?? range?.start, previewEnd ?? null);\n\n return (\n <div ref={ref} className={cn(className)} {...rest}>\n <MonthGrid\n viewMonth={viewMonth}\n onViewMonthChange={setViewMonth}\n focusedDate={focusedDate}\n onFocusedDateChange={setFocusedDate}\n isDayDisabled={(d) => isDateDisabled(d, { min, max, isDisabled })}\n onDayActivate={handleActivate}\n dayProps={(date) => {\n const startCell = isStart(date);\n const endCell = isEnd(date);\n const rangeCell = inRange(date) && !startCell && !endCell;\n const selected = startCell || endCell;\n return {\n 'aria-selected': selected,\n 'data-range-start': startCell ? '' : undefined,\n 'data-range-end': endCell ? '' : undefined,\n 'data-in-range': rangeCell ? '' : undefined,\n onPointerEnter: () => setHoveredDate(date),\n onPointerLeave: () =>\n setHoveredDate((h) => (isSameDay(h, date) ? null : h)),\n className: cn(\n isToday(date) && !startCell && !endCell && 'border border-border rounded-sm',\n rangeCell && 'bg-primary-soft text-primary-soft-foreground',\n startCell && 'bg-primary text-primary-foreground rounded-l-sm',\n endCell && 'bg-primary text-primary-foreground rounded-r-sm',\n !startCell && !endCell && !rangeCell && 'rounded-sm',\n ),\n };\n }}\n aria-label={ariaLabel}\n />\n </div>\n );\n },\n);\n","import { forwardRef, type ButtonHTMLAttributes } from 'react';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { selectTriggerVariants, type SelectTriggerVariants } from '../select/Select.variants';\nimport { formatISODate } from '../DateExtensions';\nimport { Calendar } from '../calendar';\n\nexport interface DatePickerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'value' | 'defaultValue'>,\n SelectTriggerVariants {\n value?: Date | null;\n defaultValue?: Date | null;\n onChange?: (date: Date | null) => void;\n placeholder?: string;\n format?: (date: Date) => string;\n min?: Date | null;\n max?: Date | null;\n isDisabled?: (date: Date) => boolean;\n invalid?: boolean;\n /** When `name` is set, a hidden input ships the ISO value with form submission. */\n name?: string;\n}\n\nconst defaultFormat = (d: Date) =>\n d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n\nexport const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(function DatePicker(\n {\n value,\n defaultValue,\n onChange,\n placeholder = 'Pick a date',\n format = defaultFormat,\n min,\n max,\n isDisabled: dayDisabled,\n invalid,\n name,\n size,\n state,\n className,\n disabled,\n ...rest\n },\n forwardedRef,\n) {\n const [date, setDate] = useControlled<Date | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange,\n });\n const [open, setOpen] = useControlled<boolean>({\n controlled: undefined,\n default: false,\n });\n\n const triggerState = state ?? (invalid ? 'invalid' : 'default');\n\n return (\n <Popover open={open} onOpenChange={setOpen} placement=\"bottom-start\" offset={6}>\n <PopoverTrigger asChild>\n <button\n ref={forwardedRef}\n type=\"button\"\n disabled={disabled}\n className={cn(selectTriggerVariants({ size, state: triggerState }), className)}\n {...rest}\n >\n <span className={cn('truncate', !date && 'text-subtle-foreground')}>\n {date ? format(date) : placeholder}\n </span>\n <CalendarIcon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n </button>\n </PopoverTrigger>\n <PopoverContent bare>\n <Calendar\n value={date}\n onChange={(d) => {\n setDate(d);\n setOpen(false);\n }}\n defaultMonth={date ?? new Date()}\n min={min}\n max={max}\n isDisabled={dayDisabled}\n />\n </PopoverContent>\n {name && <input type=\"hidden\" name={name} value={formatISODate(date)} />}\n </Popover>\n );\n});\n","import { forwardRef, useEffect, useMemo, useRef, type ButtonHTMLAttributes } from 'react';\nimport { Clock } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { selectTriggerVariants, type SelectTriggerVariants } from '../select/Select.variants';\nimport { type TimeValue } from '../timeField';\n\nexport interface TimePickerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'value' | 'defaultValue'>,\n SelectTriggerVariants {\n value?: TimeValue | null;\n defaultValue?: TimeValue | null;\n onChange?: (time: TimeValue | null) => void;\n /** Minute interval. Default 5. */\n minuteStep?: number;\n placeholder?: string;\n format?: (time: TimeValue) => string;\n invalid?: boolean;\n name?: string;\n}\n\nconst defaultFormat = (t: TimeValue) =>\n `${String(t.hours).padStart(2, '0')}:${String(t.minutes).padStart(2, '0')}`;\n\nconst HOURS = Array.from({ length: 24 }, (_, i) => i);\n\nexport const TimePicker = forwardRef<HTMLButtonElement, TimePickerProps>(function TimePicker(\n {\n value,\n defaultValue,\n onChange,\n minuteStep = 5,\n placeholder = 'Pick a time',\n format = defaultFormat,\n invalid,\n name,\n size,\n state,\n className,\n disabled,\n ...rest\n },\n forwardedRef,\n) {\n const [time, setTime] = useControlled<TimeValue | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange,\n });\n const [open, setOpen] = useControlled<boolean>({\n controlled: undefined,\n default: false,\n });\n const hoursRef = useRef<HTMLDivElement | null>(null);\n const minutesRef = useRef<HTMLDivElement | null>(null);\n\n const minutes = useMemo(() => {\n const list: number[] = [];\n for (let m = 0; m < 60; m += minuteStep) list.push(m);\n return list;\n }, [minuteStep]);\n\n // Auto-scroll selected hour/minute into view when opening.\n useEffect(() => {\n if (!open) return;\n requestAnimationFrame(() => {\n hoursRef.current\n ?.querySelector<HTMLButtonElement>('[data-selected]')\n ?.scrollIntoView({ block: 'center' });\n minutesRef.current\n ?.querySelector<HTMLButtonElement>('[data-selected]')\n ?.scrollIntoView({ block: 'center' });\n });\n }, [open]);\n\n const triggerState = state ?? (invalid ? 'invalid' : 'default');\n\n const update = (next: Partial<TimeValue>) => {\n const merged: TimeValue = {\n hours: next.hours ?? time?.hours ?? 0,\n minutes: next.minutes ?? time?.minutes ?? 0,\n };\n setTime(merged);\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen} placement=\"bottom-start\" offset={6}>\n <PopoverTrigger asChild>\n <button\n ref={forwardedRef}\n type=\"button\"\n disabled={disabled}\n className={cn(selectTriggerVariants({ size, state: triggerState }), className)}\n {...rest}\n >\n <span className={cn('truncate', !time && 'text-subtle-foreground')}>\n {time ? format(time) : placeholder}\n </span>\n <Clock className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n </button>\n </PopoverTrigger>\n <PopoverContent bare>\n <div className=\"flex gap-1 rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-md\">\n <div\n ref={hoursRef}\n role=\"listbox\"\n aria-label=\"Hours\"\n className=\"flex max-h-56 flex-col gap-0.5 overflow-y-auto pr-1\"\n >\n {HOURS.map((h) => {\n const selected = time?.hours === h;\n return (\n <button\n key={h}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n data-selected={selected ? '' : undefined}\n onClick={() => update({ hours: h })}\n className={cn(\n 'grid h-8 w-12 place-items-center rounded-sm text-sm transition-colors hover:bg-muted',\n selected && 'bg-primary text-primary-foreground hover:bg-primary',\n )}\n >\n {String(h).padStart(2, '0')}\n </button>\n );\n })}\n </div>\n <div className=\"w-px self-stretch bg-border\" />\n <div\n ref={minutesRef}\n role=\"listbox\"\n aria-label=\"Minutes\"\n className=\"flex max-h-56 flex-col gap-0.5 overflow-y-auto pl-1\"\n >\n {minutes.map((m) => {\n const selected = time?.minutes === m;\n return (\n <button\n key={m}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n data-selected={selected ? '' : undefined}\n onClick={() => update({ minutes: m })}\n className={cn(\n 'grid h-8 w-12 place-items-center rounded-sm text-sm transition-colors hover:bg-muted',\n selected && 'bg-primary text-primary-foreground hover:bg-primary',\n )}\n >\n {String(m).padStart(2, '0')}\n </button>\n );\n })}\n </div>\n </div>\n </PopoverContent>\n {name && time && (\n <input\n type=\"hidden\"\n name={name}\n value={`${String(time.hours).padStart(2, '0')}:${String(time.minutes).padStart(2, '0')}`}\n />\n )}\n </Popover>\n );\n});\n","import { forwardRef, useEffect, useRef, type ButtonHTMLAttributes } from 'react';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport { selectTriggerVariants, type SelectTriggerVariants } from '../select/Select.variants';\nimport { formatISODate } from '../DateExtensions';\nimport { RangeCalendar, type DateRange } from '../rangeCalendar';\n\nexport interface DateRangePickerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'value' | 'defaultValue'>,\n SelectTriggerVariants {\n value?: DateRange | null;\n defaultValue?: DateRange | null;\n onChange?: (range: DateRange | null) => void;\n placeholder?: string;\n format?: (date: Date) => string;\n min?: Date | null;\n max?: Date | null;\n isDisabled?: (date: Date) => boolean;\n invalid?: boolean;\n /** When `name` is set, two hidden inputs (`{name}_start`, `{name}_end`) ship the ISO values. */\n name?: string;\n}\n\nconst defaultFormat = (d: Date) =>\n d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(\n function DateRangePicker(\n {\n value,\n defaultValue,\n onChange,\n placeholder = 'Pick a range',\n format = defaultFormat,\n min,\n max,\n isDisabled: dayDisabled,\n invalid,\n name,\n size,\n state,\n className,\n disabled,\n ...rest\n },\n forwardedRef,\n ) {\n const [range, setRange] = useControlled<DateRange | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange,\n });\n const [open, setOpen] = useControlled<boolean>({\n controlled: undefined,\n default: false,\n });\n const triggerState = state ?? (invalid ? 'invalid' : 'default');\n\n // Auto-close when both ends are picked.\n const wasComplete = useRef(false);\n useEffect(() => {\n const complete = !!(range?.start && range?.end);\n if (complete && !wasComplete.current && open) {\n setOpen(false);\n }\n wasComplete.current = complete;\n }, [range, open, setOpen]);\n\n const display = range?.start\n ? range.end\n ? `${format(range.start)} → ${format(range.end)}`\n : `${format(range.start)} → …`\n : null;\n\n return (\n <Popover open={open} onOpenChange={setOpen} placement=\"bottom-start\" offset={6}>\n <PopoverTrigger asChild>\n <button\n ref={forwardedRef}\n type=\"button\"\n disabled={disabled}\n className={cn(selectTriggerVariants({ size, state: triggerState }), className)}\n {...rest}\n >\n <span className={cn('truncate', !display && 'text-subtle-foreground')}>\n {display ?? placeholder}\n </span>\n <CalendarIcon className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n </button>\n </PopoverTrigger>\n <PopoverContent bare>\n <RangeCalendar\n value={range}\n onChange={setRange}\n defaultMonth={range?.start ?? new Date()}\n min={min}\n max={max}\n isDisabled={dayDisabled}\n />\n </PopoverContent>\n {name && (\n <>\n <input type=\"hidden\" name={`${name}_start`} value={formatISODate(range?.start)} />\n <input type=\"hidden\" name={`${name}_end`} value={formatISODate(range?.end)} />\n </>\n )}\n </Popover>\n );\n },\n);\n","import { tv, type VariantProps } from '../../utils';\n\nexport const colorSwatchVariants = tv({\n base: 'inline-block shrink-0 border border-border bg-[image:linear-gradient(45deg,_#ddd_25%,_transparent_25%),_linear-gradient(-45deg,_#ddd_25%,_transparent_25%),_linear-gradient(45deg,_transparent_75%,_#ddd_75%),_linear-gradient(-45deg,_transparent_75%,_#ddd_75%)] bg-[length:8px_8px] bg-[position:0_0,_0_4px,_4px_-4px,_-4px_0px]',\n variants: {\n size: {\n xs: 'h-4 w-4',\n sm: 'h-5 w-5',\n md: 'h-6 w-6',\n lg: 'h-9 w-9',\n },\n shape: {\n square: 'rounded-sm',\n circle: 'rounded-full',\n },\n interactive: {\n true: 'cursor-pointer transition-shadow focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 hover:shadow-sm',\n false: '',\n },\n selected: {\n true: 'ring-2 ring-ring ring-offset-1',\n false: '',\n },\n disabled: {\n true: 'cursor-not-allowed opacity-50',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n shape: 'square',\n interactive: false,\n selected: false,\n disabled: false,\n },\n});\n\nexport type ColorSwatchVariants = VariantProps<typeof colorSwatchVariants>;\n","import { forwardRef, type ButtonHTMLAttributes, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { colorSwatchVariants, type ColorSwatchVariants } from './ColorSwatch.variants';\n\ntype CommonProps = Omit<ColorSwatchVariants, 'interactive'> & {\n /** Any CSS color string. Default `#000000`. */\n color?: string;\n className?: string;\n};\n\nexport type ColorSwatchProps =\n | (CommonProps & {\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => void;\n 'aria-label'?: string;\n } & Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'className' | 'color'>)\n | (CommonProps &\n Omit<HTMLAttributes<HTMLDivElement>, 'className' | 'color'> & {\n onClick?: undefined;\n });\n\n/**\n * Color preview chip. Renders as a `<button>` if `onClick` is provided,\n * otherwise a non-interactive `<div>`. The transparent checkerboard backdrop\n * ensures partial-alpha colors render correctly.\n */\nexport const ColorSwatch = forwardRef<HTMLElement, ColorSwatchProps>(function ColorSwatch(\n { color = '#000000', size, shape, selected, disabled, className, onClick, style, ...rest },\n ref,\n) {\n const interactive = !!onClick;\n const classes = cn(\n colorSwatchVariants({ size, shape, interactive, selected, disabled }),\n className,\n );\n // Layer the color on top of the checkerboard via box-shadow inset — keeps\n // the variant class's `bg-[image:...]` checkerboard visible behind alpha.\n const styleWithColor: React.CSSProperties = {\n ...style,\n boxShadow: `inset 0 0 0 100px ${color}`,\n };\n\n if (interactive) {\n const buttonProps = rest as ButtonHTMLAttributes<HTMLButtonElement>;\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n disabled={disabled}\n onClick={onClick}\n style={styleWithColor}\n className={classes}\n {...buttonProps}\n />\n );\n }\n const divProps = rest as HTMLAttributes<HTMLDivElement>;\n return (\n <div\n ref={ref as React.Ref<HTMLDivElement>}\n style={styleWithColor}\n className={classes}\n {...divProps}\n />\n );\n});\n","// Color parsing + conversion helpers for ColorPicker, ColorArea, ColorWheel,\n// ColorSlider, ColorSwatch, ColorField. Co-located in `forms/` so imports\n// stay within-domain.\n//\n// Canonical representation: HSV (hue 0–360, saturation 0–1, value 0–1) plus\n// alpha 0–1. HSV picks the cleanest geometry for picker UIs (saturation/value\n// square, hue ring). External interface is hex strings (#RRGGBB or #RRGGBBAA).\n\nexport interface RGB {\n r: number; // 0–255\n g: number; // 0–255\n b: number; // 0–255\n a?: number; // 0–1 (default 1)\n}\n\nexport interface HSV {\n h: number; // 0–360\n s: number; // 0–1\n v: number; // 0–1\n a?: number; // 0–1\n}\n\nexport interface HSL {\n h: number; // 0–360\n s: number; // 0–1\n l: number; // 0–1\n a?: number; // 0–1\n}\n\nexport function clamp01(n: number): number {\n return Math.max(0, Math.min(1, n));\n}\n\nexport function clampHue(h: number): number {\n let v = h % 360;\n if (v < 0) v += 360;\n return v;\n}\n\nexport function clampByte(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\n// ───────── hex ↔ rgb ─────────\n\n/** Parse \"#RGB\", \"#RGBA\", \"#RRGGBB\", or \"#RRGGBBAA\". Returns null on invalid. */\nexport function parseHex(input: string | null | undefined): RGB | null {\n if (!input) return null;\n const s = input.trim().replace(/^#/, '');\n let m: string | null = null;\n if (/^[0-9a-fA-F]{3}$/.test(s)) {\n m = s\n .split('')\n .map((c) => c + c)\n .join('');\n } else if (/^[0-9a-fA-F]{4}$/.test(s)) {\n m = s\n .split('')\n .map((c) => c + c)\n .join('');\n } else if (/^[0-9a-fA-F]{6}$/.test(s) || /^[0-9a-fA-F]{8}$/.test(s)) {\n m = s;\n }\n if (!m) return null;\n const r = parseInt(m.slice(0, 2), 16);\n const g = parseInt(m.slice(2, 4), 16);\n const b = parseInt(m.slice(4, 6), 16);\n const a = m.length === 8 ? parseInt(m.slice(6, 8), 16) / 255 : 1;\n return { r, g, b, a };\n}\n\n/** Format RGB → \"#RRGGBB\" (or \"#RRGGBBAA\" if alpha < 1). */\nexport function formatHex(rgb: RGB | null | undefined, options?: { withAlpha?: boolean }): string {\n if (!rgb) return '';\n const r = clampByte(rgb.r).toString(16).padStart(2, '0');\n const g = clampByte(rgb.g).toString(16).padStart(2, '0');\n const b = clampByte(rgb.b).toString(16).padStart(2, '0');\n const includeAlpha = options?.withAlpha ?? (rgb.a !== undefined && rgb.a < 1);\n if (includeAlpha) {\n const a = clampByte((rgb.a ?? 1) * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${r}${g}${b}${a}`;\n }\n return `#${r}${g}${b}`;\n}\n\n// ───────── rgb ↔ hsv ─────────\n\nexport function rgbToHsv({ r, g, b, a = 1 }: RGB): HSV {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const d = max - min;\n let h = 0;\n if (d !== 0) {\n if (max === rn) h = ((gn - bn) / d) % 6;\n else if (max === gn) h = (bn - rn) / d + 2;\n else h = (rn - gn) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n const s = max === 0 ? 0 : d / max;\n const v = max;\n return { h, s, v, a };\n}\n\nexport function hsvToRgb({ h, s, v, a = 1 }: HSV): RGB {\n const c = v * s;\n const hh = clampHue(h) / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n let r1 = 0;\n let g1 = 0;\n let b1 = 0;\n if (hh >= 0 && hh < 1) [r1, g1, b1] = [c, x, 0];\n else if (hh < 2) [r1, g1, b1] = [x, c, 0];\n else if (hh < 3) [r1, g1, b1] = [0, c, x];\n else if (hh < 4) [r1, g1, b1] = [0, x, c];\n else if (hh < 5) [r1, g1, b1] = [x, 0, c];\n else [r1, g1, b1] = [c, 0, x];\n const m = v - c;\n return {\n r: Math.round((r1 + m) * 255),\n g: Math.round((g1 + m) * 255),\n b: Math.round((b1 + m) * 255),\n a,\n };\n}\n\n// ───────── rgb ↔ hsl ─────────\n\nexport function rgbToHsl({ r, g, b, a = 1 }: RGB): HSL {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const d = max - min;\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n if (d !== 0) {\n s = d / (1 - Math.abs(2 * l - 1));\n if (max === rn) h = ((gn - bn) / d) % 6;\n else if (max === gn) h = (bn - rn) / d + 2;\n else h = (rn - gn) / d + 4;\n h *= 60;\n if (h < 0) h += 360;\n }\n return { h, s, l, a };\n}\n\nexport function hslToRgb({ h, s, l, a = 1 }: HSL): RGB {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const hh = clampHue(h) / 60;\n const x = c * (1 - Math.abs((hh % 2) - 1));\n let r1 = 0;\n let g1 = 0;\n let b1 = 0;\n if (hh >= 0 && hh < 1) [r1, g1, b1] = [c, x, 0];\n else if (hh < 2) [r1, g1, b1] = [x, c, 0];\n else if (hh < 3) [r1, g1, b1] = [0, c, x];\n else if (hh < 4) [r1, g1, b1] = [0, x, c];\n else if (hh < 5) [r1, g1, b1] = [x, 0, c];\n else [r1, g1, b1] = [c, 0, x];\n const m = l - c / 2;\n return {\n r: Math.round((r1 + m) * 255),\n g: Math.round((g1 + m) * 255),\n b: Math.round((b1 + m) * 255),\n a,\n };\n}\n\n// ───────── hex ↔ hsv (most-used composite) ─────────\n\nexport function parseColorToHsv(input: string | null | undefined): HSV | null {\n const rgb = parseHex(input);\n if (!rgb) return null;\n return rgbToHsv(rgb);\n}\n\nexport function hsvToHex(hsv: HSV, options?: { withAlpha?: boolean }): string {\n return formatHex(hsvToRgb(hsv), options);\n}\n\n// ───────── format helpers ─────────\n\nexport function formatRgbString({ r, g, b, a = 1 }: RGB): string {\n if (a < 1) return `rgba(${clampByte(r)}, ${clampByte(g)}, ${clampByte(b)}, ${a.toFixed(2)})`;\n return `rgb(${clampByte(r)}, ${clampByte(g)}, ${clampByte(b)})`;\n}\n\nexport function formatHslString({ h, s, l, a = 1 }: HSL): string {\n const hh = Math.round(clampHue(h));\n const ss = Math.round(s * 100);\n const ll = Math.round(l * 100);\n if (a < 1) return `hsla(${hh}, ${ss}%, ${ll}%, ${a.toFixed(2)})`;\n return `hsl(${hh}, ${ss}%, ${ll}%)`;\n}\n","import {\n forwardRef,\n useEffect,\n useState,\n type FocusEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { useFormControl } from '../../primitives/formControlContext/FormControlContext';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\nimport { formatHex, parseHex } from '../ColorExtensions';\nimport { ColorSwatch } from '../colorSwatch';\n\nexport interface ColorFieldProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n InputBaseVariants {\n value?: string | null;\n defaultValue?: string | null;\n onChange?: (hex: string | null) => void;\n swatchShape?: 'square' | 'circle';\n withAlpha?: boolean;\n}\n\nfunction commitHex(text: string, withAlpha: boolean): string | null {\n const normalised = text.startsWith('#') ? text : `#${text}`;\n const rgb = parseHex(normalised);\n if (!rgb) return null;\n return formatHex(rgb, { withAlpha });\n}\n\nexport const ColorField = forwardRef<HTMLInputElement, ColorFieldProps>(function ColorField(\n {\n value,\n defaultValue,\n onChange,\n swatchShape = 'square',\n withAlpha = false,\n size,\n state,\n className,\n id,\n disabled,\n required,\n onBlur,\n onKeyDown,\n ...rest\n },\n ref,\n) {\n const ctx = useFormControl();\n const [committed, setCommitted] = useControlled<string | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange,\n });\n const [draft, setDraft] = useState<string>(committed ?? '');\n\n // Sync draft to committed value when external `value` changes.\n useEffect(() => {\n setDraft(committed ?? '');\n }, [committed]);\n\n const commit = () => {\n if (!draft) {\n setCommitted(null);\n return;\n }\n const next = commitHex(draft, withAlpha);\n if (next) {\n setCommitted(next);\n setDraft(next);\n } else {\n // Invalid — revert.\n setDraft(committed ?? '');\n }\n };\n\n return (\n <div className=\"relative inline-flex w-full items-stretch\">\n <span className=\"pointer-events-none absolute inset-y-0 left-2 flex items-center\">\n <ColorSwatch color={committed ?? '#00000000'} size=\"sm\" shape={swatchShape} />\n </span>\n <input\n ref={ref}\n type=\"text\"\n id={id ?? ctx?.id}\n disabled={disabled ?? ctx?.isDisabled}\n required={required ?? ctx?.isRequired}\n aria-invalid={ctx?.isInvalid || undefined}\n aria-describedby={ctx ? `${ctx.helperId} ${ctx.errorId}` : undefined}\n spellCheck={false}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={(e: FocusEvent<HTMLInputElement>) => {\n onBlur?.(e);\n commit();\n }}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === 'Enter') {\n e.preventDefault();\n commit();\n }\n }}\n className={cn(\n inputBaseVariants({ size, state: state ?? (ctx?.isInvalid ? 'invalid' : 'default') }),\n 'pl-9 font-mono uppercase',\n className,\n )}\n {...rest}\n />\n </div>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useRef,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { clamp01, clampHue, hsvToHex, type HSV } from '../ColorExtensions';\n\nexport type ColorChannel = 'hue' | 'saturation' | 'value' | 'alpha';\n\nexport interface ColorSliderProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue' | 'color'> {\n channel?: ColorChannel;\n value?: number;\n defaultValue?: number;\n onChange?: (value: number) => void;\n color?: HSV;\n step?: number;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nfunction channelMax(channel: ColorChannel): number {\n return channel === 'hue' ? 360 : 1;\n}\n\nfunction defaultStep(channel: ColorChannel): number {\n return channel === 'hue' ? 1 : 0.01;\n}\n\nfunction buildGradient(channel: ColorChannel, color: HSV | undefined): string {\n if (channel === 'hue') {\n return 'linear-gradient(to right, hsl(0,100%,50%), hsl(60,100%,50%), hsl(120,100%,50%), hsl(180,100%,50%), hsl(240,100%,50%), hsl(300,100%,50%), hsl(360,100%,50%))';\n }\n const ctx: HSV = color ?? { h: 0, s: 1, v: 1 };\n if (channel === 'saturation') {\n const start = hsvToHex({ h: ctx.h, s: 0, v: ctx.v });\n const end = hsvToHex({ h: ctx.h, s: 1, v: ctx.v });\n return `linear-gradient(to right, ${start}, ${end})`;\n }\n if (channel === 'value') {\n const end = hsvToHex({ h: ctx.h, s: ctx.s, v: 1 });\n return `linear-gradient(to right, #000000, ${end})`;\n }\n // alpha\n const opaque = hsvToHex({ h: ctx.h, s: ctx.s, v: ctx.v });\n return `linear-gradient(to right, transparent, ${opaque})`;\n}\n\nconst CHECKERBOARD: CSSProperties = {\n backgroundImage:\n 'linear-gradient(45deg, #ddd 25%, transparent 25%), linear-gradient(-45deg, #ddd 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #ddd 75%), linear-gradient(-45deg, transparent 75%, #ddd 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n};\n\nexport const ColorSlider = forwardRef<HTMLDivElement, ColorSliderProps>(function ColorSlider(\n {\n channel = 'hue',\n value,\n defaultValue,\n onChange,\n color,\n step,\n disabled = false,\n className,\n 'aria-label': ariaLabel,\n ...rest\n },\n forwardedRef,\n) {\n const max = channelMax(channel);\n const stepValue = step ?? defaultStep(channel);\n const [val, setVal] = useControlled<number>({\n controlled: value,\n default: defaultValue ?? 0,\n onChange,\n });\n\n const trackRef = useRef<HTMLDivElement | null>(null);\n\n const updateFromClientX = useCallback(\n (clientX: number) => {\n const track = trackRef.current;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n const ratio = clamp01((clientX - rect.left) / rect.width);\n const next = ratio * max;\n setVal(channel === 'hue' ? clampHue(next) : clamp01(next));\n },\n [channel, max, setVal],\n );\n\n const handlePointerDown = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n (e.target as Element).setPointerCapture?.(e.pointerId);\n updateFromClientX(e.clientX);\n },\n [disabled, updateFromClientX],\n );\n\n const handlePointerMove = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (e.buttons !== 1) return;\n updateFromClientX(e.clientX);\n },\n [disabled, updateFromClientX],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n let next = val;\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = val + stepValue;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = val - stepValue;\n break;\n case 'PageUp':\n next = val + stepValue * 10;\n break;\n case 'PageDown':\n next = val - stepValue * 10;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = max;\n break;\n default:\n return;\n }\n e.preventDefault();\n setVal(channel === 'hue' ? clampHue(next) : clamp01(next));\n },\n [channel, disabled, max, setVal, stepValue, val],\n );\n\n const ratio = channel === 'hue' ? clampHue(val) / 360 : clamp01(val);\n const gradient = buildGradient(channel, color);\n const trackStyle: CSSProperties = {\n backgroundImage: gradient,\n ...(channel === 'alpha' ? { backgroundColor: 'transparent' } : null),\n };\n\n return (\n <div\n ref={forwardedRef}\n className={cn('relative inline-flex w-full select-none items-center', className)}\n {...rest}\n >\n {channel === 'alpha' && (\n <div\n aria-hidden=\"true\"\n className=\"absolute inset-0 rounded-full\"\n style={CHECKERBOARD}\n />\n )}\n <div\n ref={composeRefs(trackRef)}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel ?? `${channel} slider`}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={Math.round(val * 100) / 100}\n aria-disabled={disabled || undefined}\n aria-orientation=\"horizontal\"\n data-disabled={disabled ? '' : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onKeyDown={handleKeyDown}\n style={trackStyle}\n className={cn(\n 'relative h-3 w-full rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n <div\n aria-hidden=\"true\"\n className=\"absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white bg-transparent shadow-md ring-1 ring-black/20\"\n style={{ left: `${ratio * 100}%` }}\n />\n </div>\n </div>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useRef,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { clamp01, hsvToHex } from '../ColorExtensions';\n\nexport interface ColorAreaChange {\n saturation: number;\n value: number;\n}\n\nexport interface ColorAreaProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n hue?: number;\n saturation?: number;\n defaultSaturation?: number;\n value?: number;\n defaultValue?: number;\n onChange?: (next: ColorAreaChange) => void;\n step?: number;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport const ColorArea = forwardRef<HTMLDivElement, ColorAreaProps>(function ColorArea(\n {\n hue = 0,\n saturation,\n defaultSaturation,\n value,\n defaultValue,\n onChange,\n step = 0.01,\n disabled = false,\n className,\n 'aria-label': ariaLabel = 'Saturation and value',\n ...rest\n },\n forwardedRef,\n) {\n const [s, setS] = useControlled<number>({\n controlled: saturation,\n default: defaultSaturation ?? 1,\n });\n const [v, setV] = useControlled<number>({\n controlled: value,\n default: defaultValue ?? 1,\n });\n\n const trackRef = useRef<HTMLDivElement | null>(null);\n\n const emit = useCallback(\n (nextS: number, nextV: number) => {\n const cs = clamp01(nextS);\n const cv = clamp01(nextV);\n setS(cs);\n setV(cv);\n onChange?.({ saturation: cs, value: cv });\n },\n [onChange, setS, setV],\n );\n\n const updateFromClient = useCallback(\n (clientX: number, clientY: number) => {\n const track = trackRef.current;\n if (!track) return;\n const rect = track.getBoundingClientRect();\n const xRatio = clamp01((clientX - rect.left) / rect.width);\n const yRatio = clamp01((clientY - rect.top) / rect.height);\n emit(xRatio, 1 - yRatio);\n },\n [emit],\n );\n\n const handlePointerDown = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n (e.target as Element).setPointerCapture?.(e.pointerId);\n updateFromClient(e.clientX, e.clientY);\n },\n [disabled, updateFromClient],\n );\n\n const handlePointerMove = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || e.buttons !== 1) return;\n updateFromClient(e.clientX, e.clientY);\n },\n [disabled, updateFromClient],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n const big = step * 10;\n let nextS = s;\n let nextV = v;\n switch (e.key) {\n case 'ArrowRight':\n nextS = s + step;\n break;\n case 'ArrowLeft':\n nextS = s - step;\n break;\n case 'ArrowUp':\n nextV = v + step;\n break;\n case 'ArrowDown':\n nextV = v - step;\n break;\n case 'PageUp':\n nextV = v + big;\n break;\n case 'PageDown':\n nextV = v - big;\n break;\n case 'Home':\n nextS = 0;\n nextV = 1;\n break;\n case 'End':\n nextS = 1;\n nextV = 0;\n break;\n default:\n return;\n }\n e.preventDefault();\n emit(nextS, nextV);\n },\n [disabled, emit, s, step, v],\n );\n\n const baseColor = `hsl(${hue}, 100%, 50%)`;\n const trackStyle: CSSProperties = {\n backgroundImage: `linear-gradient(to bottom, transparent, #000), linear-gradient(to right, #fff, transparent)`,\n backgroundColor: baseColor,\n };\n\n const thumbColor = hsvToHex({ h: hue, s, v });\n const thumbStyle: CSSProperties = {\n left: `${s * 100}%`,\n top: `${(1 - v) * 100}%`,\n backgroundColor: thumbColor,\n };\n\n return (\n <div\n ref={composeRefs(forwardedRef, trackRef)}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-valuetext={`saturation ${(s * 100).toFixed(0)}%, value ${(v * 100).toFixed(0)}%`}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onKeyDown={handleKeyDown}\n style={trackStyle}\n className={cn(\n 'relative aspect-square w-full select-none rounded-md border border-border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n {...rest}\n >\n <div\n aria-hidden=\"true\"\n style={thumbStyle}\n className=\"absolute h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-md ring-1 ring-black/20\"\n />\n </div>\n );\n});\n","import {\n forwardRef,\n useCallback,\n useRef,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { clampHue } from '../ColorExtensions';\n\nexport interface ColorWheelProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: number;\n defaultValue?: number;\n onChange?: (hue: number) => void;\n size?: number;\n thickness?: number;\n step?: number;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nfunction angleFromCenter(clientX: number, clientY: number, rect: DOMRect): number {\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const dx = clientX - cx;\n const dy = clientY - cy;\n const angle = (Math.atan2(dx, -dy) * 180) / Math.PI;\n return (angle + 360) % 360;\n}\n\nexport const ColorWheel = forwardRef<HTMLDivElement, ColorWheelProps>(function ColorWheel(\n {\n value,\n defaultValue,\n onChange,\n size = 200,\n thickness = 30,\n step = 1,\n disabled = false,\n className,\n 'aria-label': ariaLabel = 'Hue',\n ...rest\n },\n forwardedRef,\n) {\n const [hue, setHue] = useControlled<number>({\n controlled: value,\n default: defaultValue ?? 0,\n onChange,\n });\n const trackRef = useRef<HTMLDivElement | null>(null);\n\n const updateFromClient = useCallback(\n (clientX: number, clientY: number) => {\n const track = trackRef.current;\n if (!track) return;\n setHue(clampHue(angleFromCenter(clientX, clientY, track.getBoundingClientRect())));\n },\n [setHue],\n );\n\n const handlePointerDown = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n (e.target as Element).setPointerCapture?.(e.pointerId);\n updateFromClient(e.clientX, e.clientY);\n },\n [disabled, updateFromClient],\n );\n\n const handlePointerMove = useCallback(\n (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || e.buttons !== 1) return;\n updateFromClient(e.clientX, e.clientY);\n },\n [disabled, updateFromClient],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n let next = hue;\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n next = hue + step;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n next = hue - step;\n break;\n case 'PageUp':\n next = hue + step * 10;\n break;\n case 'PageDown':\n next = hue - step * 10;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = 359;\n break;\n default:\n return;\n }\n e.preventDefault();\n setHue(clampHue(next));\n },\n [disabled, hue, setHue, step],\n );\n\n const radius = (size - thickness) / 2;\n const angleRad = (hue * Math.PI) / 180;\n const thumbX = size / 2 + radius * Math.sin(angleRad);\n const thumbY = size / 2 - radius * Math.cos(angleRad);\n\n const wheelStyle: CSSProperties = {\n width: size,\n height: size,\n background: 'conic-gradient(from 0deg, hsl(0,100%,50%), hsl(60,100%,50%), hsl(120,100%,50%), hsl(180,100%,50%), hsl(240,100%,50%), hsl(300,100%,50%), hsl(360,100%,50%))',\n WebkitMaskImage: `radial-gradient(circle, transparent ${(radius - thickness / 2)}px, black ${(radius - thickness / 2 + 1)}px, black ${(radius + thickness / 2)}px, transparent ${(radius + thickness / 2 + 1)}px)`,\n maskImage: `radial-gradient(circle, transparent ${(radius - thickness / 2)}px, black ${(radius - thickness / 2 + 1)}px, black ${(radius + thickness / 2)}px, transparent ${(radius + thickness / 2 + 1)}px)`,\n };\n\n return (\n <div\n ref={composeRefs(forwardedRef, trackRef)}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={360}\n aria-valuenow={Math.round(hue)}\n aria-disabled={disabled || undefined}\n data-disabled={disabled ? '' : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onKeyDown={handleKeyDown}\n style={wheelStyle}\n className={cn(\n 'relative inline-block select-none rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n {...rest}\n >\n <div\n aria-hidden=\"true\"\n style={{\n left: thumbX,\n top: thumbY,\n backgroundColor: `hsl(${hue}, 100%, 50%)`,\n }}\n className=\"pointer-events-none absolute h-5 w-5 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-md ring-1 ring-black/30\"\n />\n </div>\n );\n});\n","import { type HTMLAttributes, type KeyboardEvent } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\nimport { ColorSwatch, type ColorSwatchVariants } from '../colorSwatch';\n\nexport interface ColorSwatchPickerProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n colors: string[];\n value?: string | null;\n defaultValue?: string | null;\n onChange?: (color: string) => void;\n swatchSize?: ColorSwatchVariants['size'];\n swatchShape?: ColorSwatchVariants['shape'];\n disabled?: boolean;\n}\n\ninterface ItemProps {\n color: string;\n selected: boolean;\n disabled: boolean;\n size?: ColorSwatchVariants['size'];\n shape?: ColorSwatchVariants['shape'];\n onSelect: (color: string) => void;\n}\n\nfunction ColorSwatchItem({ color, selected, disabled, size, shape, onSelect }: ItemProps) {\n const roving = useRovingFocusItem();\n return (\n <ColorSwatch\n ref={roving.ref as never}\n color={color}\n size={size}\n shape={shape}\n selected={selected}\n disabled={disabled}\n tabIndex={roving.tabIndex}\n onClick={() => onSelect(color)}\n onKeyDown={(e: KeyboardEvent<HTMLButtonElement>) => {\n roving.onKeyDown(e);\n if (e.defaultPrevented) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(color);\n }\n }}\n onFocus={roving.onFocus}\n data-roving-focus-item\n aria-label={color}\n />\n );\n}\n\nexport function ColorSwatchPicker({\n colors,\n value,\n defaultValue,\n onChange,\n swatchSize = 'md',\n swatchShape = 'square',\n disabled = false,\n className,\n ...rest\n}: ColorSwatchPickerProps) {\n const [selected, setSelected] = useControlled<string | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange: onChange as ((v: string | null) => void) | undefined,\n });\n\n return (\n <RovingFocusGroup\n orientation=\"both\"\n loop\n className={cn('flex flex-wrap gap-1.5', className)}\n {...rest}\n >\n {colors.map((c) => (\n <ColorSwatchItem\n key={c}\n color={c}\n selected={selected === c}\n disabled={disabled}\n size={swatchSize}\n shape={swatchShape}\n onSelect={(color) => setSelected(color)}\n />\n ))}\n </RovingFocusGroup>\n );\n}\n","import { forwardRef, useEffect, useState } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays';\nimport {\n hsvToHex,\n parseColorToHsv,\n type HSV,\n} from '../ColorExtensions';\nimport { ColorSwatch, type ColorSwatchVariants } from '../colorSwatch';\nimport { ColorArea } from '../colorArea';\nimport { ColorSlider } from '../colorSlider';\nimport { ColorField } from '../colorField';\nimport { ColorSwatchPicker } from '../colorSwatchPicker';\n\nexport interface ColorPickerProps {\n value?: string | null;\n defaultValue?: string | null;\n onChange?: (hex: string) => void;\n withAlpha?: boolean;\n presets?: string[];\n triggerSize?: ColorSwatchVariants['size'];\n disabled?: boolean;\n name?: string;\n className?: string;\n 'aria-label'?: string;\n}\n\nconst FALLBACK_HSV: HSV = { h: 217, s: 0.91, v: 0.96, a: 1 };\n\nexport const ColorPicker = forwardRef<HTMLButtonElement, ColorPickerProps>(function ColorPicker(\n {\n value,\n defaultValue = '#3b82f6',\n onChange,\n withAlpha = false,\n presets,\n triggerSize = 'md',\n disabled = false,\n name,\n className,\n 'aria-label': ariaLabel = 'Pick a color',\n },\n ref,\n) {\n const [hex, setHex] = useControlled<string | null>({\n controlled: value,\n default: defaultValue ?? null,\n onChange: onChange as ((v: string | null) => void) | undefined,\n });\n\n // Internal HSV state (kept in sync with hex). HSV preserves picker geometry\n // when the user moves to a fully-desaturated value (otherwise hue collapses).\n const [hsv, setHsvState] = useState<HSV>(() => parseColorToHsv(hex) ?? FALLBACK_HSV);\n\n useEffect(() => {\n if (!hex) return;\n const parsed = parseColorToHsv(hex);\n if (!parsed) return;\n // Only update internal HSV if the *committed* hex differs from what our\n // HSV currently produces — avoids hue collapsing when SV passes through 0.\n const currentHex = hsvToHex(hsv, { withAlpha });\n if (currentHex.toLowerCase() !== hex.toLowerCase()) {\n setHsvState({ ...parsed, a: hsv.a });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hex, withAlpha]);\n\n const updateHsv = (next: HSV) => {\n setHsvState(next);\n setHex(hsvToHex(next, { withAlpha }));\n };\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n aria-label={ariaLabel}\n disabled={disabled}\n className={cn(\n 'inline-flex items-center gap-2 rounded-md border border-border bg-background px-2 py-1 text-sm transition-colors hover:border-border-strong focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60',\n className,\n )}\n >\n <ColorSwatch color={hex ?? '#00000000'} size={triggerSize} />\n <span className=\"font-mono uppercase\">{hex ?? '—'}</span>\n </button>\n </PopoverTrigger>\n <PopoverContent className=\"flex w-64 flex-col gap-3\">\n <ColorArea\n hue={hsv.h}\n saturation={hsv.s}\n value={hsv.v}\n onChange={({ saturation, value }) => updateHsv({ ...hsv, s: saturation, v: value })}\n />\n <ColorSlider\n channel=\"hue\"\n value={hsv.h}\n onChange={(h) => updateHsv({ ...hsv, h })}\n aria-label=\"Hue\"\n />\n {withAlpha && (\n <ColorSlider\n channel=\"alpha\"\n value={hsv.a ?? 1}\n color={hsv}\n onChange={(a) => updateHsv({ ...hsv, a })}\n aria-label=\"Alpha\"\n />\n )}\n <ColorField\n value={hex}\n onChange={(next) => setHex(next)}\n withAlpha={withAlpha}\n />\n {presets && presets.length > 0 && (\n <ColorSwatchPicker\n colors={presets}\n value={hex}\n onChange={setHex}\n swatchSize=\"sm\"\n />\n )}\n </PopoverContent>\n {name && <input type=\"hidden\" name={name} value={hex ?? ''} />}\n </Popover>\n );\n});\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { Check } from 'lucide-react';\nimport { cn, dataAttr } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { RovingFocusGroup, useRovingFocusItem } from '../../primitives';\n\ninterface StepperContextValue {\n value: string;\n setValue: (value: string) => void;\n orientation: 'horizontal' | 'vertical';\n baseId: string;\n registerStep: (value: string) => void;\n unregisterStep: (value: string) => void;\n stepsRef: React.MutableRefObject<string[]>;\n}\n\nconst StepperContext = createContext<StepperContextValue | null>(null);\n\nfunction useStepperContext() {\n const ctx = useContext(StepperContext);\n if (!ctx) throw new Error('Stepper.* must be used inside <Stepper>');\n return ctx;\n}\n\nexport interface StepperProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(function Stepper(\n {\n value,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [active, setActive] = useControlled<string>({\n controlled: value,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const baseId = useId();\n const stepsRef = useRef<string[]>([]);\n\n const registerStep = useCallback((v: string) => {\n if (!stepsRef.current.includes(v)) stepsRef.current.push(v);\n }, []);\n const unregisterStep = useCallback((v: string) => {\n stepsRef.current = stepsRef.current.filter((x) => x !== v);\n }, []);\n\n const ctx = useMemo<StepperContextValue>(\n () => ({\n value: active,\n setValue: setActive,\n orientation,\n baseId,\n registerStep,\n unregisterStep,\n stepsRef,\n }),\n [active, setActive, orientation, baseId, registerStep, unregisterStep],\n );\n\n return (\n <StepperContext.Provider value={ctx}>\n <div\n ref={ref}\n data-orientation={orientation}\n className={cn(\n orientation === 'vertical' ? 'flex gap-4' : 'flex flex-col gap-4',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </StepperContext.Provider>\n );\n});\n\nexport interface StepperListProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const StepperList = forwardRef<HTMLDivElement, StepperListProps>(function StepperList(\n { className, children, ...rest },\n ref,\n) {\n const ctx = useStepperContext();\n return (\n <RovingFocusGroup\n ref={ref as never}\n orientation={ctx.orientation}\n role=\"tablist\"\n aria-orientation={ctx.orientation}\n data-orientation={ctx.orientation}\n className={cn(\n 'flex',\n ctx.orientation === 'vertical' ? 'flex-col gap-4' : 'flex-row items-center gap-2',\n className,\n )}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n );\n});\n\nexport interface StepperStepProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {\n value: string;\n description?: ReactNode;\n disabled?: boolean;\n children: ReactNode;\n}\n\nexport const StepperStep = forwardRef<HTMLButtonElement, StepperStepProps>(function StepperStep(\n { value, description, disabled = false, className, onClick, children, ...rest },\n ref,\n) {\n const ctx = useStepperContext();\n const roving = useRovingFocusItem();\n\n useEffect(() => {\n ctx.registerStep(value);\n return () => ctx.unregisterStep(value);\n }, [ctx, value]);\n\n const ordered = ctx.stepsRef.current;\n const idx = ordered.indexOf(value);\n const activeIdx = ordered.indexOf(ctx.value);\n const status: 'pending' | 'active' | 'complete' =\n idx < activeIdx ? 'complete' : idx === activeIdx ? 'active' : 'pending';\n\n const stepId = `${ctx.baseId}-step-${value}`;\n const panelId = `${ctx.baseId}-panel-${value}`;\n const stepNumber = idx + 1;\n\n return (\n <div className=\"flex flex-1 items-center gap-2\">\n <button\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n id={stepId}\n type=\"button\"\n role=\"tab\"\n aria-selected={status === 'active'}\n aria-controls={panelId}\n aria-current={status === 'active' ? 'step' : undefined}\n data-status={status}\n data-disabled={dataAttr(disabled)}\n tabIndex={roving.tabIndex}\n disabled={disabled}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || disabled) return;\n ctx.setValue(value);\n }}\n onFocus={roving.onFocus}\n onKeyDown={roving.onKeyDown}\n className={cn(\n 'group flex items-center gap-2 text-left text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n disabled && 'pointer-events-none opacity-50',\n className,\n )}\n {...rest}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'grid h-7 w-7 shrink-0 place-items-center rounded-full border-2 text-xs font-semibold transition-colors',\n status === 'pending' && 'border-border text-muted-foreground',\n status === 'active' && 'border-primary bg-primary text-primary-foreground',\n status === 'complete' && 'border-primary bg-primary text-primary-foreground',\n )}\n >\n {status === 'complete' ? <Check className=\"h-4 w-4\" /> : stepNumber}\n </span>\n <span className=\"flex flex-col\">\n <span\n className={cn(\n 'font-medium',\n status === 'pending' ? 'text-muted-foreground' : 'text-foreground',\n )}\n >\n {children}\n </span>\n {description && (\n <span className=\"text-xs text-muted-foreground\">{description}</span>\n )}\n </span>\n </button>\n {ctx.orientation === 'horizontal' && idx < ordered.length - 1 && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'h-px flex-1 transition-colors',\n status === 'pending' ? 'bg-border' : 'bg-primary',\n )}\n />\n )}\n </div>\n );\n});\n\nexport interface StepperPanelProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n}\n\nexport const StepperPanel = forwardRef<HTMLDivElement, StepperPanelProps>(function StepperPanel(\n { value, className, children, ...rest },\n ref,\n) {\n const ctx = useStepperContext();\n if (ctx.value !== value) return null;\n const stepId = `${ctx.baseId}-step-${value}`;\n const panelId = `${ctx.baseId}-panel-${value}`;\n return (\n <div\n ref={ref}\n id={panelId}\n role=\"tabpanel\"\n aria-labelledby={stepId}\n tabIndex={0}\n className={cn('flex-1 outline-none', className)}\n {...rest}\n >\n {children}\n </div>\n );\n});\n\ntype StepperComponent = typeof Stepper & {\n List: typeof StepperList;\n Step: typeof StepperStep;\n Panel: typeof StepperPanel;\n};\n\n(Stepper as StepperComponent).List = StepperList;\n(Stepper as StepperComponent).Step = StepperStep;\n(Stepper as StepperComponent).Panel = StepperPanel;\n\nexport default Stepper as StepperComponent;\n","import {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Tag, type TagVariants } from '../../display/tag';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface TagsInputProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n >,\n InputBaseVariants {\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (tags: string[]) => void;\n inputValue?: string;\n onInputChange?: (input: string) => void;\n /** Characters that commit the current input. Enter and Tab always do. */\n delimiters?: string[];\n /** Predicate gating committed tags. Default: non-empty after trim. */\n validate?: (tag: string) => boolean;\n allowDuplicates?: boolean;\n max?: number;\n invalid?: boolean;\n /** Hidden input emits comma-joined value. */\n name?: string;\n tagVariant?: TagVariants['variant'];\n}\n\n/**\n * Free-form tag entry. Type → Enter/comma/Tab commits. Backspace at empty\n * input removes the last tag. Renders chips via `display/Tag`.\n */\nexport const TagsInput = forwardRef<HTMLInputElement, TagsInputProps>(function TagsInput(\n {\n value,\n defaultValue,\n onValueChange,\n inputValue,\n onInputChange,\n placeholder = 'Add tag…',\n delimiters = [','],\n validate = (t) => t.trim().length > 0,\n allowDuplicates = false,\n max,\n invalid,\n disabled,\n readOnly,\n name,\n tagVariant = 'neutral',\n size,\n className,\n onKeyDown,\n onBlur,\n ...rest\n },\n forwardedRef,\n) {\n const [tags, setTags] = useControlled({\n controlled: value,\n default: defaultValue ?? [],\n onChange: onValueChange,\n });\n const [text, setText] = useControlled({\n controlled: inputValue,\n default: '',\n onChange: onInputChange,\n });\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [pendingDelete, setPendingDelete] = useState(false);\n const state = invalid ? 'invalid' : 'default';\n\n const commit = useCallback(\n (raw: string) => {\n const trimmed = raw.trim();\n if (!trimmed || !validate(trimmed)) return;\n if (!allowDuplicates && tags.includes(trimmed)) return;\n if (max != null && tags.length >= max) return;\n setTags([...tags, trimmed]);\n setText('');\n },\n [tags, validate, allowDuplicates, max, setTags, setText],\n );\n\n const removeAt = useCallback(\n (idx: number) => {\n setTags(tags.filter((_, i) => i !== idx));\n },\n [tags, setTags],\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || disabled || readOnly) return;\n if (e.key === 'Enter' || (e.key === 'Tab' && text)) {\n if (text) {\n e.preventDefault();\n commit(text);\n setPendingDelete(false);\n }\n return;\n }\n if (delimiters.includes(e.key)) {\n e.preventDefault();\n commit(text);\n setPendingDelete(false);\n return;\n }\n if (e.key === 'Backspace' && !text && tags.length > 0) {\n if (pendingDelete) {\n e.preventDefault();\n removeAt(tags.length - 1);\n setPendingDelete(false);\n } else {\n setPendingDelete(true);\n }\n return;\n }\n setPendingDelete(false);\n };\n\n const handleContainerClick = (e: MouseEvent<HTMLDivElement>) => {\n if (e.target === e.currentTarget) inputRef.current?.focus();\n };\n\n return (\n <div\n role=\"group\"\n onClick={handleContainerClick}\n data-disabled={disabled || undefined}\n data-readonly={readOnly || undefined}\n data-invalid={invalid || undefined}\n className={cn(\n inputBaseVariants({ size, state }),\n 'h-auto min-h-10 flex-wrap items-center gap-1.5 py-1.5',\n disabled && 'cursor-not-allowed opacity-60',\n className,\n )}\n >\n {tags.map((t, i) => (\n <Tag\n key={`${t}-${i}`}\n variant={tagVariant}\n data-pending-delete={pendingDelete && i === tags.length - 1 ? '' : undefined}\n onClose={!disabled && !readOnly ? () => removeAt(i) : undefined}\n className={cn(pendingDelete && i === tags.length - 1 && 'ring-1 ring-ring')}\n >\n {t}\n </Tag>\n ))}\n <input\n {...rest}\n ref={composeRefs(forwardedRef, inputRef)}\n type=\"text\"\n value={text}\n placeholder={tags.length === 0 ? placeholder : undefined}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid || undefined}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={(e) => {\n onBlur?.(e);\n if (text) commit(text);\n setPendingDelete(false);\n }}\n className=\"min-w-[6rem] flex-1 border-0 bg-transparent p-0 text-sm outline-none placeholder:text-subtle-foreground disabled:cursor-not-allowed\"\n />\n {name && <input type=\"hidden\" name={name} value={tags.join(',')} />}\n </div>\n );\n});\nTagsInput.displayName = 'TagsInput';\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useRef,\n useState,\n type DragEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { UploadCloud } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { Icon } from '../../icons';\n\nexport type FileRejectionReason = 'type' | 'size' | 'count';\n\nexport interface FileRejection {\n file: File;\n reason: FileRejectionReason;\n}\n\nexport interface FileUploadProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'value' | 'onChange' | 'children' | 'size'\n > {\n /** Per-file byte cap. Files exceeding this drop into `rejected`. */\n maxSize?: number;\n /** Cap total accepted files (multiple mode). Excess go to `rejected`. */\n maxFiles?: number;\n onFilesChange?: (accepted: File[], rejected: FileRejection[]) => void;\n invalid?: boolean;\n label?: ReactNode;\n hint?: ReactNode;\n children?: ReactNode;\n}\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept) return true;\n const tokens = accept.split(',').map((t) => t.trim().toLowerCase()).filter(Boolean);\n if (tokens.length === 0) return true;\n const fileType = file.type.toLowerCase();\n const fileName = file.name.toLowerCase();\n return tokens.some((t) => {\n if (t.startsWith('.')) return fileName.endsWith(t);\n if (t.endsWith('/*')) return fileType.startsWith(t.slice(0, -1));\n return fileType === t;\n });\n}\n\n/**\n * Drag-drop file zone with click-to-pick fallback. Validates against\n * `accept`, `maxSize`, and `maxFiles`. Emits accepted + rejected lists via\n * `onFilesChange`. The zone itself is a `role=\"button\"` — Enter/Space opens\n * the native file picker.\n */\nexport const FileUpload = forwardRef<HTMLInputElement, FileUploadProps>(function FileUpload(\n {\n accept,\n multiple = false,\n maxSize,\n maxFiles,\n onFilesChange,\n disabled,\n invalid,\n label = 'Drop files here, or click to browse',\n hint,\n children,\n className,\n name,\n ...rest\n },\n forwardedRef,\n) {\n const inputRef = useRef<HTMLInputElement | null>(null);\n useImperativeHandle(forwardedRef, () => inputRef.current as HTMLInputElement);\n const dragCounter = useRef(0);\n const [dragState, setDragState] = useState<'idle' | 'over' | 'reject'>('idle');\n\n const partition = useCallback(\n (files: FileList | File[]): [File[], FileRejection[]] => {\n const accepted: File[] = [];\n const rejected: FileRejection[] = [];\n const arr = Array.from(files);\n for (const f of arr) {\n if (!matchesAccept(f, accept)) {\n rejected.push({ file: f, reason: 'type' });\n continue;\n }\n if (maxSize != null && f.size > maxSize) {\n rejected.push({ file: f, reason: 'size' });\n continue;\n }\n accepted.push(f);\n }\n if (maxFiles != null && accepted.length > maxFiles) {\n const overflow = accepted.splice(maxFiles);\n for (const f of overflow) rejected.push({ file: f, reason: 'count' });\n }\n return [accepted, rejected];\n },\n [accept, maxSize, maxFiles],\n );\n\n const openPicker = () => {\n if (!disabled) inputRef.current?.click();\n };\n\n const handleDragEnter = (e: DragEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n dragCounter.current += 1;\n const items = e.dataTransfer?.items;\n let reject = false;\n if (items && (accept || maxSize)) {\n // We can only inspect type at dragenter — size is not exposed pre-drop.\n if (accept) {\n const tokens = accept.split(',').map((t) => t.trim().toLowerCase()).filter(Boolean);\n for (let i = 0; i < items.length; i++) {\n const it = items[i];\n if (!it || it.kind !== 'file') continue;\n const t = it.type.toLowerCase();\n const ok = tokens.some((tk) => {\n if (tk.startsWith('.')) return false; // can't check extension here\n if (tk.endsWith('/*')) return t.startsWith(tk.slice(0, -1));\n return t === tk;\n });\n if (!ok) {\n reject = true;\n break;\n }\n }\n }\n }\n setDragState(reject ? 'reject' : 'over');\n };\n\n const handleDragOver = (e: DragEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n e.dataTransfer.dropEffect = 'copy';\n };\n\n const handleDragLeave = (e: DragEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n dragCounter.current -= 1;\n if (dragCounter.current <= 0) {\n dragCounter.current = 0;\n setDragState('idle');\n }\n };\n\n const handleDrop = (e: DragEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n dragCounter.current = 0;\n setDragState('idle');\n const files = e.dataTransfer?.files;\n if (!files || files.length === 0) return;\n const [accepted, rejected] = partition(files);\n onFilesChange?.(accepted, rejected);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n openPicker();\n }\n };\n\n const showError = invalid || dragState === 'reject';\n\n return (\n <div className={cn('flex flex-col gap-3', className)}>\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n data-drag-state={dragState}\n data-invalid={showError || undefined}\n onClick={openPicker}\n onKeyDown={handleKeyDown}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n className={cn(\n 'flex flex-col items-center justify-center gap-2 rounded-md border-2 border-dashed border-input bg-background px-6 py-10 text-center text-sm text-muted-foreground transition-colors',\n 'hover:border-border-strong hover:bg-muted/40',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n dragState === 'over' && 'border-primary bg-primary-soft/30 text-foreground',\n showError && 'border-destructive bg-destructive-soft/30 text-destructive',\n disabled && 'cursor-not-allowed opacity-60 hover:border-input hover:bg-background',\n )}\n >\n <Icon\n icon={UploadCloud}\n size={28}\n className={cn(\n 'text-muted-foreground',\n dragState === 'over' && 'text-primary',\n showError && 'text-destructive',\n )}\n />\n <div className=\"font-medium text-foreground\">{label}</div>\n {hint && <div className=\"text-xs\">{hint}</div>}\n <input\n {...rest}\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n name={name}\n className=\"sr-only\"\n onChange={(e) => {\n const files = e.target.files;\n if (!files || files.length === 0) return;\n const [accepted, rejected] = partition(files);\n onFilesChange?.(accepted, rejected);\n // reset so picking the same file again still fires\n e.target.value = '';\n }}\n />\n </div>\n {children}\n </div>\n );\n});\nFileUpload.displayName = 'FileUpload';\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { Check, X } from 'lucide-react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\ninterface EditableContextValue {\n value: string;\n draft: string;\n setDraft: (v: string) => void;\n editing: boolean;\n setEditing: (open: boolean) => void;\n submit: () => void;\n cancel: () => void;\n placeholder: string;\n disabled: boolean;\n readOnly: boolean;\n submitOnBlur: boolean;\n submitOnEnter: boolean;\n cancelOnEscape: boolean;\n inputRef: React.MutableRefObject<HTMLInputElement | null>;\n}\n\nconst EditableContext = createContext<EditableContextValue | null>(null);\n\nfunction useEditableContext() {\n const ctx = useContext(EditableContext);\n if (!ctx) throw new Error('Editable.* must be used inside <Editable>');\n return ctx;\n}\n\nexport interface EditableProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n editing?: boolean;\n defaultEditing?: boolean;\n onEditingChange?: (editing: boolean) => void;\n placeholder?: string;\n submitOnBlur?: boolean;\n submitOnEnter?: boolean;\n cancelOnEscape?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n name?: string;\n className?: string;\n children: ReactNode;\n}\n\nexport function Editable({\n value: valueProp,\n defaultValue,\n onValueChange,\n editing: editingProp,\n defaultEditing = false,\n onEditingChange,\n placeholder = 'Click to edit',\n submitOnBlur = true,\n submitOnEnter = true,\n cancelOnEscape = true,\n disabled = false,\n readOnly = false,\n name,\n className,\n children,\n}: EditableProps) {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const [editing, setEditing] = useControlled({\n controlled: editingProp,\n default: defaultEditing,\n onChange: onEditingChange,\n });\n const [draft, setDraft] = useState(value);\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n // Sync draft when entering edit mode or when committed value changes externally.\n useEffect(() => {\n if (editing) setDraft(value);\n }, [editing, value]);\n\n const submit = useCallback(() => {\n setValue(draft);\n setEditing(false);\n }, [draft, setValue, setEditing]);\n\n const cancel = useCallback(() => {\n setDraft(value);\n setEditing(false);\n }, [value, setEditing]);\n\n const ctx = useMemo<EditableContextValue>(\n () => ({\n value,\n draft,\n setDraft,\n editing,\n setEditing,\n submit,\n cancel,\n placeholder,\n disabled,\n readOnly,\n submitOnBlur,\n submitOnEnter,\n cancelOnEscape,\n inputRef,\n }),\n [\n value,\n draft,\n editing,\n setEditing,\n submit,\n cancel,\n placeholder,\n disabled,\n readOnly,\n submitOnBlur,\n submitOnEnter,\n cancelOnEscape,\n ],\n );\n\n return (\n <EditableContext.Provider value={ctx}>\n <div className={cn('inline-flex items-center gap-1.5', className)}>\n {children}\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n </EditableContext.Provider>\n );\n}\n\nexport type EditablePreviewProps = HTMLAttributes<HTMLSpanElement>;\n\nexport const EditablePreview = forwardRef<HTMLSpanElement, EditablePreviewProps>(\n function EditablePreview({ className, onClick, onKeyDown, ...rest }, forwardedRef) {\n const ctx = useEditableContext();\n if (ctx.editing) return null;\n const isEmpty = !ctx.value;\n const interactive = !ctx.disabled && !ctx.readOnly;\n return (\n <span\n ref={forwardedRef}\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : -1}\n aria-disabled={!interactive || undefined}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented || !interactive) return;\n ctx.setEditing(true);\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || !interactive) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx.setEditing(true);\n }\n }}\n className={cn(\n 'cursor-text rounded-sm px-1 py-0.5 text-sm text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isEmpty && 'italic text-subtle-foreground',\n !interactive && 'cursor-default hover:bg-transparent',\n className,\n )}\n {...rest}\n >\n {ctx.value || ctx.placeholder}\n </span>\n );\n },\n);\n\nexport interface EditableInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'onChange' | 'size'>,\n InputBaseVariants {}\n\nexport const EditableInput = forwardRef<HTMLInputElement, EditableInputProps>(\n function EditableInput(\n { className, size, state, onKeyDown, onBlur, ...rest },\n forwardedRef,\n ) {\n const ctx = useEditableContext();\n\n useEffect(() => {\n if (ctx.editing && ctx.inputRef.current) {\n ctx.inputRef.current.focus();\n const len = ctx.inputRef.current.value.length;\n ctx.inputRef.current.setSelectionRange(len, len);\n }\n }, [ctx.editing, ctx.inputRef]);\n\n if (!ctx.editing) return null;\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (ctx.submitOnEnter && e.key === 'Enter') {\n e.preventDefault();\n ctx.submit();\n } else if (ctx.cancelOnEscape && e.key === 'Escape') {\n e.preventDefault();\n ctx.cancel();\n }\n };\n\n return (\n <input\n ref={composeRefs(forwardedRef, ctx.inputRef)}\n type=\"text\"\n value={ctx.draft}\n disabled={ctx.disabled}\n readOnly={ctx.readOnly}\n onChange={(e) => ctx.setDraft(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={(e) => {\n onBlur?.(e);\n if (e.defaultPrevented) return;\n if (ctx.submitOnBlur) ctx.submit();\n }}\n className={cn(inputBaseVariants({ size, state }), className)}\n {...rest}\n />\n );\n },\n);\n\nexport type EditableButtonProps = ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const EditableSubmit = forwardRef<HTMLButtonElement, EditableButtonProps>(\n function EditableSubmit({ className, onClick, children, type = 'button', ...rest }, forwardedRef) {\n const ctx = useEditableContext();\n if (!ctx.editing) return null;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label=\"Submit\"\n // onMouseDown so we fire before the input's blur handler closes us.\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.submit();\n }}\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-success transition-colors hover:bg-success-soft focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children ?? <Icon icon={Check} size={14} />}\n </button>\n );\n },\n);\n\nexport const EditableCancel = forwardRef<HTMLButtonElement, EditableButtonProps>(\n function EditableCancel({ className, onClick, children, type = 'button', ...rest }, forwardedRef) {\n const ctx = useEditableContext();\n if (!ctx.editing) return null;\n return (\n <button\n ref={forwardedRef}\n type={type}\n aria-label=\"Cancel\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.cancel();\n }}\n className={cn(\n 'inline-flex h-8 w-8 items-center justify-center rounded-md text-destructive transition-colors hover:bg-destructive-soft focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children ?? <Icon icon={X} size={14} />}\n </button>\n );\n },\n);\n\ntype EditableComponent = typeof Editable & {\n Preview: typeof EditablePreview;\n Input: typeof EditableInput;\n Submit: typeof EditableSubmit;\n Cancel: typeof EditableCancel;\n};\n\n(Editable as EditableComponent).Preview = EditablePreview;\n(Editable as EditableComponent).Input = EditableInput;\n(Editable as EditableComponent).Submit = EditableSubmit;\n(Editable as EditableComponent).Cancel = EditableCancel;\n\nexport default Editable as EditableComponent;\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useMemo,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\n\ninterface StepInfo {\n id: string;\n label?: ReactNode;\n optional?: boolean;\n final?: boolean;\n}\n\ninterface WizardContextValue {\n steps: StepInfo[];\n currentIndex: number;\n currentStep: StepInfo | undefined;\n goTo: (idOrIndex: string | number) => void;\n next: () => Promise<void>;\n back: () => void;\n canGoBack: boolean;\n visited: Set<string>;\n registerStep: (info: StepInfo) => void;\n unregisterStep: (id: string) => void;\n registerValidator: (id: string, validator: () => boolean | Promise<boolean>) => void;\n unregisterValidator: (id: string) => void;\n isPending: boolean;\n}\n\nconst WizardContext = createContext<WizardContextValue | null>(null);\n\nexport function useWizard() {\n const ctx = useContext(WizardContext);\n if (!ctx) throw new Error('useWizard must be used inside <Wizard>');\n return ctx;\n}\n\nexport interface WizardProps extends HTMLAttributes<HTMLDivElement> {\n currentStep?: string;\n defaultCurrentStep?: string;\n onStepChange?: (step: string) => void;\n onComplete?: () => void | Promise<void>;\n canGoBack?: boolean;\n children: ReactNode;\n}\n\nexport const Wizard = forwardRef<HTMLDivElement, WizardProps>(function Wizard(\n {\n currentStep: currentStepProp,\n defaultCurrentStep,\n onStepChange,\n onComplete,\n canGoBack = true,\n className,\n children,\n ...rest\n },\n ref,\n) {\n // Pre-walk children to discover step ids (so context can default to first id).\n const childArray = Children.toArray(children).filter(isValidElement);\n const stepFromChildren: StepInfo[] = childArray\n .filter(\n (c) =>\n (c.type as { displayName?: string }).displayName === 'WizardStep',\n )\n .map((c) => {\n const props = c.props as WizardStepProps;\n return {\n id: props.id,\n label: props.label,\n optional: props.optional,\n final: props.final,\n };\n });\n\n const [steps, setSteps] = useState<StepInfo[]>(stepFromChildren);\n const validatorsRef = useState(() => new Map<string, () => boolean | Promise<boolean>>())[0];\n\n const initialStep = stepFromChildren[0]?.id ?? '';\n const [currentStepId, setCurrentStepId] = useControlled<string>({\n controlled: currentStepProp,\n default: defaultCurrentStep ?? initialStep,\n onChange: onStepChange,\n });\n\n const [visited, setVisited] = useState<Set<string>>(() => new Set([initialStep]));\n const [isPending, setIsPending] = useState(false);\n\n const currentIndex = steps.findIndex((s) => s.id === currentStepId);\n const currentStep = steps[currentIndex];\n\n const registerStep = useCallback((info: StepInfo) => {\n setSteps((prev) => {\n const idx = prev.findIndex((s) => s.id === info.id);\n if (idx >= 0) {\n const next = prev.slice();\n next[idx] = info;\n return next;\n }\n return [...prev, info];\n });\n }, []);\n\n const unregisterStep = useCallback((id: string) => {\n setSteps((prev) => prev.filter((s) => s.id !== id));\n }, []);\n\n const registerValidator = useCallback(\n (id: string, validator: () => boolean | Promise<boolean>) => {\n validatorsRef.set(id, validator);\n },\n [validatorsRef],\n );\n\n const unregisterValidator = useCallback(\n (id: string) => {\n validatorsRef.delete(id);\n },\n [validatorsRef],\n );\n\n const goTo = useCallback(\n (idOrIndex: string | number) => {\n const target =\n typeof idOrIndex === 'number' ? steps[idOrIndex]?.id : idOrIndex;\n if (!target) return;\n setCurrentStepId(target);\n setVisited((prev) => new Set([...prev, target]));\n },\n [steps, setCurrentStepId],\n );\n\n const next = useCallback(async () => {\n if (!currentStep || isPending) return;\n const validator = validatorsRef.get(currentStep.id);\n if (validator) {\n setIsPending(true);\n try {\n const ok = await validator();\n if (!ok) return;\n } finally {\n setIsPending(false);\n }\n }\n if (currentStep.final) {\n setIsPending(true);\n try {\n await onComplete?.();\n } finally {\n setIsPending(false);\n }\n return;\n }\n const nextStep = steps[currentIndex + 1];\n if (nextStep) goTo(nextStep.id);\n }, [currentStep, currentIndex, steps, isPending, onComplete, validatorsRef, goTo]);\n\n const back = useCallback(() => {\n if (!canGoBack) return;\n const prev = steps[currentIndex - 1];\n if (prev) goTo(prev.id);\n }, [canGoBack, currentIndex, steps, goTo]);\n\n const ctx = useMemo<WizardContextValue>(\n () => ({\n steps,\n currentIndex,\n currentStep,\n goTo,\n next,\n back,\n canGoBack,\n visited,\n registerStep,\n unregisterStep,\n registerValidator,\n unregisterValidator,\n isPending,\n }),\n [\n steps,\n currentIndex,\n currentStep,\n goTo,\n next,\n back,\n canGoBack,\n visited,\n registerStep,\n unregisterStep,\n registerValidator,\n unregisterValidator,\n isPending,\n ],\n );\n\n return (\n <WizardContext.Provider value={ctx}>\n <div ref={ref} className={cn('flex flex-col gap-4', className)} {...rest}>\n {children}\n </div>\n </WizardContext.Provider>\n );\n});\n\nexport type WizardStepsProps = HTMLAttributes<HTMLDivElement>;\n\nexport const WizardSteps = forwardRef<HTMLDivElement, WizardStepsProps>(\n function WizardSteps({ className, ...rest }, ref) {\n const ctx = useWizard();\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-label=\"Wizard steps\"\n className={cn('flex items-center gap-2 overflow-x-auto', className)}\n {...rest}\n >\n {ctx.steps.map((step, i) => {\n const isCurrent = ctx.currentIndex === i;\n const wasVisited = ctx.visited.has(step.id);\n const canJump = ctx.canGoBack && wasVisited;\n return (\n <button\n key={step.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isCurrent}\n aria-disabled={!canJump || undefined}\n onClick={() => canJump && ctx.goTo(step.id)}\n className={cn(\n 'flex items-center gap-2 rounded-md px-3 py-1.5 text-xs font-medium transition-colors',\n isCurrent\n ? 'bg-primary text-primary-foreground'\n : wasVisited\n ? 'bg-muted text-foreground hover:bg-muted/70'\n : 'text-muted-foreground',\n !canJump && 'cursor-default',\n )}\n >\n <span className=\"grid h-5 w-5 place-items-center rounded-full bg-background/20 text-[10px]\">\n {i + 1}\n </span>\n {step.label ?? step.id}\n {step.optional && <span className=\"ml-1 text-[10px] opacity-70\">(optional)</span>}\n </button>\n );\n })}\n </div>\n );\n },\n);\n\nexport interface WizardStepProps extends HTMLAttributes<HTMLDivElement> {\n id: string;\n label?: ReactNode;\n validate?: () => boolean | Promise<boolean>;\n optional?: boolean;\n final?: boolean;\n}\n\nexport const WizardStep = forwardRef<HTMLDivElement, WizardStepProps>(function WizardStep(\n { id, label, validate, optional, final, className, children, ...rest },\n ref,\n) {\n const ctx = useWizard();\n const isCurrent = ctx.currentStep?.id === id;\n\n // Register/refresh step metadata.\n useMemo(() => {\n ctx.registerStep({ id, label, optional, final });\n return id;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, label, optional, final]);\n\n useMemo(() => {\n if (validate) ctx.registerValidator(id, validate);\n else ctx.unregisterValidator(id);\n return validate;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, validate]);\n\n if (!isCurrent) return null;\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n aria-labelledby={`wizard-step-${id}`}\n className={cn('flex flex-col gap-3', className)}\n {...rest}\n >\n {children}\n </div>\n );\n});\nWizardStep.displayName = 'WizardStep';\n\nexport interface WizardFooterProps extends HTMLAttributes<HTMLDivElement> {\n prevLabel?: ReactNode;\n nextLabel?: ReactNode;\n submitLabel?: ReactNode;\n /** Render the Prev button when not on first step. Default true. */\n showPrev?: boolean;\n}\n\nexport const WizardFooter = forwardRef<HTMLDivElement, WizardFooterProps>(\n function WizardFooter(\n {\n prevLabel = 'Back',\n nextLabel = 'Next',\n submitLabel = 'Finish',\n showPrev = true,\n className,\n ...rest\n },\n ref,\n ) {\n const ctx = useWizard();\n const isFirst = ctx.currentIndex === 0;\n const isFinal = ctx.currentStep?.final ?? false;\n\n return (\n <div\n ref={ref}\n className={cn('mt-2 flex items-center justify-between gap-3', className)}\n {...rest}\n >\n {showPrev && !isFirst && ctx.canGoBack ? (\n <button\n type=\"button\"\n onClick={ctx.back}\n disabled={ctx.isPending}\n className=\"inline-flex h-9 items-center rounded-md border border-border bg-background px-4 text-sm font-medium hover:bg-muted disabled:opacity-50\"\n >\n {prevLabel}\n </button>\n ) : (\n <span />\n )}\n <button\n type=\"button\"\n onClick={ctx.next}\n disabled={ctx.isPending}\n className=\"inline-flex h-9 items-center rounded-md bg-primary px-4 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50\"\n >\n {ctx.isPending ? '…' : isFinal ? submitLabel : nextLabel}\n </button>\n </div>\n );\n },\n);\n\ntype WizardComponent = typeof Wizard & {\n Steps: typeof WizardSteps;\n Step: typeof WizardStep;\n Footer: typeof WizardFooter;\n};\n\n(Wizard as WizardComponent).Steps = WizardSteps;\n(Wizard as WizardComponent).Step = WizardStep;\n(Wizard as WizardComponent).Footer = WizardFooter;\n\nexport default Wizard as WizardComponent;\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type TextareaHTMLAttributes,\n} from 'react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\n\nexport interface CodeEditorProps\n extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'value' | 'defaultValue' | 'onChange'\n > {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n /** Forward-compat hint; unused by this first-gen component. */\n language?: string;\n tabSize?: number;\n useTabs?: boolean;\n invalid?: boolean;\n /** CSS minHeight on the surface (default `12rem`). */\n minHeight?: string;\n}\n\n/**\n * First-generation code editor — styled `<textarea>` + line-number gutter +\n * Tab/Shift-Tab indent handling. **No syntax highlighting** (deferred to a\n * follow-up wrapping Monaco / CodeMirror inside this contract).\n */\nexport const CodeEditor = forwardRef<HTMLTextAreaElement, CodeEditorProps>(\n function CodeEditor(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n language,\n tabSize = 2,\n useTabs = false,\n disabled,\n readOnly,\n invalid,\n minHeight = '12rem',\n placeholder,\n className,\n onKeyDown,\n onScroll,\n ...rest\n },\n forwardedRef,\n ) {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const gutterRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n useImperativeHandle(forwardedRef, () => textareaRef.current as HTMLTextAreaElement);\n\n const lineCount = useMemo(() => value.split('\\n').length, [value]);\n const indentChar = useTabs ? '\\t' : ' '.repeat(tabSize);\n\n const insertAtSelection = useCallback(\n (insert: string, selStart: number, selEnd: number) => {\n const next = value.slice(0, selStart) + insert + value.slice(selEnd);\n setValue(next);\n return selStart + insert.length;\n },\n [value, setValue],\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || disabled || readOnly) return;\n const ta = e.currentTarget;\n const start = ta.selectionStart;\n const end = ta.selectionEnd;\n\n if (e.key === 'Tab') {\n e.preventDefault();\n if (start === end) {\n if (e.shiftKey) {\n // Outdent at cursor's line.\n const lineStart = value.lastIndexOf('\\n', start - 1) + 1;\n const lineSlice = value.slice(lineStart, start);\n const match = useTabs ? /^\\t/ : new RegExp(`^ {1,${tabSize}}`);\n const m = match.exec(lineSlice);\n if (m) {\n const next = value.slice(0, lineStart) + lineSlice.slice(m[0].length) + value.slice(start);\n setValue(next);\n requestAnimationFrame(() => {\n if (textareaRef.current) {\n const newPos = start - m[0].length;\n textareaRef.current.selectionStart = newPos;\n textareaRef.current.selectionEnd = newPos;\n }\n });\n }\n } else {\n const newPos = insertAtSelection(indentChar, start, end);\n requestAnimationFrame(() => {\n if (textareaRef.current) {\n textareaRef.current.selectionStart = newPos;\n textareaRef.current.selectionEnd = newPos;\n }\n });\n }\n } else {\n // Multi-line indent / outdent.\n const before = value.slice(0, start);\n const between = value.slice(start, end);\n const after = value.slice(end);\n const lineStartOffset = before.lastIndexOf('\\n') + 1;\n const blockStart = before.slice(0, lineStartOffset);\n const block = before.slice(lineStartOffset) + between;\n if (e.shiftKey) {\n const re = useTabs ? /^\\t/gm : new RegExp(`^ {1,${tabSize}}`, 'gm');\n const next = blockStart + block.replace(re, '') + after;\n setValue(next);\n } else {\n const next = blockStart + block.replace(/^/gm, indentChar) + after;\n setValue(next);\n }\n }\n }\n };\n\n const state = invalid ? 'invalid' : 'default';\n\n // Generate line-number string once per line count.\n const gutterText = useMemo(\n () =>\n Array.from({ length: lineCount }, (_, i) => String(i + 1)).join('\\n'),\n [lineCount],\n );\n\n return (\n <div\n data-state={state}\n data-language={language || undefined}\n data-disabled={disabled || undefined}\n data-readonly={readOnly || undefined}\n className={cn(\n 'relative flex overflow-hidden rounded-md border border-input bg-card text-card-foreground font-mono text-sm shadow-sm',\n 'focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/40',\n state === 'invalid' && 'border-destructive focus-within:border-destructive focus-within:ring-destructive/40',\n disabled && 'cursor-not-allowed opacity-60',\n className,\n )}\n style={{ minHeight }}\n >\n <div\n ref={gutterRef}\n aria-hidden=\"true\"\n className=\"select-none whitespace-pre overflow-hidden border-r border-border bg-muted/40 px-3 py-2 text-right text-muted-foreground tabular-nums\"\n style={{ transform: `translateY(${-scrollTop}px)` }}\n >\n {gutterText}\n </div>\n <textarea\n {...rest}\n ref={composeRefs(forwardedRef, textareaRef)}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onScroll={(e) => {\n setScrollTop(e.currentTarget.scrollTop);\n onScroll?.(e);\n }}\n disabled={disabled}\n readOnly={readOnly}\n spellCheck={false}\n placeholder={placeholder}\n aria-invalid={invalid || undefined}\n className=\"block flex-1 resize-none whitespace-pre overflow-auto bg-transparent px-3 py-2 outline-none placeholder:text-subtle-foreground disabled:cursor-not-allowed\"\n />\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\nimport { marked } from 'marked';\nimport { Bold, Code, Heading1, Heading2, Italic, Link2, List, Quote } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\n\nexport type MarkdownEditorView = 'split' | 'edit' | 'preview';\n\nexport interface MarkdownEditorProps\n extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'value' | 'defaultValue' | 'onChange'\n > {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n view?: MarkdownEditorView;\n defaultView?: MarkdownEditorView;\n onViewChange?: (view: MarkdownEditorView) => void;\n renderPreview?: (markdown: string) => ReactNode;\n invalid?: boolean;\n minHeight?: string;\n}\n\ninterface ToolbarAction {\n key: string;\n label: string;\n icon: ReactNode;\n apply: (sel: { value: string; start: number; end: number }) => {\n value: string;\n selStart: number;\n selEnd: number;\n };\n}\n\nconst wrap = (before: string, after: string) =>\n ({ value, start, end }: { value: string; start: number; end: number }) => {\n const sel = value.slice(start, end);\n const next = value.slice(0, start) + before + sel + after + value.slice(end);\n const selStart = start + before.length;\n return { value: next, selStart, selEnd: selStart + sel.length };\n };\n\nconst linePrefix = (prefix: string) =>\n ({ value, start, end }: { value: string; start: number; end: number }) => {\n const lineStart = value.lastIndexOf('\\n', start - 1) + 1;\n const trailing = value.slice(end).indexOf('\\n');\n const lineEnd = trailing === -1 ? value.length : end + trailing;\n const block = value.slice(lineStart, lineEnd);\n const updated = block\n .split('\\n')\n .map((l) => prefix + l)\n .join('\\n');\n const next = value.slice(0, lineStart) + updated + value.slice(lineEnd);\n return { value: next, selStart: lineStart + prefix.length, selEnd: lineStart + updated.length };\n };\n\nconst ACTIONS: ToolbarAction[] = [\n { key: 'h1', label: 'Heading 1', icon: <Icon icon={Heading1} size={14} />, apply: linePrefix('# ') },\n { key: 'h2', label: 'Heading 2', icon: <Icon icon={Heading2} size={14} />, apply: linePrefix('## ') },\n { key: 'bold', label: 'Bold', icon: <Icon icon={Bold} size={14} />, apply: wrap('**', '**') },\n { key: 'italic', label: 'Italic', icon: <Icon icon={Italic} size={14} />, apply: wrap('*', '*') },\n { key: 'code', label: 'Inline code', icon: <Icon icon={Code} size={14} />, apply: wrap('`', '`') },\n { key: 'link', label: 'Link', icon: <Icon icon={Link2} size={14} />, apply: wrap('[', '](https://)') },\n { key: 'list', label: 'List', icon: <Icon icon={List} size={14} />, apply: linePrefix('- ') },\n { key: 'quote', label: 'Blockquote', icon: <Icon icon={Quote} size={14} />, apply: linePrefix('> ') },\n];\n\n/**\n * Markdown input + live preview. Toolbar wraps selection with syntax;\n * preview pane renders via `marked.parse` (or the consumer-supplied\n * `renderPreview`). Three view modes: `split` / `edit` / `preview`.\n */\nexport const MarkdownEditor = forwardRef<HTMLTextAreaElement, MarkdownEditorProps>(\n function MarkdownEditor(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n view: viewProp,\n defaultView,\n onViewChange,\n renderPreview,\n disabled,\n readOnly,\n invalid,\n minHeight = '18rem',\n placeholder,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const [view, setView] = useControlled({\n controlled: viewProp,\n default: defaultView ?? 'split',\n onChange: onViewChange,\n });\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const groupId = useId();\n\n useImperativeHandle(forwardedRef, () => textareaRef.current as HTMLTextAreaElement);\n\n const previewHtml = useMemo(() => {\n if (renderPreview) return null;\n try {\n return marked.parse(value, { async: false }) as string;\n } catch {\n return '<p>Failed to render preview.</p>';\n }\n }, [value, renderPreview]);\n\n const applyAction = (action: ToolbarAction) => {\n const ta = textareaRef.current;\n if (!ta) return;\n const next = action.apply({\n value,\n start: ta.selectionStart ?? value.length,\n end: ta.selectionEnd ?? value.length,\n });\n setValue(next.value);\n requestAnimationFrame(() => {\n ta.focus();\n ta.selectionStart = next.selStart;\n ta.selectionEnd = next.selEnd;\n });\n };\n\n const showEdit = view === 'split' || view === 'edit';\n const showPreview = view === 'split' || view === 'preview';\n\n const state = invalid ? 'invalid' : 'default';\n\n return (\n <div\n data-state={state}\n className={cn(\n 'flex flex-col overflow-hidden rounded-md border border-input bg-card text-card-foreground shadow-sm',\n state === 'invalid' && 'border-destructive',\n disabled && 'opacity-60',\n className,\n )}\n style={{ minHeight }}\n >\n <div className=\"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1\">\n <div role=\"toolbar\" aria-label=\"Markdown formatting\" className=\"flex items-center gap-0.5\">\n {ACTIONS.map((a) => (\n <button\n key={a.key}\n type=\"button\"\n aria-label={a.label}\n disabled={disabled || readOnly}\n onClick={() => applyAction(a)}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\"\n >\n {a.icon}\n </button>\n ))}\n </div>\n <div role=\"radiogroup\" aria-label=\"View mode\" className=\"ml-auto flex items-center gap-0.5 rounded-md bg-card p-0.5 ring-1 ring-border\">\n {(['edit', 'split', 'preview'] as MarkdownEditorView[]).map((v) => (\n <button\n key={v}\n type=\"button\"\n role=\"radio\"\n aria-checked={view === v}\n onClick={() => setView(v)}\n className={cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n view === v\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {v}\n </button>\n ))}\n </div>\n </div>\n <div className=\"flex flex-1 divide-x divide-border\" style={{ minHeight: 0 }}>\n {showEdit && (\n <textarea\n {...rest}\n ref={textareaRef}\n id={groupId}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n spellCheck={false}\n aria-invalid={invalid || undefined}\n onChange={(e) => setValue(e.target.value)}\n className={cn(\n 'flex-1 resize-none whitespace-pre-wrap break-words bg-transparent p-3 font-mono text-sm outline-none placeholder:text-subtle-foreground disabled:cursor-not-allowed',\n showPreview && 'border-r-0',\n )}\n />\n )}\n {showPreview && (\n <div\n aria-live=\"polite\"\n aria-label=\"Preview\"\n className=\"prose prose-sm flex-1 overflow-auto bg-background p-3 text-sm text-foreground\"\n >\n {renderPreview ? (\n renderPreview(value)\n ) : (\n <div dangerouslySetInnerHTML={{ __html: previewHtml ?? '' }} />\n )}\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\n","import {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n} from 'react';\nimport { ChevronRight, Copy } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\n\nexport type JSONEditorMode = 'tree' | 'text';\n\nexport interface JSONEditorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: unknown;\n defaultValue?: unknown;\n onValueChange?: (value: unknown) => void;\n mode?: JSONEditorMode;\n defaultMode?: JSONEditorMode;\n onModeChange?: (mode: JSONEditorMode) => void;\n disabled?: boolean;\n readOnly?: boolean;\n invalid?: boolean;\n indent?: number;\n minHeight?: string;\n}\n\ntype Path = Array<string | number>;\n\nfunction describeType(v: unknown): string {\n if (v === null) return 'null';\n if (Array.isArray(v)) return 'array';\n return typeof v;\n}\n\nfunction pathToString(path: Path): string {\n return path\n .map((p) => (typeof p === 'number' ? `[${p}]` : path.indexOf(p) === 0 ? p : `.${p}`))\n .join('');\n}\n\nfunction setAtPath(root: unknown, path: Path, next: unknown): unknown {\n if (path.length === 0) return next;\n const [head, ...rest] = path;\n if (Array.isArray(root)) {\n const idx = head as number;\n const copy = root.slice();\n copy[idx] = setAtPath(root[idx], rest, next);\n return copy;\n }\n if (root && typeof root === 'object') {\n const key = head as string;\n return { ...(root as Record<string, unknown>), [key]: setAtPath((root as Record<string, unknown>)[key], rest, next) };\n }\n return root;\n}\n\n/**\n * JSON editor with tree-view and raw-text modes. Tree mode supports inline\n * edit of primitive leaves + per-node copy-path. Text mode parses on commit;\n * invalid JSON shows inline error.\n */\nexport const JSONEditor = forwardRef<HTMLDivElement, JSONEditorProps>(function JSONEditor(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n mode: modeProp,\n defaultMode = 'tree',\n onModeChange,\n disabled,\n readOnly,\n invalid,\n indent = 2,\n minHeight = '14rem',\n className,\n ...rest\n },\n ref,\n) {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? {},\n onChange: onValueChange,\n });\n const [mode, setMode] = useControlled({\n controlled: modeProp,\n default: defaultMode,\n onChange: onModeChange,\n });\n\n const updateAt = (path: Path, next: unknown) => {\n setValue(setAtPath(value, path, next));\n };\n\n return (\n <div\n ref={ref}\n data-state={invalid ? 'invalid' : 'default'}\n className={cn(\n 'flex flex-col overflow-hidden rounded-md border border-input bg-card text-card-foreground shadow-sm',\n invalid && 'border-destructive',\n disabled && 'opacity-60',\n className,\n )}\n style={{ minHeight }}\n {...rest}\n >\n <div className=\"flex items-center gap-1 border-b border-border bg-muted/40 px-2 py-1\">\n <div role=\"radiogroup\" aria-label=\"JSON mode\" className=\"flex items-center gap-0.5 rounded-md bg-card p-0.5 ring-1 ring-border\">\n {(['tree', 'text'] as JSONEditorMode[]).map((m) => (\n <button\n key={m}\n type=\"button\"\n role=\"radio\"\n aria-checked={mode === m}\n onClick={() => setMode(m)}\n className={cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n mode === m\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {m}\n </button>\n ))}\n </div>\n </div>\n <div className=\"flex-1 overflow-auto\" style={{ minHeight: 0 }}>\n {mode === 'tree' ? (\n <TreeView value={value} updateAt={updateAt} disabled={disabled} readOnly={readOnly} />\n ) : (\n <TextView value={value} setValue={setValue} disabled={disabled} readOnly={readOnly} indent={indent} />\n )}\n </div>\n </div>\n );\n});\n\ninterface TreeViewProps {\n value: unknown;\n updateAt: (path: Path, next: unknown) => void;\n disabled?: boolean;\n readOnly?: boolean;\n}\n\nfunction TreeView({ value, updateAt, disabled, readOnly }: TreeViewProps) {\n return (\n <ul role=\"tree\" className=\"font-mono text-sm\">\n <TreeNode keyName={null} value={value} path={[]} updateAt={updateAt} disabled={disabled} readOnly={readOnly} depth={0} />\n </ul>\n );\n}\n\ninterface TreeNodeProps {\n keyName: string | number | null;\n value: unknown;\n path: Path;\n updateAt: (path: Path, next: unknown) => void;\n disabled?: boolean;\n readOnly?: boolean;\n depth: number;\n}\n\nfunction TreeNode({ keyName, value, path, updateAt, disabled, readOnly, depth }: TreeNodeProps) {\n const type = describeType(value);\n const isObject = type === 'object' || type === 'array';\n const [open, setOpen] = useState(depth < 2);\n const [editing, setEditing] = useState(false);\n const [draft, setDraft] = useState<string>('');\n\n const startEdit = () => {\n if (disabled || readOnly || isObject) return;\n setEditing(true);\n setDraft(typeof value === 'string' ? value : String(value));\n };\n\n const commitEdit = () => {\n setEditing(false);\n if (typeof value === 'number') {\n const n = Number(draft);\n if (!Number.isNaN(n)) updateAt(path, n);\n } else if (typeof value === 'boolean') {\n if (draft === 'true' || draft === 'false') updateAt(path, draft === 'true');\n } else if (value === null) {\n if (draft === 'null') updateAt(path, null);\n } else {\n updateAt(path, draft);\n }\n };\n\n const onKey = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') commitEdit();\n if (e.key === 'Escape') setEditing(false);\n };\n\n const copyPath = () => {\n const text = pathToString(path);\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n navigator.clipboard.writeText(text).catch(() => {});\n }\n };\n\n const entries = isObject\n ? Array.isArray(value)\n ? (value as unknown[]).map((v, i) => [i, v] as const)\n : Object.entries(value as Record<string, unknown>)\n : [];\n\n return (\n <li role=\"treeitem\" aria-expanded={isObject ? open : undefined} className=\"px-1\">\n <div className=\"group flex items-start gap-1 py-0.5\" style={{ paddingLeft: depth * 16 }}>\n {isObject ? (\n <button\n type=\"button\"\n aria-label={open ? 'Collapse' : 'Expand'}\n onClick={() => setOpen((o) => !o)}\n className=\"inline-flex h-5 w-5 items-center justify-center text-muted-foreground hover:text-foreground\"\n >\n <Icon icon={ChevronRight} size={12} className={cn('transition-transform', open && 'rotate-90')} />\n </button>\n ) : (\n <span className=\"inline-block h-5 w-5\" />\n )}\n {keyName !== null && (\n <span className=\"text-foreground\">\n {typeof keyName === 'string' ? `\"${keyName}\"` : keyName}\n <span className=\"text-muted-foreground\">: </span>\n </span>\n )}\n {isObject ? (\n <span className=\"text-muted-foreground\">\n {Array.isArray(value) ? `Array(${entries.length})` : `Object(${entries.length})`}\n </span>\n ) : editing ? (\n <input\n autoFocus\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={onKey}\n onBlur={commitEdit}\n className=\"h-5 rounded-sm bg-background px-1 text-sm font-mono outline-none ring-2 ring-ring\"\n />\n ) : (\n <button\n type=\"button\"\n onClick={startEdit}\n className={cn(\n 'cursor-text rounded-sm px-1 text-left transition-colors',\n !disabled && !readOnly && 'hover:bg-muted',\n type === 'string' && 'text-info',\n type === 'number' && 'text-warning',\n type === 'boolean' && 'text-success',\n type === 'null' && 'text-muted-foreground italic',\n )}\n >\n {type === 'string' ? `\"${value as string}\"` : String(value)}\n </button>\n )}\n <button\n type=\"button\"\n aria-label={`Copy path ${pathToString(path) || 'root'}`}\n onClick={copyPath}\n className=\"ml-auto opacity-0 transition-opacity group-hover:opacity-100 inline-flex h-5 w-5 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Copy} size={11} />\n </button>\n </div>\n {isObject && open && (\n <ul role=\"group\">\n {entries.map(([k, v]) => (\n <TreeNode\n key={String(k)}\n keyName={k}\n value={v}\n path={[...path, k]}\n updateAt={updateAt}\n disabled={disabled}\n readOnly={readOnly}\n depth={depth + 1}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\ninterface TextViewProps {\n value: unknown;\n setValue: (next: unknown) => void;\n disabled?: boolean;\n readOnly?: boolean;\n indent: number;\n}\n\nfunction TextView({ value, setValue, disabled, readOnly, indent }: TextViewProps) {\n const initial = useMemo(() => safeStringify(value, indent), [value, indent]);\n const [draft, setDraft] = useState(initial);\n const [error, setError] = useState<string | null>(null);\n const dirty = useRef(false);\n\n // Re-sync when external value changes (when not actively editing).\n useEffect(() => {\n if (!dirty.current) setDraft(initial);\n }, [initial]);\n\n const commit = () => {\n try {\n const parsed = JSON.parse(draft);\n setError(null);\n setValue(parsed);\n dirty.current = false;\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Invalid JSON');\n }\n };\n\n return (\n <div className=\"flex h-full flex-col\">\n <textarea\n value={draft}\n disabled={disabled}\n readOnly={readOnly}\n spellCheck={false}\n onChange={(e) => {\n dirty.current = true;\n setDraft(e.target.value);\n }}\n onBlur={commit}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n setDraft(initial);\n setError(null);\n dirty.current = false;\n }\n }}\n className={cn(\n 'flex-1 resize-none whitespace-pre bg-transparent p-3 font-mono text-sm outline-none placeholder:text-subtle-foreground disabled:cursor-not-allowed',\n error && 'text-foreground',\n )}\n />\n {error && (\n <div role=\"alert\" className=\"border-t border-destructive bg-destructive-soft px-3 py-2 text-xs text-destructive\">\n {error}\n </div>\n )}\n </div>\n );\n}\n\nfunction safeStringify(value: unknown, indent: number): string {\n try {\n return JSON.stringify(value, null, indent);\n } catch {\n return '';\n }\n}\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { addDays, addMonths, formatISODate, parseISODate } from '../DateExtensions';\nimport { inputBaseVariants } from '../InputStyles';\n\nexport type RecurrenceFreq = 'DAILY' | 'WEEKLY' | 'MONTHLY' | 'YEARLY';\nexport type RecurrenceWeekday = 'MO' | 'TU' | 'WE' | 'TH' | 'FR' | 'SA' | 'SU';\n\nexport interface RecurrenceRule {\n freq: RecurrenceFreq;\n interval: number;\n byDay?: RecurrenceWeekday[];\n byMonthDay?: number;\n count?: number;\n until?: Date | null;\n}\n\nexport interface RecurrenceEditorProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n value?: RecurrenceRule;\n defaultValue?: RecurrenceRule;\n onValueChange?: (rule: RecurrenceRule) => void;\n from?: Date;\n previewCount?: number;\n disabled?: boolean;\n readOnly?: boolean;\n /** When set, emits a hidden input with the serialized `RRULE:` string. */\n name?: string;\n}\n\nconst ALL_WEEKDAYS: RecurrenceWeekday[] = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\nconst WEEKDAY_LABEL: Record<RecurrenceWeekday, string> = {\n SU: 'Su',\n MO: 'Mo',\n TU: 'Tu',\n WE: 'We',\n TH: 'Th',\n FR: 'Fr',\n SA: 'Sa',\n};\nconst JS_TO_RRULE: RecurrenceWeekday[] = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n\nfunction serializeRule(r: RecurrenceRule): string {\n const parts: string[] = [`FREQ=${r.freq}`];\n if (r.interval > 1) parts.push(`INTERVAL=${r.interval}`);\n if (r.byDay && r.byDay.length > 0) parts.push(`BYDAY=${r.byDay.join(',')}`);\n if (r.byMonthDay) parts.push(`BYMONTHDAY=${r.byMonthDay}`);\n if (r.count) parts.push(`COUNT=${r.count}`);\n if (r.until) parts.push(`UNTIL=${formatISODate(r.until).replace(/-/g, '')}`);\n return `RRULE:${parts.join(';')}`;\n}\n\nfunction nextOccurrence(rule: RecurrenceRule, prev: Date): Date | null {\n switch (rule.freq) {\n case 'DAILY':\n return addDays(prev, rule.interval);\n case 'WEEKLY': {\n if (!rule.byDay || rule.byDay.length === 0) return addDays(prev, 7 * rule.interval);\n // Find the next allowed weekday after `prev`. After exhausting the week, jump `interval-1` weeks forward.\n const allowed = new Set(rule.byDay);\n let cursor = addDays(prev, 1);\n let weekJumps = 0;\n const maxIter = 7 * rule.interval + 1;\n for (let i = 0; i < maxIter; i++) {\n const wd = JS_TO_RRULE[cursor.getDay()]!;\n if (allowed.has(wd)) {\n return cursor;\n }\n cursor = addDays(cursor, 1);\n if (cursor.getDay() === 0) weekJumps++;\n if (weekJumps >= rule.interval) {\n // Wrap to next interval window.\n // Continue scanning — first hit wins anyway.\n }\n }\n return null;\n }\n case 'MONTHLY': {\n const next = addMonths(prev, rule.interval);\n if (rule.byMonthDay) {\n next.setDate(rule.byMonthDay);\n }\n return next;\n }\n case 'YEARLY': {\n const c = new Date(prev);\n c.setFullYear(c.getFullYear() + rule.interval);\n return c;\n }\n }\n}\n\nfunction buildPreview(rule: RecurrenceRule, from: Date, count: number): Date[] {\n const out: Date[] = [];\n let cursor = from;\n // Include `from` if it satisfies the rule (simplification: always include for visual hint).\n out.push(new Date(cursor));\n for (let i = 0; i < count - 1; i++) {\n const next = nextOccurrence(rule, cursor);\n if (!next) break;\n if (rule.until && next > rule.until) break;\n if (rule.count && out.length >= rule.count) break;\n out.push(next);\n cursor = next;\n }\n return out;\n}\n\nconst DEFAULT_RULE: RecurrenceRule = { freq: 'WEEKLY', interval: 1, byDay: ['MO'] };\n\n/**\n * Visual RRULE editor. Output is a JS `RecurrenceRule` object via `onValueChange`;\n * if `name` is set, also emits a hidden `RRULE:FREQ=…` string for forms.\n */\nexport const RecurrenceEditor = forwardRef<HTMLDivElement, RecurrenceEditorProps>(\n function RecurrenceEditor(\n {\n value,\n defaultValue,\n onValueChange,\n from = new Date(),\n previewCount = 5,\n disabled,\n readOnly,\n name,\n className,\n ...rest\n },\n ref,\n ) {\n const [rule, setRule] = useControlled({\n controlled: value,\n default: defaultValue ?? DEFAULT_RULE,\n onChange: onValueChange,\n });\n\n const preview = useMemo(() => buildPreview(rule, from, previewCount), [rule, from, previewCount]);\n\n const update = (patch: Partial<RecurrenceRule>) => {\n const next = { ...rule, ...patch };\n // Reset incompatible fields when freq changes.\n if (patch.freq && patch.freq !== rule.freq) {\n if (patch.freq !== 'WEEKLY') next.byDay = undefined;\n if (patch.freq !== 'MONTHLY') next.byMonthDay = undefined;\n }\n setRule(next);\n };\n\n const endMode: 'never' | 'count' | 'until' = rule.count\n ? 'count'\n : rule.until\n ? 'until'\n : 'never';\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col gap-3 rounded-md border border-border bg-card p-4 text-card-foreground shadow-sm',\n disabled && 'opacity-60',\n className,\n )}\n {...rest}\n >\n <div className=\"flex flex-wrap items-center gap-2 text-sm\">\n <span className=\"text-muted-foreground\">Every</span>\n <input\n type=\"number\"\n min={1}\n max={999}\n value={rule.interval}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(e) => update({ interval: Math.max(1, Number(e.target.value) || 1) })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'w-16')}\n />\n <select\n aria-label=\"Frequency\"\n value={rule.freq}\n disabled={disabled}\n onChange={(e) => update({ freq: e.target.value as RecurrenceFreq })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'w-32')}\n >\n <option value=\"DAILY\">{rule.interval > 1 ? 'days' : 'day'}</option>\n <option value=\"WEEKLY\">{rule.interval > 1 ? 'weeks' : 'week'}</option>\n <option value=\"MONTHLY\">{rule.interval > 1 ? 'months' : 'month'}</option>\n <option value=\"YEARLY\">{rule.interval > 1 ? 'years' : 'year'}</option>\n </select>\n </div>\n\n {rule.freq === 'WEEKLY' && (\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"text-muted-foreground\">On</span>\n <div role=\"group\" aria-label=\"Days of week\" className=\"flex flex-wrap gap-1\">\n {ALL_WEEKDAYS.map((wd) => {\n const checked = rule.byDay?.includes(wd) ?? false;\n return (\n <button\n key={wd}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={checked}\n disabled={disabled || readOnly}\n onClick={() => {\n const set = new Set(rule.byDay ?? []);\n if (set.has(wd)) set.delete(wd);\n else set.add(wd);\n update({ byDay: Array.from(set) as RecurrenceWeekday[] });\n }}\n className={cn(\n 'inline-flex h-7 w-9 items-center justify-center rounded-md border text-xs font-medium transition-colors',\n checked\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-input bg-background text-muted-foreground hover:bg-muted',\n )}\n >\n {WEEKDAY_LABEL[wd]}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {rule.freq === 'MONTHLY' && (\n <div className=\"flex items-center gap-2 text-sm\">\n <span className=\"text-muted-foreground\">On day</span>\n <input\n type=\"number\"\n min={1}\n max={31}\n value={rule.byMonthDay ?? from.getDate()}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(e) => update({ byMonthDay: Math.min(31, Math.max(1, Number(e.target.value) || 1)) })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'w-20')}\n />\n <span className=\"text-muted-foreground\">of the month</span>\n </div>\n )}\n\n <div role=\"radiogroup\" aria-label=\"End mode\" className=\"flex flex-col gap-2 text-sm\">\n <label className=\"flex items-center gap-2\">\n <input\n type=\"radio\"\n name={`${name ?? 'rule'}-end`}\n checked={endMode === 'never'}\n disabled={disabled || readOnly}\n onChange={() => update({ count: undefined, until: null })}\n />\n Never\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"radio\"\n name={`${name ?? 'rule'}-end`}\n checked={endMode === 'count'}\n disabled={disabled || readOnly}\n onChange={() => update({ count: rule.count ?? 10, until: null })}\n />\n After\n <input\n type=\"number\"\n min={1}\n value={rule.count ?? ''}\n disabled={disabled || readOnly || endMode !== 'count'}\n onChange={(e) => update({ count: Math.max(1, Number(e.target.value) || 1), until: null })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'w-20')}\n />\n occurrences\n </label>\n <label className=\"flex items-center gap-2\">\n <input\n type=\"radio\"\n name={`${name ?? 'rule'}-end`}\n checked={endMode === 'until'}\n disabled={disabled || readOnly}\n onChange={() => update({ until: addMonths(from, 6), count: undefined })}\n />\n On\n <input\n type=\"date\"\n value={formatISODate(rule.until ?? null)}\n disabled={disabled || readOnly || endMode !== 'until'}\n onChange={(e) => update({ until: parseISODate(e.target.value), count: undefined })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'w-44')}\n />\n </label>\n </div>\n\n <div className=\"rounded-md bg-muted/40 p-3 text-xs\">\n <div className=\"mb-1 font-medium text-muted-foreground\">Next occurrences</div>\n <ul aria-live=\"polite\" className=\"grid grid-cols-2 gap-x-4 gap-y-0.5 sm:grid-cols-3\">\n {preview.map((d, i) => (\n <li key={i} className=\"text-foreground tabular-nums\">\n {formatISODate(d)}\n </li>\n ))}\n </ul>\n </div>\n {name && <input type=\"hidden\" name={name} value={serializeRule(rule)} />}\n </div>\n );\n },\n);\n","import {\n forwardRef,\n useCallback,\n useRef,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\n\nexport type KnobTone = 'brand' | 'success' | 'warning' | 'danger' | 'muted';\n\nconst TONE_CLASS: Record<KnobTone, string> = {\n brand: 'text-primary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-destructive',\n muted: 'text-muted-foreground',\n};\n\nexport interface KnobProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n largeStep?: number;\n size?: number;\n arcDegrees?: number;\n tone?: KnobTone;\n format?: (value: number) => ReactNode;\n showValue?: boolean;\n disabled?: boolean;\n name?: string;\n 'aria-label'?: string;\n}\n\nfunction clamp(v: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, v));\n}\n\n/**\n * Rotational dial input. Pointer drag rotates over `arcDegrees` (default 270°\n * from -135° to +135°). Wheel + arrow keys step; Home/End → min/max.\n */\nexport const Knob = forwardRef<HTMLDivElement, KnobProps>(function Knob(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n min = 0,\n max = 1,\n step = 0.01,\n largeStep = 0.1,\n size = 64,\n arcDegrees = 270,\n tone = 'brand',\n format = (v) => v.toFixed(2),\n showValue = true,\n disabled,\n name,\n className,\n 'aria-label': ariaLabel = 'Knob',\n ...rest\n },\n ref,\n) {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? min,\n onChange: onValueChange,\n });\n const containerRef = useRef<HTMLDivElement | null>(null);\n const dragStateRef = useRef<{ startY: number; startValue: number } | null>(null);\n\n const fraction = (clamp(value, min, max) - min) / (max - min);\n const halfArc = arcDegrees / 2;\n const startAngle = -halfArc - 90; // -90 puts 0° at top\n const endAngle = halfArc - 90;\n const angle = startAngle + fraction * arcDegrees;\n\n const setClamped = useCallback(\n (v: number) => setValue(clamp(v, min, max)),\n [min, max, setValue],\n );\n\n const handlePointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || e.button !== 0) return;\n dragStateRef.current = { startY: e.clientY, startValue: value };\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n };\n\n const handlePointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled || !dragStateRef.current) return;\n const dy = dragStateRef.current.startY - e.clientY; // up = increase\n const range = max - min;\n const sensitivity = range / 200; // 200px drag = full range\n setClamped(dragStateRef.current.startValue + dy * sensitivity);\n };\n\n const handlePointerUp = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragStateRef.current) return;\n dragStateRef.current = null;\n (e.currentTarget as HTMLElement).releasePointerCapture?.(e.pointerId);\n };\n\n const handleWheel = (e: React.WheelEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.preventDefault();\n const delta = e.deltaY < 0 ? step : -step;\n setClamped(value + delta);\n };\n\n const handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n const s = e.shiftKey ? largeStep : step;\n switch (e.key) {\n case 'ArrowUp':\n case 'ArrowRight':\n e.preventDefault();\n setClamped(value + s);\n break;\n case 'ArrowDown':\n case 'ArrowLeft':\n e.preventDefault();\n setClamped(value - s);\n break;\n case 'Home':\n e.preventDefault();\n setClamped(min);\n break;\n case 'End':\n e.preventDefault();\n setClamped(max);\n break;\n }\n };\n\n // SVG arc path math.\n const radius = size / 2 - 4;\n const center = size / 2;\n const polar = (deg: number, r: number) => {\n const rad = (deg * Math.PI) / 180;\n return [center + r * Math.cos(rad), center + r * Math.sin(rad)] as const;\n };\n const [trackStartX, trackStartY] = polar(startAngle, radius);\n const [trackEndX, trackEndY] = polar(endAngle, radius);\n const largeArc = arcDegrees > 180 ? 1 : 0;\n const trackPath = `M ${trackStartX} ${trackStartY} A ${radius} ${radius} 0 ${largeArc} 1 ${trackEndX} ${trackEndY}`;\n\n const [valueEndX, valueEndY] = polar(angle, radius);\n const valueLargeArc = fraction * arcDegrees > 180 ? 1 : 0;\n const valuePath = `M ${trackStartX} ${trackStartY} A ${radius} ${radius} 0 ${valueLargeArc} 1 ${valueEndX} ${valueEndY}`;\n\n const [pointerInnerX, pointerInnerY] = polar(angle, radius * 0.45);\n const [pointerOuterX, pointerOuterY] = polar(angle, radius * 0.85);\n\n return (\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n role=\"slider\"\n aria-label={ariaLabel}\n aria-valuenow={value}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-orientation=\"vertical\"\n aria-disabled={disabled || undefined}\n tabIndex={disabled ? -1 : 0}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n onWheel={handleWheel}\n onKeyDown={handleKey}\n style={{ width: size, height: size, touchAction: 'none' }}\n className={cn(\n 'relative inline-flex select-none items-center justify-center rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n TONE_CLASS[tone],\n disabled ? 'cursor-not-allowed opacity-50' : 'cursor-grab active:cursor-grabbing',\n className,\n )}\n {...rest}\n >\n <svg width={size} height={size} className=\"overflow-visible\">\n <path\n d={trackPath}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={4}\n strokeLinecap=\"round\"\n className=\"opacity-20\"\n />\n <path\n d={valuePath}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={4}\n strokeLinecap=\"round\"\n />\n <line\n x1={pointerInnerX}\n y1={pointerInnerY}\n x2={pointerOuterX}\n y2={pointerOuterY}\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n />\n </svg>\n {showValue && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0 grid place-items-center text-[10px] font-medium tabular-nums text-foreground\"\n >\n {format(value)}\n </span>\n )}\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n});\n","import {\n forwardRef,\n Fragment,\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Kbd } from '../../display/kbd';\n\nexport interface KeyboardShortcutPickerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'value' | 'defaultValue' | 'onChange'> {\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (keys: string[]) => void;\n placeholder?: ReactNode;\n recordLabel?: ReactNode;\n /** Hidden input emits `+`-joined chord. */\n name?: string;\n}\n\nconst MODIFIER_NAMES: Record<string, string> = {\n Control: 'Ctrl',\n Meta: navigator?.platform?.toLowerCase?.().includes('mac') ? '⌘' : 'Meta',\n Alt: 'Alt',\n Shift: 'Shift',\n};\n\nfunction isModifier(key: string): boolean {\n return ['Control', 'Meta', 'Alt', 'Shift'].includes(key);\n}\n\nfunction normalizeKey(key: string): string {\n if (key === ' ') return 'Space';\n if (key.length === 1) return key.toUpperCase();\n return key;\n}\n\n/**\n * Capture a key chord. Click record → press keys → captured. Escape cancels;\n * Backspace during listening clears. Output is a normalized name array\n * (e.g. `['Meta', 'Shift', 'K']`).\n */\nexport const KeyboardShortcutPicker = forwardRef<HTMLButtonElement, KeyboardShortcutPickerProps>(\n function KeyboardShortcutPicker(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n placeholder = 'Click to record',\n recordLabel = 'Press keys…',\n disabled,\n name,\n className,\n type = 'button',\n ...rest\n },\n ref,\n ) {\n const [keys, setKeys] = useControlled<string[]>({\n controlled: valueProp,\n default: defaultValue ?? [],\n onChange: onValueChange,\n });\n const [recording, setRecording] = useState(false);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (!recording) return;\n const handleKey = (e: KeyboardEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.key === 'Escape') {\n setRecording(false);\n return;\n }\n if (e.key === 'Backspace') {\n setKeys([]);\n setRecording(false);\n return;\n }\n if (isModifier(e.key)) return;\n const captured: string[] = [];\n if (e.metaKey) captured.push('Meta');\n if (e.ctrlKey) captured.push('Control');\n if (e.altKey) captured.push('Alt');\n if (e.shiftKey) captured.push('Shift');\n captured.push(normalizeKey(e.key));\n setKeys(captured);\n setRecording(false);\n };\n const handleClickOutside = (e: MouseEvent) => {\n if (buttonRef.current && !buttonRef.current.contains(e.target as Node)) {\n setRecording(false);\n }\n };\n document.addEventListener('keydown', handleKey, true);\n document.addEventListener('pointerdown', handleClickOutside);\n return () => {\n document.removeEventListener('keydown', handleKey, true);\n document.removeEventListener('pointerdown', handleClickOutside);\n };\n }, [recording, setKeys]);\n\n const startRecord = () => {\n if (disabled) return;\n setRecording(true);\n };\n\n const handleButtonKey = (e: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (recording) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n startRecord();\n }\n };\n\n return (\n <>\n <button\n {...rest}\n ref={(el) => {\n buttonRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n }}\n type={type}\n aria-pressed={recording}\n disabled={disabled}\n onClick={startRecord}\n onKeyDown={handleButtonKey}\n className={cn(\n 'inline-flex h-9 items-center gap-2 rounded-md border border-input bg-background px-3 text-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60',\n recording && 'border-primary bg-primary-soft text-primary-soft-foreground',\n className,\n )}\n >\n {recording ? (\n <span className=\"text-xs text-muted-foreground\">{recordLabel}</span>\n ) : keys.length === 0 ? (\n <span className=\"text-xs text-muted-foreground\">{placeholder}</span>\n ) : (\n <span className=\"inline-flex items-center gap-1 text-muted-foreground\">\n {keys.map((k, i) => (\n <Fragment key={i}>\n {i > 0 && <span aria-hidden=\"true\">+</span>}\n <Kbd>{MODIFIER_NAMES[k] ?? k}</Kbd>\n </Fragment>\n ))}\n </span>\n )}\n </button>\n {name && <input type=\"hidden\" name={name} value={keys.join('+')} />}\n </>\n );\n },\n);\n","import {\n forwardRef,\n useMemo,\n useState,\n type ComponentType,\n type HTMLAttributes,\n type SVGAttributes,\n} from 'react';\nimport {\n Bell,\n Bookmark,\n Calendar,\n Camera,\n Check,\n ChevronDown,\n Clock,\n Cloud,\n Code,\n Coffee,\n Compass,\n Download,\n Edit,\n ExternalLink,\n Eye,\n File,\n Folder,\n Globe,\n Heart,\n Home,\n Image,\n Inbox,\n Info,\n Layers,\n Lightbulb,\n Link2,\n Lock,\n Mail,\n Map,\n MessageCircle,\n Mic,\n Moon,\n Music,\n Paperclip,\n Pencil,\n Phone,\n Pin,\n Play,\n Plus,\n Search,\n Send,\n Settings,\n Share2,\n ShoppingCart,\n Star,\n Sun,\n Tag,\n Trash,\n Upload,\n User,\n Video,\n Wallet,\n Zap,\n} from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { inputBaseVariants } from '../InputStyles';\n\ntype IconComponent = ComponentType<SVGAttributes<SVGSVGElement>>;\n\nconst BUILT_IN_ICONS: Record<string, IconComponent> = {\n bell: Bell,\n bookmark: Bookmark,\n calendar: Calendar,\n camera: Camera,\n check: Check,\n 'chevron-down': ChevronDown,\n clock: Clock,\n cloud: Cloud,\n code: Code,\n coffee: Coffee,\n compass: Compass,\n download: Download,\n edit: Edit,\n 'external-link': ExternalLink,\n eye: Eye,\n file: File,\n folder: Folder,\n globe: Globe,\n heart: Heart,\n home: Home,\n image: Image,\n inbox: Inbox,\n info: Info,\n layers: Layers,\n lightbulb: Lightbulb,\n link: Link2,\n lock: Lock,\n mail: Mail,\n map: Map,\n message: MessageCircle,\n mic: Mic,\n moon: Moon,\n music: Music,\n paperclip: Paperclip,\n pencil: Pencil,\n phone: Phone,\n pin: Pin,\n play: Play,\n plus: Plus,\n search: Search,\n send: Send,\n settings: Settings,\n share: Share2,\n cart: ShoppingCart,\n star: Star,\n sun: Sun,\n tag: Tag,\n trash: Trash,\n upload: Upload,\n user: User,\n video: Video,\n wallet: Wallet,\n zap: Zap,\n};\n\nexport interface IconPickerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (name: string) => void;\n icons?: Record<string, IconComponent>;\n columns?: number;\n size?: number;\n iconButtonSize?: number;\n placeholder?: string;\n disabled?: boolean;\n name?: string;\n}\n\n/**\n * Searchable icon-picker grid. Built-in 50+ icon subset from `lucide-react`;\n * pass your own `icons` map to override.\n */\nexport const IconPicker = forwardRef<HTMLDivElement, IconPickerProps>(\n function IconPicker(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n icons = BUILT_IN_ICONS,\n columns = 8,\n size = 20,\n iconButtonSize = 36,\n placeholder = 'Search icons…',\n disabled,\n name,\n className,\n ...rest\n },\n ref,\n ) {\n const [value, setValue] = useControlled<string>({\n controlled: valueProp,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const [query, setQuery] = useState('');\n\n const filtered = useMemo(() => {\n const entries = Object.entries(icons);\n if (!query) return entries;\n const q = query.toLowerCase();\n return entries.filter(([key]) => key.toLowerCase().includes(q));\n }, [icons, query]);\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col gap-2 rounded-md border border-border bg-card p-3 text-card-foreground shadow-sm',\n className,\n )}\n {...rest}\n >\n <input\n type=\"search\"\n value={query}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(e) => setQuery(e.target.value)}\n className={cn(inputBaseVariants({ size: 'sm' }))}\n />\n <div\n role=\"grid\"\n aria-label=\"Icons\"\n className=\"grid gap-1 overflow-y-auto\"\n style={{ gridTemplateColumns: `repeat(${columns}, ${iconButtonSize}px)`, maxHeight: 240 }}\n >\n {filtered.map(([key, IconComp]) => {\n const selected = value === key;\n return (\n <div role=\"gridcell\" key={key}>\n <button\n type=\"button\"\n aria-pressed={selected}\n aria-label={key}\n disabled={disabled}\n onClick={() => setValue(key)}\n style={{ width: iconButtonSize, height: iconButtonSize }}\n className={cn(\n 'inline-flex items-center justify-center rounded-md border text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'border-primary bg-primary text-primary-foreground hover:bg-primary'\n : 'border-transparent',\n )}\n >\n <Icon icon={IconComp} size={size} />\n </button>\n </div>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"col-span-full px-2 py-6 text-center text-xs text-muted-foreground\">\n No icons match.\n </div>\n )}\n </div>\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n },\n);\n","import { forwardRef, useMemo, useState, type HTMLAttributes } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../overlays/popover';\n\nexport interface FontOption {\n name: string;\n family: string;\n sample?: string;\n}\n\nexport const BUILT_IN_FONTS: FontOption[] = [\n { name: 'System Sans', family: 'system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif' },\n { name: 'System Serif', family: 'ui-serif, Cambria, Georgia, \"Times New Roman\", serif' },\n { name: 'System Mono', family: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace' },\n { name: 'Helvetica', family: 'Helvetica, Arial, sans-serif' },\n { name: 'Times', family: '\"Times New Roman\", Times, serif' },\n { name: 'Courier', family: '\"Courier New\", Courier, monospace' },\n { name: 'Georgia', family: 'Georgia, \"Times New Roman\", serif' },\n { name: 'Verdana', family: 'Verdana, Geneva, Tahoma, sans-serif' },\n { name: 'Tahoma', family: 'Tahoma, Geneva, Verdana, sans-serif' },\n { name: 'Trebuchet', family: '\"Trebuchet MS\", Helvetica, sans-serif' },\n { name: 'Garamond', family: 'Garamond, \"Times New Roman\", serif' },\n { name: 'Comic Sans', family: '\"Comic Sans MS\", \"Comic Sans\", cursive' },\n { name: 'Impact', family: 'Impact, \"Arial Narrow\", sans-serif' },\n];\n\nexport interface FontPickerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (family: string) => void;\n fonts?: FontOption[];\n placeholder?: string;\n previewText?: string;\n disabled?: boolean;\n name?: string;\n}\n\n/**\n * Font-family picker with live preview. Each option row renders in its own\n * font face. Wraps `overlays/Popover` for the dropdown.\n */\nexport const FontPicker = forwardRef<HTMLDivElement, FontPickerProps>(\n function FontPicker(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n fonts = BUILT_IN_FONTS,\n placeholder = 'Select font…',\n previewText = 'The quick brown fox',\n disabled,\n name,\n className,\n ...rest\n },\n ref,\n ) {\n const [value, setValue] = useControlled<string>({\n controlled: valueProp,\n default: defaultValue ?? fonts[0]?.family ?? '',\n onChange: onValueChange,\n });\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n\n const filtered = useMemo(() => {\n if (!query) return fonts;\n const q = query.toLowerCase();\n return fonts.filter((f) => f.name.toLowerCase().includes(q));\n }, [fonts, query]);\n\n const current = fonts.find((f) => f.family === value);\n\n return (\n <div ref={ref} className={cn('inline-block', className)} {...rest}>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n className={cn(\n 'inline-flex h-10 min-w-[14rem] items-center justify-between gap-2 rounded-md border border-input bg-background px-3 text-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-60',\n )}\n >\n <span style={{ fontFamily: value }} className=\"truncate text-foreground\">\n {current?.name ?? placeholder}\n </span>\n <Icon icon={ChevronDown} size={14} className=\"text-muted-foreground\" />\n </button>\n </PopoverTrigger>\n <PopoverContent bare className=\"w-[20rem] p-2\">\n <input\n type=\"search\"\n autoFocus\n value={query}\n placeholder=\"Search fonts…\"\n onChange={(e) => setQuery(e.target.value)}\n className=\"mb-2 h-8 w-full rounded-md border border-input bg-background px-2 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n />\n <div role=\"listbox\" aria-label=\"Fonts\" className=\"max-h-72 overflow-y-auto\">\n {filtered.map((f) => {\n const selected = f.family === value;\n return (\n <button\n key={f.name}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n onClick={() => {\n setValue(f.family);\n setOpen(false);\n }}\n className={cn(\n 'flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-left text-sm transition-colors hover:bg-muted',\n selected && 'bg-primary-soft text-primary-soft-foreground',\n )}\n >\n <span className=\"font-medium\">{f.name}</span>\n <span style={{ fontFamily: f.family }} className=\"ml-3 truncate text-xs text-muted-foreground\">\n {f.sample ?? previewText}\n </span>\n </button>\n );\n })}\n {filtered.length === 0 && (\n <div className=\"px-2 py-6 text-center text-xs text-muted-foreground\">No fonts match.</div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n },\n);\n","import { forwardRef, useMemo, type InputHTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { inputBaseVariants, type InputBaseVariants } from '../InputStyles';\n\nexport interface CronInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'value' | 'defaultValue' | 'onChange' | 'size'>,\n InputBaseVariants {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n invalid?: boolean;\n showPreview?: boolean;\n}\n\nconst WEEKDAY_NAMES = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst MONTH_NAMES = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\ninterface CronField {\n raw: string;\n kind: 'every' | 'specific' | 'range' | 'list' | 'step' | 'invalid';\n value?: number | number[];\n step?: number;\n range?: [number, number];\n}\n\nfunction parseField(raw: string, min: number, max: number): CronField {\n if (raw === '*') return { raw, kind: 'every' };\n // Step: \"*/N\" or \"from-to/N\" — only support \"*/N\" first-gen.\n if (/^\\*\\/(\\d+)$/.test(raw)) {\n const step = Number(raw.slice(2));\n if (step < 1 || step > max) return { raw, kind: 'invalid' };\n return { raw, kind: 'step', step };\n }\n // Range: \"N-M\".\n if (/^(\\d+)-(\\d+)$/.test(raw)) {\n const [a, b] = raw.split('-').map(Number);\n if (a == null || b == null || a < min || b > max || a > b) return { raw, kind: 'invalid' };\n return { raw, kind: 'range', range: [a, b] };\n }\n // List: \"N,M,O\".\n if (/^\\d+(,\\d+)+$/.test(raw)) {\n const parts = raw.split(',').map(Number);\n if (parts.some((p) => p < min || p > max)) return { raw, kind: 'invalid' };\n return { raw, kind: 'list', value: parts };\n }\n // Specific number.\n if (/^\\d+$/.test(raw)) {\n const n = Number(raw);\n if (n < min || n > max) return { raw, kind: 'invalid' };\n return { raw, kind: 'specific', value: n };\n }\n return { raw, kind: 'invalid' };\n}\n\nfunction describeField(field: CronField, names?: string[], unit = '', plural = ''): string {\n if (field.kind === 'every') return '*';\n if (field.kind === 'invalid') return '?';\n if (field.kind === 'step' && field.step != null) return `every ${field.step} ${plural || unit + 's'}`;\n if (field.kind === 'range' && field.range) {\n const [a, b] = field.range;\n const aLabel = names?.[a] ?? a;\n const bLabel = names?.[b] ?? b;\n return `${aLabel} through ${bLabel}`;\n }\n if (field.kind === 'list' && Array.isArray(field.value)) {\n return field.value.map((v) => names?.[v] ?? v).join(', ');\n }\n if (field.kind === 'specific' && typeof field.value === 'number') {\n return String(names?.[field.value] ?? field.value);\n }\n return field.raw;\n}\n\nfunction parseCron(value: string): string {\n const parts = value.trim().split(/\\s+/);\n if (parts.length !== 5) return 'Cron expressions must have 5 fields (min hour dom month dow).';\n const [minRaw, hourRaw, domRaw, monRaw, dowRaw] = parts as [string, string, string, string, string];\n const minute = parseField(minRaw, 0, 59);\n const hour = parseField(hourRaw, 0, 23);\n const dom = parseField(domRaw, 1, 31);\n const month = parseField(monRaw, 1, 12);\n const dow = parseField(dowRaw, 0, 6);\n\n if ([minute, hour, dom, month, dow].some((f) => f.kind === 'invalid')) {\n return 'Invalid cron expression.';\n }\n\n // Common-case readouts.\n if (minute.kind === 'step' && hour.kind === 'every' && dom.kind === 'every' && month.kind === 'every' && dow.kind === 'every') {\n return `Every ${minute.step} minutes`;\n }\n if (minute.kind === 'every' && hour.kind === 'step' && dom.kind === 'every' && month.kind === 'every' && dow.kind === 'every') {\n return `Every ${hour.step} hours`;\n }\n if (\n minute.kind === 'specific' &&\n hour.kind === 'specific' &&\n dom.kind === 'every' &&\n month.kind === 'every' &&\n dow.kind === 'every'\n ) {\n return `Every day at ${String(hour.value).padStart(2, '0')}:${String(minute.value).padStart(2, '0')}`;\n }\n if (\n minute.kind === 'specific' &&\n hour.kind === 'specific' &&\n dom.kind === 'every' &&\n month.kind === 'every' &&\n (dow.kind === 'list' || dow.kind === 'specific')\n ) {\n return `At ${String(hour.value).padStart(2, '0')}:${String(minute.value).padStart(2, '0')} on ${describeField(dow, WEEKDAY_NAMES)}`;\n }\n if (minute.kind === 'every' && hour.kind === 'every' && dom.kind === 'every' && month.kind === 'every' && dow.kind === 'every') {\n return 'Every minute';\n }\n // Fallback — describe each field.\n const parts2 = [];\n if (minute.kind !== 'every') parts2.push(`minute: ${describeField(minute, undefined, 'minute')}`);\n if (hour.kind !== 'every') parts2.push(`hour: ${describeField(hour, undefined, 'hour')}`);\n if (dom.kind !== 'every') parts2.push(`day: ${describeField(dom)}`);\n if (month.kind !== 'every') parts2.push(`month: ${describeField(month, ['', ...MONTH_NAMES])}`);\n if (dow.kind !== 'every') parts2.push(`weekday: ${describeField(dow, WEEKDAY_NAMES)}`);\n return parts2.length === 0 ? 'Every minute' : parts2.join(' · ');\n}\n\n/**\n * Cron-string input with human-readable preview. Supports asterisk, N,\n * step (asterisk-slash-N), N-M, N,M,O per field. Quartz extensions\n * (?, L, W, #) deferred.\n */\nexport const CronInput = forwardRef<HTMLInputElement, CronInputProps>(\n function CronInput(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n placeholder = '* * * * *',\n invalid,\n size,\n state,\n showPreview = true,\n disabled,\n readOnly,\n name,\n className,\n ...rest\n },\n ref,\n ) {\n const [value, setValue] = useControlled<string>({\n controlled: valueProp,\n default: defaultValue ?? '*/5 * * * *',\n onChange: onValueChange,\n });\n const preview = useMemo(() => parseCron(value), [value]);\n const isError = invalid || preview.startsWith('Invalid') || preview.startsWith('Cron');\n const inputState = isError ? 'invalid' : (state ?? 'default');\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <input\n {...rest}\n ref={ref}\n type=\"text\"\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={isError || undefined}\n spellCheck={false}\n onChange={(e) => setValue(e.target.value)}\n className={cn(inputBaseVariants({ size, state: inputState }), 'font-mono')}\n />\n {showPreview && (\n <div\n aria-live=\"polite\"\n className={cn(\n 'px-1 text-xs',\n isError ? 'text-destructive' : 'text-muted-foreground',\n )}\n >\n {preview}\n </div>\n )}\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n },\n);\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { Plus, Trash } from 'lucide-react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { Icon } from '../../icons';\nimport { inputBaseVariants } from '../InputStyles';\n\nexport type GradientKind = 'linear' | 'radial' | 'conic';\n\nexport interface GradientStop {\n color: string;\n position: number;\n}\n\nexport interface Gradient {\n kind: GradientKind;\n angle: number;\n stops: GradientStop[];\n}\n\nexport interface GradientPickerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: Gradient;\n defaultValue?: Gradient;\n onValueChange?: (value: Gradient) => void;\n disabled?: boolean;\n name?: string;\n}\n\nconst DEFAULT_GRADIENT: Gradient = {\n kind: 'linear',\n angle: 90,\n stops: [\n { color: '#3b82f6', position: 0 },\n { color: '#a855f7', position: 100 },\n ],\n};\n\nexport function gradientToCss(g: Gradient): string {\n const stops = [...g.stops].sort((a, b) => a.position - b.position);\n const stopsStr = stops.map((s) => `${s.color} ${s.position}%`).join(', ');\n if (g.kind === 'linear') return `linear-gradient(${g.angle}deg, ${stopsStr})`;\n if (g.kind === 'radial') return `radial-gradient(circle, ${stopsStr})`;\n return `conic-gradient(from ${g.angle}deg, ${stopsStr})`;\n}\n\n/**\n * Visual gradient editor — kind / angle / stops. Output `Gradient` object via\n * `onValueChange`; `name` emits the CSS string for forms.\n */\nexport const GradientPicker = forwardRef<HTMLDivElement, GradientPickerProps>(\n function GradientPicker(\n { value: valueProp, defaultValue, onValueChange, disabled, name, className, ...rest },\n ref,\n ) {\n const [gradient, setGradient] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? DEFAULT_GRADIENT,\n onChange: onValueChange,\n });\n\n const css = useMemo(() => gradientToCss(gradient), [gradient]);\n\n const update = (patch: Partial<Gradient>) => setGradient({ ...gradient, ...patch });\n const updateStop = (i: number, patch: Partial<GradientStop>) =>\n setGradient({\n ...gradient,\n stops: gradient.stops.map((s, idx) => (idx === i ? { ...s, ...patch } : s)),\n });\n const addStop = () => {\n const last = gradient.stops[gradient.stops.length - 1];\n const newPos = last ? Math.min(100, last.position + 25) : 50;\n setGradient({\n ...gradient,\n stops: [...gradient.stops, { color: '#ffffff', position: newPos }],\n });\n };\n const removeStop = (i: number) => {\n if (gradient.stops.length <= 2) return;\n setGradient({ ...gradient, stops: gradient.stops.filter((_, idx) => idx !== i) });\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex flex-col gap-3 rounded-md border border-border bg-card p-3 text-card-foreground shadow-sm',\n disabled && 'opacity-60',\n className,\n )}\n {...rest}\n >\n {/* Kind + angle */}\n <div className=\"flex items-center gap-2 text-sm\">\n <div role=\"radiogroup\" aria-label=\"Gradient kind\" className=\"flex items-center gap-0.5 rounded-md bg-muted/40 p-0.5 ring-1 ring-border\">\n {(['linear', 'radial', 'conic'] as GradientKind[]).map((k) => (\n <button\n key={k}\n type=\"button\"\n role=\"radio\"\n aria-checked={gradient.kind === k}\n disabled={disabled}\n onClick={() => update({ kind: k })}\n className={cn(\n 'inline-flex h-6 items-center rounded px-2 text-xs font-medium transition-colors',\n gradient.kind === k\n ? 'bg-primary text-primary-foreground'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n {k}\n </button>\n ))}\n </div>\n {gradient.kind !== 'radial' && (\n <label className=\"ml-auto flex items-center gap-2 text-xs text-muted-foreground\">\n Angle\n <input\n type=\"number\"\n min={0}\n max={360}\n value={gradient.angle}\n disabled={disabled}\n onChange={(e) => update({ angle: Math.max(0, Math.min(360, Number(e.target.value) || 0)) })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'w-20')}\n />\n °\n </label>\n )}\n </div>\n\n {/* Preview bar */}\n <div\n aria-hidden=\"true\"\n className=\"h-12 rounded-md border border-border\"\n style={{ background: css }}\n />\n\n {/* Stops */}\n <ul className=\"flex flex-col gap-2\">\n {gradient.stops.map((stop, i) => (\n <li key={i} className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={stop.color}\n disabled={disabled}\n onChange={(e) => updateStop(i, { color: e.target.value })}\n className=\"h-7 w-10 cursor-pointer rounded-sm border border-input bg-background\"\n />\n <input\n type=\"text\"\n value={stop.color}\n disabled={disabled}\n onChange={(e) => updateStop(i, { color: e.target.value })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'flex-1 font-mono')}\n />\n <input\n type=\"number\"\n min={0}\n max={100}\n value={stop.position}\n disabled={disabled}\n onChange={(e) => updateStop(i, { position: Math.max(0, Math.min(100, Number(e.target.value) || 0)) })}\n className={cn(inputBaseVariants({ size: 'sm' }), 'w-16')}\n />\n <span className=\"text-xs text-muted-foreground\">%</span>\n <button\n type=\"button\"\n aria-label=\"Remove stop\"\n disabled={disabled || gradient.stops.length <= 2}\n onClick={() => removeStop(i)}\n className=\"inline-flex h-7 w-7 items-center justify-center rounded text-destructive hover:bg-destructive-soft disabled:pointer-events-none disabled:opacity-40\"\n >\n <Icon icon={Trash} size={12} />\n </button>\n </li>\n ))}\n </ul>\n\n <button\n type=\"button\"\n disabled={disabled}\n onClick={addStop}\n className=\"inline-flex h-8 w-full items-center justify-center gap-1 rounded-md border border-dashed border-border text-xs text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <Icon icon={Plus} size={12} /> Add stop\n </button>\n\n {/* CSS output */}\n <code className=\"block break-all rounded-md bg-muted/40 px-2 py-1.5 text-[10px] text-muted-foreground\">\n {css}\n </code>\n {name && <input type=\"hidden\" name={name} value={css} />}\n </div>\n );\n },\n);\n","import { forwardRef, useId, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { inputBaseVariants } from '../InputStyles';\n\nexport interface Address {\n country: string;\n line1: string;\n line2?: string;\n city: string;\n region: string;\n postalCode: string;\n}\n\ninterface CountryConfig {\n iso: string;\n name: string;\n regionLabel: string;\n postalLabel: string;\n regionOptions?: Array<{ value: string; label: string }>;\n}\n\nconst COUNTRIES: CountryConfig[] = [\n {\n iso: 'US',\n name: 'United States',\n regionLabel: 'State',\n postalLabel: 'ZIP code',\n regionOptions: [\n 'AL', 'AK', 'AZ', 'AR', 'CA', 'CO', 'CT', 'DE', 'FL', 'GA', 'HI', 'ID', 'IL', 'IN', 'IA',\n 'KS', 'KY', 'LA', 'ME', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO', 'MT', 'NE', 'NV', 'NH', 'NJ',\n 'NM', 'NY', 'NC', 'ND', 'OH', 'OK', 'OR', 'PA', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VT',\n 'VA', 'WA', 'WV', 'WI', 'WY',\n ].map((s) => ({ value: s, label: s })),\n },\n {\n iso: 'CA',\n name: 'Canada',\n regionLabel: 'Province',\n postalLabel: 'Postal code',\n regionOptions: ['AB', 'BC', 'MB', 'NB', 'NL', 'NS', 'NT', 'NU', 'ON', 'PE', 'QC', 'SK', 'YT'].map(\n (s) => ({ value: s, label: s }),\n ),\n },\n { iso: 'GB', name: 'United Kingdom', regionLabel: 'County', postalLabel: 'Postcode' },\n { iso: 'DE', name: 'Germany', regionLabel: 'Bundesland', postalLabel: 'PLZ' },\n { iso: 'FR', name: 'France', regionLabel: 'Région', postalLabel: 'Code postal' },\n { iso: 'AU', name: 'Australia', regionLabel: 'State', postalLabel: 'Postcode' },\n { iso: 'JP', name: 'Japan', regionLabel: 'Prefecture', postalLabel: '〒' },\n];\n\nconst FALLBACK: CountryConfig = {\n iso: 'XX',\n name: 'Other',\n regionLabel: 'Region',\n postalLabel: 'Postal code',\n};\n\nfunction configFor(iso: string): CountryConfig {\n return COUNTRIES.find((c) => c.iso === iso) ?? FALLBACK;\n}\n\nexport interface AddressFormProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: Address;\n defaultValue?: Address;\n onValueChange?: (address: Address) => void;\n disabled?: boolean;\n readOnly?: boolean;\n compact?: boolean;\n /** Prefix for hidden inputs (`{name}.line1`, etc.). */\n name?: string;\n}\n\nconst EMPTY: Address = { country: 'US', line1: '', city: '', region: '', postalCode: '' };\n\n/**\n * Country-aware address form. Country select drives the region label/options\n * and postal-code label. Built-in config for US/CA/GB/DE/FR/AU/JP; generic\n * fallback for the rest.\n */\nexport const AddressForm = forwardRef<HTMLDivElement, AddressFormProps>(\n function AddressForm(\n { value: valueProp, defaultValue, onValueChange, disabled, readOnly, compact, name, className, ...rest },\n ref,\n ) {\n const [address, setAddress] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? EMPTY,\n onChange: onValueChange,\n });\n\n const config = configFor(address.country);\n const ids = {\n country: useId(),\n line1: useId(),\n line2: useId(),\n city: useId(),\n region: useId(),\n postal: useId(),\n };\n\n const update = (patch: Partial<Address>) => setAddress({ ...address, ...patch });\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-3', className)} {...rest}>\n {/* Country */}\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={ids.country} className=\"text-xs font-medium text-foreground\">\n Country\n </label>\n <select\n id={ids.country}\n value={address.country}\n disabled={disabled || readOnly}\n onChange={(e) => update({ country: e.target.value, region: '' })}\n className={cn(inputBaseVariants({ size: 'md' }))}\n >\n {COUNTRIES.map((c) => (\n <option key={c.iso} value={c.iso}>\n {c.name}\n </option>\n ))}\n <option value=\"XX\">Other</option>\n </select>\n </div>\n {/* Line 1 */}\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={ids.line1} className=\"text-xs font-medium text-foreground\">\n Address line 1\n </label>\n <input\n id={ids.line1}\n type=\"text\"\n autoComplete=\"address-line1\"\n value={address.line1}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(e) => update({ line1: e.target.value })}\n className={cn(inputBaseVariants({ size: 'md' }))}\n />\n </div>\n {/* Line 2 */}\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={ids.line2} className=\"text-xs font-medium text-muted-foreground\">\n Address line 2 <span className=\"text-[10px]\">(optional)</span>\n </label>\n <input\n id={ids.line2}\n type=\"text\"\n autoComplete=\"address-line2\"\n value={address.line2 ?? ''}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(e) => update({ line2: e.target.value })}\n className={cn(inputBaseVariants({ size: 'md' }))}\n />\n </div>\n {/* City + Region + Postal */}\n <div className={cn('grid gap-3', compact ? 'grid-cols-1' : 'grid-cols-3')}>\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={ids.city} className=\"text-xs font-medium text-foreground\">\n City\n </label>\n <input\n id={ids.city}\n type=\"text\"\n autoComplete=\"address-level2\"\n value={address.city}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(e) => update({ city: e.target.value })}\n className={cn(inputBaseVariants({ size: 'md' }))}\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={ids.region} className=\"text-xs font-medium text-foreground\">\n {config.regionLabel}\n </label>\n {config.regionOptions ? (\n <select\n id={ids.region}\n value={address.region}\n disabled={disabled || readOnly}\n onChange={(e) => update({ region: e.target.value })}\n className={cn(inputBaseVariants({ size: 'md' }))}\n >\n <option value=\"\">—</option>\n {config.regionOptions.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n id={ids.region}\n type=\"text\"\n autoComplete=\"address-level1\"\n value={address.region}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(e) => update({ region: e.target.value })}\n className={cn(inputBaseVariants({ size: 'md' }))}\n />\n )}\n </div>\n <div className=\"flex flex-col gap-1\">\n <label htmlFor={ids.postal} className=\"text-xs font-medium text-foreground\">\n {config.postalLabel}\n </label>\n <input\n id={ids.postal}\n type=\"text\"\n autoComplete=\"postal-code\"\n value={address.postalCode}\n disabled={disabled}\n readOnly={readOnly}\n onChange={(e) => update({ postalCode: e.target.value })}\n className={cn(inputBaseVariants({ size: 'md' }))}\n />\n </div>\n </div>\n {name && (\n <>\n <input type=\"hidden\" name={`${name}.country`} value={address.country} />\n <input type=\"hidden\" name={`${name}.line1`} value={address.line1} />\n <input type=\"hidden\" name={`${name}.line2`} value={address.line2 ?? ''} />\n <input type=\"hidden\" name={`${name}.city`} value={address.city} />\n <input type=\"hidden\" name={`${name}.region`} value={address.region} />\n <input type=\"hidden\" name={`${name}.postalCode`} value={address.postalCode} />\n </>\n )}\n </div>\n );\n },\n);\n\nexport const ADDRESS_COUNTRIES = COUNTRIES;\n","import { forwardRef, useMemo, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { useControlled } from '../../hooks';\nimport { inputBaseVariants } from '../InputStyles';\n\nexport interface PhoneCountry {\n iso: string;\n name: string;\n dial: string; // includes leading +\n flag: string; // emoji\n}\n\nexport const PHONE_COUNTRIES: PhoneCountry[] = [\n { iso: 'US', name: 'United States', dial: '+1', flag: '🇺🇸' },\n { iso: 'CA', name: 'Canada', dial: '+1', flag: '🇨🇦' },\n { iso: 'GB', name: 'United Kingdom', dial: '+44', flag: '🇬🇧' },\n { iso: 'AU', name: 'Australia', dial: '+61', flag: '🇦🇺' },\n { iso: 'DE', name: 'Germany', dial: '+49', flag: '🇩🇪' },\n { iso: 'FR', name: 'France', dial: '+33', flag: '🇫🇷' },\n { iso: 'ES', name: 'Spain', dial: '+34', flag: '🇪🇸' },\n { iso: 'IT', name: 'Italy', dial: '+39', flag: '🇮🇹' },\n { iso: 'NL', name: 'Netherlands', dial: '+31', flag: '🇳🇱' },\n { iso: 'BE', name: 'Belgium', dial: '+32', flag: '🇧🇪' },\n { iso: 'CH', name: 'Switzerland', dial: '+41', flag: '🇨🇭' },\n { iso: 'AT', name: 'Austria', dial: '+43', flag: '🇦🇹' },\n { iso: 'SE', name: 'Sweden', dial: '+46', flag: '🇸🇪' },\n { iso: 'NO', name: 'Norway', dial: '+47', flag: '🇳🇴' },\n { iso: 'DK', name: 'Denmark', dial: '+45', flag: '🇩🇰' },\n { iso: 'FI', name: 'Finland', dial: '+358', flag: '🇫🇮' },\n { iso: 'IE', name: 'Ireland', dial: '+353', flag: '🇮🇪' },\n { iso: 'PT', name: 'Portugal', dial: '+351', flag: '🇵🇹' },\n { iso: 'PL', name: 'Poland', dial: '+48', flag: '🇵🇱' },\n { iso: 'CZ', name: 'Czechia', dial: '+420', flag: '🇨🇿' },\n { iso: 'GR', name: 'Greece', dial: '+30', flag: '🇬🇷' },\n { iso: 'TR', name: 'Türkiye', dial: '+90', flag: '🇹🇷' },\n { iso: 'RU', name: 'Russia', dial: '+7', flag: '🇷🇺' },\n { iso: 'UA', name: 'Ukraine', dial: '+380', flag: '🇺🇦' },\n { iso: 'IL', name: 'Israel', dial: '+972', flag: '🇮🇱' },\n { iso: 'AE', name: 'UAE', dial: '+971', flag: '🇦🇪' },\n { iso: 'SA', name: 'Saudi Arabia', dial: '+966', flag: '🇸🇦' },\n { iso: 'EG', name: 'Egypt', dial: '+20', flag: '🇪🇬' },\n { iso: 'ZA', name: 'South Africa', dial: '+27', flag: '🇿🇦' },\n { iso: 'NG', name: 'Nigeria', dial: '+234', flag: '🇳🇬' },\n { iso: 'KE', name: 'Kenya', dial: '+254', flag: '🇰🇪' },\n { iso: 'IN', name: 'India', dial: '+91', flag: '🇮🇳' },\n { iso: 'PK', name: 'Pakistan', dial: '+92', flag: '🇵🇰' },\n { iso: 'BD', name: 'Bangladesh', dial: '+880', flag: '🇧🇩' },\n { iso: 'SG', name: 'Singapore', dial: '+65', flag: '🇸🇬' },\n { iso: 'MY', name: 'Malaysia', dial: '+60', flag: '🇲🇾' },\n { iso: 'TH', name: 'Thailand', dial: '+66', flag: '🇹🇭' },\n { iso: 'VN', name: 'Vietnam', dial: '+84', flag: '🇻🇳' },\n { iso: 'PH', name: 'Philippines', dial: '+63', flag: '🇵🇭' },\n { iso: 'ID', name: 'Indonesia', dial: '+62', flag: '🇮🇩' },\n { iso: 'JP', name: 'Japan', dial: '+81', flag: '🇯🇵' },\n { iso: 'KR', name: 'South Korea', dial: '+82', flag: '🇰🇷' },\n { iso: 'CN', name: 'China', dial: '+86', flag: '🇨🇳' },\n { iso: 'HK', name: 'Hong Kong', dial: '+852', flag: '🇭🇰' },\n { iso: 'TW', name: 'Taiwan', dial: '+886', flag: '🇹🇼' },\n { iso: 'NZ', name: 'New Zealand', dial: '+64', flag: '🇳🇿' },\n { iso: 'BR', name: 'Brazil', dial: '+55', flag: '🇧🇷' },\n { iso: 'AR', name: 'Argentina', dial: '+54', flag: '🇦🇷' },\n { iso: 'CL', name: 'Chile', dial: '+56', flag: '🇨🇱' },\n { iso: 'CO', name: 'Colombia', dial: '+57', flag: '🇨🇴' },\n { iso: 'MX', name: 'Mexico', dial: '+52', flag: '🇲🇽' },\n];\n\nexport interface PhoneInputProps extends Omit<HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (e164: string) => void;\n defaultCountry?: string;\n disabled?: boolean;\n readOnly?: boolean;\n invalid?: boolean;\n placeholder?: string;\n name?: string;\n}\n\nfunction splitE164(value: string, defaultIso: string): { iso: string; national: string } {\n if (!value) return { iso: defaultIso, national: '' };\n // Match the longest dial code prefix.\n const sorted = [...PHONE_COUNTRIES].sort((a, b) => b.dial.length - a.dial.length);\n for (const c of sorted) {\n if (value.startsWith(c.dial)) {\n return { iso: c.iso, national: value.slice(c.dial.length).replace(/\\D/g, '') };\n }\n }\n return { iso: defaultIso, national: value.replace(/\\D/g, '') };\n}\n\n/**\n * International phone input — country dial-code select + national-number\n * input. Output is E.164 (`+<country><number>`). First-gen list; full\n * `libphonenumber` validation/format deferred.\n */\nexport const PhoneInput = forwardRef<HTMLDivElement, PhoneInputProps>(\n function PhoneInput(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n defaultCountry = 'US',\n disabled,\n readOnly,\n invalid,\n placeholder = '(555) 555-5555',\n name,\n className,\n ...rest\n },\n ref,\n ) {\n const [value, setValue] = useControlled<string>({\n controlled: valueProp,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const { iso, national } = useMemo(() => splitE164(value, defaultCountry), [value, defaultCountry]);\n const country = PHONE_COUNTRIES.find((c) => c.iso === iso) ?? PHONE_COUNTRIES[0]!;\n\n const setCountry = (nextIso: string) => {\n const next = PHONE_COUNTRIES.find((c) => c.iso === nextIso) ?? country;\n setValue(`${next.dial}${national}`);\n };\n const setNational = (raw: string) => {\n const digits = raw.replace(/\\D/g, '');\n setValue(`${country.dial}${digits}`);\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n 'inline-flex items-stretch overflow-hidden rounded-md border bg-background',\n invalid ? 'border-destructive' : 'border-input',\n disabled && 'opacity-60',\n className,\n )}\n {...rest}\n >\n <select\n aria-label=\"Country\"\n value={iso}\n disabled={disabled || readOnly}\n onChange={(e) => setCountry(e.target.value)}\n className={cn(\n 'h-10 cursor-pointer border-r border-input bg-card pl-2 pr-1 text-sm outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n style={{ minWidth: 90 }}\n >\n {PHONE_COUNTRIES.map((c) => (\n <option key={c.iso} value={c.iso}>\n {c.flag} {c.dial}\n </option>\n ))}\n </select>\n <input\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel-national\"\n value={national}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={invalid || undefined}\n onChange={(e) => setNational(e.target.value)}\n className={cn(\n inputBaseVariants({ size: 'md' }),\n 'rounded-none border-0 focus-visible:ring-0',\n )}\n />\n {name && <input type=\"hidden\" name={name} value={value} />}\n </div>\n );\n },\n);\n","import { forwardRef, useMemo, useRef, useState, type HTMLAttributes } from 'react';\nimport { cn } from '../../utils';\nimport { inputBaseVariants } from '../InputStyles';\n\nexport interface EmojiEntry {\n emoji: string;\n name: string;\n keywords?: string[];\n}\n\nexport interface EmojiCategory {\n id: string;\n label: string;\n icon: string;\n emojis: EmojiEntry[];\n}\n\nconst EMOJI: EmojiCategory[] = [\n {\n id: 'smileys',\n label: 'Smileys',\n icon: '😀',\n emojis: [\n { emoji: '😀', name: 'grinning face' },\n { emoji: '😃', name: 'grinning with big eyes' },\n { emoji: '😄', name: 'grinning, smiling eyes' },\n { emoji: '😁', name: 'beaming face' },\n { emoji: '😆', name: 'squinting face' },\n { emoji: '😅', name: 'sweat smile' },\n { emoji: '🤣', name: 'rolling on the floor laughing' },\n { emoji: '😂', name: 'face with tears of joy' },\n { emoji: '🙂', name: 'slight smile' },\n { emoji: '🙃', name: 'upside-down face' },\n { emoji: '😉', name: 'wink' },\n { emoji: '😊', name: 'blushing smile' },\n { emoji: '😇', name: 'halo' },\n { emoji: '🥰', name: 'smile with hearts' },\n { emoji: '😍', name: 'heart eyes' },\n { emoji: '🤩', name: 'star eyes' },\n { emoji: '😘', name: 'kiss' },\n { emoji: '😗', name: 'kissing face' },\n { emoji: '🤔', name: 'thinking' },\n { emoji: '😐', name: 'neutral' },\n { emoji: '😑', name: 'expressionless' },\n { emoji: '😶', name: 'no mouth' },\n { emoji: '🙄', name: 'eye roll' },\n { emoji: '😏', name: 'smirk' },\n { emoji: '😒', name: 'unamused' },\n { emoji: '😞', name: 'disappointed' },\n { emoji: '😔', name: 'pensive' },\n { emoji: '😟', name: 'worried' },\n { emoji: '😕', name: 'confused' },\n { emoji: '🙁', name: 'slight frown' },\n { emoji: '😣', name: 'persevering' },\n { emoji: '😖', name: 'confounded' },\n { emoji: '😫', name: 'tired' },\n { emoji: '😩', name: 'weary' },\n { emoji: '🥺', name: 'pleading' },\n { emoji: '😢', name: 'crying' },\n { emoji: '😭', name: 'loudly crying' },\n { emoji: '😡', name: 'pouting' },\n { emoji: '😠', name: 'angry' },\n { emoji: '🤬', name: 'cursing' },\n { emoji: '🥶', name: 'cold' },\n { emoji: '🥵', name: 'hot' },\n { emoji: '😳', name: 'flushed' },\n { emoji: '🤯', name: 'mind blown' },\n { emoji: '😱', name: 'screaming' },\n { emoji: '😨', name: 'fearful' },\n { emoji: '😰', name: 'anxious' },\n { emoji: '🥱', name: 'yawning' },\n { emoji: '😴', name: 'sleeping' },\n { emoji: '🤤', name: 'drooling' },\n ],\n },\n {\n id: 'people',\n label: 'People',\n icon: '👍',\n emojis: [\n { emoji: '👍', name: 'thumbs up' },\n { emoji: '👎', name: 'thumbs down' },\n { emoji: '👌', name: 'OK' },\n { emoji: '✌️', name: 'victory' },\n { emoji: '🤞', name: 'crossed fingers' },\n { emoji: '🤟', name: 'love-you' },\n { emoji: '🤘', name: 'rock on' },\n { emoji: '🤙', name: 'call me' },\n { emoji: '👈', name: 'point left' },\n { emoji: '👉', name: 'point right' },\n { emoji: '👆', name: 'point up' },\n { emoji: '👇', name: 'point down' },\n { emoji: '☝️', name: 'index up' },\n { emoji: '✋', name: 'raised hand' },\n { emoji: '🖐️', name: 'hand fingers splayed' },\n { emoji: '🖖', name: 'vulcan' },\n { emoji: '👋', name: 'wave' },\n { emoji: '🤚', name: 'back of hand' },\n { emoji: '👏', name: 'clap' },\n { emoji: '🙌', name: 'raising hands' },\n { emoji: '🤝', name: 'handshake' },\n { emoji: '🙏', name: 'pray' },\n { emoji: '💪', name: 'flexed bicep' },\n { emoji: '👀', name: 'eyes' },\n { emoji: '👤', name: 'silhouette' },\n { emoji: '👥', name: 'silhouettes' },\n { emoji: '🧑', name: 'person' },\n { emoji: '👶', name: 'baby' },\n { emoji: '🧒', name: 'child' },\n { emoji: '👦', name: 'boy' },\n { emoji: '👧', name: 'girl' },\n { emoji: '🧓', name: 'older person' },\n ],\n },\n {\n id: 'nature',\n label: 'Nature',\n icon: '🌳',\n emojis: [\n { emoji: '🐶', name: 'dog' },\n { emoji: '🐱', name: 'cat' },\n { emoji: '🐭', name: 'mouse' },\n { emoji: '🐹', name: 'hamster' },\n { emoji: '🐰', name: 'rabbit' },\n { emoji: '🦊', name: 'fox' },\n { emoji: '🐻', name: 'bear' },\n { emoji: '🐼', name: 'panda' },\n { emoji: '🐨', name: 'koala' },\n { emoji: '🐯', name: 'tiger' },\n { emoji: '🦁', name: 'lion' },\n { emoji: '🐮', name: 'cow' },\n { emoji: '🐷', name: 'pig' },\n { emoji: '🐸', name: 'frog' },\n { emoji: '🐵', name: 'monkey' },\n { emoji: '🐔', name: 'chicken' },\n { emoji: '🐧', name: 'penguin' },\n { emoji: '🐦', name: 'bird' },\n { emoji: '🐤', name: 'baby chick' },\n { emoji: '🦆', name: 'duck' },\n { emoji: '🦅', name: 'eagle' },\n { emoji: '🦉', name: 'owl' },\n { emoji: '🌸', name: 'cherry blossom' },\n { emoji: '🌹', name: 'rose' },\n { emoji: '🌻', name: 'sunflower' },\n { emoji: '🌷', name: 'tulip' },\n { emoji: '🌼', name: 'daisy' },\n { emoji: '🌳', name: 'tree' },\n { emoji: '🌲', name: 'evergreen' },\n { emoji: '🌴', name: 'palm' },\n { emoji: '🌵', name: 'cactus' },\n { emoji: '🍀', name: 'four-leaf clover' },\n { emoji: '☀️', name: 'sun' },\n { emoji: '🌙', name: 'moon' },\n { emoji: '⭐', name: 'star' },\n { emoji: '⚡', name: 'lightning' },\n { emoji: '🔥', name: 'fire' },\n ],\n },\n {\n id: 'food',\n label: 'Food',\n icon: '🍕',\n emojis: [\n { emoji: '🍎', name: 'apple' },\n { emoji: '🍊', name: 'orange' },\n { emoji: '🍌', name: 'banana' },\n { emoji: '🍇', name: 'grapes' },\n { emoji: '🍓', name: 'strawberry' },\n { emoji: '🍉', name: 'watermelon' },\n { emoji: '🍒', name: 'cherries' },\n { emoji: '🍑', name: 'peach' },\n { emoji: '🍍', name: 'pineapple' },\n { emoji: '🥑', name: 'avocado' },\n { emoji: '🍅', name: 'tomato' },\n { emoji: '🥕', name: 'carrot' },\n { emoji: '🌽', name: 'corn' },\n { emoji: '🥬', name: 'leafy green' },\n { emoji: '🍞', name: 'bread' },\n { emoji: '🥐', name: 'croissant' },\n { emoji: '🥯', name: 'bagel' },\n { emoji: '🥖', name: 'baguette' },\n { emoji: '🧀', name: 'cheese' },\n { emoji: '🥚', name: 'egg' },\n { emoji: '🍳', name: 'cooking' },\n { emoji: '🥞', name: 'pancakes' },\n { emoji: '🥓', name: 'bacon' },\n { emoji: '🍔', name: 'burger' },\n { emoji: '🍟', name: 'fries' },\n { emoji: '🍕', name: 'pizza' },\n { emoji: '🌭', name: 'hotdog' },\n { emoji: '🌮', name: 'taco' },\n { emoji: '🌯', name: 'burrito' },\n { emoji: '🍣', name: 'sushi' },\n { emoji: '🍰', name: 'cake' },\n { emoji: '🧁', name: 'cupcake' },\n { emoji: '🍩', name: 'donut' },\n { emoji: '🍪', name: 'cookie' },\n { emoji: '🍫', name: 'chocolate' },\n { emoji: '🍯', name: 'honey' },\n { emoji: '☕', name: 'coffee' },\n { emoji: '🍵', name: 'tea' },\n { emoji: '🍺', name: 'beer' },\n { emoji: '🍷', name: 'wine' },\n ],\n },\n {\n id: 'objects',\n label: 'Objects',\n icon: '💡',\n emojis: [\n { emoji: '💡', name: 'lightbulb' },\n { emoji: '🔋', name: 'battery' },\n { emoji: '📱', name: 'phone' },\n { emoji: '💻', name: 'laptop' },\n { emoji: '🖥️', name: 'desktop' },\n { emoji: '⌨️', name: 'keyboard' },\n { emoji: '🖱️', name: 'mouse' },\n { emoji: '📷', name: 'camera' },\n { emoji: '🎥', name: 'video camera' },\n { emoji: '📺', name: 'tv' },\n { emoji: '📻', name: 'radio' },\n { emoji: '🎙️', name: 'microphone' },\n { emoji: '🔊', name: 'speaker loud' },\n { emoji: '🔈', name: 'speaker' },\n { emoji: '📢', name: 'megaphone' },\n { emoji: '🔔', name: 'bell' },\n { emoji: '🔇', name: 'muted' },\n { emoji: '⏰', name: 'alarm' },\n { emoji: '⌚', name: 'watch' },\n { emoji: '📅', name: 'calendar' },\n { emoji: '📌', name: 'pin' },\n { emoji: '✂️', name: 'scissors' },\n { emoji: '🔑', name: 'key' },\n { emoji: '🔒', name: 'locked' },\n { emoji: '🔓', name: 'unlocked' },\n { emoji: '💰', name: 'money bag' },\n { emoji: '💳', name: 'card' },\n { emoji: '📦', name: 'package' },\n { emoji: '✉️', name: 'envelope' },\n { emoji: '📨', name: 'incoming envelope' },\n { emoji: '✏️', name: 'pencil' },\n { emoji: '🖊️', name: 'pen' },\n { emoji: '📝', name: 'memo' },\n { emoji: '📎', name: 'paperclip' },\n { emoji: '📁', name: 'folder' },\n { emoji: '📂', name: 'open folder' },\n { emoji: '📊', name: 'bar chart' },\n { emoji: '📈', name: 'up chart' },\n { emoji: '📉', name: 'down chart' },\n ],\n },\n {\n id: 'symbols',\n label: 'Symbols',\n icon: '✅',\n emojis: [\n { emoji: '✅', name: 'check' },\n { emoji: '❌', name: 'cross' },\n { emoji: '❗', name: 'exclamation' },\n { emoji: '❓', name: 'question' },\n { emoji: '⚠️', name: 'warning' },\n { emoji: '✨', name: 'sparkles' },\n { emoji: '⭐', name: 'star' },\n { emoji: '🌟', name: 'glowing star' },\n { emoji: '💫', name: 'dizzy' },\n { emoji: '💢', name: 'anger' },\n { emoji: '💥', name: 'collision' },\n { emoji: '💦', name: 'sweat drops' },\n { emoji: '💨', name: 'dash' },\n { emoji: '🎉', name: 'party' },\n { emoji: '🎊', name: 'confetti ball' },\n { emoji: '🎁', name: 'gift' },\n { emoji: '🏆', name: 'trophy' },\n { emoji: '🥇', name: 'gold medal' },\n { emoji: '🥈', name: 'silver medal' },\n { emoji: '🥉', name: 'bronze medal' },\n { emoji: '❤️', name: 'red heart' },\n { emoji: '🧡', name: 'orange heart' },\n { emoji: '💛', name: 'yellow heart' },\n { emoji: '💚', name: 'green heart' },\n { emoji: '💙', name: 'blue heart' },\n { emoji: '💜', name: 'purple heart' },\n { emoji: '🖤', name: 'black heart' },\n { emoji: '🤍', name: 'white heart' },\n { emoji: '💔', name: 'broken heart' },\n { emoji: '➕', name: 'plus' },\n { emoji: '➖', name: 'minus' },\n { emoji: '➗', name: 'divide' },\n { emoji: '✖️', name: 'multiply' },\n { emoji: '♻️', name: 'recycle' },\n { emoji: '⚡', name: 'lightning' },\n ],\n },\n];\n\nexport interface EmojiPickerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n onSelect: (emoji: string) => void;\n placeholder?: string;\n columns?: number;\n cellSize?: number;\n categories?: EmojiCategory[];\n disabled?: boolean;\n}\n\n/**\n * Emoji picker with category jump strip + search. Built-in ~200 emoji\n * subset; pass `categories` to override. Designed for use inside `Popover`.\n */\nexport const EmojiPicker = forwardRef<HTMLDivElement, EmojiPickerProps>(\n function EmojiPicker(\n {\n onSelect,\n placeholder = 'Search emoji…',\n columns = 8,\n cellSize = 28,\n categories = EMOJI,\n disabled,\n className,\n ...rest\n },\n ref,\n ) {\n const [query, setQuery] = useState('');\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const matches = useMemo(() => {\n if (!query) return null;\n const q = query.toLowerCase();\n const found: EmojiEntry[] = [];\n for (const cat of categories) {\n for (const e of cat.emojis) {\n if (e.name.includes(q) || (e.keywords?.some((k) => k.includes(q)) ?? false)) {\n found.push(e);\n }\n }\n }\n return found;\n }, [query, categories]);\n\n const jumpTo = (id: string) => {\n const root = containerRef.current;\n if (!root) return;\n const target = root.querySelector(`[data-cat=\"${id}\"]`);\n if (target instanceof HTMLElement) {\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n };\n\n return (\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === 'function') ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n className={cn(\n 'flex flex-col rounded-md border border-border bg-card text-card-foreground shadow-sm',\n disabled && 'opacity-60',\n className,\n )}\n style={{ width: columns * cellSize + 24 }}\n {...rest}\n >\n <div className=\"border-b border-border p-2\">\n <input\n type=\"search\"\n value={query}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(e) => setQuery(e.target.value)}\n className={cn(inputBaseVariants({ size: 'sm' }))}\n />\n </div>\n {!matches && (\n <div role=\"tablist\" aria-label=\"Emoji categories\" className=\"flex border-b border-border\">\n {categories.map((c) => (\n <button\n key={c.id}\n type=\"button\"\n role=\"tab\"\n aria-controls={`emoji-cat-${c.id}`}\n onClick={() => jumpTo(c.id)}\n title={c.label}\n className=\"flex flex-1 items-center justify-center py-1.5 text-base hover:bg-muted\"\n >\n <span aria-hidden=\"true\">{c.icon}</span>\n <span className=\"sr-only\">{c.label}</span>\n </button>\n ))}\n </div>\n )}\n <div\n role=\"grid\"\n aria-label=\"Emoji\"\n className=\"overflow-y-auto p-2\"\n style={{ maxHeight: 280 }}\n >\n {matches ? (\n matches.length === 0 ? (\n <div className=\"px-2 py-6 text-center text-xs text-muted-foreground\">No emoji match.</div>\n ) : (\n <div className=\"grid\" style={{ gridTemplateColumns: `repeat(${columns}, ${cellSize}px)` }}>\n {matches.map((e) => (\n <EmojiCell key={e.emoji} entry={e} cellSize={cellSize} disabled={disabled} onSelect={onSelect} />\n ))}\n </div>\n )\n ) : (\n categories.map((cat) => (\n <div key={cat.id} data-cat={cat.id} id={`emoji-cat-${cat.id}`} className=\"mb-3\">\n <div className=\"mb-1 px-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground\">\n {cat.label}\n </div>\n <div className=\"grid\" style={{ gridTemplateColumns: `repeat(${columns}, ${cellSize}px)` }}>\n {cat.emojis.map((e) => (\n <EmojiCell key={e.emoji} entry={e} cellSize={cellSize} disabled={disabled} onSelect={onSelect} />\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n </div>\n );\n },\n);\n\ninterface EmojiCellProps {\n entry: EmojiEntry;\n cellSize: number;\n disabled?: boolean;\n onSelect: (emoji: string) => void;\n}\n\nfunction EmojiCell({ entry, cellSize, disabled, onSelect }: EmojiCellProps) {\n return (\n <div role=\"gridcell\">\n <button\n type=\"button\"\n aria-label={entry.name}\n disabled={disabled}\n onClick={() => onSelect(entry.emoji)}\n style={{ width: cellSize, height: cellSize }}\n className=\"inline-flex items-center justify-center rounded-md text-lg transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n {entry.emoji}\n </button>\n </div>\n );\n}\n\nexport const BUILT_IN_EMOJI = EMOJI;\n","import { forwardRef, type HTMLAttributes } from 'react';\nimport { Plus } from 'lucide-react';\nimport { cn } from '../../utils';\n\nexport interface ReactionPickerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** List of emoji shortcuts shown as quick-pick buttons. */\n emojis?: string[];\n /** Currently active emoji keys (highlighted). */\n selected?: string[];\n /** Fires when an emoji is picked. */\n onSelect?: (emoji: string) => void;\n /** Fires when the trailing \"more\" button is clicked (open full picker). */\n onMore?: () => void;\n /** Hide the trailing \"more\" button. */\n hideMore?: boolean;\n /** Compact button size. */\n size?: 'sm' | 'md';\n}\n\nconst DEFAULT_REACTIONS = ['👍', '❤️', '😂', '🎉', '😮', '😢', '🚀'];\n\nconst SIZE: Record<NonNullable<ReactionPickerProps['size']>, string> = {\n sm: 'h-7 w-7 text-base',\n md: 'h-8 w-8 text-lg',\n};\n\n/**\n * Quick-pick row of common emoji reactions. Pair with `overlays/Popover`\n * to surface as a hover/long-press affordance on a `ChatBubble`. Click\n * `+` to fall through to a fuller `forms/EmojiPicker`.\n */\nexport const ReactionPicker = forwardRef<HTMLDivElement, ReactionPickerProps>(\n (\n {\n emojis = DEFAULT_REACTIONS,\n selected,\n onSelect,\n onMore,\n hideMore,\n size = 'md',\n className,\n ...props\n },\n ref,\n ) => (\n <div\n ref={ref}\n role=\"toolbar\"\n aria-label=\"Reaction picker\"\n className={cn(\n 'inline-flex items-center gap-1 rounded-full border border-border bg-popover p-1 shadow-sm',\n className,\n )}\n {...props}\n >\n {emojis.map((emoji) => {\n const active = selected?.includes(emoji);\n return (\n <button\n key={emoji}\n type=\"button\"\n data-active={active ? '' : undefined}\n aria-pressed={active}\n aria-label={`React with ${emoji}`}\n onClick={() => onSelect?.(emoji)}\n className={cn(\n 'inline-flex items-center justify-center rounded-full leading-none transition-transform',\n 'hover:scale-125 hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n active && 'bg-primary-soft',\n SIZE[size],\n )}\n >\n <span aria-hidden=\"true\">{emoji}</span>\n </button>\n );\n })}\n {!hideMore && onMore && (\n <button\n type=\"button\"\n aria-label=\"More reactions\"\n onClick={onMore}\n className={cn(\n 'inline-flex items-center justify-center rounded-full text-muted-foreground transition-colors',\n 'hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n SIZE[size],\n )}\n >\n <Plus className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n ),\n);\nReactionPicker.displayName = 'ReactionPicker';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n type FormEvent,\n type FormHTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\nimport { Send } from 'lucide-react';\nimport { cn, composeRefs } from '../../utils';\nimport { useControlled } from '../../hooks';\n\ntype SubmitTrigger = 'enter' | 'mod-enter';\n\nexport interface ChatComposerProps\n extends Omit<FormHTMLAttributes<HTMLFormElement>, 'onSubmit' | 'children'> {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n /** Fires on send (Enter / Mod+Enter / button click). Receives the text value. */\n onSubmit?: (value: string) => void;\n /** Placeholder text. */\n placeholder?: string;\n /** Disable the input + send button. */\n disabled?: boolean;\n /** Slot rendered on the leading edge of the toolbar (e.g. attach button). */\n leading?: ReactNode;\n /** Slot rendered between the leading slot and the send button. */\n trailing?: ReactNode;\n /** Replace or hide the default send button. */\n sendButton?: ReactNode;\n /** Hide the send button entirely (e.g. when consumer renders a custom CTA). */\n hideSendButton?: boolean;\n /** When the textarea should submit. `enter` = Enter alone (default).\n * `mod-enter` = Cmd/Ctrl+Enter (Enter inserts a newline). */\n submitOn?: SubmitTrigger;\n /** Maximum textarea pixel height before scroll kicks in. Default `200`. */\n maxHeight?: number;\n /** Pass-through textarea props (rows is overridden). */\n textareaProps?: Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'value' | 'defaultValue' | 'onChange'\n >;\n}\n\n/**\n * Chat input row with auto-resizing textarea and send button. Enter sends\n * by default (Shift+Enter inserts a newline); set `submitOn=\"mod-enter\"` to\n * flip the convention. Use `leading` / `trailing` slots for attach / emoji\n * pickers.\n */\nexport const ChatComposer = forwardRef<HTMLTextAreaElement, ChatComposerProps>(\n (\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n onSubmit,\n placeholder = 'Write a message…',\n disabled,\n leading,\n trailing,\n sendButton,\n hideSendButton,\n submitOn = 'enter',\n maxHeight = 200,\n textareaProps,\n className,\n ...props\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? '',\n onChange: onValueChange,\n });\n const textareaRef = useRef<HTMLTextAreaElement | null>(null);\n const composedRef = composeRefs(textareaRef, ref);\n\n const resize = useCallback(() => {\n const ta = textareaRef.current;\n if (!ta) return;\n ta.style.height = 'auto';\n const next = Math.min(ta.scrollHeight, maxHeight);\n ta.style.height = `${next}px`;\n ta.style.overflowY = ta.scrollHeight > maxHeight ? 'auto' : 'hidden';\n }, [maxHeight]);\n\n useEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleSubmit = (e?: FormEvent) => {\n e?.preventDefault();\n const trimmed = value.trim();\n if (!trimmed || disabled) return;\n onSubmit?.(trimmed);\n if (valueProp === undefined) setValue('');\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n textareaProps?.onKeyDown?.(e);\n if (e.defaultPrevented) return;\n const isEnter = e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing;\n const wantsMod = submitOn === 'mod-enter';\n const modPressed = e.metaKey || e.ctrlKey;\n if (isEnter && (wantsMod ? modPressed : !modPressed)) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const isEmpty = value.trim().length === 0;\n\n return (\n <form\n onSubmit={handleSubmit}\n className={cn(\n 'flex w-full items-end gap-2 rounded-2xl border border-input bg-background px-3 py-2',\n 'focus-within:ring-2 focus-within:ring-ring',\n disabled && 'cursor-not-allowed opacity-60',\n className,\n )}\n {...props}\n >\n {leading && <div className=\"flex shrink-0 items-center gap-1 self-end pb-1\">{leading}</div>}\n <textarea\n {...textareaProps}\n ref={composedRef}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n rows={1}\n placeholder={placeholder}\n disabled={disabled}\n className={cn(\n 'flex-1 resize-none bg-transparent py-1 text-sm leading-relaxed text-foreground placeholder:text-muted-foreground focus:outline-none',\n textareaProps?.className,\n )}\n />\n {trailing && <div className=\"flex shrink-0 items-center gap-1 self-end pb-1\">{trailing}</div>}\n {!hideSendButton && (\n sendButton ?? (\n <button\n type=\"submit\"\n disabled={disabled || isEmpty}\n aria-label=\"Send message\"\n className={cn(\n 'inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-full self-end',\n isEmpty\n ? 'bg-muted text-muted-foreground'\n : 'bg-primary text-primary-foreground hover:bg-primary/90',\n 'disabled:cursor-not-allowed',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <Send className=\"h-4 w-4\" />\n </button>\n )\n )}\n </form>\n );\n },\n);\nChatComposer.displayName = 'ChatComposer';\n"]}
|