@invana/forms 0.0.32 → 0.0.34
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/index.cjs +186 -126
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -9
- package/dist/index.d.ts +22 -9
- package/dist/index.js +186 -126
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/label.tsx","../src/components/form.tsx","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/input-group.tsx","../src/components/password-input.tsx","../src/components/switch.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/components/select.tsx","../src/fields/color-swatches.tsx","../src/components/slider.tsx","../src/fields/slider-number.tsx","../src/fields/icon-input.tsx","../src/form-field.tsx","../src/settings-panel.tsx","../src/components/field.tsx","../src/components/param-row.tsx"],"names":["cva","React","jsx","LabelPrimitive","cn","FormProvider","React2","Controller","useFormContext","Slot","React3","React4","React5","Button","React6","jsxs","EyeOff","Eye","React7","SwitchPrimitives","React8","CheckboxPrimitive","Check","React9","RadioGroupPrimitive","Circle","SelectPrimitive","React10","ChevronDown","ChevronUp","React11","React12","SliderPrimitive","React13","Badge","React14","Eyebrow","Accordion","AccordionItem","AccordionTrigger","AccordionContent","FormField","Card","CardContent","FieldLabel","Separator","useMemo","React15"],"mappings":"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","file":"index.cjs","sourcesContent":["import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@invana/ui\"\n\nconst labelVariants = cva(\n \"font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n FormProvider,\n useFormContext,\n} from \"react-hook-form\"\nimport { cn } from \"@invana/ui\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nconst FormItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n ref={ref}\n // The error ink goes last, so a label a size tier mutes still turns red.\n className={cn(className, error && \"text-destructive\")}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn(\"text-[0.8rem] text-muted-foreground\", className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn(\"text-[0.8rem] font-medium text-destructive\", className)}\n {...props}\n >\n {body}\n </p>\n )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@invana/ui\"\n\n/**\n * The control scale: `sm` (26px) is the application field — a property\n * editor, a settings row, a form inside a 420px panel; `default` (32px) a\n * standalone form or dialog; `lg` (40px) a form page.\n *\n * Named `inputSize` because `size` is already an `<input>` attribute meaning\n * \"how many characters wide\", and shadowing it would silently drop that.\n */\nexport type InputSize = \"sm\" | \"default\" | \"lg\"\n\nconst Input = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<\"input\"> & { inputSize?: InputSize }\n>(\n ({ className, type, inputSize = \"default\", ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"py-0\",\n inputSize === \"sm\" ? \"h-control-sm px-2\" : inputSize === \"lg\" ? \"h-control-lg px-3\" : \"h-control-md px-2.5\",\n \"flex w-full rounded-control border border-input bg-background text-base ring-offset-background file:border-0 file:bg-transparent file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","import * as React from \"react\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\"> & {\n /** Matches `Input`'s `inputSize`. `sm` tightens padding and the floor. */\n inputSize?: \"default\" | \"sm\"\n }\n>(({ className, inputSize = \"default\", ...props }, ref) => {\n return (\n <textarea\n className={cn(\n inputSize === \"sm\" ? \"min-h-[52px] px-2 py-1\" : \"min-h-[80px] px-3 py-2\",\n \"flex w-full rounded-control border border-input bg-background text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@invana/ui\"\nimport { Button } from \"@invana/ui\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\n/**\n * What a `FormControl` hands the group — the field's id and its description and\n * error wiring — passed on to the group's own input, so the `FormLabel` names\n * the input and not the box around it.\n */\ntype ControlWiring = Pick<React.ComponentProps<\"input\">, \"id\" | \"aria-describedby\" | \"aria-invalid\">\nconst InputGroupControl = React.createContext<ControlWiring>({})\n\nfunction InputGroup({\n className,\n id,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": invalid,\n ...props\n}: React.ComponentProps<\"div\">) {\n const wiring = React.useMemo<ControlWiring>(\n () => ({ id, \"aria-describedby\": describedBy, \"aria-invalid\": invalid }),\n [id, describedBy, invalid]\n )\n return (\n <InputGroupControl.Provider value={wiring}>\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group border-input dark:bg-input/30 shadow-xs relative flex w-full items-center rounded-control border outline-none transition-[color,box-shadow]\",\n \"h-control-md has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state.\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-ring has-[[data-slot=input-group-control]:focus-visible]:ring-1\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n </InputGroupControl.Provider>\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-control [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"flex items-center gap-2 shadow-none\",\n {\n variants: {\n size: {\n xs: \"h-control-xs gap-1 rounded-control px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-control-sm gap-1.5 rounded-control px-2.5 has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-control-xs rounded-control p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-control-sm p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n const wiring = React.useContext(InputGroupControl)\n return (\n <Input\n {...wiring}\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n const wiring = React.useContext(InputGroupControl)\n return (\n <Textarea\n {...wiring}\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","import * as React from \"react\"\nimport { Eye, EyeOff } from \"lucide-react\"\n\nimport { cn } from \"@invana/ui\"\nimport { Input } from \"./input\"\n\nexport type PasswordInputProps = Omit<\n React.ComponentProps<\"input\">,\n \"type\"\n> & {\n /** Controls visibility in a controlled fashion. Omit for self-managed toggle. */\n visible?: boolean\n onVisibleChange?: (visible: boolean) => void\n}\n\n/**\n * Password input with a built-in show/hide toggle. Wraps {@link Input} and\n * overlays an eye / eye-off button that flips the field between `password`\n * and `text`. Visibility is self-managed unless `visible` is supplied.\n */\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, visible, onVisibleChange, disabled, ...props }, ref) => {\n const [internalVisible, setInternalVisible] = React.useState(false)\n const isControlled = visible !== undefined\n const show = isControlled ? visible : internalVisible\n\n const toggle = () => {\n const next = !show\n if (!isControlled) setInternalVisible(next)\n onVisibleChange?.(next)\n }\n\n return (\n <div className=\"relative\">\n <Input\n type={show ? \"text\" : \"password\"}\n className={cn(\"pr-10\", className)}\n disabled={disabled}\n ref={ref}\n {...props}\n />\n <button\n type=\"button\"\n onClick={toggle}\n disabled={disabled}\n tabIndex={-1}\n aria-label={show ? \"Hide password\" : \"Show password\"}\n aria-pressed={show}\n className=\"absolute inset-y-0 right-0 flex items-center justify-center px-3 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {show ? (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n </div>\n )\n }\n)\nPasswordInput.displayName = \"PasswordInput\"\n\nexport { PasswordInput }\n","import * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border border-border shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0 data-[state=checked]:bg-primary-foreground data-[state=unchecked]:bg-foreground\"\n )}\n />\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\nimport { cn } from \"@invana/ui\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-control border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"@invana/ui\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n /** Matches `Input`'s `inputSize` — the control scale, `sm` 26 / `default` 32 / `lg` 40. */\n triggerSize?: \"sm\" | \"default\" | \"lg\"\n }\n>(({ className, children, triggerSize = \"default\", ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"py-0\",\n triggerSize === \"sm\" ? \"h-control-sm px-2\" : triggerSize === \"lg\" ? \"h-control-lg px-3\" : \"h-control-md px-2.5\",\n \"flex w-full items-center justify-between whitespace-nowrap rounded-control border border-input bg-transparent shadow-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-surface border bg-popover text-popover-foreground shadow-lg 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\",\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 {...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)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-control py-1.5 pl-2 pr-8 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","'use client';\nimport * as React from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '@invana/ui';\nimport type { ColorPreset } from '../types';\n\ninterface ColorSwatchesProps {\n value?: string;\n onChange?: (value: string) => void;\n presetColors?: ColorPreset[];\n defaultValue?: string;\n}\n\nconst DEFAULT_PRESETS: ColorPreset[] = [\n { label: 'Black', value: 'rgb(0, 0, 0)', darkValue: 'rgb(255, 255, 255)' },\n { label: 'Red', value: 'rgb(239, 68, 68)' },\n { label: 'Blue', value: 'rgb(59, 130, 246)' },\n];\n\nexport const ColorSwatches: React.FC<ColorSwatchesProps> = ({\n value,\n onChange,\n presetColors = DEFAULT_PRESETS,\n defaultValue = 'rgb(0, 0, 0)',\n}) => {\n const [customColor, setCustomColor] = React.useState(value || defaultValue);\n const [isCustom, setIsCustom] = React.useState(false);\n\n // A new `value` (or preset list) from the parent re-decides which swatch\n // is on — adjusted while rendering, not in an effect.\n const [seen, setSeen] = React.useState<{ value?: string; presetColors: typeof presetColors }>({\n presetColors,\n });\n if (value && (value !== seen.value || presetColors !== seen.presetColors)) {\n setSeen({ value, presetColors });\n const isPreset = presetColors.some((c) => c.value === value);\n setIsCustom(!isPreset);\n if (!isPreset) setCustomColor(value);\n }\n\n const select = (newColor: string, custom = false) => {\n setIsCustom(custom);\n if (custom) setCustomColor(newColor);\n onChange?.(newColor);\n };\n\n return (\n <div className=\"flex gap-2\">\n {presetColors.map((color) => (\n <button\n key={color.label}\n type=\"button\"\n onClick={() => select(color.value)}\n className={cn(\n 'group relative h-8 w-8 overflow-hidden rounded-control border',\n 'ring-offset-background transition-all hover:scale-105',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n !isCustom && value === color.value && 'ring-2 ring-ring ring-offset-2'\n )}\n >\n <div className=\"h-full w-full\" style={{ backgroundColor: color.value }} />\n {!isCustom && value === color.value && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/30\">\n <Check className=\"h-4 w-4 text-white\" />\n </div>\n )}\n <span className=\"sr-only\">Select {color.label}</span>\n </button>\n ))}\n <div\n className={cn(\n 'group relative h-8 w-8 overflow-hidden rounded-control border',\n 'ring-offset-background transition-all hover:scale-105',\n isCustom && 'ring-2 ring-ring ring-offset-2'\n )}\n >\n <input\n type=\"color\"\n value={customColor}\n onChange={(e) => select(e.target.value, true)}\n className=\"absolute inset-0 cursor-pointer opacity-0\"\n />\n <div className=\"h-full w-full\" style={{ backgroundColor: customColor }} />\n {isCustom && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/30\">\n <Check className=\"h-4 w-4 text-white\" />\n </div>\n )}\n <span className=\"sr-only\">Custom color</span>\n </div>\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n","'use client';\nimport * as React from 'react';\nimport { cn } from '@invana/ui';\nimport { Input } from '../components/input';\nimport { Slider } from '../components/slider';\n\ninterface SliderNumberProps {\n value?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n className?: string;\n}\n\nexport const SliderNumber: React.FC<SliderNumberProps> = ({\n value = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n className,\n}) => {\n const [local, setLocal] = React.useState<number>(value);\n // A new `value` from the parent replaces the local one — adjusted while\n // rendering, not in an effect, so the stale number never paints.\n const [seen, setSeen] = React.useState(value);\n if (value !== seen) {\n setSeen(value);\n setLocal(value);\n }\n\n const set = (n: number) => {\n setLocal(n);\n onChange?.(n);\n };\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <Slider\n value={[local]}\n onValueChange={([n]: number[]) => set(n)}\n min={min}\n max={max}\n step={step}\n className=\"flex-1\"\n />\n <Input\n type=\"number\"\n value={local}\n onChange={(e) => set(Number(e.target.value))}\n className=\"h-8 w-16\"\n min={min}\n max={max}\n step={step}\n />\n </div>\n );\n};\n","'use client';\nimport * as React from 'react';\nimport { Input } from '../components/input';\n\ninterface IconInputProps {\n value?: string;\n onChange?: (value: string) => void;\n}\n\n/**\n * Minimal icon picker — text input + preview swatch. Acts as a placeholder\n * until a real icon picker (e.g. lucide search) is added.\n */\nexport const IconInput: React.FC<IconInputProps> = ({ value, onChange }) => {\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex size-control-md shrink-0 items-center justify-center rounded-control border bg-muted\">\n {value ? value.slice(0, 2) : '–'}\n </div>\n <Input\n type=\"text\"\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder=\"icon name\"\n className=\"h-control-md\"\n />\n </div>\n );\n};\n","'use client';\nimport * as React from 'react';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n Badge,\n cn,\n Eyebrow,\n} from '@invana/ui';\nimport {\n FormField as FormFieldBase,\n FormControl,\n FormDescription,\n FormItem,\n FormLabel,\n FormMessage,\n} from './components/form';\nimport { Input } from './components/input';\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from './components/input-group';\nimport { PasswordInput } from './components/password-input';\nimport { Textarea } from './components/textarea';\nimport { Switch } from './components/switch';\nimport { Checkbox } from './components/checkbox';\nimport { RadioGroup, RadioGroupItem } from './components/radio-group';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from './components/select';\nimport { ColorSwatches } from './fields/color-swatches';\nimport { SliderNumber } from './fields/slider-number';\nimport { IconInput } from './fields/icon-input';\nimport type {\n BooleanControl,\n ColorPreset,\n FieldBadge,\n FieldConfig,\n FieldOrientation,\n FieldSize,\n GroupConfig,\n LabelPosition,\n ObjectFieldProps,\n RowConfig,\n} from './types';\nimport type { FieldValues } from 'react-hook-form';\n\n/* -------------------------------------------------------------------------- */\n/* Field.X — leaf field components */\n/* -------------------------------------------------------------------------- */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyValue = any;\n\ninterface BaseFieldProps {\n label?: string;\n description?: string;\n placeholder?: string;\n value?: AnyValue;\n onChange?: (value: AnyValue) => void;\n options?: { label: string; value: string }[];\n min?: number;\n max?: number;\n step?: number;\n presetColors?: ColorPreset[];\n defaultValue?: AnyValue;\n rows?: number;\n className?: string;\n labelClassName?: string;\n badge?: FieldBadge;\n labelPosition?: LabelPosition;\n size?: FieldSize;\n control?: BooleanControl;\n orientation?: FieldOrientation;\n /** Wrap a `switch` boolean in a bordered, padded box. Defaults to `false`. */\n boxed?: boolean;\n /** Unit at the end of a text or number input. */\n unit?: string;\n /** Note at the end of a text or number input, after the unit. */\n aside?: string;\n}\n\n/**\n * Per-size class tokens. Each size drives not just the control heights and text\n * but the surrounding density — grid gaps, section rhythm, label stacking, the\n * boolean box padding, the switch scale and the group accordion header — so a\n * single `size` prop reshapes the whole form from airy (`md`) to a dense\n * inspector panel (`xs`). The control heights are the control scale from\n * `@invana/styling`, one step per tier: `xs` 26, `sm` 32, `md` 40.\n * the underlying components' natural full-size defaults.\n */\nconst SIZE: Record<\n FieldSize,\n {\n /** control text/height */\n input: string;\n select: string;\n textarea: string;\n label: string;\n /** a field's own label, over or beside its control (not a choice's) */\n fieldLabel: string;\n desc: string;\n /** field-grid gaps */\n gap: string;\n /** rhythm between rows / accordion groups */\n section: string;\n /** rhythm between the ungrouped block and the group accordion */\n outer: string;\n /** vertical stacking inside a field (label→control, control→desc) */\n stack: string;\n /** column gap for `side` label layout */\n sideGap: string;\n /** group accordion header */\n trigger: string;\n /** switch scale (transform keeps the thumb proportions correct) */\n switch: string;\n /** checkbox control size (indicator icon scaled to match) */\n check: string;\n /** radio item size */\n radio: string;\n }\n> = {\n // The dense tier — an ask in a conversation, an inspector. Controls are the\n // scale's `sm` (26px), the text stays at the 13px floor; the field label is\n // muted and regular so the values, not the labels, carry the weight.\n xs: {\n input: 'h-control-sm py-0',\n select: 'h-control-sm py-0',\n textarea: '',\n label: 'text-base',\n fieldLabel: 'font-normal text-muted-foreground',\n desc: 'text-base',\n gap: 'gap-x-3 gap-y-2.5',\n section: 'space-y-3',\n outer: 'space-y-4',\n stack: 'space-y-2',\n sideGap: 'gap-x-2',\n trigger: 'py-1.5 text-base',\n switch: 'scale-90 origin-right',\n check: 'h-4 w-4',\n radio: 'h-4 w-4',\n },\n sm: {\n input: 'h-control-md',\n select: 'h-control-md',\n textarea: '',\n label: 'text-base',\n fieldLabel: '',\n desc: 'text-base',\n gap: 'gap-x-3 gap-y-2',\n section: 'space-y-3',\n outer: 'space-y-4',\n stack: 'space-y-1.5',\n sideGap: 'gap-x-2',\n trigger: 'py-1.5 text-base',\n switch: 'scale-90 origin-right',\n check: 'h-4 w-4',\n radio: 'h-4 w-4',\n },\n md: {\n input: 'h-control-lg px-3',\n select: 'h-control-lg px-3',\n textarea: '',\n label: 'text-base',\n fieldLabel: '',\n desc: 'text-base',\n gap: 'gap-4',\n section: 'space-y-4',\n outer: 'space-y-6',\n stack: 'space-y-2',\n sideGap: 'gap-2',\n trigger: 'py-1.5 text-base',\n switch: '',\n check: 'h-4 w-4',\n radio: 'h-4 w-4',\n },\n};\n\nfunction itemClasses(\n labelPosition: LabelPosition,\n size: FieldSize,\n className?: string\n) {\n return cn(\n // `space-y-0` undoes FormItem's own stacking, whose margin would push the\n // control below its label in a row.\n labelPosition === 'side' &&\n cn('grid grid-cols-3 items-center space-y-0', SIZE[size].sideGap),\n labelPosition === 'top' && SIZE[size].stack,\n className\n );\n}\n\nfunction inputWrapper(labelPosition: LabelPosition, size: FieldSize) {\n return cn(labelPosition === 'side' && 'col-span-2', SIZE[size].stack);\n}\n\n/** A single status pill (field label / section header), styled consistently. */\nfunction StatusPill({ badge }: { badge: FieldBadge }) {\n return (\n <Badge\n variant={badge.variant ?? 'secondary'}\n className=\"px-1.5 py-0 text-base font-medium\"\n >\n {badge.label}\n </Badge>\n );\n}\n\n/**\n * A field's `<FormLabel>` plus an optional trailing status pill. `FormLabel` is\n * already a `flex items-center gap-2` row, so the badge lines up beside the text\n * with no extra wrapper. Renders nothing when there is neither a label nor a\n * badge.\n */\nfunction FieldLabel({\n label,\n badge,\n size,\n className,\n}: {\n label?: React.ReactNode;\n badge?: FieldBadge;\n size: FieldSize;\n className?: string;\n}) {\n if (!label && !badge) return null;\n return (\n <FormLabel className={cn(SIZE[size].label, SIZE[size].fieldLabel, className)}>\n {label}\n {badge && <StatusPill badge={badge} />}\n </FormLabel>\n );\n}\n\n/**\n * An input with its unit and a short note drawn at its end — `30 %`,\n * `17 d quoted 14 d`. Without either it is the plain `Input`. Props other than\n * `className` reach the `<input>`, so `FormControl` wires its id and aria there.\n */\nconst AffixedInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<'input'> & { unit?: string; aside?: string }\n>(({ unit, aside, className, ...props }, ref) => {\n if (!unit && !aside) return <Input ref={ref} className={className} {...props} />;\n return (\n <InputGroup className={cn('bg-background dark:bg-background', className)}>\n <InputGroupInput ref={ref} className=\"h-full\" {...props} />\n <InputGroupAddon align=\"inline-end\" className=\"font-mono font-normal\">\n {unit && <span>{unit}</span>}\n {aside && <span>{aside}</span>}\n </InputGroupAddon>\n </InputGroup>\n );\n});\nAffixedInput.displayName = 'AffixedInput';\n\nexport const InputField: React.FC<BaseFieldProps> = ({\n label,\n description,\n placeholder,\n value,\n onChange,\n unit,\n aside,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <AffixedInput\n className={SIZE[size].input}\n unit={unit}\n aside={aside}\n placeholder={placeholder}\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const PasswordField: React.FC<BaseFieldProps> = ({\n label,\n description,\n placeholder,\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <PasswordInput\n className={SIZE[size].input}\n placeholder={placeholder}\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const TextareaField: React.FC<BaseFieldProps> = ({\n label,\n description,\n placeholder,\n value,\n onChange,\n rows,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <Textarea\n className={SIZE[size].textarea || undefined}\n rows={rows}\n placeholder={placeholder}\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const SelectField: React.FC<BaseFieldProps> = ({\n label,\n description,\n options = [],\n value,\n onChange,\n placeholder = 'Select type',\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <Select value={value ?? ''} onValueChange={onChange}>\n <FormControl>\n <SelectTrigger className={SIZE[size].select}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const BooleanField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n control = 'switch',\n labelClassName,\n badge,\n className,\n boxed = false,\n}) => {\n // Optional bordered/padded enclosure for the `switch` control (default off).\n const boxClass = boxed ? 'rounded-md border p-2' : '';\n // `checkbox` control: a compact inline `☑ label` that packs into the grid,\n // independent of labelPosition (the label always sits beside the box).\n if (control === 'checkbox') {\n return (\n <FormItem className={cn('flex items-center gap-2 space-y-0', className)}>\n <FormControl>\n <Checkbox\n className={SIZE[size].check}\n checked={!!value}\n onCheckedChange={onChange}\n />\n </FormControl>\n <FieldLabel\n label={label}\n badge={badge}\n size={size}\n className={cn(\n '!mt-0 cursor-pointer font-normal leading-none',\n labelClassName\n )}\n />\n </FormItem>\n );\n }\n if (labelPosition === 'side') {\n return (\n <FormItem className={cn('flex items-center justify-between', boxClass)}>\n <div>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n </div>\n <FormControl>\n <Switch\n className={SIZE[size].switch || undefined}\n checked={!!value}\n onCheckedChange={onChange}\n />\n </FormControl>\n </FormItem>\n );\n }\n return (\n <FormItem className={SIZE[size].stack}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={cn('flex items-center justify-between', boxClass)}>\n <FormControl>\n <Switch\n className={SIZE[size].switch || undefined}\n checked={!!value}\n onCheckedChange={onChange}\n />\n </FormControl>\n {description && (\n <FormDescription className={cn('ml-2', SIZE[size].desc)}>\n {description}\n </FormDescription>\n )}\n </div>\n </FormItem>\n );\n};\n\nexport const RadioField: React.FC<BaseFieldProps> = ({\n label,\n description,\n options = [],\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n orientation = 'vertical',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <RadioGroup\n value={value ?? ''}\n onValueChange={onChange}\n className={\n orientation === 'horizontal'\n ? 'flex flex-row items-center gap-x-4'\n : cn('flex flex-col', SIZE[size].stack)\n }\n >\n {options.map((o) => (\n <label\n key={o.value}\n className=\"flex cursor-pointer items-center gap-2\"\n >\n <RadioGroupItem\n value={o.value}\n className={cn('shrink-0', SIZE[size].radio)}\n />\n <span className={cn('leading-none', SIZE[size].label)}>{o.label}</span>\n </label>\n ))}\n </RadioGroup>\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const CheckboxGroupField: React.FC<BaseFieldProps> = ({\n label,\n description,\n options = [],\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n orientation = 'vertical',\n labelClassName,\n badge,\n className,\n}) => {\n const selected: string[] = Array.isArray(value) ? value : [];\n const toggle = (v: string, checked: boolean) =>\n onChange?.(checked ? [...selected, v] : selected.filter((x) => x !== v));\n\n return (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <div\n className={\n orientation === 'horizontal'\n ? 'flex flex-row items-center gap-x-4'\n : cn('flex flex-col', SIZE[size].stack)\n }\n >\n {options.map((o) => (\n <label\n key={o.value}\n className=\"flex cursor-pointer items-center gap-2\"\n >\n <Checkbox\n className={cn('shrink-0', SIZE[size].check)}\n checked={selected.includes(o.value)}\n onCheckedChange={(c) => toggle(o.value, c === true)}\n />\n <span className={cn('leading-none', SIZE[size].label)}>{o.label}</span>\n </label>\n ))}\n </div>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n );\n};\n\nexport const ColorField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n presetColors,\n defaultValue,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <ColorSwatches\n value={value}\n onChange={onChange}\n presetColors={presetColors}\n defaultValue={defaultValue}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const NumberField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n min,\n max,\n step,\n unit,\n aside,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n {/* A bounded number gets the slider; an open one, such as a scenario\n input, is typed, with its unit at the end. */}\n {min != null && max != null ? (\n <SliderNumber\n value={typeof value === 'number' ? value : 0}\n onChange={onChange}\n min={min}\n max={max}\n step={step}\n />\n ) : (\n <AffixedInput\n type=\"number\"\n className={SIZE[size].input}\n unit={unit}\n aside={aside}\n min={min}\n max={max}\n step={step}\n value={typeof value === 'number' ? value : ''}\n onChange={(e) =>\n onChange?.(e.target.value === '' ? undefined : Number(e.target.value))\n }\n />\n )}\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const IconField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <IconInput value={value} onChange={onChange} />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const Field = {\n Input: InputField,\n Password: PasswordField,\n Textarea: TextareaField,\n Boolean: BooleanField,\n Radio: RadioField,\n CheckboxGroup: CheckboxGroupField,\n Color: ColorField,\n Number: NumberField,\n Select: SelectField,\n Icon: IconField,\n};\n\n/* -------------------------------------------------------------------------- */\n/* ObjectField — renders a flat field config array under a parent name */\n/* -------------------------------------------------------------------------- */\n\nfunction humanize(name: string): string {\n return name\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (c) => c.toUpperCase())\n .trim();\n}\n\nfunction renderField(\n field: FieldConfig,\n parentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control: any,\n labelPosition: LabelPosition,\n size: FieldSize\n) {\n return (\n <FormFieldBase\n key={field.name}\n control={control}\n name={`${parentName}.${field.name}`}\n defaultValue={field.defaultValue as AnyValue}\n rules={field.rules}\n render={({ field: rhf }) => {\n const common: BaseFieldProps = {\n label: field.label ?? humanize(field.name),\n description: field.description,\n options: field.options,\n min: field.min,\n max: field.max,\n step: field.step,\n presetColors: field.presetColors,\n defaultValue: field.defaultValue,\n rows: field.rows,\n control: field.control,\n orientation: field.orientation,\n boxed: field.boxed,\n labelClassName: field.labelClassName,\n badge: field.badge,\n unit: field.unit,\n aside: field.aside,\n labelPosition,\n size,\n value: rhf.value,\n onChange: rhf.onChange,\n };\n switch (field.type) {\n case 'password':\n return (\n <PasswordField\n {...common}\n placeholder={field.placeholder ?? `Enter ${field.name}`}\n />\n );\n case 'boolean':\n return <BooleanField {...common} />;\n case 'radio':\n return <RadioField {...common} />;\n case 'checkbox':\n return <CheckboxGroupField {...common} />;\n case 'color':\n return <ColorField {...common} />;\n case 'number':\n return <NumberField {...common} />;\n case 'select':\n return <SelectField {...common} />;\n case 'icon':\n return <IconField {...common} />;\n case 'textarea':\n return (\n <TextareaField\n {...common}\n placeholder={field.placeholder ?? `Enter ${field.name}`}\n />\n );\n case 'text':\n default:\n return (\n <InputField\n {...common}\n placeholder={field.placeholder ?? `Enter ${field.name}`}\n />\n );\n }\n }}\n />\n );\n}\n\n/**\n * Render a set of fields into the field grid. The grid is `columns`-wide on\n * `md+` (two by default) and collapses to a single column below `md`. A field\n * spans multiple columns via `colSpan` and can carry extra cell classes via\n * `className`.\n *\n * `colSpan` / `columns` drive the grid through CSS variables (`--ff-span` /\n * `--ff-cols`) read by static `md:` utilities rather than per-number Tailwind\n * classes — so any count works without the host app having to pre-generate\n * `col-span-N` / `grid-cols-N`. The `md:` prefix keeps spans from leaking into\n * the single-column mobile layout, where every field is already full width.\n */\nfunction renderGrid(\n fields: FieldConfig[],\n parentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control: any,\n labelPosition: LabelPosition,\n size: FieldSize,\n columns: number,\n key?: string,\n fit: 'viewport' | 'container' = 'viewport'\n) {\n // Default 2-col layout keeps the plain `md:grid-cols-2` utility; custom\n // counts drive the template from `--ff-cols`.\n const customCols = columns !== 2;\n if (fit === 'container') {\n // A form in a card answers to the card, not the screen: two columns once\n // it is 280px wide, and a lone last field takes the whole row.\n return (\n <div key={key} className=\"@container\">\n <div\n className={cn(\n 'grid grid-cols-1',\n SIZE[size].gap,\n columns > 1 &&\n '@min-[280px]:grid-cols-2 @min-[280px]:[&>*:last-child:nth-child(odd)]:col-span-2'\n )}\n >\n {fields.map((f) => (\n <div key={f.name} className={f.className}>\n {renderField(f, parentName, control, labelPosition, size)}\n </div>\n ))}\n </div>\n </div>\n );\n }\n return (\n <div\n key={key}\n className={cn(\n 'grid grid-cols-1',\n SIZE[size].gap,\n customCols\n ? 'md:[grid-template-columns:repeat(var(--ff-cols),minmax(0,1fr))]'\n : 'md:grid-cols-2'\n )}\n style={\n customCols\n ? ({ '--ff-cols': columns } as React.CSSProperties)\n : undefined\n }\n >\n {fields.map((f) => {\n const span = f.colSpan && f.colSpan > 1 ? f.colSpan : undefined;\n return (\n <div\n key={f.name}\n className={cn(\n span && 'md:[grid-column:span_var(--ff-span)/span_var(--ff-span)]',\n f.className\n )}\n style={span ? ({ '--ff-span': span } as React.CSSProperties) : undefined}\n >\n {renderField(f, parentName, control, labelPosition, size)}\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction renderRows(\n fields: FieldConfig[],\n rowConfig: RowConfig[] | undefined,\n parentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control: any,\n labelPosition: LabelPosition,\n size: FieldSize,\n columns: number,\n fit: 'viewport' | 'container' = 'viewport'\n) {\n if (!rowConfig || rowConfig.length === 0) {\n return renderGrid(fields, parentName, control, labelPosition, size, columns, undefined, fit);\n }\n const used = new Set(rowConfig.flatMap((r) => r.fields));\n const unassigned = fields.filter((f) => !used.has(f.name));\n const byName = new Map(fields.map((f) => [f.name, f]));\n\n return (\n <div className={SIZE[size].section}>\n {rowConfig.map((row) => {\n const rowFields = row.fields\n .map((n) => byName.get(n))\n .filter((f): f is FieldConfig => !!f);\n if (rowFields.length === 0) return null;\n return renderGrid(\n rowFields,\n parentName,\n control,\n labelPosition,\n size,\n columns,\n row.id,\n fit\n );\n })}\n {unassigned.length > 0 &&\n renderGrid(\n unassigned,\n parentName,\n control,\n labelPosition,\n size,\n columns,\n '_unassigned',\n fit\n )}\n </div>\n );\n}\n\n// Generic over the form's values, so a typed `useForm` control is accepted as it is.\nconst ObjectField = <T extends FieldValues = FieldValues>({\n control,\n name,\n fields,\n rowConfig,\n groupConfig,\n labelPosition = 'side',\n size = 'sm',\n columns = 2,\n fit = 'viewport',\n groupAs = 'accordion',\n}: ObjectFieldProps<T>) => {\n const grouped = fields.reduce<Record<string, FieldConfig[]>>((acc, f) => {\n const key = f.group ?? '_ungrouped';\n (acc[key] ??= []).push(f);\n return acc;\n }, {});\n\n const ungrouped = grouped['_ungrouped'] ?? [];\n delete grouped['_ungrouped'];\n const groupedEntries = Object.entries(grouped);\n const groupConfigById = new Map<string, GroupConfig>(\n (groupConfig ?? []).map((g) => [g.id, g])\n );\n\n return (\n <div className={SIZE[size].outer}>\n {ungrouped.length > 0 && (\n <div className={SIZE[size].section}>\n {renderRows(\n ungrouped,\n rowConfig,\n name,\n control,\n labelPosition,\n size,\n columns,\n fit\n )}\n </div>\n )}\n\n {groupedEntries.length > 0 && groupAs === 'section' && (\n <div className={SIZE[size].section}>\n {groupedEntries.map(([group, gFields]) => (\n <section key={group} className={SIZE[size].stack}>\n <Eyebrow>{groupConfigById.get(group)?.label ?? humanize(group)}</Eyebrow>\n {renderRows(gFields, rowConfig, name, control, labelPosition, size, columns, fit)}\n </section>\n ))}\n </div>\n )}\n\n {groupedEntries.length > 0 && groupAs === 'accordion' && (\n <Accordion\n type=\"multiple\"\n defaultValue={groupedEntries.map(([k]) => k)}\n className=\"w-full\"\n >\n {groupedEntries.map(([group, gFields]) => {\n const gc = groupConfigById.get(group);\n return (\n <AccordionItem key={group} value={group} className=\"border-b\">\n <AccordionTrigger\n className={cn(\n 'font-semibold uppercase tracking-wide text-muted-foreground hover:no-underline',\n SIZE[size].trigger\n )}\n >\n <span className=\"flex items-center gap-2\">\n {gc?.label ?? humanize(group)}\n {(gc?.showCount ?? true) && (\n <Badge\n variant=\"secondary\"\n className=\"px-1.5 py-0 text-base font-normal tabular-nums\"\n >\n {gFields.length}\n </Badge>\n )}\n {gc?.badges?.map((b, i) => (\n <StatusPill key={i} badge={b} />\n ))}\n </span>\n </AccordionTrigger>\n <AccordionContent className=\"pb-3 pt-1\">\n <div className={SIZE[size].section}>\n {renderRows(\n gFields,\n rowConfig,\n name,\n control,\n labelPosition,\n size,\n columns,\n fit\n )}\n </div>\n </AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n )}\n </div>\n );\n};\n\n/* -------------------------------------------------------------------------- */\n/* FormField — shadcn FormField augmented with Field.* and ObjectField */\n/* -------------------------------------------------------------------------- */\n\ninterface FormFieldExtensions {\n ObjectField: typeof ObjectField;\n Input: typeof InputField;\n Password: typeof PasswordField;\n Textarea: typeof TextareaField;\n Boolean: typeof BooleanField;\n Radio: typeof RadioField;\n CheckboxGroup: typeof CheckboxGroupField;\n Color: typeof ColorField;\n Number: typeof NumberField;\n Select: typeof SelectField;\n Icon: typeof IconField;\n}\n\ntype FormFieldType = typeof FormFieldBase & FormFieldExtensions;\n\nexport const FormField = Object.assign(FormFieldBase, {\n ObjectField,\n Input: InputField,\n Password: PasswordField,\n Textarea: TextareaField,\n Boolean: BooleanField,\n Radio: RadioField,\n CheckboxGroup: CheckboxGroupField,\n Color: ColorField,\n Number: NumberField,\n Select: SelectField,\n Icon: IconField,\n}) as FormFieldType;\n\n// Also export ObjectField directly for consumers who prefer a flat import.\nexport { ObjectField };\n\nexport type {\n BooleanControl,\n FieldConfig,\n FieldOrientation,\n FieldSize,\n FieldType,\n RowConfig,\n LabelPosition,\n ObjectFieldProps,\n ColorPreset,\n} from './types';\n","'use client';\nimport * as React from 'react';\nimport { Card, CardContent, cn } from '@invana/ui';\nimport type { UseFormReturn } from 'react-hook-form';\nimport { Form } from './components/form';\nimport { ObjectField } from './form-field';\nimport type { ObjectFieldProps } from './types';\n\nexport interface SettingsPanelProps extends Omit<ObjectFieldProps, 'control'> {\n /**\n * The react-hook-form instance (from `useForm`). The panel renders its own\n * `<Form>` provider around the fields, so it is fully self-contained — no\n * external `<Form>` wrapper is required.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form: UseFormReturn<any>;\n /** Title shown above the fields (uppercase, muted — the panel heading). */\n title?: React.ReactNode;\n /** Extra classes merged onto the outer `Card` (e.g. a fixed width). */\n className?: string;\n /** Extra classes merged onto the scrollable `CardContent`. */\n contentClassName?: string;\n /**\n * Extra content rendered inside the form, after the fields — e.g. a footer\n * with Apply / Reset actions. Rendered within the `<Form>` provider so a\n * submit button has form context.\n */\n children?: React.ReactNode;\n}\n\n/**\n * A self-contained, form-driven settings / inspector panel: the card chrome, an\n * uppercase heading and the sectioned {@link ObjectField} accordion in a single\n * component. Consumers own their `useForm` and pass it in; everything else — the\n * `Card`, scroll region, `<Form>` provider, grouped accordions with count\n * badges and per-field status pills — is handled here.\n *\n * ```tsx\n * const form = useForm({ defaultValues });\n * <SettingsPanel title=\"Canvas Settings\" form={form} name=\"canvas\" fields={fields} />\n * ```\n *\n * All {@link ObjectFieldProps} (`name`, `fields`, `rowConfig`, `labelPosition`,\n * `size`, `columns`) are forwarded to the underlying `ObjectField`.\n */\nexport function SettingsPanel({\n form,\n title,\n className,\n contentClassName,\n children,\n ...objectField\n}: SettingsPanelProps) {\n return (\n <Card className={className}>\n <CardContent\n className={cn('max-h-[80vh] overflow-y-auto p-4', contentClassName)}\n >\n {title && (\n <h2 className=\"mb-3 text-base font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </h2>\n )}\n <Form {...form}>\n <ObjectField control={form.control} {...objectField} />\n {children}\n </Form>\n </CardContent>\n </Card>\n );\n}\n","import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@invana/ui\"\nimport { Label } from \"./label\"\nimport { Separator } from \"@invana/ui\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field data-[invalid=true]:text-destructive flex w-full gap-3\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start\",\n ],\n responsive: [\n \"@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 font-medium leading-snug group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors) {\n return null\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return errors[0].message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@invana/ui\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\nimport { Input } from \"./input\"\n\n/**\n * Where a parameter's value comes from.\n *\n * The three are not styles of the same thing — they decide *when* the value is\n * known. A literal is known now; an argument is known when a run is started; a\n * binding is known only once an earlier task has produced it.\n */\nexport type ParamSource = \"literal\" | \"argument\" | \"binding\"\n\nexport const PARAM_SOURCES: ParamSource[] = [\"literal\", \"argument\", \"binding\"]\n\nexport interface ParamRowProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** The parameter's name, as the contract spells it — `batch_size`, `map_over`. */\n name: string\n /** Its type and obligation, from the contract — `str · required`, `int · optional`. */\n type?: React.ReactNode\n /** Which of the three the current value is. */\n source: ParamSource\n onSourceChange?: (source: ParamSource) => void\n /** The value itself — a literal, `${args.model}`, `${steps.x.rows}`. */\n value: string\n onValueChange?: (value: string) => void\n /**\n * What the reader needs to know that the value does not say — what a binding\n * will resolve to, which alternatives an enum allows, why a default was left\n * alone. Rendered as the error when `invalid` is set.\n */\n note?: React.ReactNode\n /** The value does not resolve, or the contract refuses it. Reddens the control and the note. */\n invalid?: boolean\n /**\n * The parameter is not in play — a `when` on a task that always runs. Shown\n * rather than hidden, because a contract's full surface is the point of the\n * form.\n */\n disabled?: boolean\n /** Replaces the value control entirely, for a parameter that needs its own editor. */\n children?: React.ReactNode\n}\n\n/**\n * One parameter of a task, as a row: what it is called, where its value comes\n * from, what the value is, and what that means.\n *\n * The form these rows make **is** the catalogue contract — the fields, their\n * types and their obligations are read off the entry, never authored here. So a\n * row takes a descriptor rather than children, and a parameter the contract\n * does not declare has no way to appear.\n *\n * `source` and `value` are one control, joined, because they are one decision.\n * Split into two fields they read as two questions, and a reader can end up\n * with `literal` selected beside a value that is plainly a binding.\n *\n * Not a `Field`. That one lays out a label, a control and a description for a\n * form a person fills in from nothing; this lays out a *contract* — the label\n * column carries a type, and the description usually explains a value the\n * person did not type.\n */\nexport const ParamRow = React.forwardRef<HTMLDivElement, ParamRowProps>(\n (\n {\n name,\n type,\n source,\n onSourceChange,\n value,\n onValueChange,\n note,\n invalid,\n disabled,\n className,\n children,\n ...props\n },\n ref,\n ) => (\n <div\n ref={ref}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={cn(\"flex items-start gap-3 py-1.5\", className)}\n {...props}\n >\n <div className=\"w-[118px] shrink-0 pt-1\">\n <div className=\"truncate font-mono text-sm\">{name}</div>\n {type != null ? (\n <div className=\"truncate text-sm text-muted-foreground\">{type}</div>\n ) : null}\n </div>\n\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n {children ?? (\n <div className=\"flex min-w-0\">\n <Select\n value={source}\n onValueChange={(v) => onSourceChange?.(v as ParamSource)}\n disabled={disabled}\n >\n <SelectTrigger\n triggerSize=\"sm\"\n aria-label={`${name} source`}\n className=\"w-auto shrink-0 rounded-r-none border-r-0 text-sm text-muted-foreground\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {PARAM_SOURCES.map((s) => (\n <SelectItem key={s} value={s}>\n {s}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n inputSize=\"sm\"\n value={value}\n onChange={(e) => onValueChange?.(e.target.value)}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-label={name}\n // The colour is a token, set inline because the kit's build emits\n // no `border-<colour>` utility today — `border-destructive`\n // renders grey. Same workaround as `Gantt`'s error band.\n style={invalid ? { borderColor: \"var(--color-destructive)\" } : undefined}\n className=\"min-w-0 flex-1 rounded-l-none font-mono\"\n />\n </div>\n )}\n {note != null ? (\n <div\n className={cn(\n \"text-sm\",\n invalid ? \"text-destructive\" : \"text-muted-foreground\",\n )}\n >\n {note}\n </div>\n ) : null}\n </div>\n </div>\n ),\n)\nParamRow.displayName = \"ParamRow\"\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/label.tsx","../src/components/form.tsx","../src/components/input.tsx","../src/components/textarea.tsx","../src/components/input-group.tsx","../src/components/password-input.tsx","../src/components/switch.tsx","../src/components/checkbox.tsx","../src/components/radio-group.tsx","../src/components/select.tsx","../src/fields/color-swatches.tsx","../src/components/slider.tsx","../src/fields/slider-number.tsx","../src/fields/icon-input.tsx","../src/form-field.tsx","../src/settings-panel.tsx","../src/components/field.tsx","../src/components/param-row.tsx"],"names":["cva","React","jsx","LabelPrimitive","cn","FormProvider","React2","Controller","useFormContext","Slot","React3","React4","React5","Button","React6","jsxs","EyeOff","Eye","React7","SwitchPrimitives","React8","CheckboxPrimitive","Check","React9","RadioGroupPrimitive","Circle","SelectPrimitive","React10","ChevronDown","ChevronUp","React11","React12","SliderPrimitive","React13","Badge","React14","Eyebrow","Accordion","AccordionItem","AccordionTrigger","AccordionContent","FormField","Card","CardContent","FieldLabel","Separator","useMemo","React15"],"mappings":"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","file":"index.cjs","sourcesContent":["import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@invana/ui\"\n\nconst labelVariants = cva(\n \"font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n Controller,\n ControllerProps,\n FieldPath,\n FieldValues,\n FormProvider,\n useFormContext,\n} from \"react-hook-form\"\nimport { cn } from \"@invana/ui\"\nimport { Label } from \"./label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { getFieldState, formState } = useFormContext()\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n if (!fieldContext) {\n throw new Error(\"useFormField should be used within <FormField>\")\n }\n\n const { id } = itemContext\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n }\n}\n\ntype FormItemContextValue = {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n {} as FormItemContextValue\n)\n\nconst FormItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n </FormItemContext.Provider>\n )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n const { error, formItemId } = useFormField()\n\n return (\n <Label\n ref={ref}\n // The error ink goes last, so a label a size tier mutes still turns red.\n className={cn(className, error && \"text-destructive\")}\n htmlFor={formItemId}\n {...props}\n />\n )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n React.ElementRef<typeof Slot>,\n React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n return (\n <Slot\n ref={ref}\n id={formItemId}\n aria-describedby={\n !error\n ? `${formDescriptionId}`\n : `${formDescriptionId} ${formMessageId}`\n }\n aria-invalid={!!error}\n {...props}\n />\n )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n const { formDescriptionId } = useFormField()\n\n return (\n <p\n ref={ref}\n id={formDescriptionId}\n className={cn(\"text-[0.8rem] text-muted-foreground\", className)}\n {...props}\n />\n )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error ? String(error?.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n ref={ref}\n id={formMessageId}\n className={cn(\"text-[0.8rem] font-medium text-destructive\", className)}\n {...props}\n >\n {body}\n </p>\n )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n useFormField,\n Form,\n FormItem,\n FormLabel,\n FormControl,\n FormDescription,\n FormMessage,\n FormField,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@invana/ui\"\n\n/**\n * The control scale: `sm` (26px) is the application field — a property\n * editor, a settings row, a form inside a 420px panel; `default` (32px) a\n * standalone form or dialog; `lg` (40px) a form page.\n *\n * Named `inputSize` because `size` is already an `<input>` attribute meaning\n * \"how many characters wide\", and shadowing it would silently drop that.\n */\nexport type InputSize = \"sm\" | \"default\" | \"lg\"\n\nconst Input = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<\"input\"> & { inputSize?: InputSize }\n>(\n ({ className, type, inputSize = \"default\", ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"py-0\",\n inputSize === \"sm\" ? \"h-control-sm px-2\" : inputSize === \"lg\" ? \"h-control-lg px-3\" : \"h-control-md px-2.5\",\n \"flex w-full rounded-control border border-input bg-background text-base ring-offset-background file:border-0 file:bg-transparent file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n","import * as React from \"react\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<\"textarea\"> & {\n /** Matches `Input`'s `inputSize`. `sm` tightens padding and the floor. */\n inputSize?: \"default\" | \"sm\"\n }\n>(({ className, inputSize = \"default\", ...props }, ref) => {\n return (\n <textarea\n className={cn(\n inputSize === \"sm\" ? \"min-h-[52px] px-2 py-1\" : \"min-h-[80px] px-3 py-2\",\n \"flex w-full rounded-control border border-input bg-background text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n})\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@invana/ui\"\nimport { Button } from \"@invana/ui\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\n\n/**\n * What a `FormControl` hands the group — the field's id and its description and\n * error wiring — passed on to the group's own input, so the `FormLabel` names\n * the input and not the box around it.\n */\ntype ControlWiring = Pick<React.ComponentProps<\"input\">, \"id\" | \"aria-describedby\" | \"aria-invalid\">\nconst InputGroupControl = React.createContext<ControlWiring>({})\n\nfunction InputGroup({\n className,\n id,\n \"aria-describedby\": describedBy,\n \"aria-invalid\": invalid,\n ...props\n}: React.ComponentProps<\"div\">) {\n const wiring = React.useMemo<ControlWiring>(\n () => ({ id, \"aria-describedby\": describedBy, \"aria-invalid\": invalid }),\n [id, describedBy, invalid]\n )\n return (\n <InputGroupControl.Provider value={wiring}>\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"group/input-group border-input dark:bg-input/30 shadow-xs relative flex w-full items-center rounded-control border outline-none transition-[color,box-shadow]\",\n \"h-control-md has-[>textarea]:h-auto\",\n\n // Variants based on alignment.\n \"has-[>[data-align=inline-start]]:[&>input]:pl-2\",\n \"has-[>[data-align=inline-end]]:[&>input]:pr-2\",\n \"has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3\",\n \"has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3\",\n\n // Focus state.\n \"has-[[data-slot=input-group-control]:focus-visible]:ring-ring has-[[data-slot=input-group-control]:focus-visible]:ring-1\",\n\n // Error state.\n \"has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40\",\n\n className\n )}\n {...props}\n />\n </InputGroupControl.Provider>\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground flex h-auto cursor-text select-none items-center justify-center gap-2 py-1.5 font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-control [&>svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]\",\n \"inline-end\":\n \"order-last pr-3 has-[>button]:mr-[-0.4rem] has-[>kbd]:mr-[-0.35rem]\",\n \"block-start\":\n \"[.border-b]:pb-3 order-first w-full justify-start px-3 pt-3 group-has-[>input]/input-group:pt-2.5\",\n \"block-end\":\n \"[.border-t]:pt-3 order-last w-full justify-start px-3 pb-3 group-has-[>input]/input-group:pb-2.5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"flex items-center gap-2 shadow-none\",\n {\n variants: {\n size: {\n xs: \"h-control-xs gap-1 rounded-control px-2 has-[>svg]:px-2 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"h-control-sm gap-1.5 rounded-control px-2.5 has-[>svg]:px-2.5\",\n \"icon-xs\":\n \"size-control-xs rounded-control p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-control-sm p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\"> &\n VariantProps<typeof inputGroupButtonVariants>) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground flex items-center gap-2 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n const wiring = React.useContext(InputGroupControl)\n return (\n <Input\n {...wiring}\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n const wiring = React.useContext(InputGroupControl)\n return (\n <Textarea\n {...wiring}\n data-slot=\"input-group-control\"\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","import * as React from \"react\"\nimport { Eye, EyeOff } from \"lucide-react\"\n\nimport { cn } from \"@invana/ui\"\nimport { Input } from \"./input\"\n\nexport type PasswordInputProps = Omit<\n React.ComponentProps<\"input\">,\n \"type\"\n> & {\n /** Controls visibility in a controlled fashion. Omit for self-managed toggle. */\n visible?: boolean\n onVisibleChange?: (visible: boolean) => void\n}\n\n/**\n * Password input with a built-in show/hide toggle. Wraps {@link Input} and\n * overlays an eye / eye-off button that flips the field between `password`\n * and `text`. Visibility is self-managed unless `visible` is supplied.\n */\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n ({ className, visible, onVisibleChange, disabled, ...props }, ref) => {\n const [internalVisible, setInternalVisible] = React.useState(false)\n const isControlled = visible !== undefined\n const show = isControlled ? visible : internalVisible\n\n const toggle = () => {\n const next = !show\n if (!isControlled) setInternalVisible(next)\n onVisibleChange?.(next)\n }\n\n return (\n <div className=\"relative\">\n <Input\n type={show ? \"text\" : \"password\"}\n className={cn(\"pr-10\", className)}\n disabled={disabled}\n ref={ref}\n {...props}\n />\n <button\n type=\"button\"\n onClick={toggle}\n disabled={disabled}\n tabIndex={-1}\n aria-label={show ? \"Hide password\" : \"Show password\"}\n aria-pressed={show}\n className=\"absolute inset-y-0 right-0 flex items-center justify-center px-3 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {show ? (\n <EyeOff className=\"size-4\" aria-hidden=\"true\" />\n ) : (\n <Eye className=\"size-4\" aria-hidden=\"true\" />\n )}\n </button>\n </div>\n )\n }\n)\nPasswordInput.displayName = \"PasswordInput\"\n\nexport { PasswordInput }\n","import * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n \"peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border border-border shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n \"pointer-events-none block h-5 w-5 rounded-full shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0 data-[state=checked]:bg-primary-foreground data-[state=unchecked]:bg-foreground\"\n )}\n />\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\nimport { cn } from \"@invana/ui\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-control border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"@invana/ui\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","import * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n /** Matches `Input`'s `inputSize` — the control scale, `sm` 26 / `default` 32 / `lg` 40. */\n triggerSize?: \"sm\" | \"default\" | \"lg\"\n }\n>(({ className, children, triggerSize = \"default\", ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"py-0\",\n triggerSize === \"sm\" ? \"h-control-sm px-2\" : triggerSize === \"lg\" ? \"h-control-lg px-3\" : \"h-control-md px-2.5\",\n \"flex w-full items-center justify-between whitespace-nowrap rounded-control border border-input bg-transparent shadow-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-surface border bg-popover text-popover-foreground shadow-lg 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\",\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 {...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)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 font-semibold\", className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-control py-1.5 pl-2 pr-8 outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","'use client';\nimport * as React from 'react';\nimport { Check } from 'lucide-react';\nimport { cn } from '@invana/ui';\nimport type { ColorPreset } from '../types';\n\ninterface ColorSwatchesProps {\n value?: string;\n onChange?: (value: string) => void;\n presetColors?: ColorPreset[];\n defaultValue?: string;\n}\n\nconst DEFAULT_PRESETS: ColorPreset[] = [\n { label: 'Black', value: 'rgb(0, 0, 0)', darkValue: 'rgb(255, 255, 255)' },\n { label: 'Red', value: 'rgb(239, 68, 68)' },\n { label: 'Blue', value: 'rgb(59, 130, 246)' },\n];\n\nexport const ColorSwatches: React.FC<ColorSwatchesProps> = ({\n value,\n onChange,\n presetColors = DEFAULT_PRESETS,\n defaultValue = 'rgb(0, 0, 0)',\n}) => {\n const [customColor, setCustomColor] = React.useState(value || defaultValue);\n const [isCustom, setIsCustom] = React.useState(false);\n\n // A new `value` (or preset list) from the parent re-decides which swatch\n // is on — adjusted while rendering, not in an effect.\n const [seen, setSeen] = React.useState<{ value?: string; presetColors: typeof presetColors }>({\n presetColors,\n });\n if (value && (value !== seen.value || presetColors !== seen.presetColors)) {\n setSeen({ value, presetColors });\n const isPreset = presetColors.some((c) => c.value === value);\n setIsCustom(!isPreset);\n if (!isPreset) setCustomColor(value);\n }\n\n const select = (newColor: string, custom = false) => {\n setIsCustom(custom);\n if (custom) setCustomColor(newColor);\n onChange?.(newColor);\n };\n\n return (\n <div className=\"flex gap-2\">\n {presetColors.map((color) => (\n <button\n key={color.label}\n type=\"button\"\n onClick={() => select(color.value)}\n className={cn(\n 'group relative h-8 w-8 overflow-hidden rounded-control border',\n 'ring-offset-background transition-all hover:scale-105',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n !isCustom && value === color.value && 'ring-2 ring-ring ring-offset-2'\n )}\n >\n <div className=\"h-full w-full\" style={{ backgroundColor: color.value }} />\n {!isCustom && value === color.value && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/30\">\n <Check className=\"h-4 w-4 text-white\" />\n </div>\n )}\n <span className=\"sr-only\">Select {color.label}</span>\n </button>\n ))}\n <div\n className={cn(\n 'group relative h-8 w-8 overflow-hidden rounded-control border',\n 'ring-offset-background transition-all hover:scale-105',\n isCustom && 'ring-2 ring-ring ring-offset-2'\n )}\n >\n <input\n type=\"color\"\n value={customColor}\n onChange={(e) => select(e.target.value, true)}\n className=\"absolute inset-0 cursor-pointer opacity-0\"\n />\n <div className=\"h-full w-full\" style={{ backgroundColor: customColor }} />\n {isCustom && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-black/30\">\n <Check className=\"h-4 w-4 text-white\" />\n </div>\n )}\n <span className=\"sr-only\">Custom color</span>\n </div>\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"@invana/ui\"\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary\">\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n","'use client';\nimport * as React from 'react';\nimport { cn } from '@invana/ui';\nimport { Input } from '../components/input';\nimport { Slider } from '../components/slider';\n\ninterface SliderNumberProps {\n value?: number;\n onChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n className?: string;\n}\n\nexport const SliderNumber: React.FC<SliderNumberProps> = ({\n value = 0,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled,\n className,\n}) => {\n const [local, setLocal] = React.useState<number>(value);\n // A new `value` from the parent replaces the local one — adjusted while\n // rendering, not in an effect, so the stale number never paints.\n const [seen, setSeen] = React.useState(value);\n if (value !== seen) {\n setSeen(value);\n setLocal(value);\n }\n\n const set = (n: number) => {\n setLocal(n);\n onChange?.(n);\n };\n\n return (\n <div className={cn('flex items-center gap-2', className)}>\n <Slider\n value={[local]}\n onValueChange={([n]: number[]) => set(n)}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n className=\"flex-1\"\n />\n <Input\n type=\"number\"\n value={local}\n onChange={(e) => set(Number(e.target.value))}\n className=\"h-8 w-16\"\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n />\n </div>\n );\n};\n","'use client';\nimport * as React from 'react';\nimport { Input } from '../components/input';\n\ninterface IconInputProps {\n value?: string;\n onChange?: (value: string) => void;\n}\n\n/**\n * Minimal icon picker — text input + preview swatch. Acts as a placeholder\n * until a real icon picker (e.g. lucide search) is added.\n */\nexport const IconInput: React.FC<IconInputProps> = ({ value, onChange }) => {\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"flex size-control-md shrink-0 items-center justify-center rounded-control border bg-muted\">\n {value ? value.slice(0, 2) : '–'}\n </div>\n <Input\n type=\"text\"\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n placeholder=\"icon name\"\n className=\"h-control-md\"\n />\n </div>\n );\n};\n","'use client';\nimport * as React from 'react';\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n Badge,\n cn,\n Eyebrow,\n} from '@invana/ui';\nimport {\n FormField as FormFieldBase,\n FormControl,\n FormDescription,\n FormItem,\n FormLabel,\n FormMessage,\n} from './components/form';\nimport { Input } from './components/input';\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from './components/input-group';\nimport { PasswordInput } from './components/password-input';\nimport { Textarea } from './components/textarea';\nimport { Switch } from './components/switch';\nimport { Checkbox } from './components/checkbox';\nimport { RadioGroup, RadioGroupItem } from './components/radio-group';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from './components/select';\nimport { ColorSwatches } from './fields/color-swatches';\nimport { SliderNumber } from './fields/slider-number';\nimport { IconInput } from './fields/icon-input';\nimport type {\n BooleanControl,\n ColorPreset,\n FieldBadge,\n FieldConfig,\n FieldOption,\n FieldOrientation,\n FieldSize,\n GroupConfig,\n LabelPosition,\n ObjectFieldProps,\n RowConfig,\n} from './types';\nimport type { FieldValues } from 'react-hook-form';\n\n/* -------------------------------------------------------------------------- */\n/* Field.X — leaf field components */\n/* -------------------------------------------------------------------------- */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyValue = any;\n\ninterface BaseFieldProps {\n label?: string;\n description?: string;\n placeholder?: string;\n value?: AnyValue;\n onChange?: (value: AnyValue) => void;\n options?: FieldOption[];\n /** Shows the value but stops it being changed. */\n disabled?: boolean;\n min?: number;\n max?: number;\n step?: number;\n presetColors?: ColorPreset[];\n defaultValue?: AnyValue;\n rows?: number;\n className?: string;\n labelClassName?: string;\n badge?: FieldBadge;\n labelPosition?: LabelPosition;\n size?: FieldSize;\n control?: BooleanControl;\n orientation?: FieldOrientation;\n /** Wrap a `switch` boolean in a bordered, padded box. Defaults to `false`. */\n boxed?: boolean;\n /** Unit at the end of a text or number input. */\n unit?: string;\n /** Note at the end of a text or number input, after the unit. */\n aside?: string;\n}\n\n/**\n * Per-size class tokens. Each size drives not just the control heights and text\n * but the surrounding density — grid gaps, section rhythm, label stacking, the\n * boolean box padding, the switch scale and the group accordion header — so a\n * single `size` prop reshapes the whole form from airy (`md`) to a dense\n * inspector panel (`xs`). The control heights are the control scale from\n * `@invana/styling`, one step per tier: `xs` 26, `sm` 32, `md` 40.\n * the underlying components' natural full-size defaults.\n */\nconst SIZE: Record<\n FieldSize,\n {\n /** control text/height */\n input: string;\n select: string;\n textarea: string;\n label: string;\n /** a field's own label, over or beside its control (not a choice's) */\n fieldLabel: string;\n desc: string;\n /** field-grid gaps */\n gap: string;\n /** rhythm between rows / accordion groups */\n section: string;\n /** rhythm between the ungrouped block and the group accordion */\n outer: string;\n /** vertical stacking inside a field (label→control, control→desc) */\n stack: string;\n /** column gap for `side` label layout */\n sideGap: string;\n /** group accordion header */\n trigger: string;\n /** switch scale (transform keeps the thumb proportions correct) */\n switch: string;\n /** checkbox control size (indicator icon scaled to match) */\n check: string;\n /** radio item size */\n radio: string;\n }\n> = {\n // The dense tier — an ask in a conversation, an inspector. Controls are the\n // scale's `sm` (26px), the text stays at the 13px floor; the field label is\n // muted and regular so the values, not the labels, carry the weight.\n xs: {\n input: 'h-control-sm py-0',\n select: 'h-control-sm py-0',\n textarea: '',\n label: 'text-base',\n fieldLabel: 'font-normal text-muted-foreground',\n desc: 'text-base',\n gap: 'gap-x-3 gap-y-2.5',\n section: 'space-y-3',\n outer: 'space-y-4',\n stack: 'space-y-2',\n sideGap: 'gap-x-2',\n trigger: 'py-1.5 text-base',\n switch: 'scale-90 origin-right',\n check: 'h-4 w-4',\n radio: 'h-4 w-4',\n },\n sm: {\n input: 'h-control-md',\n select: 'h-control-md',\n textarea: '',\n label: 'text-base',\n fieldLabel: '',\n desc: 'text-base',\n gap: 'gap-x-3 gap-y-2',\n section: 'space-y-3',\n outer: 'space-y-4',\n stack: 'space-y-1.5',\n sideGap: 'gap-x-2',\n trigger: 'py-1.5 text-base',\n switch: 'scale-90 origin-right',\n check: 'h-4 w-4',\n radio: 'h-4 w-4',\n },\n md: {\n input: 'h-control-lg px-3',\n select: 'h-control-lg px-3',\n textarea: '',\n label: 'text-base',\n fieldLabel: '',\n desc: 'text-base',\n gap: 'gap-4',\n section: 'space-y-4',\n outer: 'space-y-6',\n stack: 'space-y-2',\n sideGap: 'gap-2',\n trigger: 'py-1.5 text-base',\n switch: '',\n check: 'h-4 w-4',\n radio: 'h-4 w-4',\n },\n};\n\nfunction itemClasses(\n labelPosition: LabelPosition,\n size: FieldSize,\n className?: string\n) {\n return cn(\n // `space-y-0` undoes FormItem's own stacking, whose margin would push the\n // control below its label in a row.\n labelPosition === 'side' &&\n cn('grid grid-cols-3 items-center space-y-0', SIZE[size].sideGap),\n labelPosition === 'top' && SIZE[size].stack,\n className\n );\n}\n\nfunction inputWrapper(labelPosition: LabelPosition, size: FieldSize) {\n return cn(labelPosition === 'side' && 'col-span-2', SIZE[size].stack);\n}\n\n/** A single status pill (field label / section header), styled consistently. */\nfunction StatusPill({ badge }: { badge: FieldBadge }) {\n return (\n <Badge\n variant={badge.variant ?? 'secondary'}\n className=\"px-1.5 py-0 text-base font-medium\"\n >\n {badge.label}\n </Badge>\n );\n}\n\n/**\n * A field's `<FormLabel>` plus an optional trailing status pill. `FormLabel` is\n * already a `flex items-center gap-2` row, so the badge lines up beside the text\n * with no extra wrapper. Renders nothing when there is neither a label nor a\n * badge.\n */\nfunction FieldLabel({\n label,\n badge,\n size,\n disabled,\n className,\n}: {\n label?: React.ReactNode;\n badge?: FieldBadge;\n size: FieldSize;\n disabled?: boolean;\n className?: string;\n}) {\n if (!label && !badge) return null;\n return (\n <FormLabel\n className={cn(SIZE[size].label, SIZE[size].fieldLabel, disabled && 'opacity-70', className)}\n >\n {label}\n {badge && <StatusPill badge={badge} />}\n </FormLabel>\n );\n}\n\n/**\n * An input with its unit and a short note drawn at its end — `30 %`,\n * `17 d quoted 14 d`. Without either it is the plain `Input`. Props other than\n * `className` reach the `<input>`, so `FormControl` wires its id and aria there.\n */\nconst AffixedInput = React.forwardRef<\n HTMLInputElement,\n React.ComponentProps<'input'> & { unit?: string; aside?: string }\n>(({ unit, aside, className, ...props }, ref) => {\n if (!unit && !aside) return <Input ref={ref} className={className} {...props} />;\n return (\n <InputGroup className={cn('bg-background dark:bg-background', className)}>\n <InputGroupInput ref={ref} className=\"h-full\" {...props} />\n <InputGroupAddon align=\"inline-end\" className=\"font-mono font-normal\">\n {unit && <span>{unit}</span>}\n {aside && <span>{aside}</span>}\n </InputGroupAddon>\n </InputGroup>\n );\n});\nAffixedInput.displayName = 'AffixedInput';\n\nexport const InputField: React.FC<BaseFieldProps> = ({\n label,\n description,\n placeholder,\n value,\n onChange,\n unit,\n aside,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <AffixedInput\n className={SIZE[size].input}\n unit={unit}\n aside={aside}\n placeholder={placeholder}\n disabled={disabled}\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const PasswordField: React.FC<BaseFieldProps> = ({\n label,\n description,\n placeholder,\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <PasswordInput\n className={SIZE[size].input}\n placeholder={placeholder}\n disabled={disabled}\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const TextareaField: React.FC<BaseFieldProps> = ({\n label,\n description,\n placeholder,\n value,\n onChange,\n rows,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <Textarea\n className={SIZE[size].textarea || undefined}\n rows={rows}\n placeholder={placeholder}\n disabled={disabled}\n value={value ?? ''}\n onChange={(e) => onChange?.(e.target.value)}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const SelectField: React.FC<BaseFieldProps> = ({\n label,\n description,\n options = [],\n value,\n onChange,\n placeholder = 'Select type',\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <Select value={value ?? ''} onValueChange={onChange} disabled={disabled}>\n <FormControl>\n <SelectTrigger className={SIZE[size].select}>\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n </FormControl>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value} disabled={o.disabled}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const BooleanField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n control = 'switch',\n labelClassName,\n badge,\n className,\n boxed = false,\n disabled,\n}) => {\n // Optional bordered/padded enclosure for the `switch` control (default off).\n const boxClass = boxed ? 'rounded-md border p-2' : '';\n // `checkbox` control: a compact inline `☑ label` that packs into the grid,\n // independent of labelPosition (the label always sits beside the box).\n if (control === 'checkbox') {\n return (\n <FormItem\n className={cn(\n 'flex gap-2 space-y-0',\n description ? 'items-start' : 'items-center',\n className\n )}\n >\n <FormControl>\n <Checkbox\n className={SIZE[size].check}\n checked={!!value}\n disabled={disabled}\n onCheckedChange={onChange}\n />\n </FormControl>\n <div className=\"space-y-1\">\n <FieldLabel\n label={label}\n badge={badge}\n size={size}\n disabled={disabled}\n className={cn(\n '!mt-0 cursor-pointer font-normal leading-none',\n labelClassName\n )}\n />\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n </div>\n </FormItem>\n );\n }\n if (labelPosition === 'side') {\n return (\n <FormItem className={cn('flex items-center justify-between', boxClass)}>\n <div>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n </div>\n <FormControl>\n <Switch\n className={SIZE[size].switch || undefined}\n checked={!!value}\n disabled={disabled}\n onCheckedChange={onChange}\n />\n </FormControl>\n </FormItem>\n );\n }\n return (\n <FormItem className={SIZE[size].stack}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={cn('flex items-center justify-between', boxClass)}>\n <FormControl>\n <Switch\n className={SIZE[size].switch || undefined}\n checked={!!value}\n disabled={disabled}\n onCheckedChange={onChange}\n />\n </FormControl>\n {description && (\n <FormDescription className={cn('ml-2', SIZE[size].desc)}>\n {description}\n </FormDescription>\n )}\n </div>\n </FormItem>\n );\n};\n\nexport const RadioField: React.FC<BaseFieldProps> = ({\n label,\n description,\n options = [],\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n orientation = 'vertical',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <RadioGroup\n value={value ?? ''}\n onValueChange={onChange}\n disabled={disabled}\n className={\n orientation === 'horizontal'\n ? 'flex flex-row items-center gap-x-4'\n : cn('flex flex-col', SIZE[size].stack)\n }\n >\n {options.map((o) => {\n const off = disabled || o.disabled;\n // A described choice reads as a label with a muted line under\n // it, so the dot sits by the label's first line.\n return (\n <label\n key={o.value}\n className={cn(\n 'flex gap-2',\n o.description ? 'items-start' : 'items-center',\n off ? 'cursor-not-allowed' : 'cursor-pointer'\n )}\n >\n <RadioGroupItem\n value={o.value}\n disabled={o.disabled}\n className={cn('shrink-0', SIZE[size].radio)}\n />\n <span className={cn('flex flex-col gap-1', off && 'opacity-50')}>\n <span className={cn(o.description ? 'leading-4' : 'leading-none', SIZE[size].label)}>\n {o.label}\n </span>\n {o.description && (\n <span className={cn('text-muted-foreground', SIZE[size].desc)}>\n {o.description}\n </span>\n )}\n </span>\n </label>\n );\n })}\n </RadioGroup>\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const CheckboxGroupField: React.FC<BaseFieldProps> = ({\n label,\n description,\n options = [],\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n orientation = 'vertical',\n labelClassName,\n badge,\n className,\n disabled,\n}) => {\n const selected: string[] = Array.isArray(value) ? value : [];\n const toggle = (v: string, checked: boolean) =>\n onChange?.(checked ? [...selected, v] : selected.filter((x) => x !== v));\n\n return (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <div\n className={\n orientation === 'horizontal'\n ? 'flex flex-row items-center gap-x-4'\n : cn('flex flex-col', SIZE[size].stack)\n }\n >\n {options.map((o) => (\n <label\n key={o.value}\n className=\"flex cursor-pointer items-center gap-2\"\n >\n <Checkbox\n className={cn('shrink-0', SIZE[size].check)}\n checked={selected.includes(o.value)}\n disabled={disabled || o.disabled}\n onCheckedChange={(c) => toggle(o.value, c === true)}\n />\n <span className={cn('leading-none', SIZE[size].label)}>{o.label}</span>\n </label>\n ))}\n </div>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n );\n};\n\nexport const ColorField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n presetColors,\n defaultValue,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <ColorSwatches\n value={value}\n onChange={onChange}\n presetColors={presetColors}\n defaultValue={defaultValue}\n />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const NumberField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n min,\n max,\n step,\n unit,\n aside,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n {/* A bounded number gets the slider; an open one, such as a scenario\n input, is typed, with its unit at the end. */}\n {min != null && max != null ? (\n <SliderNumber\n value={typeof value === 'number' ? value : 0}\n onChange={onChange}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n />\n ) : (\n <AffixedInput\n type=\"number\"\n className={SIZE[size].input}\n unit={unit}\n aside={aside}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n value={typeof value === 'number' ? value : ''}\n onChange={(e) =>\n onChange?.(e.target.value === '' ? undefined : Number(e.target.value))\n }\n />\n )}\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const IconField: React.FC<BaseFieldProps> = ({\n label,\n description,\n value,\n onChange,\n labelPosition = 'side',\n size = 'sm',\n labelClassName,\n badge,\n className,\n disabled,\n}) => (\n <FormItem className={itemClasses(labelPosition, size, className)}>\n <FieldLabel label={label} badge={badge} size={size} disabled={disabled} className={labelClassName} />\n <div className={inputWrapper(labelPosition, size)}>\n <FormControl>\n <IconInput value={value} onChange={onChange} />\n </FormControl>\n {description && (\n <FormDescription className={SIZE[size].desc}>{description}</FormDescription>\n )}\n <FormMessage className={SIZE[size].desc} />\n </div>\n </FormItem>\n);\n\nexport const Field = {\n Input: InputField,\n Password: PasswordField,\n Textarea: TextareaField,\n Boolean: BooleanField,\n Radio: RadioField,\n CheckboxGroup: CheckboxGroupField,\n Color: ColorField,\n Number: NumberField,\n Select: SelectField,\n Icon: IconField,\n};\n\n/* -------------------------------------------------------------------------- */\n/* ObjectField — renders a flat field config array under a parent name */\n/* -------------------------------------------------------------------------- */\n\nfunction humanize(name: string): string {\n return name\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (c) => c.toUpperCase())\n .trim();\n}\n\nfunction renderField(\n field: FieldConfig,\n parentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control: any,\n labelPosition: LabelPosition,\n size: FieldSize\n) {\n return (\n <FormFieldBase\n key={field.name}\n control={control}\n name={`${parentName}.${field.name}`}\n defaultValue={field.defaultValue as AnyValue}\n rules={field.rules}\n render={({ field: rhf }) => {\n const common: BaseFieldProps = {\n label: field.label ?? humanize(field.name),\n description: field.description,\n options: field.options,\n disabled: field.disabled,\n min: field.min,\n max: field.max,\n step: field.step,\n presetColors: field.presetColors,\n defaultValue: field.defaultValue,\n rows: field.rows,\n control: field.control,\n orientation: field.orientation,\n boxed: field.boxed,\n labelClassName: field.labelClassName,\n badge: field.badge,\n unit: field.unit,\n aside: field.aside,\n labelPosition,\n size,\n value: rhf.value,\n onChange: rhf.onChange,\n };\n switch (field.type) {\n case 'password':\n return (\n <PasswordField\n {...common}\n placeholder={field.placeholder ?? `Enter ${field.name}`}\n />\n );\n case 'boolean':\n return <BooleanField {...common} />;\n case 'radio':\n return <RadioField {...common} />;\n case 'checkbox':\n return <CheckboxGroupField {...common} />;\n case 'color':\n return <ColorField {...common} />;\n case 'number':\n return <NumberField {...common} />;\n case 'select':\n return <SelectField {...common} />;\n case 'icon':\n return <IconField {...common} />;\n case 'textarea':\n return (\n <TextareaField\n {...common}\n placeholder={field.placeholder ?? `Enter ${field.name}`}\n />\n );\n case 'text':\n default:\n return (\n <InputField\n {...common}\n placeholder={field.placeholder ?? `Enter ${field.name}`}\n />\n );\n }\n }}\n />\n );\n}\n\n/**\n * Render a set of fields into the field grid. The grid is `columns`-wide on\n * `md+` (two by default) and collapses to a single column below `md`. A field\n * spans multiple columns via `colSpan` and can carry extra cell classes via\n * `className`.\n *\n * `colSpan` / `columns` drive the grid through CSS variables (`--ff-span` /\n * `--ff-cols`) read by static `md:` utilities rather than per-number Tailwind\n * classes — so any count works without the host app having to pre-generate\n * `col-span-N` / `grid-cols-N`. The `md:` prefix keeps spans from leaking into\n * the single-column mobile layout, where every field is already full width.\n */\nfunction renderGrid(\n fields: FieldConfig[],\n parentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control: any,\n labelPosition: LabelPosition,\n size: FieldSize,\n columns: number,\n key?: string,\n fit: 'viewport' | 'container' = 'viewport'\n) {\n // Default 2-col layout keeps the plain `md:grid-cols-2` utility; custom\n // counts drive the template from `--ff-cols`.\n const customCols = columns !== 2;\n if (fit === 'container') {\n // A form in a card answers to the card, not the screen: two columns once\n // it is 280px wide, and a lone last field takes the whole row.\n return (\n <div key={key} className=\"@container\">\n <div\n className={cn(\n 'grid grid-cols-1',\n SIZE[size].gap,\n columns > 1 &&\n '@min-[280px]:grid-cols-2 @min-[280px]:[&>*:last-child:nth-child(odd)]:col-span-2'\n )}\n >\n {fields.map((f) => (\n <div key={f.name} className={f.className}>\n {renderField(f, parentName, control, labelPosition, size)}\n </div>\n ))}\n </div>\n </div>\n );\n }\n return (\n <div\n key={key}\n className={cn(\n 'grid grid-cols-1',\n SIZE[size].gap,\n customCols\n ? 'md:[grid-template-columns:repeat(var(--ff-cols),minmax(0,1fr))]'\n : 'md:grid-cols-2'\n )}\n style={\n customCols\n ? ({ '--ff-cols': columns } as React.CSSProperties)\n : undefined\n }\n >\n {fields.map((f) => {\n const span = f.colSpan && f.colSpan > 1 ? f.colSpan : undefined;\n return (\n <div\n key={f.name}\n className={cn(\n span && 'md:[grid-column:span_var(--ff-span)/span_var(--ff-span)]',\n f.className\n )}\n style={span ? ({ '--ff-span': span } as React.CSSProperties) : undefined}\n >\n {renderField(f, parentName, control, labelPosition, size)}\n </div>\n );\n })}\n </div>\n );\n}\n\nfunction renderRows(\n fields: FieldConfig[],\n rowConfig: RowConfig[] | undefined,\n parentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n control: any,\n labelPosition: LabelPosition,\n size: FieldSize,\n columns: number,\n fit: 'viewport' | 'container' = 'viewport'\n) {\n if (!rowConfig || rowConfig.length === 0) {\n return renderGrid(fields, parentName, control, labelPosition, size, columns, undefined, fit);\n }\n const used = new Set(rowConfig.flatMap((r) => r.fields));\n const unassigned = fields.filter((f) => !used.has(f.name));\n const byName = new Map(fields.map((f) => [f.name, f]));\n\n return (\n <div className={SIZE[size].section}>\n {rowConfig.map((row) => {\n const rowFields = row.fields\n .map((n) => byName.get(n))\n .filter((f): f is FieldConfig => !!f);\n if (rowFields.length === 0) return null;\n return renderGrid(\n rowFields,\n parentName,\n control,\n labelPosition,\n size,\n columns,\n row.id,\n fit\n );\n })}\n {unassigned.length > 0 &&\n renderGrid(\n unassigned,\n parentName,\n control,\n labelPosition,\n size,\n columns,\n '_unassigned',\n fit\n )}\n </div>\n );\n}\n\n// Generic over the form's values, so a typed `useForm` control is accepted as it is.\nconst ObjectField = <T extends FieldValues = FieldValues>({\n control,\n name,\n fields,\n rowConfig,\n groupConfig,\n labelPosition = 'side',\n size = 'sm',\n columns = 2,\n fit = 'viewport',\n groupAs = 'accordion',\n}: ObjectFieldProps<T>) => {\n const grouped = fields.reduce<Record<string, FieldConfig[]>>((acc, f) => {\n const key = f.group ?? '_ungrouped';\n (acc[key] ??= []).push(f);\n return acc;\n }, {});\n\n const ungrouped = grouped['_ungrouped'] ?? [];\n delete grouped['_ungrouped'];\n const groupedEntries = Object.entries(grouped);\n const groupConfigById = new Map<string, GroupConfig>(\n (groupConfig ?? []).map((g) => [g.id, g])\n );\n\n return (\n // A container has no width of its own, so one fitted to it takes its\n // parent's: in a row beside a button it would otherwise shrink to nothing.\n <div className={cn(SIZE[size].outer, fit === 'container' && 'w-full min-w-0')}>\n {ungrouped.length > 0 && (\n <div className={SIZE[size].section}>\n {renderRows(\n ungrouped,\n rowConfig,\n name,\n control,\n labelPosition,\n size,\n columns,\n fit\n )}\n </div>\n )}\n\n {groupedEntries.length > 0 && groupAs === 'section' && (\n <div className={SIZE[size].section}>\n {groupedEntries.map(([group, gFields]) => (\n <section key={group} className={SIZE[size].stack}>\n <Eyebrow>{groupConfigById.get(group)?.label ?? humanize(group)}</Eyebrow>\n {renderRows(gFields, rowConfig, name, control, labelPosition, size, columns, fit)}\n </section>\n ))}\n </div>\n )}\n\n {groupedEntries.length > 0 && groupAs === 'accordion' && (\n <Accordion\n type=\"multiple\"\n defaultValue={groupedEntries.map(([k]) => k)}\n className=\"w-full\"\n >\n {groupedEntries.map(([group, gFields]) => {\n const gc = groupConfigById.get(group);\n return (\n <AccordionItem key={group} value={group} className=\"border-b\">\n <AccordionTrigger\n className={cn(\n 'font-semibold uppercase tracking-wide text-muted-foreground hover:no-underline',\n SIZE[size].trigger\n )}\n >\n <span className=\"flex items-center gap-2\">\n {gc?.label ?? humanize(group)}\n {(gc?.showCount ?? true) && (\n <Badge\n variant=\"secondary\"\n className=\"px-1.5 py-0 text-base font-normal tabular-nums\"\n >\n {gFields.length}\n </Badge>\n )}\n {gc?.badges?.map((b, i) => (\n <StatusPill key={i} badge={b} />\n ))}\n </span>\n </AccordionTrigger>\n <AccordionContent className=\"pb-3 pt-1\">\n <div className={SIZE[size].section}>\n {renderRows(\n gFields,\n rowConfig,\n name,\n control,\n labelPosition,\n size,\n columns,\n fit\n )}\n </div>\n </AccordionContent>\n </AccordionItem>\n );\n })}\n </Accordion>\n )}\n </div>\n );\n};\n\n/* -------------------------------------------------------------------------- */\n/* FormField — shadcn FormField augmented with Field.* and ObjectField */\n/* -------------------------------------------------------------------------- */\n\ninterface FormFieldExtensions {\n ObjectField: typeof ObjectField;\n Input: typeof InputField;\n Password: typeof PasswordField;\n Textarea: typeof TextareaField;\n Boolean: typeof BooleanField;\n Radio: typeof RadioField;\n CheckboxGroup: typeof CheckboxGroupField;\n Color: typeof ColorField;\n Number: typeof NumberField;\n Select: typeof SelectField;\n Icon: typeof IconField;\n}\n\ntype FormFieldType = typeof FormFieldBase & FormFieldExtensions;\n\nexport const FormField = Object.assign(FormFieldBase, {\n ObjectField,\n Input: InputField,\n Password: PasswordField,\n Textarea: TextareaField,\n Boolean: BooleanField,\n Radio: RadioField,\n CheckboxGroup: CheckboxGroupField,\n Color: ColorField,\n Number: NumberField,\n Select: SelectField,\n Icon: IconField,\n}) as FormFieldType;\n\n// Also export ObjectField directly for consumers who prefer a flat import.\nexport { ObjectField };\n\nexport type {\n BooleanControl,\n FieldConfig,\n FieldOption,\n FieldOrientation,\n FieldSize,\n FieldType,\n RowConfig,\n LabelPosition,\n ObjectFieldProps,\n ColorPreset,\n} from './types';\n","'use client';\nimport * as React from 'react';\nimport { Card, CardContent, cn } from '@invana/ui';\nimport type { UseFormReturn } from 'react-hook-form';\nimport { Form } from './components/form';\nimport { ObjectField } from './form-field';\nimport type { ObjectFieldProps } from './types';\n\nexport interface SettingsPanelProps extends Omit<ObjectFieldProps, 'control'> {\n /**\n * The react-hook-form instance (from `useForm`). The panel renders its own\n * `<Form>` provider around the fields, so it is fully self-contained — no\n * external `<Form>` wrapper is required.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n form: UseFormReturn<any>;\n /** Title shown above the fields (uppercase, muted — the panel heading). */\n title?: React.ReactNode;\n /** Extra classes merged onto the outer `Card` (e.g. a fixed width). */\n className?: string;\n /** Extra classes merged onto the scrollable `CardContent`. */\n contentClassName?: string;\n /**\n * Extra content rendered inside the form, after the fields — e.g. a footer\n * with Apply / Reset actions. Rendered within the `<Form>` provider so a\n * submit button has form context.\n */\n children?: React.ReactNode;\n}\n\n/**\n * A self-contained, form-driven settings / inspector panel: the card chrome, an\n * uppercase heading and the sectioned {@link ObjectField} accordion in a single\n * component. Consumers own their `useForm` and pass it in; everything else — the\n * `Card`, scroll region, `<Form>` provider, grouped accordions with count\n * badges and per-field status pills — is handled here.\n *\n * ```tsx\n * const form = useForm({ defaultValues });\n * <SettingsPanel title=\"Canvas Settings\" form={form} name=\"canvas\" fields={fields} />\n * ```\n *\n * All {@link ObjectFieldProps} (`name`, `fields`, `rowConfig`, `labelPosition`,\n * `size`, `columns`) are forwarded to the underlying `ObjectField`.\n */\nexport function SettingsPanel({\n form,\n title,\n className,\n contentClassName,\n children,\n ...objectField\n}: SettingsPanelProps) {\n return (\n <Card className={className}>\n <CardContent\n className={cn('max-h-[80vh] overflow-y-auto p-4', contentClassName)}\n >\n {title && (\n <h2 className=\"mb-3 text-base font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </h2>\n )}\n <Form {...form}>\n <ObjectField control={form.control} {...objectField} />\n {children}\n </Form>\n </CardContent>\n </Card>\n );\n}\n","import { useMemo } from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@invana/ui\"\nimport { Label } from \"./label\"\nimport { Separator } from \"@invana/ui\"\n\nfunction FieldSet({ className, ...props }: React.ComponentProps<\"fieldset\">) {\n return (\n <fieldset\n data-slot=\"field-set\"\n className={cn(\n \"flex flex-col gap-6\",\n \"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLegend({\n className,\n variant = \"legend\",\n ...props\n}: React.ComponentProps<\"legend\"> & { variant?: \"legend\" | \"label\" }) {\n return (\n <legend\n data-slot=\"field-legend\"\n data-variant={variant}\n className={cn(\n \"mb-3 font-medium\",\n \"data-[variant=legend]:text-base\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-group\"\n className={cn(\n \"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst fieldVariants = cva(\n \"group/field data-[invalid=true]:text-destructive flex w-full gap-3\",\n {\n variants: {\n orientation: {\n vertical: [\"flex-col [&>*]:w-full [&>.sr-only]:w-auto\"],\n horizontal: [\n \"flex-row items-center\",\n \"[&>[data-slot=field-label]]:flex-auto\",\n \"has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start\",\n ],\n responsive: [\n \"@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n \"@md/field-group:[&>[data-slot=field-label]]:flex-auto\",\n \"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n ],\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n },\n }\n)\n\nfunction Field({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof fieldVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"field\"\n data-orientation={orientation}\n className={cn(fieldVariants({ orientation }), className)}\n {...props}\n />\n )\n}\n\nfunction FieldContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-content\"\n className={cn(\n \"group/field-content flex flex-1 flex-col gap-1.5 leading-snug\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldLabel({\n className,\n ...props\n}: React.ComponentProps<typeof Label>) {\n return (\n <Label\n data-slot=\"field-label\"\n className={cn(\n \"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50\",\n \"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4\",\n \"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"field-label\"\n className={cn(\n \"flex w-fit items-center gap-2 font-medium leading-snug group-data-[disabled=true]/field:opacity-50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <p\n data-slot=\"field-description\"\n className={cn(\n \"text-muted-foreground font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n \"nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5\",\n \"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction FieldSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<\"div\"> & {\n children?: React.ReactNode\n}) {\n return (\n <div\n data-slot=\"field-separator\"\n data-content={!!children}\n className={cn(\n \"relative -my-2 h-5 group-data-[variant=outline]/field-group:-mb-2\",\n className\n )}\n {...props}\n >\n <Separator className=\"absolute inset-0 top-1/2\" />\n {children && (\n <span\n className=\"bg-background text-muted-foreground relative mx-auto block w-fit px-2\"\n data-slot=\"field-separator-content\"\n >\n {children}\n </span>\n )}\n </div>\n )\n}\n\nfunction FieldError({\n className,\n children,\n errors,\n ...props\n}: React.ComponentProps<\"div\"> & {\n errors?: Array<{ message?: string } | undefined>\n}) {\n const content = useMemo(() => {\n if (children) {\n return children\n }\n\n if (!errors) {\n return null\n }\n\n if (errors?.length === 1 && errors[0]?.message) {\n return errors[0].message\n }\n\n return (\n <ul className=\"ml-4 flex list-disc flex-col gap-1\">\n {errors.map(\n (error, index) =>\n error?.message && <li key={index}>{error.message}</li>\n )}\n </ul>\n )\n }, [children, errors])\n\n if (!content) {\n return null\n }\n\n return (\n <div\n role=\"alert\"\n data-slot=\"field-error\"\n className={cn(\"text-destructive font-normal\", className)}\n {...props}\n >\n {content}\n </div>\n )\n}\n\nexport {\n Field,\n FieldLabel,\n FieldDescription,\n FieldError,\n FieldGroup,\n FieldLegend,\n FieldSeparator,\n FieldSet,\n FieldContent,\n FieldTitle,\n}\n","import * as React from \"react\"\n\nimport { cn } from \"@invana/ui\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\nimport { Input } from \"./input\"\n\n/**\n * Where a parameter's value comes from.\n *\n * The three are not styles of the same thing — they decide *when* the value is\n * known. A literal is known now; an argument is known when a run is started; a\n * binding is known only once an earlier task has produced it.\n */\nexport type ParamSource = \"literal\" | \"argument\" | \"binding\"\n\nexport const PARAM_SOURCES: ParamSource[] = [\"literal\", \"argument\", \"binding\"]\n\nexport interface ParamRowProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n /** The parameter's name, as the contract spells it — `batch_size`, `map_over`. */\n name: string\n /** Its type and obligation, from the contract — `str · required`, `int · optional`. */\n type?: React.ReactNode\n /** Which of the three the current value is. */\n source: ParamSource\n onSourceChange?: (source: ParamSource) => void\n /** The value itself — a literal, `${args.model}`, `${steps.x.rows}`. */\n value: string\n onValueChange?: (value: string) => void\n /**\n * What the reader needs to know that the value does not say — what a binding\n * will resolve to, which alternatives an enum allows, why a default was left\n * alone. Rendered as the error when `invalid` is set.\n */\n note?: React.ReactNode\n /** The value does not resolve, or the contract refuses it. Reddens the control and the note. */\n invalid?: boolean\n /**\n * The parameter is not in play — a `when` on a task that always runs. Shown\n * rather than hidden, because a contract's full surface is the point of the\n * form.\n */\n disabled?: boolean\n /** Replaces the value control entirely, for a parameter that needs its own editor. */\n children?: React.ReactNode\n}\n\n/**\n * One parameter of a task, as a row: what it is called, where its value comes\n * from, what the value is, and what that means.\n *\n * The form these rows make **is** the catalogue contract — the fields, their\n * types and their obligations are read off the entry, never authored here. So a\n * row takes a descriptor rather than children, and a parameter the contract\n * does not declare has no way to appear.\n *\n * `source` and `value` are one control, joined, because they are one decision.\n * Split into two fields they read as two questions, and a reader can end up\n * with `literal` selected beside a value that is plainly a binding.\n *\n * Not a `Field`. That one lays out a label, a control and a description for a\n * form a person fills in from nothing; this lays out a *contract* — the label\n * column carries a type, and the description usually explains a value the\n * person did not type.\n */\nexport const ParamRow = React.forwardRef<HTMLDivElement, ParamRowProps>(\n (\n {\n name,\n type,\n source,\n onSourceChange,\n value,\n onValueChange,\n note,\n invalid,\n disabled,\n className,\n children,\n ...props\n },\n ref,\n ) => (\n <div\n ref={ref}\n data-invalid={invalid || undefined}\n data-disabled={disabled || undefined}\n className={cn(\"flex items-start gap-3 py-1.5\", className)}\n {...props}\n >\n <div className=\"w-[118px] shrink-0 pt-1\">\n <div className=\"truncate font-mono text-sm\">{name}</div>\n {type != null ? (\n <div className=\"truncate text-sm text-muted-foreground\">{type}</div>\n ) : null}\n </div>\n\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n {children ?? (\n <div className=\"flex min-w-0\">\n <Select\n value={source}\n onValueChange={(v) => onSourceChange?.(v as ParamSource)}\n disabled={disabled}\n >\n <SelectTrigger\n triggerSize=\"sm\"\n aria-label={`${name} source`}\n className=\"w-auto shrink-0 rounded-r-none border-r-0 text-sm text-muted-foreground\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {PARAM_SOURCES.map((s) => (\n <SelectItem key={s} value={s}>\n {s}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <Input\n inputSize=\"sm\"\n value={value}\n onChange={(e) => onValueChange?.(e.target.value)}\n disabled={disabled}\n aria-invalid={invalid || undefined}\n aria-label={name}\n // The colour is a token, set inline because the kit's build emits\n // no `border-<colour>` utility today — `border-destructive`\n // renders grey. Same workaround as `Gantt`'s error band.\n style={invalid ? { borderColor: \"var(--color-destructive)\" } : undefined}\n className=\"min-w-0 flex-1 rounded-l-none font-mono\"\n />\n </div>\n )}\n {note != null ? (\n <div\n className={cn(\n \"text-sm\",\n invalid ? \"text-destructive\" : \"text-muted-foreground\",\n )}\n >\n {note}\n </div>\n ) : null}\n </div>\n </div>\n ),\n)\nParamRow.displayName = \"ParamRow\"\n"]}
|