@page-speed/forms 0.7.1 → 0.7.2
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/{FormContext-DsNPeCv0.d.ts → FormContext-CRP1KNiH.d.ts} +1 -1
- package/dist/{FormContext-6c1ttFt2.d.cts → FormContext-DmdEAIQ7.d.cts} +1 -1
- package/dist/{chunk-ER3C5JAE.cjs → chunk-4K6J2DOK.cjs} +30 -16
- package/dist/chunk-4K6J2DOK.cjs.map +1 -0
- package/dist/{chunk-BW752X33.js → chunk-AG67TUZI.js} +4 -5
- package/dist/chunk-AG67TUZI.js.map +1 -0
- package/dist/{chunk-DKLPYENR.cjs → chunk-V4HMVPAB.cjs} +4 -5
- package/dist/chunk-V4HMVPAB.cjs.map +1 -0
- package/dist/{chunk-5BAN5ICD.js → chunk-ZH6XDBWH.js} +30 -16
- package/dist/chunk-ZH6XDBWH.js.map +1 -0
- package/dist/core.cjs +8 -8
- package/dist/core.d.cts +3 -3
- package/dist/core.d.ts +3 -3
- package/dist/core.js +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/inputs.cjs +12 -12
- package/dist/inputs.d.cts +1 -1
- package/dist/inputs.d.ts +1 -1
- package/dist/inputs.js +1 -1
- package/dist/integration.cjs +15 -15
- package/dist/integration.d.cts +2 -2
- package/dist/integration.d.ts +2 -2
- package/dist/integration.js +2 -2
- package/dist/{types-CrWhdYGP.d.cts → types-BfZYTL89.d.cts} +5 -1
- package/dist/{types-CrWhdYGP.d.ts → types-BfZYTL89.d.ts} +5 -1
- package/dist/validation-rules.d.cts +1 -1
- package/dist/validation-rules.d.ts +1 -1
- package/dist/validation-utils.d.cts +1 -1
- package/dist/validation-utils.d.ts +1 -1
- package/dist/validation-valibot.d.cts +1 -1
- package/dist/validation-valibot.d.ts +1 -1
- package/dist/validation.d.cts +1 -1
- package/dist/validation.d.ts +1 -1
- package/package.json +3 -3
- package/dist/chunk-5BAN5ICD.js.map +0 -1
- package/dist/chunk-BW752X33.js.map +0 -1
- package/dist/chunk-DKLPYENR.cjs.map +0 -1
- package/dist/chunk-ER3C5JAE.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ui/textarea.tsx","../src/inputs/TextArea.tsx","../src/components/ui/checkbox.tsx","../src/inputs/Checkbox.tsx","../src/inputs/CheckboxGroup.tsx","../src/components/ui/radio-group.tsx","../src/inputs/Radio.tsx","../src/components/ui/switch.tsx","../src/inputs/Switch.tsx","../src/components/ui/select.tsx","../src/inputs/Select.tsx","../src/components/ui/dialog.tsx","../src/components/ui/command.tsx","../src/components/ui/popover.tsx","../src/inputs/MultiSelect.tsx","../src/hooks/use-isomorphic-layout-effect.ts","../src/hooks/use-as-ref.ts","../src/hooks/use-lazy-ref.ts","../src/components/ui/file-upload.tsx","../src/inputs/FileInput.tsx","../src/components/ui/calendar.tsx","../src/inputs/DatePicker.tsx","../src/inputs/TimePicker.tsx","../src/inputs/DateRangePicker.tsx"],"names":["React","React2","React3","CheckboxPrimitive","Checkbox","React4","React5","React6","RadioGroupPrimitive","React7","React8","SwitchPrimitive","Switch","React9","SelectPrimitive","React10","Select","React11","DialogPrimitive","React12","React13","CommandPrimitive","PopoverPrimitive","React14","React15","React16","React17","React18","state","files","invalid","rejectedFiles","React20","React21","className","props","React22","React23","formatDate","React24"],"mappings":"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","file":"chunk-5BAN5ICD.js","sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Textarea component - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Only uses CSS variables that adapt automatically - NO hardcoded semantic colors\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n // Core structure - uses CSS variables only\n \"flex field-sizing-content min-h-16 w-full rounded-md border border-input\",\n \"bg-transparent px-3 py-2 text-base shadow-xs\",\n \"transition-[color,box-shadow] outline-none md:text-sm\",\n\n // Focus state - uses ring-ring CSS variable\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\n // Error state - uses destructive CSS variables\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20\",\n\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport { Textarea } from \"../components/ui/textarea\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Additional props specific to TextArea\n */\nexport interface TextAreaProps extends Omit<InputProps<string>, \"onChange\"> {\n /**\n * Number of visible text rows\n * @default 3\n */\n rows?: number;\n\n /**\n * Number of visible text columns (characters)\n */\n cols?: number;\n\n /**\n * Maximum character length\n */\n maxLength?: number;\n\n /**\n * Minimum character length\n */\n minLength?: number;\n\n /**\n * Text wrapping behavior\n * - soft: text wraps but newlines not submitted (default)\n * - hard: text wraps and newlines submitted (requires cols)\n * - off: no wrapping\n */\n wrap?: \"soft\" | \"hard\" | \"off\";\n\n /**\n * Change handler\n */\n onChange: (value: string) => void;\n\n /**\n * Additional native textarea attributes\n */\n [key: string]: any;\n}\n\n/**\n * TextArea - High-performance multi-line text input component (ShadCN-based)\n *\n * Built on ShadCN Textarea component with form-specific behavior:\n * - Error state handling\n * - Valid value indicator (ring-2)\n * - Form integration (onChange, onBlur)\n * - Full accessibility support\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { bio: '' } });\n *\n * <TextArea\n * {...form.getFieldProps('bio')}\n * rows={5}\n * placeholder=\"Tell us about yourself\"\n * error={!!form.errors.bio}\n * aria-invalid={!!form.errors.bio}\n * aria-describedby={form.errors.bio ? 'bio-error' : undefined}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/textarea\n */\nexport function TextArea({\n name,\n value,\n onChange,\n onBlur,\n placeholder,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n rows = 3,\n cols,\n maxLength,\n minLength,\n wrap = \"soft\",\n ...props\n}: TextAreaProps) {\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(e.target.value);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const hasValue = String(value ?? \"\").trim().length > 0;\n\n return (\n <Textarea\n name={name}\n value={value ?? \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n className={cn(\n // Valid value indicator - ring-2 when has value and no error\n !error && hasValue && \"ring-2 ring-ring\",\n // Error state - handled by Textarea component via aria-invalid\n className,\n )}\n rows={rows}\n cols={cols}\n maxLength={maxLength}\n minLength={minLength}\n wrap={wrap}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n}\n\nTextArea.displayName = \"TextArea\";\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Checkbox component - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Only uses CSS variables that adapt automatically - NO hardcoded semantic colors\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n // Core structure - uses CSS variables\n \"peer size-4 shrink-0 rounded-[4px] border border-input bg-transparent shadow-xs\",\n \"transition-shadow outline-none\",\n\n // Checked state - uses primary CSS variables\n \"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n \"data-[state=checked]:border-primary\",\n\n // Focus state - uses ring-ring CSS variable\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\n // Error state - uses destructive CSS variables\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20\",\n\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n {/* Simple check mark using CSS */}\n <svg\n className=\"size-3.5\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport { Checkbox as CheckboxPrimitive } from \"../components/ui/checkbox\";\nimport {\n FieldDescription,\n FieldLabel,\n} from \"../components/ui/field\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Additional props specific to Checkbox\n */\nexport interface CheckboxProps extends Omit<\n InputProps<boolean>,\n \"onChange\" | \"placeholder\"\n> {\n /**\n * Change handler - receives boolean checked state\n */\n onChange: (checked: boolean) => void;\n\n /**\n * Label text for the checkbox (primary text)\n */\n label?: React.ReactNode;\n\n /**\n * Optional description text below the label (secondary text)\n */\n description?: React.ReactNode;\n\n /**\n * Layout variant - automatically enabled if description exists\n * @default false\n */\n useChoiceCard?: boolean;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Checkbox - High-performance boolean input component (ShadCN-based)\n *\n * Built on ShadCN Checkbox with form-specific behavior:\n * - Error state handling\n * - Choice Card variant (automatic when description exists)\n * - Label and description support\n * - Form integration (onChange, onBlur)\n * - Full accessibility support\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { terms: false } });\n *\n * <Checkbox\n * {...form.getFieldProps('terms')}\n * label=\"I agree to the terms and conditions\"\n * description=\"By clicking this checkbox, you agree to the terms.\"\n * error={!!form.errors.terms}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/checkbox\n */\nexport function Checkbox({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n label,\n description,\n useChoiceCard = false,\n ...props\n}: CheckboxProps) {\n const checkboxId = props.id || `checkbox-${name}`;\n\n const handleCheckedChange = (checked: boolean) => {\n onChange(checked);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n // Automatically use Choice Card if description exists\n const showChoiceCard = useChoiceCard || !!description;\n\n const checkbox = (\n <>\n {/* Hidden input for form submission */}\n <input\n type=\"checkbox\"\n name={name}\n checked={value}\n onChange={() => {}} // Controlled by CheckboxPrimitive\n disabled={disabled}\n required={required}\n tabIndex={-1}\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: 0,\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: 0,\n }}\n />\n <CheckboxPrimitive\n id={checkboxId}\n checked={value}\n onCheckedChange={handleCheckedChange}\n onBlur={handleBlur}\n disabled={disabled}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={\n description ? `${checkboxId}-description` : props[\"aria-describedby\"]\n }\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n </>\n );\n\n // Without label, return just the checkbox\n if (!label) {\n return <div className={className}>{checkbox}</div>;\n }\n\n // With label, wrap in FieldLabel for semantic association and click behavior\n return (\n <div className=\"space-y-0\" data-invalid={error || undefined}>\n <FieldLabel\n htmlFor={checkboxId}\n className={cn(\n \"flex gap-3 p-3 duration-200 select-auto font-normal leading-normal\",\n showChoiceCard && \"border rounded-lg hover:ring-2 hover:ring-ring/50\",\n showChoiceCard && value && \"ring-2 ring-ring\",\n showChoiceCard && error && \"border-destructive\",\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n className,\n )}\n >\n <div\n className={cn(\n \"flex w-full gap-3\",\n showChoiceCard ? \"items-start\" : \"items-center\",\n )}\n >\n {checkbox}\n <div className=\"flex-1 space-y-1\">\n <span className=\"text-sm font-medium leading-none\">{label}</span>\n {description && (\n <FieldDescription\n id={`${checkboxId}-description`}\n className=\"leading-snug\"\n >\n {description}\n </FieldDescription>\n )}\n </div>\n </div>\n </FieldLabel>\n </div>\n );\n}\n\nCheckbox.displayName = \"Checkbox\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport { Checkbox } from \"./Checkbox\";\nimport { FieldDescription } from \"../components/ui/field\";\nimport { LabelGroup } from \"../core/label-group\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * CheckboxGroup option type\n */\nexport interface CheckboxGroupOption {\n /**\n * The value for this checkbox option\n */\n value: string;\n\n /**\n * Display label for the option\n */\n label: React.ReactNode;\n\n /**\n * Optional description text below the label\n */\n description?: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Additional props specific to CheckboxGroup\n */\nexport interface CheckboxGroupProps extends Omit<\n InputProps<string[]>,\n \"onChange\" | \"placeholder\"\n> {\n /**\n * Change handler - receives array of selected values\n */\n onChange: (values: string[]) => void;\n\n /**\n * Array of checkbox options\n */\n options: CheckboxGroupOption[];\n\n /**\n * Layout direction\n * @default \"stacked\"\n */\n layout?: \"stacked\" | \"grid\" | \"inline\";\n\n /**\n * Group-level label\n */\n label?: React.ReactNode;\n\n /**\n * Group-level description\n */\n description?: React.ReactNode;\n\n /**\n * Show \"select all\" checkbox\n * @default false\n */\n showSelectAll?: boolean;\n\n /**\n * Label for the select all checkbox\n * @default \"Select all\"\n */\n selectAllLabel?: string;\n\n /**\n * Minimum number of selections required\n */\n minSelections?: number;\n\n /**\n * Maximum number of selections allowed\n */\n maxSelections?: number;\n\n /**\n * Custom render function for options\n */\n renderOption?: (option: CheckboxGroupOption) => React.ReactNode;\n\n /**\n * Grid columns (only applies when layout=\"grid\")\n * @default 2\n */\n gridColumns?: number;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * CheckboxGroup - High-performance multiple selection component\n *\n * A lightweight, accessible checkbox group with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes, role=\"group\")\n * - Error state styling\n * - Controlled input behavior\n * - Multiple layout options (stacked, grid)\n * - Optional \"select all\" checkbox\n * - Individual option disabled state\n * - Minimum/maximum selection validation\n * - Custom option rendering\n * - Optional descriptions for each option\n * - All native checkbox attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { interests: [] } });\n *\n * <CheckboxGroup\n * {...form.getFieldProps('interests')}\n * label=\"Select your interests\"\n * options={[\n * { value: 'sports', label: 'Sports', description: 'Football, Basketball, etc.' },\n * { value: 'music', label: 'Music', description: 'All genres' },\n * { value: 'reading', label: 'Reading', description: 'Books and articles' }\n * ]}\n * showSelectAll\n * error={!!form.errors.interests}\n * aria-describedby={form.errors.interests ? 'interests-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Grid layout with min/max selections\n * <CheckboxGroup\n * name=\"features\"\n * value={features}\n * onChange={handleFeaturesChange}\n * layout=\"grid\"\n * gridColumns={3}\n * minSelections={1}\n * maxSelections={3}\n * label=\"Select 1-3 features\"\n * options={[\n * { value: 'ssl', label: 'SSL Certificate' },\n * { value: 'cdn', label: 'CDN' },\n * { value: 'backup', label: 'Daily Backups' },\n * { value: 'support', label: '24/7 Support' }\n * ]}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/checkbox-group\n */\nexport function CheckboxGroup({\n name,\n value = [],\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n layout = \"stacked\",\n label,\n description,\n options,\n showSelectAll = false,\n selectAllLabel = \"Select all\",\n minSelections,\n maxSelections,\n renderOption,\n gridColumns = 2,\n ...props\n}: CheckboxGroupProps) {\n // Calculate select all state\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledValues = enabledOptions.map((opt) => opt.value);\n const selectedEnabledCount = value.filter((v) =>\n enabledValues.includes(v),\n ).length;\n const allSelected = selectedEnabledCount === enabledOptions.length;\n const someSelected = selectedEnabledCount > 0 && !allSelected;\n\n const useChoiceCard: boolean = React.useMemo(() => {\n if (!options) return false;\n\n return options?.some((opt) => opt.description);\n }, [options]);\n\n const countableValue: number = React.useMemo(() => {\n if (value?.length > 0) {\n return value.length;\n }\n return 0;\n }, [value]);\n\n // Handle individual checkbox change\n const handleChange = (optionValue: string, checked: boolean) => {\n const newValues = checked\n ? [...value, optionValue]\n : value.filter((v) => v !== optionValue);\n\n // Enforce max selections\n if (maxSelections && checked && newValues.length > maxSelections) {\n return;\n }\n\n onChange(newValues);\n };\n\n // Handle select all change\n const handleSelectAll = (checked: boolean) => {\n if (checked) {\n // Select all enabled options\n const allValues = enabledOptions.map((opt) => opt.value);\n onChange(allValues);\n } else {\n // Deselect all\n onChange([]);\n }\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n // Determine if max selections reached\n const maxReached = Boolean(maxSelections && countableValue >= maxSelections);\n\n const containerClass = React.useMemo(() => {\n return cn(\n \"w-full grid grid-cols-1 border-0 m-0 p-0 min-w-0\",\n (layout === \"grid\" || layout === \"inline\") && \"md:grid-cols-2\",\n layout === \"grid\" && \"gap-3\",\n layout === \"inline\" && \"gap-0\",\n className,\n );\n }, [layout, className]);\n\n const groupDescriptionId = description ? `${name}-description` : undefined;\n const groupAriaDescribedBy =\n [props[\"aria-describedby\"], groupDescriptionId].filter(Boolean).join(\" \") ||\n undefined;\n\n return (\n <fieldset\n className={containerClass}\n role=\"group\"\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={groupAriaDescribedBy}\n aria-required={required || props[\"aria-required\"]}\n aria-label={typeof label === \"string\" ? label : props[\"aria-label\"]}\n >\n <LabelGroup\n labelHtmlFor={name}\n required={required}\n variant=\"legend\"\n secondaryId={groupDescriptionId}\n secondary={description}\n primary={label}\n />\n\n {/* Select All Checkbox */}\n {showSelectAll && enabledOptions.length > 0 && (\n <Checkbox\n name={`${name}-select-all`}\n id={`${name}-select-all`}\n value={allSelected}\n onChange={handleSelectAll}\n onBlur={handleBlur}\n indeterminate={someSelected}\n label={selectAllLabel}\n useChoiceCard={useChoiceCard}\n disabled={disabled}\n aria-label={selectAllLabel}\n />\n )}\n\n {/* Individual Checkboxes */}\n {options.map((option) => {\n const isChecked = value.includes(option.value);\n const isDisabled =\n disabled || option.disabled || (maxReached && !isChecked);\n\n return (\n <Checkbox\n key={option.value}\n name={name}\n id={`${name}-${option.value}`}\n value={isChecked}\n onChange={(checked) => handleChange(option.value, checked)}\n onBlur={handleBlur}\n disabled={isDisabled}\n required={\n required && minSelections ? value.length < minSelections : false\n }\n error={error}\n label={renderOption ? renderOption(option) : option.label}\n description={renderOption ? undefined : option.description}\n useChoiceCard={useChoiceCard}\n />\n );\n })}\n\n {/* Selection count feedback */}\n {(minSelections || maxSelections) && (\n <FieldDescription\n className={cn(\n \"p-2 rounded-lg border font-semibold mt-2 leading-snug\",\n minSelections && countableValue < minSelections\n ? \"border-destructive bg-destructive/80 text-destructive-foreground\"\n : \"border-border bg-card text-card-foreground\",\n )}\n aria-live=\"polite\"\n >\n {minSelections && countableValue < minSelections && (\n <span>\n Select at least {minSelections} option\n {minSelections !== 1 ? \"s\" : \"\"}\n </span>\n )}\n {maxSelections && (\n <span>\n {countableValue}/{maxSelections} selected\n </span>\n )}\n </FieldDescription>\n )}\n </fieldset>\n );\n}\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n","import * as React from \"react\"\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * RadioGroup components - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Only uses CSS variables that adapt automatically - NO hardcoded semantic colors\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n )\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n // Core structure - uses CSS variables\n \"aspect-square size-4 shrink-0 rounded-full border border-input bg-transparent shadow-xs\",\n \"text-primary transition-[color,box-shadow] outline-none\",\n\n // Focus state - uses ring-ring CSS variable\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\n // Error state - uses destructive CSS variables\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20\",\n\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n {/* Simple filled circle indicator */}\n <svg\n className=\"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2\"\n viewBox=\"0 0 24 24\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"12\" />\n </svg>\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n}\n\nexport { RadioGroup, RadioGroupItem }\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport { RadioGroup, RadioGroupItem } from \"../components/ui/radio-group\";\nimport { FieldDescription, FieldLabel } from \"../components/ui/field\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Radio option type\n */\nexport interface RadioOption {\n /**\n * The value for this radio option\n */\n value: string;\n\n /**\n * Display label for the option (primary text)\n */\n label: React.ReactNode;\n\n /**\n * Optional description text below the label (secondary text)\n */\n description?: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Additional props specific to Radio\n */\nexport interface RadioProps extends Omit<\n InputProps<string>,\n \"onChange\" | \"placeholder\"\n> {\n /**\n * Change handler - receives selected value\n */\n onChange: (value: string) => void;\n\n /**\n * Array of radio options\n */\n options: RadioOption[];\n\n /**\n * Layout direction\n * @default \"stacked\"\n */\n layout?: \"stacked\" | \"grid\" | \"inline\";\n\n /**\n * Group-level label\n */\n label?: React.ReactNode;\n\n /**\n * Group-level description\n */\n description?: React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Radio - High-performance single selection component (ShadCN-based)\n *\n * Built on ShadCN RadioGroup with form-specific behavior:\n * - Error state handling\n * - Choice Card variant (automatic when any option has description)\n * - Keyboard navigation (built into RadioGroup)\n * - Grid/stacked layouts\n * - Form integration (onChange, onBlur)\n * - Full accessibility support\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { plan: 'basic' } });\n *\n * <Radio\n * {...form.getFieldProps('plan')}\n * label=\"Select your plan\"\n * options={[\n * { value: 'basic', label: 'Basic', description: '$9/month' },\n * { value: 'pro', label: 'Pro', description: '$29/month' },\n * { value: 'enterprise', label: 'Enterprise', description: '$99/month' }\n * ]}\n * error={!!form.errors.plan}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/radio\n */\nexport function Radio({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n layout = \"stacked\",\n label,\n description,\n options,\n ...props\n}: RadioProps) {\n const handleValueChange = (selectedValue: string) => {\n onChange(selectedValue);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n // Automatically use Choice Card if any option has description\n const useChoiceCard = React.useMemo(() => {\n return options.some((option) => option.description);\n }, [options]);\n\n const groupDescriptionId = description ? `${name}-description` : undefined;\n\n return (\n <div className={cn(\"w-full\", className)} data-invalid={error || undefined}>\n {/* Group-level label and description */}\n {(label || description) && (\n <div className=\"mb-3 space-y-1\">\n {label && (\n <div className=\"text-base font-medium leading-none\">{label}</div>\n )}\n {description && (\n <FieldDescription id={groupDescriptionId} className=\"leading-snug\">\n {description}\n </FieldDescription>\n )}\n </div>\n )}\n\n <RadioGroup\n name={name}\n value={value}\n onValueChange={handleValueChange}\n onBlur={handleBlur}\n disabled={disabled}\n required={required}\n className={cn(\n layout === \"grid\" && \"grid grid-cols-1 md:grid-cols-2 gap-3\",\n layout === \"inline\" && \"flex flex-wrap gap-0\",\n )}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={groupDescriptionId || props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n >\n {options.map((option) => {\n const isSelected = value === option.value;\n const isDisabled = disabled || option.disabled;\n const radioId = `${name}-${option.value}`;\n const hasDescription = !!option.description;\n\n return (\n <FieldLabel\n key={option.value}\n htmlFor={radioId}\n className={cn(\n \"flex gap-3 p-3 duration-200 select-auto font-normal leading-normal\",\n useChoiceCard &&\n \"border rounded-lg hover:ring-2 hover:ring-ring/50\",\n useChoiceCard && isSelected && \"ring-2 ring-ring\",\n useChoiceCard && error && \"border-destructive\",\n isDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n )}\n >\n <div\n className={cn(\n \"flex w-full gap-3\",\n useChoiceCard ? \"items-start\" : \"items-center\",\n )}\n >\n <RadioGroupItem\n value={option.value}\n id={radioId}\n disabled={isDisabled}\n className=\"mt-0.5\"\n aria-describedby={\n hasDescription ? `${radioId}-description` : undefined\n }\n />\n <div className=\"flex-1 space-y-1\">\n <span className=\"text-sm font-medium leading-none\">\n {option.label}\n </span>\n {option.description && (\n <FieldDescription\n id={`${radioId}-description`}\n className=\"leading-snug\"\n >\n {option.description}\n </FieldDescription>\n )}\n </div>\n </div>\n </FieldLabel>\n );\n })}\n </RadioGroup>\n </div>\n );\n}\n\nRadio.displayName = \"Radio\";\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Switch as SwitchPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Switch component - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Only uses CSS variables that adapt automatically - NO hardcoded semantic colors\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\nfunction Switch({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n // Core structure - uses CSS variables\n \"peer group/switch inline-flex shrink-0 items-center rounded-full\",\n \"border border-transparent shadow-xs transition-all outline-none\",\n\n // State-based backgrounds - use CSS variables\n \"data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n\n // Focus state\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n\n // Size variants\n \"data-[size=default]:h-[1.15rem] data-[size=default]:w-8\",\n \"data-[size=sm]:h-3.5 data-[size=sm]:w-6\",\n\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n // Thumb appearance - inherits from parent theme\n \"bg-background pointer-events-none block rounded-full ring-0 transition-transform\",\n\n // Size variants\n \"group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3\",\n\n // Position based on state\n \"data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n )}\n />\n </SwitchPrimitive.Root>\n )\n}\n\nexport { Switch }\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport { Switch as SwitchPrimitive } from \"../components/ui/switch\";\nimport {\n Field,\n FieldDescription,\n FieldLabel,\n} from \"../components/ui/field\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Additional props specific to Switch\n */\nexport interface SwitchProps extends Omit<\n InputProps<boolean>,\n \"onChange\" | \"placeholder\"\n> {\n /**\n * Change handler - receives boolean checked state\n */\n onChange: (checked: boolean) => void;\n\n /**\n * Label text for the switch\n */\n label?: React.ReactNode;\n\n /**\n * Optional description text below the label\n */\n description?: React.ReactNode;\n\n /**\n * Size variant\n * @default \"default\"\n */\n size?: \"sm\" | \"default\";\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Switch - High-performance toggle input component (ShadCN-based)\n *\n * Built on ShadCN Switch with form-specific behavior:\n * - Error state handling\n * - Label and description support\n * - Form integration (onChange, onBlur)\n * - Full accessibility support\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { notifications: false } });\n *\n * <Switch\n * {...form.getFieldProps('notifications')}\n * label=\"Enable notifications\"\n * description=\"Receive email notifications for important updates\"\n * error={!!form.errors.notifications}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/switch\n */\nexport function Switch({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n label,\n description,\n size = \"default\",\n ...props\n}: SwitchProps) {\n const switchId = props.id || `switch-${name}`;\n\n const handleCheckedChange = (checked: boolean) => {\n onChange(checked);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const switchElement = (\n <SwitchPrimitive\n id={switchId}\n checked={value}\n onCheckedChange={handleCheckedChange}\n onBlur={handleBlur}\n disabled={disabled}\n size={size}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={\n description ? `${switchId}-description` : props[\"aria-describedby\"]\n }\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n\n // Without label, return just the switch\n if (!label) {\n return <Field className={className}>{switchElement}</Field>;\n }\n\n // With label, compose with Field primitives for consistent structure\n return (\n <Field className=\"gap-0\" invalid={Boolean(error)}>\n <FieldLabel\n htmlFor={switchId}\n className={cn(\n \"flex items-center gap-3 cursor-pointer select-auto font-normal leading-normal\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n )}\n >\n {switchElement}\n <Field className=\"gap-1\">\n <span className=\"text-sm font-medium leading-none\">{label}</span>\n {description && (\n <FieldDescription\n id={`${switchId}-description`}\n className=\"leading-snug\"\n >\n {description}\n </FieldDescription>\n )}\n </Field>\n </FieldLabel>\n </Field>\n );\n}\n\nSwitch.displayName = \"Switch\";\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Select as SelectPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Select components - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Only uses CSS variables that adapt automatically - NO hardcoded semantic colors\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\n\nfunction Select({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />\n}\n\nfunction SelectGroup({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />\n}\n\nfunction SelectValue({\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\"\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n // Core structure - uses CSS variables\n \"flex w-full items-center justify-between gap-2 rounded-md border border-input\",\n \"bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs\",\n \"transition-[color,box-shadow] outline-none\",\n\n // Focus state\n \"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\n // Error state\n \"aria-invalid:border-destructive aria-invalid:ring-destructive/20\",\n\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n\n // Size variants\n \"data-[size=default]:h-9 data-[size=sm]:h-8\",\n\n // Value styling\n \"*:data-[slot=select-value]:line-clamp-1\",\n \"*:data-[slot=select-value]:flex\",\n \"*:data-[slot=select-value]:items-center\",\n \"*:data-[slot=select-value]:gap-2\",\n\n // SVG styling\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <svg\n className=\"size-4 opacity-50\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n )\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"item-aligned\",\n align = \"center\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n )\n}\n\nfunction SelectLabel({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"px-2 py-1.5 text-xs opacity-70\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n // Core structure - inherits text color\n \"relative flex w-full cursor-default items-center gap-2 rounded-sm\",\n \"py-1.5 pr-8 pl-2 text-sm outline-hidden select-none\",\n\n // Focus state - uses accent CSS variable\n \"focus:bg-accent focus:text-accent-foreground\",\n\n // Disabled state\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\n // SVG styling\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\n // Span styling\n \"*:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"absolute right-2 flex size-3.5 items-center justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n )\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-border pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n </SelectPrimitive.ScrollUpButton>\n )\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </SelectPrimitive.ScrollDownButton>\n )\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport {\n Select as SelectPrimitive,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectTrigger,\n SelectValue,\n} from \"../components/ui/select\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * Select option type\n */\nexport interface SelectOption {\n value: string;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\n/**\n * Select option group type\n */\nexport interface SelectOptionGroup {\n label: string;\n options: SelectOption[];\n}\n\n/**\n * Additional props specific to Select\n */\nexport interface SelectProps extends Omit<\n InputProps<string>,\n \"onChange\" | \"onFocus\"\n> {\n onChange: (value: string) => void;\n onFocus?: () => void;\n options?: SelectOption[];\n optionGroups?: SelectOptionGroup[];\n placeholder?: string;\n renderOption?: (option: SelectOption) => React.ReactNode;\n [key: string]: any;\n}\n\n/**\n * Select - High-performance dropdown selection component (ShadCN-based)\n *\n * Built on ShadCN Select with form-specific behavior:\n * - Error state handling\n * - Valid value indicator (ring-2)\n * - Form integration (onChange, onBlur)\n * - Option groups support\n * - Full accessibility support\n *\n * NOTE: This is a simplified refactored version. For advanced features like\n * search, clearable, and loading states, use the Command component or MultiSelect.\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { country: '' } });\n *\n * <Select\n * {...form.getFieldProps('country')}\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'mx', label: 'Mexico' }\n * ]}\n * error={!!form.errors.country}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/select\n */\nexport function Select({\n name,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n placeholder = \"Select...\",\n options = [],\n optionGroups = [],\n renderOption,\n ...props\n}: SelectProps) {\n const [hasInteracted, setHasInteracted] = React.useState(false);\n\n // Flatten options from groups or use flat options\n const allOptions = React.useMemo(() => {\n if (optionGroups.length > 0) {\n return optionGroups.flatMap((group) => group.options);\n }\n return options;\n }, [options, optionGroups]);\n\n const hasValue = Boolean(value);\n\n // Ensure value is always a string or undefined for Radix\n const selectValue = value ? String(value) : undefined;\n\n const handleValueChange = (newValue: string) => {\n onChange(newValue);\n };\n\n const handleOpenChange = (open: boolean) => {\n if (open) {\n // Mark as interacted when dropdown opens\n if (!hasInteracted) {\n setHasInteracted(true);\n }\n onFocus?.();\n } else if (hasInteracted) {\n // Only trigger onBlur validation if user has interacted\n onBlur?.();\n }\n };\n\n return (\n <>\n {/* Hidden input for form submission */}\n <input\n type=\"hidden\"\n name={name}\n value={value ?? \"\"}\n disabled={disabled}\n required={required}\n tabIndex={-1}\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n border: \"0\",\n }}\n />\n <SelectPrimitive\n value={selectValue}\n onValueChange={handleValueChange}\n onOpenChange={handleOpenChange}\n disabled={disabled}\n >\n <SelectTrigger\n className={cn(\n // Valid value indicator - ring-2 when has value and no error\n !error && hasValue && \"ring-2 ring-ring\",\n // Error state - handled by SelectTrigger via aria-invalid\n className,\n )}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {optionGroups.length > 0 ? (\n // Render grouped options\n optionGroups.map((group, groupIndex) => (\n <SelectGroup key={groupIndex}>\n <SelectLabel>{group.label}</SelectLabel>\n {group.options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </SelectItem>\n ))}\n </SelectGroup>\n ))\n ) : (\n // Render flat options\n allOptions.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </SelectItem>\n ))\n )}\n </SelectContent>\n </SelectPrimitive>\n </>\n );\n}\n\nSelect.displayName = \"Select\";\n","import * as React from \"react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button } from \"./button\"\n\n/**\n * Dialog components - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Uses bg-background which adapts to theme\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => {\n return (\n <DialogPrimitive.Overlay\n ref={ref}\n data-slot=\"dialog-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n})\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n }\n>(({ className, children, showCloseButton = true, ...props }, ref) => {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <svg\n className=\"size-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n})\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm opacity-70\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n","import * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\n\nimport { cn } from \"../../lib/utils\"\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\"\n\n/**\n * Command components - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Uses bg-popover/text-popover-foreground which adapt to theme\n * Only uses opacity for muted text, no hardcoded semantic colors\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string\n description?: string\n className?: string\n showCloseButton?: boolean\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:opacity-70 **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <svg\n className=\"size-4 shrink-0 opacity-50\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n )\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:opacity-70\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n )\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"ml-auto text-xs tracking-widest opacity-70\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","import * as React from \"react\"\nimport { Popover as PopoverPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\n/**\n * Popover components - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Popover content uses bg-popover/text-popover-foreground which adapt to theme\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\n\nfunction Popover({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />\n}\n\nfunction PopoverTrigger({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />\n}\n\nfunction PopoverContent({\n className,\n align = \"center\",\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n )\n}\n\nfunction PopoverAnchor({\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />\n}\n\nfunction PopoverHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"popover-header\"\n className={cn(\"flex flex-col gap-1 text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return (\n <div\n data-slot=\"popover-title\"\n className={cn(\"font-medium\", className)}\n {...props}\n />\n )\n}\n\nfunction PopoverDescription({\n className,\n ...props\n}: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"popover-description\"\n className={cn(\"opacity-70\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n PopoverHeader,\n PopoverTitle,\n PopoverDescription,\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandList,\n} from \"../components/ui/command\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover\";\nimport { cn, INPUT_AUTOFILL_RESET_CLASSES } from \"../lib/utils\";\n\n/**\n * Multi-select option type\n */\nexport interface MultiSelectOption {\n /**\n * The value for this option\n */\n value: string;\n\n /**\n * Display label for the option\n */\n label: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Multi-select option group type for organizing options\n */\nexport interface MultiSelectOptionGroup {\n /**\n * Group label\n */\n label: string;\n\n /**\n * Options in this group\n */\n options: MultiSelectOption[];\n}\n\n/**\n * Additional props specific to MultiSelect\n */\nexport interface MultiSelectProps extends Omit<\n InputProps<string[]>,\n \"onChange\" | \"onFocus\"\n> {\n /**\n * Change handler - receives array of selected values\n */\n onChange: (value: string[]) => void;\n\n /**\n * Focus handler\n */\n onFocus?: () => void;\n\n /**\n * Array of select options (flat structure)\n */\n options?: MultiSelectOption[];\n\n /**\n * Array of option groups (grouped structure)\n */\n optionGroups?: MultiSelectOptionGroup[];\n\n /**\n * Placeholder text when no options are selected\n * @default \"Select...\"\n */\n placeholder?: string;\n\n /**\n * Enable search/filter functionality\n * @default true\n */\n searchable?: boolean;\n\n /**\n * Enable clearable button to reset all selections\n * @default true\n */\n clearable?: boolean;\n\n /**\n * Loading state for async options\n * @default false\n */\n loading?: boolean;\n\n /**\n * Maximum number of selections allowed\n */\n maxSelections?: number;\n\n /**\n * Show \"Select All\" button\n * @default false\n */\n showSelectAll?: boolean;\n\n /**\n * Custom render function for options\n */\n renderOption?: (option: MultiSelectOption) => React.ReactNode;\n\n /**\n * Custom render function for selected value chips/tags\n */\n renderValue?: (option: MultiSelectOption) => React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\nfunction ensureResizeObserver() {\n if (typeof window === \"undefined\") return;\n\n const windowWithResizeObserver = window as unknown as {\n ResizeObserver?: new (...args: any[]) => {\n observe: (...args: any[]) => void;\n unobserve: (...args: any[]) => void;\n disconnect: () => void;\n };\n };\n\n if (windowWithResizeObserver.ResizeObserver) return;\n\n windowWithResizeObserver.ResizeObserver = class ResizeObserverMock {\n observe() {}\n unobserve() {}\n disconnect() {}\n };\n\n if (\n typeof HTMLElement !== \"undefined\" &&\n typeof HTMLElement.prototype.scrollIntoView !== \"function\"\n ) {\n HTMLElement.prototype.scrollIntoView = () => {};\n }\n}\n\nfunction optionLabelText(option: MultiSelectOption): string {\n if (typeof option.label === \"string\") {\n return option.label;\n }\n return String(option.label);\n}\n\n/**\n * MultiSelect - ShadCN Command + Popover multi-select component\n */\nexport function MultiSelect({\n name,\n value = [],\n onChange,\n onBlur,\n onFocus,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n placeholder = \"Select...\",\n searchable = true,\n clearable = true,\n loading = false,\n maxSelections,\n showSelectAll = false,\n options = [],\n optionGroups = [],\n renderOption,\n renderValue,\n ...props\n}: MultiSelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n const [focusedIndex, setFocusedIndex] = React.useState(-1);\n const [hasInteracted, setHasInteracted] = React.useState(false);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const dropdownId = `${name}-dropdown`;\n const searchInputId = `${name}-search`;\n\n ensureResizeObserver();\n\n // Flatten options from groups or use flat options\n const allOptions = React.useMemo(() => {\n if (optionGroups.length > 0) {\n return optionGroups.flatMap((group) => group.options);\n }\n return options;\n }, [options, optionGroups]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery.trim()) {\n return allOptions;\n }\n\n const query = searchQuery.toLowerCase();\n return allOptions.filter((option) =>\n optionLabelText(option).toLowerCase().includes(query),\n );\n }, [allOptions, searchQuery]);\n\n // Get selected options\n const selectedOptions = React.useMemo(() => {\n return allOptions.filter((option) => value.includes(option.value));\n }, [allOptions, value]);\n\n const hasValue = value.length > 0;\n\n // Check if max selections reached\n const isMaxReached = React.useMemo(() => {\n return maxSelections !== undefined && value.length >= maxSelections;\n }, [maxSelections, value.length]);\n\n const getEnabledOptions = React.useCallback(() => {\n return filteredOptions.filter(\n (option) => !option.disabled && (!isMaxReached || value.includes(option.value)),\n );\n }, [filteredOptions, isMaxReached, value]);\n\n React.useEffect(() => {\n if (!isOpen) return;\n if (!searchable) return;\n\n const id = window.setTimeout(() => {\n const searchInput = document.getElementById(\n searchInputId,\n ) as HTMLInputElement | null;\n searchInput?.focus();\n }, 0);\n\n return () => {\n window.clearTimeout(id);\n };\n }, [isOpen, searchable, searchInputId]);\n\n // Handle option selection toggle\n const handleToggleOption = React.useCallback(\n (optionValue: string) => {\n const isSelected = value.includes(optionValue);\n\n if (isSelected) {\n onChange(value.filter((entry) => entry !== optionValue));\n } else if (!isMaxReached) {\n onChange([...value, optionValue]);\n }\n\n // Reset search after selection\n setSearchQuery(\"\");\n },\n [isMaxReached, onChange, value],\n );\n\n // Handle select all\n const handleSelectAll = React.useCallback(() => {\n const enabledOptions = filteredOptions.filter((option) => !option.disabled);\n onChange(enabledOptions.map((option) => option.value));\n setSearchQuery(\"\");\n }, [filteredOptions, onChange]);\n\n // Handle clear all\n const handleClearAll = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange([]);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n },\n [onChange],\n );\n\n // Handle remove single value\n const handleRemoveValue = React.useCallback(\n (optionValue: string, e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(value.filter((entry) => entry !== optionValue));\n },\n [onChange, value],\n );\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (disabled) {\n setIsOpen(false);\n return;\n }\n\n if (nextOpen) {\n if (!hasInteracted) {\n setHasInteracted(true);\n }\n setIsOpen(true);\n onFocus?.();\n return;\n }\n\n if (isOpen && hasInteracted) {\n onBlur?.();\n }\n\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n },\n [disabled, hasInteracted, isOpen, onBlur, onFocus],\n );\n\n const handleTriggerBlur = React.useCallback(() => {\n if (!isOpen) {\n onBlur?.();\n }\n }, [isOpen, onBlur]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n const enabledOptions = getEnabledOptions();\n\n switch (event.key) {\n case \"ArrowDown\": {\n event.preventDefault();\n\n if (!isOpen) {\n setHasInteracted(true);\n setIsOpen(true);\n onFocus?.();\n if (enabledOptions.length > 0) {\n setFocusedIndex(filteredOptions.indexOf(enabledOptions[0]));\n }\n return;\n }\n\n if (enabledOptions.length === 0) return;\n\n const currentOption = filteredOptions[focusedIndex];\n const currentEnabledIndex = enabledOptions.findIndex(\n (option) => option === currentOption,\n );\n const nextEnabledIndex =\n currentEnabledIndex === -1\n ? 0\n : (currentEnabledIndex + 1) % enabledOptions.length;\n setFocusedIndex(filteredOptions.indexOf(enabledOptions[nextEnabledIndex]));\n break;\n }\n\n case \"ArrowUp\": {\n event.preventDefault();\n\n if (!isOpen || enabledOptions.length === 0) return;\n\n const currentOption = filteredOptions[focusedIndex];\n const currentEnabledIndex = enabledOptions.findIndex(\n (option) => option === currentOption,\n );\n const previousEnabledIndex =\n currentEnabledIndex === -1\n ? enabledOptions.length - 1\n : (currentEnabledIndex - 1 + enabledOptions.length) %\n enabledOptions.length;\n setFocusedIndex(\n filteredOptions.indexOf(enabledOptions[previousEnabledIndex]),\n );\n break;\n }\n\n case \"Enter\": {\n event.preventDefault();\n\n if (\n isOpen &&\n focusedIndex >= 0 &&\n focusedIndex < filteredOptions.length\n ) {\n const focusedOption = filteredOptions[focusedIndex];\n const optionDisabled =\n focusedOption.disabled ||\n (isMaxReached && !value.includes(focusedOption.value));\n\n if (!optionDisabled) {\n handleToggleOption(focusedOption.value);\n }\n return;\n }\n\n if (!isOpen) {\n setHasInteracted(true);\n setIsOpen(true);\n onFocus?.();\n }\n break;\n }\n\n case \"Escape\": {\n if (!isOpen) return;\n event.preventDefault();\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n break;\n }\n\n case \" \": {\n if (\n isOpen &&\n focusedIndex >= 0 &&\n focusedIndex < filteredOptions.length\n ) {\n event.preventDefault();\n const focusedOption = filteredOptions[focusedIndex];\n const optionDisabled =\n focusedOption.disabled ||\n (isMaxReached && !value.includes(focusedOption.value));\n\n if (!optionDisabled) {\n handleToggleOption(focusedOption.value);\n }\n return;\n }\n\n if (!isOpen && !searchable) {\n event.preventDefault();\n setHasInteracted(true);\n setIsOpen(true);\n onFocus?.();\n }\n break;\n }\n }\n },\n [\n disabled,\n filteredOptions,\n focusedIndex,\n getEnabledOptions,\n handleToggleOption,\n isMaxReached,\n isOpen,\n onFocus,\n searchable,\n value,\n ],\n );\n\n const combinedClassName = cn(\"relative w-full\", className);\n\n return (\n <div className={combinedClassName}>\n {/* Hidden native select for form submission */}\n <select\n name={name}\n value={value}\n onChange={() => {}}\n disabled={disabled}\n required={required}\n aria-hidden=\"true\"\n tabIndex={-1}\n style={{ display: \"none\" }}\n multiple\n >\n <option value=\"\">Select...</option>\n {allOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {optionLabelText(option)}\n </option>\n ))}\n </select>\n\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <div\n ref={triggerRef}\n className={cn(\n \"flex min-h-9 w-full items-center justify-between rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm\",\n \"cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n !error && hasValue && \"ring-2 ring-ring\",\n disabled && \"cursor-not-allowed opacity-50 pointer-events-none\",\n error && \"border-destructive ring-1 ring-destructive\",\n )}\n onKeyDown={handleKeyDown}\n onBlur={handleTriggerBlur}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={dropdownId}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n >\n <div className=\"flex flex-1 items-center overflow-hidden\">\n {selectedOptions.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {selectedOptions.map((option) => (\n <span\n key={option.value}\n className=\"inline-flex items-center gap-1 rounded px-2 py-0.5 text-xs font-medium\"\n >\n {renderValue ? (\n renderValue(option)\n ) : (\n <>\n <span className=\"max-w-40 overflow-hidden text-ellipsis whitespace-nowrap\">\n {option.label}\n </span>\n {!disabled && (\n <button\n type=\"button\"\n className=\"flex h-3.5 w-3.5 items-center justify-center rounded-sm border-none bg-transparent p-0 text-[0.625rem] transition-opacity hover:opacity-70\"\n onClick={(e) => handleRemoveValue(option.value, e)}\n aria-label={`Remove ${optionLabelText(option)}`}\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n </>\n )}\n </span>\n ))}\n </div>\n ) : (\n <span className=\"relative\">{placeholder}</span>\n )}\n </div>\n\n <div className=\"ml-2 flex items-center gap-1\">\n {loading && <span className=\"text-xs\">⏳</span>}\n {clearable && value.length > 0 && !disabled && !loading && (\n <button\n type=\"button\"\n className=\"flex h-4 w-4 items-center justify-center rounded-sm border-none bg-transparent p-0 text-xs transition-opacity hover:opacity-70\"\n onClick={handleClearAll}\n aria-label=\"Clear all selections\"\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n <span className=\"text-xs leading-none\" aria-hidden=\"true\">\n {isOpen ? \"▲\" : \"▼\"}\n </span>\n </div>\n </div>\n </PopoverTrigger>\n\n {isOpen && (\n <PopoverContent\n id={dropdownId}\n align=\"start\"\n sideOffset={4}\n className=\"w-full min-w-[var(--radix-popover-trigger-width)] p-0\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Command\n shouldFilter={false}\n className=\"max-h-80\"\n onKeyDown={handleKeyDown}\n >\n {searchable && (\n <CommandInput\n id={searchInputId}\n className={cn(INPUT_AUTOFILL_RESET_CLASSES)}\n placeholder=\"Search...\"\n value={searchQuery}\n onValueChange={(nextValue) => {\n setSearchQuery(nextValue);\n setFocusedIndex(0);\n }}\n aria-label=\"Search options\"\n />\n )}\n\n {showSelectAll && filteredOptions.length > 0 && (\n <div className=\"flex gap-2 border-b border-input p-2\">\n <button\n type=\"button\"\n className=\"flex-1 rounded border border-input bg-transparent px-3 py-1.5 text-xs font-medium transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50\"\n onClick={handleSelectAll}\n disabled={disabled}\n >\n Select All\n </button>\n {value.length > 0 && (\n <button\n type=\"button\"\n className=\"flex-1 rounded border border-input bg-transparent px-3 py-1.5 text-xs font-medium transition-colors hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50\"\n onClick={handleClearAll}\n disabled={disabled}\n >\n Clear All\n </button>\n )}\n </div>\n )}\n\n {isMaxReached && (\n <div className=\"border-b border-destructive bg-destructive/80 px-2 py-1 text-xs font-medium text-destructive-foreground\">\n Maximum {maxSelections} selection{maxSelections !== 1 ? \"s\" : \"\"}{\" \"}\n reached\n </div>\n )}\n\n <CommandList role=\"listbox\" aria-multiselectable=\"true\">\n <CommandEmpty>No options found</CommandEmpty>\n\n {optionGroups.length > 0\n ? optionGroups.map((group, groupIndex) => {\n const groupOptions = group.options.filter((option) =>\n filteredOptions.includes(option),\n );\n if (groupOptions.length === 0) return null;\n\n return (\n <CommandGroup\n key={`${group.label}-${groupIndex}`}\n heading={group.label}\n >\n {groupOptions.map((option) => {\n const globalIndex = filteredOptions.indexOf(option);\n const isSelected = value.includes(option.value);\n const isFocused = globalIndex === focusedIndex;\n const optionDisabled =\n option.disabled || (isMaxReached && !isSelected);\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={optionDisabled}\n onMouseEnter={() => {\n setFocusedIndex(globalIndex);\n }}\n onClick={() => {\n if (!optionDisabled) {\n handleToggleOption(option.value);\n }\n }}\n className={cn(\n \"relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent\",\n isFocused && \"bg-accent\",\n isSelected && \"bg-accent font-medium\",\n optionDisabled &&\n \"pointer-events-none opacity-50\",\n )}\n >\n <span className=\"text-base leading-none\">\n {isSelected ? \"☑\" : \"☐\"}\n </span>\n <span className=\"flex-1\">\n {renderOption\n ? renderOption(option)\n : option.label}\n </span>\n </div>\n );\n })}\n </CommandGroup>\n );\n })\n : filteredOptions.map((option, index) => {\n const isSelected = value.includes(option.value);\n const isFocused = index === focusedIndex;\n const optionDisabled =\n option.disabled || (isMaxReached && !isSelected);\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={optionDisabled}\n onMouseEnter={() => {\n setFocusedIndex(index);\n }}\n onClick={() => {\n if (!optionDisabled) {\n handleToggleOption(option.value);\n }\n }}\n className={cn(\n \"relative flex w-full cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent\",\n isFocused && \"bg-accent\",\n isSelected && \"bg-accent font-medium\",\n optionDisabled && \"pointer-events-none opacity-50\",\n )}\n >\n <span className=\"text-base leading-none\">\n {isSelected ? \"☑\" : \"☐\"}\n </span>\n <span className=\"flex-1\">\n {renderOption ? renderOption(option) : option.label}\n </span>\n </div>\n );\n })}\n </CommandList>\n </Command>\n </PopoverContent>\n )}\n </Popover>\n </div>\n );\n}\n\nMultiSelect.displayName = \"MultiSelect\";\n","import * as React from \"react\";\n\nconst useIsomorphicLayoutEffect =\n typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","import * as React from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"./use-isomorphic-layout-effect\";\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nexport { useAsRef };\n","import * as React from \"react\";\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\nexport { useLazyRef };\n","\"use client\";\n\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useAsRef } from \"../../hooks/use-as-ref\";\nimport { useLazyRef } from \"../../hooks/use-lazy-ref\";\n\nconst ROOT_NAME = \"FileUpload\";\nconst DROPZONE_NAME = \"FileUploadDropzone\";\nconst TRIGGER_NAME = \"FileUploadTrigger\";\nconst LIST_NAME = \"FileUploadList\";\nconst ITEM_NAME = \"FileUploadItem\";\nconst ITEM_PREVIEW_NAME = \"FileUploadItemPreview\";\nconst ITEM_METADATA_NAME = \"FileUploadItemMetadata\";\nconst ITEM_PROGRESS_NAME = \"FileUploadItemProgress\";\nconst ITEM_DELETE_NAME = \"FileUploadItemDelete\";\nconst CLEAR_NAME = \"FileUploadClear\";\n\nfunction BaseFileIcon({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={cn(\"size-5\", className)}\n aria-hidden=\"true\"\n >\n {children}\n </svg>\n );\n}\n\nfunction FileVideoIcon() {\n return (\n <BaseFileIcon>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <rect x=\"8\" y=\"12\" width=\"6\" height=\"4\" rx=\"1\" />\n <path d=\"m14 13 3-1.5v5L14 15\" />\n </BaseFileIcon>\n );\n}\n\nfunction FileAudioIcon() {\n return (\n <BaseFileIcon>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <path d=\"M10 16a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z\" />\n <path d=\"M13 17V11l3-1\" />\n </BaseFileIcon>\n );\n}\n\nfunction FileTextIcon() {\n return (\n <BaseFileIcon>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\n <line x1=\"8\" y1=\"17\" x2=\"14\" y2=\"17\" />\n </BaseFileIcon>\n );\n}\n\nfunction FileCodeIcon() {\n return (\n <BaseFileIcon>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <polyline points=\"11 14 9 16 11 18\" />\n <polyline points=\"13 14 15 16 13 18\" />\n </BaseFileIcon>\n );\n}\n\nfunction FileArchiveIcon() {\n return (\n <BaseFileIcon>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <rect x=\"9\" y=\"11\" width=\"6\" height=\"2\" />\n <path d=\"M12 13v5\" />\n </BaseFileIcon>\n );\n}\n\nfunction FileCogIcon() {\n return (\n <BaseFileIcon>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <circle cx=\"12\" cy=\"16\" r=\"2\" />\n <path d=\"m12 12 .4.9m2.7 1.1 .9.4m-.9 2.7-.9.4m-2.7 1.1-.4.9m-2.3-.9-.4-.9m-2.7-1.1-.9-.4m.9-2.7.9-.4m2.7-1.1.4-.9\" />\n </BaseFileIcon>\n );\n}\n\nfunction FileIcon() {\n return (\n <BaseFileIcon>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n </BaseFileIcon>\n );\n}\n\nfunction formatBytes(bytes: number) {\n if (bytes === 0) return \"0 B\";\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return `${(bytes / 1024 ** i).toFixed(i ? 1 : 0)} ${sizes[i]}`;\n}\n\nfunction getFileIcon(file: File) {\n const type = file.type;\n const extension = file.name.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n if (type.startsWith(\"video/\")) {\n return <FileVideoIcon />;\n }\n\n if (type.startsWith(\"audio/\")) {\n return <FileAudioIcon />;\n }\n\n if (\n type.startsWith(\"text/\") ||\n [\"txt\", \"md\", \"rtf\", \"pdf\"].includes(extension)\n ) {\n return <FileTextIcon />;\n }\n\n if (\n [\n \"html\",\n \"css\",\n \"js\",\n \"jsx\",\n \"ts\",\n \"tsx\",\n \"json\",\n \"xml\",\n \"php\",\n \"py\",\n \"rb\",\n \"java\",\n \"c\",\n \"cpp\",\n \"cs\",\n ].includes(extension)\n ) {\n return <FileCodeIcon />;\n }\n\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\"].includes(extension)) {\n return <FileArchiveIcon />;\n }\n\n if (\n [\"exe\", \"msi\", \"app\", \"apk\", \"deb\", \"rpm\"].includes(extension) ||\n type.startsWith(\"application/\")\n ) {\n return <FileCogIcon />;\n }\n\n return <FileIcon />;\n}\n\ntype Direction = \"ltr\" | \"rtl\";\n\ninterface FileState {\n file: File;\n progress: number;\n error?: string;\n status: \"idle\" | \"uploading\" | \"error\" | \"success\";\n}\n\ninterface StoreState {\n files: Map<File, FileState>;\n dragOver: boolean;\n invalid: boolean;\n}\n\ntype StoreAction =\n | { type: \"ADD_FILES\"; files: File[] }\n | { type: \"SET_FILES\"; files: File[] }\n | { type: \"SET_PROGRESS\"; file: File; progress: number }\n | { type: \"SET_SUCCESS\"; file: File }\n | { type: \"SET_ERROR\"; file: File; error: string }\n | { type: \"REMOVE_FILE\"; file: File }\n | { type: \"SET_DRAG_OVER\"; dragOver: boolean }\n | { type: \"SET_INVALID\"; invalid: boolean }\n | { type: \"CLEAR\" };\n\ntype Store = {\n getState: () => StoreState;\n dispatch: (action: StoreAction) => void;\n subscribe: (listener: () => void) => () => void;\n};\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const lastValueRef = useLazyRef<{ value: T; state: StoreState } | null>(\n () => null,\n );\n\n const getSnapshot = React.useCallback(() => {\n const state = store.getState();\n const prevValue = lastValueRef.current;\n\n if (prevValue && prevValue.state === state) {\n return prevValue.value;\n }\n\n const nextValue = selector(state);\n lastValueRef.current = { value: nextValue, state };\n return nextValue;\n }, [store, selector, lastValueRef]);\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\ninterface FileUploadContextValue {\n inputId: string;\n dropzoneId: string;\n listId: string;\n labelId: string;\n disabled: boolean;\n dir: Direction;\n inputRef: React.RefObject<HTMLInputElement | null>;\n urlCache: WeakMap<File, string>;\n}\n\nconst FileUploadContext = React.createContext<FileUploadContextValue | null>(\n null,\n);\n\nfunction useFileUploadContext(consumerName: string) {\n const context = React.useContext(FileUploadContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface FileUploadProps\n extends Omit<React.ComponentProps<\"div\">, \"defaultValue\" | \"onChange\"> {\n value?: File[];\n defaultValue?: File[];\n onValueChange?: (files: File[]) => void;\n onAccept?: (files: File[]) => void;\n onFileAccept?: (file: File) => void;\n onFileReject?: (file: File, message: string) => void;\n onFileValidate?: (file: File) => string | null | undefined;\n onUpload?: (\n files: File[],\n options: {\n onProgress: (file: File, progress: number) => void;\n onSuccess: (file: File) => void;\n onError: (file: File, error: Error) => void;\n },\n ) => Promise<void> | void;\n accept?: string;\n maxFiles?: number;\n maxSize?: number;\n dir?: Direction;\n label?: string;\n name?: string;\n asChild?: boolean;\n disabled?: boolean;\n invalid?: boolean;\n multiple?: boolean;\n required?: boolean;\n inputProps?: Omit<\n React.ComponentProps<\"input\">,\n | \"type\"\n | \"id\"\n | \"ref\"\n | \"tabIndex\"\n | \"accept\"\n | \"name\"\n | \"disabled\"\n | \"multiple\"\n | \"required\"\n | \"onChange\"\n >;\n}\n\nfunction FileUpload(props: FileUploadProps) {\n const {\n value,\n defaultValue,\n onValueChange,\n onAccept,\n onFileAccept,\n onFileReject,\n onFileValidate,\n onUpload,\n accept,\n maxFiles,\n maxSize,\n dir: dirProp,\n label,\n name,\n asChild,\n disabled = false,\n invalid = false,\n multiple = false,\n required = false,\n inputProps,\n children,\n className,\n ...rootProps\n } = props;\n\n const inputId = React.useId();\n const dropzoneId = React.useId();\n const listId = React.useId();\n const labelId = React.useId();\n\n const dir = useDirection(dirProp);\n const listeners = useLazyRef(() => new Set<() => void>()).current;\n const files = useLazyRef<Map<File, FileState>>(() => new Map()).current;\n const urlCache = useLazyRef(() => new WeakMap<File, string>()).current;\n const inputRef = React.useRef<HTMLInputElement>(null);\n const isControlled = value !== undefined;\n\n const propsRef = useAsRef({\n onValueChange,\n onAccept,\n onFileAccept,\n onFileReject,\n onFileValidate,\n onUpload,\n });\n\n const store = React.useMemo<Store>(() => {\n let state: StoreState = {\n files,\n dragOver: false,\n invalid: invalid,\n };\n\n function reducer(state: StoreState, action: StoreAction): StoreState {\n switch (action.type) {\n case \"ADD_FILES\": {\n for (const file of action.files) {\n files.set(file, {\n file,\n progress: 0,\n status: \"idle\",\n });\n }\n\n if (propsRef.current.onValueChange) {\n const fileList = Array.from(files.values()).map(\n (fileState) => fileState.file,\n );\n propsRef.current.onValueChange(fileList);\n }\n return { ...state, files };\n }\n\n case \"SET_FILES\": {\n const newFileSet = new Set(action.files);\n for (const existingFile of files.keys()) {\n if (!newFileSet.has(existingFile)) {\n files.delete(existingFile);\n }\n }\n\n for (const file of action.files) {\n const existingState = files.get(file);\n if (!existingState) {\n files.set(file, {\n file,\n progress: 0,\n status: \"idle\",\n });\n }\n }\n return { ...state, files };\n }\n\n case \"SET_PROGRESS\": {\n const fileState = files.get(action.file);\n if (fileState) {\n files.set(action.file, {\n ...fileState,\n progress: action.progress,\n status: \"uploading\",\n });\n }\n return { ...state, files };\n }\n\n case \"SET_SUCCESS\": {\n const fileState = files.get(action.file);\n if (fileState) {\n files.set(action.file, {\n ...fileState,\n progress: 100,\n status: \"success\",\n });\n }\n return { ...state, files };\n }\n\n case \"SET_ERROR\": {\n const fileState = files.get(action.file);\n if (fileState) {\n files.set(action.file, {\n ...fileState,\n error: action.error,\n status: \"error\",\n });\n }\n return { ...state, files };\n }\n\n case \"REMOVE_FILE\": {\n const cachedUrl = urlCache.get(action.file);\n if (cachedUrl) {\n URL.revokeObjectURL(cachedUrl);\n urlCache.delete(action.file);\n }\n\n files.delete(action.file);\n\n if (propsRef.current.onValueChange) {\n const fileList = Array.from(files.values()).map(\n (fileState) => fileState.file,\n );\n propsRef.current.onValueChange(fileList);\n }\n return { ...state, files };\n }\n\n case \"SET_DRAG_OVER\": {\n return { ...state, dragOver: action.dragOver };\n }\n\n case \"SET_INVALID\": {\n return { ...state, invalid: action.invalid };\n }\n\n case \"CLEAR\": {\n for (const file of files.keys()) {\n const cachedUrl = urlCache.get(file);\n if (cachedUrl) {\n URL.revokeObjectURL(cachedUrl);\n urlCache.delete(file);\n }\n }\n\n files.clear();\n if (propsRef.current.onValueChange) {\n propsRef.current.onValueChange([]);\n }\n return { ...state, files, invalid: false };\n }\n\n default:\n return state;\n }\n }\n\n return {\n getState: () => state,\n dispatch: (action) => {\n state = reducer(state, action);\n for (const listener of listeners) {\n listener();\n }\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n }, [listeners, files, invalid, propsRef, urlCache]);\n\n const acceptTypes = React.useMemo(\n () => accept?.split(\",\").map((t) => t.trim()) ?? null,\n [accept],\n );\n\n const onProgress = useLazyRef(() => {\n let frame = 0;\n return (file: File, progress: number) => {\n if (frame) return;\n frame = requestAnimationFrame(() => {\n frame = 0;\n store.dispatch({\n type: \"SET_PROGRESS\",\n file,\n progress: Math.min(Math.max(0, progress), 100),\n });\n });\n };\n }).current;\n\n React.useEffect(() => {\n if (isControlled) {\n store.dispatch({ type: \"SET_FILES\", files: value });\n } else if (\n defaultValue &&\n defaultValue.length > 0 &&\n !store.getState().files.size\n ) {\n store.dispatch({ type: \"SET_FILES\", files: defaultValue });\n }\n }, [value, defaultValue, isControlled, store]);\n\n React.useEffect(() => {\n return () => {\n for (const file of files.keys()) {\n const cachedUrl = urlCache.get(file);\n if (cachedUrl) {\n URL.revokeObjectURL(cachedUrl);\n }\n }\n };\n }, [files, urlCache]);\n\n const onFilesUpload = React.useCallback(\n async (files: File[]) => {\n try {\n for (const file of files) {\n store.dispatch({ type: \"SET_PROGRESS\", file, progress: 0 });\n }\n\n if (propsRef.current.onUpload) {\n await propsRef.current.onUpload(files, {\n onProgress,\n onSuccess: (file) => {\n store.dispatch({ type: \"SET_SUCCESS\", file });\n },\n onError: (file, error) => {\n store.dispatch({\n type: \"SET_ERROR\",\n file,\n error: error.message ?? \"Upload failed\",\n });\n },\n });\n } else {\n for (const file of files) {\n store.dispatch({ type: \"SET_SUCCESS\", file });\n }\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Upload failed\";\n for (const file of files) {\n store.dispatch({\n type: \"SET_ERROR\",\n file,\n error: errorMessage,\n });\n }\n }\n },\n [store, propsRef, onProgress],\n );\n\n const onFilesChange = React.useCallback(\n (originalFiles: File[]) => {\n if (disabled) return;\n\n let filesToProcess = [...originalFiles];\n let invalid = false;\n\n if (maxFiles) {\n const currentCount = store.getState().files.size;\n const remainingSlotCount = Math.max(0, maxFiles - currentCount);\n\n if (remainingSlotCount < filesToProcess.length) {\n const rejectedFiles = filesToProcess.slice(remainingSlotCount);\n invalid = true;\n\n filesToProcess = filesToProcess.slice(0, remainingSlotCount);\n\n for (const file of rejectedFiles) {\n let rejectionMessage = `Maximum ${maxFiles} files allowed`;\n\n if (propsRef.current.onFileValidate) {\n const validationMessage = propsRef.current.onFileValidate(file);\n if (validationMessage) {\n rejectionMessage = validationMessage;\n }\n }\n\n propsRef.current.onFileReject?.(file, rejectionMessage);\n }\n }\n }\n\n const acceptedFiles: File[] = [];\n const rejectedFiles: { file: File; message: string }[] = [];\n\n for (const file of filesToProcess) {\n let rejected = false;\n let rejectionMessage = \"\";\n\n if (propsRef.current.onFileValidate) {\n const validationMessage = propsRef.current.onFileValidate(file);\n if (validationMessage) {\n rejectionMessage = validationMessage;\n propsRef.current.onFileReject?.(file, rejectionMessage);\n rejected = true;\n invalid = true;\n continue;\n }\n }\n\n if (acceptTypes) {\n const fileType = file.type;\n const fileExtension = `.${file.name.split(\".\").pop()}`;\n\n if (\n !acceptTypes.some(\n (type) =>\n type === fileType ||\n type === fileExtension ||\n (type.includes(\"/*\") &&\n fileType.startsWith(type.replace(\"/*\", \"/\"))),\n )\n ) {\n rejectionMessage = \"File type not accepted\";\n propsRef.current.onFileReject?.(file, rejectionMessage);\n rejected = true;\n invalid = true;\n }\n }\n\n if (maxSize && file.size > maxSize) {\n rejectionMessage = \"File too large\";\n propsRef.current.onFileReject?.(file, rejectionMessage);\n rejected = true;\n invalid = true;\n }\n\n if (!rejected) {\n acceptedFiles.push(file);\n } else {\n rejectedFiles.push({ file, message: rejectionMessage });\n }\n }\n\n if (invalid) {\n store.dispatch({ type: \"SET_INVALID\", invalid });\n setTimeout(() => {\n store.dispatch({ type: \"SET_INVALID\", invalid: false });\n }, 2000);\n }\n\n if (acceptedFiles.length > 0) {\n store.dispatch({ type: \"ADD_FILES\", files: acceptedFiles });\n\n if (isControlled && propsRef.current.onValueChange) {\n const currentFiles = Array.from(store.getState().files.values()).map(\n (f) => f.file,\n );\n propsRef.current.onValueChange([...currentFiles]);\n }\n\n if (propsRef.current.onAccept) {\n propsRef.current.onAccept(acceptedFiles);\n }\n\n for (const file of acceptedFiles) {\n propsRef.current.onFileAccept?.(file);\n }\n\n if (propsRef.current.onUpload) {\n requestAnimationFrame(() => {\n onFilesUpload(acceptedFiles);\n });\n }\n }\n },\n [\n store,\n isControlled,\n propsRef,\n onFilesUpload,\n maxFiles,\n acceptTypes,\n maxSize,\n disabled,\n ],\n );\n\n const onInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files ?? []);\n onFilesChange(files);\n event.target.value = \"\";\n },\n [onFilesChange],\n );\n\n const contextValue = React.useMemo<FileUploadContextValue>(\n () => ({\n dropzoneId,\n inputId,\n listId,\n labelId,\n dir,\n disabled,\n inputRef,\n urlCache,\n }),\n [dropzoneId, inputId, listId, labelId, dir, disabled, urlCache],\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n const inputAriaDescribedBy = [\n contextValue.dropzoneId,\n inputProps?.[\"aria-describedby\"],\n ]\n .filter(Boolean)\n .join(\" \")\n .trim();\n\n return (\n <StoreContext.Provider value={store}>\n <FileUploadContext.Provider value={contextValue}>\n <RootPrimitive\n data-disabled={disabled ? \"\" : undefined}\n data-slot=\"file-upload\"\n dir={dir}\n {...rootProps}\n className={cn(\"relative flex flex-col gap-2\", className)}\n >\n {children}\n <input\n type=\"file\"\n id={inputId}\n aria-labelledby={\n inputProps?.[\"aria-labelledby\"]\n ? `${labelId} ${inputProps[\"aria-labelledby\"]}`\n : labelId\n }\n aria-describedby={inputAriaDescribedBy || undefined}\n ref={inputRef}\n tabIndex={-1}\n accept={accept}\n name={name}\n className=\"sr-only\"\n disabled={disabled}\n multiple={multiple}\n required={required}\n onChange={onInputChange}\n {...inputProps}\n />\n <div id={labelId} className=\"sr-only\">\n {label ?? \"File upload\"}\n </div>\n </RootPrimitive>\n </FileUploadContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface FileUploadDropzoneProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\n\nfunction FileUploadDropzone(props: FileUploadDropzoneProps) {\n const {\n asChild,\n className,\n onClick: onClickProp,\n onDragOver: onDragOverProp,\n onDragEnter: onDragEnterProp,\n onDragLeave: onDragLeaveProp,\n onDrop: onDropProp,\n onPaste: onPasteProp,\n onKeyDown: onKeyDownProp,\n ...dropzoneProps\n } = props;\n\n const context = useFileUploadContext(DROPZONE_NAME);\n const store = useStoreContext(DROPZONE_NAME);\n const dragOver = useStore((state) => state.dragOver);\n const invalid = useStore((state) => state.invalid);\n\n const propsRef = useAsRef({\n onClick: onClickProp,\n onDragOver: onDragOverProp,\n onDragEnter: onDragEnterProp,\n onDragLeave: onDragLeaveProp,\n onDrop: onDropProp,\n onPaste: onPasteProp,\n onKeyDown: onKeyDownProp,\n });\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n propsRef.current.onClick?.(event);\n\n if (event.defaultPrevented) return;\n\n const target = event.target;\n\n const isFromTrigger =\n target instanceof HTMLElement &&\n target.closest('[data-slot=\"file-upload-trigger\"]');\n\n if (!isFromTrigger) {\n context.inputRef.current?.click();\n }\n },\n [context.inputRef, propsRef],\n );\n\n const onDragOver = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDragOver?.(event);\n\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: true });\n },\n [store, propsRef],\n );\n\n const onDragEnter = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDragEnter?.(event);\n\n if (event.defaultPrevented) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: true });\n },\n [store, propsRef],\n );\n\n const onDragLeave = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDragLeave?.(event);\n\n if (event.defaultPrevented) return;\n\n const relatedTarget = event.relatedTarget;\n if (\n relatedTarget &&\n relatedTarget instanceof Node &&\n event.currentTarget.contains(relatedTarget)\n ) {\n return;\n }\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: false });\n },\n [store, propsRef],\n );\n\n const onDrop = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n propsRef.current.onDrop?.(event);\n\n if (event.defaultPrevented) return;\n\n if (context.disabled) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: false });\n\n const files = Array.from(event.dataTransfer.files);\n const inputElement = context.inputRef.current;\n if (!inputElement) return;\n if (typeof DataTransfer === \"undefined\") return;\n\n const dataTransfer = new DataTransfer();\n for (const file of files) {\n dataTransfer.items.add(file);\n }\n\n inputElement.files = dataTransfer.files;\n inputElement.dispatchEvent(new Event(\"change\", { bubbles: true }));\n },\n [store, context.inputRef, propsRef],\n );\n\n const onPaste = React.useCallback(\n (event: React.ClipboardEvent<HTMLDivElement>) => {\n propsRef.current.onPaste?.(event);\n\n if (event.defaultPrevented) return;\n\n if (context.disabled) return;\n\n event.preventDefault();\n store.dispatch({ type: \"SET_DRAG_OVER\", dragOver: false });\n\n const items = event.clipboardData?.items;\n if (!items) return;\n\n const files: File[] = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item?.kind === \"file\") {\n const file = item.getAsFile();\n if (file) {\n files.push(file);\n }\n }\n }\n\n if (files.length === 0) return;\n\n const inputElement = context.inputRef.current;\n if (!inputElement) return;\n if (typeof DataTransfer === \"undefined\") return;\n\n const dataTransfer = new DataTransfer();\n for (const file of files) {\n dataTransfer.items.add(file);\n }\n\n inputElement.files = dataTransfer.files;\n inputElement.dispatchEvent(new Event(\"change\", { bubbles: true }));\n },\n [store, context.inputRef, propsRef],\n );\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n propsRef.current.onKeyDown?.(event);\n\n if (\n !event.defaultPrevented &&\n (event.key === \"Enter\" || event.key === \" \")\n ) {\n event.preventDefault();\n context.inputRef.current?.click();\n }\n },\n [context.inputRef, propsRef],\n );\n\n const DropzonePrimitive = asChild ? Slot : \"div\";\n\n return (\n <DropzonePrimitive\n role=\"region\"\n id={context.dropzoneId}\n aria-controls={`${context.inputId} ${context.listId}`}\n aria-disabled={context.disabled}\n aria-invalid={invalid}\n data-disabled={context.disabled ? \"\" : undefined}\n data-dragging={dragOver ? \"\" : undefined}\n data-invalid={invalid ? \"\" : undefined}\n data-slot=\"file-upload-dropzone\"\n dir={context.dir}\n tabIndex={context.disabled ? -1 : 0}\n {...dropzoneProps}\n className={cn(\n \"relative flex select-none flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 outline-none transition-colors hover:bg-accent/30 focus-visible:border-ring/50 data-disabled:pointer-events-none data-dragging:border-primary/30 data-dragging:bg-accent/30 data-invalid:ring-destructive/20\",\n className,\n )}\n onClick={onClick}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n onDrop={onDrop}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n />\n );\n}\n\ninterface FileUploadTriggerProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction FileUploadTrigger(props: FileUploadTriggerProps) {\n const { asChild, onClick: onClickProp, ...triggerProps } = props;\n\n const context = useFileUploadContext(TRIGGER_NAME);\n\n const propsRef = useAsRef({\n onClick: onClickProp,\n });\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n propsRef.current.onClick?.(event);\n\n if (event.defaultPrevented) return;\n\n context.inputRef.current?.click();\n },\n [context.inputRef, propsRef],\n );\n\n const TriggerPrimitive = asChild ? Slot : \"button\";\n\n return (\n <TriggerPrimitive\n type=\"button\"\n aria-controls={context.inputId}\n data-disabled={context.disabled ? \"\" : undefined}\n data-slot=\"file-upload-trigger\"\n {...triggerProps}\n disabled={context.disabled}\n onClick={onClick}\n />\n );\n}\n\ninterface FileUploadListProps extends React.ComponentProps<\"div\"> {\n orientation?: \"horizontal\" | \"vertical\";\n asChild?: boolean;\n forceMount?: boolean;\n}\n\nfunction FileUploadList(props: FileUploadListProps) {\n const {\n className,\n orientation = \"vertical\",\n asChild,\n forceMount,\n ...listProps\n } = props;\n\n const context = useFileUploadContext(LIST_NAME);\n const fileCount = useStore((state) => state.files.size);\n const shouldRender = forceMount || fileCount > 0;\n\n if (!shouldRender) return null;\n\n const ListPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ListPrimitive\n role=\"list\"\n id={context.listId}\n aria-orientation={orientation}\n data-orientation={orientation}\n data-slot=\"file-upload-list\"\n data-state={shouldRender ? \"active\" : \"inactive\"}\n dir={context.dir}\n {...listProps}\n className={cn(\n \"data-[state=inactive]:fade-out-0 data-[state=active]:fade-in-0 data-[state=inactive]:slide-out-to-top-2 data-[state=active]:slide-in-from-top-2 flex flex-col gap-2 data-[state=active]:animate-in data-[state=inactive]:animate-out\",\n orientation === \"horizontal\" && \"flex-row overflow-x-auto p-1.5\",\n className,\n )}\n />\n );\n}\n\ninterface FileUploadItemContextValue {\n id: string;\n fileState: FileState | undefined;\n nameId: string;\n sizeId: string;\n statusId: string;\n messageId: string;\n}\n\nconst FileUploadItemContext =\n React.createContext<FileUploadItemContextValue | null>(null);\n\nfunction useFileUploadItemContext(consumerName: string) {\n const context = React.useContext(FileUploadItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface FileUploadItemProps extends React.ComponentProps<\"div\"> {\n value: File;\n asChild?: boolean;\n}\n\nfunction FileUploadItem(props: FileUploadItemProps) {\n const { value, asChild, className, ...itemProps } = props;\n\n const id = React.useId();\n const statusId = `${id}-status`;\n const nameId = `${id}-name`;\n const sizeId = `${id}-size`;\n const messageId = `${id}-message`;\n\n const context = useFileUploadContext(ITEM_NAME);\n const fileState = useStore((state) => state.files.get(value));\n const fileCount = useStore((state) => state.files.size);\n const fileIndex = useStore((state) => {\n const files = Array.from(state.files.keys());\n return files.indexOf(value) + 1;\n });\n\n const itemContext = React.useMemo(\n () => ({\n id,\n fileState,\n nameId,\n sizeId,\n statusId,\n messageId,\n }),\n [id, fileState, statusId, nameId, sizeId, messageId],\n );\n\n if (!fileState) return null;\n\n const statusText = fileState.error\n ? `Error: ${fileState.error}`\n : fileState.status === \"uploading\"\n ? `Uploading: ${fileState.progress}% complete`\n : fileState.status === \"success\"\n ? \"Upload complete\"\n : \"Ready to upload\";\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FileUploadItemContext.Provider value={itemContext}>\n <ItemPrimitive\n role=\"listitem\"\n id={id}\n aria-setsize={fileCount}\n aria-posinset={fileIndex}\n aria-describedby={`${nameId} ${sizeId} ${statusId} ${\n fileState.error ? messageId : \"\"\n }`}\n aria-labelledby={nameId}\n data-slot=\"file-upload-item\"\n dir={context.dir}\n {...itemProps}\n className={cn(\n \"relative flex items-center gap-2.5 rounded-md border p-3\",\n className,\n )}\n >\n {props.children}\n <span id={statusId} className=\"sr-only\">\n {statusText}\n </span>\n </ItemPrimitive>\n </FileUploadItemContext.Provider>\n );\n}\n\ninterface FileUploadItemPreviewProps extends React.ComponentProps<\"div\"> {\n render?: (file: File, fallback: () => React.ReactNode) => React.ReactNode;\n asChild?: boolean;\n}\n\nfunction FileUploadItemPreview(props: FileUploadItemPreviewProps) {\n const { render, asChild, children, className, ...previewProps } = props;\n\n const itemContext = useFileUploadItemContext(ITEM_PREVIEW_NAME);\n const context = useFileUploadContext(ITEM_PREVIEW_NAME);\n\n const getDefaultRender = React.useCallback(\n (file: File) => {\n if (itemContext.fileState?.file.type.startsWith(\"image/\")) {\n let url = context.urlCache.get(file);\n if (!url) {\n url = URL.createObjectURL(file);\n context.urlCache.set(file, url);\n }\n\n return (\n // biome-ignore lint/performance/noImgElement: dynamic file URLs from user uploads don't work well with Next.js Image optimization\n <img src={url} alt={file.name} className=\"size-full object-cover\" />\n );\n }\n\n return getFileIcon(file);\n },\n [itemContext.fileState?.file.type, context.urlCache],\n );\n\n const onPreviewRender = React.useCallback(\n (file: File) => {\n if (render) {\n return render(file, () => getDefaultRender(file));\n }\n\n return getDefaultRender(file);\n },\n [render, getDefaultRender],\n );\n\n if (!itemContext.fileState) return null;\n\n const ItemPreviewPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ItemPreviewPrimitive\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-preview\"\n {...previewProps}\n className={cn(\n \"relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded border bg-accent/50 [&>svg]:size-10\",\n className,\n )}\n >\n {onPreviewRender(itemContext.fileState.file)}\n {children}\n </ItemPreviewPrimitive>\n );\n}\n\ninterface FileUploadItemMetadataProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n size?: \"default\" | \"sm\";\n}\n\nfunction FileUploadItemMetadata(props: FileUploadItemMetadataProps) {\n const {\n asChild,\n size = \"default\",\n children,\n className,\n ...metadataProps\n } = props;\n\n const context = useFileUploadContext(ITEM_METADATA_NAME);\n const itemContext = useFileUploadItemContext(ITEM_METADATA_NAME);\n\n if (!itemContext.fileState) return null;\n\n const ItemMetadataPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ItemMetadataPrimitive\n data-slot=\"file-upload-metadata\"\n dir={context.dir}\n {...metadataProps}\n className={cn(\"flex min-w-0 flex-1 flex-col\", className)}\n >\n {children ?? (\n <>\n <span\n id={itemContext.nameId}\n className={cn(\n \"truncate font-medium text-sm\",\n size === \"sm\" && \"font-normal text-[13px] leading-snug\",\n )}\n >\n {itemContext.fileState.file.name}\n </span>\n <span\n id={itemContext.sizeId}\n className={cn(\n \"truncate text-xs opacity-70\",\n size === \"sm\" && \"text-[11px] leading-snug\",\n )}\n >\n {formatBytes(itemContext.fileState.file.size)}\n </span>\n {itemContext.fileState.error && (\n <span\n id={itemContext.messageId}\n className=\"text-destructive text-xs\"\n >\n {itemContext.fileState.error}\n </span>\n )}\n </>\n )}\n </ItemMetadataPrimitive>\n );\n}\ninterface FileUploadItemProgressProps extends React.ComponentProps<\"div\"> {\n variant?: \"linear\" | \"circular\" | \"fill\";\n size?: number;\n asChild?: boolean;\n forceMount?: boolean;\n}\n\nfunction FileUploadItemProgress(props: FileUploadItemProgressProps) {\n const {\n variant = \"linear\",\n size = 40,\n asChild,\n forceMount,\n className,\n ...progressProps\n } = props;\n\n const itemContext = useFileUploadItemContext(ITEM_PROGRESS_NAME);\n\n if (!itemContext.fileState) return null;\n\n const shouldRender = forceMount || itemContext.fileState.progress !== 100;\n\n if (!shouldRender) return null;\n\n const ItemProgressPrimitive = asChild ? Slot : \"div\";\n\n switch (variant) {\n case \"circular\": {\n const circumference = 2 * Math.PI * ((size - 4) / 2);\n const strokeDashoffset =\n circumference - (itemContext.fileState.progress / 100) * circumference;\n\n return (\n <ItemProgressPrimitive\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={itemContext.fileState.progress}\n aria-valuetext={`${itemContext.fileState.progress}%`}\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-progress\"\n {...progressProps}\n className={cn(\n \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n className,\n )}\n >\n <svg\n className=\"-rotate-90 transform\"\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n stroke=\"currentColor\"\n >\n <circle\n className=\"text-primary/20\"\n strokeWidth=\"2\"\n cx={size / 2}\n cy={size / 2}\n r={(size - 4) / 2}\n />\n <circle\n className=\"text-primary transition-[stroke-dashoffset] duration-300 ease-linear\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n cx={size / 2}\n cy={size / 2}\n r={(size - 4) / 2}\n />\n </svg>\n </ItemProgressPrimitive>\n );\n }\n\n case \"fill\": {\n const progressPercentage = itemContext.fileState.progress;\n const topInset = 100 - progressPercentage;\n\n return (\n <ItemProgressPrimitive\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={progressPercentage}\n aria-valuetext={`${progressPercentage}%`}\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-progress\"\n {...progressProps}\n className={cn(\n \"absolute inset-0 bg-primary/50 transition-[clip-path] duration-300 ease-linear\",\n className,\n )}\n style={{\n clipPath: `inset(${topInset}% 0% 0% 0%)`,\n }}\n />\n );\n }\n\n default:\n return (\n <ItemProgressPrimitive\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={itemContext.fileState.progress}\n aria-valuetext={`${itemContext.fileState.progress}%`}\n aria-labelledby={itemContext.nameId}\n data-slot=\"file-upload-progress\"\n {...progressProps}\n className={cn(\n \"relative h-1.5 w-full overflow-hidden rounded-full bg-primary/20\",\n className,\n )}\n >\n <div\n className=\"h-full w-full flex-1 bg-primary transition-transform duration-300 ease-linear\"\n style={{\n transform: `translateX(-${100 - itemContext.fileState.progress}%)`,\n }}\n />\n </ItemProgressPrimitive>\n );\n }\n}\n\ninterface FileUploadItemDeleteProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\nfunction FileUploadItemDelete(props: FileUploadItemDeleteProps) {\n const { asChild, onClick: onClickProp, ...deleteProps } = props;\n\n const store = useStoreContext(ITEM_DELETE_NAME);\n const itemContext = useFileUploadItemContext(ITEM_DELETE_NAME);\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClickProp?.(event);\n\n if (!itemContext.fileState || event.defaultPrevented) return;\n\n store.dispatch({\n type: \"REMOVE_FILE\",\n file: itemContext.fileState.file,\n });\n },\n [store, itemContext.fileState, onClickProp],\n );\n\n if (!itemContext.fileState) return null;\n\n const ItemDeletePrimitive = asChild ? Slot : \"button\";\n\n return (\n <ItemDeletePrimitive\n type=\"button\"\n aria-controls={itemContext.id}\n aria-describedby={itemContext.nameId}\n data-slot=\"file-upload-item-delete\"\n {...deleteProps}\n onClick={onClick}\n />\n );\n}\n\ninterface FileUploadClearProps extends React.ComponentProps<\"button\"> {\n forceMount?: boolean;\n asChild?: boolean;\n}\n\nfunction FileUploadClear(props: FileUploadClearProps) {\n const {\n asChild,\n forceMount,\n disabled,\n onClick: onClickProp,\n ...clearProps\n } = props;\n\n const context = useFileUploadContext(CLEAR_NAME);\n const store = useStoreContext(CLEAR_NAME);\n const fileCount = useStore((state) => state.files.size);\n\n const isDisabled = disabled || context.disabled;\n\n const onClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClickProp?.(event);\n\n if (event.defaultPrevented) return;\n\n store.dispatch({ type: \"CLEAR\" });\n },\n [store, onClickProp],\n );\n\n const shouldRender = forceMount || fileCount > 0;\n\n if (!shouldRender) return null;\n\n const ClearPrimitive = asChild ? Slot : \"button\";\n\n return (\n <ClearPrimitive\n type=\"button\"\n aria-controls={context.listId}\n data-slot=\"file-upload-clear\"\n data-disabled={isDisabled ? \"\" : undefined}\n {...clearProps}\n disabled={isDisabled}\n onClick={onClick}\n />\n );\n}\n\nexport {\n FileUpload,\n FileUploadDropzone,\n FileUploadTrigger,\n FileUploadList,\n FileUploadItem,\n FileUploadItemPreview,\n FileUploadItemMetadata,\n FileUploadItemProgress,\n FileUploadItemDelete,\n FileUploadClear,\n //\n useStore as useFileUpload,\n //\n type FileUploadProps,\n};\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport {\n FileUpload,\n FileUploadDropzone,\n FileUploadItem,\n FileUploadItemDelete,\n FileUploadItemMetadata,\n FileUploadItemPreview,\n FileUploadList,\n} from \"../components/ui/file-upload\";\nimport { Button } from \"../components/ui/button\";\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from \"../components/ui/dialog\";\nimport { cn } from \"../lib/utils\";\n\n/**\n * File validation error details\n */\nexport interface FileValidationError {\n file: File;\n error: \"type\" | \"size\" | \"count\";\n message: string;\n}\n\n/**\n * Upload progress tracking per file\n */\nexport interface FileUploadProgress {\n [fileName: string]: number; // 0-100\n}\n\n/**\n * Crop area coordinates\n */\nexport interface CropArea {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * FileInput component props\n */\nexport interface FileInputProps extends Omit<\n InputProps<File[]>,\n \"value\" | \"onChange\"\n> {\n /**\n * Current file value(s)\n */\n value?: File[];\n\n /**\n * Change handler receives array of files\n */\n onChange: (files: File[]) => void;\n\n /**\n * Accepted file types (MIME types or extensions)\n * @example \".pdf,.doc,.docx\"\n * @example \"image/*,application/pdf\"\n */\n accept?: string;\n\n /**\n * Maximum file size in bytes\n * @default 5MB (5 * 1024 * 1024)\n */\n maxSize?: number;\n\n /**\n * Maximum number of files\n * @default 1\n */\n maxFiles?: number;\n\n /**\n * Allow multiple file selection\n * @default false\n */\n multiple?: boolean;\n\n /**\n * Show file preview thumbnails\n * @default true\n */\n showPreview?: boolean;\n\n /**\n * Show upload progress indicators\n * @default true\n */\n showProgress?: boolean;\n\n /**\n * Upload progress per file (0-100)\n * Consumer should update this during upload\n */\n uploadProgress?: FileUploadProgress;\n\n /**\n * Enable image cropping for image files\n * @default false\n */\n enableCropping?: boolean;\n\n /**\n * Crop aspect ratio (width / height)\n * @default Free form (no constraint)\n * @example 16/9, 1, 4/3\n */\n cropAspectRatio?: number;\n\n /**\n * Crop complete handler - receives cropped blob and original file\n */\n onCropComplete?: (croppedBlob: Blob, originalFile: File) => void;\n\n /**\n * Validation error handler\n */\n onValidationError?: (errors: FileValidationError[]) => void;\n\n /**\n * File removed handler\n */\n onFileRemove?: (file: File, index: number) => void;\n}\n\n/**\n * FileInput component for file selection with validation, progress tracking, and image cropping\n *\n * Built on the DiceUI-style FileUpload primitive with form-specific behavior:\n * - Rails/token upload workflow compatibility\n * - External upload progress support\n * - Validation + accessibility wiring\n * - Optional image cropping modal\n */\nexport function FileInput({\n name,\n value = [],\n onChange,\n onBlur,\n placeholder = \"Choose file...\",\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n accept,\n maxSize = 5 * 1024 * 1024, // 5MB default\n maxFiles = 1,\n multiple = false,\n showPreview = true,\n showProgress = true,\n uploadProgress = {},\n enableCropping = false,\n cropAspectRatio,\n onCropComplete,\n onValidationError,\n onFileRemove,\n ...props\n}: FileInputProps) {\n const normalizedValue = React.useMemo(() => {\n const safeValue = Array.isArray(value) ? value : [];\n return multiple ? safeValue : safeValue.slice(0, 1);\n }, [multiple, value]);\n\n const [cropperOpen, setCropperOpen] = React.useState(false);\n const [imageToCrop, setImageToCrop] = React.useState<{\n file: File;\n url: string;\n } | null>(null);\n const [crop, setCrop] = React.useState({ x: 0, y: 0 });\n const [zoom, setZoom] = React.useState(1);\n const [croppedAreaPixels, setCroppedAreaPixels] =\n React.useState<CropArea | null>(null);\n\n /**\n * Validate file against constraints\n */\n const validateFile = React.useCallback(\n (file: File): FileValidationError | null => {\n if (accept) {\n const acceptedTypes = accept.split(\",\").map((type) => type.trim());\n const isValidType = acceptedTypes.some((type) => {\n if (type.startsWith(\".\")) {\n return file.name.toLowerCase().endsWith(type.toLowerCase());\n }\n\n if (type.endsWith(\"/*\")) {\n const baseType = type.split(\"/\")[0];\n return file.type.startsWith(`${baseType}/`);\n }\n\n return file.type === type;\n });\n\n if (!isValidType) {\n return {\n file,\n error: \"type\",\n message: `File type \"${file.type}\" is not accepted. Accepted types: ${accept}`,\n };\n }\n }\n\n if (file.size > maxSize) {\n const maxSizeMB = (maxSize / (1024 * 1024)).toFixed(2);\n const fileSizeMB = (file.size / (1024 * 1024)).toFixed(2);\n\n return {\n file,\n error: \"size\",\n message: `File size ${fileSizeMB}MB exceeds maximum ${maxSizeMB}MB`,\n };\n }\n\n return null;\n },\n [accept, maxSize],\n );\n\n const mapRejectedFileError = React.useCallback(\n (file: File, message: string): FileValidationError => {\n const normalizedMessage = message.toLowerCase();\n\n if (\n normalizedMessage.includes(\"maximum\") &&\n normalizedMessage.includes(\"files\")\n ) {\n return { file, error: \"count\", message };\n }\n\n if (\n normalizedMessage.includes(\"size\") ||\n normalizedMessage.includes(\"large\")\n ) {\n return { file, error: \"size\", message };\n }\n\n if (\n normalizedMessage.includes(\"type\") ||\n normalizedMessage.includes(\"accept\")\n ) {\n return { file, error: \"type\", message };\n }\n\n if (file.size > maxSize) {\n return { file, error: \"size\", message };\n }\n\n return { file, error: \"type\", message };\n },\n [maxSize],\n );\n\n const handleFileValidate = React.useCallback(\n (file: File) => {\n const validationError = validateFile(file);\n return validationError?.message ?? null;\n },\n [validateFile],\n );\n\n const handleFileReject = React.useCallback(\n (file: File, message: string) => {\n const validationError = mapRejectedFileError(file, message);\n onValidationError?.([validationError]);\n },\n [mapRejectedFileError, onValidationError],\n );\n\n const handleBlur = React.useCallback(() => {\n onBlur?.();\n }, [onBlur]);\n\n const fileIdentity = React.useCallback((file: File) => {\n return `${file.name}-${file.size}-${file.lastModified}`;\n }, []);\n\n const handleValueChange = React.useCallback(\n (incomingFiles: File[]) => {\n const nextFiles = multiple ? incomingFiles : incomingFiles.slice(-1);\n\n if (onFileRemove && nextFiles.length < normalizedValue.length) {\n const nextFileIds = new Set(nextFiles.map((file) => fileIdentity(file)));\n normalizedValue.forEach((file, index) => {\n if (!nextFileIds.has(fileIdentity(file))) {\n onFileRemove(file, index);\n }\n });\n }\n\n if (enableCropping && !multiple) {\n const nextImageFile = nextFiles[0];\n const previousFile = normalizedValue[0];\n const isNewSingleImage = Boolean(\n nextImageFile &&\n nextImageFile.type.startsWith(\"image/\") &&\n nextImageFile !== previousFile,\n );\n\n if (isNewSingleImage) {\n const previewUrl = URL.createObjectURL(nextImageFile!);\n setImageToCrop({ file: nextImageFile!, url: previewUrl });\n setCropperOpen(true);\n return;\n }\n }\n\n onChange(nextFiles);\n },\n [\n enableCropping,\n maxFiles,\n multiple,\n normalizedValue,\n onChange,\n onFileRemove,\n fileIdentity,\n ],\n );\n\n /**\n * Create cropped image from canvas\n */\n const createCroppedImage = React.useCallback(\n async (imageUrl: string, cropArea: CropArea): Promise<Blob> => {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.onload = () => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n reject(new Error(\"Failed to get canvas context\"));\n return;\n }\n\n canvas.width = cropArea.width;\n canvas.height = cropArea.height;\n\n ctx.drawImage(\n image,\n cropArea.x,\n cropArea.y,\n cropArea.width,\n cropArea.height,\n 0,\n 0,\n cropArea.width,\n cropArea.height,\n );\n\n canvas.toBlob(\n (blob) => {\n if (blob) {\n resolve(blob);\n } else {\n reject(new Error(\"Failed to create blob from canvas\"));\n }\n },\n \"image/jpeg\",\n 0.95,\n );\n };\n\n image.onerror = () => {\n reject(new Error(\"Failed to load image\"));\n };\n\n image.src = imageUrl;\n });\n },\n [],\n );\n\n /**\n * Handle crop completion\n */\n const handleCropSave = React.useCallback(async () => {\n if (!imageToCrop || !croppedAreaPixels) return;\n\n try {\n const croppedBlob = await createCroppedImage(\n imageToCrop.url,\n croppedAreaPixels,\n );\n\n if (onCropComplete) {\n onCropComplete(croppedBlob, imageToCrop.file);\n }\n\n const croppedFile = new File([croppedBlob], imageToCrop.file.name, {\n type: \"image/jpeg\",\n });\n\n let updatedFiles: File[];\n if (!multiple) {\n updatedFiles = [croppedFile];\n } else {\n const existingIndex = normalizedValue.findIndex(\n (file) => file === imageToCrop.file,\n );\n\n if (existingIndex === -1) {\n updatedFiles = [...normalizedValue, croppedFile].slice(0, maxFiles);\n } else {\n updatedFiles = normalizedValue.map((file, index) =>\n index === existingIndex ? croppedFile : file,\n );\n }\n }\n\n onChange(updatedFiles);\n\n setCropperOpen(false);\n URL.revokeObjectURL(imageToCrop.url);\n setImageToCrop(null);\n setCrop({ x: 0, y: 0 });\n setZoom(1);\n setCroppedAreaPixels(null);\n } catch (cropError) {\n console.error(\"Failed to crop image:\", cropError);\n }\n }, [\n createCroppedImage,\n croppedAreaPixels,\n imageToCrop,\n maxFiles,\n multiple,\n normalizedValue,\n onChange,\n onCropComplete,\n ]);\n\n /**\n * Handle crop cancel\n */\n const handleCropCancel = React.useCallback(() => {\n if (imageToCrop) {\n URL.revokeObjectURL(imageToCrop.url);\n }\n setCropperOpen(false);\n setImageToCrop(null);\n setCrop({ x: 0, y: 0 });\n setZoom(1);\n setCroppedAreaPixels(null);\n }, [imageToCrop]);\n\n const handleCrop = React.useCallback((file: File) => {\n if (!file.type.startsWith(\"image/\")) return;\n\n const previewUrl = URL.createObjectURL(file);\n setImageToCrop({ file, url: previewUrl });\n setCropperOpen(true);\n }, []);\n\n const onCropChange = React.useCallback((nextCrop: { x: number; y: number }) => {\n setCrop(nextCrop);\n }, []);\n\n const onZoomChange = React.useCallback((nextZoom: number) => {\n setZoom(nextZoom);\n }, []);\n\n const onCropCompleteInternal = React.useCallback(\n (_: unknown, nextCroppedAreaPixels: CropArea) => {\n setCroppedAreaPixels(nextCroppedAreaPixels);\n },\n [],\n );\n\n const formatFileSize = React.useCallback((bytes: number): string => {\n if (bytes === 0) return \"0 Bytes\";\n const unit = 1024;\n const units = [\"Bytes\", \"KB\", \"MB\", \"GB\"];\n const index = Math.floor(Math.log(bytes) / Math.log(unit));\n return Math.round((bytes / Math.pow(unit, index)) * 100) / 100 + \" \" + units[index];\n }, []);\n\n React.useEffect(() => {\n return () => {\n if (imageToCrop) {\n URL.revokeObjectURL(imageToCrop.url);\n }\n };\n }, [imageToCrop]);\n\n const fileCountLabel =\n normalizedValue.length > 0\n ? `${normalizedValue.length} file(s) selected`\n : placeholder;\n\n return (\n <>\n <FileUpload\n name={name}\n value={normalizedValue}\n onValueChange={handleValueChange}\n onFileValidate={handleFileValidate}\n onFileReject={handleFileReject}\n accept={accept}\n maxSize={maxSize}\n maxFiles={multiple ? maxFiles : undefined}\n multiple={multiple}\n disabled={disabled}\n required={required && normalizedValue.length === 0}\n invalid={Boolean(error || props[\"aria-invalid\"])}\n label=\"File upload\"\n className={cn(className)}\n inputProps={{\n ...props,\n onBlur: handleBlur,\n style: { display: \"none\" },\n \"aria-invalid\": error || props[\"aria-invalid\"],\n \"aria-required\": required || props[\"aria-required\"],\n \"aria-describedby\": props[\"aria-describedby\"],\n }}\n >\n <FileUploadDropzone\n role=\"button\"\n aria-label={placeholder}\n className={cn(\n \"flex min-h-32 w-full cursor-pointer items-center justify-center border-input bg-transparent p-6 transition-colors\",\n \"hover:bg-accent/50 hover:border-ring\",\n \"data-[dragging]:bg-accent data-[dragging]:border-ring\",\n disabled && \"cursor-not-allowed opacity-50\",\n error && \"border-destructive\",\n )}\n >\n <div className=\"flex flex-col items-center gap-2 text-center\">\n <svg\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"17 8 12 3 7 8\" />\n <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\" />\n </svg>\n\n <p className=\"text-sm font-medium\">{fileCountLabel}</p>\n {accept && <p className=\"text-xs\">Accepted: {accept}</p>}\n <p className=\"text-xs\">Max size: {formatFileSize(maxSize)}</p>\n </div>\n </FileUploadDropzone>\n\n <FileUploadList className=\"mt-4\">\n {normalizedValue.map((file, index) => {\n const progressValue = uploadProgress[file.name];\n const hasProgress =\n showProgress && typeof progressValue === \"number\";\n\n return (\n <FileUploadItem\n key={`${file.name}-${index}`}\n value={file}\n className=\"flex items-center gap-3 border-border bg-card text-card-foreground hover:bg-primary/50 transition-colors\"\n >\n {showPreview ? (\n <FileUploadItemPreview className=\"h-12 w-12 rounded [&>img]:h-full [&>img]:w-full [&>img]:object-cover [&>svg]:size-6\" />\n ) : null}\n\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <FileUploadItemMetadata className=\"min-w-0\" />\n <span className=\"text-xs\">{formatFileSize(file.size)}</span>\n\n {hasProgress ? (\n <div className=\"mt-1 flex items-center gap-2\">\n <div\n className=\"h-1.5 flex-1 overflow-hidden rounded-full bg-accent/40\"\n role=\"progressbar\"\n aria-valuenow={progressValue}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={`Upload progress: ${progressValue}%`}\n >\n <div\n className=\"h-full bg-primary transition-all\"\n style={{ width: `${progressValue}%` }}\n />\n </div>\n <span className=\"text-xs\">{progressValue}%</span>\n </div>\n ) : null}\n </div>\n\n {enableCropping && file.type.startsWith(\"image/\") ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n onClick={(event) => {\n event.stopPropagation();\n handleCrop(file);\n }}\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n aria-label={`Crop ${file.name}`}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6.13 1L6 16a2 2 0 0 0 2 2h15\" />\n <path d=\"M1 6.13L16 6a2 2 0 0 1 2 2v15\" />\n </svg>\n </Button>\n ) : null}\n\n <FileUploadItemDelete asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n disabled={disabled}\n className=\"h-8 w-8 p-0\"\n aria-label={`Remove ${file.name}`}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </Button>\n </FileUploadItemDelete>\n </FileUploadItem>\n );\n })}\n </FileUploadList>\n </FileUpload>\n\n <Dialog\n open={cropperOpen && Boolean(imageToCrop)}\n onOpenChange={(open) => {\n if (!open) {\n handleCropCancel();\n }\n }}\n >\n {imageToCrop ? (\n <DialogContent\n showCloseButton={false}\n className=\"max-w-3xl gap-0 p-0\"\n aria-describedby={undefined}\n >\n <DialogHeader className=\"flex-row items-center justify-between border-b border-border px-4 py-3\">\n <DialogTitle>Crop Image</DialogTitle>\n <DialogClose asChild>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 p-0\"\n aria-label=\"Close\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </Button>\n </DialogClose>\n </DialogHeader>\n\n <div className=\"p-4\">\n <div\n className=\"relative h-96 w-full overflow-hidden rounded-md bg-accent/40\"\n onMouseDown={(event) => {\n event.preventDefault();\n const startX = event.clientX - crop.x;\n const startY = event.clientY - crop.y;\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n onCropChange({\n x: moveEvent.clientX - startX,\n y: moveEvent.clientY - startY,\n });\n };\n\n const handleMouseUp = () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n }}\n >\n <img\n src={imageToCrop.url}\n alt=\"Crop preview\"\n className=\"absolute inset-0 h-full w-full object-contain\"\n style={{\n transform: `translate(${crop.x}px, ${crop.y}px) scale(${zoom})`,\n }}\n draggable={false}\n onLoad={(event) => {\n const image = event.currentTarget;\n const containerWidth = 600;\n const containerHeight = 400;\n\n const cropWidth = cropAspectRatio\n ? Math.min(\n containerWidth * 0.8,\n containerHeight * 0.8 * cropAspectRatio,\n )\n : containerWidth * 0.8;\n const cropHeight = cropAspectRatio\n ? cropWidth / cropAspectRatio\n : containerHeight * 0.8;\n\n const imageWidth = image.naturalWidth;\n const imageHeight = image.naturalHeight;\n const scale = zoom;\n const centerX = containerWidth / 2;\n const centerY = containerHeight / 2;\n\n const cropX = (centerX - crop.x - cropWidth / 2) / scale;\n const cropY = (centerY - crop.y - cropHeight / 2) / scale;\n\n onCropCompleteInternal(null, {\n x: Math.max(0, cropX),\n y: Math.max(0, cropY),\n width: Math.min(cropWidth / scale, imageWidth),\n height: Math.min(cropHeight / scale, imageHeight),\n });\n }}\n />\n\n <div\n className=\"pointer-events-none absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded border-2 border-primary\"\n style={{\n width: cropAspectRatio\n ? `${Math.min(80, 80 * cropAspectRatio)}%`\n : \"80%\",\n aspectRatio: cropAspectRatio\n ? String(cropAspectRatio)\n : undefined,\n }}\n >\n <div className=\"absolute inset-0 grid grid-cols-3 grid-rows-3\">\n <div className=\"border-r border-b border-primary/30\" />\n <div className=\"border-r border-b border-primary/30\" />\n <div className=\"border-b border-primary/30\" />\n <div className=\"border-r border-b border-primary/30\" />\n <div className=\"border-r border-b border-primary/30\" />\n <div className=\"border-b border-primary/30\" />\n <div className=\"border-r border-primary/30\" />\n <div className=\"border-r border-primary/30\" />\n <div />\n </div>\n </div>\n </div>\n\n <div className=\"mt-4 flex items-center gap-3\">\n <label\n htmlFor=\"zoom-slider\"\n className=\"whitespace-nowrap text-sm font-medium\"\n >\n Zoom: {zoom.toFixed(1)}x\n </label>\n <input\n id=\"zoom-slider\"\n type=\"range\"\n min=\"1\"\n max=\"3\"\n step=\"0.1\"\n value={zoom}\n onChange={(event) => onZoomChange(parseFloat(event.target.value))}\n className=\"h-2 flex-1 cursor-pointer appearance-none rounded-lg bg-accent/60\"\n aria-label=\"Zoom level\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center justify-end gap-2 border-t border-border p-4\">\n <Button type=\"button\" variant=\"outline\" onClick={handleCropCancel}>\n Cancel\n </Button>\n <Button type=\"button\" onClick={handleCropSave}>\n Save\n </Button>\n </div>\n </DialogContent>\n ) : null}\n </Dialog>\n </>\n );\n}\n\nFileInput.displayName = \"FileInput\";\n","\"use client\"\n\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from \"react-day-picker\"\n\nimport { cn } from \"../../lib/utils\"\nimport { Button, buttonVariants } from \"./button\"\n\n/**\n * Calendar component - Optimized for dynamic theming across thousands of client brands\n *\n * CRITICAL: Only uses CSS variables and opacity for muted text - NO hardcoded semantic colors\n * See: SHADCN_INTEGRATION_GUIDE.md for full documentation\n */\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-4 flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-4\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:opacity-70 [&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"opacity-70 rounded-md flex-1 font-normal text-[0.8rem] select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-[0.8rem] select-none opacity-70\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-md bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"opacity-50\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <svg\n className={cn(\"size-4\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n )\n }\n\n if (orientation === \"right\") {\n return (\n <svg\n className={cn(\"size-4\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n )\n }\n\n return (\n <svg\n className={cn(\"size-4\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n {...props}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n )\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n // Core structure\n \"flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal\",\n\n // Selected states - uses CSS variables\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground\",\n \"data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground\",\n \"data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground\",\n \"data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground\",\n\n // Focus state\n \"group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10\",\n \"group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 group-data-[focused=true]/day:ring-[3px]\",\n\n // Rounding based on position\n \"data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md\",\n \"data-[range-middle=true]:rounded-none\",\n \"data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md\",\n\n // Nested span styling\n \"[&>span]:text-xs [&>span]:opacity-70\",\n\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { DayButtonProps, Matcher } from \"react-day-picker\";\nimport type { InputProps } from \"../core/types\";\nimport { Calendar } from \"../components/ui/calendar\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover\";\nimport { cn, INPUT_AUTOFILL_RESET_CLASSES } from \"../lib/utils\";\n\n/**\n * DatePicker props interface\n */\nexport interface DatePickerProps extends Omit<\n InputProps<Date | null>,\n \"onChange\"\n> {\n /**\n * Change handler - receives selected date or null\n */\n onChange: (date: Date | null) => void;\n\n /**\n * Placeholder text when no date is selected\n * @default \"Select date...\"\n */\n placeholder?: string;\n\n /**\n * Date format for display\n * @default \"MM/dd/yyyy\"\n */\n format?: string;\n\n /**\n * Minimum selectable date\n */\n minDate?: Date;\n\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n\n /**\n * Dates that should be disabled\n */\n disabledDates?: Date[];\n\n /**\n * Function to determine if a date should be disabled\n */\n isDateDisabled?: (date: Date) => boolean;\n\n /**\n * Show clear button\n * @default true\n */\n clearable?: boolean;\n\n /**\n * Show calendar icon\n * @default true\n */\n showIcon?: boolean;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Format date to string\n */\nfunction formatDate(date: Date | null, format: string): string {\n if (!date) return \"\";\n\n const d = new Date(date);\n const month = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n const year = d.getFullYear();\n\n // Simple format parsing\n return format\n .replace(\"MM\", month)\n .replace(\"dd\", day)\n .replace(\"yyyy\", String(year))\n .replace(\"yy\", String(year).slice(2));\n}\n\nfunction DatePickerDayButton({\n day,\n modifiers,\n className,\n children,\n ...props\n}: DayButtonProps) {\n return (\n <button\n type=\"button\"\n className={cn(\n \"flex items-center justify-center h-8 w-8 rounded-md border-none bg-transparent cursor-pointer text-sm transition-colors\",\n \"hover:bg-accent\",\n modifiers.selected && \"bg-primary text-primary-foreground font-semibold\",\n !modifiers.selected && modifiers.today && \"border border-primary\",\n modifiers.disabled && \"cursor-not-allowed opacity-50 pointer-events-none\",\n className,\n )}\n {...props}\n >\n {children ?? day.date.getDate()}\n </button>\n );\n}\n\n/**\n * DatePicker - Accessible date selection component with calendar UI\n *\n * A lightweight date picker with calendar popup, keyboard navigation,\n * and error state support. Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Calendar popup with month/year navigation\n * - Full accessibility support (ARIA attributes, keyboard navigation)\n * - Error state styling\n * - Controlled input behavior\n * - Date range constraints (min/max dates)\n * - Disabled dates support\n * - Clearable selection\n * - Custom date format display\n * - Icon display toggle\n * - Click outside to close\n * - Native date input fallback for mobile\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { birthdate: null } });\n *\n * <DatePicker\n * {...form.getFieldProps('birthdate')}\n * placeholder=\"Select your birthdate\"\n * format=\"MM/dd/yyyy\"\n * maxDate={new Date()}\n * clearable\n * showIcon\n * error={!!form.errors.birthdate}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With date range constraints\n * <DatePicker\n * name=\"appointment\"\n * value={appointmentDate}\n * onChange={setAppointmentDate}\n * minDate={new Date()}\n * maxDate={addDays(new Date(), 90)}\n * isDateDisabled={(date) => date.getDay() === 0 || date.getDay() === 6}\n * />\n * ```\n *\n * Note: This component requires react-day-picker as a peer dependency.\n * Install with: npm install react-day-picker date-fns\n *\n * @see https://opensite.ai/developers/page-speed/forms/date-picker\n */\nexport function DatePicker({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n placeholder = \"Select date...\",\n format = \"MM/dd/yyyy\",\n minDate,\n maxDate,\n disabledDates = [],\n isDateDisabled,\n clearable = true,\n showIcon = true,\n ...props\n}: DatePickerProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [hasInteracted, setHasInteracted] = React.useState(false);\n const [selectedMonth, setSelectedMonth] = React.useState<Date>(\n value || new Date(),\n );\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Sync selected month with controlled value prop\n React.useEffect(() => {\n if (value) {\n setSelectedMonth(value);\n }\n }, [value]);\n\n const disabledMatchers = React.useMemo<Matcher[]>(() => {\n const matchers: Matcher[] = [];\n\n if (minDate) {\n matchers.push({ before: minDate });\n }\n\n if (maxDate) {\n matchers.push({ after: maxDate });\n }\n\n if (disabledDates.length > 0) {\n matchers.push(disabledDates);\n }\n\n if (isDateDisabled) {\n matchers.push(isDateDisabled);\n }\n\n return matchers;\n }, [disabledDates, isDateDisabled, maxDate, minDate]);\n\n const handleDateSelect = React.useCallback(\n (date: Date | undefined) => {\n if (!date) return;\n\n onChange(date);\n setSelectedMonth(date);\n setIsOpen(false);\n onBlur?.();\n },\n [onBlur, onChange],\n );\n\n // Handle clear button\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(null);\n setIsOpen(false);\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (disabled) {\n setIsOpen(false);\n return;\n }\n\n if (nextOpen) {\n if (!hasInteracted) {\n setHasInteracted(true);\n }\n setIsOpen(true);\n return;\n }\n\n if (isOpen && hasInteracted) {\n onBlur?.();\n }\n\n setIsOpen(false);\n },\n [disabled, hasInteracted, isOpen, onBlur],\n );\n\n const handleInputBlur = React.useCallback(() => {\n if (!isOpen) {\n onBlur?.();\n }\n }, [isOpen, onBlur]);\n\n const handleInputClick = React.useCallback(() => {\n if (!hasInteracted) {\n setHasInteracted(true);\n }\n }, [hasInteracted]);\n\n const hasValue = Boolean(value);\n const displayValue = formatDate(value, format);\n\n const combinedClassName = cn(\"relative\", className);\n\n return (\n <div className={combinedClassName}>\n {/* Hidden native date input for form submission */}\n <input\n type=\"hidden\"\n name={name}\n value={value ? value.toISOString() : \"\"}\n />\n\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n {/* Custom date input */}\n <div className=\"relative\">\n {showIcon && (\n <span\n className=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none\"\n aria-hidden=\"true\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n >\n <path d=\"M8 2v4m8-4v4m5 8V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8M3 10h18m-5 10l2 2l4-4\" />\n </svg>\n </span>\n )}\n <PopoverTrigger asChild>\n <input\n ref={inputRef}\n id={props.id}\n type=\"text\"\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent py-1 text-base shadow-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n INPUT_AUTOFILL_RESET_CLASSES,\n showIcon ? \"pl-10\" : \"pl-3\",\n clearable && value ? \"pr-10\" : \"pr-3\",\n !error && hasValue && \"ring-2 ring-ring\",\n error && \"border-destructive ring-1 ring-destructive\",\n )}\n value={displayValue}\n onClick={handleInputClick}\n onBlur={handleInputBlur}\n disabled={disabled}\n required={required}\n placeholder={placeholder}\n aria-invalid={error || props[\"aria-invalid\"] ? \"true\" : \"false\"}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n readOnly\n />\n </PopoverTrigger>\n {clearable && value && !disabled && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 -translate-y-1/2 transition-colors\"\n onClick={handleClear}\n aria-label=\"Clear date\"\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n </div>\n\n {!disabled && (\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n className=\"w-auto p-0\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Calendar\n mode=\"single\"\n selected={value ?? undefined}\n onSelect={handleDateSelect}\n month={selectedMonth}\n onMonthChange={setSelectedMonth}\n disabled={disabledMatchers}\n showOutsideDays\n labels={{\n labelGrid: () => \"Calendar\",\n labelDayButton: (date) => formatDate(date, format),\n labelPrevious: () => \"Previous month\",\n labelNext: () => \"Next month\",\n }}\n components={{\n DayButton: DatePickerDayButton,\n }}\n classNames={{\n today: \"border border-primary rounded-md bg-transparent\",\n }}\n />\n </PopoverContent>\n )}\n </Popover>\n </div>\n );\n}\n\nDatePicker.displayName = \"DatePicker\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\nimport { cn, INPUT_AUTOFILL_RESET_CLASSES } from \"../lib/utils\";\nimport { Input } from \"../components/ui/input\";\nimport { Button } from \"../components/ui/button\";\n\n/**\n * Legacy time value shape retained for backward-compatible type exports.\n */\nexport interface TimeValue {\n hour: number;\n minute: number;\n period: \"AM\" | \"PM\";\n}\n\n/**\n * TimePicker props interface\n */\nexport interface TimePickerProps extends Omit<InputProps<string>, \"onChange\"> {\n /**\n * Change handler - receives time string in format \"HH:mm\" (24-hour)\n * or \"h:mm AM/PM\" (12-hour)\n */\n onChange: (time: string) => void;\n\n /**\n * Placeholder text when no time is selected\n * @default \"Select time...\"\n */\n placeholder?: string;\n\n /**\n * Use 24-hour format instead of 12-hour with AM/PM\n * @default false\n */\n use24Hour?: boolean;\n\n /**\n * Minute step interval (e.g., 15 for 15-minute increments)\n * @default 1\n */\n minuteStep?: number;\n\n /**\n * Show clear button\n * @default true\n */\n clearable?: boolean;\n\n /**\n * Show clock icon\n * @default true\n */\n showIcon?: boolean;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\nfunction normalizeToNativeTime(value: string): string {\n if (!value) return \"\";\n\n // 12-hour format: h:mm AM/PM or hh:mm:ss AM/PM\n const twelveHourMatch = value.match(\n /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)$/i,\n );\n if (twelveHourMatch) {\n const rawHour = parseInt(twelveHourMatch[1], 10);\n const minute = parseInt(twelveHourMatch[2], 10);\n const period = twelveHourMatch[4].toUpperCase();\n\n if (\n Number.isNaN(rawHour) ||\n Number.isNaN(minute) ||\n rawHour < 1 ||\n rawHour > 12 ||\n minute < 0 ||\n minute > 59\n ) {\n return \"\";\n }\n\n const normalizedHour =\n period === \"PM\"\n ? rawHour === 12\n ? 12\n : rawHour + 12\n : rawHour === 12\n ? 0\n : rawHour;\n\n return `${String(normalizedHour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n }\n\n // 24-hour format: HH:mm or HH:mm:ss\n const twentyFourHourMatch = value.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/);\n if (twentyFourHourMatch) {\n const hour = parseInt(twentyFourHourMatch[1], 10);\n const minute = parseInt(twentyFourHourMatch[2], 10);\n\n if (\n Number.isNaN(hour) ||\n Number.isNaN(minute) ||\n hour < 0 ||\n hour > 23 ||\n minute < 0 ||\n minute > 59\n ) {\n return \"\";\n }\n\n return `${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n }\n\n return \"\";\n}\n\nfunction formatFromNativeTime(nativeValue: string, use24Hour: boolean): string {\n if (!nativeValue) return \"\";\n\n const [hourValue, minuteValue] = nativeValue.split(\":\");\n const hour = parseInt(hourValue, 10);\n const minute = parseInt(minuteValue, 10);\n\n if (Number.isNaN(hour) || Number.isNaN(minute)) {\n return \"\";\n }\n\n if (use24Hour) {\n return `${String(hour).padStart(2, \"0\")}:${String(minute).padStart(2, \"0\")}`;\n }\n\n const period = hour >= 12 ? \"PM\" : \"AM\";\n const hour12 = hour % 12 || 12;\n return `${hour12}:${String(minute).padStart(2, \"0\")} ${period}`;\n}\n\n/**\n * TimePicker - Accessible time input component using native time picker UX.\n *\n * Uses a native `type=\"time\"` input for a streamlined UX while preserving\n * formatting compatibility for 12-hour and 24-hour output formats.\n */\nexport function TimePicker({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n placeholder = \"Select time...\",\n use24Hour = false,\n minuteStep = 1,\n clearable = true,\n showIcon = true,\n ...props\n}: TimePickerProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [nativeValue, setNativeValue] = React.useState<string>(\n normalizeToNativeTime(value),\n );\n\n React.useEffect(() => {\n setNativeValue(normalizeToNativeTime(value));\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const nextNativeValue = e.target.value;\n setNativeValue(nextNativeValue);\n onChange(formatFromNativeTime(nextNativeValue, use24Hour));\n };\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n setNativeValue(\"\");\n onChange(\"\");\n inputRef.current?.focus();\n };\n\n const hasValue = Boolean(value);\n const stepInSeconds = Math.max(1, minuteStep * 60);\n\n return (\n <div className={cn(\"relative\", className)}>\n {/* Hidden input preserves external value format for form submission */}\n <input type=\"hidden\" name={name} value={value} />\n\n <div className=\"relative\">\n {showIcon && (\n <span\n className=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none\"\n aria-hidden=\"true\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 6v6l4 2\" />\n </svg>\n </span>\n )}\n <Input\n ref={inputRef}\n type=\"time\"\n className={cn(\n \"appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\",\n INPUT_AUTOFILL_RESET_CLASSES,\n showIcon ? \"pl-10\" : \"pl-3\",\n clearable && value ? \"pr-10\" : \"pr-3\",\n !error && hasValue && \"ring-2 ring-ring\",\n error && \"border-destructive ring-1 ring-destructive\",\n )}\n value={nativeValue}\n onChange={handleChange}\n onBlur={onBlur}\n disabled={disabled}\n required={required}\n step={stepInSeconds}\n placeholder={placeholder}\n aria-invalid={error || props[\"aria-invalid\"] ? \"true\" : \"false\"}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n {clearable && value && !disabled && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"absolute right-1.5 top-1/2 h-7 w-7 -translate-y-1/2 p-0\"\n onClick={handleClear}\n aria-label=\"Clear time\"\n tabIndex={-1}\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </Button>\n )}\n </div>\n </div>\n );\n}\n\nTimePicker.displayName = \"TimePicker\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { DayButtonProps, Matcher } from \"react-day-picker\";\nimport type { InputProps } from \"../core/types\";\nimport { Calendar } from \"../components/ui/calendar\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover\";\nimport { cn, INPUT_AUTOFILL_RESET_CLASSES } from \"../lib/utils\";\n\n/**\n * Date range value\n */\nexport interface DateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/**\n * DateRangePicker props interface\n */\nexport interface DateRangePickerProps extends Omit<\n InputProps<DateRange>,\n \"onChange\"\n> {\n /**\n * Change handler - receives date range object\n */\n onChange: (range: DateRange) => void;\n\n /**\n * Placeholder text when no dates are selected\n * @default \"Select date range...\"\n */\n placeholder?: string;\n\n /**\n * Date format for display\n * @default \"MM/dd/yyyy\"\n */\n format?: string;\n\n /**\n * Minimum selectable date\n */\n minDate?: Date;\n\n /**\n * Maximum selectable date\n */\n maxDate?: Date;\n\n /**\n * Dates that should be disabled\n */\n disabledDates?: Date[];\n\n /**\n * Function to determine if a date should be disabled\n */\n isDateDisabled?: (date: Date) => boolean;\n\n /**\n * Show clear button\n * @default true\n */\n clearable?: boolean;\n\n /**\n * Show calendar icon\n * @default true\n */\n showIcon?: boolean;\n\n /**\n * Separator between start and end dates\n * @default \" - \"\n */\n separator?: string;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Format date to string\n */\nfunction formatDate(date: Date | null, format: string): string {\n if (!date) return \"\";\n\n const d = new Date(date);\n const month = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n const year = d.getFullYear();\n\n return format\n .replace(\"MM\", month)\n .replace(\"dd\", day)\n .replace(\"yyyy\", String(year))\n .replace(\"yy\", String(year).slice(2));\n}\n\nfunction toDayTimestamp(date: Date): number {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime();\n}\n\nfunction isSameDay(date: Date, target: Date | null): boolean {\n if (!target) return false;\n return toDayTimestamp(date) === toDayTimestamp(target);\n}\n\nfunction isDateInRange(date: Date, start: Date | null, end: Date | null): boolean {\n if (!start || !end) return false;\n\n const value = toDayTimestamp(date);\n const startTs = toDayTimestamp(start);\n const endTs = toDayTimestamp(end);\n\n return value >= Math.min(startTs, endTs) && value <= Math.max(startTs, endTs);\n}\n\n/**\n * DateRangePicker - Accessible date range selection component\n *\n * Uses ShadCN Calendar + Popover primitives while preserving the existing\n * public API and interaction semantics.\n */\nexport function DateRangePicker({\n name,\n value = { start: null, end: null },\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n placeholder = \"Select date range...\",\n format = \"MM/dd/yyyy\",\n minDate,\n maxDate,\n disabledDates = [],\n isDateDisabled,\n clearable = true,\n showIcon = true,\n separator = \" - \",\n ...props\n}: DateRangePickerProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [hasInteracted, setHasInteracted] = React.useState(false);\n const [selectedMonth, setSelectedMonth] = React.useState<Date>(\n value.start || new Date(),\n );\n const [rangeStart, setRangeStart] = React.useState<Date | null>(value.start);\n const [rangeEnd, setRangeEnd] = React.useState<Date | null>(value.end);\n const [hoverDate, setHoverDate] = React.useState<Date | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Sync range with controlled value prop\n React.useEffect(() => {\n setRangeStart(value.start);\n setRangeEnd(value.end);\n\n if (value.start) {\n setSelectedMonth(value.start);\n }\n }, [value]);\n\n const disabledMatchers = React.useMemo<Matcher[]>(() => {\n const matchers: Matcher[] = [];\n\n if (minDate) {\n matchers.push({ before: minDate });\n }\n\n if (maxDate) {\n matchers.push({ after: maxDate });\n }\n\n if (disabledDates.length > 0) {\n matchers.push(disabledDates);\n }\n\n if (isDateDisabled) {\n matchers.push(isDateDisabled);\n }\n\n return matchers;\n }, [disabledDates, isDateDisabled, maxDate, minDate]);\n\n const handleDateSelect = React.useCallback(\n (date: Date) => {\n if (!rangeStart || rangeEnd) {\n setRangeStart(date);\n setRangeEnd(null);\n setHoverDate(null);\n setSelectedMonth(date);\n onChange({ start: date, end: null });\n onBlur?.();\n return;\n }\n\n if (toDayTimestamp(date) < toDayTimestamp(rangeStart)) {\n setRangeStart(date);\n setRangeEnd(rangeStart);\n setHoverDate(null);\n setSelectedMonth(date);\n onChange({ start: date, end: rangeStart });\n setIsOpen(false);\n onBlur?.();\n return;\n }\n\n setRangeEnd(date);\n setHoverDate(null);\n setSelectedMonth(date);\n onChange({ start: rangeStart, end: date });\n setIsOpen(false);\n onBlur?.();\n },\n [onBlur, onChange, rangeEnd, rangeStart],\n );\n\n const handleClear = React.useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n setRangeStart(null);\n setRangeEnd(null);\n setHoverDate(null);\n setIsOpen(false);\n onChange({ start: null, end: null });\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n if (disabled) {\n setIsOpen(false);\n return;\n }\n\n if (nextOpen) {\n if (!hasInteracted) {\n setHasInteracted(true);\n }\n setIsOpen(true);\n return;\n }\n\n if (isOpen && hasInteracted) {\n onBlur?.();\n }\n\n setHoverDate(null);\n setIsOpen(false);\n },\n [disabled, hasInteracted, isOpen, onBlur],\n );\n\n const handleInputBlur = React.useCallback(() => {\n if (!isOpen) {\n onBlur?.();\n }\n }, [isOpen, onBlur]);\n\n const handleInputClick = React.useCallback(() => {\n if (!hasInteracted) {\n setHasInteracted(true);\n }\n }, [hasInteracted]);\n\n const RangeDayButton = React.useCallback(\n ({\n day,\n modifiers,\n className: dayClassName,\n children,\n onClick,\n onMouseEnter,\n onMouseLeave,\n ...rest\n }: DayButtonProps) => {\n const date = day.date;\n const isStart = isSameDay(date, rangeStart);\n const isEnd = isSameDay(date, rangeEnd);\n const isRangeEndpoint = isStart || isEnd;\n const isInCommittedRange = isDateInRange(date, rangeStart, rangeEnd);\n const isInHoverRange =\n !!rangeStart &&\n !rangeEnd &&\n !!hoverDate &&\n isDateInRange(date, rangeStart, hoverDate);\n const isRangeHighlight = (isInCommittedRange || isInHoverRange) && !isRangeEndpoint;\n const isToday = isSameDay(date, new Date());\n\n return (\n <button\n type=\"button\"\n {...rest}\n className={cn(\n \"flex items-center justify-center h-8 w-8 rounded-md border-none bg-transparent cursor-pointer text-sm transition-colors\",\n \"hover:bg-accent\",\n isRangeEndpoint && \"bg-primary text-primary-foreground font-semibold\",\n isRangeHighlight && \"bg-accent\",\n !isRangeEndpoint && !isRangeHighlight && isToday && \"border border-primary\",\n modifiers.disabled && \"cursor-not-allowed opacity-50 pointer-events-none\",\n dayClassName,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (modifiers.disabled) return;\n handleDateSelect(date);\n }}\n onMouseEnter={(event) => {\n onMouseEnter?.(event);\n if (modifiers.disabled) {\n setHoverDate(null);\n return;\n }\n setHoverDate(date);\n }}\n onMouseLeave={(event) => {\n onMouseLeave?.(event);\n setHoverDate(null);\n }}\n >\n {children ?? date.getDate()}\n </button>\n );\n },\n [handleDateSelect, hoverDate, rangeEnd, rangeStart],\n );\n\n const hasValue = Boolean(rangeStart || rangeEnd);\n const selectedRange =\n rangeStart || rangeEnd\n ? {\n from: rangeStart ?? undefined,\n to: rangeEnd ?? undefined,\n }\n : undefined;\n\n const displayValue =\n rangeStart && rangeEnd\n ? `${formatDate(rangeStart, format)}${separator}${formatDate(rangeEnd, format)}`\n : rangeStart\n ? formatDate(rangeStart, format)\n : \"\";\n\n const combinedClassName = cn(\"relative\", className);\n\n return (\n <div className={combinedClassName}>\n {/* Hidden inputs for form submission */}\n <input\n type=\"hidden\"\n name={`${name}[start]`}\n value={rangeStart ? rangeStart.toISOString() : \"\"}\n />\n <input\n type=\"hidden\"\n name={`${name}[end]`}\n value={rangeEnd ? rangeEnd.toISOString() : \"\"}\n />\n\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n {/* Custom date range input */}\n <div className=\"relative\">\n {showIcon && (\n <span\n className=\"absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none\"\n aria-hidden=\"true\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n >\n <path d=\"M8 2v4m8-4v4m5 8V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8M3 10h18m-5 10l2 2l4-4\" />\n </svg>\n </span>\n )}\n <PopoverTrigger asChild>\n <input\n ref={inputRef}\n id={props.id}\n type=\"text\"\n className={cn(\n \"flex h-9 w-full rounded-md border border-input bg-transparent py-1 text-base shadow-sm transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\",\n \"disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n INPUT_AUTOFILL_RESET_CLASSES,\n showIcon ? \"pl-10\" : \"pl-3\",\n clearable && (rangeStart || rangeEnd) ? \"pr-10\" : \"pr-3\",\n !error && hasValue && \"ring-2 ring-ring\",\n error && \"border-destructive ring-1 ring-destructive\",\n )}\n value={displayValue}\n onClick={handleInputClick}\n onBlur={handleInputBlur}\n disabled={disabled}\n required={required}\n placeholder={placeholder}\n aria-invalid={error || props[\"aria-invalid\"] ? \"true\" : \"false\"}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n readOnly\n />\n </PopoverTrigger>\n {clearable && (rangeStart || rangeEnd) && !disabled && (\n <button\n type=\"button\"\n className=\"absolute right-3 top-1/2 -translate-y-1/2 transition-colors\"\n onClick={handleClear}\n aria-label=\"Clear date range\"\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n </div>\n\n {!disabled && (\n <PopoverContent\n align=\"start\"\n sideOffset={4}\n className=\"w-auto p-0\"\n onOpenAutoFocus={(event) => {\n event.preventDefault();\n }}\n >\n <Calendar\n mode=\"range\"\n selected={selectedRange}\n month={selectedMonth}\n onMonthChange={setSelectedMonth}\n disabled={disabledMatchers}\n labels={{\n labelGrid: () => \"Calendar\",\n labelDayButton: (date) => formatDate(date, format),\n labelPrevious: () => \"Previous month\",\n labelNext: () => \"Next month\",\n }}\n components={{\n DayButton: RangeDayButton,\n }}\n classNames={{\n today: \"border border-primary rounded-md bg-transparent\",\n }}\n showOutsideDays\n />\n\n {rangeStart && !rangeEnd && (\n <div className=\"border-t border-input px-3 py-2 text-center text-xs opacity-70\">\n Select end date\n </div>\n )}\n </PopoverContent>\n )}\n </Popover>\n </div>\n );\n}\n\nDateRangePicker.displayName = \"DateRangePicker\";\n"]}
|