@uniform-ts/core 0.0.5 → 0.0.7

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/introspection/deriveLabel.ts","../src/introspection/unwrap.ts","../src/introspection/introspect.ts","../src/introspection/discriminatedUnion.ts","../src/registry/mergeRegistries.ts","../src/components/defaults/DefaultInput.tsx","../src/components/defaults/DefaultCheckbox.tsx","../src/components/defaults/DefaultSelect.tsx","../src/registry/defaultRegistry.ts","../src/context/AutoFormContext.tsx","../src/components/defaults/DefaultFieldWrapper.tsx","../src/components/defaults/DefaultSubmitButton.tsx","../src/components/defaults/DefaultFormWrapper.tsx","../src/components/defaults/DefaultSectionWrapper.tsx","../src/components/defaults/DefaultArrayRowLayout.tsx","../src/components/defaults/DefaultArrayFieldLayout.tsx","../src/components/defaults/DefaultObjectWrapper.tsx","../src/components/defaults/DefaultArrayWrapper.tsx","../src/components/defaults/DefaultArrayButton.tsx","../src/components/defaults/DefaultArrayCollapseButton.tsx","../src/utils/resolveErrorMessage.ts","../src/components/resolveComponent.ts","../src/coercion/coerce.ts","../src/components/fields/ScalarField.tsx","../src/components/fields/BooleanField.tsx","../src/components/fields/SelectField.tsx","../src/components/fields/ObjectField.tsx","../src/components/fields/getDefaultValue.ts","../src/components/fields/ArrayField.tsx","../src/components/FieldRenderer.tsx","../src/hooks/useConditionalFields.ts","../src/hooks/useSectionGrouping.ts","../src/hooks/useFormPersistence.ts","../src/hooks/useLatestRef.ts","../src/utils/fieldPipeline.ts","../src/components/AutoForm.tsx","../src/factory/createAutoForm.tsx","../src/UniForm.ts"],"names":["z","jsx","React","jsxs","Fragment","Controller","useFieldArray","useState","useWatch","useMemo","useFormState","useRef","useEffect","useCallback","React2","React3","useForm","zodResolver","React4"],"mappings":"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","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Label derivation\n// ---------------------------------------------------------------------------\n\n/**\n * Derives a human-readable label from a field name or dot-notated path.\n *\n * Rules applied (in order):\n * 1. Only the last segment of a dot-notated path is used (e.g. `\"address.streetName\"` → `\"streetName\"`).\n * 2. `camelCase` is split on word boundaries (e.g. `\"streetName\"` → `\"Street Name\"`).\n * 3. Underscores and hyphens are replaced with spaces (e.g. `\"first_name\"` → `\"First Name\"`).\n * 4. Each word is title-cased.\n *\n * @param name - The raw field name or dot-notated path.\n * @returns A title-cased, human-readable label string.\n *\n * @example\n * deriveLabel('firstName') // → 'First Name'\n * deriveLabel('address.zipCode') // → 'Zip Code'\n * deriveLabel('phone_number') // → 'Phone Number'\n */\nexport function deriveLabel(name: string): string {\n // Use only the last segment of a dot-notated path\n const segment = name.split('.').pop() ?? name\n if (!segment) return ''\n\n return segment\n .replace(/([a-z])([A-Z])/g, '$1 $2') // split camelCase\n .replace(/[_-]+/g, ' ') // replace underscores/hyphens with spaces\n .split(' ')\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n}\n","import * as z from 'zod/v4/core'\nimport type { FieldMeta } from '../types'\n\n// ---------------------------------------------------------------------------\n// Meta extraction — reads from z.globalRegistry (Zod v4)\n// ---------------------------------------------------------------------------\n\n/**\n * Reads UI metadata registered against a Zod schema via the Zod v4 global\n * registry (i.e. `.register(z.globalRegistry, { label: '...' })`).\n *\n * Returns an empty object when no metadata has been registered.\n *\n * @param schema - The Zod schema to read metadata from.\n */\nexport function extractMeta(schema: z.$ZodType): FieldMeta {\n return (z.globalRegistry.get(schema) as FieldMeta | undefined) ?? {}\n}\n\n// ---------------------------------------------------------------------------\n// Unwrap transparent wrappers\n// - optional / nullable / default / prefault: use def.innerType\n// - pipe (from .transform()): use def.in (the source schema)\n// ---------------------------------------------------------------------------\n\nexport type UnwrapResult = {\n schema: z.$ZodType\n required: boolean\n meta: FieldMeta\n}\n\nconst WRAPPER_KINDS = new Set([\n 'optional',\n 'nullable',\n 'default',\n 'prefault',\n 'pipe', // ZodPipe — .transform() returns ZodPipe<Source, ZodTransform>\n])\n\n/**\n * Recursively strips transparent Zod wrapper types (`optional`, `nullable`,\n * `default`, `prefault`, `pipe`) from a schema, collecting metadata and\n * requiredness along the way.\n *\n * Metadata is merged so that outer wrappers take precedence over inner ones\n * (e.g. meta attached to the `optional()` call overrides meta on the inner\n * type).\n *\n * @param schema - The Zod schema to unwrap.\n * @returns The innermost non-wrapper schema together with its resolved\n * `required` flag and merged `meta`.\n */\nexport function unwrap(schema: z.$ZodType): UnwrapResult {\n let inner = schema\n let required = true\n let meta: FieldMeta = extractMeta(inner)\n\n let kind = inner._zod.def.type\n\n while (WRAPPER_KINDS.has(kind)) {\n if (kind === 'optional' || kind === 'nullable') {\n required = false\n }\n\n if (kind === 'pipe') {\n // ZodPipe: def.in is the source schema, def.out is ZodTransform\n inner = (inner._zod.def as z.$ZodPipeDef).in\n } else {\n // optional / nullable / default / prefault\n inner = (\n inner._zod.def as\n | z.$ZodOptionalDef\n | z.$ZodNullableDef\n | z.$ZodDefaultDef\n | z.$ZodPrefaultDef\n ).innerType\n }\n\n meta = { ...extractMeta(inner), ...meta } // outer meta takes precedence\n kind = inner._zod.def.type\n }\n\n return { schema: inner, required, meta }\n}\n","import * as z from 'zod/v4/core'\nimport type { FieldConfig, FieldMeta, FieldType, SelectOption } from '../types'\nimport { deriveLabel } from './deriveLabel'\nimport { unwrap } from './unwrap'\n\n// ---------------------------------------------------------------------------\n// Main introspection function\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively introspects a Zod schema and returns a {@link FieldConfig}\n * describing the field's type, label, validation constraints, and UI metadata.\n *\n * Transparent wrappers (`optional`, `nullable`, `default`, `pipe`) are\n * unwrapped before inspection. Unknown/unsupported types fall back to\n * `type: 'unknown'` rather than throwing.\n *\n * @param schema - The Zod schema to introspect.\n * @param name - The field key within its parent object (used for label derivation).\n * @param parentPath - The dot-notated path of the parent (used to build `field.name`).\n */\nexport function introspectSchema(\n schema: z.$ZodType,\n name: string = '',\n parentPath: string = '',\n): FieldConfig {\n const path = parentPath && name ? `${parentPath}.${name}` : name || parentPath\n\n const { schema: unwrappedSchema, required, meta } = unwrap(schema)\n const inner = unwrappedSchema as z.$ZodTypes\n const def = inner._zod.def\n const kind = def.type\n const mergedMeta: FieldMeta = { ...meta }\n\n const label =\n typeof mergedMeta.label === 'string' ? mergedMeta.label : deriveLabel(name)\n\n let type: FieldType = 'unknown'\n let options: SelectOption[] | undefined\n let children: FieldConfig[] | undefined\n let itemConfig: FieldConfig | undefined\n let unionVariants: FieldConfig[] | undefined\n let discriminatorKey: string | undefined\n let minItems: number | undefined\n let maxItems: number | undefined\n\n // Never throw — unknown types gracefully return 'unknown'\n try {\n if (kind === 'string') {\n // If meta declares a select component with options, treat the field as a select\n if (\n mergedMeta.component === 'select' &&\n Array.isArray(mergedMeta.options) &&\n mergedMeta.options.length > 0\n ) {\n type = 'select'\n options = mergedMeta.options\n } else {\n type = 'string'\n // Handle standalone format schemas: z.email(), z.url(), z.uuid()\n // These are ZodStringFormat types with def.format set directly.\n const defFormat = (def as z.$ZodStringFormatDef).format as\n | string\n | undefined\n if (defFormat === 'email') {\n mergedMeta['inputType'] = 'email'\n } else if (defFormat === 'url') {\n mergedMeta['inputType'] = 'url'\n } else if (defFormat === 'uuid') {\n mergedMeta['inputType'] = 'uuid'\n } else {\n // Handle chained format checks: z.string().email() etc.\n // v4 check shape: { check: 'string_format', format: 'email' | 'url' | 'uuid' | ... }\n const checks = def.checks ?? []\n const hasFormat = (fmt: string) =>\n checks.some(\n (c) =>\n c._zod.def.check === 'string_format' &&\n (c._zod.def as z.$ZodCheckStringFormatDef).format === fmt,\n )\n if (hasFormat('email')) {\n mergedMeta['inputType'] = 'email'\n } else if (hasFormat('url')) {\n mergedMeta['inputType'] = 'url'\n } else if (hasFormat('uuid')) {\n mergedMeta['inputType'] = 'uuid'\n }\n }\n }\n } else if (kind === 'number') {\n type = 'number'\n mergedMeta['inputType'] = 'number'\n } else if (kind === 'boolean') {\n type = 'boolean'\n } else if (kind === 'date') {\n type = 'date'\n mergedMeta['inputType'] = 'date'\n } else if (kind === 'enum') {\n // v4: both z.enum() and z.nativeEnum() use type === 'enum' with def.entries\n type = 'select'\n options = Object.entries(def.entries)\n .filter(([key]) => isNaN(Number(key)))\n .map(([key, value]) => ({\n label:\n typeof value === 'string'\n ? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase()\n : key.charAt(0).toUpperCase() + key.slice(1).toLowerCase(),\n value,\n }))\n } else if (kind === 'object') {\n type = 'object'\n children = Object.entries(def.shape).map(([key, fieldSchema]) =>\n introspectSchema(fieldSchema, key, path),\n )\n } else if (kind === 'array') {\n type = 'array'\n const elementSchema = def.element\n itemConfig = introspectSchema(elementSchema, '', '')\n // Extract min/max from array checks\n const checks = def.checks ?? []\n for (const check of checks) {\n const checkDef = check._zod.def as unknown as Record<string, unknown>\n if (\n checkDef.check === 'min_length' &&\n typeof checkDef.minimum === 'number'\n ) {\n minItems = checkDef.minimum\n }\n if (\n checkDef.check === 'max_length' &&\n typeof checkDef.maximum === 'number'\n ) {\n maxItems = checkDef.maximum\n }\n }\n } else if (def.type === 'union') {\n const unionDef = def as z.$ZodDiscriminatedUnionDef | z.$ZodUnionDef\n const variants = unionDef.options as z.$ZodAny[]\n\n if ('discriminator' in unionDef) {\n // Discriminated union — keep full union treatment\n type = 'union'\n discriminatorKey = unionDef.discriminator\n unionVariants = variants.map((variant, i) =>\n introspectSchema(variant, String(i), path),\n )\n } else {\n // Plain union (z.or()) — collapse to the first variant.\n // The original schema is preserved on `schema` for custom components.\n const collapsed = introspectSchema(variants[0], name, parentPath)\n return {\n ...collapsed,\n name: path,\n label,\n meta: { ...collapsed.meta, ...mergedMeta },\n schema: inner,\n } as FieldConfig\n }\n }\n } catch {\n type = 'unknown'\n }\n\n return {\n name: path,\n type,\n label,\n required,\n meta: mergedMeta,\n schema: inner,\n ...(options !== undefined && { options }),\n ...(children !== undefined && { children }),\n ...(itemConfig !== undefined && { itemConfig }),\n ...(unionVariants !== undefined && { unionVariants }),\n ...(discriminatorKey !== undefined && { discriminatorKey }),\n ...(minItems !== undefined && { minItems }),\n ...(maxItems !== undefined && { maxItems }),\n } as FieldConfig\n}\n\n// ---------------------------------------------------------------------------\n// Convenience wrapper for top-level ZodObject schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Introspects all fields of a top-level `ZodObject` schema and returns an\n * ordered array of {@link FieldConfig} objects, one per key in `schema.shape`.\n *\n * This is the entry point used by `<AutoForm>` to derive the field list from\n * the provided schema.\n *\n * @param schema - The top-level `ZodObject` schema to introspect.\n */\nexport function introspectObjectSchema(schema: z.$ZodObject): FieldConfig[] {\n return Object.entries(schema._zod.def.shape).map(([key, fieldSchema]) =>\n introspectSchema(fieldSchema, key, ''),\n )\n}\n","import * as z from 'zod/v4/core'\nimport type { FieldConfig, SelectOption } from '../types'\nimport { deriveLabel } from './deriveLabel'\nimport { introspectSchema } from './introspect'\n\n// ---------------------------------------------------------------------------\n// Discriminated union metadata helper (used by AutoForm for variant-swap)\n// ---------------------------------------------------------------------------\n\n/**\n * Extracts static metadata from a `ZodDiscriminatedUnion` schema:\n * the discriminator key, a map of discriminator-value → variant ZodObject,\n * and a pre-built `FieldConfig` for the discriminator select field.\n *\n * Used by `AutoForm` to reactively swap variant fields without flattening.\n */\nexport function parseDiscriminatedUnionMeta(schema: z.$ZodDiscriminatedUnion): {\n discriminatorKey: string\n variantMap: Map<string, z.$ZodObject>\n discriminatorField: FieldConfig\n firstVariant: z.$ZodObject\n} {\n const def = schema._zod.def\n const discriminatorKey = def.discriminator\n const variants = def.options as z.$ZodObject[]\n\n const variantMap = new Map<string, z.$ZodObject>()\n const discriminatorOptions: SelectOption[] = []\n\n for (const variant of variants) {\n const shape = variant._zod.def.shape as Record<string, z.$ZodAny>\n const litDef = (shape[discriminatorKey] as unknown as z.$ZodLiteral)._zod\n .def as { values: unknown[] }\n const value = String(litDef.values[0])\n variantMap.set(value, variant)\n discriminatorOptions.push({\n label: value.charAt(0).toUpperCase() + value.slice(1),\n value,\n })\n }\n\n const discriminatorField: FieldConfig = {\n name: discriminatorKey,\n type: 'select',\n label: deriveLabel(discriminatorKey),\n required: true,\n meta: {},\n schema,\n options: discriminatorOptions,\n }\n\n return {\n discriminatorKey,\n variantMap,\n discriminatorField,\n firstVariant: variants[0],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Convenience wrapper for top-level ZodDiscriminatedUnion schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Flattens a `ZodDiscriminatedUnion` into a `FieldConfig[]` suitable for\n * `<AutoForm>`. The discriminator becomes a `select` field; each variant's\n * fields are included once (first-variant wins for duplicates) with a\n * `meta.condition` that shows them only when the discriminator matches their\n * variant's literal value.\n *\n * @param schema - The top-level discriminated union schema to introspect.\n */\nexport function introspectDiscriminatedUnionSchema(\n schema: z.$ZodDiscriminatedUnion,\n): FieldConfig[] {\n const def = schema._zod.def\n const discriminatorKey = def.discriminator\n const variants = def.options as z.$ZodObject[]\n\n // Build discriminator as a select field\n const discriminatorOptions: SelectOption[] = []\n for (const variant of variants) {\n const shape = variant._zod.def.shape as Record<string, z.$ZodAny>\n const litDef = (shape[discriminatorKey] as unknown as z.$ZodLiteral)._zod\n .def as { values: unknown[] }\n const value = String(litDef.values[0])\n discriminatorOptions.push({\n label: value.charAt(0).toUpperCase() + value.slice(1),\n value,\n })\n }\n\n const discriminatorField: FieldConfig = {\n name: discriminatorKey,\n type: 'select',\n label: deriveLabel(discriminatorKey),\n required: true,\n meta: {},\n schema,\n options: discriminatorOptions,\n }\n\n // Collect variant-specific fields with auto-conditions\n const fields: FieldConfig[] = [discriminatorField]\n const seen = new Set<string>([discriminatorKey])\n\n for (const variant of variants) {\n const shape = variant._zod.def.shape as Record<string, z.$ZodAny>\n const literalDef = (shape[discriminatorKey] as unknown as z.$ZodLiteral)\n ._zod.def as { values: unknown[] }\n const discriminatorValue = String(literalDef.values[0])\n\n for (const [key, fieldSchema] of Object.entries(shape)) {\n if (seen.has(key)) continue\n seen.add(key)\n\n const base = introspectSchema(fieldSchema, key, '')\n fields.push({\n ...base,\n meta: {\n ...base.meta,\n condition: (values: Record<string, unknown>) =>\n values[discriminatorKey] === discriminatorValue,\n },\n })\n }\n }\n\n return fields\n}\n","import type { ComponentRegistry } from '../types'\n\n/**\n * Merges two {@link ComponentRegistry} objects, with `overrides` taking\n * precedence over `base` for any keys that appear in both.\n *\n * Returns `base` unchanged when `overrides` is `undefined`.\n *\n * @param base - The default registry (typically the factory-level registry).\n * @param overrides - Optional per-instance registry to merge on top.\n */\nexport function mergeRegistries(\n base: ComponentRegistry,\n overrides?: ComponentRegistry,\n): ComponentRegistry {\n if (!overrides) return base\n return { ...base, ...overrides }\n}\n","import * as React from 'react'\nimport type { FieldProps } from '../../types'\n\nfunction resolveInputType(props: FieldProps): React.HTMLInputTypeAttribute {\n const metaType = props.meta.inputType\n if (typeof metaType === 'string') return metaType\n if (props.meta.component === 'date') return 'date'\n return 'text'\n}\n\nfunction formatValue(value: unknown): string {\n if (value instanceof Date) {\n if (isNaN(value.getTime())) return ''\n return value.toISOString().split('T')[0]\n }\n if (value === null || value === undefined) return ''\n return String(value as string | number | boolean)\n}\n\nexport function DefaultInput(props: FieldProps) {\n const { name, value, onChange, onBlur, ref, required, disabled, meta } = props\n const inputType = resolveInputType(props)\n\n return (\n <input\n id={name}\n name={name}\n type={inputType}\n value={formatValue(value)}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n ref={ref}\n required={required}\n disabled={disabled}\n aria-required={required}\n aria-disabled={disabled}\n placeholder={meta.placeholder}\n data-input-type={inputType}\n data-required={required || undefined}\n data-disabled={disabled || undefined}\n />\n )\n}\n","import type { FieldProps } from '../../types'\n\nexport function DefaultCheckbox(props: FieldProps) {\n const { name, value, onChange, onBlur, ref, required, disabled, label } =\n props\n const checked = Boolean(value)\n\n return (\n <label htmlFor={name} data-disabled={disabled || undefined}>\n <input\n id={name}\n name={name}\n type='checkbox'\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n ref={ref}\n required={required}\n disabled={disabled}\n aria-required={required}\n aria-disabled={disabled}\n data-required={required || undefined}\n data-disabled={disabled || undefined}\n data-checked={checked || undefined}\n />\n {label}\n </label>\n )\n}\n","import type { FieldProps } from '../../types'\n\nexport function DefaultSelect(props: FieldProps) {\n const {\n name,\n value,\n onChange,\n onBlur,\n ref,\n required,\n disabled,\n options = [],\n } = props\n\n return (\n <select\n id={name}\n name={name}\n value={String((value ?? '') as string | number)}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n ref={ref}\n required={required}\n disabled={disabled}\n aria-required={required}\n aria-disabled={disabled}\n data-required={required || undefined}\n data-disabled={disabled || undefined}\n >\n {options.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n}\n","import type { ComponentRegistry } from '../types'\nimport { DefaultInput } from '../components/defaults/DefaultInput'\nimport { DefaultCheckbox } from '../components/defaults/DefaultCheckbox'\nimport { DefaultSelect } from '../components/defaults/DefaultSelect'\n\nexport const defaultRegistry: ComponentRegistry = {\n string: DefaultInput,\n number: DefaultInput,\n date: DefaultInput,\n boolean: DefaultCheckbox,\n select: DefaultSelect,\n}\n","import * as React from 'react'\nimport type {\n CoercionMap,\n ComponentRegistry,\n FieldWrapperProps,\n ResolvedLayoutSlots,\n FormClassNames,\n ValidationMessages,\n FormLabels,\n FormMethods,\n} from '../types'\n\nexport type AutoFormContextValue = {\n registry: ComponentRegistry\n fieldOverrides: Record<string, unknown>\n fieldWrapper: React.ComponentType<FieldWrapperProps>\n layout: ResolvedLayoutSlots\n classNames: FormClassNames\n disabled: boolean\n coercions?: CoercionMap\n messages?: ValidationMessages\n labels: FormLabels\n formMethods: FormMethods\n}\n\nconst AutoFormContext = React.createContext<AutoFormContextValue | null>(null)\n\nexport function useAutoFormContext(): AutoFormContextValue {\n const ctx = React.useContext(AutoFormContext)\n if (!ctx) {\n throw new Error(\n '[UniForm] useAutoFormContext must be used inside an <AutoForm> component.',\n )\n }\n return ctx\n}\n\nexport const AutoFormContextProvider = AutoFormContext.Provider\n","import type * as React from 'react'\nimport type { FieldWrapperProps } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\n\nexport function DefaultFieldWrapper({\n children,\n field,\n error,\n span,\n index = 0,\n depth = 0,\n}: FieldWrapperProps) {\n const { classNames, disabled: contextDisabled } = useAutoFormContext()\n\n const isDisabled = field.meta.disabled || contextDisabled\n const hasError = Boolean(error)\n const hasDescription = Boolean(field.meta.description)\n\n return (\n <div\n className={classNames.fieldWrapper}\n style={\n {\n '--field-span': span ?? field.meta.span ?? 1,\n '--field-index': index,\n '--field-depth': depth,\n } as React.CSSProperties\n }\n data-field-name={field.name}\n data-field-type={field.type}\n data-required={field.required || undefined}\n data-disabled={isDisabled || undefined}\n data-has-error={hasError || undefined}\n data-has-description={hasDescription || undefined}\n >\n <label htmlFor={field.name} className={classNames.label}>\n {field.label}\n {field.required && ' *'}\n </label>\n {children}\n {hasDescription && (\n <p className={classNames.description}>\n {String(field.meta.description)}\n </p>\n )}\n {error && (\n <span role='alert' className={classNames.error}>\n {error}\n </span>\n )}\n </div>\n )\n}\n","import { useAutoFormContext } from '../../context/AutoFormContext'\n\ntype DefaultSubmitButtonProps = {\n isSubmitting: boolean\n}\n\nexport function DefaultSubmitButton({\n isSubmitting,\n}: DefaultSubmitButtonProps) {\n const { labels } = useAutoFormContext()\n return (\n <button\n type='submit'\n disabled={isSubmitting}\n data-submitting={isSubmitting || undefined}\n >\n {labels.submit ?? 'Submit'}\n </button>\n )\n}\n","import * as React from 'react'\n\nexport function DefaultFormWrapper({ children }: React.PropsWithChildren) {\n return <>{children}</>\n}\n","import * as React from 'react'\n\nexport function DefaultSectionWrapper({\n children,\n title,\n className,\n}: React.PropsWithChildren & { title: string; className?: string }) {\n return (\n <fieldset className={className}>\n <legend>{title}</legend>\n {children}\n </fieldset>\n )\n}\n","import type { ArrayRowLayoutProps } from '../../types'\n\nexport function DefaultArrayRowLayout({\n children,\n buttons,\n}: ArrayRowLayoutProps) {\n return (\n <div>\n {buttons.collapse}\n {children}\n <div>\n {buttons.moveUp}\n {buttons.moveDown}\n {buttons.duplicate}\n {buttons.remove}\n </div>\n </div>\n )\n}\n","import type { ArrayFieldLayoutProps } from '../../types'\n\nexport function DefaultArrayFieldLayout({\n rows,\n addButton,\n}: ArrayFieldLayoutProps) {\n return (\n <>\n {rows}\n {addButton}\n </>\n )\n}\n","import type { ObjectWrapperProps } from '../../types'\n\nexport function DefaultObjectWrapper({\n children,\n label,\n className,\n labelClassName,\n}: ObjectWrapperProps) {\n return (\n <fieldset className={className}>\n {label && <legend className={labelClassName}>{label}</legend>}\n {children}\n </fieldset>\n )\n}\n","import type { ArrayWrapperProps } from '../../types'\n\nexport function DefaultArrayWrapper({\n children,\n label,\n className,\n labelClassName,\n}: ArrayWrapperProps) {\n return (\n <fieldset className={className}>\n {label && <legend className={labelClassName}>{label}</legend>}\n {children}\n </fieldset>\n )\n}\n","import type { ArrayButtonProps } from '../../types'\n\nexport function DefaultArrayButton(props: ArrayButtonProps) {\n return <button {...props} />\n}\n","import type { ArrayCollapseButtonProps } from '../../types'\n\nexport function DefaultArrayCollapseButton({\n isCollapsed: _isCollapsed,\n ...props\n}: ArrayCollapseButtonProps) {\n return <button {...props} />\n}\n","import type { ValidationMessages } from '../types'\n\ntype FieldError = {\n message?: string\n type?: string\n}\n\n/**\n * Resolves the final error message to display for a field, applying\n * `ValidationMessages` overrides on top of the raw Zod/RHF error.\n *\n * Resolution priority:\n * 1. Per-field string override in `messages[fieldName]` — used regardless of\n * error type.\n * 2. Per-field per-code override in `messages[fieldName][error.type]`.\n * 3. Global `messages.required` — applied when the error is a required-field\n * error (`too_small` or `invalid_type`).\n * 4. The original message from Zod/RHF as a final fallback.\n *\n * @param fieldName - Dot-notated field name (e.g. `\"address.street\"`).\n * @param error - The raw error object from RHF's `formState.errors`.\n * @param messages - Optional `ValidationMessages` overrides.\n * @returns The resolved error string, or `undefined` if there is no error.\n */\nexport function resolveErrorMessage(\n fieldName: string,\n error: FieldError | undefined,\n messages?: ValidationMessages,\n): string | undefined {\n if (!error) return undefined\n\n const originalMessage = error.message\n\n if (!messages) return originalMessage\n\n // 1. Per-field override\n const fieldMessage = messages[fieldName]\n if (fieldMessage !== undefined) {\n // Per-field string — use it as the error message regardless of error code\n if (typeof fieldMessage === 'string') return fieldMessage\n // Per-field per-code — look up the error type\n if (typeof fieldMessage === 'object' && error.type) {\n const coded = fieldMessage[error.type]\n if (coded) return coded\n }\n }\n\n // 2. Global required override\n if (messages.required && isRequiredError(error)) {\n return messages.required\n }\n\n // 3. Fall back to Zod's original message\n return originalMessage\n}\n\n/**\n * Returns `true` when the given RHF error represents a missing required value.\n *\n * Zod v4 uses `invalid_type` for `undefined` on required fields, and\n * `too_small` (with `inclusive` minimum) for empty strings / zero values.\n */\nfunction isRequiredError(error: FieldError): boolean {\n // RHF maps Zod errors; \"too_small\" with inclusive minimum is the common Zod required pattern\n // Also handle \"invalid_type\" which Zod v4 uses for undefined-on-required\n return error.type === 'too_small' || error.type === 'invalid_type'\n}\n","import type { ComponentRegistry, FieldConfig, FieldProps } from '../types'\nimport { defaultRegistry } from '../registry/defaultRegistry'\n\n/**\n * Resolves the React component that should be used to render a given field,\n * following this priority order:\n *\n * 1. `field.meta.component` is a direct React component → used as-is,\n * bypassing the registry entirely.\n * 2. `field.meta.component` is a string key → looked up in the merged\n * `registry` (factory + instance components).\n * 3. `field.type` key exists in the merged `registry`.\n * 4. `field.type` key exists in the {@link defaultRegistry}.\n * 5. No match → logs a warning and returns `null`.\n *\n * @param field - The resolved field configuration.\n * @param registry - The merged component registry for the current form instance.\n * @returns The component to render, or `null` if none could be found.\n */\nexport function resolveComponent(\n field: FieldConfig,\n registry: ComponentRegistry,\n): React.ComponentType<FieldProps> | null {\n // 1. meta.component as a direct React component (bypasses registry)\n if (field.meta.component && typeof field.meta.component === 'function') {\n return field.meta.component as React.ComponentType<FieldProps>\n }\n // 2. meta.component as a string key in the merged registry\n if (\n typeof field.meta.component === 'string' &&\n registry[field.meta.component]\n ) {\n return registry[field.meta.component]!\n }\n // 3. field.type key in the merged registry\n if (registry[field.type]) {\n return registry[field.type]!\n }\n // 4. field.type key in the default registry\n if (defaultRegistry[field.type]) {\n return defaultRegistry[field.type]!\n }\n // 5. Unknown — render nothing\n console.warn(\n `[UniForm] No component found for field type \"${field.type}\"${field.meta.component ? ` with meta.component \"${String(field.meta.component)}\"` : ''}. Rendering null.`,\n )\n return null\n}\n","// ---------------------------------------------------------------------------\n// Coercion utilities\n// ---------------------------------------------------------------------------\n\nexport type CoercionMap = Record<string, (value: unknown) => unknown>\n\n/**\n * Built-in coercion functions for the primitive field types. Each function\n * converts the raw string value that comes from an HTML `<input>` into the\n * type expected by the Zod schema before validation is applied.\n *\n * - `number` — converts to `Number`; returns `undefined` for empty/null inputs.\n * - `date` — converts to `Date`; returns `undefined` for empty/null inputs.\n * - `boolean` — converts to `Boolean`.\n * - `string` — converts `null` / `undefined` to `''`, otherwise `String(value)`.\n */\nexport const defaultCoercionMap: CoercionMap = {\n number: (value: unknown) => {\n if (value === '' || value === null || value === undefined) return undefined\n const num = Number(value)\n return isNaN(num) ? value : num\n },\n date: (value: unknown) => {\n if (value === '' || value === null || value === undefined) return undefined\n const d = new Date(String(value as string | number | Date))\n return isNaN(d.getTime()) ? value : d\n },\n boolean: (value: unknown) => Boolean(value),\n string: (value: unknown) =>\n value == null || value == undefined\n ? ''\n : String(value as string | number | boolean),\n}\n\n/**\n * Coerces `value` to the type expected by `type`, using `customCoercions` first\n * and falling back to {@link defaultCoercionMap}.\n *\n * Returns the value unchanged when no coercion function is found for the given type.\n *\n * @param type - The field type string (e.g. `'number'`, `'date'`).\n * @param value - The raw value to coerce.\n * @param customCoercions - Optional per-instance overrides that take precedence\n * over the built-in coercion map.\n */\nexport function coerceValue(\n type: string,\n value: unknown,\n customCoercions?: CoercionMap,\n): unknown {\n const coercionFn = customCoercions?.[type] ?? defaultCoercionMap[type]\n if (!coercionFn) return value\n return coercionFn(value)\n}\n","import { Controller } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { resolveComponent } from '../resolveComponent'\nimport { coerceValue } from '../../coercion/coerce'\n\ntype ScalarFieldProps = {\n field: FieldConfig\n control: Control\n effectiveName: string\n shouldUnregister?: boolean\n}\n\nexport function ScalarField({\n field,\n control,\n effectiveName,\n shouldUnregister,\n}: ScalarFieldProps) {\n const {\n registry,\n disabled: contextDisabled,\n coercions,\n formMethods,\n } = useAutoFormContext()\n const Component = resolveComponent(field, registry)\n\n if (!Component) return null\n\n return (\n <Controller\n name={effectiveName}\n control={control}\n shouldUnregister={shouldUnregister}\n render={({ field: rhfField, fieldState }) => (\n <Component\n name={effectiveName}\n value={(rhfField.value as unknown) ?? ''}\n onChange={(value) => {\n const coerced = coerceValue(field.type, value, coercions)\n rhfField.onChange(coerced)\n void field.meta.onChange?.(coerced, formMethods)\n }}\n onBlur={rhfField.onBlur}\n ref={rhfField.ref}\n label={field.label}\n placeholder={field.meta.placeholder}\n description={field.meta.description}\n error={fieldState.error?.message}\n required={field.required}\n disabled={field.meta.disabled || contextDisabled}\n options={field.meta.options}\n meta={field.meta}\n schema={field.schema}\n />\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { resolveComponent } from '../resolveComponent'\n\ntype BooleanFieldProps = {\n field: FieldConfig\n control: Control\n effectiveName: string\n shouldUnregister?: boolean\n}\n\nexport function BooleanField({\n field,\n control,\n effectiveName,\n shouldUnregister,\n}: BooleanFieldProps) {\n const {\n registry,\n disabled: contextDisabled,\n formMethods,\n } = useAutoFormContext()\n const Component = resolveComponent(field, registry)\n\n if (!Component) return null\n\n return (\n <Controller\n name={effectiveName}\n control={control}\n shouldUnregister={shouldUnregister}\n render={({ field: rhfField, fieldState }) => (\n <Component\n name={effectiveName}\n value={(rhfField.value as unknown) ?? false}\n onChange={(value) => {\n rhfField.onChange(value)\n void field.meta.onChange?.(value, formMethods)\n }}\n onBlur={rhfField.onBlur}\n ref={rhfField.ref}\n label={field.label}\n placeholder={field.meta.placeholder}\n description={field.meta.description}\n error={fieldState.error?.message}\n required={field.required}\n disabled={field.meta.disabled || rhfField.disabled || contextDisabled}\n meta={field.meta}\n schema={field.schema}\n />\n )}\n />\n )\n}\n","import * as React from 'react'\nimport { Controller } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { resolveComponent } from '../resolveComponent'\n\ntype SelectFieldProps = {\n field: Extract<FieldConfig, { type: 'select' }>\n control: Control\n effectiveName: string\n shouldUnregister?: boolean\n}\n\nexport function SelectField({\n field,\n control,\n effectiveName,\n shouldUnregister,\n}: SelectFieldProps) {\n const {\n registry,\n disabled: contextDisabled,\n formMethods,\n } = useAutoFormContext()\n const Component = resolveComponent(field, registry)\n\n if (!Component) return null\n\n return (\n <Controller\n name={effectiveName}\n control={control}\n shouldUnregister={shouldUnregister}\n render={({ field: rhfField, fieldState }) => (\n <Component\n name={effectiveName}\n value={(rhfField.value as unknown) ?? ''}\n onChange={(value) => {\n rhfField.onChange(value)\n void field.meta.onChange?.(value, formMethods)\n }}\n onBlur={rhfField.onBlur}\n ref={rhfField.ref}\n label={field.label}\n placeholder={field.meta.placeholder}\n description={field.meta.description}\n error={fieldState.error?.message}\n required={field.required}\n disabled={field.meta.disabled || contextDisabled}\n options={field.options}\n meta={field.meta}\n schema={field.schema}\n />\n )}\n />\n )\n}\n","import * as React from 'react'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig, ObjectWrapperProps } from '../../types'\nimport { FieldRenderer } from '../FieldRenderer'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\n\ntype ObjectFieldProps = {\n field: Extract<FieldConfig, { type: 'object' }>\n control: Control\n namePrefix?: string\n depth?: number\n shouldUnregister?: boolean\n}\n\nexport function ObjectField({\n field,\n control,\n namePrefix,\n depth = 0,\n shouldUnregister,\n}: ObjectFieldProps) {\n const { classNames, layout } = useAutoFormContext()\n const children = field.children\n\n const content = children.map((child, idx) => (\n <FieldRenderer\n key={child.name}\n field={child}\n control={control}\n namePrefix={namePrefix}\n index={idx}\n depth={depth + 1}\n shouldUnregister={shouldUnregister}\n />\n ))\n\n if (field.meta.section) {\n return <>{content}</>\n }\n\n const ObjectWrapper =\n (field.meta.wrapper as\n | React.ComponentType<ObjectWrapperProps>\n | undefined) ?? layout.objectWrapper\n return (\n <ObjectWrapper\n label={field.label}\n className={classNames.objectFieldset}\n labelClassName={classNames.objectLegend}\n >\n {content}\n </ObjectWrapper>\n )\n}\n","import type { FieldConfig } from '../../types'\n\n/**\n * Returns a sensible empty default value for a field based on its `type`.\n *\n * Used when appending new rows to an array field so that RHF starts each row\n * with typed, non-`undefined` values.\n *\n * - `string` → `''`\n * - `number` → `0`\n * - `boolean` → `false`\n * - `date` → `new Date()`\n * - `select` → first option value, or `''` if no options exist\n * - `object` → recursively built object using child defaults\n * - `array` → `[]`\n * - anything else → `undefined`\n */\nexport function getDefaultValue(field: FieldConfig): unknown {\n switch (field.type) {\n case 'string':\n return ''\n case 'number':\n return 0\n case 'boolean':\n return false\n case 'date':\n return new Date()\n case 'select':\n return field.options?.[0]?.value ?? ''\n case 'object': {\n const result: Record<string, unknown> = {}\n for (const child of field.children ?? []) {\n // Use only the last segment of the child's name for the key\n const key = child.name.split('.').pop() ?? child.name\n result[key] = getDefaultValue(child)\n }\n return result\n }\n case 'array':\n return []\n default:\n return undefined\n }\n}\n","import { useState, useMemo } from 'react'\nimport * as React from 'react'\nimport { useFieldArray, useWatch } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig, ArrayWrapperProps } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { FieldRenderer } from '../FieldRenderer'\nimport { getDefaultValue } from './getDefaultValue'\n\ntype ArrayFieldProps = {\n field: Extract<FieldConfig, { type: 'array' }>\n control: Control\n effectiveName: string\n}\n\n/**\n * Produces a short summary string for a collapsed array row.\n *\n * Scans the row's values for the first non-empty `string` or `number` child\n * field and returns it as the label. Falls back to `\"Item {index + 1}\"` when\n * no suitable value is found.\n *\n * @param row - The current form values for the row (shallow key-value map).\n * @param itemConfig - The field config describing the item's shape.\n * @param index - Zero-based row index, used in the fallback label.\n */\nfunction getRowSummary(\n row: Record<string, unknown>,\n itemConfig: FieldConfig,\n index: number,\n): string {\n // Try to find the first string or number value from children\n if (itemConfig.type === 'object') {\n for (const child of itemConfig.children) {\n const key = child.name.split('.').pop() ?? child.name\n const val = row[key]\n if (\n (child.type === 'string' || child.type === 'number') &&\n val != null &&\n val !== ''\n ) {\n return String(val as string | number)\n }\n }\n }\n return `Item ${index + 1}`\n}\n\nexport function ArrayField({ field, control, effectiveName }: ArrayFieldProps) {\n const { classNames, layout, labels } = useAutoFormContext()\n const {\n fields: rows,\n append,\n remove,\n move,\n insert,\n } = useFieldArray({\n control,\n name: effectiveName,\n })\n\n const [collapsed, setCollapsed] = useState<Set<number>>(() => new Set())\n\n const itemConfig = field.itemConfig\n const isObjectItems = itemConfig.type === 'object'\n const minItems = field.minItems\n const maxItems = field.maxItems\n const atMin = minItems != null && rows.length <= minItems\n const atMax = maxItems != null && rows.length >= maxItems\n\n const showMove = field.meta.movable === true\n const showDuplicate = field.meta.duplicable === true\n const showCollapse = field.meta.collapsible === true && isObjectItems\n\n const toggleCollapse = (index: number) => {\n setCollapsed((prev) => {\n const next = new Set(prev)\n if (next.has(index)) {\n next.delete(index)\n } else {\n next.add(index)\n }\n return next\n })\n }\n\n // When the array belongs to a section, propagate section to the item config\n // so nested ObjectField also skips its own <fieldset>.\n const effectiveItemConfig =\n field.meta.section && !itemConfig.meta.section\n ? {\n ...itemConfig,\n meta: { ...itemConfig.meta, section: field.meta.section },\n }\n : itemConfig\n\n const {\n add: AddBtn,\n remove: RemoveBtn,\n moveUp: MoveUpBtn,\n moveDown: MoveDownBtn,\n duplicate: DuplicateBtn,\n collapse: CollapseBtn,\n } = layout.arrayButtons\n const ArrayFieldLayout = layout.arrayFieldLayout\n const RowLayout = layout.arrayRowLayout\n\n const renderedRows = rows.map((row, index) => {\n const isCollapsed = showCollapse && collapsed.has(index)\n\n const collapseButton = showCollapse ? (\n <CollapseBtn\n type='button'\n className={classNames.arrayCollapse}\n onClick={() => toggleCollapse(index)}\n aria-label={\n isCollapsed\n ? `Expand item ${index + 1}`\n : `Collapse item ${index + 1}`\n }\n isCollapsed={isCollapsed}\n >\n {isCollapsed\n ? (labels.arrayExpand ?? '▼')\n : (labels.arrayCollapse ?? '▶')}{' '}\n <CollapseSummary\n control={control}\n effectiveName={effectiveName}\n index={index}\n itemConfig={itemConfig}\n isCollapsed={isCollapsed}\n />\n </CollapseBtn>\n ) : null\n\n const moveUpButton =\n showMove && rows.length > 1 ? (\n <MoveUpBtn\n type='button'\n className={classNames.arrayMove}\n onClick={() => move(index, index - 1)}\n disabled={index === 0}\n aria-label={`Move item ${index + 1} up`}\n >\n {labels.arrayMoveUp ?? '↑'}\n </MoveUpBtn>\n ) : null\n\n const moveDownButton =\n showMove && rows.length > 1 ? (\n <MoveDownBtn\n type='button'\n className={classNames.arrayMove}\n onClick={() => move(index, index + 1)}\n disabled={index === rows.length - 1}\n aria-label={`Move item ${index + 1} down`}\n >\n {labels.arrayMoveDown ?? '↓'}\n </MoveDownBtn>\n ) : null\n\n const duplicateButton =\n showDuplicate && !atMax ? (\n <DuplicateBtn\n type='button'\n className={classNames.arrayDuplicate}\n onClick={() => {\n const values = Object.fromEntries(\n Object.entries(row).filter(([k]) => k !== 'id'),\n )\n insert(index + 1, values as Record<string, unknown>)\n }}\n aria-label={`Duplicate item ${index + 1}`}\n >\n {labels.arrayDuplicate ?? 'Duplicate'}\n </DuplicateBtn>\n ) : null\n\n const removeButton = (\n <RemoveBtn\n type='button'\n className={classNames.arrayRemove}\n onClick={() => remove(index)}\n disabled={atMin}\n aria-label={`Remove item ${index + 1}`}\n >\n {labels.arrayRemove ?? 'Remove'}\n </RemoveBtn>\n )\n\n const fieldContent = !isCollapsed ? (\n <FieldRenderer\n field={effectiveItemConfig}\n control={control}\n namePrefix={`${effectiveName}.${index}`}\n />\n ) : null\n\n return (\n <RowLayout\n key={row.id}\n buttons={{\n moveUp: moveUpButton,\n moveDown: moveDownButton,\n duplicate: duplicateButton,\n remove: removeButton,\n collapse: collapseButton,\n }}\n index={index}\n rowCount={rows.length}\n >\n {fieldContent}\n </RowLayout>\n )\n })\n\n const addButton = (\n <AddBtn\n type='button'\n className={classNames.arrayAdd}\n disabled={atMax}\n onClick={() =>\n append(getDefaultValue(itemConfig) as Record<string, unknown>)\n }\n >\n {labels.arrayAdd ?? 'Add'}\n </AddBtn>\n )\n\n const content = (\n <ArrayFieldLayout\n rows={renderedRows}\n addButton={addButton}\n rowCount={rows.length}\n canAdd={!atMax}\n />\n )\n\n if (field.meta.section) {\n return content\n }\n\n const ArrayWrapper =\n (field.meta.wrapper as\n | React.ComponentType<ArrayWrapperProps>\n | undefined) ?? layout.arrayWrapper\n return (\n <ArrayWrapper\n label={field.label}\n className={classNames.arrayFieldset}\n labelClassName={classNames.arrayLegend}\n >\n {content}\n </ArrayWrapper>\n )\n}\n\n/** Reactive summary text for collapsed rows */\nfunction CollapseSummary({\n control,\n effectiveName,\n index,\n itemConfig,\n isCollapsed,\n}: {\n control: Control\n effectiveName: string\n index: number\n itemConfig: FieldConfig\n isCollapsed: boolean\n}) {\n const rowValues = useWatch({ control, name: `${effectiveName}.${index}` }) as\n | Record<string, unknown>\n | undefined\n\n const summary = useMemo(() => {\n if (!isCollapsed) return `Item ${index + 1}`\n if (!rowValues) return `Item ${index + 1}`\n return getRowSummary(rowValues, itemConfig, index)\n }, [isCollapsed, rowValues, itemConfig, index])\n\n return <>{isCollapsed ? summary : `Item ${index + 1}`}</>\n}\n","import type { Control } from 'react-hook-form'\nimport { useFormState } from 'react-hook-form'\nimport type { FieldConfig } from '../types'\nimport { useAutoFormContext } from '../context/AutoFormContext'\nimport { resolveErrorMessage } from '../utils/resolveErrorMessage'\nimport { ScalarField } from './fields/ScalarField'\nimport { BooleanField } from './fields/BooleanField'\nimport { SelectField } from './fields/SelectField'\nimport { ObjectField } from './fields/ObjectField'\nimport { ArrayField } from './fields/ArrayField'\n\nexport type FieldRendererProps = {\n field: FieldConfig\n control: Control\n namePrefix?: string\n /** Zero-based render index within the parent container (form root / section / object). */\n index?: number\n /** Nesting depth (0 = top-level, 1 = inside object, etc.). */\n depth?: number\n /** When `true`, unregisters the field's value on unmount so it resets to its default when reshown.\n * Auto-set for conditional fields; propagated to object children. */\n shouldUnregister?: boolean\n}\n\n/**\n * Returns the fully-qualified field name for use with RHF, prepending\n * `namePrefix` when rendering inside a nested object or array context.\n */\nfunction getEffectiveName(field: FieldConfig, namePrefix?: string): string {\n if (!namePrefix) return field.name\n if (!field.name) return namePrefix\n return `${namePrefix}.${field.name}`\n}\n\n/**\n * Traverses the RHF `errors` object along a dot-notated `name` path and\n * returns the leaf error object, or `undefined` if no error exists at that path.\n */\nfunction getFieldError(\n errors: Record<string, unknown>,\n name: string,\n): { message?: string; type?: string } | undefined {\n const parts = name.split('.')\n let current: unknown = errors\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined\n current = (current as Record<string, unknown>)[part]\n }\n if (current && typeof current === 'object' && 'message' in current) {\n return current as { message?: string; type?: string }\n }\n return undefined\n}\n\n/**\n * Renders a single form field by delegating to the appropriate field component\n * based on `field.type`. Object and array fields manage their own layout and\n * skip the field wrapper; all other fields are wrapped in the configured\n * `FieldWrapper` with their resolved error message.\n */\nexport function FieldRenderer({\n field,\n control,\n namePrefix,\n index = 0,\n depth = 0,\n shouldUnregister,\n}: FieldRendererProps) {\n const effectiveShouldUnregister =\n shouldUnregister ?? typeof field.meta.condition === 'function'\n const { fieldWrapper: FieldWrapper, messages } = useAutoFormContext()\n const { errors } = useFormState({ control })\n const effectiveName = getEffectiveName(field, namePrefix)\n\n // object and array manage their own layout — unless a direct component overrides\n const hasDirectComponent = typeof field.meta.component === 'function'\n\n if (field.type === 'object' && !hasDirectComponent) {\n const objectField =\n effectiveName !== field.name ? { ...field, name: effectiveName } : field\n return (\n <ObjectField\n field={objectField}\n control={control}\n namePrefix={namePrefix}\n depth={depth}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n\n if (field.type === 'array' && !hasDirectComponent) {\n const arrayField =\n effectiveName !== field.name ? { ...field, name: effectiveName } : field\n return (\n <ArrayField\n field={arrayField}\n control={control}\n effectiveName={effectiveName}\n />\n )\n }\n\n const effectiveField =\n effectiveName !== field.name ? { ...field, name: effectiveName } : field\n\n const rawError = getFieldError(\n errors as Record<string, unknown>,\n effectiveName,\n )\n const error = resolveErrorMessage(effectiveName, rawError, messages)\n\n const renderField = () => {\n if (field.type === 'boolean') {\n return (\n <BooleanField\n field={effectiveField}\n control={control}\n effectiveName={effectiveName}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n if (field.type === 'select') {\n return (\n <SelectField\n field={effectiveField as Extract<FieldConfig, { type: 'select' }>}\n control={control}\n effectiveName={effectiveName}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n if (\n field.type === 'string' ||\n field.type === 'number' ||\n field.type === 'date' ||\n // array/object with a direct meta.component — let ScalarField render it\n hasDirectComponent\n ) {\n return (\n <ScalarField\n field={effectiveField}\n control={control}\n effectiveName={effectiveName}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n // unknown type\n console.warn(\n `[UniForm] Unsupported field type: \"${field.type}\". Rendering null.`,\n )\n return null\n }\n\n const rendered = renderField()\n if (rendered === null) return null\n\n return (\n <FieldWrapper\n field={effectiveField}\n error={error}\n span={field.meta.span}\n index={index}\n depth={depth}\n >\n {rendered}\n </FieldWrapper>\n )\n}\n","import { useMemo } from 'react'\nimport { useWatch } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../types'\n\n/**\n * Filters and sorts a list of field configs based on the current form values.\n *\n * - Fields with `meta.hidden === true` are always excluded.\n * - Fields with a `meta.condition` function are included only when the\n * function returns `true` for the current values.\n * - Remaining fields are sorted ascending by `meta.order` (fields without an\n * order appear last).\n *\n * Re-evaluates reactively whenever the watched form values change.\n *\n * @param fields - The full list of field configs to filter and sort.\n * @param control - The RHF `control` object from the parent form.\n * @returns The filtered and ordered subset of `fields`.\n */\nexport function useConditionalFields(\n fields: FieldConfig[],\n control: Control,\n): FieldConfig[] {\n const values = useWatch({ control })\n\n return useMemo(() => {\n return fields\n .filter((field) => {\n if (field.meta.hidden) return false\n if (typeof field.meta.condition === 'function') {\n return field.meta.condition(values)\n }\n return true\n })\n .sort((a, b) => {\n const orderA =\n typeof a.meta.order === 'number' ? a.meta.order : Infinity\n const orderB =\n typeof b.meta.order === 'number' ? b.meta.order : Infinity\n return orderA - orderB\n })\n }, [fields, values])\n}\n","import { useMemo } from 'react'\nimport type { FieldConfig } from '../types'\n\nexport type SectionGroup = {\n title: string | null\n fields: FieldConfig[]\n}\n\n/**\n * Groups a flat list of field configs into ordered section groups based on\n * each field's `meta.section` value.\n *\n * - Fields without a `meta.section` (or with a non-string value) are placed\n * in an \"ungrouped\" section with `title: null`, rendered first.\n * - Named sections appear in the order their first member is encountered.\n * - The returned array is memoized and only recomputed when `fields` changes.\n *\n * @param fields - The ordered list of (already filtered/sorted) field configs.\n * @returns An array of {@link SectionGroup} objects ready to be rendered.\n */\nexport function useSectionGrouping(fields: FieldConfig[]): SectionGroup[] {\n return useMemo(() => {\n const ungrouped: FieldConfig[] = []\n const sectionMap = new Map<string, FieldConfig[]>()\n const sectionOrder: string[] = []\n\n for (const field of fields) {\n const section = field.meta.section\n if (typeof section !== 'string') {\n ungrouped.push(field)\n } else {\n if (!sectionMap.has(section)) {\n sectionMap.set(section, [])\n sectionOrder.push(section)\n }\n sectionMap.get(section)!.push(field)\n }\n }\n\n const groups: SectionGroup[] = []\n\n if (ungrouped.length > 0) {\n groups.push({ title: null, fields: ungrouped })\n }\n\n for (const title of sectionOrder) {\n groups.push({ title, fields: sectionMap.get(title)! })\n }\n\n return groups\n }, [fields])\n}\n","import { useEffect, useRef, useCallback } from 'react'\nimport { useWatch } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { PersistStorage } from '../types'\n\nconst defaultStorage: PersistStorage | undefined =\n typeof window !== 'undefined'\n ? {\n getItem: (key) => sessionStorage.getItem(key),\n setItem: (key, value) => sessionStorage.setItem(key, value),\n removeItem: (key) => sessionStorage.removeItem(key),\n }\n : undefined\n\n/**\n * Persists form values to a storage adapter and restores them on mount.\n *\n * - On mount, reads `key` from `storage` and calls `reset` with the merged\n * stored + default values, so the form starts with any previously saved data.\n * - On every value change, writes the current form values to `storage` after a\n * `debounceMs` delay to avoid thrashing the storage layer.\n * - When `key` is `undefined`, persistence is entirely disabled.\n * - Falls back to `sessionStorage` when no custom `storage` adapter is provided.\n *\n * @returns An object with `clearPersistedData` — call this after a successful\n * submission to remove the persisted draft.\n */\nexport function useFormPersistence(options: {\n control: Control\n key: string | undefined\n debounceMs: number\n storage?: PersistStorage\n reset: (values: Record<string, unknown>) => void\n defaultValues: Record<string, unknown>\n}): { clearPersistedData: () => void } {\n const {\n control,\n key,\n debounceMs,\n storage: customStorage,\n reset,\n defaultValues,\n } = options\n const storage = customStorage ?? defaultStorage\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const restoredRef = useRef(false)\n\n // Restore persisted values on mount\n useEffect(() => {\n if (!key || !storage || restoredRef.current) return\n restoredRef.current = true\n try {\n const raw = storage.getItem(key)\n if (raw) {\n const parsed = JSON.parse(raw) as Record<string, unknown>\n reset({ ...defaultValues, ...parsed })\n }\n } catch {\n // Invalid data — ignore silently\n }\n }, [key, storage, reset, defaultValues])\n\n // Watch all values and persist on change\n const values = useWatch({ control })\n\n useEffect(() => {\n if (!key || !storage) return\n // Skip the initial render before restoration\n if (!restoredRef.current) return\n\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n try {\n storage.setItem(key, JSON.stringify(values))\n } catch {\n // Storage full or unavailable — fail silently\n }\n }, debounceMs)\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [key, storage, values, debounceMs])\n\n const clearPersistedData = useCallback(() => {\n if (!key || !storage) return\n try {\n storage.removeItem(key)\n } catch {\n // fail silently\n }\n }, [key, storage])\n\n return { clearPersistedData }\n}\n","import * as React from 'react'\n\n/**\n * A hook that returns a ref object with the latest value of the passed variable.\n * Useful for accessing the latest props/state inside async callbacks or effects\n * without adding them to dependency arrays.\n */\nexport function useLatestRef<T>(value: T) {\n const ref = React.useRef<T>(value)\n\n React.useLayoutEffect(() => {\n ref.current = value\n }, [value])\n\n return ref\n}\n","import type * as z from 'zod/v4/core'\nimport type {\n FieldConfig,\n FieldCondition,\n FieldMeta,\n FormMethods,\n FieldDependencyResult,\n} from '../types'\nimport type { UniForm, UniFormContext } from '../UniForm'\n\n/**\n * Recursively merges `overrides` (keyed by field name) into the `fields` tree,\n * applying each override to the matching field's `meta`. Descends into\n * `children` (object fields) and `itemConfig.children` (array-of-object fields).\n *\n * For array fields, keys prefixed with `\"<arrayFieldName>.\"` are stripped before\n * matching against item children, so `\"items.qty\"` targets every row's `qty` field.\n */\nexport function applyFieldOverrides(\n fields: FieldConfig[],\n overrides: Record<string, Partial<FieldMeta>>,\n): FieldConfig[] {\n return fields.map((field) => {\n const override = overrides[field.name]\n const updated = override\n ? { ...field, meta: { ...field.meta, ...override } }\n : field\n\n if (updated.type === 'object') {\n const newChildren = applyFieldOverrides(updated.children, overrides)\n if (newChildren !== updated.children)\n return { ...updated, children: newChildren }\n }\n\n if (updated.type === 'array' && updated.itemConfig.type === 'object') {\n const prefix = `${updated.name}.`\n const strippedOverrides: Record<string, Partial<FieldMeta>> = {}\n for (const [key, value] of Object.entries(overrides)) {\n if (key.startsWith(prefix))\n strippedOverrides[key.slice(prefix.length)] = value\n }\n const newItemChildren = applyFieldOverrides(\n updated.itemConfig.children,\n strippedOverrides,\n )\n if (newItemChildren !== updated.itemConfig.children) {\n return {\n ...updated,\n itemConfig: { ...updated.itemConfig, children: newItemChildren },\n }\n }\n }\n\n return updated\n })\n}\n\n/**\n * Injects UniForm onChange handlers into each field's `meta.onChange`, recursing\n * into object children and array itemConfig with prefix-stripping for array fields.\n */\nexport function injectOnChangeHandlers<TSchema extends z.$ZodObject>(\n fields: FieldConfig[],\n uniForm: UniForm<TSchema>,\n ctx: UniFormContext<TSchema>,\n handlerKeys: Set<string> = new Set(uniForm._getWatchedFields()),\n): FieldConfig[] {\n if (!handlerKeys.size) return fields\n\n return fields.map((field) => {\n let updated: FieldConfig = field\n\n if (handlerKeys.has(field.name)) {\n const existingOnChange = field.meta.onChange\n updated = {\n ...field,\n meta: {\n ...field.meta,\n onChange: (value: unknown, formMethods: FormMethods) => {\n void existingOnChange?.(value, formMethods)\n void uniForm._fireHandler(field.name, value, ctx)\n },\n },\n }\n }\n\n if (updated.type === 'object') {\n const newChildren = injectOnChangeHandlers(\n updated.children,\n uniForm,\n ctx,\n handlerKeys,\n )\n if (newChildren !== updated.children)\n updated = { ...updated, children: newChildren }\n } else if (updated.type === 'array') {\n const prefix = field.name + '.'\n const itemKeys = new Set<string>()\n for (const key of handlerKeys) {\n if (key.startsWith(prefix)) itemKeys.add(key.slice(prefix.length))\n }\n if (itemKeys.size) {\n const remappedUniForm = {\n _getWatchedFields: () => Array.from(itemKeys),\n _fireHandlers: (\n name: string,\n value: unknown,\n c: UniFormContext<TSchema>,\n ) => uniForm._fireHandler(`${field.name}.${name}`, value, c),\n } as unknown as UniForm<TSchema>\n const newItemConfig = injectOnChangeHandlers(\n [updated.itemConfig],\n remappedUniForm,\n ctx,\n itemKeys,\n )[0]\n if (newItemConfig !== updated.itemConfig)\n updated = { ...updated, itemConfig: newItemConfig }\n }\n }\n\n return updated\n })\n}\n\n/**\n * Injects UniForm conditions into field configs, recursing into object children\n * and array itemConfig with prefix-stripping for array fields.\n */\nexport function injectConditions(\n fields: FieldConfig[],\n conditions: Map<string, FieldCondition>,\n): FieldConfig[] {\n if (!conditions.size) return fields\n\n return fields.map((field) => {\n const condition = conditions.get(field.name)\n let updated: FieldConfig = condition\n ? { ...field, meta: { ...field.meta, condition } }\n : field\n\n if (updated.type === 'object') {\n const newChildren = injectConditions(updated.children, conditions)\n if (newChildren !== updated.children)\n updated = { ...updated, children: newChildren }\n } else if (updated.type === 'array') {\n const prefix = field.name + '.'\n const itemConditions = new Map<string, FieldCondition>()\n for (const [key, cond] of conditions) {\n if (key.startsWith(prefix))\n itemConditions.set(key.slice(prefix.length), cond)\n }\n if (itemConditions.size) {\n const newItemConfig = injectConditions(\n [updated.itemConfig],\n itemConditions,\n )[0]\n if (newItemConfig !== updated.itemConfig)\n updated = { ...updated, itemConfig: newItemConfig }\n }\n }\n\n return updated\n })\n}\n\n/**\n * Merges event-driven `dynamicMeta` overrides into the field configs.\n * Only fields with entries in `overrides` are cloned.\n */\nexport function applyDynamicMeta(\n fields: FieldConfig[],\n overrides: Record<string, Partial<FieldDependencyResult>>,\n): FieldConfig[] {\n if (!Object.keys(overrides).length) return fields\n return fields.map((field) => {\n const override = overrides[field.name]\n if (!override) return field\n const { options, label, ...metaOverrides } = override\n return {\n ...field,\n ...(label !== undefined ? { label } : {}),\n ...(options !== undefined ? { options } : {}),\n meta: { ...field.meta, ...metaOverrides },\n }\n })\n}\n\n/** Generate sensible empty defaults so RHF starts with '' instead of undefined */\nexport function buildDefaults(fields: FieldConfig[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const field of fields) {\n const key = field.name\n switch (field.type) {\n case 'string':\n result[key] = ''\n break\n case 'number':\n result[key] = ''\n break\n case 'boolean':\n result[key] = false\n break\n case 'select':\n result[key] = field.options?.[0]?.value ?? ''\n break\n case 'array':\n result[key] = []\n break\n case 'object':\n result[key] = {}\n break\n default:\n break\n }\n }\n return result\n}\n","import * as React from 'react'\nimport { useForm, useWatch, type Resolver } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type * as z from 'zod/v4/core'\nimport type {\n AutoFormProps,\n AutoFormHandle,\n FieldCondition,\n FieldMeta,\n FormMethods,\n FieldDependencyResult,\n ResolvedLayoutSlots,\n} from '../types'\nimport type { UniForm, UniFormContext } from '../UniForm'\nimport { introspectObjectSchema } from '../introspection/introspect'\nimport { parseDiscriminatedUnionMeta } from '../introspection/discriminatedUnion'\nimport { mergeRegistries } from '../registry/mergeRegistries'\nimport { defaultRegistry } from '../registry/defaultRegistry'\nimport { DefaultFieldWrapper } from './defaults/DefaultFieldWrapper'\nimport { DefaultSubmitButton } from './defaults/DefaultSubmitButton'\nimport { DefaultFormWrapper } from './defaults/DefaultFormWrapper'\nimport { DefaultSectionWrapper } from './defaults/DefaultSectionWrapper'\nimport { DefaultArrayRowLayout } from './defaults/DefaultArrayRowLayout'\nimport { DefaultArrayFieldLayout } from './defaults/DefaultArrayFieldLayout'\nimport { DefaultObjectWrapper } from './defaults/DefaultObjectWrapper'\nimport { DefaultArrayWrapper } from './defaults/DefaultArrayWrapper'\nimport { DefaultArrayButton } from './defaults/DefaultArrayButton'\nimport { DefaultArrayCollapseButton } from './defaults/DefaultArrayCollapseButton'\nimport { AutoFormContextProvider } from '../context/AutoFormContext'\nimport { FieldRenderer } from './FieldRenderer'\nimport { useConditionalFields } from '../hooks/useConditionalFields'\nimport { useSectionGrouping } from '../hooks/useSectionGrouping'\nimport { useFormPersistence } from '../hooks/useFormPersistence'\nimport { useLatestRef } from '../hooks/useLatestRef'\nimport {\n applyFieldOverrides,\n injectOnChangeHandlers,\n injectConditions,\n applyDynamicMeta,\n buildDefaults,\n} from '../utils/fieldPipeline'\n\n/**\n * The core auto-form component. Introspects the provided Zod `schema`,\n * renders the appropriate field components, validates on submit using\n * `zodResolver`, and calls `onSubmit` with the fully-typed, validated values.\n *\n * Supports: conditional fields, dynamic field meta via UniForm onChange\n * handlers, section grouping, form persistence, imperative handle via `ref`,\n * and full layout/component customisation.\n *\n * @template TSchema - A `ZodObject` schema that defines the form shape.\n *\n * @example\n * const myForm = new UniForm(z.object({ name: z.string(), age: z.number() }))\n *\n * <AutoForm form={myForm} onSubmit={(values) => console.log(values)} />\n */\nexport function AutoForm<TSchema extends z.$ZodObject>(\n props: AutoFormProps<TSchema> & {\n ref?: React.Ref<AutoFormHandle<TSchema>>\n },\n) {\n const {\n form: uniForm,\n onSubmit,\n defaultValues,\n components,\n fields: fieldOverridesProp = {},\n fieldWrapper,\n layout,\n classNames = {},\n disabled = false,\n coercions,\n messages,\n persistKey,\n persistDebounce = 300,\n persistStorage,\n onValuesChange,\n labels = {},\n ref,\n } = props\n\n const schema = uniForm.schema\n\n // For discriminated unions: extract static metadata once\n const unionInfo = React.useMemo(() => {\n const def = schema._zod.def as { type: string }\n if (def.type !== 'union') return null\n return parseDiscriminatedUnionMeta(\n schema as unknown as z.$ZodDiscriminatedUnion,\n )\n }, [schema])\n\n // Initial field list — for unions, use the first variant so buildDefaults has something\n const rawFields = React.useMemo(() => {\n if (!unionInfo) return introspectObjectSchema(schema)\n const firstVariantFields = introspectObjectSchema(\n unionInfo.firstVariant,\n ).filter((f) => f.name !== unionInfo.discriminatorKey)\n return [unionInfo.discriminatorField, ...firstVariantFields]\n }, [schema, unionInfo])\n\n const registry = React.useMemo(\n () => mergeRegistries(defaultRegistry, components),\n [components],\n )\n\n const generatedDefaults = React.useMemo(\n () => buildDefaults(rawFields),\n [rawFields],\n )\n\n const computedDefaults = React.useMemo(() => {\n const base: Record<string, unknown> = {\n ...generatedDefaults,\n ...(typeof defaultValues === 'function'\n ? {}\n : (defaultValues as Record<string, unknown>)),\n }\n\n // Collect all conditions: UniForm-registered takes precedence, fields-prop fills gaps\n const conditions = new Map<string, FieldCondition>(\n (uniForm as UniForm<TSchema>)._getConditions() as Map<\n string,\n FieldCondition\n >,\n )\n for (const [name, override] of Object.entries(\n fieldOverridesProp as Record<string, Partial<FieldMeta>>,\n )) {\n if (typeof override.condition === 'function' && !conditions.has(name)) {\n conditions.set(name, override.condition as FieldCondition)\n }\n }\n\n // Exclude fields whose condition starts false so they're never pre-registered\n // in the RHF store. Evaluated against `base` so fields that start visible\n // (condition true) still receive their default value.\n for (const [name, condition] of conditions) {\n if (!condition(base)) {\n delete base[name]\n }\n }\n\n return base\n }, [generatedDefaults, defaultValues, uniForm, fieldOverridesProp])\n\n // Async defaultValues: track whether we are still waiting for the loader\n const isAsyncDefaults = typeof defaultValues === 'function'\n const [isLoadingDefaults, setIsLoadingDefaults] =\n React.useState(isAsyncDefaults)\n\n const rhf = useForm({\n resolver: zodResolver(schema) as unknown as Resolver,\n defaultValues: computedDefaults,\n })\n\n const {\n control,\n formState,\n clearErrors,\n getValues,\n handleSubmit,\n reset,\n resetField,\n setValue,\n setError,\n setFocus,\n watch,\n } = rhf\n\n // For discriminated unions: watch the discriminator and swap to the matching variant's fields\n const discriminatorValue = useWatch({\n control,\n name: (unionInfo?.discriminatorKey ?? '') as never,\n disabled: !unionInfo?.discriminatorKey,\n })\n\n const activeFields = React.useMemo(() => {\n if (!unionInfo) return rawFields\n const variant = unionInfo.variantMap.get(\n discriminatorValue as unknown as string,\n )\n if (!variant) return [unionInfo.discriminatorField]\n const variantFields = introspectObjectSchema(variant).filter(\n (f) => f.name !== unionInfo.discriminatorKey,\n )\n return [unionInfo.discriminatorField, ...variantFields]\n }, [unionInfo, discriminatorValue, rawFields])\n\n const mergedFields = React.useMemo(\n () =>\n applyFieldOverrides(\n activeFields,\n fieldOverridesProp as Record<string, Partial<FieldMeta>>,\n ),\n [activeFields, fieldOverridesProp],\n )\n\n const { clearPersistedData } = useFormPersistence({\n control,\n key: persistKey,\n debounceMs: persistDebounce,\n storage: persistStorage,\n reset: rhf.reset as (values: Record<string, unknown>) => void,\n defaultValues: computedDefaults,\n })\n\n // Dynamic field meta — updated by setFieldMeta inside UniForm onChange handlers\n const [dynamicMeta, setDynamicMeta] = React.useState<\n Record<string, Partial<FieldDependencyResult>>\n >({})\n\n const onSubmitRef = useLatestRef(onSubmit)\n const onValuesChangeRef = useLatestRef(onValuesChange)\n const generatedDefaultsRef = useLatestRef(generatedDefaults)\n\n // Load async defaultValues once on mount\n React.useEffect(() => {\n if (!isAsyncDefaults) return\n let cancelled = false\n void (defaultValues as () => Promise<Partial<z.infer<TSchema>>>)().then(\n (vals) => {\n if (cancelled) return\n rhf.reset({ ...generatedDefaultsRef.current, ...vals })\n setIsLoadingDefaults(false)\n },\n )\n return () => {\n cancelled = true\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const formMethods = React.useMemo<FormMethods<z.infer<TSchema>>>(\n () => ({\n setValue: (name, value) =>\n setValue(name as string, value, {\n shouldValidate: true,\n shouldDirty: true,\n }),\n setValues: (values) => {\n for (const [key, val] of Object.entries(values)) {\n setValue(key, val, { shouldValidate: true, shouldDirty: true })\n }\n },\n getValues: () => getValues() as z.infer<TSchema>,\n resetField: (name) => resetField(name),\n reset: (values) => {\n if (values) {\n reset({ ...getValues(), ...values })\n } else {\n reset()\n }\n // Clear dynamic meta so overrides don't persist after a reset\n setDynamicMeta({})\n },\n setError: (name, message) => setError(name, { type: 'manual', message }),\n setErrors: (errors) => {\n for (const [key, message] of Object.entries(errors)) {\n setError(key, { type: 'manual', message: message as string })\n }\n },\n clearErrors: (names?) => clearErrors(names),\n submit: () => {\n void handleSubmit((values) =>\n onSubmitRef.current(values as z.infer<TSchema>),\n )()\n },\n focus: (fieldName) => setFocus(fieldName),\n watch: watch as FormMethods<z.infer<TSchema>>['watch'],\n }),\n [\n clearErrors,\n getValues,\n handleSubmit,\n reset,\n resetField,\n setValue,\n setError,\n setFocus,\n watch,\n onSubmitRef,\n ],\n )\n\n React.useImperativeHandle(ref, () => formMethods, [formMethods])\n\n // setFieldMeta: called synchronously inside UniForm onChange handlers.\n // Updates dynamicMeta state; use ctx.setValue() directly to set a field value.\n const setFieldMeta = React.useCallback(\n (field: string, meta: Partial<FieldDependencyResult>) => {\n if (Object.keys(meta).length) {\n setDynamicMeta((prev) => ({\n ...prev,\n [field]: { ...prev[field], ...meta },\n }))\n }\n },\n [],\n )\n\n // Build the UniForm context — stable when formMethods and setFieldMeta are stable\n const uniFormCtx = React.useMemo<UniFormContext<TSchema>>(\n () => ({ ...formMethods, setFieldMeta }),\n [formMethods, setFieldMeta],\n )\n\n // Inject UniForm handlers into field.meta.onChange so they fire as real event handlers\n const fieldsWithHandlers = React.useMemo(\n () =>\n injectOnChangeHandlers(\n mergedFields,\n uniForm as UniForm<TSchema>,\n uniFormCtx,\n ),\n [mergedFields, uniForm, uniFormCtx],\n )\n\n // Inject UniForm conditions into field.meta.condition\n const fieldsWithConditions = React.useMemo(\n () =>\n injectConditions(\n fieldsWithHandlers,\n (uniForm as UniForm<TSchema>)._getConditions() as Map<\n string,\n FieldCondition\n >,\n ),\n [fieldsWithHandlers, uniForm],\n )\n\n // Apply event-driven dynamic meta overrides (from setFieldMeta calls)\n const fieldsWithDynamic = React.useMemo(\n () => applyDynamicMeta(fieldsWithConditions, dynamicMeta),\n [fieldsWithConditions, dynamicMeta],\n )\n\n const allValues = useWatch({ control })\n\n React.useEffect(() => {\n onValuesChangeRef.current?.(allValues as z.infer<TSchema>)\n }, [onValuesChangeRef, allValues])\n\n const visibleFields = useConditionalFields(fieldsWithDynamic, control)\n const sections = useSectionGrouping(visibleFields)\n\n const resolvedLayout = React.useMemo((): ResolvedLayoutSlots => {\n const base = layout?.arrayButtons?.base ?? DefaultArrayButton\n const slots = layout?.arrayButtons\n return {\n formWrapper: layout?.formWrapper ?? DefaultFormWrapper,\n sectionWrapper: layout?.sectionWrapper ?? DefaultSectionWrapper,\n submitButton: layout?.submitButton ?? DefaultSubmitButton,\n arrayRowLayout: layout?.arrayRowLayout ?? DefaultArrayRowLayout,\n arrayFieldLayout: layout?.arrayFieldLayout ?? DefaultArrayFieldLayout,\n objectWrapper: layout?.objectWrapper ?? DefaultObjectWrapper,\n arrayWrapper: layout?.arrayWrapper ?? DefaultArrayWrapper,\n arrayButtons: {\n base,\n add: slots?.add ?? base,\n remove: slots?.remove ?? base,\n moveUp: slots?.moveUp ?? base,\n moveDown: slots?.moveDown ?? base,\n duplicate: slots?.duplicate ?? base,\n collapse: slots?.collapse ?? DefaultArrayCollapseButton,\n },\n loadingFallback: layout?.loadingFallback ?? <p>Loading…</p>,\n }\n }, [\n layout?.formWrapper,\n layout?.sectionWrapper,\n layout?.submitButton,\n layout?.arrayRowLayout,\n layout?.arrayFieldLayout,\n layout?.objectWrapper,\n layout?.arrayWrapper,\n layout?.arrayButtons,\n layout?.loadingFallback,\n ])\n\n const resolvedFieldWrapper = fieldWrapper ?? DefaultFieldWrapper\n\n const FormWrapper = resolvedLayout.formWrapper\n const SectionWrapper = resolvedLayout.sectionWrapper\n const SubmitButton = resolvedLayout.submitButton\n\n const contextValue = React.useMemo(\n () => ({\n registry,\n fieldOverrides: fieldOverridesProp,\n fieldWrapper: resolvedFieldWrapper,\n layout: resolvedLayout,\n classNames,\n disabled,\n coercions,\n messages,\n labels,\n formMethods: formMethods as unknown as FormMethods,\n }),\n [\n registry,\n fieldOverridesProp,\n resolvedFieldWrapper,\n resolvedLayout,\n classNames,\n disabled,\n coercions,\n messages,\n labels,\n formMethods,\n ],\n )\n\n // While async defaultValues are still loading, render the fallback\n if (isLoadingDefaults) {\n return <>{resolvedLayout.loadingFallback}</>\n }\n\n return (\n <AutoFormContextProvider value={contextValue}>\n <form\n noValidate\n className={classNames.form}\n onSubmit={(e) => {\n void handleSubmit(async (values) => {\n await onSubmit(values as z.infer<TSchema>)\n clearPersistedData()\n })(e)\n }}\n >\n <FormWrapper>\n {sections.map((section) => {\n const renderedFields = section.fields.map((field, idx) => (\n <FieldRenderer\n key={field.name}\n field={field}\n control={control}\n index={idx}\n depth={0}\n />\n ))\n\n if (section.title === null) {\n return (\n <React.Fragment key='__ungrouped'>\n {renderedFields}\n </React.Fragment>\n )\n }\n\n const sectionConfig = layout?.sections?.[section.title]\n const PerSectionWrapper = sectionConfig?.component ?? SectionWrapper\n\n return (\n <PerSectionWrapper\n key={section.title}\n title={section.title}\n className={sectionConfig?.className}\n >\n {renderedFields}\n </PerSectionWrapper>\n )\n })}\n <SubmitButton\n isSubmitting={formState.isSubmitting}\n label={labels.submit ?? 'Submit'}\n />\n </FormWrapper>\n </form>\n </AutoFormContextProvider>\n )\n}\n","import * as React from 'react'\nimport type * as z from 'zod/v4/core'\nimport type {\n AutoFormConfig,\n AutoFormProps,\n AutoFormHandle,\n FormLabels,\n} from '../types'\nimport { AutoForm } from '../components/AutoForm'\nimport { mergeRegistries } from '../registry/mergeRegistries'\n\n/**\n * Factory that creates a pre-configured `<AutoForm>` component with a fixed\n * set of defaults baked in.\n *\n * All options passed to `createAutoForm` become the baseline for every form\n * instance produced by the returned component. Any prop passed directly to the\n * returned component is **deep-merged** on top of those defaults (instance\n * props win on conflicts).\n *\n * Merged items: `components`, `layout`, `classNames`, `coercions`, `messages`.\n * Replaced items: `fieldWrapper`, `disabled` (OR-ed with the factory default).\n *\n * @param config - Factory-level defaults applied to every form instance.\n * @returns A `<AutoForm>`-compatible component with the provided defaults applied.\n *\n * @example\n * const AutoForm = createAutoForm({\n * components: { string: MyTextInput },\n * classNames: { form: 'my-form' },\n * })\n *\n * // Later:\n * <AutoForm form={myUniForm} onSubmit={handleSubmit} />\n */\nexport function createAutoForm(config: AutoFormConfig) {\n function ConfiguredAutoForm<TSchema extends z.$ZodObject>(\n props: AutoFormProps<TSchema> & {\n ref?: React.Ref<AutoFormHandle<TSchema>>\n },\n ) {\n const mergedComponents = React.useMemo(\n () => mergeRegistries(config.components ?? {}, props.components),\n [props.components],\n )\n\n const mergedLayout = React.useMemo(\n () => ({\n ...config.layout,\n ...props.layout,\n sections:\n config.layout?.sections || props.layout?.sections\n ? { ...config.layout?.sections, ...props.layout?.sections }\n : undefined,\n }),\n [props.layout],\n )\n\n const mergedClassNames = React.useMemo(\n () => ({ ...config.classNames, ...props.classNames }),\n [props.classNames],\n )\n\n const mergedCoercions = React.useMemo(\n () =>\n props.coercions || config.coercions\n ? { ...config.coercions, ...props.coercions }\n : undefined,\n [props.coercions],\n )\n\n const mergedMessages = React.useMemo(\n () =>\n props.messages || config.messages\n ? { ...config.messages, ...props.messages }\n : undefined,\n [props.messages],\n )\n\n const mergedLabels = React.useMemo<FormLabels | undefined>(\n () =>\n props.labels || config.labels\n ? { ...config.labels, ...props.labels }\n : undefined,\n [props.labels],\n )\n\n return (\n <AutoForm\n {...props}\n ref={props.ref}\n components={mergedComponents}\n fieldWrapper={props.fieldWrapper ?? config.fieldWrapper}\n layout={mergedLayout}\n classNames={mergedClassNames}\n disabled={props.disabled || config.disabled || false}\n coercions={mergedCoercions}\n messages={mergedMessages}\n labels={mergedLabels ?? {}}\n />\n )\n }\n\n ConfiguredAutoForm.displayName = 'AutoForm(configured)'\n return ConfiguredAutoForm\n}\n","import type * as z from 'zod/v4/core'\nimport type {\n DeepKeys,\n DeepFieldValue,\n FormMethods,\n FieldDependencyResult,\n} from './types'\n\n/**\n * Context passed to UniForm `setOnChange` handlers. Extends `FormMethods` with\n * `setFieldMeta`, which lets handlers dynamically override per-field UI\n * properties (hidden, disabled, options, label, etc.).\n *\n * @template TSchema - The Zod object schema that defines the form shape.\n */\nexport type UniFormContext<TSchema extends z.$ZodObject = z.$ZodObject> =\n FormMethods<z.infer<TSchema>> & {\n /**\n * Dynamically override per-field UI metadata from inside a setOnChange handler.\n * Changes are applied synchronously and trigger a re-render.\n *\n * Meta keys are stored and merged into the rendered field config.\n */\n setFieldMeta: <K extends DeepKeys<z.infer<TSchema>>>(\n field: K,\n meta: Partial<FieldDependencyResult>,\n ) => void\n }\n\ntype Handler<TSchema extends z.$ZodObject, TValue> = (\n value: TValue,\n ctx: UniFormContext<TSchema>,\n) => void | Promise<void>\n\ntype Condition<TSchema extends z.$ZodObject> = (\n values: z.infer<TSchema>,\n) => boolean\n\n/**\n * A type-safe form definition that lives outside React components.\n * Wraps a Zod schema and lets you attach typed `setOnChange` callbacks that fire\n * whenever a specific field's value changes.\n *\n * Callbacks receive the new field value (typed to the schema) and a\n * `UniFormContext` that provides all standard form methods plus `setFieldMeta`\n * for dynamic field overrides.\n *\n * @template TSchema - The Zod object schema that defines the form shape.\n * @template TRegistered - Union of field keys that already have a `setOnChange`\n * handler registered. Attempting to call `setOnChange` for a key in this set\n * produces a compile-time error, preventing silent handler replacement.\n *\n * @example\n * const addressForm = new UniForm(addressSchema)\n * .setOnChange('country', (value, ctx) => {\n * ctx.setFieldMeta('state', { hidden: value !== 'US' })\n * })\n *\n * // In component:\n * <AutoForm form={addressForm} onSubmit={handleSubmit} />\n */\nexport class UniForm<\n TSchema extends z.$ZodObject,\n TRegistered extends string = never,\n> {\n readonly schema: TSchema\n private readonly _handlers: Map<string, Handler<TSchema, unknown>>\n private readonly _conditions: Map<string, Condition<TSchema>>\n\n constructor(schema: TSchema) {\n this.schema = schema\n this._handlers = new Map()\n this._conditions = new Map()\n }\n\n /**\n * Set the typed onChange handler for a specific field.\n * Replaces any previously registered handler for that field — only one\n * handler per field is kept. This prevents accidental handler accumulation\n * when called inside a React render cycle.\n * Returns `this` for fluent chaining.\n */\n setOnChange<K extends Exclude<DeepKeys<z.infer<TSchema>>, TRegistered>>(\n field: K,\n handler: Handler<TSchema, DeepFieldValue<z.infer<TSchema>, K>>,\n ): UniForm<TSchema, TRegistered | K> {\n this._handlers.set(field, handler as Handler<TSchema, unknown>)\n return this as unknown as UniForm<TSchema, TRegistered | K>\n }\n\n /**\n * Attach a typed condition for a specific field.\n * The field is shown when the predicate returns `true`, hidden when `false`.\n * Composes with any `condition` set via the `fields` prop (UniForm takes precedence).\n * Returns `this` for fluent chaining.\n */\n setCondition<K extends DeepKeys<z.infer<TSchema>>>(\n field: K,\n predicate: Condition<TSchema>,\n ): this {\n this._conditions.set(field, predicate)\n return this\n }\n\n /** @internal Called by AutoForm to fire the handler registered for a field. */\n _fireHandler(\n field: string,\n value: unknown,\n ctx: UniFormContext<TSchema>,\n ): void | Promise<void> {\n return this._handlers.get(field)?.(value, ctx)\n }\n\n /** @internal Returns all field names that have registered onChange handlers. */\n _getWatchedFields(): string[] {\n return Array.from(this._handlers.keys())\n }\n\n /** @internal Returns a copy of the conditions map for AutoForm to inject into field meta. */\n _getConditions(): Map<string, Condition<TSchema>> {\n return new Map(this._conditions)\n }\n}\n\n/**\n * Creates a new `UniForm` instance for the given Zod object schema.\n */\nexport function createForm<TSchema extends z.$ZodObject>(\n schema: TSchema,\n): UniForm<TSchema>\n\n/**\n * Creates a `UniForm` directly from a `z.discriminatedUnion` schema.\n *\n * `AutoForm` automatically flattens the variant fields and attaches show/hide\n * conditions based on the discriminator value — no manual `.condition()` calls\n * needed. The union schema is used by `zodResolver` for strict per-variant\n * validation on submit.\n *\n * @example\n * const notificationForm = createForm(\n * z.discriminatedUnion('channel', [\n * z.object({ channel: z.literal('email'), email: z.string().email() }),\n * z.object({ channel: z.literal('sms'), phone: z.string() }),\n * ])\n * )\n */\nexport function createForm(\n schema: z.$ZodDiscriminatedUnion,\n): UniForm<z.$ZodObject>\n\nexport function createForm(\n schema: z.$ZodObject | z.$ZodDiscriminatedUnion,\n): UniForm<z.$ZodObject> {\n return new UniForm(schema as unknown as z.$ZodObject)\n}\n"]}
1
+ {"version":3,"sources":["../src/introspection/deriveLabel.ts","../src/introspection/unwrap.ts","../src/introspection/introspect.ts","../src/introspection/discriminatedUnion.ts","../src/registry/mergeRegistries.ts","../src/components/defaults/DefaultInput.tsx","../src/components/defaults/DefaultCheckbox.tsx","../src/components/defaults/DefaultSelect.tsx","../src/registry/defaultRegistry.ts","../src/context/AutoFormContext.tsx","../src/components/defaults/DefaultFieldWrapper.tsx","../src/components/defaults/DefaultSubmitButton.tsx","../src/components/defaults/DefaultFormWrapper.tsx","../src/components/defaults/DefaultSectionWrapper.tsx","../src/components/defaults/DefaultArrayRowLayout.tsx","../src/components/defaults/DefaultArrayFieldLayout.tsx","../src/components/defaults/DefaultObjectWrapper.tsx","../src/components/defaults/DefaultArrayWrapper.tsx","../src/components/defaults/DefaultArrayButton.tsx","../src/components/defaults/DefaultArrayCollapseButton.tsx","../src/utils/resolveErrorMessage.ts","../src/components/resolveComponent.ts","../src/coercion/coerce.ts","../src/components/fields/ScalarField.tsx","../src/components/fields/BooleanField.tsx","../src/components/fields/SelectField.tsx","../src/components/fields/ObjectField.tsx","../src/components/fields/getDefaultValue.ts","../src/components/fields/ArrayField.tsx","../src/components/FieldRenderer.tsx","../src/hooks/useConditionalFields.ts","../src/hooks/useSectionGrouping.ts","../src/hooks/useFormPersistence.ts","../src/hooks/useLatestRef.ts","../src/utils/fieldPipeline.ts","../src/components/AutoForm.tsx","../src/factory/createAutoForm.tsx","../src/UniForm.ts"],"names":["z","jsx","React","jsxs","Fragment","Controller","useFieldArray","useState","useWatch","useMemo","useFormState","useRef","useEffect","useCallback","React2","React3","useForm","zodResolver","React4"],"mappings":"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","file":"index.js","sourcesContent":["// ---------------------------------------------------------------------------\n// Label derivation\n// ---------------------------------------------------------------------------\n\n/**\n * Derives a human-readable label from a field name or dot-notated path.\n *\n * Rules applied (in order):\n * 1. Only the last segment of a dot-notated path is used (e.g. `\"address.streetName\"` → `\"streetName\"`).\n * 2. `camelCase` is split on word boundaries (e.g. `\"streetName\"` → `\"Street Name\"`).\n * 3. Underscores and hyphens are replaced with spaces (e.g. `\"first_name\"` → `\"First Name\"`).\n * 4. Each word is title-cased.\n *\n * @param name - The raw field name or dot-notated path.\n * @returns A title-cased, human-readable label string.\n *\n * @example\n * deriveLabel('firstName') // → 'First Name'\n * deriveLabel('address.zipCode') // → 'Zip Code'\n * deriveLabel('phone_number') // → 'Phone Number'\n */\nexport function deriveLabel(name: string): string {\n // Use only the last segment of a dot-notated path\n const segment = name.split('.').pop() ?? name\n if (!segment) return ''\n\n return segment\n .replace(/([a-z])([A-Z])/g, '$1 $2') // split camelCase\n .replace(/[_-]+/g, ' ') // replace underscores/hyphens with spaces\n .split(' ')\n .filter(Boolean)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ')\n}\n","import * as z from 'zod/v4/core'\nimport type { FieldMeta } from '../types'\n\n// ---------------------------------------------------------------------------\n// Meta extraction — reads from z.globalRegistry (Zod v4)\n// ---------------------------------------------------------------------------\n\n/**\n * Reads UI metadata registered against a Zod schema via the Zod v4 global\n * registry (i.e. `.register(z.globalRegistry, { label: '...' })`).\n *\n * Returns an empty object when no metadata has been registered.\n *\n * @param schema - The Zod schema to read metadata from.\n */\nexport function extractMeta(schema: z.$ZodType): FieldMeta {\n return (z.globalRegistry.get(schema) as FieldMeta | undefined) ?? {}\n}\n\n// ---------------------------------------------------------------------------\n// Unwrap transparent wrappers\n// - optional / nullable / default / prefault: use def.innerType\n// - pipe (from .transform()): use def.in (the source schema)\n// ---------------------------------------------------------------------------\n\nexport type UnwrapResult = {\n schema: z.$ZodType\n required: boolean\n meta: FieldMeta\n}\n\nconst WRAPPER_KINDS = new Set([\n 'optional',\n 'nullable',\n 'default',\n 'prefault',\n 'pipe', // ZodPipe — .transform() returns ZodPipe<Source, ZodTransform>\n])\n\n/**\n * Recursively strips transparent Zod wrapper types (`optional`, `nullable`,\n * `default`, `prefault`, `pipe`) from a schema, collecting metadata and\n * requiredness along the way.\n *\n * Metadata is merged so that outer wrappers take precedence over inner ones\n * (e.g. meta attached to the `optional()` call overrides meta on the inner\n * type).\n *\n * @param schema - The Zod schema to unwrap.\n * @returns The innermost non-wrapper schema together with its resolved\n * `required` flag and merged `meta`.\n */\nexport function unwrap(schema: z.$ZodType): UnwrapResult {\n let inner = schema\n let required = true\n let meta: FieldMeta = extractMeta(inner)\n\n let kind = inner._zod.def.type\n\n while (WRAPPER_KINDS.has(kind)) {\n if (kind === 'optional' || kind === 'nullable') {\n required = false\n }\n\n if (kind === 'pipe') {\n // ZodPipe: def.in is the source schema, def.out is ZodTransform\n inner = (inner._zod.def as z.$ZodPipeDef).in\n } else {\n // optional / nullable / default / prefault\n inner = (\n inner._zod.def as\n | z.$ZodOptionalDef\n | z.$ZodNullableDef\n | z.$ZodDefaultDef\n | z.$ZodPrefaultDef\n ).innerType\n }\n\n meta = { ...extractMeta(inner), ...meta } // outer meta takes precedence\n kind = inner._zod.def.type\n }\n\n return { schema: inner, required, meta }\n}\n","import * as z from 'zod/v4/core'\nimport type { FieldConfig, FieldMeta, FieldType, SelectOption } from '../types'\nimport { deriveLabel } from './deriveLabel'\nimport { unwrap } from './unwrap'\n\n// ---------------------------------------------------------------------------\n// Main introspection function\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively introspects a Zod schema and returns a {@link FieldConfig}\n * describing the field's type, label, validation constraints, and UI metadata.\n *\n * Transparent wrappers (`optional`, `nullable`, `default`, `pipe`) are\n * unwrapped before inspection. Unknown/unsupported types fall back to\n * `type: 'unknown'` rather than throwing.\n *\n * @param schema - The Zod schema to introspect.\n * @param name - The field key within its parent object (used for label derivation).\n * @param parentPath - The dot-notated path of the parent (used to build `field.name`).\n */\nexport function introspectSchema(\n schema: z.$ZodType,\n name: string = '',\n parentPath: string = '',\n): FieldConfig {\n const path = parentPath && name ? `${parentPath}.${name}` : name || parentPath\n\n const { schema: unwrappedSchema, required, meta } = unwrap(schema)\n const inner = unwrappedSchema as z.$ZodTypes\n const def = inner._zod.def\n const kind = def.type\n const mergedMeta: FieldMeta = { ...meta }\n\n const label =\n typeof mergedMeta.label === 'string' ? mergedMeta.label : deriveLabel(name)\n\n let type: FieldType = 'unknown'\n let options: SelectOption[] | undefined\n let children: FieldConfig[] | undefined\n let itemConfig: FieldConfig | undefined\n let unionVariants: FieldConfig[] | undefined\n let discriminatorKey: string | undefined\n let minItems: number | undefined\n let maxItems: number | undefined\n\n // Never throw — unknown types gracefully return 'unknown'\n try {\n if (kind === 'string') {\n // If meta declares a select component with options, treat the field as a select\n if (\n mergedMeta.component === 'select' &&\n Array.isArray(mergedMeta.options) &&\n mergedMeta.options.length > 0\n ) {\n type = 'select'\n options = mergedMeta.options\n } else {\n type = 'string'\n // Handle standalone format schemas: z.email(), z.url(), z.uuid()\n // These are ZodStringFormat types with def.format set directly.\n const defFormat = (def as z.$ZodStringFormatDef).format as\n | string\n | undefined\n if (defFormat === 'email') {\n mergedMeta['inputType'] = 'email'\n } else if (defFormat === 'url') {\n mergedMeta['inputType'] = 'url'\n } else if (defFormat === 'uuid') {\n mergedMeta['inputType'] = 'uuid'\n } else {\n // Handle chained format checks: z.string().email() etc.\n // v4 check shape: { check: 'string_format', format: 'email' | 'url' | 'uuid' | ... }\n const checks = def.checks ?? []\n const hasFormat = (fmt: string) =>\n checks.some(\n (c) =>\n c._zod.def.check === 'string_format' &&\n (c._zod.def as z.$ZodCheckStringFormatDef).format === fmt,\n )\n if (hasFormat('email')) {\n mergedMeta['inputType'] = 'email'\n } else if (hasFormat('url')) {\n mergedMeta['inputType'] = 'url'\n } else if (hasFormat('uuid')) {\n mergedMeta['inputType'] = 'uuid'\n }\n }\n }\n } else if (kind === 'number') {\n type = 'number'\n mergedMeta['inputType'] = 'number'\n } else if (kind === 'boolean') {\n type = 'boolean'\n } else if (kind === 'date') {\n type = 'date'\n mergedMeta['inputType'] = 'date'\n } else if (kind === 'enum') {\n // v4: both z.enum() and z.nativeEnum() use type === 'enum' with def.entries\n type = 'select'\n options = Object.entries(def.entries)\n .filter(([key]) => isNaN(Number(key)))\n .map(([key, value]) => ({\n label:\n typeof value === 'string'\n ? value.charAt(0).toUpperCase() + value.slice(1).toLowerCase()\n : key.charAt(0).toUpperCase() + key.slice(1).toLowerCase(),\n value,\n }))\n } else if (kind === 'object') {\n type = 'object'\n children = Object.entries(def.shape).map(([key, fieldSchema]) =>\n introspectSchema(fieldSchema, key, path),\n )\n } else if (kind === 'array') {\n type = 'array'\n const elementSchema = def.element\n itemConfig = introspectSchema(elementSchema, '', '')\n // Extract min/max from array checks\n const checks = def.checks ?? []\n for (const check of checks) {\n const checkDef = check._zod.def as unknown as Record<string, unknown>\n if (\n checkDef.check === 'min_length' &&\n typeof checkDef.minimum === 'number'\n ) {\n minItems = checkDef.minimum\n }\n if (\n checkDef.check === 'max_length' &&\n typeof checkDef.maximum === 'number'\n ) {\n maxItems = checkDef.maximum\n }\n }\n } else if (def.type === 'union') {\n const unionDef = def as z.$ZodDiscriminatedUnionDef | z.$ZodUnionDef\n const variants = unionDef.options as z.$ZodAny[]\n\n if ('discriminator' in unionDef) {\n // Discriminated union — keep full union treatment\n type = 'union'\n discriminatorKey = unionDef.discriminator\n unionVariants = variants.map((variant, i) =>\n introspectSchema(variant, String(i), path),\n )\n } else {\n // Plain union (z.or()) — collapse to the first variant.\n // The original schema is preserved on `schema` for custom components.\n const collapsed = introspectSchema(variants[0], name, parentPath)\n return {\n ...collapsed,\n name: path,\n label,\n meta: { ...collapsed.meta, ...mergedMeta },\n schema: inner,\n } as FieldConfig\n }\n }\n } catch {\n type = 'unknown'\n }\n\n return {\n name: path,\n type,\n label,\n required,\n meta: mergedMeta,\n schema: inner,\n ...(options !== undefined && { options }),\n ...(children !== undefined && { children }),\n ...(itemConfig !== undefined && { itemConfig }),\n ...(unionVariants !== undefined && { unionVariants }),\n ...(discriminatorKey !== undefined && { discriminatorKey }),\n ...(minItems !== undefined && { minItems }),\n ...(maxItems !== undefined && { maxItems }),\n } as FieldConfig\n}\n\n// ---------------------------------------------------------------------------\n// Convenience wrapper for top-level ZodObject schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Introspects all fields of a top-level `ZodObject` schema and returns an\n * ordered array of {@link FieldConfig} objects, one per key in `schema.shape`.\n *\n * This is the entry point used by `<AutoForm>` to derive the field list from\n * the provided schema.\n *\n * @param schema - The top-level `ZodObject` schema to introspect.\n */\nexport function introspectObjectSchema(schema: z.$ZodObject): FieldConfig[] {\n return Object.entries(schema._zod.def.shape).map(([key, fieldSchema]) =>\n introspectSchema(fieldSchema, key, ''),\n )\n}\n","import * as z from 'zod/v4/core'\nimport type { FieldConfig, SelectOption } from '../types'\nimport { deriveLabel } from './deriveLabel'\nimport { introspectSchema } from './introspect'\n\n// ---------------------------------------------------------------------------\n// Discriminated union metadata helper (used by AutoForm for variant-swap)\n// ---------------------------------------------------------------------------\n\n/**\n * Extracts static metadata from a `ZodDiscriminatedUnion` schema:\n * the discriminator key, a map of discriminator-value → variant ZodObject,\n * and a pre-built `FieldConfig` for the discriminator select field.\n *\n * Used by `AutoForm` to reactively swap variant fields without flattening.\n */\nexport function parseDiscriminatedUnionMeta(schema: z.$ZodDiscriminatedUnion): {\n discriminatorKey: string\n variantMap: Map<string, z.$ZodObject>\n discriminatorField: FieldConfig\n firstVariant: z.$ZodObject\n} {\n const def = schema._zod.def\n const discriminatorKey = def.discriminator\n const variants = def.options as z.$ZodObject[]\n\n const variantMap = new Map<string, z.$ZodObject>()\n const discriminatorOptions: SelectOption[] = []\n\n for (const variant of variants) {\n const shape = variant._zod.def.shape as Record<string, z.$ZodAny>\n const litDef = (shape[discriminatorKey] as unknown as z.$ZodLiteral)._zod\n .def as { values: unknown[] }\n const value = String(litDef.values[0])\n variantMap.set(value, variant)\n discriminatorOptions.push({\n label: value.charAt(0).toUpperCase() + value.slice(1),\n value,\n })\n }\n\n const discriminatorField: FieldConfig = {\n name: discriminatorKey,\n type: 'select',\n label: deriveLabel(discriminatorKey),\n required: true,\n meta: {},\n schema,\n options: discriminatorOptions,\n }\n\n return {\n discriminatorKey,\n variantMap,\n discriminatorField,\n firstVariant: variants[0],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Convenience wrapper for top-level ZodDiscriminatedUnion schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Flattens a `ZodDiscriminatedUnion` into a `FieldConfig[]` suitable for\n * `<AutoForm>`. The discriminator becomes a `select` field; each variant's\n * fields are included once (first-variant wins for duplicates) with a\n * `meta.condition` that shows them only when the discriminator matches their\n * variant's literal value.\n *\n * @param schema - The top-level discriminated union schema to introspect.\n */\nexport function introspectDiscriminatedUnionSchema(\n schema: z.$ZodDiscriminatedUnion,\n): FieldConfig[] {\n const def = schema._zod.def\n const discriminatorKey = def.discriminator\n const variants = def.options as z.$ZodObject[]\n\n // Build discriminator as a select field\n const discriminatorOptions: SelectOption[] = []\n for (const variant of variants) {\n const shape = variant._zod.def.shape as Record<string, z.$ZodAny>\n const litDef = (shape[discriminatorKey] as unknown as z.$ZodLiteral)._zod\n .def as { values: unknown[] }\n const value = String(litDef.values[0])\n discriminatorOptions.push({\n label: value.charAt(0).toUpperCase() + value.slice(1),\n value,\n })\n }\n\n const discriminatorField: FieldConfig = {\n name: discriminatorKey,\n type: 'select',\n label: deriveLabel(discriminatorKey),\n required: true,\n meta: {},\n schema,\n options: discriminatorOptions,\n }\n\n // Collect variant-specific fields with auto-conditions\n const fields: FieldConfig[] = [discriminatorField]\n const seen = new Set<string>([discriminatorKey])\n\n for (const variant of variants) {\n const shape = variant._zod.def.shape as Record<string, z.$ZodAny>\n const literalDef = (shape[discriminatorKey] as unknown as z.$ZodLiteral)\n ._zod.def as { values: unknown[] }\n const discriminatorValue = String(literalDef.values[0])\n\n for (const [key, fieldSchema] of Object.entries(shape)) {\n if (seen.has(key)) continue\n seen.add(key)\n\n const base = introspectSchema(fieldSchema, key, '')\n fields.push({\n ...base,\n meta: {\n ...base.meta,\n condition: (values: Record<string, unknown>) =>\n values[discriminatorKey] === discriminatorValue,\n },\n })\n }\n }\n\n return fields\n}\n","import type { ComponentRegistry } from '../types'\n\n/**\n * Merges two {@link ComponentRegistry} objects, with `overrides` taking\n * precedence over `base` for any keys that appear in both.\n *\n * Returns `base` unchanged when `overrides` is `undefined`.\n *\n * @param base - The default registry (typically the factory-level registry).\n * @param overrides - Optional per-instance registry to merge on top.\n */\nexport function mergeRegistries(\n base: ComponentRegistry,\n overrides?: ComponentRegistry,\n): ComponentRegistry {\n if (!overrides) return base\n return { ...base, ...overrides }\n}\n","import * as React from 'react'\nimport type { FieldProps } from '../../types'\n\nfunction resolveInputType(props: FieldProps): React.HTMLInputTypeAttribute {\n const metaType = props.meta.inputType\n if (typeof metaType === 'string') return metaType\n if (props.meta.component === 'date') return 'date'\n return 'text'\n}\n\nfunction formatValue(value: unknown): string {\n if (value instanceof Date) {\n if (isNaN(value.getTime())) return ''\n return value.toISOString().split('T')[0]\n }\n if (value === null || value === undefined) return ''\n return String(value as string | number | boolean)\n}\n\nexport function DefaultInput(props: FieldProps) {\n const { name, value, onChange, onBlur, ref, required, disabled, meta } = props\n const inputType = resolveInputType(props)\n\n return (\n <input\n id={name}\n name={name}\n type={inputType}\n value={formatValue(value)}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n ref={ref}\n required={required}\n disabled={disabled}\n aria-required={required}\n aria-disabled={disabled}\n placeholder={meta.placeholder}\n data-input-type={inputType}\n data-required={required || undefined}\n data-disabled={disabled || undefined}\n />\n )\n}\n","import type { FieldProps } from '../../types'\n\nexport function DefaultCheckbox(props: FieldProps) {\n const { name, value, onChange, onBlur, ref, required, disabled, label } =\n props\n const checked = Boolean(value)\n\n return (\n <label htmlFor={name} data-disabled={disabled || undefined}>\n <input\n id={name}\n name={name}\n type='checkbox'\n checked={checked}\n onChange={(e) => onChange(e.target.checked)}\n onBlur={onBlur}\n ref={ref}\n required={required}\n disabled={disabled}\n aria-required={required}\n aria-disabled={disabled}\n data-required={required || undefined}\n data-disabled={disabled || undefined}\n data-checked={checked || undefined}\n />\n {label}\n </label>\n )\n}\n","import type { FieldProps } from '../../types'\n\nexport function DefaultSelect(props: FieldProps) {\n const {\n name,\n value,\n onChange,\n onBlur,\n ref,\n required,\n disabled,\n options = [],\n } = props\n\n return (\n <select\n id={name}\n name={name}\n value={String((value ?? '') as string | number)}\n onChange={(e) => onChange(e.target.value)}\n onBlur={onBlur}\n ref={ref}\n required={required}\n disabled={disabled}\n aria-required={required}\n aria-disabled={disabled}\n data-required={required || undefined}\n data-disabled={disabled || undefined}\n >\n {options.map((opt) => (\n <option key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n}\n","import type { ComponentRegistry } from '../types'\nimport { DefaultInput } from '../components/defaults/DefaultInput'\nimport { DefaultCheckbox } from '../components/defaults/DefaultCheckbox'\nimport { DefaultSelect } from '../components/defaults/DefaultSelect'\n\nexport const defaultRegistry: ComponentRegistry = {\n string: DefaultInput,\n number: DefaultInput,\n date: DefaultInput,\n boolean: DefaultCheckbox,\n select: DefaultSelect,\n}\n","import * as React from 'react'\nimport type {\n CoercionMap,\n ComponentRegistry,\n FieldWrapperProps,\n ResolvedLayoutSlots,\n FormClassNames,\n ValidationMessages,\n FormLabels,\n FormMethods,\n} from '../types'\n\nexport type AutoFormContextValue = {\n registry: ComponentRegistry\n fieldOverrides: Record<string, unknown>\n fieldWrapper: React.ComponentType<FieldWrapperProps>\n layout: ResolvedLayoutSlots\n classNames: FormClassNames\n disabled: boolean\n coercions?: CoercionMap\n messages?: ValidationMessages\n labels: FormLabels\n formMethods: FormMethods\n}\n\nconst AutoFormContext = React.createContext<AutoFormContextValue | null>(null)\n\nexport function useAutoFormContext(): AutoFormContextValue {\n const ctx = React.useContext(AutoFormContext)\n if (!ctx) {\n throw new Error(\n '[UniForm] useAutoFormContext must be used inside an <AutoForm> component.',\n )\n }\n return ctx\n}\n\nexport const AutoFormContextProvider = AutoFormContext.Provider\n","import type * as React from 'react'\nimport type { FieldWrapperProps } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\n\nexport function DefaultFieldWrapper({\n children,\n field,\n error,\n span,\n index = 0,\n depth = 0,\n}: FieldWrapperProps) {\n const { classNames, disabled: contextDisabled } = useAutoFormContext()\n\n const isDisabled = field.meta.disabled || contextDisabled\n const hasError = Boolean(error)\n const hasDescription = Boolean(field.meta.description)\n\n return (\n <div\n className={classNames.fieldWrapper}\n style={\n {\n '--field-span': span ?? field.meta.span ?? 1,\n '--field-index': index,\n '--field-depth': depth,\n } as React.CSSProperties\n }\n data-field-name={field.name}\n data-field-type={field.type}\n data-required={field.required || undefined}\n data-disabled={isDisabled || undefined}\n data-has-error={hasError || undefined}\n data-has-description={hasDescription || undefined}\n >\n <label htmlFor={field.name} className={classNames.label}>\n {field.label}\n {field.required && ' *'}\n </label>\n {children}\n {hasDescription && (\n <p className={classNames.description}>\n {String(field.meta.description)}\n </p>\n )}\n {error && (\n <span role='alert' className={classNames.error}>\n {error}\n </span>\n )}\n </div>\n )\n}\n","import { useAutoFormContext } from '../../context/AutoFormContext'\n\ntype DefaultSubmitButtonProps = {\n isSubmitting: boolean\n}\n\nexport function DefaultSubmitButton({\n isSubmitting,\n}: DefaultSubmitButtonProps) {\n const { labels } = useAutoFormContext()\n return (\n <button\n type='submit'\n disabled={isSubmitting}\n data-submitting={isSubmitting || undefined}\n >\n {labels.submit ?? 'Submit'}\n </button>\n )\n}\n","import * as React from 'react'\n\nexport function DefaultFormWrapper({ children }: React.PropsWithChildren) {\n return <>{children}</>\n}\n","import * as React from 'react'\n\nexport function DefaultSectionWrapper({\n children,\n title,\n className,\n}: React.PropsWithChildren & { title: string; className?: string }) {\n return (\n <fieldset className={className}>\n <legend>{title}</legend>\n {children}\n </fieldset>\n )\n}\n","import type { ArrayRowLayoutProps } from '../../types'\n\nexport function DefaultArrayRowLayout({\n children,\n buttons,\n}: ArrayRowLayoutProps) {\n return (\n <div>\n {buttons.collapse}\n {children}\n <div>\n {buttons.moveUp}\n {buttons.moveDown}\n {buttons.duplicate}\n {buttons.remove}\n </div>\n </div>\n )\n}\n","import type { ArrayFieldLayoutProps } from '../../types'\n\nexport function DefaultArrayFieldLayout({\n rows,\n addButton,\n}: ArrayFieldLayoutProps) {\n return (\n <>\n {rows}\n {addButton}\n </>\n )\n}\n","import type { ObjectWrapperProps } from '../../types'\n\nexport function DefaultObjectWrapper({\n children,\n label,\n className,\n labelClassName,\n}: ObjectWrapperProps) {\n return (\n <fieldset className={className}>\n {label && <legend className={labelClassName}>{label}</legend>}\n {children}\n </fieldset>\n )\n}\n","import type { ArrayWrapperProps } from '../../types'\n\nexport function DefaultArrayWrapper({\n children,\n label,\n className,\n labelClassName,\n}: ArrayWrapperProps) {\n return (\n <fieldset className={className}>\n {label && <legend className={labelClassName}>{label}</legend>}\n {children}\n </fieldset>\n )\n}\n","import type { ArrayButtonProps } from '../../types'\n\nexport function DefaultArrayButton(props: ArrayButtonProps) {\n return <button {...props} />\n}\n","import type { ArrayCollapseButtonProps } from '../../types'\n\nexport function DefaultArrayCollapseButton({\n isCollapsed: _isCollapsed,\n ...props\n}: ArrayCollapseButtonProps) {\n return <button {...props} />\n}\n","import type { ValidationMessages } from '../types'\n\ntype FieldError = {\n message?: string\n type?: string\n}\n\n/**\n * Resolves the final error message to display for a field, applying\n * `ValidationMessages` overrides on top of the raw Zod/RHF error.\n *\n * Resolution priority:\n * 1. Per-field string override in `messages[fieldName]` — used regardless of\n * error type.\n * 2. Per-field per-code override in `messages[fieldName][error.type]`.\n * 3. Global `messages.required` — applied when the error is a required-field\n * error (`too_small` or `invalid_type`).\n * 4. The original message from Zod/RHF as a final fallback.\n *\n * @param fieldName - Dot-notated field name (e.g. `\"address.street\"`).\n * @param error - The raw error object from RHF's `formState.errors`.\n * @param messages - Optional `ValidationMessages` overrides.\n * @returns The resolved error string, or `undefined` if there is no error.\n */\nexport function resolveErrorMessage(\n fieldName: string,\n error: FieldError | undefined,\n messages?: ValidationMessages,\n): string | undefined {\n if (!error) return undefined\n\n const originalMessage = error.message\n\n if (!messages) return originalMessage\n\n // 1. Per-field override\n const fieldMessage = messages[fieldName]\n if (fieldMessage !== undefined) {\n // Per-field string — use it as the error message regardless of error code\n if (typeof fieldMessage === 'string') return fieldMessage\n // Per-field per-code — look up the error type\n if (typeof fieldMessage === 'object' && error.type) {\n const coded = fieldMessage[error.type]\n if (coded) return coded\n }\n }\n\n // 2. Global required override\n if (messages.required && isRequiredError(error)) {\n return messages.required\n }\n\n // 3. Fall back to Zod's original message\n return originalMessage\n}\n\n/**\n * Returns `true` when the given RHF error represents a missing required value.\n *\n * Zod v4 uses `invalid_type` for `undefined` on required fields, and\n * `too_small` (with `inclusive` minimum) for empty strings / zero values.\n */\nfunction isRequiredError(error: FieldError): boolean {\n // RHF maps Zod errors; \"too_small\" with inclusive minimum is the common Zod required pattern\n // Also handle \"invalid_type\" which Zod v4 uses for undefined-on-required\n return error.type === 'too_small' || error.type === 'invalid_type'\n}\n","import type { ComponentRegistry, FieldConfig, FieldProps } from '../types'\nimport { defaultRegistry } from '../registry/defaultRegistry'\n\n/**\n * Resolves the React component that should be used to render a given field,\n * following this priority order:\n *\n * 1. `field.meta.component` is a direct React component → used as-is,\n * bypassing the registry entirely.\n * 2. `field.meta.component` is a string key → looked up in the merged\n * `registry` (factory + instance components).\n * 3. `field.type` key exists in the merged `registry`.\n * 4. `field.type` key exists in the {@link defaultRegistry}.\n * 5. No match → logs a warning and returns `null`.\n *\n * @param field - The resolved field configuration.\n * @param registry - The merged component registry for the current form instance.\n * @returns The component to render, or `null` if none could be found.\n */\nexport function resolveComponent(\n field: FieldConfig,\n registry: ComponentRegistry,\n): React.ComponentType<FieldProps> | null {\n // 1. meta.component as a direct React component (bypasses registry)\n if (field.meta.component && typeof field.meta.component === 'function') {\n return field.meta.component as React.ComponentType<FieldProps>\n }\n // 2. meta.component as a string key in the merged registry\n if (\n typeof field.meta.component === 'string' &&\n registry[field.meta.component]\n ) {\n return registry[field.meta.component]!\n }\n // 3. field.type key in the merged registry\n if (registry[field.type]) {\n return registry[field.type]!\n }\n // 4. field.type key in the default registry\n if (defaultRegistry[field.type]) {\n return defaultRegistry[field.type]!\n }\n // 5. Unknown — render nothing\n console.warn(\n `[UniForm] No component found for field type \"${field.type}\"${field.meta.component ? ` with meta.component \"${String(field.meta.component)}\"` : ''}. Rendering null.`,\n )\n return null\n}\n","// ---------------------------------------------------------------------------\n// Coercion utilities\n// ---------------------------------------------------------------------------\n\nexport type CoercionMap = Record<string, (value: unknown) => unknown>\n\n/**\n * Built-in coercion functions for the primitive field types. Each function\n * converts the raw string value that comes from an HTML `<input>` into the\n * type expected by the Zod schema before validation is applied.\n *\n * - `number` — converts to `Number`; returns `undefined` for empty/null inputs.\n * - `date` — converts to `Date`; returns `undefined` for empty/null inputs.\n * - `boolean` — converts to `Boolean`.\n * - `string` — converts `null` / `undefined` to `''`, otherwise `String(value)`.\n */\nexport const defaultCoercionMap: CoercionMap = {\n number: (value: unknown) => {\n if (value === '' || value === null || value === undefined) return undefined\n const num = Number(value)\n return isNaN(num) ? value : num\n },\n date: (value: unknown) => {\n if (value === '' || value === null || value === undefined) return undefined\n const d = new Date(String(value as string | number | Date))\n return isNaN(d.getTime()) ? value : d\n },\n boolean: (value: unknown) => Boolean(value),\n string: (value: unknown) =>\n value == null || value == undefined\n ? ''\n : String(value as string | number | boolean),\n}\n\n/**\n * Coerces `value` to the type expected by `type`, using `customCoercions` first\n * and falling back to {@link defaultCoercionMap}.\n *\n * Returns the value unchanged when no coercion function is found for the given type.\n *\n * @param type - The field type string (e.g. `'number'`, `'date'`).\n * @param value - The raw value to coerce.\n * @param customCoercions - Optional per-instance overrides that take precedence\n * over the built-in coercion map.\n */\nexport function coerceValue(\n type: string,\n value: unknown,\n customCoercions?: CoercionMap,\n): unknown {\n const coercionFn = customCoercions?.[type] ?? defaultCoercionMap[type]\n if (!coercionFn) return value\n return coercionFn(value)\n}\n","import { Controller } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { resolveComponent } from '../resolveComponent'\nimport { coerceValue } from '../../coercion/coerce'\n\ntype ScalarFieldProps = {\n field: FieldConfig\n control: Control\n effectiveName: string\n shouldUnregister?: boolean\n}\n\nexport function ScalarField({\n field,\n control,\n effectiveName,\n shouldUnregister,\n}: ScalarFieldProps) {\n const {\n registry,\n disabled: contextDisabled,\n coercions,\n formMethods,\n } = useAutoFormContext()\n const Component = resolveComponent(field, registry)\n\n if (!Component) return null\n\n return (\n <Controller\n name={effectiveName}\n control={control}\n shouldUnregister={shouldUnregister}\n render={({ field: rhfField, fieldState }) => (\n <Component\n name={effectiveName}\n value={(rhfField.value as unknown) ?? ''}\n onChange={(value) => {\n const coerced = coerceValue(field.type, value, coercions)\n rhfField.onChange(coerced)\n void field.meta.onChange?.(coerced, formMethods)\n }}\n onBlur={rhfField.onBlur}\n ref={rhfField.ref}\n label={field.label}\n placeholder={field.meta.placeholder}\n description={field.meta.description}\n error={fieldState.error?.message}\n required={field.required}\n disabled={field.meta.disabled || contextDisabled}\n options={field.meta.options}\n meta={field.meta}\n schema={field.schema}\n />\n )}\n />\n )\n}\n","import { Controller } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { resolveComponent } from '../resolveComponent'\n\ntype BooleanFieldProps = {\n field: FieldConfig\n control: Control\n effectiveName: string\n shouldUnregister?: boolean\n}\n\nexport function BooleanField({\n field,\n control,\n effectiveName,\n shouldUnregister,\n}: BooleanFieldProps) {\n const {\n registry,\n disabled: contextDisabled,\n formMethods,\n } = useAutoFormContext()\n const Component = resolveComponent(field, registry)\n\n if (!Component) return null\n\n return (\n <Controller\n name={effectiveName}\n control={control}\n shouldUnregister={shouldUnregister}\n render={({ field: rhfField, fieldState }) => (\n <Component\n name={effectiveName}\n value={(rhfField.value as unknown) ?? false}\n onChange={(value) => {\n rhfField.onChange(value)\n void field.meta.onChange?.(value, formMethods)\n }}\n onBlur={rhfField.onBlur}\n ref={rhfField.ref}\n label={field.label}\n placeholder={field.meta.placeholder}\n description={field.meta.description}\n error={fieldState.error?.message}\n required={field.required}\n disabled={field.meta.disabled || rhfField.disabled || contextDisabled}\n meta={field.meta}\n schema={field.schema}\n />\n )}\n />\n )\n}\n","import * as React from 'react'\nimport { Controller } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { resolveComponent } from '../resolveComponent'\n\ntype SelectFieldProps = {\n field: Extract<FieldConfig, { type: 'select' }>\n control: Control\n effectiveName: string\n shouldUnregister?: boolean\n}\n\nexport function SelectField({\n field,\n control,\n effectiveName,\n shouldUnregister,\n}: SelectFieldProps) {\n const {\n registry,\n disabled: contextDisabled,\n formMethods,\n } = useAutoFormContext()\n const Component = resolveComponent(field, registry)\n\n if (!Component) return null\n\n return (\n <Controller\n name={effectiveName}\n control={control}\n shouldUnregister={shouldUnregister}\n render={({ field: rhfField, fieldState }) => (\n <Component\n name={effectiveName}\n value={(rhfField.value as unknown) ?? ''}\n onChange={(value) => {\n rhfField.onChange(value)\n void field.meta.onChange?.(value, formMethods)\n }}\n onBlur={rhfField.onBlur}\n ref={rhfField.ref}\n label={field.label}\n placeholder={field.meta.placeholder}\n description={field.meta.description}\n error={fieldState.error?.message}\n required={field.required}\n disabled={field.meta.disabled || contextDisabled}\n options={field.options}\n meta={field.meta}\n schema={field.schema}\n />\n )}\n />\n )\n}\n","import * as React from 'react'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig, ObjectWrapperProps } from '../../types'\nimport { FieldRenderer } from '../FieldRenderer'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\n\ntype ObjectFieldProps = {\n field: Extract<FieldConfig, { type: 'object' }>\n control: Control\n namePrefix?: string\n depth?: number\n shouldUnregister?: boolean\n}\n\nexport function ObjectField({\n field,\n control,\n namePrefix,\n depth = 0,\n shouldUnregister,\n}: ObjectFieldProps) {\n const { classNames, layout } = useAutoFormContext()\n const children = field.children\n\n const content = children.map((child, idx) => (\n <FieldRenderer\n key={child.name}\n field={child}\n control={control}\n namePrefix={namePrefix}\n index={idx}\n depth={depth + 1}\n shouldUnregister={shouldUnregister}\n />\n ))\n\n if (field.meta.section) {\n return <>{content}</>\n }\n\n const ObjectWrapper =\n (field.meta.wrapper as\n | React.ComponentType<ObjectWrapperProps>\n | undefined) ?? layout.objectWrapper\n return (\n <ObjectWrapper\n label={field.label}\n className={classNames.objectFieldset}\n labelClassName={classNames.objectLegend}\n >\n {content}\n </ObjectWrapper>\n )\n}\n","import type { FieldConfig } from '../../types'\n\n/**\n * Returns a sensible empty default value for a field based on its `type`.\n *\n * Used when appending new rows to an array field so that RHF starts each row\n * with typed, non-`undefined` values.\n *\n * - `string` → `''`\n * - `number` → `0`\n * - `boolean` → `false`\n * - `date` → `new Date()`\n * - `select` → first option value, or `''` if no options exist\n * - `object` → recursively built object using child defaults\n * - `array` → `[]`\n * - anything else → `undefined`\n */\nexport function getDefaultValue(field: FieldConfig): unknown {\n switch (field.type) {\n case 'string':\n return ''\n case 'number':\n return 0\n case 'boolean':\n return false\n case 'date':\n return new Date()\n case 'select':\n return field.options?.[0]?.value ?? ''\n case 'object': {\n const result: Record<string, unknown> = {}\n for (const child of field.children ?? []) {\n // Use only the last segment of the child's name for the key\n const key = child.name.split('.').pop() ?? child.name\n result[key] = getDefaultValue(child)\n }\n return result\n }\n case 'array':\n return []\n default:\n return undefined\n }\n}\n","import { useState, useMemo } from 'react'\nimport * as React from 'react'\nimport { useFieldArray, useWatch } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig, ArrayWrapperProps } from '../../types'\nimport { useAutoFormContext } from '../../context/AutoFormContext'\nimport { FieldRenderer } from '../FieldRenderer'\nimport { getDefaultValue } from './getDefaultValue'\n\ntype ArrayFieldProps = {\n field: Extract<FieldConfig, { type: 'array' }>\n control: Control\n effectiveName: string\n}\n\n/**\n * Produces a short summary string for a collapsed array row.\n *\n * Scans the row's values for the first non-empty `string` or `number` child\n * field and returns it as the label. Falls back to `\"Item {index + 1}\"` when\n * no suitable value is found.\n *\n * @param row - The current form values for the row (shallow key-value map).\n * @param itemConfig - The field config describing the item's shape.\n * @param index - Zero-based row index, used in the fallback label.\n */\nfunction getRowSummary(\n row: Record<string, unknown>,\n itemConfig: FieldConfig,\n index: number,\n itemSummary?: (index: number) => string,\n): string {\n // Try to find the first string or number value from children\n if (itemConfig.type === 'object') {\n for (const child of itemConfig.children) {\n const key = child.name.split('.').pop() ?? child.name\n const val = row[key]\n if (\n (child.type === 'string' || child.type === 'number') &&\n val != null &&\n val !== ''\n ) {\n return String(val as string | number)\n }\n }\n }\n return itemSummary?.(index) ?? `Item ${index + 1}`\n}\n\nexport function ArrayField({ field, control, effectiveName }: ArrayFieldProps) {\n const { classNames, layout, labels } = useAutoFormContext()\n const {\n fields: rows,\n append,\n remove,\n move,\n insert,\n } = useFieldArray({\n control,\n name: effectiveName,\n })\n\n const [collapsed, setCollapsed] = useState<Set<number>>(() => new Set())\n\n const itemConfig = field.itemConfig\n const isObjectItems = itemConfig.type === 'object'\n const minItems = field.minItems\n const maxItems = field.maxItems\n const atMin = minItems != null && rows.length <= minItems\n const atMax = maxItems != null && rows.length >= maxItems\n\n const showMove = field.meta.movable === true\n const showDuplicate = field.meta.duplicable === true\n const showCollapse = field.meta.collapsible === true && isObjectItems\n\n const toggleCollapse = (index: number) => {\n setCollapsed((prev) => {\n const next = new Set(prev)\n if (next.has(index)) {\n next.delete(index)\n } else {\n next.add(index)\n }\n return next\n })\n }\n\n // When the array belongs to a section, propagate section to the item config\n // so nested ObjectField also skips its own <fieldset>.\n const effectiveItemConfig =\n field.meta.section && !itemConfig.meta.section\n ? {\n ...itemConfig,\n meta: { ...itemConfig.meta, section: field.meta.section },\n }\n : itemConfig\n\n const {\n add: AddBtn,\n remove: RemoveBtn,\n moveUp: MoveUpBtn,\n moveDown: MoveDownBtn,\n duplicate: DuplicateBtn,\n collapse: CollapseBtn,\n } = layout.arrayButtons\n const ArrayFieldLayout = layout.arrayFieldLayout\n const RowLayout = layout.arrayRowLayout\n\n const renderedRows = rows.map((row, index) => {\n const isCollapsed = showCollapse && collapsed.has(index)\n\n const collapseButton = showCollapse ? (\n <CollapseBtn\n type='button'\n className={classNames.arrayCollapse}\n onClick={() => toggleCollapse(index)}\n aria-label={\n isCollapsed\n ? (labels.arrayAriaExpand?.(index) ?? `Expand item ${index + 1}`)\n : (labels.arrayAriaCollapse?.(index) ??\n `Collapse item ${index + 1}`)\n }\n isCollapsed={isCollapsed}\n >\n {isCollapsed\n ? (labels.arrayExpand ?? '▼')\n : (labels.arrayCollapse ?? '▶')}{' '}\n <CollapseSummary\n control={control}\n effectiveName={effectiveName}\n index={index}\n itemConfig={itemConfig}\n isCollapsed={isCollapsed}\n />\n </CollapseBtn>\n ) : null\n\n const moveUpButton =\n showMove && rows.length > 1 ? (\n <MoveUpBtn\n type='button'\n className={classNames.arrayMove}\n onClick={() => move(index, index - 1)}\n disabled={index === 0}\n aria-label={\n labels.arrayAriaMoveUp?.(index) ?? `Move item ${index + 1} up`\n }\n >\n {labels.arrayMoveUp ?? '↑'}\n </MoveUpBtn>\n ) : null\n\n const moveDownButton =\n showMove && rows.length > 1 ? (\n <MoveDownBtn\n type='button'\n className={classNames.arrayMove}\n onClick={() => move(index, index + 1)}\n disabled={index === rows.length - 1}\n aria-label={\n labels.arrayAriaMoveDown?.(index) ?? `Move item ${index + 1} down`\n }\n >\n {labels.arrayMoveDown ?? '↓'}\n </MoveDownBtn>\n ) : null\n\n const duplicateButton =\n showDuplicate && !atMax ? (\n <DuplicateBtn\n type='button'\n className={classNames.arrayDuplicate}\n onClick={() => {\n const values = Object.fromEntries(\n Object.entries(row).filter(([k]) => k !== 'id'),\n )\n insert(index + 1, values as Record<string, unknown>)\n }}\n aria-label={\n labels.arrayAriaDuplicate?.(index) ?? `Duplicate item ${index + 1}`\n }\n >\n {labels.arrayDuplicate ?? 'Duplicate'}\n </DuplicateBtn>\n ) : null\n\n const removeButton = (\n <RemoveBtn\n type='button'\n className={classNames.arrayRemove}\n onClick={() => remove(index)}\n disabled={atMin}\n aria-label={\n labels.arrayAriaRemove?.(index) ?? `Remove item ${index + 1}`\n }\n >\n {labels.arrayRemove ?? 'Remove'}\n </RemoveBtn>\n )\n\n const fieldContent = !isCollapsed ? (\n <FieldRenderer\n field={effectiveItemConfig}\n control={control}\n namePrefix={`${effectiveName}.${index}`}\n />\n ) : null\n\n return (\n <RowLayout\n key={row.id}\n buttons={{\n moveUp: moveUpButton,\n moveDown: moveDownButton,\n duplicate: duplicateButton,\n remove: removeButton,\n collapse: collapseButton,\n }}\n index={index}\n rowCount={rows.length}\n >\n {fieldContent}\n </RowLayout>\n )\n })\n\n const addButton = (\n <AddBtn\n type='button'\n className={classNames.arrayAdd}\n disabled={atMax}\n onClick={() =>\n append(getDefaultValue(itemConfig) as Record<string, unknown>)\n }\n >\n {labels.arrayAdd ?? 'Add'}\n </AddBtn>\n )\n\n const content = (\n <ArrayFieldLayout\n rows={renderedRows}\n addButton={addButton}\n rowCount={rows.length}\n canAdd={!atMax}\n />\n )\n\n if (field.meta.section) {\n return content\n }\n\n const ArrayWrapper =\n (field.meta.wrapper as\n | React.ComponentType<ArrayWrapperProps>\n | undefined) ?? layout.arrayWrapper\n return (\n <ArrayWrapper\n label={field.label}\n className={classNames.arrayFieldset}\n labelClassName={classNames.arrayLegend}\n >\n {content}\n </ArrayWrapper>\n )\n}\n\n/** Reactive summary text for collapsed rows */\nfunction CollapseSummary({\n control,\n effectiveName,\n index,\n itemConfig,\n isCollapsed,\n}: {\n control: Control\n effectiveName: string\n index: number\n itemConfig: FieldConfig\n isCollapsed: boolean\n}) {\n const { labels } = useAutoFormContext()\n const fallback = labels.arrayItemSummary?.(index) ?? `Item ${index + 1}`\n\n const rowValues = useWatch({ control, name: `${effectiveName}.${index}` }) as\n | Record<string, unknown>\n | undefined\n\n const summary = useMemo(() => {\n if (!isCollapsed) return fallback\n if (!rowValues) return fallback\n return getRowSummary(rowValues, itemConfig, index, labels.arrayItemSummary)\n }, [\n isCollapsed,\n rowValues,\n itemConfig,\n index,\n fallback,\n labels.arrayItemSummary,\n ])\n\n return <>{isCollapsed ? summary : fallback}</>\n}\n","import type { Control } from 'react-hook-form'\nimport { useFormState } from 'react-hook-form'\nimport type { FieldConfig } from '../types'\nimport { useAutoFormContext } from '../context/AutoFormContext'\nimport { resolveErrorMessage } from '../utils/resolveErrorMessage'\nimport { ScalarField } from './fields/ScalarField'\nimport { BooleanField } from './fields/BooleanField'\nimport { SelectField } from './fields/SelectField'\nimport { ObjectField } from './fields/ObjectField'\nimport { ArrayField } from './fields/ArrayField'\n\nexport type FieldRendererProps = {\n field: FieldConfig\n control: Control\n namePrefix?: string\n /** Zero-based render index within the parent container (form root / section / object). */\n index?: number\n /** Nesting depth (0 = top-level, 1 = inside object, etc.). */\n depth?: number\n /** When `true`, unregisters the field's value on unmount so it resets to its default when reshown.\n * Auto-set for conditional fields; propagated to object children. */\n shouldUnregister?: boolean\n}\n\n/**\n * Returns the fully-qualified field name for use with RHF, prepending\n * `namePrefix` when rendering inside a nested object or array context.\n */\nfunction getEffectiveName(field: FieldConfig, namePrefix?: string): string {\n if (!namePrefix) return field.name\n if (!field.name) return namePrefix\n return `${namePrefix}.${field.name}`\n}\n\n/**\n * Traverses the RHF `errors` object along a dot-notated `name` path and\n * returns the leaf error object, or `undefined` if no error exists at that path.\n */\nfunction getFieldError(\n errors: Record<string, unknown>,\n name: string,\n): { message?: string; type?: string } | undefined {\n const parts = name.split('.')\n let current: unknown = errors\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined\n current = (current as Record<string, unknown>)[part]\n }\n if (current && typeof current === 'object' && 'message' in current) {\n return current as { message?: string; type?: string }\n }\n return undefined\n}\n\n/**\n * Renders a single form field by delegating to the appropriate field component\n * based on `field.type`. Object and array fields manage their own layout and\n * skip the field wrapper; all other fields are wrapped in the configured\n * `FieldWrapper` with their resolved error message.\n */\nexport function FieldRenderer({\n field,\n control,\n namePrefix,\n index = 0,\n depth = 0,\n shouldUnregister,\n}: FieldRendererProps) {\n const effectiveShouldUnregister =\n shouldUnregister ?? typeof field.meta.condition === 'function'\n const { fieldWrapper: FieldWrapper, messages } = useAutoFormContext()\n const { errors } = useFormState({ control })\n const effectiveName = getEffectiveName(field, namePrefix)\n\n // object and array manage their own layout — unless a direct component overrides\n const hasDirectComponent = typeof field.meta.component === 'function'\n\n if (field.type === 'object' && !hasDirectComponent) {\n const objectField =\n effectiveName !== field.name ? { ...field, name: effectiveName } : field\n return (\n <ObjectField\n field={objectField}\n control={control}\n namePrefix={namePrefix}\n depth={depth}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n\n if (field.type === 'array' && !hasDirectComponent) {\n const arrayField =\n effectiveName !== field.name ? { ...field, name: effectiveName } : field\n return (\n <ArrayField\n field={arrayField}\n control={control}\n effectiveName={effectiveName}\n />\n )\n }\n\n const effectiveField =\n effectiveName !== field.name ? { ...field, name: effectiveName } : field\n\n const rawError = getFieldError(\n errors as Record<string, unknown>,\n effectiveName,\n )\n const error = resolveErrorMessage(effectiveName, rawError, messages)\n\n const renderField = () => {\n if (field.type === 'boolean') {\n return (\n <BooleanField\n field={effectiveField}\n control={control}\n effectiveName={effectiveName}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n if (field.type === 'select') {\n return (\n <SelectField\n field={effectiveField as Extract<FieldConfig, { type: 'select' }>}\n control={control}\n effectiveName={effectiveName}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n if (\n field.type === 'string' ||\n field.type === 'number' ||\n field.type === 'date' ||\n // array/object with a direct meta.component — let ScalarField render it\n hasDirectComponent\n ) {\n return (\n <ScalarField\n field={effectiveField}\n control={control}\n effectiveName={effectiveName}\n shouldUnregister={effectiveShouldUnregister}\n />\n )\n }\n // unknown type\n console.warn(\n `[UniForm] Unsupported field type: \"${field.type}\". Rendering null.`,\n )\n return null\n }\n\n const rendered = renderField()\n if (rendered === null) return null\n\n return (\n <FieldWrapper\n field={effectiveField}\n error={error}\n span={field.meta.span}\n index={index}\n depth={depth}\n >\n {rendered}\n </FieldWrapper>\n )\n}\n","import { useMemo } from 'react'\nimport { useWatch } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { FieldConfig } from '../types'\n\n/**\n * Filters and sorts a list of field configs based on the current form values.\n *\n * - Fields with `meta.hidden === true` are always excluded.\n * - Fields with a `meta.condition` function are included only when the\n * function returns `true` for the current values.\n * - Remaining fields are sorted ascending by `meta.order` (fields without an\n * order appear last).\n *\n * Re-evaluates reactively whenever the watched form values change.\n *\n * @param fields - The full list of field configs to filter and sort.\n * @param control - The RHF `control` object from the parent form.\n * @returns The filtered and ordered subset of `fields`.\n */\nexport function useConditionalFields(\n fields: FieldConfig[],\n control: Control,\n): FieldConfig[] {\n const values = useWatch({ control })\n\n return useMemo(() => {\n return fields\n .filter((field) => {\n if (field.meta.hidden) return false\n if (typeof field.meta.condition === 'function') {\n return field.meta.condition(values)\n }\n return true\n })\n .sort((a, b) => {\n const orderA =\n typeof a.meta.order === 'number' ? a.meta.order : Infinity\n const orderB =\n typeof b.meta.order === 'number' ? b.meta.order : Infinity\n return orderA - orderB\n })\n }, [fields, values])\n}\n","import { useMemo } from 'react'\nimport type { FieldConfig } from '../types'\n\nexport type SectionGroup = {\n title: string | null\n fields: FieldConfig[]\n}\n\n/**\n * Groups a flat list of field configs into ordered section groups based on\n * each field's `meta.section` value.\n *\n * - Fields without a `meta.section` (or with a non-string value) are placed\n * in an \"ungrouped\" section with `title: null`, rendered first.\n * - Named sections appear in the order their first member is encountered.\n * - The returned array is memoized and only recomputed when `fields` changes.\n *\n * @param fields - The ordered list of (already filtered/sorted) field configs.\n * @returns An array of {@link SectionGroup} objects ready to be rendered.\n */\nexport function useSectionGrouping(fields: FieldConfig[]): SectionGroup[] {\n return useMemo(() => {\n const ungrouped: FieldConfig[] = []\n const sectionMap = new Map<string, FieldConfig[]>()\n const sectionOrder: string[] = []\n\n for (const field of fields) {\n const section = field.meta.section\n if (typeof section !== 'string') {\n ungrouped.push(field)\n } else {\n if (!sectionMap.has(section)) {\n sectionMap.set(section, [])\n sectionOrder.push(section)\n }\n sectionMap.get(section)!.push(field)\n }\n }\n\n const groups: SectionGroup[] = []\n\n if (ungrouped.length > 0) {\n groups.push({ title: null, fields: ungrouped })\n }\n\n for (const title of sectionOrder) {\n groups.push({ title, fields: sectionMap.get(title)! })\n }\n\n return groups\n }, [fields])\n}\n","import { useEffect, useRef, useCallback } from 'react'\nimport { useWatch } from 'react-hook-form'\nimport type { Control } from 'react-hook-form'\nimport type { PersistStorage } from '../types'\n\nconst defaultStorage: PersistStorage | undefined =\n typeof window !== 'undefined'\n ? {\n getItem: (key) => sessionStorage.getItem(key),\n setItem: (key, value) => sessionStorage.setItem(key, value),\n removeItem: (key) => sessionStorage.removeItem(key),\n }\n : undefined\n\n/**\n * Persists form values to a storage adapter and restores them on mount.\n *\n * - On mount, reads `key` from `storage` and calls `reset` with the merged\n * stored + default values, so the form starts with any previously saved data.\n * - On every value change, writes the current form values to `storage` after a\n * `debounceMs` delay to avoid thrashing the storage layer.\n * - When `key` is `undefined`, persistence is entirely disabled.\n * - Falls back to `sessionStorage` when no custom `storage` adapter is provided.\n *\n * @returns An object with `clearPersistedData` — call this after a successful\n * submission to remove the persisted draft.\n */\nexport function useFormPersistence(options: {\n control: Control\n key: string | undefined\n debounceMs: number\n storage?: PersistStorage\n reset: (values: Record<string, unknown>) => void\n defaultValues: Record<string, unknown>\n}): { clearPersistedData: () => void } {\n const {\n control,\n key,\n debounceMs,\n storage: customStorage,\n reset,\n defaultValues,\n } = options\n const storage = customStorage ?? defaultStorage\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const restoredRef = useRef(false)\n\n // Restore persisted values on mount\n useEffect(() => {\n if (!key || !storage || restoredRef.current) return\n restoredRef.current = true\n try {\n const raw = storage.getItem(key)\n if (raw) {\n const parsed = JSON.parse(raw) as Record<string, unknown>\n reset({ ...defaultValues, ...parsed })\n }\n } catch {\n // Invalid data — ignore silently\n }\n }, [key, storage, reset, defaultValues])\n\n // Watch all values and persist on change\n const values = useWatch({ control })\n\n useEffect(() => {\n if (!key || !storage) return\n // Skip the initial render before restoration\n if (!restoredRef.current) return\n\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => {\n try {\n storage.setItem(key, JSON.stringify(values))\n } catch {\n // Storage full or unavailable — fail silently\n }\n }, debounceMs)\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [key, storage, values, debounceMs])\n\n const clearPersistedData = useCallback(() => {\n if (!key || !storage) return\n try {\n storage.removeItem(key)\n } catch {\n // fail silently\n }\n }, [key, storage])\n\n return { clearPersistedData }\n}\n","import * as React from 'react'\n\n/**\n * A hook that returns a ref object with the latest value of the passed variable.\n * Useful for accessing the latest props/state inside async callbacks or effects\n * without adding them to dependency arrays.\n */\nexport function useLatestRef<T>(value: T) {\n const ref = React.useRef<T>(value)\n\n React.useLayoutEffect(() => {\n ref.current = value\n }, [value])\n\n return ref\n}\n","import type * as z from 'zod/v4/core'\nimport type {\n FieldConfig,\n FieldCondition,\n FieldMeta,\n FormMethods,\n FieldDependencyResult,\n} from '../types'\nimport type { UniForm, UniFormContext } from '../UniForm'\n\n/**\n * Recursively merges `overrides` (keyed by field name) into the `fields` tree,\n * applying each override to the matching field's `meta`. Descends into\n * `children` (object fields) and `itemConfig.children` (array-of-object fields).\n *\n * For array fields, keys prefixed with `\"<arrayFieldName>.\"` are stripped before\n * matching against item children, so `\"items.qty\"` targets every row's `qty` field.\n */\nexport function applyFieldOverrides(\n fields: FieldConfig[],\n overrides: Record<string, Partial<FieldMeta>>,\n): FieldConfig[] {\n return fields.map((field) => {\n const override = overrides[field.name]\n const updated = override\n ? { ...field, meta: { ...field.meta, ...override } }\n : field\n\n if (updated.type === 'object') {\n const newChildren = applyFieldOverrides(updated.children, overrides)\n if (newChildren !== updated.children)\n return { ...updated, children: newChildren }\n }\n\n if (updated.type === 'array' && updated.itemConfig.type === 'object') {\n const prefix = `${updated.name}.`\n const strippedOverrides: Record<string, Partial<FieldMeta>> = {}\n for (const [key, value] of Object.entries(overrides)) {\n if (key.startsWith(prefix))\n strippedOverrides[key.slice(prefix.length)] = value\n }\n const newItemChildren = applyFieldOverrides(\n updated.itemConfig.children,\n strippedOverrides,\n )\n if (newItemChildren !== updated.itemConfig.children) {\n return {\n ...updated,\n itemConfig: { ...updated.itemConfig, children: newItemChildren },\n }\n }\n }\n\n return updated\n })\n}\n\n/**\n * Injects UniForm onChange handlers into each field's `meta.onChange`, recursing\n * into object children and array itemConfig with prefix-stripping for array fields.\n */\nexport function injectOnChangeHandlers<TSchema extends z.$ZodObject>(\n fields: FieldConfig[],\n uniForm: UniForm<TSchema>,\n ctx: UniFormContext<TSchema>,\n handlerKeys: Set<string> = new Set(uniForm._getWatchedFields()),\n): FieldConfig[] {\n if (!handlerKeys.size) return fields\n\n return fields.map((field) => {\n let updated: FieldConfig = field\n\n if (handlerKeys.has(field.name)) {\n const existingOnChange = field.meta.onChange\n updated = {\n ...field,\n meta: {\n ...field.meta,\n onChange: (value: unknown, formMethods: FormMethods) => {\n void existingOnChange?.(value, formMethods)\n void uniForm._fireHandler(field.name, value, ctx)\n },\n },\n }\n }\n\n if (updated.type === 'object') {\n const newChildren = injectOnChangeHandlers(\n updated.children,\n uniForm,\n ctx,\n handlerKeys,\n )\n if (newChildren !== updated.children)\n updated = { ...updated, children: newChildren }\n } else if (updated.type === 'array') {\n const prefix = field.name + '.'\n const itemKeys = new Set<string>()\n for (const key of handlerKeys) {\n if (key.startsWith(prefix)) itemKeys.add(key.slice(prefix.length))\n }\n if (itemKeys.size) {\n const remappedUniForm = {\n _getWatchedFields: () => Array.from(itemKeys),\n _fireHandlers: (\n name: string,\n value: unknown,\n c: UniFormContext<TSchema>,\n ) => uniForm._fireHandler(`${field.name}.${name}`, value, c),\n } as unknown as UniForm<TSchema>\n const newItemConfig = injectOnChangeHandlers(\n [updated.itemConfig],\n remappedUniForm,\n ctx,\n itemKeys,\n )[0]\n if (newItemConfig !== updated.itemConfig)\n updated = { ...updated, itemConfig: newItemConfig }\n }\n }\n\n return updated\n })\n}\n\n/**\n * Injects UniForm conditions into field configs, recursing into object children\n * and array itemConfig with prefix-stripping for array fields.\n */\nexport function injectConditions(\n fields: FieldConfig[],\n conditions: Map<string, FieldCondition>,\n): FieldConfig[] {\n if (!conditions.size) return fields\n\n return fields.map((field) => {\n const condition = conditions.get(field.name)\n let updated: FieldConfig = condition\n ? { ...field, meta: { ...field.meta, condition } }\n : field\n\n if (updated.type === 'object') {\n const newChildren = injectConditions(updated.children, conditions)\n if (newChildren !== updated.children)\n updated = { ...updated, children: newChildren }\n } else if (updated.type === 'array') {\n const prefix = field.name + '.'\n const itemConditions = new Map<string, FieldCondition>()\n for (const [key, cond] of conditions) {\n if (key.startsWith(prefix))\n itemConditions.set(key.slice(prefix.length), cond)\n }\n if (itemConditions.size) {\n const newItemConfig = injectConditions(\n [updated.itemConfig],\n itemConditions,\n )[0]\n if (newItemConfig !== updated.itemConfig)\n updated = { ...updated, itemConfig: newItemConfig }\n }\n }\n\n return updated\n })\n}\n\n/**\n * Merges event-driven `dynamicMeta` overrides into the field configs.\n * Only fields with entries in `overrides` are cloned.\n */\nexport function applyDynamicMeta(\n fields: FieldConfig[],\n overrides: Record<string, Partial<FieldDependencyResult>>,\n): FieldConfig[] {\n if (!Object.keys(overrides).length) return fields\n return fields.map((field) => {\n const override = overrides[field.name]\n if (!override) return field\n const { options, label, ...metaOverrides } = override\n return {\n ...field,\n ...(label !== undefined ? { label } : {}),\n ...(options !== undefined ? { options } : {}),\n meta: { ...field.meta, ...metaOverrides },\n }\n })\n}\n\n/** Generate sensible empty defaults so RHF starts with '' instead of undefined */\nexport function buildDefaults(fields: FieldConfig[]): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const field of fields) {\n const key = field.name\n switch (field.type) {\n case 'string':\n result[key] = ''\n break\n case 'number':\n result[key] = ''\n break\n case 'boolean':\n result[key] = false\n break\n case 'select':\n result[key] = field.options?.[0]?.value ?? ''\n break\n case 'array':\n result[key] = []\n break\n case 'object':\n result[key] = {}\n break\n default:\n break\n }\n }\n return result\n}\n","import * as React from 'react'\nimport { useForm, useWatch, type Resolver } from 'react-hook-form'\nimport { zodResolver } from '@hookform/resolvers/zod'\nimport type * as z from 'zod/v4/core'\nimport type {\n AutoFormProps,\n AutoFormHandle,\n FieldCondition,\n FieldMeta,\n FormMethods,\n FieldDependencyResult,\n ResolvedLayoutSlots,\n} from '../types'\nimport type { UniForm, UniFormContext } from '../UniForm'\nimport { introspectObjectSchema } from '../introspection/introspect'\nimport { parseDiscriminatedUnionMeta } from '../introspection/discriminatedUnion'\nimport { mergeRegistries } from '../registry/mergeRegistries'\nimport { defaultRegistry } from '../registry/defaultRegistry'\nimport { DefaultFieldWrapper } from './defaults/DefaultFieldWrapper'\nimport { DefaultSubmitButton } from './defaults/DefaultSubmitButton'\nimport { DefaultFormWrapper } from './defaults/DefaultFormWrapper'\nimport { DefaultSectionWrapper } from './defaults/DefaultSectionWrapper'\nimport { DefaultArrayRowLayout } from './defaults/DefaultArrayRowLayout'\nimport { DefaultArrayFieldLayout } from './defaults/DefaultArrayFieldLayout'\nimport { DefaultObjectWrapper } from './defaults/DefaultObjectWrapper'\nimport { DefaultArrayWrapper } from './defaults/DefaultArrayWrapper'\nimport { DefaultArrayButton } from './defaults/DefaultArrayButton'\nimport { DefaultArrayCollapseButton } from './defaults/DefaultArrayCollapseButton'\nimport { AutoFormContextProvider } from '../context/AutoFormContext'\nimport { FieldRenderer } from './FieldRenderer'\nimport { useConditionalFields } from '../hooks/useConditionalFields'\nimport { useSectionGrouping } from '../hooks/useSectionGrouping'\nimport { useFormPersistence } from '../hooks/useFormPersistence'\nimport { useLatestRef } from '../hooks/useLatestRef'\nimport {\n applyFieldOverrides,\n injectOnChangeHandlers,\n injectConditions,\n applyDynamicMeta,\n buildDefaults,\n} from '../utils/fieldPipeline'\n\n/**\n * The core auto-form component. Introspects the provided Zod `schema`,\n * renders the appropriate field components, validates on submit using\n * `zodResolver`, and calls `onSubmit` with the fully-typed, validated values.\n *\n * Supports: conditional fields, dynamic field meta via UniForm onChange\n * handlers, section grouping, form persistence, imperative handle via `ref`,\n * and full layout/component customisation.\n *\n * @template TSchema - A `ZodObject` schema that defines the form shape.\n *\n * @example\n * const myForm = new UniForm(z.object({ name: z.string(), age: z.number() }))\n *\n * <AutoForm form={myForm} onSubmit={(values) => console.log(values)} />\n */\nexport function AutoForm<TSchema extends z.$ZodObject>(\n props: AutoFormProps<TSchema> & {\n ref?: React.Ref<AutoFormHandle<TSchema>>\n },\n) {\n const {\n form: uniForm,\n onSubmit,\n defaultValues,\n components,\n fields: fieldOverridesProp = {},\n fieldWrapper,\n layout,\n classNames = {},\n disabled = false,\n coercions,\n messages,\n persistKey,\n persistDebounce = 300,\n persistStorage,\n onValuesChange,\n labels = {},\n ref,\n } = props\n\n const schema = uniForm.schema\n\n // For discriminated unions: extract static metadata once\n const unionInfo = React.useMemo(() => {\n const def = schema._zod.def as { type: string }\n if (def.type !== 'union') return null\n return parseDiscriminatedUnionMeta(\n schema as unknown as z.$ZodDiscriminatedUnion,\n )\n }, [schema])\n\n // Initial field list — for unions, use the first variant so buildDefaults has something\n const rawFields = React.useMemo(() => {\n if (!unionInfo) return introspectObjectSchema(schema)\n const firstVariantFields = introspectObjectSchema(\n unionInfo.firstVariant,\n ).filter((f) => f.name !== unionInfo.discriminatorKey)\n return [unionInfo.discriminatorField, ...firstVariantFields]\n }, [schema, unionInfo])\n\n const registry = React.useMemo(\n () => mergeRegistries(defaultRegistry, components),\n [components],\n )\n\n const generatedDefaults = React.useMemo(\n () => buildDefaults(rawFields),\n [rawFields],\n )\n\n const computedDefaults = React.useMemo(() => {\n const base: Record<string, unknown> = {\n ...generatedDefaults,\n ...(typeof defaultValues === 'function'\n ? {}\n : (defaultValues as Record<string, unknown>)),\n }\n\n // Collect all conditions: UniForm-registered takes precedence, fields-prop fills gaps\n const conditions = new Map<string, FieldCondition>(\n (uniForm as UniForm<TSchema>)._getConditions() as Map<\n string,\n FieldCondition\n >,\n )\n for (const [name, override] of Object.entries(\n fieldOverridesProp as Record<string, Partial<FieldMeta>>,\n )) {\n if (typeof override.condition === 'function' && !conditions.has(name)) {\n conditions.set(name, override.condition as FieldCondition)\n }\n }\n\n // Exclude fields whose condition starts false so they're never pre-registered\n // in the RHF store. Evaluated against `base` so fields that start visible\n // (condition true) still receive their default value.\n for (const [name, condition] of conditions) {\n if (!condition(base)) {\n delete base[name]\n }\n }\n\n return base\n }, [generatedDefaults, defaultValues, uniForm, fieldOverridesProp])\n\n // Async defaultValues: track whether we are still waiting for the loader\n const isAsyncDefaults = typeof defaultValues === 'function'\n const [isLoadingDefaults, setIsLoadingDefaults] =\n React.useState(isAsyncDefaults)\n\n const rhf = useForm({\n resolver: zodResolver(schema) as unknown as Resolver,\n defaultValues: computedDefaults,\n })\n\n const {\n control,\n formState,\n clearErrors,\n getValues,\n handleSubmit,\n reset,\n resetField,\n setValue,\n setError,\n setFocus,\n watch,\n } = rhf\n\n // For discriminated unions: watch the discriminator and swap to the matching variant's fields\n const discriminatorValue = useWatch({\n control,\n name: (unionInfo?.discriminatorKey ?? '') as never,\n disabled: !unionInfo?.discriminatorKey,\n })\n\n const activeFields = React.useMemo(() => {\n if (!unionInfo) return rawFields\n const variant = unionInfo.variantMap.get(\n discriminatorValue as unknown as string,\n )\n if (!variant) return [unionInfo.discriminatorField]\n const variantFields = introspectObjectSchema(variant).filter(\n (f) => f.name !== unionInfo.discriminatorKey,\n )\n return [unionInfo.discriminatorField, ...variantFields]\n }, [unionInfo, discriminatorValue, rawFields])\n\n const mergedFields = React.useMemo(\n () =>\n applyFieldOverrides(\n activeFields,\n fieldOverridesProp as Record<string, Partial<FieldMeta>>,\n ),\n [activeFields, fieldOverridesProp],\n )\n\n const { clearPersistedData } = useFormPersistence({\n control,\n key: persistKey,\n debounceMs: persistDebounce,\n storage: persistStorage,\n reset: rhf.reset as (values: Record<string, unknown>) => void,\n defaultValues: computedDefaults,\n })\n\n // Dynamic field meta — updated by setFieldMeta inside UniForm onChange handlers\n const [dynamicMeta, setDynamicMeta] = React.useState<\n Record<string, Partial<FieldDependencyResult>>\n >({})\n\n const onSubmitRef = useLatestRef(onSubmit)\n const onValuesChangeRef = useLatestRef(onValuesChange)\n const generatedDefaultsRef = useLatestRef(generatedDefaults)\n\n // Load async defaultValues once on mount\n React.useEffect(() => {\n if (!isAsyncDefaults) return\n let cancelled = false\n void (defaultValues as () => Promise<Partial<z.infer<TSchema>>>)().then(\n (vals) => {\n if (cancelled) return\n rhf.reset({ ...generatedDefaultsRef.current, ...vals })\n setIsLoadingDefaults(false)\n },\n )\n return () => {\n cancelled = true\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const formMethods = React.useMemo<FormMethods<z.infer<TSchema>>>(\n () => ({\n setValue: (name, value) =>\n setValue(name as string, value, {\n shouldValidate: true,\n shouldDirty: true,\n }),\n setValues: (values) => {\n for (const [key, val] of Object.entries(values)) {\n setValue(key, val, { shouldValidate: true, shouldDirty: true })\n }\n },\n getValues: () => getValues() as z.infer<TSchema>,\n resetField: (name) => resetField(name),\n reset: (values) => {\n if (values) {\n reset({ ...getValues(), ...values })\n } else {\n reset()\n }\n // Clear dynamic meta so overrides don't persist after a reset\n setDynamicMeta({})\n },\n setError: (name, message) => setError(name, { type: 'manual', message }),\n setErrors: (errors) => {\n for (const [key, message] of Object.entries(errors)) {\n setError(key, { type: 'manual', message: message as string })\n }\n },\n clearErrors: (names?) => clearErrors(names),\n submit: () => {\n void handleSubmit((values) =>\n onSubmitRef.current(values as z.infer<TSchema>),\n )()\n },\n focus: (fieldName) => setFocus(fieldName),\n watch: watch as FormMethods<z.infer<TSchema>>['watch'],\n }),\n [\n clearErrors,\n getValues,\n handleSubmit,\n reset,\n resetField,\n setValue,\n setError,\n setFocus,\n watch,\n onSubmitRef,\n ],\n )\n\n React.useImperativeHandle(ref, () => formMethods, [formMethods])\n\n // setFieldMeta: called synchronously inside UniForm onChange handlers.\n // Updates dynamicMeta state; use ctx.setValue() directly to set a field value.\n const setFieldMeta = React.useCallback(\n (field: string, meta: Partial<FieldDependencyResult>) => {\n if (Object.keys(meta).length) {\n setDynamicMeta((prev) => ({\n ...prev,\n [field]: { ...prev[field], ...meta },\n }))\n }\n },\n [],\n )\n\n // Build the UniForm context — stable when formMethods and setFieldMeta are stable\n const uniFormCtx = React.useMemo<UniFormContext<TSchema>>(\n () => ({ ...formMethods, setFieldMeta }),\n [formMethods, setFieldMeta],\n )\n\n // Inject UniForm handlers into field.meta.onChange so they fire as real event handlers\n const fieldsWithHandlers = React.useMemo(\n () =>\n injectOnChangeHandlers(\n mergedFields,\n uniForm as UniForm<TSchema>,\n uniFormCtx,\n ),\n [mergedFields, uniForm, uniFormCtx],\n )\n\n // Inject UniForm conditions into field.meta.condition\n const fieldsWithConditions = React.useMemo(\n () =>\n injectConditions(\n fieldsWithHandlers,\n (uniForm as UniForm<TSchema>)._getConditions() as Map<\n string,\n FieldCondition\n >,\n ),\n [fieldsWithHandlers, uniForm],\n )\n\n // Apply event-driven dynamic meta overrides (from setFieldMeta calls)\n const fieldsWithDynamic = React.useMemo(\n () => applyDynamicMeta(fieldsWithConditions, dynamicMeta),\n [fieldsWithConditions, dynamicMeta],\n )\n\n const allValues = useWatch({ control })\n\n React.useEffect(() => {\n onValuesChangeRef.current?.(allValues as z.infer<TSchema>)\n }, [onValuesChangeRef, allValues])\n\n const visibleFields = useConditionalFields(fieldsWithDynamic, control)\n const sections = useSectionGrouping(visibleFields)\n\n const resolvedLayout = React.useMemo((): ResolvedLayoutSlots => {\n const base = layout?.arrayButtons?.base ?? DefaultArrayButton\n const slots = layout?.arrayButtons\n return {\n formWrapper: layout?.formWrapper ?? DefaultFormWrapper,\n sectionWrapper: layout?.sectionWrapper ?? DefaultSectionWrapper,\n submitButton: layout?.submitButton ?? DefaultSubmitButton,\n arrayRowLayout: layout?.arrayRowLayout ?? DefaultArrayRowLayout,\n arrayFieldLayout: layout?.arrayFieldLayout ?? DefaultArrayFieldLayout,\n objectWrapper: layout?.objectWrapper ?? DefaultObjectWrapper,\n arrayWrapper: layout?.arrayWrapper ?? DefaultArrayWrapper,\n arrayButtons: {\n base,\n add: slots?.add ?? base,\n remove: slots?.remove ?? base,\n moveUp: slots?.moveUp ?? base,\n moveDown: slots?.moveDown ?? base,\n duplicate: slots?.duplicate ?? base,\n collapse: slots?.collapse ?? DefaultArrayCollapseButton,\n },\n loadingFallback: layout?.loadingFallback ?? <p>Loading…</p>,\n }\n }, [\n layout?.formWrapper,\n layout?.sectionWrapper,\n layout?.submitButton,\n layout?.arrayRowLayout,\n layout?.arrayFieldLayout,\n layout?.objectWrapper,\n layout?.arrayWrapper,\n layout?.arrayButtons,\n layout?.loadingFallback,\n ])\n\n const resolvedFieldWrapper = fieldWrapper ?? DefaultFieldWrapper\n\n const FormWrapper = resolvedLayout.formWrapper\n const SectionWrapper = resolvedLayout.sectionWrapper\n const SubmitButton = resolvedLayout.submitButton\n\n const contextValue = React.useMemo(\n () => ({\n registry,\n fieldOverrides: fieldOverridesProp,\n fieldWrapper: resolvedFieldWrapper,\n layout: resolvedLayout,\n classNames,\n disabled,\n coercions,\n messages,\n labels,\n formMethods: formMethods as unknown as FormMethods,\n }),\n [\n registry,\n fieldOverridesProp,\n resolvedFieldWrapper,\n resolvedLayout,\n classNames,\n disabled,\n coercions,\n messages,\n labels,\n formMethods,\n ],\n )\n\n // While async defaultValues are still loading, render the fallback\n if (isLoadingDefaults) {\n return <>{resolvedLayout.loadingFallback}</>\n }\n\n return (\n <AutoFormContextProvider value={contextValue}>\n <form\n noValidate\n className={classNames.form}\n onSubmit={(e) => {\n void handleSubmit(async (values) => {\n await onSubmit(values as z.infer<TSchema>)\n clearPersistedData()\n })(e)\n }}\n >\n <FormWrapper>\n {sections.map((section) => {\n const renderedFields = section.fields.map((field, idx) => (\n <FieldRenderer\n key={field.name}\n field={field}\n control={control}\n index={idx}\n depth={0}\n />\n ))\n\n if (section.title === null) {\n return (\n <React.Fragment key='__ungrouped'>\n {renderedFields}\n </React.Fragment>\n )\n }\n\n const sectionConfig = layout?.sections?.[section.title]\n const PerSectionWrapper = sectionConfig?.component ?? SectionWrapper\n\n return (\n <PerSectionWrapper\n key={section.title}\n title={section.title}\n className={sectionConfig?.className}\n >\n {renderedFields}\n </PerSectionWrapper>\n )\n })}\n <SubmitButton\n isSubmitting={formState.isSubmitting}\n label={labels.submit ?? 'Submit'}\n />\n </FormWrapper>\n </form>\n </AutoFormContextProvider>\n )\n}\n","import * as React from 'react'\nimport type * as z from 'zod/v4/core'\nimport type {\n AutoFormConfig,\n AutoFormProps,\n AutoFormHandle,\n FormLabels,\n} from '../types'\nimport { AutoForm } from '../components/AutoForm'\nimport { mergeRegistries } from '../registry/mergeRegistries'\n\n/**\n * Factory that creates a pre-configured `<AutoForm>` component with a fixed\n * set of defaults baked in.\n *\n * All options passed to `createAutoForm` become the baseline for every form\n * instance produced by the returned component. Any prop passed directly to the\n * returned component is **deep-merged** on top of those defaults (instance\n * props win on conflicts).\n *\n * Merged items: `components`, `layout`, `classNames`, `coercions`, `messages`.\n * Replaced items: `fieldWrapper`, `disabled` (OR-ed with the factory default).\n *\n * @param config - Factory-level defaults applied to every form instance.\n * @returns A `<AutoForm>`-compatible component with the provided defaults applied.\n *\n * @example\n * const AutoForm = createAutoForm({\n * components: { string: MyTextInput },\n * classNames: { form: 'my-form' },\n * })\n *\n * // Later:\n * <AutoForm form={myUniForm} onSubmit={handleSubmit} />\n */\nexport function createAutoForm(config: AutoFormConfig) {\n function ConfiguredAutoForm<TSchema extends z.$ZodObject>(\n props: AutoFormProps<TSchema> & {\n ref?: React.Ref<AutoFormHandle<TSchema>>\n },\n ) {\n const mergedComponents = React.useMemo(\n () => mergeRegistries(config.components ?? {}, props.components),\n [props.components],\n )\n\n const mergedLayout = React.useMemo(\n () => ({\n ...config.layout,\n ...props.layout,\n sections:\n config.layout?.sections || props.layout?.sections\n ? { ...config.layout?.sections, ...props.layout?.sections }\n : undefined,\n }),\n [props.layout],\n )\n\n const mergedClassNames = React.useMemo(\n () => ({ ...config.classNames, ...props.classNames }),\n [props.classNames],\n )\n\n const mergedCoercions = React.useMemo(\n () =>\n props.coercions || config.coercions\n ? { ...config.coercions, ...props.coercions }\n : undefined,\n [props.coercions],\n )\n\n const mergedMessages = React.useMemo(\n () =>\n props.messages || config.messages\n ? { ...config.messages, ...props.messages }\n : undefined,\n [props.messages],\n )\n\n const mergedLabels = React.useMemo<FormLabels | undefined>(\n () =>\n props.labels || config.labels\n ? { ...config.labels, ...props.labels }\n : undefined,\n [props.labels],\n )\n\n return (\n <AutoForm\n {...props}\n ref={props.ref}\n components={mergedComponents}\n fieldWrapper={props.fieldWrapper ?? config.fieldWrapper}\n layout={mergedLayout}\n classNames={mergedClassNames}\n disabled={props.disabled || config.disabled || false}\n coercions={mergedCoercions}\n messages={mergedMessages}\n labels={mergedLabels ?? {}}\n />\n )\n }\n\n ConfiguredAutoForm.displayName = 'AutoForm(configured)'\n return ConfiguredAutoForm\n}\n","import type * as z from 'zod/v4/core'\nimport type {\n DeepKeys,\n DeepFieldValue,\n FormMethods,\n FieldDependencyResult,\n} from './types'\n\n/**\n * Context passed to UniForm `setOnChange` handlers. Extends `FormMethods` with\n * `setFieldMeta`, which lets handlers dynamically override per-field UI\n * properties (hidden, disabled, options, label, etc.).\n *\n * @template TSchema - The Zod object schema that defines the form shape.\n */\nexport type UniFormContext<TSchema extends z.$ZodObject = z.$ZodObject> =\n FormMethods<z.infer<TSchema>> & {\n /**\n * Dynamically override per-field UI metadata from inside a setOnChange handler.\n * Changes are applied synchronously and trigger a re-render.\n *\n * Meta keys are stored and merged into the rendered field config.\n */\n setFieldMeta: <K extends DeepKeys<z.infer<TSchema>>>(\n field: K,\n meta: Partial<FieldDependencyResult>,\n ) => void\n }\n\ntype Handler<TSchema extends z.$ZodObject, TValue> = (\n value: TValue,\n ctx: UniFormContext<TSchema>,\n) => void | Promise<void>\n\ntype Condition<TSchema extends z.$ZodObject> = (\n values: z.infer<TSchema>,\n) => boolean\n\n/**\n * A type-safe form definition that lives outside React components.\n * Wraps a Zod schema and lets you attach typed `setOnChange` callbacks that fire\n * whenever a specific field's value changes.\n *\n * Callbacks receive the new field value (typed to the schema) and a\n * `UniFormContext` that provides all standard form methods plus `setFieldMeta`\n * for dynamic field overrides.\n *\n * @template TSchema - The Zod object schema that defines the form shape.\n * @template TRegistered - Union of field keys that already have a `setOnChange`\n * handler registered. Attempting to call `setOnChange` for a key in this set\n * produces a compile-time error, preventing silent handler replacement.\n *\n * @example\n * const addressForm = new UniForm(addressSchema)\n * .setOnChange('country', (value, ctx) => {\n * ctx.setFieldMeta('state', { hidden: value !== 'US' })\n * })\n *\n * // In component:\n * <AutoForm form={addressForm} onSubmit={handleSubmit} />\n */\nexport class UniForm<\n TSchema extends z.$ZodObject,\n TRegistered extends string = never,\n> {\n readonly schema: TSchema\n private readonly _handlers: Map<string, Handler<TSchema, unknown>>\n private readonly _conditions: Map<string, Condition<TSchema>>\n\n constructor(schema: TSchema) {\n this.schema = schema\n this._handlers = new Map()\n this._conditions = new Map()\n }\n\n /**\n * Set the typed onChange handler for a specific field.\n * Replaces any previously registered handler for that field — only one\n * handler per field is kept. This prevents accidental handler accumulation\n * when called inside a React render cycle.\n * Returns `this` for fluent chaining.\n */\n setOnChange<K extends Exclude<DeepKeys<z.infer<TSchema>>, TRegistered>>(\n field: K,\n handler: Handler<TSchema, DeepFieldValue<z.infer<TSchema>, K>>,\n ): UniForm<TSchema, TRegistered | K> {\n this._handlers.set(field, handler as Handler<TSchema, unknown>)\n return this as unknown as UniForm<TSchema, TRegistered | K>\n }\n\n /**\n * Attach a typed condition for a specific field.\n * The field is shown when the predicate returns `true`, hidden when `false`.\n * Composes with any `condition` set via the `fields` prop (UniForm takes precedence).\n * Returns `this` for fluent chaining.\n */\n setCondition<K extends DeepKeys<z.infer<TSchema>>>(\n field: K,\n predicate: Condition<TSchema>,\n ): this {\n this._conditions.set(field, predicate)\n return this\n }\n\n /** @internal Called by AutoForm to fire the handler registered for a field. */\n _fireHandler(\n field: string,\n value: unknown,\n ctx: UniFormContext<TSchema>,\n ): void | Promise<void> {\n return this._handlers.get(field)?.(value, ctx)\n }\n\n /** @internal Returns all field names that have registered onChange handlers. */\n _getWatchedFields(): string[] {\n return Array.from(this._handlers.keys())\n }\n\n /** @internal Returns a copy of the conditions map for AutoForm to inject into field meta. */\n _getConditions(): Map<string, Condition<TSchema>> {\n return new Map(this._conditions)\n }\n}\n\n/**\n * Creates a new `UniForm` instance for the given Zod object schema.\n */\nexport function createForm<TSchema extends z.$ZodObject>(\n schema: TSchema,\n): UniForm<TSchema>\n\n/**\n * Creates a `UniForm` directly from a `z.discriminatedUnion` schema.\n *\n * `AutoForm` automatically flattens the variant fields and attaches show/hide\n * conditions based on the discriminator value — no manual `.condition()` calls\n * needed. The union schema is used by `zodResolver` for strict per-variant\n * validation on submit.\n *\n * @example\n * const notificationForm = createForm(\n * z.discriminatedUnion('channel', [\n * z.object({ channel: z.literal('email'), email: z.string().email() }),\n * z.object({ channel: z.literal('sms'), phone: z.string() }),\n * ])\n * )\n */\nexport function createForm(\n schema: z.$ZodDiscriminatedUnion,\n): UniForm<z.$ZodObject>\n\nexport function createForm(\n schema: z.$ZodObject | z.$ZodDiscriminatedUnion,\n): UniForm<z.$ZodObject> {\n return new UniForm(schema as unknown as z.$ZodObject)\n}\n"]}