@cntyclub/ui-react 0.1.0 → 0.1.1

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/form.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/form/checkbox-group-field.tsx","../src/components/form/date-field.tsx","../src/components/form/date-range-field.tsx","../../../node_modules/.pnpm/@tanstack+store@0.11.0/node_modules/@tanstack/store/src/alien.ts","../../../node_modules/.pnpm/@tanstack+store@0.11.0/node_modules/@tanstack/store/src/atom.ts","../../../node_modules/.pnpm/@tanstack+store@0.11.0/node_modules/@tanstack/store/src/store.ts","../../../node_modules/.pnpm/@tanstack+pacer-lite@0.1.1/node_modules/@tanstack/pacer-lite/src/lite-throttler.ts","../../../node_modules/.pnpm/@tanstack+devtools-event-client@0.4.3/node_modules/@tanstack/devtools-event-client/src/plugin.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/EventClient.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/utils.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/ValidationLogic.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/standardSchemaValidator.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/metaHelper.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/FormApi.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/FieldApi.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/FormGroupApi.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/formOptions.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/FieldGroupApi.ts","../../../node_modules/.pnpm/@tanstack+form-core@1.33.0/node_modules/@tanstack/form-core/src/transform.ts","../../../node_modules/.pnpm/@tanstack+react-store@0.11.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-store/src/useSelector.ts","../../../node_modules/.pnpm/@tanstack+react-store@0.11.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-store/src/useStore.ts","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/useIsomorphicLayoutEffect.ts","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/useField.tsx","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/useUUID.ts","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/useFormId.ts","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/useFormGroup.tsx","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/useForm.tsx","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/useFieldGroup.tsx","../../../node_modules/.pnpm/@tanstack+react-form@1.33.0_react-dom@19.2.7_react@19.2.7__react@19.2.7/node_modules/@tanstack/react-form/src/createFormHook.tsx","../src/components/form/form-context.ts","../src/components/form/number-field.tsx","../src/components/form/select-field.tsx","../src/components/form/submit-button.tsx","../src/components/form/text-field.tsx","../src/components/form/form.tsx"],"names":["jsxs","jsx","Calendar","open","ReactiveFlags","link","unlink","propagate","checkDirty","shallowPropagate","version","effect","valueOrFn","fn: TFn","options: LiteThrottlerOptions<TFn>","opts","getErrorMapKey","normalizeError","useState","Field","Fragment","useMemo","LocalSubscribe","fieldContext","formContext","useAppForm","AppField","NumberField"],"mappings":"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","file":"form.js","sourcesContent":["\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport { Checkbox } from \"../ui/checkbox\";\nimport { CheckboxGroup } from \"../ui/checkbox-group\";\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\n\nexport function CheckboxGroupField({\n field,\n label,\n options,\n emptyMessage,\n description,\n}: {\n field: {\n name: string;\n state: {\n value: string[];\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: string[]) => void;\n };\n label: string;\n options: Array<{\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n }>;\n emptyMessage?: string;\n description?: string;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n\n {options.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">\n {emptyMessage ?? \"No options\"}\n </div>\n ) : (\n <CheckboxGroup\n value={field.state.value}\n onValueChange={(next) => field.handleChange(next)}\n className=\"gap-2 w-full\"\n >\n {options.map((opt) => {\n const isChecked = field.state.value.includes(opt.value);\n return (\n <button\n type=\"button\"\n key={opt.value}\n disabled={opt.disabled}\n className=\"flex w-full items-center gap-3 rounded-lg border px-3 py-2 transition-colors text-left bg-transparent disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer hover:bg-accent/50\"\n onClick={() => {\n if (opt.disabled) return;\n const next = isChecked\n ? field.state.value.filter((v) => v !== opt.value)\n : [...field.state.value, opt.value];\n field.handleChange(next);\n }}\n >\n <Checkbox\n value={opt.value}\n checked={isChecked}\n disabled={opt.disabled}\n readOnly\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {opt.label}\n </p>\n {opt.description ? (\n <p className=\"text-xs text-muted-foreground\">\n {opt.description}\n </p>\n ) : null}\n </div>\n </button>\n );\n })}\n </CheckboxGroup>\n )}\n\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n {description && <FieldDescription>{description}</FieldDescription>}\n </Field>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport { format } from \"date-fns\";\nimport { CalendarIcon } from \"lucide-react\";\n\nimport { Button } from \"../ui/button\";\nimport { Calendar } from \"../ui/calendar\";\nimport { Field, FieldError, FieldLabel } from \"../ui/field\";\nimport { Popover, PopoverPopup, PopoverTrigger } from \"../ui/popover\";\nimport { cn } from \"../../lib/utils/css\";\n\nexport function DateField({\n field,\n label,\n placeholder,\n}: {\n field: {\n name: string;\n state: {\n value: Date | undefined;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: Date | undefined) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n}) {\n const value = field.state.value;\n\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n const hasValue = Boolean(value);\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <Popover onOpenChangeComplete={(open) => !open && field.handleBlur()}>\n <PopoverTrigger\n render={\n <Button\n className={cn(\"w-full justify-start\", {\n \"text-muted-foreground\": !hasValue,\n })}\n variant=\"outline\"\n />\n }\n >\n <CalendarIcon aria-hidden=\"true\" />\n {value ? (\n format(value, \"LLL dd, y\")\n ) : (\n <span>{placeholder ?? \"Pick a date\"}</span>\n )}\n </PopoverTrigger>\n <PopoverPopup>\n <Calendar\n mode=\"single\"\n defaultMonth={value}\n selected={value}\n numberOfMonths={2}\n onSelect={(next) => {\n field.handleChange(next ?? undefined);\n }}\n autoFocus\n />\n </PopoverPopup>\n </Popover>\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport { format } from \"date-fns\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"../ui/button\";\nimport { Calendar } from \"../ui/calendar\";\nimport { Field, FieldError, FieldLabel } from \"../ui/field\";\nimport { Popover, PopoverPopup, PopoverTrigger } from \"../ui/popover\";\nimport { cn } from \"../../lib/utils/css\";\n\nexport function DateRangeField({\n field,\n label,\n placeholder,\n numberOfMonths = 2,\n}: {\n field: {\n name: string;\n state: {\n value: {\n from: Date | undefined;\n to: Date | undefined;\n };\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: {\n from: Date | undefined;\n to: Date | undefined;\n }) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n numberOfMonths?: number;\n}) {\n const value = field.state.value;\n\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n const hasValue = Boolean(value.from);\n const [open, setOpen] = useState(false);\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <Popover\n open={open}\n onOpenChange={setOpen}\n onOpenChangeComplete={(open) => !open && field.handleBlur()}\n >\n <PopoverTrigger\n render={\n <Button\n className={cn(\"w-full justify-start\", {\n \"text-muted-foreground\": !hasValue,\n })}\n variant=\"outline\"\n />\n }\n >\n <CalendarIcon aria-hidden=\"true\" />\n {value.from ? (\n value.to ? (\n <>\n {format(value.from, \"LLL dd, y\")} -{\" \"}\n {format(value.to, \"LLL dd, y\")}\n </>\n ) : (\n format(value.from, \"LLL dd, y\")\n )\n ) : (\n <span>{placeholder ?? \"Pick a date range\"}</span>\n )}\n </PopoverTrigger>\n <PopoverPopup>\n <Calendar\n mode=\"range\"\n defaultMonth={value.from}\n selected={value}\n resetOnSelect\n numberOfMonths={numberOfMonths}\n onSelect={(range) => {\n field.handleChange({\n from: range?.from ?? undefined,\n to: range?.to ?? undefined,\n });\n if (range?.from && range?.to) {\n setOpen(false);\n }\n }}\n autoFocus\n />\n </PopoverPopup>\n </Popover>\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","/* eslint-disable */\n// Adapted from Alien Signals\n// https://github.com/stackblitz/alien-signals/\n\nexport interface ReactiveNode {\n deps?: Link\n depsTail?: Link\n subs?: Link\n subsTail?: Link\n flags: ReactiveFlags\n}\n\nexport interface Link {\n version: number\n dep: ReactiveNode\n sub: ReactiveNode\n prevSub: Link | undefined\n nextSub: Link | undefined\n prevDep: Link | undefined\n nextDep: Link | undefined\n}\n\ninterface Stack<T> {\n value: T\n prev: Stack<T> | undefined\n}\n\nexport const enum ReactiveFlags {\n None = 0,\n Mutable = 1,\n Watching = 2,\n RecursedCheck = 4,\n Recursed = 8,\n Dirty = 16,\n Pending = 32,\n}\n/*@__NO_SIDE_EFFECTS__*/\nexport function createReactiveSystem({\n update,\n notify,\n unwatched,\n}: {\n update(sub: ReactiveNode): boolean\n notify(sub: ReactiveNode): void\n unwatched(sub: ReactiveNode): void\n}) {\n return {\n link,\n unlink,\n propagate,\n checkDirty,\n shallowPropagate,\n }\n\n function link(dep: ReactiveNode, sub: ReactiveNode, version: number): void {\n const prevDep = sub.depsTail\n if (prevDep !== undefined && prevDep.dep === dep) {\n return\n }\n const nextDep = prevDep !== undefined ? prevDep.nextDep : sub.deps\n if (nextDep !== undefined && nextDep.dep === dep) {\n nextDep.version = version\n sub.depsTail = nextDep\n return\n }\n const prevSub = dep.subsTail\n if (\n prevSub !== undefined &&\n prevSub.version === version &&\n prevSub.sub === sub\n ) {\n return\n }\n const newLink =\n (sub.depsTail =\n dep.subsTail =\n {\n version,\n dep,\n sub,\n prevDep,\n nextDep,\n prevSub,\n nextSub: undefined,\n })\n if (nextDep !== undefined) {\n nextDep.prevDep = newLink\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = newLink\n } else {\n sub.deps = newLink\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = newLink\n } else {\n dep.subs = newLink\n }\n }\n\n function unlink(link: Link, sub = link.sub): Link | undefined {\n const dep = link.dep\n const prevDep = link.prevDep\n const nextDep = link.nextDep\n const nextSub = link.nextSub\n const prevSub = link.prevSub\n if (nextDep !== undefined) {\n nextDep.prevDep = prevDep\n } else {\n sub.depsTail = prevDep\n }\n if (prevDep !== undefined) {\n prevDep.nextDep = nextDep\n } else {\n sub.deps = nextDep\n }\n if (nextSub !== undefined) {\n nextSub.prevSub = prevSub\n } else {\n dep.subsTail = prevSub\n }\n if (prevSub !== undefined) {\n prevSub.nextSub = nextSub\n } else if ((dep.subs = nextSub) === undefined) {\n unwatched(dep)\n }\n return nextDep\n }\n\n function propagate(link: Link): void {\n let next = link.nextSub\n let stack: Stack<Link | undefined> | undefined\n\n top: do {\n const sub = link.sub\n let flags = sub.flags\n\n if (\n !(\n flags &\n (ReactiveFlags.RecursedCheck |\n ReactiveFlags.Recursed |\n ReactiveFlags.Dirty |\n ReactiveFlags.Pending)\n )\n ) {\n sub.flags = flags | ReactiveFlags.Pending\n } else if (\n !(flags & (ReactiveFlags.RecursedCheck | ReactiveFlags.Recursed))\n ) {\n flags = ReactiveFlags.None\n } else if (!(flags & ReactiveFlags.RecursedCheck)) {\n sub.flags = (flags & ~ReactiveFlags.Recursed) | ReactiveFlags.Pending\n } else if (\n !(flags & (ReactiveFlags.Dirty | ReactiveFlags.Pending)) &&\n isValidLink(link, sub)\n ) {\n sub.flags = flags | (ReactiveFlags.Recursed | ReactiveFlags.Pending)\n flags &= ReactiveFlags.Mutable\n } else {\n flags = ReactiveFlags.None\n }\n\n if (flags & ReactiveFlags.Watching) {\n notify(sub)\n }\n\n if (flags & ReactiveFlags.Mutable) {\n const subSubs = sub.subs\n if (subSubs !== undefined) {\n const nextSub = (link = subSubs).nextSub\n if (nextSub !== undefined) {\n stack = { value: next, prev: stack }\n next = nextSub\n }\n continue\n }\n }\n\n if ((link = next!) !== undefined) {\n next = link.nextSub\n continue\n }\n\n while (stack !== undefined) {\n link = stack.value!\n stack = stack.prev\n if (link !== undefined) {\n next = link.nextSub\n continue top\n }\n }\n\n break\n } while (true)\n }\n\n function checkDirty(link: Link, sub: ReactiveNode): boolean {\n let stack: Stack<Link> | undefined\n let checkDepth = 0\n let dirty = false\n\n top: do {\n const dep = link.dep\n const flags = dep.flags\n\n if (sub.flags & ReactiveFlags.Dirty) {\n dirty = true\n } else if (\n (flags & (ReactiveFlags.Mutable | ReactiveFlags.Dirty)) ===\n (ReactiveFlags.Mutable | ReactiveFlags.Dirty)\n ) {\n if (update(dep)) {\n const subs = dep.subs!\n if (subs.nextSub !== undefined) {\n shallowPropagate(subs)\n }\n dirty = true\n }\n } else if (\n (flags & (ReactiveFlags.Mutable | ReactiveFlags.Pending)) ===\n (ReactiveFlags.Mutable | ReactiveFlags.Pending)\n ) {\n if (link.nextSub !== undefined || link.prevSub !== undefined) {\n stack = { value: link, prev: stack }\n }\n link = dep.deps!\n sub = dep\n ++checkDepth\n continue\n }\n\n if (!dirty) {\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue\n }\n }\n\n while (checkDepth--) {\n const firstSub = sub.subs!\n const hasMultipleSubs = firstSub.nextSub !== undefined\n if (hasMultipleSubs) {\n link = stack!.value\n stack = stack!.prev\n } else {\n link = firstSub\n }\n if (dirty) {\n if (update(sub)) {\n if (hasMultipleSubs) {\n shallowPropagate(firstSub)\n }\n sub = link.sub\n continue\n }\n dirty = false\n } else {\n sub.flags &= ~ReactiveFlags.Pending\n }\n sub = link.sub\n const nextDep = link.nextDep\n if (nextDep !== undefined) {\n link = nextDep\n continue top\n }\n }\n\n return dirty\n } while (true)\n }\n\n function shallowPropagate(link: Link): void {\n do {\n const sub = link.sub\n const flags = sub.flags\n if (\n (flags & (ReactiveFlags.Pending | ReactiveFlags.Dirty)) ===\n ReactiveFlags.Pending\n ) {\n sub.flags = flags | ReactiveFlags.Dirty\n if (\n (flags & (ReactiveFlags.Watching | ReactiveFlags.RecursedCheck)) ===\n ReactiveFlags.Watching\n ) {\n notify(sub)\n }\n }\n } while ((link = link.nextSub!) !== undefined)\n }\n\n function isValidLink(checkLink: Link, sub: ReactiveNode): boolean {\n let link = sub.depsTail\n while (link !== undefined) {\n if (link === checkLink) {\n return true\n }\n link = link.prevDep\n }\n return false\n }\n}\n","import { ReactiveFlags, createReactiveSystem } from './alien'\n\nimport type { ReactiveNode } from './alien'\nimport type {\n Atom,\n AtomOptions,\n Observer,\n ReadonlyAtom,\n Subscription,\n} from './types'\n\nexport function toObserver<T>(\n nextHandler?: Observer<T> | ((value: T) => void),\n errorHandler?: (error: any) => void,\n completionHandler?: () => void,\n): Observer<T> {\n const isObserver = typeof nextHandler === 'object'\n const self = isObserver ? nextHandler : undefined\n\n return {\n next: (isObserver ? nextHandler.next : nextHandler)?.bind(self),\n error: (isObserver ? nextHandler.error : errorHandler)?.bind(self),\n complete: (isObserver ? nextHandler.complete : completionHandler)?.bind(\n self,\n ),\n }\n}\n\ninterface InternalAtom<T> extends ReactiveNode {\n _snapshot: T\n _update: (getValue?: T | ((snapshot: T) => T)) => boolean\n get: () => T\n subscribe: (observerOrFn: Observer<T> | ((value: T) => void)) => Subscription\n}\n\nconst queuedEffects: Array<Effect | undefined> = []\nlet cycle = 0\nconst { link, unlink, propagate, checkDirty, shallowPropagate } =\n createReactiveSystem({\n update(atom: InternalAtom<any>): boolean {\n return atom._update()\n },\n // eslint-disable-next-line no-shadow\n notify(effect: Effect): void {\n queuedEffects[queuedEffectsLength++] = effect\n effect.flags &= ~ReactiveFlags.Watching\n },\n unwatched(atom: InternalAtom<any>): void {\n if (atom.depsTail !== undefined) {\n atom.depsTail = undefined\n atom.flags = ReactiveFlags.Mutable | ReactiveFlags.Dirty\n purgeDeps(atom)\n }\n },\n })\n\nlet notifyIndex = 0\nlet queuedEffectsLength = 0\nlet activeSub: ReactiveNode | undefined\nlet batchDepth = 0\n\nexport function batch(fn: () => void) {\n try {\n ++batchDepth\n fn()\n } finally {\n if (!--batchDepth) {\n flush()\n }\n }\n}\n\nfunction purgeDeps(sub: ReactiveNode) {\n const depsTail = sub.depsTail\n let dep = depsTail !== undefined ? depsTail.nextDep : sub.deps\n while (dep !== undefined) {\n dep = unlink(dep, sub)\n }\n}\n\nexport function flush(): void {\n if (batchDepth > 0) {\n return\n }\n while (notifyIndex < queuedEffectsLength) {\n // eslint-disable-next-line no-shadow\n const effect = queuedEffects[notifyIndex]!\n queuedEffects[notifyIndex++] = undefined\n effect.notify()\n }\n notifyIndex = 0\n queuedEffectsLength = 0\n}\n\ntype AsyncAtomState<TData, TError = unknown> =\n | { status: 'pending' }\n | { status: 'done'; data: TData }\n | { status: 'error'; error: TError }\n\nexport function createAsyncAtom<T>(\n getValue: () => Promise<T>,\n options?: AtomOptions<AsyncAtomState<T>>,\n): ReadonlyAtom<AsyncAtomState<T>> {\n const ref: { current?: InternalAtom<AsyncAtomState<T>> } = {}\n const atom = createAtom<AsyncAtomState<T>>(() => {\n getValue().then(\n (data) => {\n const internalAtom = ref.current!\n if (internalAtom._update({ status: 'done', data })) {\n const subs = internalAtom.subs\n if (subs !== undefined) {\n propagate(subs)\n shallowPropagate(subs)\n flush()\n }\n }\n },\n (error) => {\n const internalAtom = ref.current!\n if (internalAtom._update({ status: 'error', error })) {\n const subs = internalAtom.subs\n if (subs !== undefined) {\n propagate(subs)\n shallowPropagate(subs)\n flush()\n }\n }\n },\n )\n\n return { status: 'pending' }\n }, options)\n ref.current = atom as unknown as InternalAtom<AsyncAtomState<T>>\n\n return atom\n}\n\nexport function createAtom<T>(\n getValue: (prev?: NoInfer<T>) => T,\n options?: AtomOptions<T>,\n): ReadonlyAtom<T>\nexport function createAtom<T>(\n initialValue: T,\n options?: AtomOptions<T>,\n): Atom<T>\nexport function createAtom<T>(\n valueOrFn: T | ((prev?: T) => T),\n options?: AtomOptions<T>,\n): Atom<T> | ReadonlyAtom<T> {\n const isComputed = typeof valueOrFn === 'function'\n const getter = valueOrFn as (prev?: T) => T\n\n // Create plain object atom\n const atom: InternalAtom<T> = {\n _snapshot: isComputed ? undefined! : valueOrFn,\n\n subs: undefined,\n subsTail: undefined,\n deps: undefined,\n depsTail: undefined,\n flags: isComputed ? ReactiveFlags.None : ReactiveFlags.Mutable,\n\n get(): T {\n if (activeSub !== undefined) {\n link(atom, activeSub, cycle)\n }\n return atom._snapshot\n },\n\n subscribe(observerOrFn: Observer<T> | ((value: T) => void)) {\n const obs = toObserver(observerOrFn)\n const observed = { current: false }\n const e = effect(() => {\n atom.get()\n if (!observed.current) {\n observed.current = true\n } else {\n obs.next?.(atom._snapshot)\n }\n })\n\n return {\n unsubscribe: () => {\n e.stop()\n },\n }\n },\n _update(getValue?: T | ((snapshot: T) => T)): boolean {\n const prevSub = activeSub\n const compare = options?.compare ?? Object.is\n if (isComputed) {\n activeSub = atom\n ++cycle\n atom.depsTail = undefined\n } else if (getValue === undefined) {\n // Mutable atoms can be marked dirty by the reactive graph, but they should\n // never be recomputed without an explicit value/updater.\n return false\n }\n if (isComputed) {\n atom.flags = ReactiveFlags.Mutable | ReactiveFlags.RecursedCheck\n }\n try {\n const oldValue = atom._snapshot\n const newValue =\n typeof getValue === 'function'\n ? (getValue as (snapshot: T) => T)(oldValue)\n : getValue === undefined && isComputed\n ? getter(oldValue)\n : getValue!\n if (oldValue === undefined || !compare(oldValue, newValue)) {\n atom._snapshot = newValue\n return true\n }\n return false\n } finally {\n activeSub = prevSub\n if (isComputed) {\n atom.flags &= ~ReactiveFlags.RecursedCheck\n }\n purgeDeps(atom)\n }\n },\n }\n\n if (isComputed) {\n atom.flags = ReactiveFlags.Mutable | ReactiveFlags.Dirty\n atom.get = function (): T {\n const flags = atom.flags\n if (\n flags & ReactiveFlags.Dirty ||\n (flags & ReactiveFlags.Pending && checkDirty(atom.deps!, atom))\n ) {\n if (atom._update()) {\n const subs = atom.subs\n if (subs !== undefined) {\n shallowPropagate(subs)\n }\n }\n } else if (flags & ReactiveFlags.Pending) {\n atom.flags = flags & ~ReactiveFlags.Pending\n }\n if (activeSub !== undefined) {\n link(atom, activeSub, cycle)\n }\n return atom._snapshot\n }\n } else {\n ;(atom as unknown as Atom<T>).set = function (\n // eslint-disable-next-line no-shadow\n valueOrFn: T | ((prev: T) => T),\n ): void {\n if (atom._update(valueOrFn)) {\n const subs = atom.subs\n if (subs !== undefined) {\n propagate(subs)\n shallowPropagate(subs)\n flush()\n }\n }\n }\n }\n\n return atom as unknown as Atom<T> | ReadonlyAtom<T>\n}\n\ninterface Effect extends ReactiveNode {\n notify: () => void\n stop: () => void\n}\n\nfunction effect<T>(fn: () => T): Effect {\n const run = (): T => {\n const prevSub = activeSub\n activeSub = effectObj\n ++cycle\n effectObj.depsTail = undefined\n effectObj.flags = ReactiveFlags.Watching | ReactiveFlags.RecursedCheck\n try {\n return fn()\n } finally {\n activeSub = prevSub\n effectObj.flags &= ~ReactiveFlags.RecursedCheck\n purgeDeps(effectObj)\n }\n }\n const effectObj: Effect = {\n deps: undefined,\n depsTail: undefined,\n subs: undefined,\n subsTail: undefined,\n flags: ReactiveFlags.Watching | ReactiveFlags.RecursedCheck,\n\n notify(): void {\n const flags = this.flags\n if (\n flags & ReactiveFlags.Dirty ||\n (flags & ReactiveFlags.Pending && checkDirty(this.deps!, this))\n ) {\n run()\n } else {\n this.flags = ReactiveFlags.Watching\n }\n },\n\n stop(): void {\n this.flags = ReactiveFlags.None\n this.depsTail = undefined\n purgeDeps(this)\n },\n }\n\n run()\n\n return effectObj\n}\n","import { createAtom, toObserver } from './atom'\nimport type { Atom, Observer, Subscription } from './types'\n\nexport type StoreAction = (...args: Array<any>) => any\n\nexport type StoreActionMap = Record<string, StoreAction>\n\nexport type StoreActionsFactory<T, TActions extends StoreActionMap> = (store: {\n setState: Store<T>['setState']\n get: Store<T>['get']\n}) => TActions\n\ntype NonFunction<T> = T extends (...args: Array<any>) => any ? never : T\n\nexport class Store<T, TActions extends StoreActionMap = never> {\n private atom: Atom<T>\n public readonly actions!: TActions\n constructor(getValue: (prev?: NoInfer<T>) => T)\n constructor(initialValue: T)\n constructor(\n initialValue: NonFunction<T>,\n actionsFactory: StoreActionsFactory<T, TActions>,\n )\n constructor(\n valueOrFn: T | ((prev?: T) => T),\n actionsFactory?: StoreActionsFactory<T, TActions>,\n ) {\n // createAtom has overloads that return ReadonlyAtom<T> for functions and Atom<T> for values\n // Store always needs Atom<T> for setState, so we assert the return type\n this.atom = createAtom(\n valueOrFn as T | ((prev?: NoInfer<T>) => T),\n ) as Atom<T>\n\n // bind for safe destructuring\n this.get = this.get.bind(this)\n this.setState = this.setState.bind(this)\n this.subscribe = this.subscribe.bind(this)\n\n if (actionsFactory) {\n this.actions = actionsFactory(this)\n }\n }\n public setState(updater: (prev: T) => T) {\n this.atom.set(updater)\n }\n public get state() {\n return this.atom.get()\n }\n public get() {\n return this.state\n }\n public subscribe(\n observerOrFn: Observer<T> | ((value: T) => void),\n ): Subscription {\n return this.atom.subscribe(toObserver(observerOrFn))\n }\n}\n\nexport class ReadonlyStore<T> implements Omit<\n Store<T>,\n 'setState' | 'actions'\n> {\n private atom: Atom<T>\n constructor(getValue: (prev?: NoInfer<T>) => T)\n constructor(initialValue: T)\n constructor(valueOrFn: T | ((prev?: T) => T)) {\n // createAtom has overloads that return ReadonlyAtom<T> for functions and Atom<T> for values\n // Store always needs Atom<T> for setState, so we assert the return type\n this.atom = createAtom(\n valueOrFn as T | ((prev?: NoInfer<T>) => T),\n ) as Atom<T>\n }\n public get state() {\n return this.atom.get()\n }\n public get() {\n return this.state\n }\n public subscribe(\n observerOrFn: Observer<T> | ((value: T) => void),\n ): Subscription {\n return this.atom.subscribe(toObserver(observerOrFn))\n }\n}\n\nexport function createStore<T>(\n getValue: (prev?: NoInfer<T>) => T,\n): ReadonlyStore<T>\nexport function createStore<T>(initialValue: T): Store<T>\nexport function createStore<T, TActions extends StoreActionMap>(\n initialValue: NonFunction<T>,\n actions: StoreActionsFactory<T, TActions>,\n): Store<T, TActions>\nexport function createStore<T, TActions extends StoreActionMap>(\n valueOrFn: T | ((prev?: T) => T),\n actions?: StoreActionsFactory<T, TActions>,\n): Store<T, TActions> | Store<T> | ReadonlyStore<T> {\n if (typeof valueOrFn === 'function') {\n return new ReadonlyStore(valueOrFn as (prev?: NoInfer<T>) => T)\n }\n if (actions) {\n return new Store(valueOrFn as NonFunction<T>, actions)\n }\n return new Store(valueOrFn)\n}\n","import type { AnyFunction } from '@tanstack/pacer/types'\n\n/**\n * Options for configuring a lite throttled function\n */\nexport interface LiteThrottlerOptions<TFn extends AnyFunction = AnyFunction> {\n /**\n * Whether to execute on the leading edge of the timeout.\n * Defaults to true.\n */\n leading?: boolean\n /**\n * Callback function that is called after the function is executed\n */\n onExecute?: (args: Parameters<TFn>, throttler: LiteThrottler<TFn>) => void\n /**\n * Whether to execute on the trailing edge of the timeout.\n * Defaults to true.\n */\n trailing?: boolean\n /**\n * Time window in milliseconds during which the function can only be executed once.\n */\n wait: number\n}\n\n/**\n * A lightweight class that creates a throttled function.\n *\n * This is an alternative to the Throttler in the core @tanstack/pacer package, but is more\n * suitable for libraries and npm packages that need minimal overhead. Unlike the core Throttler,\n * this version does not use TanStack Store for state management, has no devtools integration,\n * and provides only essential throttling functionality.\n *\n * Throttling ensures a function is called at most once within a specified time window.\n * Unlike debouncing which waits for a pause in calls, throttling guarantees consistent\n * execution timing regardless of call frequency.\n *\n * Supports both leading and trailing edge execution:\n * - Leading: Execute immediately on first call (default: true)\n * - Trailing: Execute after wait period if called during throttle (default: true)\n *\n * Features:\n * - Zero dependencies - no external libraries required\n * - Minimal API surface - only essential methods (maybeExecute, flush, cancel)\n * - Simple state management - uses basic private properties instead of reactive stores\n * - Callback support for monitoring execution events\n * - Lightweight - designed for use in npm packages where bundle size matters\n *\n * @example\n * ```ts\n * const throttler = new LiteThrottler((scrollY: number) => {\n * updateScrollPosition(scrollY);\n * }, {\n * wait: 100,\n * onExecute: (args, throttler) => {\n * console.log('Updated scroll position:', args[0]);\n * }\n * });\n *\n * // Will execute at most once per 100ms\n * window.addEventListener('scroll', () => {\n * throttler.maybeExecute(window.scrollY);\n * });\n * ```\n */\nexport class LiteThrottler<TFn extends AnyFunction> {\n private timeoutId: NodeJS.Timeout | undefined\n private lastArgs: Parameters<TFn> | undefined\n private lastExecutionTime = 0\n private isPending = false\n\n constructor(\n public fn: TFn,\n public options: LiteThrottlerOptions<TFn>,\n ) {\n // Default both leading and trailing to true if neither is specified\n if (\n this.options.leading === undefined &&\n this.options.trailing === undefined\n ) {\n this.options.leading = true\n this.options.trailing = true\n }\n }\n\n /**\n * Attempts to execute the throttled function. The execution behavior depends on the throttler options:\n *\n * - If enough time has passed since the last execution (>= wait period):\n * - With leading=true: Executes immediately\n * - With leading=false: Waits for the next trailing execution\n *\n * - If within the wait period:\n * - With trailing=true: Schedules execution for end of wait period\n * - With trailing=false: Drops the execution\n */\n maybeExecute = (...args: Parameters<TFn>): void => {\n const now = Date.now()\n const timeSinceLastExecution = now - this.lastExecutionTime\n\n // Handle leading execution\n if (this.options.leading && timeSinceLastExecution >= this.options.wait) {\n this.execute(...args)\n } else {\n // Store the most recent arguments for potential trailing execution\n this.lastArgs = args\n\n // Set up trailing execution if not already scheduled\n if (!this.timeoutId && this.options.trailing) {\n const timeoutDuration = this.options.wait - timeSinceLastExecution\n this.isPending = true\n this.timeoutId = setTimeout(() => {\n if (this.lastArgs !== undefined) {\n this.execute(...this.lastArgs)\n }\n }, timeoutDuration)\n }\n }\n }\n\n private execute = (...args: Parameters<TFn>): void => {\n this.fn(...args)\n this.options.onExecute?.(args, this)\n this.lastExecutionTime = Date.now()\n this.clearTimeout()\n this.lastArgs = undefined\n this.isPending = false\n }\n\n /**\n * Processes the current pending execution immediately.\n * If there's a pending execution, it will be executed right away\n * and the timeout will be cleared.\n */\n flush = (): void => {\n if (this.isPending && this.lastArgs) {\n this.execute(...this.lastArgs)\n }\n }\n\n /**\n * Cancels any pending trailing execution and clears internal state.\n * If a trailing execution is scheduled, this will prevent that execution from occurring.\n */\n cancel = (): void => {\n this.clearTimeout()\n this.lastArgs = undefined\n this.isPending = false\n }\n\n private clearTimeout = (): void => {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId)\n this.timeoutId = undefined\n }\n }\n}\n\n/**\n * Creates a lightweight throttled function that limits how often the provided function can execute.\n *\n * This is an alternative to the throttle function in the core @tanstack/pacer package, but is more\n * suitable for libraries and npm packages that need minimal overhead. Unlike the core version,\n * this function creates a throttler with no external dependencies, devtools integration, or reactive state.\n *\n * Throttling ensures a function executes at most once within a specified time window,\n * regardless of how many times it is called. This is useful for rate-limiting\n * expensive operations or UI updates.\n *\n * @example\n * ```ts\n * const throttledScroll = liteThrottle(() => {\n * updateScrollIndicator();\n * }, { wait: 100 });\n *\n * // Will execute at most once per 100ms\n * window.addEventListener('scroll', throttledScroll);\n * ```\n *\n * @example\n * ```ts\n * // Leading edge execution - fires immediately then throttles\n * const throttledResize = liteThrottle(() => {\n * recalculateLayout();\n * }, { wait: 250, leading: true, trailing: false });\n * ```\n */\nexport function liteThrottle<TFn extends AnyFunction>(\n fn: TFn,\n options: LiteThrottlerOptions<TFn>,\n): (...args: Parameters<TFn>) => void {\n const throttler = new LiteThrottler(fn, options)\n return throttler.maybeExecute\n}\n","interface TanStackDevtoolsEvent<TEventName extends string, TPayload = any> {\n type: TEventName\n payload: TPayload\n pluginId?: string // Optional pluginId to filter events by plugin\n}\ndeclare global {\n var __TANSTACK_EVENT_TARGET__: EventTarget | null\n}\n\ntype AllDevtoolsEvents<TEventMap extends Record<string, any>> = {\n [Key in keyof TEventMap & string]: TanStackDevtoolsEvent<Key, TEventMap[Key]>\n}[keyof TEventMap & string]\n\nexport class EventClient<TEventMap extends Record<string, any>> {\n #enabled = true\n #pluginId: string\n #eventTarget: () => EventTarget\n #debug: boolean\n #queuedEvents: Array<TanStackDevtoolsEvent<string, any>>\n #connected: boolean\n #connectIntervalId: number | null\n #connectEveryMs: number\n #retryCount = 0\n #maxRetries = 5\n #connecting = false\n #failedToConnect = false\n #internalEventTarget: EventTarget | null = null\n\n #onConnected = () => {\n this.debugLog('Connected to event bus')\n this.#connected = true\n this.#connecting = false\n this.debugLog('Emitting queued events', this.#queuedEvents)\n this.#queuedEvents.forEach((event) => this.emitEventToBus(event))\n this.#queuedEvents = []\n this.stopConnectLoop()\n this.#eventTarget().removeEventListener(\n 'tanstack-connect-success',\n this.#onConnected,\n )\n }\n // fired off right away and then at intervals\n #retryConnection = () => {\n if (this.#retryCount < this.#maxRetries) {\n this.#retryCount++\n this.dispatchCustomEvent('tanstack-connect', {})\n\n return\n }\n this.#eventTarget().removeEventListener(\n 'tanstack-connect',\n this.#retryConnection,\n )\n this.#failedToConnect = true\n this.debugLog('Max retries reached, giving up on connection')\n this.stopConnectLoop()\n }\n\n // This is run to register connection handlers on first emit attempt\n #connectFunction = () => {\n if (this.#connecting) return\n this.#connecting = true\n this.#eventTarget().addEventListener(\n 'tanstack-connect-success',\n this.#onConnected,\n )\n this.#retryConnection()\n }\n\n constructor({\n pluginId,\n debug = false,\n enabled = true,\n reconnectEveryMs = 300,\n }: {\n pluginId: string\n debug?: boolean\n reconnectEveryMs?: number\n enabled?: boolean\n }) {\n this.#pluginId = pluginId\n this.#enabled = enabled\n this.#eventTarget = this.getGlobalTarget\n this.#debug = debug\n this.debugLog(' Initializing event subscription for plugin', this.#pluginId)\n this.#queuedEvents = []\n this.#connected = false\n this.#failedToConnect = false\n this.#connectIntervalId = null\n this.#connectEveryMs = reconnectEveryMs\n }\n\n private startConnectLoop() {\n // if connected, trying to connect, or the internalId is already set, do nothing\n if (this.#connectIntervalId !== null || this.#connected) return\n this.debugLog(`Starting connect loop (every ${this.#connectEveryMs}ms)`)\n\n this.#connectIntervalId = setInterval(\n this.#retryConnection,\n this.#connectEveryMs,\n ) as unknown as number\n }\n\n private stopConnectLoop() {\n this.#connecting = false\n\n if (this.#connectIntervalId === null) {\n return\n }\n clearInterval(this.#connectIntervalId)\n this.#connectIntervalId = null\n this.#queuedEvents = []\n this.debugLog('Stopped connect loop')\n }\n\n private debugLog(...args: Array<any>) {\n if (this.#debug) {\n console.log(`🌴 [tanstack-devtools:${this.#pluginId}-plugin]`, ...args)\n }\n }\n private getGlobalTarget() {\n // server one is the global event target\n if (\n typeof globalThis !== 'undefined' &&\n globalThis.__TANSTACK_EVENT_TARGET__\n ) {\n this.debugLog('Using global event target')\n return globalThis.__TANSTACK_EVENT_TARGET__\n }\n // CLient event target is the browser window object\n if (\n typeof window !== 'undefined' &&\n typeof window.addEventListener !== 'undefined'\n ) {\n this.debugLog('Using window as event target')\n\n return window\n }\n // Protect against non-web environments like react-native\n const eventTarget =\n typeof EventTarget !== 'undefined' ? new EventTarget() : undefined\n\n // For non-web environments like react-native\n if (\n typeof eventTarget === 'undefined' ||\n typeof eventTarget.addEventListener === 'undefined'\n ) {\n this.debugLog(\n 'No event mechanism available, running in non-web environment',\n )\n return {\n addEventListener: () => {},\n removeEventListener: () => {},\n dispatchEvent: () => false,\n }\n }\n\n this.debugLog('Using new EventTarget as fallback')\n return eventTarget\n }\n\n getPluginId() {\n return this.#pluginId\n }\n\n private dispatchCustomEventShim(eventName: string, detail: any) {\n try {\n const event = new Event(eventName, {\n detail: detail,\n } as any)\n this.#eventTarget().dispatchEvent(event)\n } catch (e) {\n this.debugLog('Failed to dispatch shim event')\n }\n }\n\n private dispatchCustomEvent(eventName: string, detail?: any) {\n try {\n this.#eventTarget().dispatchEvent(new CustomEvent(eventName, { detail }))\n } catch (e) {\n this.dispatchCustomEventShim(eventName, detail)\n }\n }\n\n private emitEventToBus(event: TanStackDevtoolsEvent<string, any>) {\n this.debugLog('Emitting event to client bus', event)\n this.dispatchCustomEvent('tanstack-dispatch-event', event)\n }\n\n createEventPayload<TEvent extends keyof TEventMap & string>(\n eventSuffix: TEvent,\n payload: TEventMap[TEvent],\n ) {\n return {\n type: `${this.#pluginId}:${eventSuffix}`,\n payload,\n pluginId: this.#pluginId,\n }\n }\n emit<TEvent extends keyof TEventMap & string>(\n eventSuffix: TEvent,\n payload: TEventMap[TEvent],\n ) {\n if (!this.#enabled) {\n this.debugLog(\n 'Event bus client is disabled, not emitting event',\n eventSuffix,\n payload,\n )\n return\n }\n if (this.#internalEventTarget) {\n this.debugLog(\n 'Emitting event to internal event target',\n eventSuffix,\n payload,\n )\n this.#internalEventTarget.dispatchEvent(\n new CustomEvent(`${this.#pluginId}:${eventSuffix}`, {\n detail: this.createEventPayload(eventSuffix, payload),\n }),\n )\n }\n\n if (this.#failedToConnect) {\n this.debugLog('Previously failed to connect, not emitting to bus')\n return\n }\n // wait to connect to the bus\n if (!this.#connected) {\n this.debugLog('Bus not available, will be pushed as soon as connected')\n this.#queuedEvents.push(this.createEventPayload(eventSuffix, payload))\n // start connection to event bus\n if (typeof CustomEvent !== 'undefined' && !this.#connecting) {\n this.#connectFunction()\n this.startConnectLoop()\n }\n return\n }\n // emit right now\n return this.emitEventToBus(this.createEventPayload(eventSuffix, payload))\n }\n\n on<TEvent extends keyof TEventMap & string>(\n eventSuffix: TEvent,\n cb: (event: TanStackDevtoolsEvent<TEvent, TEventMap[TEvent]>) => void,\n options?: {\n withEventTarget?: boolean\n },\n ) {\n const withEventTarget = options?.withEventTarget ?? false\n const eventName = `${this.#pluginId}:${eventSuffix}` as const\n if (withEventTarget) {\n if (!this.#internalEventTarget) {\n this.#internalEventTarget = new EventTarget()\n }\n this.#internalEventTarget.addEventListener(eventName, (e) => {\n cb((e as CustomEvent).detail)\n })\n }\n if (!this.#enabled) {\n this.debugLog(\n 'Event bus client is disabled, not registering event',\n eventName,\n )\n return () => {}\n }\n const handler = (e: Event) => {\n this.debugLog('Received event from bus', (e as CustomEvent).detail)\n cb((e as CustomEvent).detail)\n }\n this.#eventTarget().addEventListener(eventName, handler)\n this.debugLog('Registered event to bus', eventName)\n return () => {\n if (withEventTarget) {\n this.#internalEventTarget?.removeEventListener(eventName, handler)\n }\n this.#eventTarget().removeEventListener(eventName, handler)\n }\n }\n\n onAll(cb: (event: TanStackDevtoolsEvent<string, any>) => void) {\n if (!this.#enabled) {\n this.debugLog('Event bus client is disabled, not registering event')\n return () => {}\n }\n\n const handler = (e: Event) => {\n const event = (e as CustomEvent).detail\n\n cb(event)\n }\n this.#eventTarget().addEventListener('tanstack-devtools-global', handler)\n return () =>\n this.#eventTarget().removeEventListener(\n 'tanstack-devtools-global',\n handler,\n )\n }\n onAllPluginEvents(cb: (event: AllDevtoolsEvents<TEventMap>) => void) {\n if (!this.#enabled) {\n this.debugLog('Event bus client is disabled, not registering event')\n return () => {}\n }\n const handler = (e: Event) => {\n const event = (e as CustomEvent).detail\n if (this.#pluginId && event.pluginId !== this.#pluginId) {\n return\n }\n cb(event)\n }\n this.#eventTarget().addEventListener('tanstack-devtools-global', handler)\n return () =>\n this.#eventTarget().removeEventListener(\n 'tanstack-devtools-global',\n handler,\n )\n }\n}\n","import { EventClient } from '@tanstack/devtools-event-client'\n\nimport type { AnyFormOptions, AnyFormState } from './FormApi'\n\ntype ExtractEventNames<T> = T extends `${string}:${infer EventName}`\n ? EventName\n : never\n\nexport type BroadcastFormState = {\n id: string\n state: AnyFormState\n}\n\nexport type BroadcastFormApi = {\n id: string\n state: AnyFormState\n options: AnyFormOptions\n}\n\nexport type BroadcastFormSubmissionState =\n | {\n id: string\n submissionAttempt: number\n successful: false\n stage: 'validateAllFields' | 'validate'\n errors: any[]\n }\n | {\n id: string\n submissionAttempt: number\n successful: false\n stage: 'inflight'\n onError: unknown\n }\n | {\n id: string\n submissionAttempt: number\n successful: true\n }\n\nexport type BroadcastFormId = {\n id: string\n}\n\ntype EventMap = {\n 'form-state': BroadcastFormState\n 'form-api': BroadcastFormApi\n 'form-submission': BroadcastFormSubmissionState\n\n 'request-form-state': BroadcastFormId\n 'request-form-reset': BroadcastFormId\n 'request-form-force-submit': BroadcastFormId\n\n 'form-unmounted': BroadcastFormId\n}\n\nexport type EventClientEventMap = keyof EventMap\n\nexport type EventClientEventNames = ExtractEventNames<EventClientEventMap>\n\nclass FormEventClient extends EventClient<EventMap> {\n constructor() {\n super({\n pluginId: 'form-devtools',\n reconnectEveryMs: 1000,\n })\n }\n}\n\nexport const formEventClient = new FormEventClient()\n","import { liteThrottle } from '@tanstack/pacer-lite'\nimport { formEventClient } from './EventClient'\nimport { AnyFormGroupApi } from './FormGroupApi'\nimport type { ValidationLogicProps } from './ValidationLogic'\nimport type { FieldValidators } from './FieldApi'\nimport type { AnyFormApi, FormValidators } from './FormApi'\nimport type {\n GlobalFormValidationError,\n ValidationCause,\n ValidationError,\n ValidationSource,\n} from './types'\n\nexport type UpdaterFn<TInput, TOutput = TInput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput = TInput> =\n | TOutput\n | UpdaterFn<TInput, TOutput>\n\n/**\n * @private\n */\nexport function functionalUpdate<TInput, TOutput = TInput>(\n updater: Updater<TInput, TOutput>,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as UpdaterFn<TInput, TOutput>)(input)\n : updater\n}\n\n/**\n * Get a value from an object using a path, including dot notation.\n * @private\n */\nexport function getBy(obj: unknown, path: string | (string | number)[]): any {\n const pathObj = makePathArray(path)\n return pathObj.reduce((current: any, pathPart) => {\n if (current === null) return null\n if (typeof current !== 'undefined') {\n return current[pathPart]\n }\n return undefined\n }, obj)\n}\n\n/**\n * Set a value on an object using a path, including dot notation.\n * @private\n */\nexport function setBy(obj: any, _path: any, updater: Updater<any>) {\n const path = makePathArray(_path)\n\n function doSet(parent?: any): any {\n if (!path.length) {\n return functionalUpdate(updater, parent)\n }\n\n const key = path.shift()\n\n if (\n typeof key === 'string' ||\n (typeof key === 'number' && !Array.isArray(parent))\n ) {\n if (typeof parent === 'object') {\n if (parent === null) {\n parent = {}\n }\n return {\n ...parent,\n [key]: doSet(parent[key]),\n }\n }\n return {\n [key]: doSet(),\n }\n }\n\n if (Array.isArray(parent) && typeof key === 'number') {\n const prefix = parent.slice(0, key)\n return [\n ...(prefix.length ? prefix : new Array(key)),\n doSet(parent[key]),\n ...parent.slice(key + 1),\n ]\n }\n return [...new Array(key), doSet()]\n }\n\n return doSet(obj)\n}\n\n/**\n * Delete a field on an object using a path, including dot notation.\n * @private\n */\nexport function deleteBy(obj: any, _path: any) {\n const path = makePathArray(_path)\n\n function doDelete(parent: any): any {\n if (!parent) return\n if (path.length === 1) {\n const finalPath = path[0]!\n if (Array.isArray(parent) && typeof finalPath === 'number') {\n return parent.filter((_, i) => i !== finalPath)\n }\n const { [finalPath]: remove, ...rest } = parent\n return rest\n }\n\n const key = path.shift()\n\n if (\n typeof key === 'string' ||\n (typeof key === 'number' && !Array.isArray(parent))\n ) {\n if (typeof parent === 'object') {\n return {\n ...parent,\n [key]: doDelete(parent[key]),\n }\n }\n }\n\n if (typeof key === 'number') {\n if (Array.isArray(parent)) {\n if (key >= parent.length) {\n return parent\n }\n const prefix = parent.slice(0, key)\n return [\n ...(prefix.length ? prefix : new Array(key)),\n doDelete(parent[key]),\n ...parent.slice(key + 1),\n ]\n }\n }\n\n throw new Error('It seems we have created an infinite loop in deleteBy. ')\n }\n\n return doDelete(obj)\n}\n\n// Char codes used by the parser below.\nconst CC_DOT = 0x2e // '.'\nconst CC_OPEN = 0x5b // '['\nconst CC_CLOSE = 0x5d // ']'\nconst CC_ZERO = 0x30 // '0'\nconst CC_NINE = 0x39 // '9'\n\n/**\n * @private\n */\nexport function makePathArray(str: string | Array<string | number>) {\n if (Array.isArray(str)) {\n return [...str]\n }\n\n if (typeof str !== 'string') {\n throw new Error('Path must be a string.')\n }\n\n const len = str.length\n const result: Array<string | number> = []\n // Location of the first character of the in-progress segment in `str`.\n // The segment ends at the current `i` when we hit a separator.\n //\n // We strip an optional leading '[' so '[0]' parses as [0], not ['', 0].\n // Doing this up front keeps the loop's backwards compatibility handling simpler.\n let segStart = len > 0 && str.charCodeAt(0) === CC_OPEN ? 1 : 0\n // Whether the in-progress segment has been all ASCII digits so far.\n // Used together with the leading-zero check to decide if it should be\n // pushed as a number instead of a string.\n let allDigits = true\n // Tracks the previous character. Only necessary to preserve the\n // old behavior for malformed input.\n let prev = -1\n // Walk once. `i === len` is treated as a virtual final separator so the\n // flush block handles both mid-string segments and the last one.\n for (let i = segStart; i <= len; i++) {\n const char = i < len ? str.charCodeAt(i) : -1\n\n // Handle separators (including the virtual one at the end). Flush the in-progress segment.\n if (i === len || char === CC_DOT || char === CC_OPEN || char === CC_CLOSE) {\n const segLen = i - segStart\n if (segLen > 0) {\n // To treat the segment as a number...\n const treatAsNumber =\n // ...it must contain only digits...\n allDigits &&\n // ...and either be a single '0' or not start with '0'.\n (segLen === 1 || str.charCodeAt(segStart) !== CC_ZERO)\n\n const seg = str.slice(segStart, i)\n if (treatAsNumber) {\n const num = parseInt(seg, 10)\n // Up to 15 digits, parseInt is always lossless (the max\n // 15-digit decimal is below Number.MAX_SAFE_INTEGER). Beyond\n // that, verify by round-trip: if parseInt lost precision\n // (e.g., a 20-digit literal), fall back to the string so we\n // don't silently change the value.\n if (segLen <= 15 || String(num) === seg) {\n result.push(num)\n } else {\n result.push(seg)\n }\n } else {\n result.push(seg)\n }\n } else if (\n // This branch, which handles empty segments, only exists to preserve\n // the old behavior for malformed input.\n\n // Push the empty segment unless this is a \"phantom boundary\" the\n // old regex impl would have absorbed:\n // 1. `]` was always stripped — `prev === ']'` means the real\n // boundary already happened on the previous iteration.\n // 2. A leading `]` was stripped too (the leading `[` strip\n // above handles its counterpart for `[`).\n // 3. `..` and `[[` collapse to a single boundary.\n prev !== CC_CLOSE &&\n !(prev === -1 && char === CC_CLOSE) &&\n !(prev === char && (char === CC_DOT || char === CC_OPEN))\n ) {\n result.push('')\n }\n\n // Start a new segment.\n segStart = i + 1\n allDigits = true\n } else if (char < CC_ZERO || char > CC_NINE) {\n allDigits = false\n }\n\n prev = char\n }\n\n // If the input was effectively all phantom chars (e.g. ']', '[]',\n // '[]]'), the loop produces no segments. The old impl returned ['']\n // for these because.\n if (!result.length) result.push('')\n\n return result\n}\n\n/**\n * @private\n */\nexport function concatenatePaths(path1: string, path2: string): string {\n if (path1.length === 0) return path2\n if (path2.length === 0) return path1\n\n if (path2.startsWith('[')) {\n return path1 + path2\n }\n\n // In cases where parent and child withFieldGroup forms are both nested\n if (path2.startsWith('.')) {\n return path1 + path2\n }\n\n return `${path1}.${path2}`\n}\n\n/**\n * @private\n */\nexport function isNonEmptyArray(obj: any) {\n return !(Array.isArray(obj) && obj.length === 0)\n}\n\ninterface AsyncValidatorArrayPartialOptions<T> {\n validators?: T\n asyncDebounceMs?: number\n}\n\n/**\n * @private\n */\nexport interface AsyncValidator<T> {\n cause: ValidationCause\n validate: T\n debounceMs: number\n}\n\ninterface SyncValidatorArrayPartialOptions<T> {\n validators?: T\n}\n\n/**\n * @private\n */\nexport interface SyncValidator<T> {\n cause: ValidationCause\n validate: T\n}\n\n/**\n * @private\n */\nexport function getSyncValidatorArray<T>(\n cause: ValidationCause,\n options: SyncValidatorArrayPartialOptions<T> & {\n validationLogic?: any\n form?: any\n group?: any\n fieldName?: string\n },\n): T extends FieldValidators<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n ? Array<\n SyncValidator<\n | T['onChange']\n | T['onBlur']\n | T['onSubmit']\n | T['onMount']\n | T['onDynamic']\n >\n >\n : T extends FormValidators<any, any, any, any, any, any, any, any, any, any>\n ? Array<\n SyncValidator<\n | T['onChange']\n | T['onBlur']\n | T['onSubmit']\n | T['onMount']\n | T['onDynamic']\n >\n >\n : never {\n const runValidation = (\n props: Parameters<ValidationLogicProps['runValidation']>[0],\n ) => {\n return props.validators.filter(Boolean).map((validator) => {\n return {\n cause: validator!.cause,\n validate: validator!.fn,\n }\n })\n }\n\n return options.validationLogic({\n form: options.form,\n group: options.group,\n validators: options.validators,\n event: { type: cause, fieldName: options.fieldName, async: false },\n runValidation,\n })\n}\n\n/**\n * @private\n */\nexport function getAsyncValidatorArray<T>(\n cause: ValidationCause,\n options: AsyncValidatorArrayPartialOptions<T> & {\n validationLogic?: any\n form?: any\n group?: any\n fieldName?: string\n },\n): T extends FieldValidators<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n ? Array<\n AsyncValidator<\n | T['onChangeAsync']\n | T['onBlurAsync']\n | T['onSubmitAsync']\n | T['onDynamicAsync']\n >\n >\n : T extends FormValidators<any, any, any, any, any, any, any, any, any, any>\n ? Array<\n AsyncValidator<\n | T['onChangeAsync']\n | T['onBlurAsync']\n | T['onSubmitAsync']\n | T['onDynamicAsync']\n >\n >\n : never {\n const { asyncDebounceMs } = options\n const {\n onBlurAsyncDebounceMs,\n onChangeAsyncDebounceMs,\n onDynamicAsyncDebounceMs,\n } = (options.validators || {}) as\n | FieldValidators<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n | FormValidators<any, any, any, any, any, any, any, any, any, any>\n\n const defaultDebounceMs = asyncDebounceMs ?? 0\n\n const runValidation = (\n props: Parameters<ValidationLogicProps['runValidation']>[0],\n ) => {\n return props.validators.filter(Boolean).map((validator) => {\n const validatorCause = validator?.cause || cause\n\n let debounceMs = defaultDebounceMs\n\n switch (validatorCause) {\n case 'change':\n debounceMs = onChangeAsyncDebounceMs ?? defaultDebounceMs\n break\n case 'blur':\n debounceMs = onBlurAsyncDebounceMs ?? defaultDebounceMs\n break\n case 'dynamic':\n debounceMs = onDynamicAsyncDebounceMs ?? defaultDebounceMs\n break\n case 'submit':\n debounceMs = 0 // submit validators are always run immediately\n break\n default:\n break\n }\n\n if (cause === 'submit') {\n debounceMs = 0\n }\n\n return {\n cause: validatorCause,\n validate: validator!.fn,\n debounceMs: debounceMs,\n }\n })\n }\n\n return options.validationLogic({\n form: options.form,\n group: options.group,\n validators: options.validators,\n event: { type: cause, fieldName: options.fieldName, async: true },\n runValidation,\n })\n}\n\nexport const isGlobalFormValidationError = (\n error: unknown,\n): error is GlobalFormValidationError<unknown> => {\n return !!error && typeof error === 'object' && 'fields' in error\n}\n\nexport function evaluate<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n if (objA instanceof Date && objB instanceof Date) {\n return objA.getTime() === objB.getTime()\n }\n\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false\n for (const [k, v] of objA) {\n if (!objB.has(k) || !Object.is(v, objB.get(k))) return false\n }\n return true\n }\n\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false\n for (const v of objA) {\n if (!objB.has(v)) return false\n }\n return true\n }\n\n const keysA = Object.keys(objA)\n const keysB = Object.keys(objB)\n\n if (keysA.length !== keysB.length) {\n return false\n }\n\n // Two distinct non-plain, non-array objects with no own enumerable keys cannot\n // be compared by key iteration — the loop below would vacuously succeed and\n // treat them as equal regardless of their internal state. This covers Temporal\n // types, RegExp, and any class that exposes values only through getters.\n if (\n keysA.length === 0 &&\n !Array.isArray(objA) &&\n !Array.isArray(objB) &&\n (Object.getPrototypeOf(objA) !== Object.prototype ||\n Object.getPrototypeOf(objB) !== Object.prototype)\n ) {\n return false\n }\n\n for (const key of keysA) {\n // performs recursive search down the object tree\n\n if (\n !keysB.includes(key) ||\n !evaluate(objA[key as keyof T], objB[key as keyof T])\n ) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Determines the logic for determining the error source and value to set on the field meta within the form level sync/async validation.\n * @private\n */\nexport const determineFormLevelErrorSourceAndValue = ({\n newFormValidatorError,\n isPreviousErrorFromFormValidator,\n previousErrorValue,\n}: {\n newFormValidatorError: ValidationError\n isPreviousErrorFromFormValidator: boolean\n previousErrorValue: ValidationError\n}): {\n newErrorValue: ValidationError\n newSource: ValidationSource | undefined\n} => {\n // All falsy values are not considered errors\n if (newFormValidatorError) {\n return { newErrorValue: newFormValidatorError, newSource: 'form' }\n }\n\n // Clears form level error since it's now stale\n if (isPreviousErrorFromFormValidator) {\n return { newErrorValue: undefined, newSource: undefined }\n }\n\n // At this point, we have a preivous error which must have been set by the field validator, keep as is\n if (previousErrorValue) {\n return { newErrorValue: previousErrorValue, newSource: 'field' }\n }\n\n // No new or previous error, clear the error\n return { newErrorValue: undefined, newSource: undefined }\n}\n\n/**\n * Determines the logic for determining the error source and value to set on the field meta within the field level sync/async validation.\n * @private\n */\nexport const determineFieldLevelErrorSourceAndValue = ({\n formLevelError,\n fieldLevelError,\n}: {\n formLevelError: ValidationError\n fieldLevelError: ValidationError\n}): {\n newErrorValue: ValidationError\n newSource: ValidationSource | undefined\n} => {\n // At field level, we prioritize the field level error\n if (fieldLevelError) {\n return { newErrorValue: fieldLevelError, newSource: 'field' }\n }\n\n // If there is no field level error, and there is a form level error, we set the form level error\n if (formLevelError) {\n return { newErrorValue: formLevelError, newSource: 'form' }\n }\n\n return { newErrorValue: undefined, newSource: undefined }\n}\n\nexport function createFieldMap<T>(values: Readonly<T>): { [K in keyof T]: K } {\n const output: { [K in keyof T]: K } = {} as any\n\n for (const key in values) {\n output[key] = key\n }\n\n return output\n}\n\n/**\n * Merge the first parameter with the given overrides.\n * @private\n */\nexport function mergeOpts<T>(\n originalOpts: T | undefined | null,\n overrides: T,\n): T {\n if (originalOpts === undefined || originalOpts === null) {\n return overrides\n }\n\n return { ...originalOpts, ...overrides }\n}\n\n/*\n/ credit is due to https://github.com/lukeed/uuid for this code, with current npm\n/ attacks we didn't feel comfortable installing directly from npm. But big appreciation\n/ from the TanStack Form team <3.\n*/\n\nlet IDX = 256\nconst HEX: string[] = []\nlet BUFFER: number[] | undefined\n\nwhile (IDX--) {\n HEX[IDX] = (IDX + 256).toString(16).substring(1)\n}\n\nexport function uuid(): string {\n let i = 0\n let num: number\n let out = ''\n\n if (!BUFFER || IDX + 16 > 256) {\n BUFFER = new Array<number>(256)\n i = 256\n while (i--) {\n BUFFER[i] = (256 * Math.random()) | 0\n }\n i = 0\n IDX = 0\n }\n\n for (; i < 16; i++) {\n num = BUFFER[IDX + i] as number\n if (i === 6) out += HEX[(num & 15) | 64]\n else if (i === 8) out += HEX[(num & 63) | 128]\n else out += HEX[num]\n\n if (i & 1 && i > 1 && i < 11) out += '-'\n }\n\n IDX++\n return out\n}\n\nexport const throttleFormState = liteThrottle(\n (form: AnyFormApi) =>\n formEventClient.emit('form-state', {\n id: form.formId,\n state: form.store.state,\n }),\n {\n wait: 300,\n },\n)\n\n// Do not use a serialize and deserialize method like JSON.stringify/parse\n// as that will drop functions, dates, undefined, Infinity, NaN, etc.\nexport function deepCopy<T>(obj: T): T {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as any\n }\n\n if (Array.isArray(obj)) {\n const arrCopy = [] as any[]\n for (let i = 0; i < obj.length; i++) {\n arrCopy[i] = deepCopy(obj[i])\n }\n return arrCopy as any\n }\n\n if (obj instanceof Map) {\n const mapCopy = new Map()\n obj.forEach((value, key) => {\n mapCopy.set(key, deepCopy(value))\n })\n return mapCopy as any\n }\n\n if (obj instanceof Set) {\n const setCopy = new Set()\n obj.forEach((value) => {\n setCopy.add(deepCopy(value))\n })\n return setCopy as any\n }\n\n const copy: { [key: string]: any } = {}\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n copy[key] = deepCopy((obj as any)[key])\n }\n }\n return copy as T\n}\n\n/**\n * @private\n */\nexport function isFieldInGroup(groupName: string, fieldName: string) {\n return (\n fieldName === groupName ||\n fieldName.startsWith(`${groupName}.`) ||\n fieldName.startsWith(`${groupName}[`)\n )\n}\n","import type { AnyFormApi, FormValidators } from './FormApi'\nimport type { AnyFormGroupApi } from './FormGroupApi'\n\nexport interface ValidationLogicValidatorsFn {\n // TODO: Type this properly\n fn: FormValidators<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >[keyof FormValidators<any, any, any, any, any, any, any, any, any, any>]\n cause: 'change' | 'blur' | 'submit' | 'mount' | 'server' | 'dynamic'\n}\n\nexport interface ValidationLogicProps {\n // TODO: Type this properly\n form: AnyFormApi\n /**\n * Set when the validators being processed belong to a `FormGroupApi`.\n * Allows validation strategies (e.g. `revalidateLogic`) to gate their\n * behavior on the group's own state instead of the parent form's.\n */\n group?: AnyFormGroupApi\n // TODO: Type this properly\n validators:\n | FormValidators<any, any, any, any, any, any, any, any, any, any>\n | undefined\n | null\n event: {\n type: 'blur' | 'change' | 'submit' | 'mount' | 'server'\n fieldName?: string\n async: boolean\n }\n runValidation: (props: {\n validators: Array<ValidationLogicValidatorsFn | undefined>\n form: AnyFormApi\n }) => void\n}\n\ninterface RevalidateLogicProps {\n /**\n * @default 'submit'\n *\n * This is the mode that will be used before the form has been submitted.\n * It will run the validation logic on `submit` by default, but can be set to `change` or `blur`.\n */\n mode?: 'change' | 'blur' | 'submit'\n /**\n * @default 'change'\n *\n * This is the mode that will be used after the form has been submitted.\n * It will run the validation logic on `change` by default, but can be set to `blur` or `submit`.\n */\n modeAfterSubmission?: 'change' | 'blur' | 'submit'\n}\n\nexport type ValidationLogicFn = (props: ValidationLogicProps) => void\n\n/**\n * This forces a form's validation logic to be ran as if it were a React Hook Form validation logic.\n *\n * This means that it will only run the `onDynamic` validator, and it will not run any other validators and changes the validation\n * type based on the state of the form itself.\n *\n * When the form is not yet submitted, it will not run the validation logic.\n * When the form is submitted, it will run the validation logic on `change`\n */\nexport const revalidateLogic =\n ({\n mode = 'submit',\n modeAfterSubmission = 'change',\n }: RevalidateLogicProps = {}): ValidationLogicFn =>\n (props) => {\n const validatorNames = Object.keys(props.validators ?? {})\n if (validatorNames.length === 0) {\n // No validators is a valid case, just return\n return props.runValidation({\n validators: [],\n form: props.form,\n })\n }\n\n const dynamicValidator = {\n fn: props.event.async\n ? props.validators!['onDynamicAsync']\n : props.validators!['onDynamic'],\n cause: 'dynamic',\n } as const\n\n const validatorsToAdd = [] as ValidationLogicValidatorsFn[]\n\n // When validating a `FormGroupApi`'s own validators, gate on the group's\n // submission attempts so a group's `onDynamic` validator only flips into\n // `modeAfterSubmission` after that group itself has been submitted.\n // Otherwise (form-level validators), gate on the parent form.\n const submissionAttempts = props.group\n ? props.group.state.meta.submissionAttempts\n : props.form.state.submissionAttempts\n\n const modeToWatch = submissionAttempts === 0 ? mode : modeAfterSubmission\n\n if ([modeToWatch, 'submit'].includes(props.event.type)) {\n validatorsToAdd.push(dynamicValidator)\n }\n\n let defaultValidators = [] as ValidationLogicValidatorsFn[]\n\n defaultValidationLogic({\n ...props,\n runValidation: (vProps) => {\n defaultValidators = vProps.validators as ValidationLogicValidatorsFn[]\n },\n })\n\n if (validatorsToAdd.length === 0) {\n return props.runValidation({\n validators: defaultValidators,\n form: props.form,\n })\n }\n\n return props.runValidation({\n validators: [...defaultValidators, ...validatorsToAdd],\n form: props.form,\n })\n }\n\nexport const defaultValidationLogic: ValidationLogicFn = (props) => {\n // Handle case where no validators are provided\n if (!props.validators) {\n return props.runValidation({\n validators: [],\n form: props.form,\n })\n }\n\n const isAsync = props.event.async\n\n const onMountValidator = isAsync\n ? undefined\n : ({ fn: props.validators.onMount, cause: 'mount' } as const)\n\n const onChangeValidator = {\n fn: isAsync ? props.validators.onChangeAsync : props.validators.onChange,\n cause: 'change',\n } as const\n\n const onBlurValidator = {\n fn: isAsync ? props.validators.onBlurAsync : props.validators.onBlur,\n cause: 'blur',\n } as const\n\n const onSubmitValidator = {\n fn: isAsync ? props.validators.onSubmitAsync : props.validators.onSubmit,\n cause: 'submit',\n } as const\n\n // Allows us to clear onServer errors\n const onServerValidator = isAsync\n ? undefined\n : ({ fn: () => undefined, cause: 'server' } as const)\n\n switch (props.event.type) {\n case 'mount': {\n // Run mount validation\n return props.runValidation({\n validators: [onMountValidator],\n form: props.form,\n })\n }\n case 'submit': {\n // Run change, blur, submit, server validation\n return props.runValidation({\n validators: [\n onChangeValidator,\n onBlurValidator,\n onSubmitValidator,\n onServerValidator,\n ],\n form: props.form,\n })\n }\n case 'server': {\n // Run server validation\n return props.runValidation({\n validators: [],\n form: props.form,\n })\n }\n case 'blur': {\n // Run blur, server validation\n return props.runValidation({\n validators: [onBlurValidator, onServerValidator],\n form: props.form,\n })\n }\n case 'change': {\n // Run change, server validation\n return props.runValidation({\n validators: [onChangeValidator, onServerValidator],\n form: props.form,\n })\n }\n default: {\n throw new Error(`Unknown validation event type: ${props.event.type}`)\n }\n }\n}\n","import type { ValidationSource } from './types'\n\nexport type TStandardSchemaValidatorValue<\n TData,\n TSource extends ValidationSource = ValidationSource,\n> = {\n value: TData\n validationSource: TSource\n}\n\nexport type TStandardSchemaValidatorIssue<\n TSource extends ValidationSource = ValidationSource,\n> = TSource extends 'form'\n ? {\n form: Record<string, StandardSchemaV1Issue[]>\n fields: Record<string, StandardSchemaV1Issue[]>\n }\n : TSource extends 'field'\n ? StandardSchemaV1Issue[]\n : never\n\nfunction prefixSchemaToErrors(\n issues: readonly StandardSchemaV1Issue[],\n formValue: unknown,\n) {\n const schema = new Map<string, StandardSchemaV1Issue[]>()\n\n for (const issue of issues) {\n const issuePath = issue.path ?? []\n\n let currentFormValue = formValue\n let path = ''\n\n for (let i = 0; i < issuePath.length; i++) {\n const pathSegment = issuePath[i]\n if (pathSegment === undefined) continue\n\n const segment =\n typeof pathSegment === 'object' ? pathSegment.key : pathSegment\n\n // Standard Schema doesn't specify if paths should use numbers or stringified numbers for array access.\n // However, if we follow the path it provides and encounter an array, then we can assume it's intended for array access.\n const segmentAsNumber = Number(segment)\n if (Array.isArray(currentFormValue) && !Number.isNaN(segmentAsNumber)) {\n path += `[${segmentAsNumber}]`\n } else {\n path += (i > 0 ? '.' : '') + String(segment)\n }\n\n if (typeof currentFormValue === 'object' && currentFormValue !== null) {\n currentFormValue = currentFormValue[segment as never]\n } else {\n currentFormValue = undefined\n }\n }\n schema.set(path, (schema.get(path) ?? []).concat(issue))\n }\n\n return Object.fromEntries(schema)\n}\n\nconst transformFormIssues = <TSource extends ValidationSource>(\n issues: readonly StandardSchemaV1Issue[],\n formValue: unknown,\n): TStandardSchemaValidatorIssue<TSource> => {\n const schemaErrors = prefixSchemaToErrors(issues, formValue)\n return {\n form: schemaErrors,\n fields: schemaErrors,\n } as TStandardSchemaValidatorIssue<TSource>\n}\n\nexport const standardSchemaValidators = {\n validate<TSource extends ValidationSource = ValidationSource>(\n {\n value,\n validationSource,\n }: TStandardSchemaValidatorValue<unknown, TSource>,\n schema: StandardSchemaV1,\n ): TStandardSchemaValidatorIssue<TSource> | undefined {\n const result = schema['~standard'].validate(value)\n\n if (result instanceof Promise) {\n throw new Error('async function passed to sync validator')\n }\n\n if (!result.issues) return\n\n if (validationSource === 'field') {\n return result.issues as TStandardSchemaValidatorIssue<TSource>\n }\n return transformFormIssues<TSource>(result.issues, value)\n },\n async validateAsync<TSource extends ValidationSource>(\n {\n value,\n validationSource,\n }: TStandardSchemaValidatorValue<unknown, TSource>,\n schema: StandardSchemaV1,\n ): Promise<TStandardSchemaValidatorIssue<TSource> | undefined> {\n const result = await schema['~standard'].validate(value)\n\n if (!result.issues) return\n\n if (validationSource === 'field') {\n return result.issues as TStandardSchemaValidatorIssue<TSource>\n }\n return transformFormIssues<TSource>(result.issues, value)\n },\n}\n\nexport const isStandardSchemaValidator = (\n validator: unknown,\n): validator is StandardSchemaV1 =>\n !!validator && '~standard' in (validator as object)\n\n/**\n * The Standard Schema interface.\n */\nexport type StandardSchemaV1<Input = unknown, Output = Input> = {\n /**\n * The Standard Schema properties.\n */\n readonly '~standard': StandardSchemaV1Props<Input, Output>\n}\n\n/**\n * The Standard Schema properties interface.\n */\ninterface StandardSchemaV1Props<Input = unknown, Output = Input> {\n /**\n * The version number of the standard.\n */\n readonly version: 1\n /**\n * The vendor name of the schema library.\n */\n readonly vendor: string\n /**\n * Validates unknown input values.\n */\n readonly validate: (\n value: unknown,\n ) => StandardSchemaV1Result<Output> | Promise<StandardSchemaV1Result<Output>>\n /**\n * Inferred types associated with the schema.\n */\n readonly types?: StandardSchemaV1Types<Input, Output> | undefined\n}\n/**\n * The result interface of the validate function.\n */\ntype StandardSchemaV1Result<Output> =\n | StandardSchemaV1SuccessResult<Output>\n | StandardSchemaV1FailureResult\n/**\n * The result interface if validation succeeds.\n */\ninterface StandardSchemaV1SuccessResult<Output> {\n /**\n * The typed output value.\n */\n readonly value: Output\n /**\n * The non-existent issues.\n */\n readonly issues?: undefined\n}\n/**\n * The result interface if validation fails.\n */\ninterface StandardSchemaV1FailureResult {\n /**\n * The issues of failed validation.\n */\n readonly issues: ReadonlyArray<StandardSchemaV1Issue>\n}\n/**\n * The issue interface of the failure output.\n */\nexport interface StandardSchemaV1Issue {\n /**\n * The error message of the issue.\n */\n readonly message: string\n /**\n * The path of the issue, if any.\n */\n readonly path?:\n | ReadonlyArray<PropertyKey | StandardSchemaV1PathSegment>\n | undefined\n}\n/**\n * The path segment interface of the issue.\n */\ninterface StandardSchemaV1PathSegment {\n /**\n * The key representing a path segment.\n */\n readonly key: PropertyKey\n}\n/**\n * The Standard Schema types interface.\n */\ninterface StandardSchemaV1Types<Input = unknown, Output = Input> {\n /**\n * The input type of the schema.\n */\n readonly input: Input\n /**\n * The output type of the schema.\n */\n readonly output: Output\n}\n","import type {\n FormApi,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from './FormApi'\nimport type { DeepKeys } from './util-types'\nimport type { AnyFieldLikeMeta } from './types'\n\ntype ValueFieldMode = 'insert' | 'remove' | 'swap' | 'move'\n\nexport const defaultFieldMeta: AnyFieldLikeMeta = {\n isValidating: false,\n isTouched: false,\n isBlurred: false,\n isDirty: false,\n isPristine: true,\n isValid: true,\n isDefaultValue: true,\n errors: [],\n errorMap: {},\n errorSourceMap: {},\n _arrayVersion: 0,\n}\n\nexport function metaHelper<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta = never,\n>(\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n) {\n /**\n * Bump the `_arrayVersion` counter on the array field's meta. This\n * provides a cheap, structural signal that adapters can subscribe to in\n * order to trigger re-renders when the array is mutated in ways that\n * `length` alone cannot detect (e.g. swaps and moves).\n */\n function bumpArrayVersion(field: DeepKeys<TFormData>) {\n const currentMeta = formApi.getFieldMeta(field) ?? defaultFieldMeta\n formApi.setFieldMeta(field, {\n ...currentMeta,\n _arrayVersion: (currentMeta._arrayVersion || 0) + 1,\n })\n }\n\n /**\n * Handle the meta shift caused from moving a field from one index to another.\n */\n function handleArrayMove(\n field: DeepKeys<TFormData>,\n fromIndex: number,\n toIndex: number,\n ) {\n bumpArrayVersion(field)\n const affectedFields = getAffectedFields(field, fromIndex, 'move', toIndex)\n\n const startIndex = Math.min(fromIndex, toIndex)\n const endIndex = Math.max(fromIndex, toIndex)\n for (let i = startIndex; i <= endIndex; i++) {\n affectedFields.push(getFieldPath(field, i))\n }\n\n // Store the original field meta that will be reapplied at the destination index\n const fromFields = Object.keys(formApi.fieldInfo).reduce(\n (fieldMap, fieldKey) => {\n if (fieldKey.startsWith(getFieldPath(field, fromIndex))) {\n fieldMap.set(\n fieldKey as DeepKeys<TFormData>,\n formApi.getFieldMeta(fieldKey as DeepKeys<TFormData>),\n )\n }\n return fieldMap\n },\n new Map<DeepKeys<TFormData>, AnyFieldLikeMeta | undefined>(),\n )\n\n shiftMeta(affectedFields, fromIndex < toIndex ? 'up' : 'down')\n\n // Reapply the stored field meta at the destination index\n Object.keys(formApi.fieldInfo)\n .filter((fieldKey) => fieldKey.startsWith(getFieldPath(field, toIndex)))\n .forEach((fieldKey) => {\n const fromKey = fieldKey.replace(\n getFieldPath(field, toIndex),\n getFieldPath(field, fromIndex),\n ) as DeepKeys<TFormData>\n\n const fromMeta = fromFields.get(fromKey)\n if (fromMeta) {\n formApi.setFieldMeta(fieldKey as DeepKeys<TFormData>, fromMeta)\n }\n })\n }\n\n /**\n * Handle the meta shift from removing a field at the specified index.\n */\n function handleArrayRemove(field: DeepKeys<TFormData>, index: number) {\n bumpArrayVersion(field)\n const affectedFields = getAffectedFields(field, index, 'remove')\n\n shiftMeta(affectedFields, 'up')\n }\n\n /**\n * Handle the meta shift from swapping two fields at the specified indeces.\n */\n function handleArraySwap(\n field: DeepKeys<TFormData>,\n index: number,\n secondIndex: number,\n ) {\n bumpArrayVersion(field)\n const affectedFields = getAffectedFields(field, index, 'swap', secondIndex)\n\n affectedFields.forEach((fieldKey) => {\n if (!fieldKey.toString().startsWith(getFieldPath(field, index))) {\n return\n }\n\n const swappedKey = fieldKey\n .toString()\n .replace(\n getFieldPath(field, index),\n getFieldPath(field, secondIndex),\n ) as DeepKeys<TFormData>\n\n const [meta1, meta2] = [\n formApi.getFieldMeta(fieldKey),\n formApi.getFieldMeta(swappedKey),\n ]\n\n if (meta1) formApi.setFieldMeta(swappedKey, meta1)\n if (meta2) formApi.setFieldMeta(fieldKey, meta2)\n })\n }\n\n /**\n * Handle the meta shift from inserting a field at the specified index.\n */\n function handleArrayInsert(field: DeepKeys<TFormData>, insertIndex: number) {\n bumpArrayVersion(field)\n const affectedFields = getAffectedFields(field, insertIndex, 'insert')\n\n shiftMeta(affectedFields, 'down')\n\n affectedFields.forEach((fieldKey) => {\n if (fieldKey.toString().startsWith(getFieldPath(field, insertIndex))) {\n formApi.setFieldMeta(fieldKey, getEmptyFieldMeta())\n }\n })\n }\n\n function getFieldPath(\n field: DeepKeys<TFormData>,\n index: number,\n ): DeepKeys<TFormData> {\n return `${field}[${index}]` as DeepKeys<TFormData>\n }\n\n function getAffectedFields(\n field: DeepKeys<TFormData>,\n index: number,\n mode: ValueFieldMode,\n secondIndex?: number,\n ): DeepKeys<TFormData>[] {\n const affectedFieldKeys = [getFieldPath(field, index)]\n\n switch (mode) {\n case 'swap':\n affectedFieldKeys.push(getFieldPath(field, secondIndex!))\n break\n case 'move': {\n const [startIndex, endIndex] = [\n Math.min(index, secondIndex!),\n Math.max(index, secondIndex!),\n ]\n for (let i = startIndex; i <= endIndex; i++) {\n affectedFieldKeys.push(getFieldPath(field, i))\n }\n break\n }\n default: {\n const currentValue = formApi.getFieldValue(field)\n const fieldItems = Array.isArray(currentValue)\n ? (currentValue as Array<unknown>).length\n : 0\n for (let i = index + 1; i < fieldItems; i++) {\n affectedFieldKeys.push(getFieldPath(field, i))\n }\n break\n }\n }\n\n return Object.keys(formApi.fieldInfo).filter((fieldKey) =>\n affectedFieldKeys.some((key) => fieldKey.startsWith(key)),\n ) as DeepKeys<TFormData>[]\n }\n\n function updateIndex(\n fieldKey: string,\n direction: 'up' | 'down',\n ): DeepKeys<TFormData> {\n return fieldKey.replace(/\\[(\\d+)\\]/, (_, num) => {\n const currIndex = parseInt(num, 10)\n const newIndex =\n direction === 'up' ? currIndex + 1 : Math.max(0, currIndex - 1)\n return `[${newIndex}]`\n }) as DeepKeys<TFormData>\n }\n\n function shiftMeta(fields: DeepKeys<TFormData>[], direction: 'up' | 'down') {\n const sortedFields = direction === 'up' ? fields : [...fields].reverse()\n\n sortedFields.forEach((fieldKey) => {\n const nextFieldKey = updateIndex(fieldKey.toString(), direction)\n const nextFieldMeta = formApi.getFieldMeta(nextFieldKey)\n if (nextFieldMeta) {\n formApi.setFieldMeta(fieldKey, nextFieldMeta)\n } else {\n formApi.setFieldMeta(fieldKey, getEmptyFieldMeta())\n }\n })\n }\n\n const getEmptyFieldMeta = (): AnyFieldLikeMeta => defaultFieldMeta\n\n return {\n bumpArrayVersion,\n handleArrayMove,\n handleArrayRemove,\n handleArraySwap,\n handleArrayInsert,\n }\n}\n","import { batch, createStore } from '@tanstack/store'\nimport {\n deleteBy,\n determineFormLevelErrorSourceAndValue,\n evaluate,\n functionalUpdate,\n getAsyncValidatorArray,\n getBy,\n getSyncValidatorArray,\n isFieldInGroup,\n isGlobalFormValidationError,\n isNonEmptyArray,\n mergeOpts,\n setBy,\n throttleFormState,\n uuid,\n} from './utils'\nimport { defaultValidationLogic } from './ValidationLogic'\nimport {\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from './standardSchemaValidator'\nimport { defaultFieldMeta, metaHelper } from './metaHelper'\nimport { formEventClient } from './EventClient'\nimport type {\n AnyFieldLikeMeta,\n AnyFieldLikeMetaBase,\n ExtractGlobalFormError,\n FieldInfo,\n FormLikeAPI,\n FormValidationError,\n FormValidationErrorMap,\n GlobalFormValidationError,\n ListenerCause,\n UpdateMetaOptions,\n ValidationCause,\n ValidationError,\n ValidationErrorMap,\n ValidationErrorMapKeys,\n} from './types'\nimport type { ReadonlyStore, Store } from '@tanstack/store'\n\n// types\nimport type { ValidationLogicFn } from './ValidationLogic'\nimport type {\n StandardSchemaV1,\n StandardSchemaV1Issue,\n TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type { AnyFieldApi } from './FieldApi'\nimport type {\n AnyFormGroupApi,\n AnyFormGroupMeta,\n FormGroupState,\n} from './FormGroupApi'\nimport type {\n DeepKeys,\n DeepKeysOfType,\n DeepValue,\n RejectPromiseValidator,\n} from './util-types'\nimport type { Updater } from './utils'\n\n/**\n * @private\n */\n// TODO: Add the `Unwrap` type to the errors\ntype FormErrorMapFromValidator<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n> = Partial<\n Record<\n DeepKeys<TFormData>,\n ValidationErrorMap<\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n >\n>\n\nexport type FormValidateFn<TFormData> = (props: {\n value: TFormData\n formApi: FormApi<\n TFormData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => unknown\n\n/**\n * @private\n */\nexport type FormValidateOrFn<TFormData> =\n | FormValidateFn<TFormData>\n | StandardSchemaV1<TFormData, unknown>\n\nexport type UnwrapFormValidateOrFn<\n TValidateOrFn extends undefined | FormValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateFn<any>]\n ? ExtractGlobalFormError<ReturnType<TValidateOrFn>>\n : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n ? Record<string, StandardSchemaV1Issue[]>\n : undefined\n\n/**\n * @private\n */\nexport type FormValidateAsyncFn<TFormData> = (props: {\n value: TFormData\n formApi: FormApi<\n TFormData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n signal: AbortSignal\n}) => unknown | Promise<unknown>\n\nexport type FormValidator<TFormData, TType, TFn = unknown> = {\n validate(options: { value: TType }, fn: TFn): ValidationError\n validateAsync(\n options: { value: TType },\n fn: TFn,\n ): Promise<FormValidationError<TFormData>>\n}\n\ntype ValidationPromiseResult<TFormData> =\n | {\n fieldErrors: Partial<Record<DeepKeys<TFormData>, ValidationError>>\n errorMapKey: ValidationErrorMapKeys\n }\n | undefined\n\n/**\n * @private\n */\nexport type FormAsyncValidateOrFn<TFormData> =\n | FormValidateAsyncFn<TFormData>\n | StandardSchemaV1<TFormData, unknown>\n\nexport type UnwrapFormAsyncValidateOrFn<\n TValidateOrFn extends undefined | FormAsyncValidateOrFn<any>,\n> = [TValidateOrFn] extends [FormValidateAsyncFn<any>]\n ? ExtractGlobalFormError<Awaited<ReturnType<TValidateOrFn>>>\n : [TValidateOrFn] extends [StandardSchemaV1<any, any>]\n ? Record<string, StandardSchemaV1Issue[]>\n : undefined\n\nexport interface FormValidators<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n> {\n /**\n * Optional function that fires as soon as the component mounts.\n */\n onMount?: RejectPromiseValidator<TOnMount>\n /**\n * Optional function that checks the validity of your data whenever a value changes\n */\n onChange?: RejectPromiseValidator<TOnChange>\n /**\n * Optional onChange asynchronous counterpart to onChange. Useful for more complex validation logic that might involve server requests.\n */\n onChangeAsync?: TOnChangeAsync\n /**\n * The default time in milliseconds that if set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds.\n */\n onChangeAsyncDebounceMs?: number\n /**\n * Optional function that validates the form data when a field loses focus, returns a `FormValidationError`\n */\n onBlur?: RejectPromiseValidator<TOnBlur>\n /**\n * Optional onBlur asynchronous validation method for when a field loses focus returns a ` FormValidationError` or a promise of `Promise<FormValidationError>`\n */\n onBlurAsync?: TOnBlurAsync\n /**\n * The default time in milliseconds that if set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds.\n */\n onBlurAsyncDebounceMs?: number\n onSubmit?: RejectPromiseValidator<TOnSubmit>\n onSubmitAsync?: TOnSubmitAsync\n onDynamic?: RejectPromiseValidator<TOnDynamic>\n onDynamicAsync?: TOnDynamicAsync\n onDynamicAsyncDebounceMs?: number\n}\n\ninterface FormListenersPropsGroup<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta = never,\n> {\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n groupApi: AnyFormGroupApi\n}\n\ninterface FormListenersPropsField<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta = never,\n> {\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n fieldApi: AnyFieldApi\n}\n\nexport interface FormListeners<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta = never,\n> {\n onChange?: (\n props: FormListenersPropsField<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ) => void\n onChangeDebounceMs?: number\n\n onChangeGroup?: (\n props: FormListenersPropsGroup<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ) => void\n onChangeGroupDebounceMs?: number\n\n onBlur?: (props: {\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n fieldApi: AnyFieldApi\n }) => void\n onBlurDebounceMs?: number\n\n onMount?: (props: {\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n }) => void\n\n onSubmit?: (props: {\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n meta: TSubmitMeta\n }) => void\n\n onFieldUnmount?: (\n props: FormListenersPropsField<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ) => void\n\n onGroupUnmount?: (\n props: FormListenersPropsGroup<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ) => void\n}\n\n/**\n * An object representing the base properties of a form, unrelated to any validators\n */\nexport interface BaseFormOptions<in out TFormData, in out TSubmitMeta = never> {\n /**\n * Set initial values for your form.\n */\n defaultValues?: TFormData\n /**\n * onSubmitMeta, the data passed from the handleSubmit handler, to the onSubmit function props\n */\n onSubmitMeta?: TSubmitMeta\n}\n\n/**\n * An object representing the options for a form.\n */\nexport interface FormOptions<\n in out TFormData,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TSubmitMeta = never,\n> extends BaseFormOptions<TFormData, TSubmitMeta> {\n /**\n * The form name, used for devtools and identification\n */\n formId?: string\n /**\n * The default state for the form.\n */\n defaultState?: Partial<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n >\n /**\n * If true, always run async validation, even when sync validation has produced an error. Defaults to undefined.\n */\n asyncAlways?: boolean\n /**\n * Optional time in milliseconds if you want to introduce a delay before firing off an async action.\n */\n asyncDebounceMs?: number\n /**\n * If true, allows the form to be submitted in an invalid state i.e. canSubmit will remain true regardless of validation errors. Defaults to undefined.\n */\n canSubmitWhenInvalid?: boolean\n /**\n * A list of validators to pass to the form\n */\n validators?: FormValidators<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n\n validationLogic?: ValidationLogicFn\n\n /**\n * form level listeners\n */\n listeners?: FormListeners<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n\n /**\n * A function to be called when the form is submitted, what should happen once the user submits a valid form returns `any` or a promise `Promise<any>`\n */\n onSubmit?: (props: {\n value: TFormData\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n meta: TSubmitMeta\n }) => any | Promise<any>\n /**\n * Specify an action for scenarios where the user tries to submit an invalid form.\n */\n onSubmitInvalid?: (props: {\n value: TFormData\n formApi: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n meta: TSubmitMeta\n }) => void\n // Only runs in `core` for the first run on the Form, any additional transforms\n // need to be handled at framework runtime due to complexity of comparison check\n // and state merging\n //\n // Made intentionally type loose to avoid headaches with framework's individual\n // `useTransform` hooks\n transform?: (data: unknown) => unknown\n}\n\nexport type AnyFormOptions = FormOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * An object representing the validation metadata for a field. Not intended for public usage.\n */\nexport type ValidationMeta = {\n /**\n * An abort controller stored in memory to cancel previous async validation attempts.\n */\n lastAbortController: AbortController\n}\n\n/**\n * An object representing the current state of the form.\n */\nexport type BaseFormState<\n in out TFormData,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> = {\n /**\n * The current values of the form fields.\n */\n values: TFormData\n /**\n * The error map for the form itself.\n */\n errorMap: ValidationErrorMap<\n UnwrapFormValidateOrFn<TOnMount>,\n UnwrapFormValidateOrFn<TOnChange>,\n UnwrapFormAsyncValidateOrFn<TOnChangeAsync>,\n UnwrapFormValidateOrFn<TOnBlur>,\n UnwrapFormAsyncValidateOrFn<TOnBlurAsync>,\n UnwrapFormValidateOrFn<TOnSubmit>,\n UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>,\n UnwrapFormValidateOrFn<TOnDynamic>,\n UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>,\n UnwrapFormAsyncValidateOrFn<TOnServer>\n >\n /**\n * An internal mechanism used for keeping track of validation logic in a form.\n */\n validationMetaMap: Record<ValidationErrorMapKeys, ValidationMeta | undefined>\n /**\n * A record of field metadata for each field in the form, not including the derived properties, like `errors` and such\n */\n fieldMetaBase: Partial<Record<DeepKeys<TFormData>, AnyFieldLikeMetaBase>>\n /**\n * A record of submission lifecycle state for each mounted `FormGroupApi`,\n * keyed by the group's fully-qualified field name. Stored on the form so\n * group-level state can be read from `FormApi` without having to walk the\n * mounted group instances.\n */\n formGroupStateBase: Partial<Record<string, FormGroupState>>\n /**\n * A boolean indicating if the form is currently in the process of being submitted after `handleSubmit` is called.\n *\n * Goes back to `false` when submission completes for one of the following reasons:\n * - the validation step returned errors.\n * - the `onSubmit` function has completed.\n *\n * Note: if you're running async operations in your `onSubmit` function make sure to await them to ensure `isSubmitting` is set to `false` only when the async operation completes.\n *\n * This is useful for displaying loading indicators or disabling form inputs during submission.\n *\n */\n isSubmitting: boolean\n /**\n * A boolean indicating if the `onSubmit` function has completed successfully.\n *\n * Goes back to `false` at each new submission attempt.\n *\n * Note: you can use isSubmitting to check if the form is currently submitting.\n */\n isSubmitted: boolean\n /**\n * A boolean indicating if the form or any of its fields are currently validating.\n */\n isValidating: boolean\n /**\n * A counter for tracking the number of submission attempts.\n */\n submissionAttempts: number\n /**\n * A boolean indicating if the last submission was successful.\n */\n isSubmitSuccessful: boolean\n /**\n * @private, used to force a re-evaluation of the form state when options change\n */\n _force_re_eval?: boolean\n}\n\nexport type AnyBaseFormState = BaseFormState<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\nexport type DerivedFormState<\n in out TFormData,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n> = {\n /**\n * A boolean indicating if the form is currently validating.\n */\n isFormValidating: boolean\n /**\n * A boolean indicating if the form is valid.\n */\n isFormValid: boolean\n /**\n * The error array for the form itself.\n */\n errors: Array<\n NonNullable<\n | UnwrapFormValidateOrFn<TOnMount>\n | UnwrapFormValidateOrFn<TOnChange>\n | UnwrapFormAsyncValidateOrFn<TOnChangeAsync>\n | UnwrapFormValidateOrFn<TOnBlur>\n | UnwrapFormAsyncValidateOrFn<TOnBlurAsync>\n | UnwrapFormValidateOrFn<TOnSubmit>\n | UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>\n | UnwrapFormValidateOrFn<TOnDynamic>\n | UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>\n | UnwrapFormAsyncValidateOrFn<TOnServer>\n >\n >\n /**\n * A boolean indicating if any of the form fields are currently validating.\n */\n isFieldsValidating: boolean\n /**\n * A boolean indicating if all the form fields are valid. Evaluates `true` if there are no field errors.\n */\n isFieldsValid: boolean\n /**\n * A boolean indicating if any of the form fields have been touched.\n */\n isTouched: boolean\n /**\n * A boolean indicating if any of the form fields have been blurred.\n */\n isBlurred: boolean\n /**\n * A boolean indicating if any of the form's fields' values have been modified by the user. Evaluates `true` if the user have modified at least one of the fields. Opposite of `isPristine`.\n */\n isDirty: boolean\n /**\n * A boolean indicating if none of the form's fields' values have been modified by the user. Evaluates `true` if the user have not modified any of the fields. Opposite of `isDirty`.\n */\n isPristine: boolean\n /**\n * A boolean indicating if all of the form's fields are the same as default values.\n */\n isDefaultValue: boolean\n /**\n * A boolean indicating if the form and all its fields are valid. Evaluates `true` if there are no errors.\n */\n isValid: boolean\n /**\n * A boolean indicating if the form can be submitted based on its current state.\n */\n canSubmit: boolean\n /**\n * A record of field metadata for each field in the form.\n */\n fieldMeta: Partial<Record<DeepKeys<TFormData>, AnyFieldLikeMeta>>\n}\n\nexport interface FormState<\n in out TFormData,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n>\n extends\n BaseFormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >,\n DerivedFormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n > {}\n\nexport type AnyFormState = FormState<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\nfunction getDefaultFormState<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n>(\n defaultState: Partial<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n >,\n): BaseFormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n> {\n return {\n values: defaultState.values ?? ({} as never),\n errorMap: defaultState.errorMap ?? {},\n fieldMetaBase: defaultState.fieldMetaBase ?? ({} as never),\n formGroupStateBase: defaultState.formGroupStateBase ?? {},\n isSubmitted: defaultState.isSubmitted ?? false,\n isSubmitting: defaultState.isSubmitting ?? false,\n isValidating: defaultState.isValidating ?? false,\n submissionAttempts: defaultState.submissionAttempts ?? 0,\n isSubmitSuccessful: defaultState.isSubmitSuccessful ?? false,\n validationMetaMap: defaultState.validationMetaMap ?? {\n onChange: undefined,\n onBlur: undefined,\n onSubmit: undefined,\n onMount: undefined,\n onServer: undefined,\n onDynamic: undefined,\n },\n }\n}\n\n/**\n * @public\n *\n * A type representing the Form API with all generics set to `any` for convenience.\n */\nexport type AnyFormApi = FormApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\ninterface ValidateOpts<TFormData> {\n // Useful in FormGroup where validation doesn't update form error map\n dontUpdateFormErrorMap?: boolean\n // Filter which field names to validate, useful for FormGroup validation to filter out fields that don't start with the FormGroup name\n filterFieldNames?: (fieldName: DeepKeys<TFormData>) => boolean\n // When form-level validators are run on behalf of a `FormGroupApi` (e.g.\n // because a field inside that group is revalidating), pass the group so\n // strategies like `revalidateLogic` can gate on the group's own\n // `submissionAttempts` instead of the parent form's.\n group?: AnyFormGroupApi\n}\n\n/**\n * We cannot use methods and must use arrow functions. Otherwise, our React adapters\n * will break due to loss of the method when using spread.\n */\n\n/**\n * A class representing the Form API. It handles the logic and interactions with the form state.\n *\n * Normally, you will not need to create a new `FormApi` instance directly. Instead, you will use a framework\n * hook/function like `useForm` or `createForm` to create a new instance for you that uses your framework's reactivity model.\n * However, if you need to create a new instance manually, you can do so by calling the `new FormApi` constructor.\n */\nexport class FormApi<\n in out TFormData,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TSubmitMeta = never,\n> implements FormLikeAPI<TFormData, TSubmitMeta> {\n /**\n * The options for the form.\n */\n options: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n > = {}\n\n baseStore!: Store<\n BaseFormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n >\n fieldMetaDerived: Store<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >['fieldMeta']\n >\n /**\n * A derived store of every mounted `FormGroupApi`'s `meta`, keyed by\n * group name. Mirrors `fieldMetaDerived` for fields: per-group `meta`\n * is computed once on the form (from `baseStore.formGroupStateBase`,\n * `fieldMetaDerived`, and the registered `formGroupApis`) so reads\n * from a `FormGroupApi.store` instance stay minimal.\n */\n formGroupMetaDerived!: ReadonlyStore<Record<string, AnyFormGroupMeta>>\n store: ReadonlyStore<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n >\n /**\n * A record of field information for each field in the form.\n */\n fieldInfo: Partial<Record<DeepKeys<TFormData>, FieldInfo<TFormData>>> = {}\n /**\n * The set of currently-mounted `FormGroupApi` instances belonging to\n * this form. Used by `FieldApi.validate` to cascade field-level changes\n * into the validators of any group that encompasses the field.\n */\n formGroupApis: Set<AnyFormGroupApi> = new Set()\n get state() {\n return this.store.state\n }\n\n /**\n * @private\n */\n timeoutIds: {\n validations: Record<ValidationCause, ReturnType<typeof setTimeout> | null>\n listeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n formListeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n }\n /**\n * @private\n */\n _formId: string\n /**\n * @private\n */\n private _devtoolsSubmissionOverride: boolean\n\n /**\n * Constructs a new `FormApi` instance with the given form options.\n */\n constructor(\n opts?: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ) {\n this.timeoutIds = {\n validations: {} as Record<ValidationCause, never>,\n listeners: {} as Record<ListenerCause, never>,\n formListeners: {} as Record<ListenerCause, never>,\n }\n\n this._formId = opts?.formId ?? uuid()\n\n this._devtoolsSubmissionOverride = false\n\n let baseStoreVal: BaseFormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n > = getDefaultFormState({\n ...(opts?.defaultState as any),\n values: opts?.defaultValues ?? opts?.defaultState?.values,\n isFormValid: true,\n })\n\n if (opts?.transform) {\n baseStoreVal = (\n opts.transform({ state: baseStoreVal }) as { state: unknown }\n ).state as never\n for (const errKey of Object.keys(baseStoreVal.errorMap)) {\n const errKeyMap = baseStoreVal.errorMap[errKey as never] as\n | GlobalFormValidationError<any>\n | undefined\n if (\n errKeyMap === undefined ||\n !isGlobalFormValidationError(errKeyMap)\n ) {\n continue\n }\n\n for (const fieldName of Object.keys(errKeyMap.fields)) {\n const fieldErr = errKeyMap.fields[fieldName]\n if (fieldErr === undefined) {\n continue\n }\n const existingFieldMeta = baseStoreVal.fieldMetaBase[\n fieldName as never\n ] as AnyFieldLikeMetaBase | undefined\n baseStoreVal.fieldMetaBase[fieldName as never] = {\n isTouched: false,\n isValidating: false,\n isBlurred: false,\n isDirty: false,\n _arrayVersion: 0,\n ...(existingFieldMeta ?? {}),\n errorSourceMap: {\n ...(existingFieldMeta?.['errorSourceMap'] ?? {}),\n onChange: 'form',\n },\n errorMap: {\n ...(existingFieldMeta?.['errorMap'] ?? {}),\n [errKey as never]: fieldErr,\n },\n } satisfies AnyFieldLikeMetaBase as never\n }\n }\n }\n\n this.baseStore = createStore(baseStoreVal) as never\n\n let prevBaseStore:\n | BaseFormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n | undefined = undefined\n\n this.fieldMetaDerived = createStore(\n (prevVal: Record<DeepKeys<TFormData>, AnyFieldLikeMeta> | undefined) => {\n const currBaseStore = this.baseStore.get()\n\n let originalMetaCount = 0\n\n const fieldMeta: FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >['fieldMeta'] = {}\n\n for (const fieldName of Object.keys(\n currBaseStore.fieldMetaBase,\n ) as Array<keyof typeof currBaseStore.fieldMetaBase>) {\n const currBaseMeta = currBaseStore.fieldMetaBase[\n fieldName as never\n ] as AnyFieldLikeMetaBase\n\n const prevBaseMeta = prevBaseStore?.fieldMetaBase[\n fieldName as never\n ] as AnyFieldLikeMetaBase | undefined\n\n const prevFieldInfo =\n prevVal?.[fieldName as never as keyof typeof prevVal]\n\n const curFieldVal = getBy(currBaseStore.values, fieldName)\n\n let fieldErrors = prevFieldInfo?.errors\n if (\n !prevBaseMeta ||\n currBaseMeta.errorMap !== prevBaseMeta.errorMap\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n fieldErrors = Object.values(currBaseMeta.errorMap ?? {}).filter(\n (val) => val !== undefined,\n )\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const fieldInstance = this.getFieldInfo(fieldName)?.instance\n\n if (!fieldInstance || !fieldInstance.options.disableErrorFlat) {\n fieldErrors = fieldErrors.flat(1)\n }\n }\n\n // As primitives, we don't need to aggressively persist the same referential value for performance reasons\n const isFieldValid = !isNonEmptyArray(fieldErrors)\n const isFieldPristine = !currBaseMeta.isDirty\n const isDefaultValue = evaluate(\n curFieldVal,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.getFieldInfo(fieldName)?.instance?.options.defaultValue ??\n getBy(this.options.defaultValues, fieldName),\n )\n\n if (\n prevFieldInfo &&\n prevFieldInfo.isPristine === isFieldPristine &&\n prevFieldInfo.isValid === isFieldValid &&\n prevFieldInfo.isDefaultValue === isDefaultValue &&\n prevFieldInfo.errors === fieldErrors &&\n currBaseMeta === prevBaseMeta\n ) {\n fieldMeta[fieldName] = prevFieldInfo\n originalMetaCount++\n continue\n }\n\n fieldMeta[fieldName] = {\n ...currBaseMeta,\n errors: fieldErrors ?? [],\n isPristine: isFieldPristine,\n isValid: isFieldValid,\n isDefaultValue: isDefaultValue,\n } satisfies AnyFieldLikeMeta as AnyFieldLikeMeta\n }\n\n if (!Object.keys(currBaseStore.fieldMetaBase).length) return fieldMeta\n\n if (\n prevVal &&\n originalMetaCount === Object.keys(currBaseStore.fieldMetaBase).length\n ) {\n return prevVal\n }\n\n prevBaseStore = this.baseStore.get()\n\n return fieldMeta\n },\n ) as never\n\n this.formGroupMetaDerived = createStore<Record<string, AnyFormGroupMeta>>(\n (prevVal) => {\n const currBaseStore = this.baseStore.get()\n const currFieldMeta = this.fieldMetaDerived.get() as Record<\n string,\n AnyFieldLikeMeta | undefined\n >\n\n const result: Record<string, AnyFormGroupMeta> = {}\n\n for (const group of this.formGroupApis) {\n const groupName = group.name as string\n const lifecycle =\n currBaseStore.formGroupStateBase[groupName] ??\n ({\n isSubmitted: false,\n isSubmitting: false,\n isValidating: false,\n submissionAttempts: 0,\n isSubmitSuccessful: false,\n } as FormGroupState)\n\n // The group's own field-meta entry (its `errorMap` is where the\n // group's own validators write via `setFieldMeta`).\n const ownFieldMeta = currFieldMeta[groupName] as\n | AnyFieldLikeMeta\n | undefined\n\n // Aggregate validity / interaction flags across descendant fields\n // (excluding the group's own self-entry — its validity is tracked\n // separately via `isGroupValid`).\n let isFieldsValidating = false\n let isFieldsValid = true\n let aggIsTouched = false\n let aggIsBlurred = false\n let aggIsDefaultValue = true\n let aggIsDirty = false\n for (const fieldName in currFieldMeta) {\n if (fieldName === groupName) continue\n if (!isFieldInGroup(groupName, fieldName)) continue\n const m = currFieldMeta[fieldName]\n if (!m) continue\n if (m.isValidating) isFieldsValidating = true\n if (!m.isValid) isFieldsValid = false\n if (m.isTouched) aggIsTouched = true\n if (m.isBlurred) aggIsBlurred = true\n if (!m.isDefaultValue) aggIsDefaultValue = false\n if (m.isDirty) aggIsDirty = true\n }\n const isPristine = !aggIsDirty\n const isValidating = !!isFieldsValidating || lifecycle.isValidating\n\n // Group's own errors derived from `ownFieldMeta.errorMap`. Mirrors\n // the per-instance reduction that previously lived in\n // `FormGroupApi.store`. Standard-schema group validators may\n // return `{ group, fields }`; we only surface the `group` portion\n // here (the `fields` portion is fanned out onto child fields by\n // `distributeFieldErrors`).\n const errorMap = ownFieldMeta?.errorMap ?? {}\n const errorSourceMap = ownFieldMeta?.errorSourceMap ?? {}\n const hasOnMountError = Boolean(\n errorMap.onMount ||\n Object.entries(currFieldMeta).some(\n ([fieldName, field]) =>\n field &&\n fieldName !== groupName &&\n isFieldInGroup(groupName, fieldName) &&\n field.errorMap.onMount,\n ),\n )\n const prevGroupMeta = prevVal?.[groupName]\n let errors = prevGroupMeta?.errors ?? []\n if (\n !prevGroupMeta ||\n (prevGroupMeta as unknown as { __srcErrorMap?: unknown })\n .__srcErrorMap !== errorMap\n ) {\n errors = Object.values(errorMap).reduce<unknown[]>((acc, curr) => {\n if (curr === undefined) return acc\n if (\n curr &&\n typeof curr === 'object' &&\n 'fields' in (curr as object)\n ) {\n const groupErr = (curr as { group?: unknown }).group\n if (groupErr !== undefined) acc.push(groupErr)\n return acc\n }\n acc.push(curr)\n return acc\n }, [])\n }\n\n const isGroupValid = errors.length === 0\n const isValid = isFieldsValid && isGroupValid\n const submitInvalid = group.options.canSubmitWhenInvalid ?? false\n const canSubmit =\n (lifecycle.submissionAttempts === 0 &&\n !aggIsTouched &&\n !hasOnMountError) ||\n (!isValidating && !lifecycle.isSubmitting && isValid) ||\n submitInvalid\n\n // Reuse previous identity when shallow-equal — keeps subscribers\n // from re-rendering when nothing meaningful changed.\n if (\n prevGroupMeta &&\n prevGroupMeta.errorMap === errorMap &&\n prevGroupMeta.errorSourceMap === errorSourceMap &&\n prevGroupMeta.errors === errors &&\n prevGroupMeta.isFieldsValidating === isFieldsValidating &&\n prevGroupMeta.isFieldsValid === isFieldsValid &&\n prevGroupMeta.isGroupValid === isGroupValid &&\n prevGroupMeta.isValid === isValid &&\n prevGroupMeta.canSubmit === canSubmit &&\n prevGroupMeta.isTouched === aggIsTouched &&\n prevGroupMeta.isBlurred === aggIsBlurred &&\n prevGroupMeta.isPristine === isPristine &&\n prevGroupMeta.isDefaultValue === aggIsDefaultValue &&\n prevGroupMeta.isDirty === aggIsDirty &&\n prevGroupMeta.isValidating === isValidating &&\n prevGroupMeta.isSubmitting === lifecycle.isSubmitting &&\n prevGroupMeta.isSubmitted === lifecycle.isSubmitted &&\n prevGroupMeta.submissionAttempts === lifecycle.submissionAttempts &&\n prevGroupMeta.isSubmitSuccessful === lifecycle.isSubmitSuccessful\n ) {\n result[groupName] = prevGroupMeta\n continue\n }\n\n const meta = {\n // Submission lifecycle (spread first; `isValidating` below\n // intentionally overrides `lifecycle.isValidating` with the\n // OR of group-level + descendant-field validating).\n ...lifecycle,\n // Field-meta-base fields (so `setMeta` updates can roundtrip\n // through `state.meta`).\n errorMap,\n errorSourceMap,\n _arrayVersion: ownFieldMeta?._arrayVersion ?? 0,\n // Aggregated descendant booleans (override field-level meaning\n // for groups — a group's \"field\" itself never receives input).\n isTouched: aggIsTouched,\n isBlurred: aggIsBlurred,\n isDirty: aggIsDirty,\n isPristine,\n isDefaultValue: aggIsDefaultValue,\n // Aggregated validity\n isValid,\n errors,\n isValidating,\n // Group-only flags\n isFieldsValidating,\n isFieldsValid,\n isGroupValid,\n canSubmit,\n } as AnyFormGroupMeta\n\n // Stash the source errorMap on a non-enumerable shadow so the\n // next derive run can short-circuit `errors` recomputation when\n // nothing changed (mirrors `prevMeta.errorMap` tracking on the\n // old per-instance store).\n Object.defineProperty(meta, '__srcErrorMap', {\n value: errorMap,\n enumerable: false,\n configurable: true,\n })\n\n result[groupName] = meta\n }\n\n return result\n },\n )\n\n let prevBaseStoreForStore:\n | BaseFormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n | undefined = undefined\n\n this.store = createStore<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n >((prevVal) => {\n const currBaseStore = this.baseStore.get()\n const currFieldMeta = this.fieldMetaDerived.get()\n\n // Computed state\n const fieldMetaValues = Object.values(currFieldMeta).filter(\n Boolean,\n ) as AnyFieldLikeMeta[]\n\n const isFieldsValidating = fieldMetaValues.some(\n (field) => field.isValidating,\n )\n\n const isFieldsValid = fieldMetaValues.every((field) => field.isValid)\n\n const isTouched = fieldMetaValues.some((field) => field.isTouched)\n const isBlurred = fieldMetaValues.some((field) => field.isBlurred)\n const isDefaultValue = fieldMetaValues.every(\n (field) => field.isDefaultValue,\n )\n\n const shouldInvalidateOnMount =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n isTouched && currBaseStore.errorMap?.onMount\n\n const isDirty = fieldMetaValues.some((field) => field.isDirty)\n const isPristine = !isDirty\n\n const hasOnMountError = Boolean(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n currBaseStore.errorMap?.onMount ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n fieldMetaValues.some((f) => f?.errorMap?.onMount),\n )\n\n const isValidating = !!isFieldsValidating\n\n // As `errors` is not a primitive, we need to aggressively persist the same referencial value for performance reasons\n let errors = prevVal?.errors ?? []\n if (\n !prevBaseStoreForStore ||\n currBaseStore.errorMap !== prevBaseStoreForStore.errorMap\n ) {\n errors = Object.values(currBaseStore.errorMap).reduce<\n Array<\n NonNullable<\n | UnwrapFormValidateOrFn<TOnMount>\n | UnwrapFormValidateOrFn<TOnChange>\n | UnwrapFormAsyncValidateOrFn<TOnChangeAsync>\n | UnwrapFormValidateOrFn<TOnBlur>\n | UnwrapFormAsyncValidateOrFn<TOnBlurAsync>\n | UnwrapFormValidateOrFn<TOnSubmit>\n | UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>\n | UnwrapFormAsyncValidateOrFn<TOnServer>\n >\n >\n >((prev, curr) => {\n if (curr === undefined) return prev\n\n if (curr && isGlobalFormValidationError(curr)) {\n prev.push(curr.form as never)\n return prev\n }\n prev.push(curr as never)\n return prev\n }, [])\n }\n\n const isFormValid = errors.length === 0\n const isValid = isFieldsValid && isFormValid\n const submitInvalid = this.options.canSubmitWhenInvalid ?? false\n const canSubmit =\n (currBaseStore.submissionAttempts === 0 &&\n !isTouched &&\n !hasOnMountError) ||\n (!isValidating && !currBaseStore.isSubmitting && isValid) ||\n submitInvalid\n\n let errorMap = currBaseStore.errorMap\n if (shouldInvalidateOnMount) {\n errors = errors.filter((err) => err !== currBaseStore.errorMap.onMount)\n errorMap = Object.assign(errorMap, { onMount: undefined })\n }\n\n if (\n prevVal &&\n prevBaseStoreForStore &&\n prevVal.errorMap === errorMap &&\n prevVal.fieldMeta === this.fieldMetaDerived.state &&\n prevVal.errors === errors &&\n prevVal.isFieldsValidating === isFieldsValidating &&\n prevVal.isFieldsValid === isFieldsValid &&\n prevVal.isFormValid === isFormValid &&\n prevVal.isValid === isValid &&\n prevVal.canSubmit === canSubmit &&\n prevVal.isTouched === isTouched &&\n prevVal.isBlurred === isBlurred &&\n prevVal.isPristine === isPristine &&\n prevVal.isDefaultValue === isDefaultValue &&\n prevVal.isDirty === isDirty &&\n evaluate(prevBaseStoreForStore, currBaseStore)\n ) {\n return prevVal\n }\n\n const state = {\n ...currBaseStore,\n errorMap,\n fieldMeta: this.fieldMetaDerived.state,\n errors,\n isFieldsValidating,\n isFieldsValid,\n isFormValid,\n isValid,\n canSubmit,\n isTouched,\n isBlurred,\n isPristine,\n isDefaultValue,\n isDirty,\n } as FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n\n prevBaseStoreForStore = this.baseStore.get()\n\n return state\n })\n\n this.handleSubmit = this.handleSubmit.bind(this)\n\n this.update(opts || {})\n }\n\n get formId(): string {\n return this._formId\n }\n\n /**\n * @private\n */\n runValidator<\n TValue extends TStandardSchemaValidatorValue<TFormData> & {\n formApi: AnyFormApi\n },\n TType extends 'validate' | 'validateAsync',\n >(props: {\n validate: TType extends 'validate'\n ? FormValidateOrFn<TFormData>\n : FormAsyncValidateOrFn<TFormData>\n value: TValue\n type: TType\n }): unknown {\n if (isStandardSchemaValidator(props.validate)) {\n return standardSchemaValidators[props.type](\n props.value,\n props.validate,\n ) as never\n }\n\n return (props.validate as FormValidateFn<any>)(props.value) as never\n }\n\n mount = () => {\n // devtool broadcasts\n const cleanupDevtoolBroadcast = this.store.subscribe(() => {\n throttleFormState(this)\n })\n\n // devtool requests\n const cleanupFormStateListener = formEventClient.on(\n 'request-form-state',\n (e) => {\n if (e.payload.id === this._formId) {\n formEventClient.emit('form-api', {\n id: this._formId,\n state: this.store.state,\n options: this.options,\n })\n }\n },\n )\n\n const cleanupFormResetListener = formEventClient.on(\n 'request-form-reset',\n (e) => {\n if (e.payload.id === this._formId) {\n this.reset()\n }\n },\n )\n\n const cleanupFormForceSubmitListener = formEventClient.on(\n 'request-form-force-submit',\n (e) => {\n if (e.payload.id === this._formId) {\n this._devtoolsSubmissionOverride = true\n this.handleSubmit()\n this._devtoolsSubmissionOverride = false\n }\n },\n )\n\n const cleanup = () => {\n cleanupFormForceSubmitListener()\n cleanupFormResetListener()\n cleanupFormStateListener()\n cleanupDevtoolBroadcast.unsubscribe()\n\n // broadcast form unmount for devtools\n formEventClient.emit('form-unmounted', {\n id: this._formId,\n })\n }\n\n this.options.listeners?.onMount?.({ formApi: this })\n\n const { onMount } = this.options.validators || {}\n\n // broadcast form state for devtools on mounting\n formEventClient.emit('form-api', {\n id: this._formId,\n state: this.store.state,\n options: this.options,\n })\n\n // if no validation skip\n if (!onMount) return cleanup\n\n // validate\n this.validateSync('mount')\n return cleanup\n }\n\n /**\n * Updates the form options and form state.\n */\n update = (\n options?: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ) => {\n if (!options) return\n\n const oldOptions = this.options\n\n // Options need to be updated first so that when the store is updated, the state is correct for the derived state\n this.options = options\n\n const shouldUpdateValues =\n options.defaultValues &&\n !evaluate(options.defaultValues, oldOptions.defaultValues) &&\n !this.state.isTouched\n\n const shouldUpdateState =\n !evaluate(options.defaultState, oldOptions.defaultState) &&\n !this.state.isTouched\n\n if (!shouldUpdateValues && !shouldUpdateState) return\n\n batch(() => {\n this.baseStore.setState(() =>\n getDefaultFormState(\n Object.assign(\n {},\n this.state as any,\n\n shouldUpdateState ? options.defaultState : {},\n\n shouldUpdateValues\n ? {\n values: options.defaultValues,\n }\n : {},\n ),\n ),\n )\n })\n\n if (shouldUpdateValues) {\n const helper = metaHelper(this)\n for (const fieldKey of Object.keys(\n this.fieldInfo,\n ) as DeepKeys<TFormData>[]) {\n if (Array.isArray(this.getFieldValue(fieldKey))) {\n helper.bumpArrayVersion(fieldKey)\n }\n }\n }\n\n formEventClient.emit('form-api', {\n id: this._formId,\n state: this.store.state,\n options: this.options,\n })\n }\n\n /**\n * Resets the form state to the default values.\n * If values are provided, the form will be reset to those values instead and the default values will be updated.\n *\n * @param values - Optional values to reset the form to.\n * @param opts - Optional options to control the reset behavior.\n */\n reset = (values?: TFormData, opts?: { keepDefaultValues?: boolean }) => {\n const { fieldMeta: currentFieldMeta } = this.state\n const fieldMetaBase = this.resetFieldMeta(currentFieldMeta)\n\n if (values && !opts?.keepDefaultValues) {\n this.options = {\n ...this.options,\n defaultValues: values,\n }\n }\n\n this.baseStore.setState(() => {\n let nextValues =\n values ??\n this.options.defaultValues ??\n this.options.defaultState?.values\n\n if (!values) {\n ;(Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (fieldInfo) => {\n if (\n fieldInfo.instance &&\n fieldInfo.instance.options.defaultValue !== undefined\n ) {\n nextValues = setBy(\n nextValues,\n fieldInfo.instance.name,\n fieldInfo.instance.options.defaultValue,\n )\n }\n },\n )\n }\n\n return getDefaultFormState({\n ...(this.options.defaultState as any),\n values: nextValues,\n fieldMetaBase,\n })\n })\n }\n\n /**\n * Validates all fields according to the FIELD level validators.\n * This will ignore FORM level validators, use form.validate({ValidationCause}) for a complete validation\n */\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError[]>[] = [] as any\n\n batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (field) => {\n if (!field.instance) return\n const fieldInstance = field.instance\n\n // Validate the field\n fieldValidationPromises.push(\n // Remember, `validate` is either a sync operation or a promise\n Promise.resolve().then(() =>\n fieldInstance.validate(cause, {\n skipFormValidation: true,\n skipGroupValidation: true,\n }),\n ),\n )\n\n // If any fields are not touched\n if (!field.instance.store.state.meta.isTouched) {\n // Mark them as touched\n field.instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n },\n )\n })\n\n const fieldErrorMapMap = await Promise.all(fieldValidationPromises)\n return fieldErrorMapMap.flat()\n }\n\n /**\n * Validates the children of a specified array in the form starting from a given index until the end using the correct handlers for a given validation type.\n */\n validateArrayFieldsStartingFrom = async <\n TField extends DeepKeysOfType<TFormData, any[]>,\n >(\n field: TField,\n index: number,\n cause: ValidationCause,\n ) => {\n const currentValue = this.getFieldValue(field)\n\n const lastIndex = Array.isArray(currentValue)\n ? Math.max((currentValue as Array<unknown>).length - 1, 0)\n : null\n\n // We have to validate all fields that have shifted (at least the current field)\n const fieldKeysToValidate = [`${field}[${index}]`]\n for (let i = index + 1; i <= (lastIndex ?? 0); i++) {\n fieldKeysToValidate.push(`${field}[${i}]`)\n }\n\n // We also have to include all fields that are nested in the shifted fields\n const fieldsToValidate = Object.keys(this.fieldInfo).filter((fieldKey) =>\n fieldKeysToValidate.some((key) => fieldKey.startsWith(key)),\n ) as DeepKeys<TFormData>[]\n\n // Validate the fields\n const fieldValidationPromises: Promise<ValidationError[]>[] = [] as any\n batch(() => {\n fieldsToValidate.forEach((nestedField) => {\n fieldValidationPromises.push(\n Promise.resolve().then(() => this.validateField(nestedField, cause)),\n )\n })\n })\n\n const fieldErrorMapMap = await Promise.all(fieldValidationPromises)\n return fieldErrorMapMap.flat()\n }\n\n /**\n * Validates a specified field in the form using the correct handlers for a given validation type.\n */\n validateField = <TField extends DeepKeys<TFormData>>(\n field: TField,\n cause: ValidationCause,\n ) => {\n const fieldInstance = this.fieldInfo[field]?.instance\n\n if (!fieldInstance) {\n const { hasErrored } = this.validateSync(cause)\n\n if (hasErrored && !this.options.asyncAlways) {\n return this.getFieldMeta(field)?.errors ?? []\n }\n\n return this.validateAsync(cause).then(() => {\n return this.getFieldMeta(field)?.errors ?? []\n })\n }\n\n // If the field is not touched (same logic as in validateAllFields)\n if (!fieldInstance.store.state.meta.isTouched) {\n // Mark it as touched\n fieldInstance.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n\n return fieldInstance.validate(cause)\n }\n\n /**\n * TODO: This code is copied from FieldApi, we should refactor to share\n * @private\n */\n validateSync = (\n cause: ValidationCause,\n validateOpts?: ValidateOpts<TFormData>,\n ): {\n hasErrored: boolean\n fieldsErrorMap: FormErrorMapFromValidator<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n } => {\n const validates = getSyncValidatorArray(cause, {\n ...this.options,\n form: this,\n group: validateOpts?.group,\n validationLogic: this.options.validationLogic || defaultValidationLogic,\n })\n\n let hasErrored = false as boolean\n\n // This map will only include fields that have errors in the current validation cycle\n const currentValidationErrorMap: FormErrorMapFromValidator<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n > = {}\n\n batch(() => {\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n\n const rawError = this.runValidator({\n validate: validateObj.validate,\n value: {\n value: this.state.values,\n formApi: this,\n validationSource: 'form',\n },\n type: 'validate',\n })\n\n const { formError, fieldErrors } = normalizeError<TFormData>(rawError)\n\n const errorMapKey = getErrorMapKey(validateObj.cause)\n\n let allFieldsToProcess = new Set([\n ...Object.keys(this.state.fieldMeta),\n ...Object.keys(fieldErrors || {}),\n ] as DeepKeys<TFormData>[])\n\n if (validateOpts?.filterFieldNames) {\n allFieldsToProcess = new Set(\n [...allFieldsToProcess].filter(validateOpts.filterFieldNames),\n )\n }\n\n for (const field of allFieldsToProcess) {\n if (\n this.baseStore.state.fieldMetaBase[field] === undefined &&\n !fieldErrors?.[field]\n ) {\n continue\n }\n\n const fieldMeta = this.getFieldMeta(field) ?? defaultFieldMeta\n const {\n errorMap: currentErrorMap,\n errorSourceMap: currentErrorMapSource,\n } = fieldMeta\n\n const newFormValidatorError = fieldErrors?.[field]\n\n const { newErrorValue, newSource } =\n determineFormLevelErrorSourceAndValue({\n newFormValidatorError,\n isPreviousErrorFromFormValidator:\n // These conditional checks are required, otherwise we get runtime errors.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n currentErrorMapSource?.[errorMapKey] === 'form',\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n previousErrorValue: currentErrorMap?.[errorMapKey],\n })\n\n if (newSource === 'form') {\n currentValidationErrorMap[field] = {\n ...currentValidationErrorMap[field],\n [errorMapKey]: newFormValidatorError,\n }\n }\n\n // This conditional check is required, otherwise we get runtime errors.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (currentErrorMap?.[errorMapKey] !== newErrorValue) {\n this.setFieldMeta(field, (prev = defaultFieldMeta) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }))\n }\n }\n\n if (!validateOpts?.dontUpdateFormErrorMap) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.state.errorMap?.[errorMapKey] !== formError) {\n this.baseStore.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: formError,\n },\n }))\n }\n }\n\n if (formError || fieldErrors) {\n hasErrored = true\n }\n }\n\n if (validateOpts?.dontUpdateFormErrorMap) {\n return\n }\n\n /**\n * when we have an error for onSubmit in the state, we want\n * to clear the error as soon as the user enters a valid value in the field\n */\n const submitErrKey = getErrorMapKey('submit')\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.state.errorMap?.[submitErrKey] &&\n cause !== 'submit' &&\n !hasErrored\n ) {\n this.baseStore.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [submitErrKey]: undefined,\n },\n }))\n }\n\n /**\n * when we have an error for onServer in the state, we want\n * to clear the error as soon as the user enters a valid value in the field\n */\n const serverErrKey = getErrorMapKey('server')\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.state.errorMap?.[serverErrKey] &&\n cause !== 'server' &&\n !hasErrored\n ) {\n this.baseStore.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [serverErrKey]: undefined,\n },\n }))\n }\n })\n\n return { hasErrored, fieldsErrorMap: currentValidationErrorMap }\n }\n\n /**\n * @private\n */\n validateAsync = async (\n cause: ValidationCause,\n validateOpts?: ValidateOpts<TFormData>,\n ): Promise<\n FormErrorMapFromValidator<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n > => {\n const validates = getAsyncValidatorArray(cause, {\n ...this.options,\n form: this,\n group: validateOpts?.group,\n validationLogic: this.options.validationLogic || defaultValidationLogic,\n })\n\n if (!this.state.isFormValidating) {\n this.baseStore.setState((prev) => ({ ...prev, isFormValidating: true }))\n }\n\n /**\n * We have to use a for loop and generate our promises this way, otherwise it won't be sync\n * when there are no validators needed to be run\n */\n const promises: Promise<ValidationPromiseResult<TFormData>>[] = []\n\n let fieldErrorsFromFormValidators:\n | Partial<Record<DeepKeys<TFormData>, ValidationError>>\n | undefined\n\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n const key = getErrorMapKey(validateObj.cause)\n const fieldValidatorMeta = this.state.validationMetaMap[key]\n\n fieldValidatorMeta?.lastAbortController.abort()\n const controller = new AbortController()\n\n this.state.validationMetaMap[key] = {\n lastAbortController: controller,\n }\n\n promises.push(\n new Promise<ValidationPromiseResult<TFormData>>(async (resolve) => {\n let rawError!:\n | ValidationError\n | FormValidationError<unknown>\n | undefined\n try {\n rawError = await new Promise((rawResolve, rawReject) => {\n setTimeout(async () => {\n if (controller.signal.aborted) return rawResolve(undefined)\n try {\n rawResolve(\n await this.runValidator({\n validate: validateObj.validate!,\n value: {\n value: this.state.values,\n formApi: this,\n validationSource: 'form',\n signal: controller.signal,\n },\n type: 'validateAsync',\n }),\n )\n } catch (e) {\n rawReject(e)\n }\n }, validateObj.debounceMs)\n })\n } catch (e: unknown) {\n rawError = e as ValidationError\n }\n const { formError, fieldErrors: fieldErrorsFromNormalizeError } =\n normalizeError<TFormData>(rawError)\n\n if (fieldErrorsFromNormalizeError) {\n fieldErrorsFromFormValidators = fieldErrorsFromFormValidators\n ? {\n ...fieldErrorsFromFormValidators,\n ...fieldErrorsFromNormalizeError,\n }\n : fieldErrorsFromNormalizeError\n }\n const errorMapKey = getErrorMapKey(validateObj.cause)\n\n let fields: DeepKeys<TFormData>[] = Object.keys(this.state.fieldMeta)\n\n if (validateOpts?.filterFieldNames) {\n fields = fields.filter(validateOpts.filterFieldNames)\n }\n\n for (const field of fields) {\n if (this.baseStore.state.fieldMetaBase[field] === undefined) {\n continue\n }\n\n const fieldMeta = this.getFieldMeta(field)\n if (!fieldMeta) continue\n\n const {\n errorMap: currentErrorMap,\n errorSourceMap: currentErrorMapSource,\n } = fieldMeta\n\n const newFormValidatorError = fieldErrorsFromFormValidators?.[field]\n\n const { newErrorValue, newSource } =\n determineFormLevelErrorSourceAndValue({\n newFormValidatorError,\n isPreviousErrorFromFormValidator:\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n currentErrorMapSource?.[errorMapKey] === 'form',\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n previousErrorValue: currentErrorMap?.[errorMapKey],\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (currentErrorMap?.[errorMapKey] !== newErrorValue) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }))\n }\n }\n\n if (!validateOpts?.dontUpdateFormErrorMap) {\n this.baseStore.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: formError,\n },\n }))\n }\n\n resolve(\n fieldErrorsFromFormValidators\n ? { fieldErrors: fieldErrorsFromFormValidators, errorMapKey }\n : undefined,\n )\n }),\n )\n }\n\n let results: ValidationPromiseResult<TFormData>[] = []\n\n const fieldsErrorMap: FormErrorMapFromValidator<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n > = {}\n if (promises.length) {\n results = await Promise.all(promises)\n for (const fieldValidationResult of results) {\n if (fieldValidationResult?.fieldErrors) {\n const { errorMapKey } = fieldValidationResult\n\n for (const [field, fieldError] of Object.entries(\n fieldValidationResult.fieldErrors,\n )) {\n const oldErrorMap =\n fieldsErrorMap[field as DeepKeys<TFormData>] || {}\n const newErrorMap = {\n ...oldErrorMap,\n [errorMapKey]: fieldError,\n }\n fieldsErrorMap[field as DeepKeys<TFormData>] = newErrorMap\n }\n }\n }\n }\n\n this.baseStore.setState((prev) => ({\n ...prev,\n isFormValidating: false,\n }))\n\n return fieldsErrorMap\n }\n\n /**\n * @private\n */\n validate = (\n cause: ValidationCause,\n validateOpts?: ValidateOpts<TFormData>,\n ):\n | FormErrorMapFromValidator<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n | Promise<\n FormErrorMapFromValidator<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n > => {\n // Attempt to sync validate first\n const { hasErrored, fieldsErrorMap } = this.validateSync(\n cause,\n validateOpts,\n )\n\n if (hasErrored && !this.options.asyncAlways) {\n return fieldsErrorMap\n }\n\n // No error? Attempt async validation\n return this.validateAsync(cause, validateOpts)\n }\n\n // Needs to edgecase in the React adapter specifically to avoid type errors\n handleSubmit(): Promise<void>\n handleSubmit(submitMeta: TSubmitMeta): Promise<void>\n handleSubmit(submitMeta?: TSubmitMeta): Promise<void> {\n return this._handleSubmit(submitMeta)\n }\n\n /**\n * Handles the form submission, performs validation, and calls the appropriate onSubmit or onSubmitInvalid callbacks.\n */\n _handleSubmit = async (submitMeta?: TSubmitMeta): Promise<void> => {\n this.baseStore.setState((old) => ({\n ...old,\n // Submission attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n isSubmitSuccessful: false, // Reset isSubmitSuccessful at the start of submission\n }))\n\n batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<any>[]).forEach(\n (field) => {\n if (!field.instance) return\n // If any fields are not touched\n if (!field.instance.store.state.meta.isTouched) {\n // Mark them as touched\n field.instance.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n },\n )\n })\n\n const submitMetaArg =\n submitMeta ?? (this.options.onSubmitMeta as TSubmitMeta)\n\n if (!this.state.canSubmit && !this._devtoolsSubmissionOverride) {\n this.options.onSubmitInvalid?.({\n value: this.state.values,\n formApi: this,\n meta: submitMetaArg,\n })\n return\n }\n\n this.baseStore.setState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.baseStore.setState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n await this.validateAllFields('submit')\n\n if (!this.state.isFieldsValid) {\n done()\n\n this.options.onSubmitInvalid?.({\n value: this.state.values,\n formApi: this,\n meta: submitMetaArg,\n })\n\n formEventClient.emit('form-submission', {\n id: this._formId,\n submissionAttempt: this.state.submissionAttempts,\n successful: false,\n stage: 'validateAllFields',\n errors: (Object.values(this.state.fieldMeta) as AnyFieldLikeMeta[])\n .map((meta) => meta.errors)\n .flat(),\n })\n return\n }\n\n await this.validate('submit')\n\n // Fields are invalid, do not submit\n if (!this.state.isValid) {\n done()\n\n this.options.onSubmitInvalid?.({\n value: this.state.values,\n formApi: this,\n meta: submitMetaArg,\n })\n\n formEventClient.emit('form-submission', {\n id: this._formId,\n submissionAttempt: this.state.submissionAttempts,\n successful: false,\n stage: 'validate',\n errors: this.state.errors,\n })\n\n return\n }\n\n batch(() => {\n void (Object.values(this.fieldInfo) as FieldInfo<TFormData>[]).forEach(\n (field) => {\n field.instance?.triggerOnSubmitListener()\n },\n )\n })\n\n this.options.listeners?.onSubmit?.({ formApi: this, meta: submitMetaArg })\n\n try {\n // Run the submit code\n await this.options.onSubmit?.({\n value: this.state.values,\n formApi: this,\n meta: submitMetaArg,\n })\n\n batch(() => {\n this.baseStore.setState((prev) => ({\n ...prev,\n isSubmitted: true,\n isSubmitSuccessful: true, // Set isSubmitSuccessful to true on successful submission\n }))\n\n formEventClient.emit('form-submission', {\n id: this._formId,\n submissionAttempt: this.state.submissionAttempts,\n successful: true,\n })\n\n done()\n })\n } catch (err) {\n this.baseStore.setState((prev) => ({\n ...prev,\n isSubmitSuccessful: false, // Ensure isSubmitSuccessful is false if an error occurs\n }))\n\n formEventClient.emit('form-submission', {\n id: this._formId,\n submissionAttempt: this.state.submissionAttempts,\n successful: false,\n stage: 'inflight',\n onError: err,\n })\n\n done()\n\n throw err\n }\n }\n\n /**\n * Gets the value of the specified field.\n */\n getFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): DeepValue<TFormData, TField> => getBy(this.state.values, field)\n\n /**\n * Gets the metadata of the specified field.\n */\n getFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): AnyFieldLikeMeta | undefined => {\n return this.state.fieldMeta[field]\n }\n\n /**\n * Gets the derived `meta` of the form group registered at the given\n * name. Mirrors `getFieldMeta` for fields. Returns `undefined` if no\n * `FormGroupApi` with that name is currently mounted.\n */\n getFormGroupMeta = (name: string): AnyFormGroupMeta | undefined => {\n return this.formGroupMetaDerived.state[name]\n }\n\n /**\n * Gets the field info of the specified field.\n */\n getFieldInfo = <TField extends DeepKeys<TFormData>>(\n field: TField,\n ): FieldInfo<TFormData> => {\n return (this.fieldInfo[field] ||= {\n instance: null,\n validationMetaMap: {\n onChange: undefined,\n onBlur: undefined,\n onSubmit: undefined,\n onMount: undefined,\n onServer: undefined,\n onDynamic: undefined,\n },\n })\n }\n\n /**\n * Updates the metadata of the specified field.\n */\n setFieldMeta = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<AnyFieldLikeMetaBase>,\n ) => {\n this.baseStore.setState((prev) => {\n return {\n ...prev,\n fieldMetaBase: {\n ...prev.fieldMetaBase,\n [field]: functionalUpdate(\n updater,\n prev.fieldMetaBase[field] as never,\n ),\n },\n }\n })\n }\n\n /**\n * resets every field's meta\n */\n resetFieldMeta = <TField extends DeepKeys<TFormData>>(\n fieldMeta: Partial<Record<TField, AnyFieldLikeMeta>>,\n ): Partial<Record<TField, AnyFieldLikeMeta>> => {\n return Object.keys(fieldMeta).reduce(\n (acc, key) => {\n const fieldKey = key as TField\n acc[fieldKey] = defaultFieldMeta\n return acc\n },\n {} as Partial<Record<TField, AnyFieldLikeMeta>>,\n )\n }\n\n /**\n * Sets the value of the specified field and optionally updates the touched state.\n */\n setFieldValue = <TField extends DeepKeys<TFormData>>(\n field: TField,\n updater: Updater<DeepValue<TFormData, TField>>,\n opts?: UpdateMetaOptions,\n ) => {\n const dontUpdateMeta = opts?.dontUpdateMeta ?? false\n const dontRunListeners = opts?.dontRunListeners ?? false\n const dontValidate = opts?.dontValidate ?? false\n\n batch(() => {\n if (!dontUpdateMeta) {\n this.setFieldMeta(field, (prev) => ({\n ...prev,\n isTouched: true,\n isDirty: true,\n errorMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorMap,\n onMount: undefined,\n },\n }))\n }\n\n this.baseStore.setState((prev) => {\n return {\n ...prev,\n values: setBy(prev.values, field, updater),\n }\n })\n })\n\n if (!dontRunListeners) {\n this.getFieldInfo(field).instance?.triggerOnChangeListener()\n }\n\n if (!dontValidate) {\n this.validateField(field, 'change')\n }\n }\n\n deleteField = <TField extends DeepKeys<TFormData>>(field: TField) => {\n const subFieldsToDelete = Object.keys(this.fieldInfo).filter((f) => {\n const fieldStr = field.toString()\n return f !== fieldStr && f.startsWith(fieldStr)\n })\n\n const fieldsToDelete = [...subFieldsToDelete, field]\n\n // Cleanup the last fields\n this.baseStore.setState((prev) => {\n const newState = { ...prev }\n fieldsToDelete.forEach((f) => {\n newState.values = deleteBy(newState.values, f)\n delete this.fieldInfo[f as never]\n delete newState.fieldMetaBase[f as never]\n })\n\n return newState\n })\n }\n\n /**\n * Pushes a value into an array field.\n */\n pushFieldValue = <TField extends DeepKeysOfType<TFormData, any[]>>(\n field: TField,\n value: DeepValue<TFormData, TField> extends any[]\n ? DeepValue<TFormData, TField>[number]\n : never,\n options?: UpdateMetaOptions,\n ) => {\n this.setFieldValue(\n field,\n (prev) => [...(Array.isArray(prev) ? prev : []), value] as any,\n options,\n )\n\n metaHelper(this).bumpArrayVersion(field)\n }\n\n insertFieldValue = async <TField extends DeepKeysOfType<TFormData, any[]>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField> extends any[]\n ? DeepValue<TFormData, TField>[number]\n : never,\n options?: UpdateMetaOptions,\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return [\n ...(prev as DeepValue<TFormData, TField>[]).slice(0, index),\n value,\n ...(prev as DeepValue<TFormData, TField>[]).slice(index),\n ] as any\n },\n mergeOpts(options, { dontValidate: true }),\n )\n\n const dontValidate = options?.dontValidate ?? false\n if (!dontValidate) {\n // Validate the whole array + all fields that have shifted\n await this.validateField(field, 'change')\n }\n\n // Shift down all meta after validating to make sure the new field has been mounted\n metaHelper(this).handleArrayInsert(field, index)\n\n if (!dontValidate) {\n await this.validateArrayFieldsStartingFrom(field, index, 'change')\n }\n }\n\n /**\n * Replaces a value into an array field at the specified index.\n */\n replaceFieldValue = async <TField extends DeepKeysOfType<TFormData, any[]>>(\n field: TField,\n index: number,\n value: DeepValue<TFormData, TField> extends any[]\n ? DeepValue<TFormData, TField>[number]\n : never,\n options?: UpdateMetaOptions,\n ) => {\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).map((d, i) =>\n i === index ? value : d,\n ) as any\n },\n mergeOpts(options, { dontValidate: true }),\n )\n\n metaHelper(this).bumpArrayVersion(field)\n\n const dontValidate = options?.dontValidate ?? false\n if (!dontValidate) {\n // Validate the whole array + all fields that have shifted\n await this.validateField(field, 'change')\n await this.validateArrayFieldsStartingFrom(field, index, 'change')\n }\n }\n\n /**\n * Removes a value from an array field at the specified index.\n */\n removeFieldValue = async <TField extends DeepKeysOfType<TFormData, any[]>>(\n field: TField,\n index: number,\n options?: UpdateMetaOptions,\n ) => {\n const fieldValue = this.getFieldValue(field)\n\n const lastIndex = Array.isArray(fieldValue)\n ? Math.max((fieldValue as Array<unknown>).length - 1, 0)\n : null\n\n this.setFieldValue(\n field,\n (prev) => {\n return (prev as DeepValue<TFormData, TField>[]).filter(\n (_d, i) => i !== index,\n ) as any\n },\n mergeOpts(options, { dontValidate: true }),\n )\n\n // Shift up all meta\n metaHelper(this).handleArrayRemove(field, index)\n\n if (lastIndex !== null) {\n const start = `${field}[${lastIndex}]`\n this.deleteField(start as never)\n }\n\n const dontValidate = options?.dontValidate ?? false\n if (!dontValidate) {\n // Validate the whole array + all fields that have shifted\n await this.validateField(field, 'change')\n await this.validateArrayFieldsStartingFrom(field, index, 'change')\n }\n }\n\n /**\n * Swaps the values at the specified indices within an array field.\n */\n swapFieldValues = <TField extends DeepKeysOfType<TFormData, any[]>>(\n field: TField,\n index1: number,\n index2: number,\n options?: UpdateMetaOptions,\n ) => {\n this.setFieldValue(\n field,\n (prev: any) => {\n const prev1 = prev[index1]!\n const prev2 = prev[index2]!\n return setBy(setBy(prev, `${index1}`, prev2), `${index2}`, prev1)\n },\n mergeOpts(options, { dontValidate: true }),\n )\n\n // Swap meta\n metaHelper(this).handleArraySwap(field, index1, index2)\n\n const dontValidate = options?.dontValidate ?? false\n if (!dontValidate) {\n // Validate the whole array\n this.validateField(field, 'change')\n // Validate the swapped fields\n this.validateField(`${field}[${index1}]` as DeepKeys<TFormData>, 'change')\n this.validateField(`${field}[${index2}]` as DeepKeys<TFormData>, 'change')\n }\n }\n\n /**\n * Moves the value at the first specified index to the second specified index within an array field.\n */\n moveFieldValues = <TField extends DeepKeysOfType<TFormData, any[]>>(\n field: TField,\n index1: number,\n index2: number,\n options?: UpdateMetaOptions,\n ) => {\n this.setFieldValue(\n field,\n (prev: any) => {\n const next: any = [...prev]\n next.splice(index2, 0, next.splice(index1, 1)[0])\n return next\n },\n mergeOpts(options, { dontValidate: true }),\n )\n\n // Move meta between index1 and index2\n metaHelper(this).handleArrayMove(field, index1, index2)\n\n const dontValidate = options?.dontValidate ?? false\n if (!dontValidate) {\n // Validate the whole array\n this.validateField(field, 'change')\n // Validate the moved fields\n this.validateField(`${field}[${index1}]` as DeepKeys<TFormData>, 'change')\n this.validateField(`${field}[${index2}]` as DeepKeys<TFormData>, 'change')\n }\n }\n\n /**\n * Clear all values within an array field.\n */\n clearFieldValues = <TField extends DeepKeysOfType<TFormData, any[]>>(\n field: TField,\n options?: UpdateMetaOptions,\n ) => {\n const fieldValue = this.getFieldValue(field)\n\n const lastIndex = Array.isArray(fieldValue)\n ? Math.max((fieldValue as unknown[]).length - 1, 0)\n : null\n\n this.setFieldValue(\n field,\n [] as any,\n mergeOpts(options, { dontValidate: true }),\n )\n\n metaHelper(this).bumpArrayVersion(field)\n\n if (lastIndex !== null) {\n for (let i = 0; i <= lastIndex; i++) {\n const fieldKey = `${field}[${i}]`\n this.deleteField(fieldKey as never)\n }\n }\n\n const dontValidate = options?.dontValidate ?? false\n if (!dontValidate) {\n // validate array change\n this.validateField(field, 'change')\n }\n }\n\n /**\n * Resets the field value and meta to default state\n */\n resetField = <TField extends DeepKeys<TFormData>>(field: TField) => {\n this.baseStore.setState((prev) => {\n const fieldDefault =\n this.getFieldInfo(field).instance?.options.defaultValue\n const formDefault = getBy(this.options.defaultValues, field)\n const targetValue = fieldDefault ?? formDefault\n\n return {\n ...prev,\n fieldMetaBase: {\n ...prev.fieldMetaBase,\n [field]: defaultFieldMeta,\n },\n values:\n targetValue !== undefined\n ? setBy(prev.values, field, targetValue)\n : prev.values,\n }\n })\n }\n\n /**\n * Updates the form's errorMap\n */\n setErrorMap = (\n errorMap: FormValidationErrorMap<\n TFormData,\n UnwrapFormValidateOrFn<TOnMount>,\n UnwrapFormValidateOrFn<TOnChange>,\n UnwrapFormAsyncValidateOrFn<TOnChangeAsync>,\n UnwrapFormValidateOrFn<TOnBlur>,\n UnwrapFormAsyncValidateOrFn<TOnBlurAsync>,\n UnwrapFormValidateOrFn<TOnSubmit>,\n UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>,\n UnwrapFormValidateOrFn<TOnDynamic>,\n UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>,\n UnwrapFormAsyncValidateOrFn<TOnServer>\n >,\n ) => {\n batch(() => {\n Object.entries(errorMap).forEach(([key, value]) => {\n const errorMapKey = key as ValidationErrorMapKeys\n\n if (isGlobalFormValidationError(value)) {\n const { formError, fieldErrors } = normalizeError<TFormData>(value)\n\n for (const fieldName of Object.keys(\n this.fieldInfo,\n ) as DeepKeys<TFormData>[]) {\n const fieldMeta = this.getFieldMeta(fieldName)\n if (!fieldMeta) continue\n\n this.setFieldMeta(fieldName, (prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: fieldErrors?.[fieldName],\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: 'form',\n },\n }))\n }\n\n this.baseStore.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: formError,\n },\n }))\n } else {\n this.baseStore.setState((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: value,\n },\n }))\n }\n })\n })\n }\n\n /**\n * Returns form and field level errors\n */\n getAllErrors = (): {\n form: {\n errors: Array<\n NonNullable<\n | UnwrapFormValidateOrFn<TOnMount>\n | UnwrapFormValidateOrFn<TOnChange>\n | UnwrapFormAsyncValidateOrFn<TOnChangeAsync>\n | UnwrapFormValidateOrFn<TOnBlur>\n | UnwrapFormAsyncValidateOrFn<TOnBlurAsync>\n | UnwrapFormValidateOrFn<TOnSubmit>\n | UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>\n | UnwrapFormValidateOrFn<TOnDynamic>\n | UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>\n | UnwrapFormAsyncValidateOrFn<TOnServer>\n >\n >\n errorMap: ValidationErrorMap<\n UnwrapFormValidateOrFn<TOnMount>,\n UnwrapFormValidateOrFn<TOnChange>,\n UnwrapFormAsyncValidateOrFn<TOnChangeAsync>,\n UnwrapFormValidateOrFn<TOnBlur>,\n UnwrapFormAsyncValidateOrFn<TOnBlurAsync>,\n UnwrapFormValidateOrFn<TOnSubmit>,\n UnwrapFormAsyncValidateOrFn<TOnSubmitAsync>,\n UnwrapFormValidateOrFn<TOnDynamic>,\n UnwrapFormAsyncValidateOrFn<TOnDynamicAsync>,\n UnwrapFormAsyncValidateOrFn<TOnServer>\n >\n }\n fields: Record<\n DeepKeys<TFormData>,\n { errors: ValidationError[]; errorMap: ValidationErrorMap }\n >\n } => {\n return {\n form: {\n errors: this.state.errors,\n errorMap: this.state.errorMap,\n },\n fields: Object.entries(this.state.fieldMeta).reduce(\n (acc, [fieldName, fieldMeta]) => {\n if (\n Object.keys(fieldMeta as AnyFieldLikeMeta).length &&\n (fieldMeta as AnyFieldLikeMeta).errors.length\n ) {\n acc[fieldName as DeepKeys<TFormData>] = {\n errors: (fieldMeta as AnyFieldLikeMeta).errors,\n errorMap: (fieldMeta as AnyFieldLikeMeta).errorMap,\n }\n }\n\n return acc\n },\n {} as Record<\n DeepKeys<TFormData>,\n { errors: ValidationError[]; errorMap: ValidationErrorMap }\n >,\n ),\n }\n }\n\n /**\n * Parses the form's values with a given standard schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse the form values with.\n */\n parseValuesWithSchema = (schema: StandardSchemaV1<TFormData, unknown>) => {\n return standardSchemaValidators.validate(\n { value: this.state.values, validationSource: 'form' },\n schema,\n )\n }\n\n /**\n * Parses the form's values with a given standard schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse the form values with.\n */\n parseValuesWithSchemaAsync = (\n schema: StandardSchemaV1<TFormData, unknown>,\n ) => {\n return standardSchemaValidators.validateAsync(\n { value: this.state.values, validationSource: 'form' },\n schema,\n )\n }\n}\n\nfunction normalizeError<TFormData>(rawError?: FormValidationError<unknown>): {\n formError: ValidationError\n fieldErrors?: Partial<Record<DeepKeys<TFormData>, ValidationError>>\n} {\n if (rawError) {\n if (isGlobalFormValidationError(rawError)) {\n const formError = normalizeError(rawError.form).formError\n const fieldErrors = rawError.fields\n return { formError, fieldErrors } as never\n }\n\n return { formError: rawError }\n }\n\n return { formError: undefined }\n}\n\nfunction getErrorMapKey(cause: ValidationCause) {\n switch (cause) {\n case 'submit':\n return 'onSubmit'\n case 'blur':\n return 'onBlur'\n case 'mount':\n return 'onMount'\n case 'server':\n return 'onServer'\n case 'dynamic':\n return 'onDynamic'\n case 'change':\n default:\n return 'onChange'\n }\n}\n","import { batch, createStore } from '@tanstack/store'\nimport {\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from './standardSchemaValidator'\nimport { defaultFieldMeta } from './metaHelper'\nimport {\n determineFieldLevelErrorSourceAndValue,\n evaluate,\n getAsyncValidatorArray,\n getSyncValidatorArray,\n isFieldInGroup,\n mergeOpts,\n} from './utils'\nimport { defaultValidationLogic } from './ValidationLogic'\nimport type { AnyFormGroupApi } from './FormGroupApi'\nimport type {\n FieldErrorMapFromValidator,\n FieldInfo,\n FieldLikeAPI,\n FieldLikeApiOptions,\n FieldLikeMetaBase,\n FieldLikeOptions,\n FieldLikeState,\n ListenerCause,\n UnwrapFieldAsyncValidateOrFn,\n UnwrapFieldValidateOrFn,\n UpdateMetaOptions,\n ValidationCause,\n ValidationError,\n ValidationErrorMap,\n} from './types'\nimport type { ReadonlyStore } from '@tanstack/store'\nimport type { DeepKeys, DeepValue, RejectPromiseValidator } from './util-types'\nimport type {\n StandardSchemaV1,\n TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type { FormAsyncValidateOrFn, FormValidateOrFn } from './FormApi'\nimport type { AsyncValidator, SyncValidator, Updater } from './utils'\n\n/**\n * @private\n */\nexport type FieldValidateFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => unknown\n\n/**\n * @private\n */\nexport type FieldValidateAsyncFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (options: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n signal: AbortSignal\n}) => unknown | Promise<unknown>\n\n/**\n * @private\n */\nexport type FieldListenerFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the field listener function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => void\n\n/**\n * @private\n */\nexport type FieldValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FieldValidateFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\n/**\n * @private\n */\nexport type FieldAsyncValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FieldValidateAsyncFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\nexport interface FieldValidators<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n /**\n * An optional function, that runs on the mount event of input.\n */\n onMount?: RejectPromiseValidator<TOnMount>\n /**\n * An optional function, that runs on the change event of input.\n *\n * @example z.string().min(1)\n */\n onChange?: RejectPromiseValidator<TOnChange>\n /**\n * An optional property similar to `onChange` but async validation\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onChangeAsync?: TOnChangeAsync\n /**\n * An optional number to represent how long the `onChangeAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onChangeAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onChange` and `onChangeAsync` events when its value changes\n */\n onChangeListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the blur event of input.\n *\n * @example z.string().min(1)\n */\n onBlur?: RejectPromiseValidator<TOnBlur>\n /**\n * An optional property similar to `onBlur` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onBlurAsync?: TOnBlurAsync\n\n /**\n * An optional number to represent how long the `onBlurAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onBlurAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onBlur` and `onBlurAsync` events when its value changes\n */\n onBlurListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the submit event of form.\n *\n * @example z.string().min(1)\n */\n onSubmit?: RejectPromiseValidator<TOnSubmit>\n /**\n * An optional property similar to `onSubmit` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onSubmitAsync?: TOnSubmitAsync\n onDynamic?: RejectPromiseValidator<TOnDynamic>\n onDynamicAsync?: TOnDynamicAsync\n onDynamicAsyncDebounceMs?: number\n}\n\nexport interface FieldListeners<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> {\n onChange?: FieldListenerFn<TParentData, TName, TData>\n onChangeDebounceMs?: number\n onBlur?: FieldListenerFn<TParentData, TName, TData>\n onBlurDebounceMs?: number\n onMount?: FieldListenerFn<TParentData, TName, TData>\n onUnmount?: FieldListenerFn<TParentData, TName, TData>\n onSubmit?: FieldListenerFn<TParentData, TName, TData>\n onGroupSubmit?: FieldListenerFn<TParentData, TName, TData>\n}\n\ninterface FieldExtraOptions<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n /**\n * A list of validators to pass to the field\n */\n validators?: FieldValidators<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n\n /**\n * A list of listeners which attach to the corresponding events\n */\n listeners?: FieldListeners<TParentData, TName, TData>\n}\n\n/**\n * An object type representing the options for a field in a form.\n */\nexport interface FieldOptions<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n>\n extends\n FieldExtraOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >,\n FieldLikeOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n > {}\n\nexport interface FieldApiOptions<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n>\n extends\n FieldLikeApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n FieldExtraOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n > {}\n\n/**\n * @public\n *\n * A type representing the Field API with all generics set to `any` for convenience.\n */\nexport type AnyFieldApi = FieldApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * We cannot use methods and must use arrow functions. Otherwise, our React adapters\n * will break due to loss of the method when using spread.\n */\n\n/**\n * A class representing the API for managing a form field.\n *\n * Normally, you will not need to create a new `FieldApi` instance directly.\n * Instead, you will use a framework hook/function like `useField` or `createField`\n * to create a new instance for you that uses your framework's reactivity model.\n * However, if you need to create a new instance manually, you can do so by calling\n * the `new FieldApi` constructor.\n */\nexport class FieldApi<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FieldValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n> implements FieldLikeAPI<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta,\n FieldExtraOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n> {\n /**\n * A reference to the form API instance.\n */\n form: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >['form']\n /**\n * The field name.\n */\n name: TName\n /**\n * The field options.\n */\n options: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n > = {} as any\n /**\n * The field state store.\n */\n store!: ReadonlyStore<\n FieldLikeState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n >\n /**\n * The current field state.\n */\n get state() {\n return this.store.state\n }\n timeoutIds: {\n validations: Record<ValidationCause, ReturnType<typeof setTimeout> | null>\n listeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n formListeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n }\n\n /**\n * Initializes a new `FieldApi` instance.\n */\n constructor(\n opts: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) {\n this.form = opts.form\n this.name = opts.name\n this.options = opts\n\n this.timeoutIds = {\n validations: {} as Record<ValidationCause, never>,\n listeners: {} as Record<ListenerCause, never>,\n formListeners: {} as Record<ListenerCause, never>,\n }\n\n this.store = createStore(\n (\n prevVal:\n | FieldLikeState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n | undefined,\n ) => {\n // Temp hack to subscribe to form.store\n this.form.store.get()\n\n const meta = this.form.getFieldMeta(this.name) ?? {\n ...defaultFieldMeta,\n ...opts.defaultMeta,\n }\n\n let value = this.form.getFieldValue(this.name)\n if (\n !meta.isTouched &&\n (value as unknown) === undefined &&\n this.options.defaultValue !== undefined &&\n !evaluate(value, this.options.defaultValue)\n ) {\n value = this.options.defaultValue\n }\n\n if (prevVal && prevVal.value === value && prevVal.meta === meta) {\n return prevVal\n }\n\n return {\n value,\n meta,\n } as FieldLikeState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n },\n )\n }\n\n /**\n * @private\n */\n runValidator<\n TValue extends TStandardSchemaValidatorValue<TData> & {\n fieldApi: AnyFieldApi\n },\n TType extends 'validate' | 'validateAsync',\n >(props: {\n validate: TType extends 'validate'\n ? FieldValidateOrFn<any, any, any>\n : FieldAsyncValidateOrFn<any, any, any>\n value: TValue\n type: TType\n // When `api` is 'field', the return type cannot be `FormValidationError`\n }): unknown {\n if (isStandardSchemaValidator(props.validate)) {\n return standardSchemaValidators[props.type](\n props.value,\n props.validate,\n ) as never\n }\n\n return (props.validate as FieldValidateFn<any, any>)(props.value) as never\n }\n\n /**\n * Mounts the field instance to the form.\n * @returns A function to unmount the field instance.\n */\n mount = () => {\n if (this.options.defaultValue !== undefined && !this.getMeta().isTouched) {\n this.form.setFieldValue(this.name, this.options.defaultValue, {\n dontUpdateMeta: true,\n })\n }\n\n const info = this.getInfo()\n info.instance = this as never\n\n this.update(this.options as never)\n\n const { onMount } = this.options.validators || {}\n\n if (onMount) {\n const error = this.runValidator({\n validate: onMount,\n value: {\n value: this.state.value,\n fieldApi: this,\n validationSource: 'field',\n },\n type: 'validate',\n })\n if (error) {\n this.setMeta(\n (prev) =>\n ({\n ...prev,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n errorMap: { ...prev?.errorMap, onMount: error },\n errorSourceMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorSourceMap,\n onMount: 'field',\n },\n }) as never,\n )\n }\n }\n\n this.options.listeners?.onMount?.({\n value: this.state.value,\n fieldApi: this,\n })\n\n return () => {\n // Stop any in-flight async validation or listener work tied to this instance.\n for (const [key, timeout] of Object.entries(\n this.timeoutIds.validations,\n )) {\n if (timeout) {\n clearTimeout(timeout)\n this.timeoutIds.validations[\n key as keyof typeof this.timeoutIds.validations\n ] = null\n }\n }\n for (const [key, timeout] of Object.entries(this.timeoutIds.listeners)) {\n if (timeout) {\n clearTimeout(timeout)\n this.timeoutIds.listeners[\n key as keyof typeof this.timeoutIds.listeners\n ] = null\n }\n }\n for (const [key, timeout] of Object.entries(\n this.timeoutIds.formListeners,\n )) {\n if (timeout) {\n clearTimeout(timeout)\n this.timeoutIds.formListeners[\n key as keyof typeof this.timeoutIds.formListeners\n ] = null\n }\n }\n\n const fieldInfo = this.form.fieldInfo[this.name]\n if (!fieldInfo) return\n\n // If a newer field instance has already been mounted for this name,\n // avoid touching its shared validation state during teardown.\n if (fieldInfo.instance !== this) return\n\n for (const [key, validationMeta] of Object.entries(\n fieldInfo.validationMetaMap,\n )) {\n validationMeta?.lastAbortController.abort()\n fieldInfo.validationMetaMap[\n key as keyof typeof fieldInfo.validationMetaMap\n ] = undefined\n }\n\n this.form.baseStore.setState((prev) => ({\n // Preserve interaction flags so field-level defaultValue does not\n // reseed user-entered values on remount.\n ...prev,\n fieldMetaBase: {\n ...prev.fieldMetaBase,\n [this.name]: {\n ...defaultFieldMeta,\n isTouched:\n prev.fieldMetaBase[this.name]?.isTouched ??\n defaultFieldMeta.isTouched,\n isBlurred:\n prev.fieldMetaBase[this.name]?.isBlurred ??\n defaultFieldMeta.isBlurred,\n isDirty:\n prev.fieldMetaBase[this.name]?.isDirty ??\n defaultFieldMeta.isDirty,\n },\n },\n }))\n\n fieldInfo.instance = null\n\n this.options.listeners?.onUnmount?.({\n value: this.state.value,\n fieldApi: this,\n })\n\n this.form.options.listeners?.onFieldUnmount?.({\n formApi: this.form,\n fieldApi: this,\n })\n }\n }\n\n /**\n * Updates the field instance with new options.\n */\n update = (\n opts: FieldApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) => {\n this.options = opts\n this.name = opts.name\n\n // Default Value\n if (!this.state.meta.isTouched && this.options.defaultValue !== undefined) {\n const formField = this.form.getFieldValue(this.name)\n if (!evaluate(formField, opts.defaultValue)) {\n this.form.setFieldValue(this.name, opts.defaultValue as never, {\n dontUpdateMeta: true,\n dontValidate: true,\n dontRunListeners: true,\n })\n }\n }\n\n if (!this.form.getFieldMeta(this.name)) {\n this.form.setFieldMeta(this.name, this.state.meta)\n }\n }\n\n /**\n * Gets the current field value.\n * @deprecated Use `field.state.value` instead.\n */\n getValue = (): TData => {\n return this.form.getFieldValue(this.name) as TData\n }\n\n /**\n * Sets the field value and run the `change` validator.\n */\n setValue = (updater: Updater<TData>, options?: UpdateMetaOptions) => {\n this.form.setFieldValue(\n this.name,\n updater as never,\n mergeOpts(options, { dontRunListeners: true, dontValidate: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n\n if (!options?.dontValidate) {\n this.validate('change')\n }\n }\n\n getMeta = () => this.store.state.meta\n\n /**\n * Sets the field metadata.\n */\n setMeta = (\n updater: Updater<\n FieldLikeMetaBase<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n >,\n ) => this.form.setFieldMeta(this.name, updater)\n\n /**\n * Gets the field information object.\n */\n getInfo = () => this.form.getFieldInfo(this.name)\n\n /**\n * Pushes a new value to the field.\n */\n pushValue = (\n value: TData extends any[] ? TData[number] : never,\n options?: UpdateMetaOptions,\n ) => {\n this.form.pushFieldValue(\n this.name,\n value as any,\n mergeOpts(options, { dontRunListeners: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n }\n\n /**\n * Inserts a value at the specified index, shifting the subsequent values to the right.\n */\n insertValue = (\n index: number,\n value: TData extends any[] ? TData[number] : never,\n options?: UpdateMetaOptions,\n ) => {\n this.form.insertFieldValue(\n this.name,\n index,\n value as any,\n mergeOpts(options, { dontRunListeners: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n }\n\n /**\n * Replaces a value at the specified index.\n */\n replaceValue = (\n index: number,\n value: TData extends any[] ? TData[number] : never,\n options?: UpdateMetaOptions,\n ) => {\n this.form.replaceFieldValue(\n this.name,\n index,\n value as any,\n mergeOpts(options, { dontRunListeners: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n }\n\n /**\n * Removes a value at the specified index.\n */\n removeValue = (index: number, options?: UpdateMetaOptions) => {\n this.form.removeFieldValue(\n this.name,\n index,\n mergeOpts(options, { dontRunListeners: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n }\n\n /**\n * Swaps the values at the specified indices.\n */\n swapValues = (\n aIndex: number,\n bIndex: number,\n options?: UpdateMetaOptions,\n ) => {\n this.form.swapFieldValues(\n this.name,\n aIndex,\n bIndex,\n mergeOpts(options, { dontRunListeners: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n }\n\n /**\n * Moves the value at the first specified index to the second specified index.\n */\n moveValue = (aIndex: number, bIndex: number, options?: UpdateMetaOptions) => {\n this.form.moveFieldValues(\n this.name,\n aIndex,\n bIndex,\n mergeOpts(options, { dontRunListeners: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n }\n\n /**\n * Clear all values from the array.\n */\n clearValues = (options?: UpdateMetaOptions) => {\n this.form.clearFieldValues(\n this.name,\n mergeOpts(options, { dontRunListeners: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n }\n\n /**\n * @private\n */\n getLinkedFields = (cause: ValidationCause) => {\n const fields = Object.values(this.form.fieldInfo) as FieldInfo<any>[]\n\n const linkedFields: AnyFieldApi[] = []\n for (const field of fields) {\n if (!field.instance) continue\n // TODO: How to handle FieldGroups? Do we need to? IDK.\n if (!(field.instance instanceof FieldApi)) {\n continue\n }\n const { onChangeListenTo, onBlurListenTo } =\n field.instance.options.validators || {}\n if (cause === 'change' && onChangeListenTo?.includes(this.name)) {\n linkedFields.push(field.instance)\n }\n if (cause === 'blur' && onBlurListenTo?.includes(this.name as string)) {\n linkedFields.push(field.instance)\n }\n }\n\n return linkedFields\n }\n\n /**\n * @private\n */\n validateSync = (\n cause: ValidationCause,\n errorFromForm: ValidationErrorMap,\n ) => {\n const validates = getSyncValidatorArray(cause, {\n ...this.options,\n form: this.form,\n fieldName: this.name,\n validationLogic:\n this.form.options.validationLogic || defaultValidationLogic,\n })\n\n const linkedFields = this.getLinkedFields(cause)\n const linkedFieldValidates = linkedFields.reduce(\n (acc, field) => {\n const fieldValidates = getSyncValidatorArray(cause, {\n ...field.options,\n form: field.form,\n fieldName: field.name,\n validationLogic:\n field.form.options.validationLogic || defaultValidationLogic,\n })\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n SyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n // Needs type cast as eslint errantly believes this is always falsy\n let hasErrored = false as boolean\n\n batch(() => {\n const validateFieldFn = (\n field: AnyFieldApi,\n validateObj: SyncValidator<any>,\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n\n const fieldLevelError = validateObj.validate\n ? normalizeError(\n field.runValidator({\n validate: validateObj.validate,\n value: {\n value: field.store.state.value,\n validationSource: 'field',\n fieldApi: field,\n },\n type: 'validate',\n }),\n )\n : undefined\n\n const formLevelError = errorFromForm[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (field.state.meta.errorMap?.[errorMapKey] !== newErrorValue) {\n field.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }))\n }\n if (newErrorValue) {\n hasErrored = true\n }\n }\n\n for (const validateObj of validates) {\n validateFieldFn(this, validateObj)\n }\n for (const fieldValitateObj of linkedFieldValidates) {\n if (!fieldValitateObj.validate) continue\n validateFieldFn(fieldValitateObj.field, fieldValitateObj)\n }\n })\n\n /**\n * when we have an error for onSubmit in the state, we want\n * to clear the error as soon as the user enters a valid value in the field\n */\n const submitErrKey = getErrorMapKey('submit')\n\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.state.meta.errorMap?.[submitErrKey] &&\n cause !== 'submit' &&\n !hasErrored\n ) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [submitErrKey]: undefined,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [submitErrKey]: undefined,\n },\n }))\n }\n\n return { hasErrored }\n }\n\n /**\n * @private\n */\n validateAsync = async (\n cause: ValidationCause,\n formValidationResultPromise: Promise<\n FieldErrorMapFromValidator<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >,\n ) => {\n const validates = getAsyncValidatorArray(cause, {\n ...this.options,\n form: this.form,\n fieldName: this.name,\n validationLogic:\n this.form.options.validationLogic || defaultValidationLogic,\n })\n\n // Get the field-specific error messages that are coming from the form's validator\n const asyncFormValidationResults = await formValidationResultPromise\n\n const linkedFields = this.getLinkedFields(cause)\n const linkedFieldValidates = linkedFields.reduce(\n (acc, field) => {\n const fieldValidates = getAsyncValidatorArray(cause, {\n ...field.options,\n form: field.form,\n fieldName: field.name,\n validationLogic:\n field.form.options.validationLogic || defaultValidationLogic,\n })\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n AsyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n /**\n * We have to use a for loop and generate our promises this way, otherwise it won't be sync\n * when there are no validators needed to be run\n */\n const validatesPromises: Promise<ValidationError | undefined>[] = []\n const linkedPromises: Promise<ValidationError | undefined>[] = []\n\n // Check if there are actual async validators to run before setting isValidating\n // This prevents unnecessary re-renders when there are no async validators\n // See: https://github.com/TanStack/form/issues/1130\n const hasAsyncValidators =\n validates.some((v) => v.validate) ||\n linkedFieldValidates.some((v) => v.validate)\n\n if (hasAsyncValidators) {\n if (!this.state.meta.isValidating) {\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n\n for (const linkedField of linkedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n }\n\n const validateFieldAsyncFn = (\n field: AnyFieldApi,\n validateObj: AsyncValidator<any>,\n promises: Promise<ValidationError | undefined>[],\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n const fieldInfo = field.getInfo()\n const fieldValidatorMeta = fieldInfo.validationMetaMap[errorMapKey]\n\n fieldValidatorMeta?.lastAbortController.abort()\n const controller = new AbortController()\n\n fieldInfo.validationMetaMap[errorMapKey] = {\n lastAbortController: controller,\n }\n\n promises.push(\n new Promise<ValidationError | undefined>(async (resolve) => {\n let rawError!: ValidationError | undefined\n try {\n rawError = await new Promise((rawResolve, rawReject) => {\n if (field.timeoutIds.validations[validateObj.cause]) {\n clearTimeout(field.timeoutIds.validations[validateObj.cause]!)\n }\n\n field.timeoutIds.validations[validateObj.cause] = setTimeout(\n async () => {\n if (controller.signal.aborted) return rawResolve(undefined)\n try {\n rawResolve(\n await this.runValidator({\n validate: validateObj.validate,\n value: {\n value: field.store.state.value,\n fieldApi: field,\n signal: controller.signal,\n validationSource: 'field',\n },\n type: 'validateAsync',\n }),\n )\n } catch (e) {\n rawReject(e)\n }\n },\n validateObj.debounceMs,\n )\n })\n } catch (e: unknown) {\n rawError = e as ValidationError\n }\n if (controller.signal.aborted) return resolve(undefined)\n\n const fieldLevelError = normalizeError(rawError)\n const formLevelError =\n asyncFormValidationResults[\n field.name as keyof typeof asyncFormValidationResults\n ]?.[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n if (field.getInfo().instance !== field) {\n return resolve(undefined)\n }\n\n field.setMeta((prev) => {\n return {\n ...prev,\n errorMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }\n })\n\n resolve(newErrorValue)\n }),\n )\n }\n\n // TODO: Dedupe this logic to reduce bundle size\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n validateFieldAsyncFn(this, validateObj, validatesPromises)\n }\n for (const fieldValitateObj of linkedFieldValidates) {\n if (!fieldValitateObj.validate) continue\n validateFieldAsyncFn(\n fieldValitateObj.field,\n fieldValitateObj,\n linkedPromises,\n )\n }\n\n let results: ValidationError[] = []\n if (validatesPromises.length || linkedPromises.length) {\n results = await Promise.all(validatesPromises)\n await Promise.all(linkedPromises)\n }\n\n // Only reset isValidating if we set it to true earlier\n if (hasAsyncValidators) {\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n\n for (const linkedField of linkedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: false }))\n }\n }\n\n return results.filter(Boolean)\n }\n\n /**\n * Validates the field value.\n */\n validate = (\n cause: ValidationCause,\n opts?: { skipFormValidation?: boolean; skipGroupValidation?: boolean },\n ): ValidationError[] | Promise<ValidationError[]> => {\n // If the field is pristine, do not validate\n if (!this.state.meta.isTouched) return []\n\n // Cascade into any encompassing `FormGroupApi`'s own validators so\n // group-scoped strategies (e.g. `revalidateLogic` gated on the group's\n // own `submissionAttempts`) get a chance to react to this field change.\n // Mirror the field's sync→short-circuit-on-error→async semantics for\n // each group: only kick off async validators if the group's sync pass\n // was clean (or its `asyncAlways` flag is set).\n const encompassingGroups = opts?.skipGroupValidation\n ? []\n : Array.from(this.form.formGroupApis).filter((group) =>\n this.name.startsWith(group.name),\n )\n\n // Attempt to sync validate first\n const formSyncResult = opts?.skipFormValidation\n ? { fieldsErrorMap: {} as never }\n : this.form.validateSync(cause)\n let fieldsErrorMap = (formSyncResult.fieldsErrorMap[this.name] ??\n {}) as ValidationErrorMap\n\n // For each encompassing group whose own submission has been attempted,\n // also re-run the parent form's validators with that group as the\n // gating context. This ensures form-level errors (e.g. those produced\n // by a form-level z.object onDynamic during a group submit) are kept\n // fresh on subsequent field changes — even though the form itself\n // hasn't been submitted directly.\n if (!opts?.skipFormValidation) {\n for (const group of encompassingGroups) {\n if (group.state.meta.submissionAttempts === 0) continue\n const { fieldsErrorMap: groupFormErrors } = this.form.validateSync(\n cause,\n {\n group,\n dontUpdateFormErrorMap: true,\n filterFieldNames: (fieldName) =>\n isFieldInGroup(group.name, fieldName),\n },\n )\n fieldsErrorMap = {\n ...fieldsErrorMap,\n ...(groupFormErrors[this.name] ?? {}),\n }\n }\n }\n\n const { hasErrored } = this.validateSync(cause, fieldsErrorMap)\n\n const groupHasErroredWeakMap = new WeakMap<AnyFormGroupApi, boolean>()\n for (const group of encompassingGroups) {\n const { hasErrored: groupHasErrored } = group.validateSync(\n cause,\n {},\n { skipRelatedFieldValidation: true },\n )\n\n groupHasErroredWeakMap.set(group, groupHasErrored)\n }\n\n if (hasErrored && !this.options.asyncAlways) {\n this.getInfo().validationMetaMap[\n getErrorMapKey(cause)\n ]?.lastAbortController.abort()\n\n const groupErrors = [] as ValidationError[][]\n\n for (const group of encompassingGroups) {\n group\n .getInfo()\n .validationMetaMap[getErrorMapKey(cause)]?.lastAbortController.abort()\n\n groupErrors.push(group.state.meta.errors)\n }\n\n return [...this.state.meta.errors, ...groupErrors.flat()]\n }\n\n // No error? Attempt async validation\n const formValidationResultPromise = opts?.skipFormValidation\n ? Promise.resolve({})\n : this.form.validateAsync(cause)\n\n const fieldAsyncResults = this.validateAsync(\n cause,\n formValidationResultPromise,\n )\n\n const groupAsyncResults: Promise<ValidationError[]>[] = []\n for (const group of encompassingGroups) {\n if (groupHasErroredWeakMap.get(group) && !group.options.asyncAlways) {\n continue\n }\n\n groupAsyncResults.push(\n group.validateAsync(cause, formValidationResultPromise, {\n skipRelatedFieldValidation: true,\n }),\n )\n }\n\n if (groupAsyncResults.length === 0) {\n return fieldAsyncResults\n }\n\n return Promise.all([fieldAsyncResults, ...groupAsyncResults]).then(\n (results) => results.flat(),\n )\n }\n\n /**\n * Handles the change event.\n */\n handleChange = (updater: Updater<TData>) => {\n this.setValue(updater)\n }\n\n /**\n * Handles the blur event.\n */\n handleBlur = () => {\n const prevTouched = this.state.meta.isTouched\n if (!prevTouched) {\n this.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n if (!this.state.meta.isBlurred) {\n this.setMeta((prev) => ({ ...prev, isBlurred: true }))\n }\n this.validate('blur')\n\n this.triggerOnBlurListener()\n }\n\n /**\n * Updates the field's errorMap\n */\n setErrorMap = (\n errorMap: ValidationErrorMap<\n UnwrapFieldValidateOrFn<TName, TOnMount, TFormOnMount>,\n UnwrapFieldValidateOrFn<TName, TOnChange, TFormOnChange>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnChangeAsync, TFormOnChangeAsync>,\n UnwrapFieldValidateOrFn<TName, TOnBlur, TFormOnBlur>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnBlurAsync, TFormOnBlurAsync>,\n UnwrapFieldValidateOrFn<TName, TOnSubmit, TFormOnSubmit>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnSubmitAsync, TFormOnSubmitAsync>,\n UnwrapFieldValidateOrFn<TName, TOnDynamic, TFormOnDynamic>,\n UnwrapFieldAsyncValidateOrFn<TName, TOnDynamicAsync, TFormOnDynamicAsync>\n >,\n ) => {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n ...errorMap,\n },\n }))\n }\n\n /**\n * Parses the field's value with the given schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse this field's value with.\n */\n parseValueWithSchema = (schema: StandardSchemaV1<TData, unknown>) => {\n return standardSchemaValidators.validate(\n { value: this.state.value, validationSource: 'field' },\n schema,\n )\n }\n\n /**\n * Parses the field's value with the given schema and returns\n * issues (if any). This method does NOT set any internal errors.\n * @param schema The standard schema to parse this field's value with.\n */\n parseValueWithSchemaAsync = (schema: StandardSchemaV1<TData, unknown>) => {\n return standardSchemaValidators.validateAsync(\n { value: this.state.value, validationSource: 'field' },\n schema,\n )\n }\n\n private triggerOnBlurListener = () => {\n const formDebounceMs = this.form.options.listeners?.onBlurDebounceMs\n if (formDebounceMs && formDebounceMs > 0) {\n if (this.timeoutIds.formListeners.blur) {\n clearTimeout(this.timeoutIds.formListeners.blur)\n }\n\n this.timeoutIds.formListeners.blur = setTimeout(() => {\n this.form.options.listeners?.onBlur?.({\n formApi: this.form,\n fieldApi: this,\n })\n }, formDebounceMs)\n } else {\n this.form.options.listeners?.onBlur?.({\n formApi: this.form,\n fieldApi: this,\n })\n }\n\n const fieldDebounceMs = this.options.listeners?.onBlurDebounceMs\n if (fieldDebounceMs && fieldDebounceMs > 0) {\n if (this.timeoutIds.listeners.blur) {\n clearTimeout(this.timeoutIds.listeners.blur)\n }\n\n this.timeoutIds.listeners.blur = setTimeout(() => {\n this.options.listeners?.onBlur?.({\n value: this.state.value,\n fieldApi: this,\n })\n }, fieldDebounceMs)\n } else {\n this.options.listeners?.onBlur?.({\n value: this.state.value,\n fieldApi: this,\n })\n }\n }\n\n /**\n * @private\n */\n triggerOnChangeListener = () => {\n const formDebounceMs = this.form.options.listeners?.onChangeDebounceMs\n if (formDebounceMs && formDebounceMs > 0) {\n if (this.timeoutIds.formListeners.change) {\n clearTimeout(this.timeoutIds.formListeners.change)\n }\n\n this.timeoutIds.formListeners.change = setTimeout(() => {\n this.form.options.listeners?.onChange?.({\n formApi: this.form,\n fieldApi: this,\n })\n }, formDebounceMs)\n } else {\n this.form.options.listeners?.onChange?.({\n formApi: this.form,\n fieldApi: this,\n })\n }\n\n const fieldDebounceMs = this.options.listeners?.onChangeDebounceMs\n if (fieldDebounceMs && fieldDebounceMs > 0) {\n if (this.timeoutIds.listeners.change) {\n clearTimeout(this.timeoutIds.listeners.change)\n }\n\n this.timeoutIds.listeners.change = setTimeout(() => {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n fieldApi: this,\n })\n }, fieldDebounceMs)\n } else {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n fieldApi: this,\n })\n }\n\n for (const group of this.form.formGroupApis) {\n if (isFieldInGroup(group.name, this.name)) {\n group.triggerOnChangeListener()\n }\n }\n }\n\n /**\n * @private\n */\n triggerOnSubmitListener = () => {\n this.options.listeners?.onSubmit?.({\n value: this.state.value,\n fieldApi: this,\n })\n }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n return rawError\n }\n\n return undefined\n}\n\nfunction getErrorMapKey(cause: ValidationCause) {\n switch (cause) {\n case 'submit':\n return 'onSubmit'\n case 'blur':\n return 'onBlur'\n case 'mount':\n return 'onMount'\n case 'server':\n return 'onServer'\n case 'dynamic':\n return 'onDynamic'\n case 'change':\n default:\n return 'onChange'\n }\n}\n","import { batch, createStore } from '@tanstack/store'\nimport {\n determineFieldLevelErrorSourceAndValue,\n determineFormLevelErrorSourceAndValue,\n evaluate,\n getAsyncValidatorArray,\n getSyncValidatorArray,\n isFieldInGroup,\n mergeOpts,\n} from './utils'\nimport { defaultValidationLogic } from './ValidationLogic'\nimport {\n isStandardSchemaValidator,\n standardSchemaValidators,\n} from './standardSchemaValidator'\nimport { defaultFieldMeta } from './metaHelper'\nimport { FieldApi } from './FieldApi'\nimport { FieldLikeApiOptions } from './types'\nimport type { ValidationLogicFn } from './ValidationLogic'\nimport type {\n AnyFieldLikeMeta,\n AnyFieldLikeMetaBase,\n FieldErrorMapFromValidator,\n FieldInfo,\n FieldLikeAPI,\n FieldLikeMeta,\n FieldLikeMetaBase,\n FieldLikeOptions,\n FieldLikeState,\n FormLikeAPI,\n ListenerCause,\n UnwrapFieldAsyncValidateOrFn,\n UnwrapFieldValidateOrFn,\n UpdateMetaOptions,\n ValidationCause,\n ValidationError,\n ValidationErrorMap,\n} from './types'\nimport type {\n FormApi,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from './FormApi'\nimport type { AnyFieldApi } from './FieldApi'\nimport type {\n StandardSchemaV1,\n TStandardSchemaValidatorValue,\n} from './standardSchemaValidator'\nimport type { AsyncValidator, SyncValidator, Updater } from './utils'\nimport type { ReadonlyStore } from '@tanstack/store'\nimport type {\n DeepKeys,\n DeepKeysOfType,\n DeepValue,\n UnwrapOneLevelOfArray,\n} from './util-types'\n\n/**\n * @private\n */\nexport type FormGroupValidateFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n groupApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the group validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => unknown\n\n/**\n * @private\n */\nexport type FormGroupValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FormGroupValidateFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\n/**\n * @private\n */\nexport type FormGroupValidateAsyncFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (options: {\n value: TData\n groupApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the group validate function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n signal: AbortSignal\n}) => unknown | Promise<unknown>\n\n/**\n * @private\n */\nexport type FormGroupAsyncValidateOrFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> =\n | FormGroupValidateAsyncFn<TParentData, TName, TData>\n | StandardSchemaV1<TData, unknown>\n\n/**\n * @private\n */\nexport type FormGroupListenerFn<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> = (props: {\n value: TData\n groupApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n // This is technically an edge-type; which we try to keep non-`any`, but in this case\n // It's referring to an inaccessible type from the group listener function inner types, so it's not a big deal\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}) => void\n\n// TODO: Add `listenTo` props back\nexport interface FormGroupValidators<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n> {\n /**\n * An optional function, that runs on the mount event of input.\n */\n onMount?: TOnMount\n /**\n * An optional function, that runs on the change event of input.\n *\n * @example z.string().min(1)\n */\n onChange?: TOnChange\n /**\n * An optional property similar to `onChange` but async validation\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onChangeAsync?: TOnChangeAsync\n /**\n * An optional number to represent how long the `onChangeAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onChangeAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onChange` and `onChangeAsync` events when its value changes\n */\n // onChangeListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the blur event of input.\n *\n * @example z.string().min(1)\n */\n onBlur?: TOnBlur\n /**\n * An optional property similar to `onBlur` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onBlurAsync?: TOnBlurAsync\n\n /**\n * An optional number to represent how long the `onBlurAsync` should wait before running\n *\n * If set to a number larger than 0, will debounce the async validation event by this length of time in milliseconds\n */\n onBlurAsyncDebounceMs?: number\n /**\n * An optional list of field names that should trigger this field's `onBlur` and `onBlurAsync` events when its value changes\n */\n // onBlurListenTo?: DeepKeys<TParentData>[]\n /**\n * An optional function, that runs on the submit event of form.\n *\n * @example z.string().min(1)\n */\n onSubmit?: TOnSubmit\n /**\n * An optional property similar to `onSubmit` but async validation.\n *\n * @example z.string().refine(async (val) => val.length > 3, { message: 'Testing 123' })\n */\n onSubmitAsync?: TOnSubmitAsync\n onDynamic?: TOnDynamic\n onDynamicAsync?: TOnDynamicAsync\n onDynamicAsyncDebounceMs?: number\n}\n\nexport interface FormGroupListeners<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName> = DeepValue<TParentData, TName>,\n> {\n onChange?: FormGroupListenerFn<TParentData, TName, TData>\n onChangeDebounceMs?: number\n onBlur?: FormGroupListenerFn<TParentData, TName, TData>\n onBlurDebounceMs?: number\n onMount?: FormGroupListenerFn<TParentData, TName, TData>\n onUnmount?: FormGroupListenerFn<TParentData, TName, TData>\n onSubmit?: FormGroupListenerFn<TParentData, TName, TData>\n onGroupSubmit?: FormGroupListenerFn<TParentData, TName, TData>\n}\n\ninterface FormGroupExtraOptions<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TSubmitMeta,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n> {\n /**\n * A list of validators to pass to the field\n */\n validators?: FormGroupValidators<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >\n\n /**\n * If true, allows the form to be submitted in an invalid state i.e. canSubmit will remain true regardless of validation errors. Defaults to undefined.\n */\n canSubmitWhenInvalid?: boolean\n\n /**\n * A list of listeners which attach to the corresponding events\n */\n listeners?: FormGroupListeners<TParentData, TName, TData>\n\n defaultState?: FormGroupState\n /**\n * Optional validation logic strategy to use for this group's own\n * validators (e.g. `revalidateLogic()`). When omitted, the parent form's\n * `validationLogic` (or the default) is used.\n */\n validationLogic?: ValidationLogicFn\n /**\n * onSubmitMeta, the data passed from the handleSubmit handler, to the onSubmit function props\n */\n onSubmitMeta?: TSubmitMeta\n\n /**\n * A function to be called when the form is submitted, what should happen once the user submits a valid form returns `any` or a promise `Promise<any>`\n */\n onGroupSubmit?: (props: {\n value: TData\n groupApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >\n meta: TSubmitMeta\n }) => any | Promise<any>\n /**\n * Specify an action for scenarios where the user tries to submit an invalid form.\n */\n onGroupSubmitInvalid?: (props: {\n value: TData\n groupApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >\n meta: TSubmitMeta\n }) => void\n}\n\nexport interface FormGroupOptions<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TSubmitMeta,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n>\n extends\n FieldLikeOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >,\n FormGroupExtraOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n > {}\n\nexport interface FormGroupApiOptions<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TSubmitMeta,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n> extends FormGroupOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n> {\n form: FormApi<\n TParentData,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >\n}\n\nexport interface FormGroupState {\n /**\n * A boolean indicating if the form is currently in the process of being submitted after `handleSubmit` is called.\n *\n * Goes back to `false` when submission completes for one of the following reasons:\n * - the validation step returned errors.\n * - the `onSubmit` function has completed.\n *\n * Note: if you're running async operations in your `onSubmit` function make sure to await them to ensure `isSubmitting` is set to `false` only when the async operation completes.\n *\n * This is useful for displaying loading indicators or disabling form inputs during submission.\n *\n */\n isSubmitting: boolean\n /**\n * A boolean indicating if the `onSubmit` function has completed successfully.\n *\n * Goes back to `false` at each new submission attempt.\n *\n * Note: you can use isSubmitting to check if the form is currently submitting.\n */\n isSubmitted: boolean\n /**\n * A boolean indicating if the form or any of its fields are currently validating.\n */\n isValidating: boolean\n /**\n * A counter for tracking the number of submission attempts.\n */\n submissionAttempts: number\n /**\n * A boolean indicating if the last submission was successful.\n */\n isSubmitSuccessful: boolean\n}\n\nfunction getDefaultFormGroupState(\n defaultState: Partial<FormGroupState>,\n): FormGroupState {\n return {\n isSubmitted: defaultState.isSubmitted ?? false,\n isSubmitting: defaultState.isSubmitting ?? false,\n isValidating: defaultState.isValidating ?? false,\n submissionAttempts: defaultState.submissionAttempts ?? 0,\n isSubmitSuccessful: defaultState.isSubmitSuccessful ?? false,\n }\n}\n\n/**\n * @public\n *\n * A type representing the FormGroup API with all generics set to `any` for convenience.\n */\nexport type AnyFormGroupApi = FormGroupApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\n/**\n * @public\n *\n * The `meta` shape exposed on `FormGroupApi.state.meta`. Mirrors\n * `FieldApi.state.meta` (since `FormGroupMeta extends FieldLikeMeta`) but\n * additionally surfaces the group's submission lifecycle and aggregated\n * validity flags. All derivation lives on the parent `FormApi` (in\n * `formGroupMetaDerived`), keeping per-instance `FormGroupApi.store` as\n * minimal as `FieldApi.store`.\n *\n * Aggregated booleans (`isTouched`, `isBlurred`, `isDirty`, `isPristine`,\n * `isDefaultValue`) are computed across the group's descendant fields\n * rather than the group's own field-meta entry.\n */\nexport interface FormGroupMeta<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n>\n extends\n FieldLikeMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >,\n FormGroupState {\n isFieldsValidating: boolean\n isFieldsValid: boolean\n isGroupValid: boolean\n isValid: boolean\n canSubmit: boolean\n}\n\n/**\n * @public\n *\n * `FormGroupMeta` with all generics widened to `any`.\n */\nexport type AnyFormGroupMeta = FormGroupMeta<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\nexport interface FormGroupStoreState<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n> {\n /**\n * The current value of the form group.\n */\n value: TData\n /**\n * The current metadata of the form group, including aggregated validity,\n * group-level errors, and submission lifecycle.\n */\n meta: FormGroupMeta<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n}\n\n/**\n * @private\n *\n * Builds a default `FormGroupMeta` value, used as a fallback when the\n * parent form's `formGroupMetaDerived` store has no entry for this group\n * yet (e.g. between `new FormGroupApi(...)` and `mount()`).\n */\nexport function getDefaultFormGroupMeta(\n defaultMeta?: Partial<AnyFieldLikeMetaBase>,\n): AnyFormGroupMeta {\n return {\n ...defaultFieldMeta,\n ...defaultMeta,\n errors: [],\n isPristine: true,\n isValid: true,\n isDefaultValue: true,\n isFieldsValidating: false,\n isFieldsValid: true,\n isGroupValid: true,\n canSubmit: true,\n isSubmitting: false,\n isSubmitted: false,\n isValidating: false,\n submissionAttempts: 0,\n isSubmitSuccessful: false,\n } as AnyFormGroupMeta\n}\n\nexport class FormGroupApi<\n in out TParentData,\n in out TName extends DeepKeys<TParentData>,\n in out TData extends DeepValue<TParentData, TName>,\n in out TOnMount extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnBlur extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n in out TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n in out TSubmitMeta,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n>\n implements\n FormLikeAPI<TParentData, TSubmitMeta>,\n FieldLikeAPI<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta,\n FormGroupExtraOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >\n >\n{\n /**\n * A reference to the form API instance.\n */\n form: FormGroupApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >['form']\n /**\n * The field name.\n */\n name: TName\n /**\n * The field options.\n */\n options: FormGroupApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n > = {} as any\n /**\n * The field state store.\n */\n store!: ReadonlyStore<\n FormGroupStoreState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n >\n /**\n * The current field state.\n */\n get state() {\n return this.store.state\n }\n\n /**\n * @private\n *\n * Updates this group's submission lifecycle state on the parent form's\n * `baseStore` (where group state is now persisted), preserving entries\n * for any other mounted groups. After writing, the form's\n * `formGroupMetaDerived` re-derives so this group's `state.meta` picks\n * up the new lifecycle values automatically.\n */\n private setFormGroupState = (\n updater: (prev: FormGroupState) => FormGroupState,\n ) => {\n this.form.baseStore.setState((prev) => {\n const prevGroupState =\n prev.formGroupStateBase[this.name as never] ??\n getDefaultFormGroupState({})\n return {\n ...prev,\n formGroupStateBase: {\n ...prev.formGroupStateBase,\n [this.name as never]: updater(prevGroupState),\n },\n }\n })\n }\n\n timeoutIds: {\n validations: Record<ValidationCause, ReturnType<typeof setTimeout> | null>\n listeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n formListeners: Record<ListenerCause, ReturnType<typeof setTimeout> | null>\n }\n\n /**\n * @private\n *\n * Tracks the set of fully-qualified child field names that this group's\n * validators last set form-source errors on, keyed by `errorMap` key.\n * Used to clear stale group-level field errors on subsequent runs without\n * trampling errors set by the parent form's validators.\n */\n private _lastDistributedFieldNames: Partial<Record<string, Set<string>>> = {}\n\n private fieldInfo: FieldInfo<TParentData>\n\n constructor(\n opts: FormGroupApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) {\n this.form = opts.form\n this.name = opts.name\n this.options = opts\n\n this.timeoutIds = {\n validations: {} as Record<ValidationCause, never>,\n listeners: {} as Record<ListenerCause, never>,\n formListeners: {} as Record<ListenerCause, never>,\n }\n\n this.fieldInfo = {\n instance: null,\n validationMetaMap: {\n onChange: undefined,\n onBlur: undefined,\n onSubmit: undefined,\n onMount: undefined,\n onServer: undefined,\n onDynamic: undefined,\n },\n }\n\n this.store = createStore(\n (\n prevVal:\n | FormGroupStoreState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n | undefined,\n ) => {\n // Subscribe to all form-level derived state that affects this\n // group. Mirrors `FieldApi.store`'s minimal pattern: per-instance\n // `store` only sources `{ value, meta }`; all heavy derivation\n // lives on the parent `FormApi` (in `formGroupMetaDerived`).\n this.form.formGroupMetaDerived.get()\n this.form.baseStore.get()\n\n const meta =\n (this.form.getFormGroupMeta(this.name as never) as\n | AnyFormGroupMeta\n | undefined) ?? getDefaultFormGroupMeta(opts.defaultMeta as never)\n\n let value = this.form.getFieldValue(this.name)\n if (\n !meta.isTouched &&\n (value as unknown) === undefined &&\n this.options.defaultValue !== undefined &&\n !evaluate(value, this.options.defaultValue)\n ) {\n value = this.options.defaultValue\n }\n\n if (prevVal && prevVal.value === value && prevVal.meta === meta) {\n return prevVal\n }\n\n return {\n value,\n meta,\n } as FormGroupStoreState<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n },\n )\n\n this.handleSubmit = this.handleSubmit.bind(this)\n }\n\n /**\n * Updates the field instance with new options.\n */\n update = (\n opts: FormGroupApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n ) => {\n this.options = opts\n this.name = opts.name\n\n // Default Value\n if (!this.state.meta.isTouched && this.options.defaultValue !== undefined) {\n const formField = this.form.getFieldValue(this.name)\n if (!evaluate(formField, opts.defaultValue)) {\n this.form.setFieldValue(this.name, opts.defaultValue as never, {\n dontUpdateMeta: true,\n dontValidate: true,\n dontRunListeners: true,\n })\n }\n }\n\n if (!this.form.getFieldMeta(this.name)) {\n this.form.setFieldMeta(this.name, {\n ...defaultFieldMeta,\n ...(this.options.defaultMeta as Partial<AnyFieldLikeMetaBase>),\n } as never)\n }\n }\n\n /**\n * @private\n */\n runValidator<\n TValue extends TStandardSchemaValidatorValue<TData> & {\n groupApi: AnyFormGroupApi\n },\n TType extends 'validate' | 'validateAsync',\n >(props: {\n validate: TType extends 'validate'\n ? FormGroupValidateOrFn<any, any, any>\n : FormGroupAsyncValidateOrFn<any, any, any>\n value: TValue\n type: TType\n // When `api` is 'field', the return type cannot be `FormValidationError`\n }): unknown {\n if (isStandardSchemaValidator(props.validate)) {\n const result = standardSchemaValidators[props.type](\n props.value,\n props.validate,\n ) as unknown\n\n // Standard schemas with `validationSource: 'form'` return `{ form, fields }`.\n // For groups we expose the same fan-out shape but under a `group` key\n // (a `form` key on a group-level validator would be misleading), so\n // remap the standard-schema result here. Manual functions on a group\n // are expected to return `{ group, fields }` already.\n if (props.type === 'validate') {\n return remapStandardSchemaResultForGroup(result)\n }\n return (result as Promise<unknown>).then(\n remapStandardSchemaResultForGroup,\n )\n }\n\n return (props.validate as FormGroupValidateFn<any, any>)(\n props.value,\n ) as never\n }\n\n mount = () => {\n this.update(this.options as never)\n this.form.formGroupApis.add(this)\n this.fieldInfo.instance = this as never\n\n // Seed the parent form's `formGroupStateBase` entry for this group.\n // We always write so that `formGroupMetaDerived` re-derives now that\n // `formGroupApis` includes this instance — this is what makes\n // `state.meta` populated on the very first read after mount. Mirrors\n // `FieldApi.mount`'s lifecycle: per-group lifecycle state lives on\n // the form so it can be read off `FormApi` directly without walking\n // the mounted group instances.\n this.form.baseStore.setState((prev) => ({\n ...prev,\n formGroupStateBase: {\n ...prev.formGroupStateBase,\n [this.name as never]:\n prev.formGroupStateBase[this.name as never] ??\n getDefaultFormGroupState({\n ...(this.options.defaultState as Partial<FormGroupState>),\n }),\n },\n }))\n\n const { onMount } = this.options.validators || {}\n\n if (onMount) {\n const rawError = this.runValidator({\n validate: onMount,\n value: {\n value: this.state.value,\n groupApi: this,\n validationSource: 'form',\n },\n type: 'validate',\n })\n\n let groupOwnRawError = rawError\n let groupFieldErrors: Record<string, unknown> | undefined = undefined\n if (isGlobalGroupValidationError(rawError)) {\n groupOwnRawError = rawError.group\n groupFieldErrors = rawError.fields\n }\n\n const error = normalizeError(groupOwnRawError as ValidationError)\n if (error) {\n this.setMeta(\n (prev) =>\n ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n onMount: error,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n onMount: 'field',\n },\n }) as never,\n )\n }\n\n this.distributeFieldErrors('onMount', groupFieldErrors)\n }\n\n this.options.listeners?.onMount?.({\n value: this.state.value,\n groupApi: this,\n })\n\n return () => {\n // Stop any in-flight async validation or listener work tied to this instance.\n for (const [key, timeout] of Object.entries(\n this.timeoutIds.validations,\n )) {\n if (timeout) {\n clearTimeout(timeout)\n this.timeoutIds.validations[\n key as keyof typeof this.timeoutIds.validations\n ] = null\n }\n }\n for (const [key, timeout] of Object.entries(this.timeoutIds.listeners)) {\n if (timeout) {\n clearTimeout(timeout)\n this.timeoutIds.listeners[\n key as keyof typeof this.timeoutIds.listeners\n ] = null\n }\n }\n for (const [key, timeout] of Object.entries(\n this.timeoutIds.formListeners,\n )) {\n if (timeout) {\n clearTimeout(timeout)\n this.timeoutIds.formListeners[\n key as keyof typeof this.timeoutIds.formListeners\n ] = null\n }\n }\n\n if (this.fieldInfo.instance !== this) return\n\n for (const [key, validationMeta] of Object.entries(\n this.fieldInfo.validationMetaMap,\n )) {\n validationMeta?.lastAbortController.abort()\n this.fieldInfo.validationMetaMap[\n key as keyof typeof this.fieldInfo.validationMetaMap\n ] = undefined\n }\n\n this.form.formGroupApis.delete(this)\n\n // Reset this group's submission lifecycle state on the form. Mirrors\n // `FieldApi.mount`'s teardown which resets `fieldMetaBase` for the\n // unmounting field while preserving the entry on the parent store.\n this.form.baseStore.setState((prev) => ({\n ...prev,\n formGroupStateBase: {\n ...prev.formGroupStateBase,\n [this.name as never]: getDefaultFormGroupState({}),\n },\n }))\n\n this.fieldInfo.instance = null\n\n this.options.listeners?.onUnmount?.({\n value: this.state.value,\n groupApi: this,\n })\n }\n }\n\n /**\n * Sets the field value and run the `change` validator.\n */\n setValue = (updater: Updater<TData>, options?: UpdateMetaOptions) => {\n this.form.setFieldValue(\n this.name,\n updater as never,\n mergeOpts(options, { dontRunListeners: true, dontValidate: true }),\n )\n\n if (!options?.dontRunListeners) {\n this.triggerOnChangeListener()\n }\n\n if (!options?.dontValidate) {\n this.validate('change')\n }\n }\n\n getMeta = () => this.store.state.meta\n\n /**\n * Sets the field metadata.\n */\n setMeta = (\n updater: Updater<\n FieldLikeMetaBase<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync\n >\n >,\n ) => this.form.setFieldMeta(this.name, updater)\n\n /**\n * Gets the field information object.\n */\n getInfo = () => this.fieldInfo\n\n /**\n * @private\n */\n getRelatedFields = () => {\n const fields = Object.values(this.form.fieldInfo) as FieldInfo<any>[]\n\n const relatedFields: AnyFieldApi[] = []\n for (const field of fields) {\n if (!field.instance) continue\n // TODO: How to handle FormGroups?\n if (!(field.instance instanceof FieldApi)) continue\n if (field.instance.name.startsWith(this.name)) {\n relatedFields.push(field.instance)\n }\n }\n\n return relatedFields\n }\n /**\n * @private\n */\n getRelatedFieldMetasDerived = () => {\n const fields = Object.entries(this.form.fieldMetaDerived.state) as [\n string,\n AnyFieldLikeMeta,\n ][]\n\n const relatedFieldMetas: (AnyFieldLikeMeta & { name: string })[] = []\n for (const [fieldName, fieldMeta] of fields) {\n // Skip the group's own self-entry — its validity is tracked via\n // `isGroupValid`. Including it here would conflate group-level\n // validation with field-level validation in `isFieldsValid` etc.\n if (fieldName === this.name) continue\n if (isFieldInGroup(this.name, fieldName)) {\n relatedFieldMetas.push({ ...fieldMeta, name: fieldName })\n }\n }\n\n return relatedFieldMetas\n }\n\n /**\n * @private\n *\n * Builds a fully-qualified field name from a path that is relative to this\n * group, supporting both dot (`name`, `nested.value`) and bracket\n * (`[0].name`) notation.\n */\n private buildChildFieldName = (relativeName: string): string => {\n if (relativeName === '') return this.name as string\n if (relativeName.startsWith('[')) return `${this.name}${relativeName}`\n return `${this.name}.${relativeName}`\n }\n\n /**\n * @private\n *\n * Distributes a `{ fields: { ... } }` payload returned by one of this\n * group's own validators onto the corresponding child fields. Tracks\n * which fields have been touched so subsequent runs can clear stale\n * errors without trampling errors set by the parent form's validators.\n */\n private distributeFieldErrors = (\n errorMapKey: string,\n fieldErrors: Record<string, unknown> | undefined,\n ): boolean => {\n const previousNames =\n this._lastDistributedFieldNames[errorMapKey] ?? new Set<string>()\n const currentNames = new Set<string>()\n\n if (fieldErrors) {\n for (const [relativeName, err] of Object.entries(fieldErrors)) {\n if (err === undefined || err === null || err === false) continue\n currentNames.add(this.buildChildFieldName(relativeName))\n }\n }\n\n const allNames = new Set<string>([...previousNames, ...currentNames])\n\n let hasErrored = false\n for (const fullName of allNames) {\n const relativeName = fullName.startsWith(this.name + '[')\n ? fullName.slice((this.name as string).length)\n : fullName.slice((this.name as string).length + 1)\n const newFormValidatorError = fieldErrors?.[relativeName] as\n | ValidationError\n | undefined\n\n const fieldMeta = this.form.getFieldMeta(fullName as never)\n if (!fieldMeta && !newFormValidatorError) continue\n\n const previousErrorValue = fieldMeta?.errorMap[errorMapKey as never] as\n | ValidationError\n | undefined\n const isPreviousErrorFromFormValidator =\n (fieldMeta?.errorSourceMap[errorMapKey as never] as\n | string\n | undefined) === 'form'\n\n const { newErrorValue, newSource } =\n determineFormLevelErrorSourceAndValue({\n newFormValidatorError,\n isPreviousErrorFromFormValidator,\n previousErrorValue,\n })\n\n if (newErrorValue) hasErrored = true\n\n if (\n previousErrorValue === newErrorValue &&\n fieldMeta?.errorSourceMap[errorMapKey as never] === newSource\n ) {\n continue\n }\n\n this.form.setFieldMeta(fullName as never, (prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }))\n }\n\n this._lastDistributedFieldNames[errorMapKey] = currentNames\n return hasErrored\n }\n\n /**\n * @private\n */\n validateSync = (\n cause: ValidationCause,\n errorFromForm: ValidationErrorMap,\n opts: {\n skipRelatedFieldValidation?: boolean\n } = {},\n ) => {\n const validates = getSyncValidatorArray(cause, {\n ...this.options,\n form: this.form,\n group: this,\n validationLogic:\n this.options.validationLogic ||\n this.form.options.validationLogic ||\n defaultValidationLogic,\n })\n\n const relatedFields = opts.skipRelatedFieldValidation\n ? []\n : this.getRelatedFields()\n const relatedFieldValidates = relatedFields.reduce(\n (acc, field) => {\n const fieldValidates = getSyncValidatorArray(cause, {\n ...field.options,\n form: field.form,\n validationLogic:\n field.form.options.validationLogic || defaultValidationLogic,\n })\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n SyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n // Needs type cast as eslint errantly believes this is always falsy\n let hasErrored = false as boolean\n\n batch(() => {\n const validateFieldOrGroupFn = (\n fieldOrGroup: AnyFieldApi | AnyFormGroupApi,\n validateObj: SyncValidator<any>,\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n const isGroup = fieldOrGroup === this\n\n let rawError: unknown = undefined\n if (validateObj.validate) {\n rawError = (fieldOrGroup as any).runValidator({\n validate: validateObj.validate,\n value: {\n value: fieldOrGroup.store.state.value,\n // For the group's own validators we want standard schemas to\n // produce a `{ form, fields }` shape (with relative keys) so\n // we can fan errors out to children. Field-level validators on\n // related fields keep the regular field source.\n validationSource: isGroup ? 'form' : 'field',\n ...(fieldOrGroup instanceof FormGroupApi\n ? {\n groupApi: fieldOrGroup,\n }\n : { fieldApi: fieldOrGroup }),\n } as never,\n type: 'validate',\n })\n }\n\n let groupOwnRawError: unknown = rawError\n let groupFieldErrors: Record<string, unknown> | undefined = undefined\n if (isGroup && isGlobalGroupValidationError(rawError)) {\n groupOwnRawError = rawError.group\n groupFieldErrors = rawError.fields\n }\n\n const fieldLevelError = normalizeError(\n groupOwnRawError as ValidationError,\n )\n\n const formLevelError = errorFromForm[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (fieldOrGroup.state.meta.errorMap?.[errorMapKey] !== newErrorValue) {\n fieldOrGroup.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }))\n }\n if (newErrorValue) {\n hasErrored = true\n }\n\n if (isGroup) {\n const distributedHasErrored = this.distributeFieldErrors(\n errorMapKey,\n groupFieldErrors,\n )\n if (distributedHasErrored) {\n hasErrored = true\n }\n }\n }\n\n for (const validateObj of validates) {\n validateFieldOrGroupFn(this, validateObj)\n }\n for (const fieldValidateObj of relatedFieldValidates) {\n if (!fieldValidateObj.validate) continue\n validateFieldOrGroupFn(fieldValidateObj.field, fieldValidateObj)\n }\n })\n\n /**\n * when we have an error for onSubmit in the state, we want\n * to clear the error as soon as the user enters a valid value in the field\n */\n const submitErrKey = getErrorMapKey('submit')\n\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n this.state.meta.errorMap?.[submitErrKey] &&\n cause !== 'submit' &&\n !hasErrored\n ) {\n this.setMeta((prev) => ({\n ...prev,\n errorMap: {\n ...prev.errorMap,\n [submitErrKey]: undefined,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [submitErrKey]: undefined,\n },\n }))\n }\n\n return { hasErrored }\n }\n\n /**\n * @private\n */\n validateAsync = async (\n cause: ValidationCause,\n formValidationResultPromise: Promise<\n FieldErrorMapFromValidator<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync\n >\n >,\n opts: {\n skipRelatedFieldValidation?: boolean\n } = {},\n ) => {\n const validates = getAsyncValidatorArray(cause, {\n ...this.options,\n form: this.form,\n group: this,\n validationLogic:\n this.options.validationLogic ||\n this.form.options.validationLogic ||\n defaultValidationLogic,\n })\n\n // Get the field-specific error messages that are coming from the form's validator\n const asyncFormValidationResults = await formValidationResultPromise\n\n const relatedFields = opts.skipRelatedFieldValidation\n ? []\n : this.getRelatedFields()\n const relatedFieldValidates = relatedFields.reduce(\n (acc, field) => {\n const fieldValidates = getAsyncValidatorArray(cause, {\n ...field.options,\n form: field.form,\n validationLogic:\n field.form.options.validationLogic || defaultValidationLogic,\n })\n fieldValidates.forEach((validate) => {\n ;(validate as any).field = field\n })\n return acc.concat(fieldValidates as never)\n },\n [] as Array<\n AsyncValidator<any> & {\n field: AnyFieldApi\n }\n >,\n )\n\n /**\n * We have to use a for loop and generate our promises this way, otherwise it won't be sync\n * when there are no validators needed to be run\n */\n const validatesPromises: Promise<ValidationError | undefined>[] = []\n const linkedPromises: Promise<ValidationError | undefined>[] = []\n\n // Check if there are actual async validators to run before setting isValidating\n // This prevents unnecessary re-renders when there are no async validators\n // See: https://github.com/TanStack/form/issues/1130\n const hasAsyncValidators =\n validates.some((v) => v.validate) ||\n relatedFieldValidates.some((v) => v.validate)\n\n if (hasAsyncValidators) {\n if (!this.state.meta.isValidating) {\n this.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n\n for (const linkedField of relatedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: true }))\n }\n }\n\n const validateFieldOrGroupAsyncFn = (\n fieldOrGroup: AnyFieldApi | AnyFormGroupApi,\n validateObj: AsyncValidator<any>,\n promises: Promise<ValidationError | undefined>[],\n ) => {\n const errorMapKey = getErrorMapKey(validateObj.cause)\n const fieldInfo = fieldOrGroup.getInfo()\n const fieldValidatorMeta = fieldInfo.validationMetaMap[errorMapKey]\n\n fieldValidatorMeta?.lastAbortController.abort()\n const controller = new AbortController()\n\n fieldInfo.validationMetaMap[errorMapKey] = {\n lastAbortController: controller,\n }\n\n const isGroup = fieldOrGroup === this\n\n promises.push(\n new Promise<ValidationError | undefined>(async (resolve) => {\n let rawError!: ValidationError | undefined\n try {\n rawError = await new Promise((rawResolve, rawReject) => {\n if (fieldOrGroup.timeoutIds.validations[validateObj.cause]) {\n clearTimeout(\n fieldOrGroup.timeoutIds.validations[validateObj.cause]!,\n )\n }\n\n fieldOrGroup.timeoutIds.validations[validateObj.cause] =\n setTimeout(async () => {\n if (controller.signal.aborted) return rawResolve(undefined)\n try {\n rawResolve(\n await this.runValidator({\n validate: validateObj.validate,\n value: {\n value: fieldOrGroup.store.state.value,\n signal: controller.signal,\n // See sync counterpart: produce `{ form, fields }`\n // from standard schemas attached to the group so we\n // can fan errors out to children.\n validationSource: isGroup ? 'form' : 'field',\n ...(fieldOrGroup instanceof FormGroupApi\n ? {\n groupApi: fieldOrGroup,\n }\n : { fieldApi: fieldOrGroup }),\n } as never,\n type: 'validateAsync',\n }),\n )\n } catch (e) {\n rawReject(e)\n }\n }, validateObj.debounceMs)\n })\n } catch (e: unknown) {\n rawError = e as ValidationError\n }\n if (controller.signal.aborted) return resolve(undefined)\n\n let groupOwnRawError: ValidationError | undefined = rawError\n let groupFieldErrors: Record<string, unknown> | undefined = undefined\n if (isGroup && isGlobalGroupValidationError(rawError)) {\n groupOwnRawError = rawError.group as ValidationError | undefined\n groupFieldErrors = rawError.fields\n }\n\n const fieldLevelError = normalizeError(groupOwnRawError)\n const formLevelError =\n asyncFormValidationResults[\n fieldOrGroup.name as keyof typeof asyncFormValidationResults\n ]?.[errorMapKey]\n\n const { newErrorValue, newSource } =\n determineFieldLevelErrorSourceAndValue({\n formLevelError,\n fieldLevelError,\n })\n\n if (fieldOrGroup.getInfo().instance !== fieldOrGroup) {\n return resolve(undefined)\n }\n\n fieldOrGroup.setMeta((prev) => {\n return {\n ...prev,\n errorMap: {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ...prev?.errorMap,\n [errorMapKey]: newErrorValue,\n },\n errorSourceMap: {\n ...prev.errorSourceMap,\n [errorMapKey]: newSource,\n },\n }\n })\n\n if (isGroup) {\n this.distributeFieldErrors(errorMapKey, groupFieldErrors)\n }\n\n resolve(newErrorValue)\n }),\n )\n }\n\n // TODO: Dedupe this logic to reduce bundle size\n for (const validateObj of validates) {\n if (!validateObj.validate) continue\n validateFieldOrGroupAsyncFn(this, validateObj, validatesPromises)\n }\n for (const fieldValitateObj of relatedFieldValidates) {\n if (!fieldValitateObj.validate) continue\n validateFieldOrGroupAsyncFn(\n fieldValitateObj.field,\n fieldValitateObj,\n linkedPromises,\n )\n }\n\n let results: ValidationError[] = []\n if (validatesPromises.length || linkedPromises.length) {\n results = await Promise.all(validatesPromises)\n await Promise.all(linkedPromises)\n }\n\n // Only reset isValidating if we set it to true earlier\n if (hasAsyncValidators) {\n this.setMeta((prev) => ({ ...prev, isValidating: false }))\n\n for (const linkedField of relatedFields) {\n linkedField.setMeta((prev) => ({ ...prev, isValidating: false }))\n }\n }\n\n return results.filter(Boolean)\n }\n\n /**\n * Validates all fields according to the FIELD level validators.\n * This will ignore FORM level validators, use form.validate({ValidationCause}) for a complete validation\n */\n validateAllFields = async (cause: ValidationCause) => {\n const fieldValidationPromises: Promise<ValidationError[]>[] = [] as any\n\n batch(() => {\n void Object.values(this.getRelatedFields()).forEach((fieldInstance) => {\n // Validate the field\n fieldValidationPromises.push(\n // Remember, `validate` is either a sync operation or a promise\n Promise.resolve().then(() =>\n fieldInstance.validate(cause, {\n skipFormValidation: true,\n skipGroupValidation: true,\n }),\n ),\n )\n\n // If any fields are not touched\n if (!fieldInstance.store.state.meta.isTouched) {\n // Mark them as touched\n fieldInstance.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n })\n })\n\n const fieldErrorMapMap = await Promise.all(fieldValidationPromises)\n return fieldErrorMapMap.flat()\n }\n\n validateArrayFieldsStartingFrom = <\n TField extends DeepKeysOfType<TParentData, any[]>,\n >(\n field: TField,\n index: number,\n cause: ValidationCause,\n ) => {\n return this.form.validateArrayFieldsStartingFrom(field, index, cause)\n }\n\n validateField = <TField extends DeepKeysOfType<TParentData, any>>(\n field: TField,\n cause: ValidationCause,\n ) => {\n return this.form.validateField(field, cause)\n }\n\n getFieldValue = <TField extends DeepKeysOfType<TParentData, any>>(\n field: TField,\n ) => {\n return this.form.getFieldValue(field)\n }\n\n getFieldMeta = <TField extends DeepKeysOfType<TParentData, any>>(\n field: TField,\n ) => {\n return this.form.getFieldMeta(field)\n }\n\n setFieldMeta = <TField extends DeepKeysOfType<TParentData, any>>(\n field: TField,\n updater: Updater<AnyFieldLikeMetaBase>,\n ) => {\n return this.form.setFieldMeta(field, updater)\n }\n\n setFieldValue = <TField extends DeepKeysOfType<TParentData, any>>(\n field: TField,\n value: any,\n ) => {\n return this.form.setFieldValue(field, value)\n }\n\n deleteField = <TField extends DeepKeysOfType<TParentData, any>>(\n field: TField,\n ) => {\n return this.form.deleteField(field)\n }\n\n pushFieldValue = <TField extends DeepKeysOfType<TParentData, any[]>>(\n field: TField,\n value: any,\n ) => {\n return this.form.pushFieldValue(field, value)\n }\n\n insertFieldValue = <TField extends DeepKeysOfType<TParentData, any[]>>(\n field: TField,\n index: number,\n value: any,\n ) => {\n return this.form.insertFieldValue(field, index, value)\n }\n\n replaceFieldValue = <TField extends DeepKeysOfType<TParentData, any[]>>(\n field: TField,\n index: number,\n value: any,\n ) => {\n return this.form.replaceFieldValue(field, index, value)\n }\n\n swapFieldValues = <TField extends DeepKeysOfType<TParentData, any[]>>(\n field: TField,\n index1: number,\n index2: number,\n ) => {\n return this.form.swapFieldValues(field, index1, index2)\n }\n\n moveFieldValues = <TField extends DeepKeysOfType<TParentData, any[]>>(\n field: TField,\n fromIndex: number,\n toIndex: number,\n ) => {\n return this.form.moveFieldValues(field, fromIndex, toIndex)\n }\n\n clearFieldValues = <TField extends DeepKeysOfType<TParentData, any[]>>(\n field: TField,\n ) => {\n return this.form.clearFieldValues(field)\n }\n\n resetField = <TField extends DeepKeysOfType<TParentData, any>>(\n field: TField,\n ) => {\n return this.form.resetField(field)\n }\n\n removeFieldValue = <TField extends DeepKeysOfType<TParentData, any[]>>(\n field: TField,\n index: number,\n ) => {\n return this.form.removeFieldValue(field, index)\n }\n\n areRelatedFieldsValid = () => {\n return Object.values(this.getRelatedFields()).every(\n (field) => field.state.meta.isValid,\n )\n }\n\n /**\n * Validates the form group and all related children.\n */\n validate = (\n cause: ValidationCause,\n opts?: {\n skipFormValidation?: boolean\n skipRelatedFieldValidation?: boolean\n },\n ): ValidationError[] | Promise<ValidationError[]> => {\n // Attempt to sync validate first\n const { fieldsErrorMap } = opts?.skipFormValidation\n ? { fieldsErrorMap: {} as never }\n : this.form.validateSync(cause, {\n dontUpdateFormErrorMap: true,\n filterFieldNames: (fieldName) => isFieldInGroup(this.name, fieldName),\n })\n const { hasErrored } = this.validateSync(\n cause,\n fieldsErrorMap[this.name] ?? {},\n { skipRelatedFieldValidation: opts?.skipRelatedFieldValidation },\n )\n\n if (hasErrored && !this.options.asyncAlways) {\n this.getInfo().validationMetaMap[\n getErrorMapKey(cause)\n ]?.lastAbortController.abort()\n return this.state.meta.errors\n }\n\n // No error? Attempt async validation\n const formValidationResultPromise = opts?.skipFormValidation\n ? Promise.resolve({})\n : this.form.validateAsync(cause, {\n dontUpdateFormErrorMap: true,\n filterFieldNames: (fieldName) => isFieldInGroup(this.name, fieldName),\n })\n return this.validateAsync(cause, formValidationResultPromise, {\n skipRelatedFieldValidation: opts?.skipRelatedFieldValidation,\n })\n }\n\n /**\n * @private\n */\n triggerOnChangeListener = () => {\n const formDebounceMs = this.form.options.listeners?.onChangeGroupDebounceMs\n if (formDebounceMs && formDebounceMs > 0) {\n if (this.timeoutIds.formListeners.change) {\n clearTimeout(this.timeoutIds.formListeners.change)\n }\n\n this.timeoutIds.formListeners.change = setTimeout(() => {\n this.form.options.listeners?.onChangeGroup?.({\n formApi: this.form,\n groupApi: this,\n })\n }, formDebounceMs)\n } else {\n this.form.options.listeners?.onChangeGroup?.({\n formApi: this.form,\n groupApi: this,\n })\n }\n\n const fieldDebounceMs = this.options.listeners?.onChangeDebounceMs\n if (fieldDebounceMs && fieldDebounceMs > 0) {\n if (this.timeoutIds.listeners.change) {\n clearTimeout(this.timeoutIds.listeners.change)\n }\n\n this.timeoutIds.listeners.change = setTimeout(() => {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n groupApi: this,\n })\n }, fieldDebounceMs)\n } else {\n this.options.listeners?.onChange?.({\n value: this.state.value,\n groupApi: this,\n })\n }\n }\n\n /**\n * @private\n */\n triggerOnSubmitListener = () => {\n this.options.listeners?.onSubmit?.({\n value: this.state.value,\n groupApi: this,\n })\n }\n\n // Needs to edgecase in the React adapter specifically to avoid type errors\n handleSubmit(): Promise<void>\n handleSubmit(submitMeta: TSubmitMeta): Promise<void>\n handleSubmit(submitMeta?: TSubmitMeta): Promise<void> {\n return this._handleSubmit(submitMeta)\n }\n\n /**\n * Handles the form submission, performs validation, and calls the appropriate onSubmit or onSubmitInvalid callbacks.\n */\n _handleSubmit = async (submitMeta?: TSubmitMeta): Promise<void> => {\n this.setFormGroupState((old) => ({\n ...old,\n // Submission attempts mark the form as not submitted\n isSubmitted: false,\n // Count submission attempts\n submissionAttempts: old.submissionAttempts + 1,\n isSubmitSuccessful: false, // Reset isSubmitSuccessful at the start of submission\n }))\n\n batch(() => {\n void Object.values(this.getRelatedFields()).forEach((field) => {\n // If any fields are not touched\n if (!field.state.meta.isTouched) {\n // Mark them as touched\n field.setMeta((prev) => ({ ...prev, isTouched: true }))\n }\n })\n })\n\n const submitMetaArg =\n submitMeta ?? (this.options.onSubmitMeta as TSubmitMeta)\n\n this.setFormGroupState((d) => ({ ...d, isSubmitting: true }))\n\n const done = () => {\n this.setFormGroupState((prev) => ({ ...prev, isSubmitting: false }))\n }\n\n await this.validateAllFields('submit')\n\n // Fields are invalid, do not submit\n if (!this.areRelatedFieldsValid()) {\n done()\n\n this.options.onGroupSubmitInvalid?.({\n value: this.state.value,\n groupApi: this,\n meta: submitMetaArg,\n })\n\n return\n }\n\n await this.validate('submit', {\n // This has already happened in the previous step\n skipRelatedFieldValidation: true,\n })\n\n // Group (or related fields) is invalid, do not submit. Mirrors\n // `FormApi._handleSubmit`'s check against the derived `state.isValid`,\n // which includes both the group's own validators and any form-level\n // errors propagated onto related fields by `validate('submit')` above\n // (e.g. `onDynamic` errors via `revalidateLogic`).\n\n if (!this.areRelatedFieldsValid() || !this.state.meta.isValid) {\n done()\n\n this.options.onGroupSubmitInvalid?.({\n value: this.state.value,\n groupApi: this,\n meta: submitMetaArg,\n })\n\n return\n }\n\n batch(() => {\n void Object.values(this.getRelatedFields()).forEach((field) => {\n field.options.listeners?.onGroupSubmit?.({\n value: field.state.value,\n fieldApi: field,\n })\n })\n })\n\n this.options.listeners?.onSubmit?.({\n groupApi: this,\n value: this.state.value,\n })\n\n try {\n // Run the submit code\n await this.options.onGroupSubmit?.({\n value: this.state.value,\n groupApi: this,\n meta: submitMetaArg,\n })\n\n batch(() => {\n this.setFormGroupState((prev) => ({\n ...prev,\n isSubmitted: true,\n isSubmitSuccessful: true, // Set isSubmitSuccessful to true on successful submission\n }))\n\n done()\n })\n } catch (err) {\n this.setFormGroupState((prev) => ({\n ...prev,\n isSubmitSuccessful: false, // Ensure isSubmitSuccessful is false if an error occurs\n }))\n\n done()\n\n throw err\n }\n }\n}\n\nfunction normalizeError(rawError?: ValidationError) {\n if (rawError) {\n return rawError\n }\n\n return undefined\n}\n\n/**\n * @private\n *\n * Type guard for the group-level analogue of `GlobalFormValidationError`.\n * Group-level validators that want to fan errors out to child fields return\n * `{ group?: ValidationError, fields: { ...relativePath: ValidationError } }`.\n */\nfunction isGlobalGroupValidationError(\n error: unknown,\n): error is { group?: unknown; fields?: Record<string, unknown> } {\n return !!error && typeof error === 'object' && 'fields' in error\n}\n\n/**\n * @private\n *\n * Standard schemas produce `{ form, fields }`. For groups we prefer to expose\n * a `{ group, fields }` shape because `form` would be misleading on a\n * group-level validator. This rename keeps the rest of the group validation\n * pipeline operating on a single shape.\n */\nfunction remapStandardSchemaResultForGroup(result: unknown): unknown {\n if (!result || typeof result !== 'object') return result\n if (!('form' in result) && !('fields' in result)) return result\n const { form, fields, ...rest } = result as {\n form?: unknown\n fields?: unknown\n }\n return { ...rest, group: form, fields }\n}\n\nfunction getErrorMapKey(cause: ValidationCause) {\n switch (cause) {\n case 'submit':\n return 'onSubmit'\n case 'blur':\n return 'onBlur'\n case 'mount':\n return 'onMount'\n case 'server':\n return 'onServer'\n case 'dynamic':\n return 'onDynamic'\n case 'change':\n default:\n return 'onChange'\n }\n}\n","import type {\n FormAsyncValidateOrFn,\n FormOptions,\n FormValidateOrFn,\n} from './FormApi'\n\n/*\n\nThese types need to do two things:\n\n1. Validator generics need to depend on the TFormData generic\n2. The resulting needs to allow overriding values\n\nThe generics from formOptions almost work, except that it loses information\nabout how to infer TFormData.\nIf you pass a validator function, it tries to resolve the `formApi` or `value`\ninside of it, meaning that TFormData changes to `unknown`.\n\nTo bypass this, the intersection for defaultOpts gives TypeScript that information again,\nwithout losing the benefits from the TOptions generic.\n*/\n\nexport function formOptions<\n TOptions extends Partial<\n FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n >,\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta = never,\n>(\n defaultOpts: Partial<\n FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n > &\n TOptions,\n): TOptions {\n return defaultOpts\n}\n","import { createStore } from '@tanstack/store'\nimport { concatenatePaths, getBy, makePathArray } from './utils'\nimport type {\n AnyFieldLikeMetaBase,\n FormLikeAPI,\n UpdateMetaOptions,\n ValidationCause,\n} from './types'\nimport type { ReadonlyStore } from '@tanstack/store'\nimport type { Updater } from './utils'\nimport type {\n FormApi,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from './FormApi'\nimport type { FieldOptions } from './FieldApi'\nimport type {\n DeepKeys,\n DeepKeysOfType,\n DeepValue,\n FieldsMap,\n} from './util-types'\n\nexport type AnyFieldGroupApi = FieldGroupApi<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n>\n\nexport interface FieldGroupState<in out TFieldGroupData> {\n /**\n * The current values of the field group\n */\n values: TFieldGroupData\n}\n\n/**\n * An object representing the options for a field group.\n */\nexport interface FieldGroupOptions<\n in out TFormData,\n in out TFieldGroupData,\n in out TFields extends\n | DeepKeysOfType<TFormData, TFieldGroupData | null | undefined>\n | FieldsMap<TFormData, TFieldGroupData>,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TSubmitMeta = never,\n> {\n form:\n | FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n | FieldGroupApi<\n any,\n TFormData,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n TSubmitMeta\n >\n /**\n * The path to the field group data.\n */\n fields: TFields\n /**\n * The expected subsetValues that the form must provide.\n */\n defaultValues?: TFieldGroupData\n /**\n * onSubmitMeta, the data passed from the handleSubmit handler, to the onSubmit function props\n */\n onSubmitMeta?: TSubmitMeta\n}\n\nexport class FieldGroupApi<\n in out TFormData,\n in out TFieldGroupData,\n in out TFields extends\n | DeepKeysOfType<TFormData, TFieldGroupData | null | undefined>\n | FieldsMap<TFormData, TFieldGroupData>,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TSubmitMeta = never,\n> implements FormLikeAPI<TFieldGroupData, TSubmitMeta> {\n /**\n * The form that called this field group.\n */\n readonly form: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n\n readonly fieldsMap: TFields\n\n /**\n * Get the true name of the field. Not required within `Field` or `AppField`.\n * @private\n */\n getFormFieldName = <TField extends DeepKeys<TFieldGroupData>>(\n subfield: TField,\n ): DeepKeys<TFormData> => {\n if (typeof this.fieldsMap === 'string') {\n return concatenatePaths(this.fieldsMap, subfield)\n }\n\n const firstAccessor = makePathArray(subfield)[0]\n if (typeof firstAccessor !== 'string') {\n // top-level arrays cannot be mapped\n return ''\n }\n\n const restOfPath = subfield.slice(firstAccessor.length)\n const formMappedPath =\n // TFields is either a string or this. See guard above.\n (this.fieldsMap as FieldsMap<TFormData, TFieldGroupData>)[\n firstAccessor as keyof TFieldGroupData\n ]\n\n return concatenatePaths(formMappedPath, restOfPath)\n }\n\n /**\n * Get the field options with the true form DeepKeys for validators\n * @private\n */\n getFormFieldOptions = <\n TOptions extends FieldOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n >(\n props: TOptions,\n ): TOptions => {\n const newProps = { ...props }\n const validators = newProps.validators\n\n newProps.name = this.getFormFieldName(props.name)\n\n if (\n validators &&\n (validators.onChangeListenTo || validators.onBlurListenTo)\n ) {\n const newValidators = { ...validators }\n\n const remapListenTo = (listenTo: DeepKeys<any>[] | undefined) => {\n if (!listenTo) return undefined\n return listenTo.map((localFieldName) =>\n this.getFormFieldName(localFieldName),\n )\n }\n\n newValidators.onChangeListenTo = remapListenTo(\n validators.onChangeListenTo,\n )\n newValidators.onBlurListenTo = remapListenTo(validators.onBlurListenTo)\n\n newProps.validators = newValidators\n }\n\n return newProps\n }\n\n store: ReadonlyStore<FieldGroupState<TFieldGroupData>>\n\n get state() {\n return this.store.state\n }\n\n /**\n * Constructs a new `FieldGroupApi` instance with the given form options.\n */\n constructor(\n opts: FieldGroupOptions<\n TFormData,\n TFieldGroupData,\n TFields,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ) {\n if (opts.form instanceof FieldGroupApi) {\n const group = opts.form\n this.form = group.form as never\n\n // the DeepKey is already namespaced, so we need to ensure that we reference\n // the form and not the group\n if (typeof opts.fields === 'string') {\n this.fieldsMap = group.getFormFieldName(opts.fields) as TFields\n } else {\n // TypeScript has a tough time with generics being a union for some reason\n const fields = {\n ...(opts.fields as FieldsMap<TFormData, TFieldGroupData>),\n }\n for (const key in fields) {\n fields[key] = group.getFormFieldName(fields[key]) as never\n }\n this.fieldsMap = fields as never\n }\n } else {\n this.form = opts.form\n this.fieldsMap = opts.fields\n }\n\n this.store = createStore(() => {\n const currFormStore = this.form.store.get()\n let values: TFieldGroupData\n if (typeof this.fieldsMap === 'string') {\n // all values live at that name, so we can directly fetch it\n values = getBy(currFormStore.values, this.fieldsMap)\n } else {\n // we need to fetch the values from all places where they were mapped from\n values = {} as never\n const fields: Record<keyof TFieldGroupData, string> = this\n .fieldsMap as never\n for (const key in fields) {\n values[key] = getBy(currFormStore.values, fields[key])\n }\n }\n\n return {\n values,\n }\n })\n }\n\n /**\n * Mounts the field group instance to listen to value changes.\n *\n * TODO: Remove\n */\n mount = () => {\n return () => {}\n }\n\n /**\n * Validates the children of a specified array in the form starting from a given index until the end using the correct handlers for a given validation type.\n */\n validateArrayFieldsStartingFrom = async <\n TField extends DeepKeysOfType<TFieldGroupData, any[]>,\n >(\n field: TField,\n index: number,\n cause: ValidationCause,\n ) => {\n return this.form.validateArrayFieldsStartingFrom(\n this.getFormFieldName(field),\n index,\n cause,\n )\n }\n\n /**\n * Validates a specified field in the form using the correct handlers for a given validation type.\n */\n validateField = <TField extends DeepKeys<TFieldGroupData>>(\n field: TField,\n cause: ValidationCause,\n ) => {\n return this.form.validateField(this.getFormFieldName(field), cause)\n }\n\n /**\n * Handles the form submission, performs validation, and calls the appropriate onSubmit or onSubmitInvalid callbacks.\n */\n handleSubmit(): Promise<void>\n handleSubmit(submitMeta: TSubmitMeta): Promise<void>\n async handleSubmit(submitMeta?: TSubmitMeta): Promise<void> {\n // cast is required since the implementation isn't one of the two overloads\n return this.form.handleSubmit(submitMeta as any)\n }\n\n /**\n * Gets the value of the specified field.\n */\n getFieldValue = <TField extends DeepKeys<TFieldGroupData>>(\n field: TField,\n ): DeepValue<TFieldGroupData, TField> => {\n return this.form.getFieldValue(this.getFormFieldName(field)) as DeepValue<\n TFieldGroupData,\n TField\n >\n }\n\n /**\n * Gets the metadata of the specified field.\n */\n getFieldMeta = <TField extends DeepKeys<TFieldGroupData>>(field: TField) => {\n return this.form.getFieldMeta(this.getFormFieldName(field))\n }\n\n /**\n * Updates the metadata of the specified field.\n */\n setFieldMeta = <TField extends DeepKeys<TFieldGroupData>>(\n field: TField,\n updater: Updater<AnyFieldLikeMetaBase>,\n ) => {\n return this.form.setFieldMeta(this.getFormFieldName(field), updater)\n }\n\n /**\n * Sets the value of the specified field and optionally updates the touched state.\n */\n setFieldValue = <TField extends DeepKeys<TFieldGroupData>>(\n field: TField,\n updater: Updater<DeepValue<TFieldGroupData, TField>>,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.setFieldValue(\n this.getFormFieldName(field) as never,\n updater as never,\n opts,\n )\n }\n\n /**\n * Delete a field and its subfields.\n */\n deleteField = <TField extends DeepKeys<TFieldGroupData>>(field: TField) => {\n return this.form.deleteField(this.getFormFieldName(field))\n }\n\n /**\n * Pushes a value into an array field.\n */\n pushFieldValue = <TField extends DeepKeysOfType<TFieldGroupData, any[]>>(\n field: TField,\n value: DeepValue<TFieldGroupData, TField> extends any[]\n ? DeepValue<TFieldGroupData, TField>[number]\n : never,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.pushFieldValue(\n this.getFormFieldName(field),\n // since unknown doesn't extend an array, it types `value` as never.\n value as never,\n opts,\n )\n }\n\n /**\n * Insert a value into an array field at the specified index.\n */\n insertFieldValue = async <\n TField extends DeepKeysOfType<TFieldGroupData, any[]>,\n >(\n field: TField,\n index: number,\n value: DeepValue<TFieldGroupData, TField> extends any[]\n ? DeepValue<TFieldGroupData, TField>[number]\n : never,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.insertFieldValue(\n this.getFormFieldName(field),\n index,\n // since unknown doesn't extend an array, it types `value` as never.\n value as never,\n opts,\n )\n }\n\n /**\n * Replaces a value into an array field at the specified index.\n */\n replaceFieldValue = async <\n TField extends DeepKeysOfType<TFieldGroupData, any[]>,\n >(\n field: TField,\n index: number,\n value: DeepValue<TFieldGroupData, TField> extends any[]\n ? DeepValue<TFieldGroupData, TField>[number]\n : never,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.replaceFieldValue(\n this.getFormFieldName(field),\n index,\n // since unknown doesn't extend an array, it types `value` as never.\n value as never,\n opts,\n )\n }\n\n /**\n * Removes a value from an array field at the specified index.\n */\n removeFieldValue = async <\n TField extends DeepKeysOfType<TFieldGroupData, any[]>,\n >(\n field: TField,\n index: number,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.removeFieldValue(this.getFormFieldName(field), index, opts)\n }\n\n /**\n * Swaps the values at the specified indices within an array field.\n */\n swapFieldValues = <TField extends DeepKeysOfType<TFieldGroupData, any[]>>(\n field: TField,\n index1: number,\n index2: number,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.swapFieldValues(\n this.getFormFieldName(field),\n index1,\n index2,\n opts,\n )\n }\n\n /**\n * Moves the value at the first specified index to the second specified index within an array field.\n */\n moveFieldValues = <TField extends DeepKeysOfType<TFieldGroupData, any[]>>(\n field: TField,\n index1: number,\n index2: number,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.moveFieldValues(\n this.getFormFieldName(field),\n index1,\n index2,\n opts,\n )\n }\n\n clearFieldValues = <TField extends DeepKeysOfType<TFieldGroupData, any[]>>(\n field: TField,\n opts?: UpdateMetaOptions,\n ) => {\n return this.form.clearFieldValues(this.getFormFieldName(field), opts)\n }\n\n /**\n * Resets the field value and meta to default state\n */\n resetField = <TField extends DeepKeys<TFieldGroupData>>(field: TField) => {\n return this.form.resetField(this.getFormFieldName(field))\n }\n\n validateAllFields = (cause: ValidationCause) =>\n this.form.validateAllFields(cause)\n}\n","import { batch } from '@tanstack/store'\nimport { deepCopy } from './utils'\nimport type {\n AnyBaseFormState,\n FormApi,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from './FormApi'\n\n/**\n * @private\n */\nexport type FormTransform<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta = never,\n> = (\n formBase: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n) => FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n>\n\n/**\n * @private\n */\nexport function mergeAndUpdate<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta = never,\n>(\n form: FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n fn?: FormTransform<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n) {\n // Run the `transform` function on `form.state`, diff it, and update the relevant parts with what needs updating\n if (!fn) return\n\n const newObj = Object.assign({}, form, {\n state: deepCopy(form.state),\n })\n\n fn(newObj)\n\n if (newObj.fieldInfo !== form.fieldInfo) {\n form.fieldInfo = newObj.fieldInfo\n }\n\n if (newObj.options !== form.options) {\n form.options = newObj.options\n }\n\n const baseFormKeys = Object.keys({\n values: null,\n validationMetaMap: null,\n fieldMetaBase: null,\n formGroupStateBase: null,\n isSubmitting: null,\n isSubmitted: null,\n isValidating: null,\n submissionAttempts: null,\n isSubmitSuccessful: null,\n _force_re_eval: null,\n // Do not remove this, it ensures that we have all the keys in `BaseFormState`\n } satisfies Record<\n // Exclude errorMap since we need to handle that uniquely\n Exclude<keyof AnyBaseFormState, 'errorMap'>,\n null\n >) as Array<keyof AnyBaseFormState>\n\n const diffedObject = baseFormKeys.reduce((prev, key) => {\n if (form.state[key] !== newObj.state[key]) {\n prev[key] = newObj.state[key]\n }\n return prev\n }, {} as Partial<AnyBaseFormState>)\n\n batch(() => {\n if (Object.keys(diffedObject).length) {\n form.baseStore.setState((prev) => ({ ...prev, ...diffedObject }))\n }\n\n if (newObj.state.errorMap !== form.state.errorMap) {\n // Check if we need to update `fieldMetaBase` with `errorMaps` set by\n form.setErrorMap(newObj.state.errorMap)\n }\n })\n\n return newObj\n}\n","import { useCallback } from 'react'\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector'\n\nexport interface UseSelectorOptions<TSelected> {\n compare?: (a: TSelected, b: TSelected) => boolean\n}\n\ntype SyncExternalStoreSubscribe = Parameters<\n typeof useSyncExternalStoreWithSelector\n>[0]\n\ntype SelectionSource<T> = {\n get: () => T\n subscribe: (listener: (value: T) => void) => {\n unsubscribe: () => void\n }\n}\n\nfunction defaultCompare<T>(a: T, b: T) {\n return a === b\n}\n\n/**\n * Selects a slice of state from an atom or store and subscribes the component\n * to that selection.\n *\n * This is the primary React read hook for TanStack Store. It works with any\n * source that exposes `get()` and `subscribe()`, including atoms, readonly\n * atoms, stores, and readonly stores.\n *\n * Omit the selector to subscribe to the whole value.\n *\n * @example\n * ```tsx\n * const count = useSelector(counterStore, (state) => state.count)\n * ```\n *\n * @example\n * ```tsx\n * const value = useSelector(countAtom)\n * ```\n */\nexport function useSelector<TSource, TSelected = NoInfer<TSource>>(\n source: SelectionSource<TSource>,\n selector: (snapshot: TSource) => TSelected = (s) => s as unknown as TSelected,\n options?: UseSelectorOptions<TSelected>,\n): TSelected {\n const compare = options?.compare ?? defaultCompare\n\n const subscribe: SyncExternalStoreSubscribe = useCallback(\n (handleStoreChange) => {\n const { unsubscribe } = source.subscribe(handleStoreChange)\n return unsubscribe\n },\n [source],\n )\n\n const getSnapshot = useCallback(() => source.get(), [source])\n\n return useSyncExternalStoreWithSelector(\n subscribe,\n getSnapshot,\n getSnapshot,\n selector,\n compare,\n )\n}\n","import { useSelector } from './useSelector'\n\n/**\n * Deprecated alias for {@link useSelector}.\n *\n * @example\n * ```tsx\n * const count = useStore(counterStore, (state) => state.count)\n * ```\n *\n * @deprecated Use `useSelector` instead.\n */\nexport const useStore = <TSource, TSelected = NoInfer<TSource>>(\n source: {\n get: () => TSource\n subscribe: (listener: (value: TSource) => void) => {\n unsubscribe: () => void\n }\n },\n selector: (snapshot: TSource) => TSelected = (s) => s as unknown as TSelected,\n compare?: (a: TSelected, b: TSelected) => boolean,\n) => useSelector(source, selector, { compare })\n","import { useEffect, useLayoutEffect } from 'react'\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n","'use client'\n\nimport { useMemo, useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport { FieldApi, functionalUpdate } from '@tanstack/form-core'\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\nimport type {\n AnyFieldApi,\n AnyFieldMeta,\n DeepKeys,\n DeepValue,\n FieldAsyncValidateOrFn,\n FieldValidateOrFn,\n FieldValidators,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { FunctionComponent, ReactNode } from 'react'\nimport type { UseFieldOptions, UseFieldOptionsBound } from './types'\n\n/**\n * A type representing a hook for using a field in a form with the given form data type.\n *\n * A function that takes an optional object with a `name` property and field options, and returns a `FieldApi` instance for the specified field.\n */\nexport type UseField<\n TParentData,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TPatentSubmitMeta,\n> = <\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n>(\n opts: UseFieldOptionsBound<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >,\n) => FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta\n>\n\n/**\n * A hook for managing a field in a form.\n * @param opts An object with field options.\n *\n * @returns The `FieldApi` instance for the specified field.\n */\nexport function useField<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TPatentSubmitMeta,\n>(\n opts: UseFieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta\n >,\n) {\n // Keep a snapshot of options so that React Compiler doesn't\n // wrongly optimize fieldApi.\n const [prevOptions, setPrevOptions] = useState(() => ({\n form: opts.form,\n name: opts.name,\n }))\n\n const [fieldApi, setFieldApi] = useState(() => {\n return new FieldApi({\n ...opts,\n })\n })\n\n // We only want to\n // update on name changes since those are at risk of becoming stale. The field\n // state must be up to date for the internal JSX render.\n // The other options can freely be in `fieldApi.update`\n if (prevOptions.form !== opts.form || prevOptions.name !== opts.name) {\n setFieldApi(\n new FieldApi({\n ...opts,\n }),\n )\n setPrevOptions({ form: opts.form, name: opts.name })\n }\n\n // For array mode, only track length changes to avoid re-renders when child properties change\n // See: https://github.com/TanStack/form/issues/1925\n const reactiveStateValue = useStore(\n fieldApi.store,\n (opts.mode === 'array'\n ? (state) => state.meta._arrayVersion || 0\n : (state) => state.value) as (\n state: typeof fieldApi.state,\n ) => TData | number,\n )\n const reactiveMetaIsTouched = useStore(\n fieldApi.store,\n (state) => state.meta.isTouched,\n )\n const reactiveMetaIsBlurred = useStore(\n fieldApi.store,\n (state) => state.meta.isBlurred,\n )\n const reactiveMetaIsDirty = useStore(\n fieldApi.store,\n (state) => state.meta.isDirty,\n )\n const reactiveMetaErrorMap = useStore(\n fieldApi.store,\n (state) => state.meta.errorMap,\n )\n const reactiveMetaErrorSourceMap = useStore(\n fieldApi.store,\n (state) => state.meta.errorSourceMap,\n )\n const reactiveMetaIsValidating = useStore(\n fieldApi.store,\n (state) => state.meta.isValidating,\n )\n\n // This makes me sad, but if I understand correctly, this is what we have to do for reactivity to work properly with React compiler.\n const extendedFieldApi = useMemo(() => {\n const reactiveFieldApi = {\n ...fieldApi,\n get state() {\n return {\n // For array mode, reactiveStateValue is the length (for reactivity tracking),\n // so we need to get the actual value from fieldApi\n value:\n opts.mode === 'array' ? fieldApi.state.value : reactiveStateValue,\n get meta() {\n return {\n ...fieldApi.state.meta,\n isTouched: reactiveMetaIsTouched,\n isBlurred: reactiveMetaIsBlurred,\n isDirty: reactiveMetaIsDirty,\n errorMap: reactiveMetaErrorMap,\n errorSourceMap: reactiveMetaErrorSourceMap,\n isValidating: reactiveMetaIsValidating,\n } satisfies AnyFieldMeta\n },\n } satisfies AnyFieldApi['state']\n },\n }\n\n const extendedApi: FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta\n > = reactiveFieldApi as never\n\n return extendedApi\n }, [\n fieldApi,\n opts.mode,\n reactiveStateValue,\n reactiveMetaIsTouched,\n reactiveMetaIsBlurred,\n reactiveMetaIsDirty,\n reactiveMetaErrorMap,\n reactiveMetaErrorSourceMap,\n reactiveMetaIsValidating,\n ])\n\n useIsomorphicLayoutEffect(fieldApi.mount, [fieldApi])\n\n /**\n * fieldApi.update should not have any side effects. Think of it like a `useRef`\n * that we need to keep updated every render with the most up-to-date information.\n */\n useIsomorphicLayoutEffect(() => {\n fieldApi.update(opts)\n })\n\n return extendedFieldApi\n}\n\n/**\n * @param children A render function that takes a field API instance and returns a React element.\n */\ninterface FieldComponentProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TPatentSubmitMeta,\n ExtendedApi = {},\n> extends UseFieldOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta\n> {\n children: (\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta\n > &\n ExtendedApi,\n ) => ReactNode\n}\n\ninterface FieldComponentBoundProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TPatentSubmitMeta,\n ExtendedApi = {},\n> extends UseFieldOptionsBound<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n> {\n children: (\n fieldApi: FieldApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta\n > &\n ExtendedApi,\n ) => ReactNode\n}\n\n/**\n * A type alias representing a field component for a specific form data type.\n */\nexport type FieldComponent<\n in out TParentData,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TPatentSubmitMeta,\n in out ExtendedApi = {},\n> = <\n const TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n>({\n children,\n ...fieldOptions\n}: FieldComponentBoundProps<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta,\n ExtendedApi\n>) => ReturnType<FunctionComponent>\n\n/**\n * A type alias representing a field component for a form lens data type.\n */\nexport type LensFieldComponent<\n in out TLensData,\n in out TParentSubmitMeta,\n in out ExtendedApi = {},\n> = <\n const TName extends DeepKeys<TLensData>,\n TData extends DeepValue<TLensData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<unknown, string, TData>,\n TOnChange extends undefined | FieldValidateOrFn<unknown, string, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<unknown, string, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<unknown, string, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<unknown, string, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<unknown, string, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<unknown, string, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<unknown, string, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<unknown, string, TData>,\n>({\n children,\n ...fieldOptions\n}: Omit<\n FieldComponentBoundProps<\n unknown,\n string,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n TParentSubmitMeta,\n ExtendedApi\n >,\n 'name' | 'validators'\n> & {\n name: TName\n validators?: Omit<\n FieldValidators<\n unknown,\n string,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync\n >,\n 'onChangeListenTo' | 'onBlurListenTo'\n > & {\n /**\n * An optional list of field names that should trigger this field's `onChange` and `onChangeAsync` events when its value changes\n */\n onChangeListenTo?: DeepKeys<TLensData>[]\n /**\n * An optional list of field names that should trigger this field's `onBlur` and `onBlurAsync` events when its value changes\n */\n onBlurListenTo?: DeepKeys<TLensData>[]\n }\n}) => ReturnType<FunctionComponent>\n\n/**\n * A function component that takes field options and a render function as children and returns a React component.\n *\n * The `Field` component uses the `useField` hook internally to manage the field instance.\n */\nexport const Field = (<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChange extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends undefined | FieldValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FieldAsyncValidateOrFn<TParentData, TName, TData>,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TPatentSubmitMeta,\n>({\n children,\n ...fieldOptions\n}: FieldComponentProps<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TPatentSubmitMeta\n>): ReturnType<FunctionComponent> => {\n const fieldApi = useField(fieldOptions as any)\n\n const jsxToDisplay = useMemo(\n () => functionalUpdate(children, fieldApi as any),\n [children, fieldApi],\n )\n return (<>{jsxToDisplay}</>) as never\n}) satisfies FunctionComponent<\n FieldComponentProps<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n>\n","import { useState } from 'react'\nimport { uuid } from '@tanstack/form-core'\n\n/** Generates a random UUID. and returns a stable reference to it. */\nexport function useUUID() {\n return useState<string>(() => uuid())[0]\n}\n","import * as React from 'react'\nimport { useUUID } from './useUUID'\n\n/**\n * React 17 does not have the useId hook, so we use a random uuid as a fallback.\n * This is needed to avoid bundlers trying to import non-existing export.\n * Read more: https://github.com/webpack/webpack/issues/14814\n */\nconst _React = React\nexport const useFormId =\n React.version.split('.')[0] === '17' ? useUUID : _React.useId\n","'use client'\n\nimport { useMemo, useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport { FormGroupApi, functionalUpdate } from '@tanstack/form-core'\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\nimport type {\n DeepKeys,\n DeepValue,\n FormAsyncValidateOrFn,\n FormGroupApiOptions,\n FormGroupAsyncValidateOrFn,\n FormGroupOptions,\n FormGroupValidateOrFn,\n FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { FunctionComponent, ReactNode } from 'react'\n\nexport type UseFormGroup<\n TParentData,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TParentSubmitMeta,\n> = <\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TSubmitMeta,\n>(\n opts: FormGroupApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n) => FormGroupApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n>\n\nexport function useFormGroup<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TSubmitMeta,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TParentSubmitMeta,\n>(\n opts: FormGroupApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n >,\n) {\n // Keep a snapshot of options so that React Compiler doesn't\n // wrongly optimize formGroupApi.\n const [prevOptions, setPrevOptions] = useState(() => ({\n form: opts.form,\n name: opts.name,\n }))\n\n const [formGroupApi, setFormGroupApi] = useState(() => {\n return new FormGroupApi({\n ...opts,\n })\n })\n\n // We only want to\n // update on name changes since those are at risk of becoming stale. The field\n // state must be up to date for the internal JSX render.\n // The other options can freely be in `fieldApi.update`\n if (prevOptions.form !== opts.form || prevOptions.name !== opts.name) {\n setFormGroupApi(\n new FormGroupApi({\n ...opts,\n }),\n )\n setPrevOptions({ form: opts.form, name: opts.name })\n }\n\n const reactiveStateValue = useStore(\n formGroupApi.store,\n (state) => state.value,\n )\n\n const reactiveMetaIsTouched = useStore(\n formGroupApi.store,\n (state) => state.meta.isTouched,\n )\n const reactiveMetaIsBlurred = useStore(\n formGroupApi.store,\n (state) => state.meta.isBlurred,\n )\n const reactiveMetaIsDirty = useStore(\n formGroupApi.store,\n (state) => state.meta.isDirty,\n )\n const reactiveMetaErrorMap = useStore(\n formGroupApi.store,\n (state) => state.meta.errorMap,\n )\n const reactiveMetaErrorSourceMap = useStore(\n formGroupApi.store,\n (state) => state.meta.errorSourceMap,\n )\n const reactiveMetaIsValidating = useStore(\n formGroupApi.store,\n (state) => state.meta.isValidating,\n )\n\n // Submission lifecycle and aggregated validity now live on `state.meta`\n // (mirroring `FieldApi.state.meta`). Subscribe to the fields callers\n // typically read so React Compiler picks them up as dependencies.\n const reactiveMetaIsSubmitting = useStore(\n formGroupApi.store,\n (state) => state.meta.isSubmitting,\n )\n const reactiveMetaIsSubmitted = useStore(\n formGroupApi.store,\n (state) => state.meta.isSubmitted,\n )\n const reactiveMetaSubmissionAttempts = useStore(\n formGroupApi.store,\n (state) => state.meta.submissionAttempts,\n )\n const reactiveMetaIsSubmitSuccessful = useStore(\n formGroupApi.store,\n (state) => state.meta.isSubmitSuccessful,\n )\n const reactiveMetaCanSubmit = useStore(\n formGroupApi.store,\n (state) => state.meta.canSubmit,\n )\n const reactiveMetaIsValid = useStore(\n formGroupApi.store,\n (state) => state.meta.isValid,\n )\n const reactiveMetaIsFieldsValid = useStore(\n formGroupApi.store,\n (state) => state.meta.isFieldsValid,\n )\n const reactiveMetaIsFieldsValidating = useStore(\n formGroupApi.store,\n (state) => state.meta.isFieldsValidating,\n )\n const reactiveMetaIsGroupValid = useStore(\n formGroupApi.store,\n (state) => state.meta.isGroupValid,\n )\n\n // This makes me sad, but if I understand correctly, this is what we have to do for reactivity to work properly with React compiler.\n const extendedFieldApi = useMemo(() => {\n const reactiveFieldApi = {\n ...formGroupApi,\n handleSubmit: ((...props: never[]) => {\n return formGroupApi._handleSubmit(...props)\n }) as typeof formGroupApi.handleSubmit,\n get state() {\n return {\n ...formGroupApi.state,\n value: reactiveStateValue,\n get meta() {\n return {\n ...formGroupApi.state.meta,\n isTouched: reactiveMetaIsTouched,\n isBlurred: reactiveMetaIsBlurred,\n isDirty: reactiveMetaIsDirty,\n errorMap: reactiveMetaErrorMap,\n errorSourceMap: reactiveMetaErrorSourceMap,\n isValidating: reactiveMetaIsValidating,\n isSubmitting: reactiveMetaIsSubmitting,\n isSubmitted: reactiveMetaIsSubmitted,\n submissionAttempts: reactiveMetaSubmissionAttempts,\n isSubmitSuccessful: reactiveMetaIsSubmitSuccessful,\n canSubmit: reactiveMetaCanSubmit,\n isValid: reactiveMetaIsValid,\n isFieldsValid: reactiveMetaIsFieldsValid,\n isFieldsValidating: reactiveMetaIsFieldsValidating,\n isGroupValid: reactiveMetaIsGroupValid,\n } satisfies typeof formGroupApi.state.meta\n },\n } satisfies typeof formGroupApi.state\n },\n }\n\n const extendedApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n > = reactiveFieldApi as never\n\n return extendedApi\n }, [\n formGroupApi,\n reactiveStateValue,\n reactiveMetaIsTouched,\n reactiveMetaIsBlurred,\n reactiveMetaIsDirty,\n reactiveMetaErrorMap,\n reactiveMetaErrorSourceMap,\n reactiveMetaIsValidating,\n reactiveMetaIsSubmitting,\n reactiveMetaIsSubmitted,\n reactiveMetaSubmissionAttempts,\n reactiveMetaIsSubmitSuccessful,\n reactiveMetaCanSubmit,\n reactiveMetaIsValid,\n reactiveMetaIsFieldsValid,\n reactiveMetaIsFieldsValidating,\n reactiveMetaIsGroupValid,\n ])\n\n useIsomorphicLayoutEffect(formGroupApi.mount, [formGroupApi])\n\n useIsomorphicLayoutEffect(() => {\n formGroupApi.update(opts)\n })\n\n return extendedFieldApi\n}\n\ninterface FormGroupComponentProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TSubmitMeta,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TParentSubmitMeta,\n ExtendedApi = {},\n> extends FormGroupApiOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n> {\n children: (\n formGroupApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n > &\n ExtendedApi,\n ) => ReactNode\n}\n\ninterface FormGroupComponentBoundProps<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TSubmitMeta,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TParentSubmitMeta,\n ExtendedApi = {},\n> extends FormGroupOptions<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n> {\n children: (\n formGroupApi: FormGroupApi<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n > &\n ExtendedApi,\n ) => ReactNode\n}\n\nexport type FormGroupComponent<\n in out TParentData,\n in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnChangeAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnBlurAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnSubmitAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n in out TFormOnDynamicAsync extends\n | undefined\n | FormAsyncValidateOrFn<TParentData>,\n in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n in out TParentSubmitMeta,\n in out ExtendedApi = {},\n> = <\n const TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TSubmitMeta,\n>({\n children,\n ...formGroupOptions\n}: FormGroupComponentBoundProps<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta,\n ExtendedApi\n>) => ReturnType<FunctionComponent>\n\nexport const FormGroup = (<\n TParentData,\n TName extends DeepKeys<TParentData>,\n TData extends DeepValue<TParentData, TName>,\n TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChange extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnChangeAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnBlurAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnSubmit extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnSubmitAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TOnDynamic extends\n | undefined\n | FormGroupValidateOrFn<TParentData, TName, TData>,\n TOnDynamicAsync extends\n | undefined\n | FormGroupAsyncValidateOrFn<TParentData, TName, TData>,\n TSubmitMeta,\n TFormOnMount extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChange extends undefined | FormValidateOrFn<TParentData>,\n TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnBlur extends undefined | FormValidateOrFn<TParentData>,\n TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>,\n TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>,\n TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>,\n TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>,\n TParentSubmitMeta,\n>({\n children,\n ...formGroupOptions\n}: FormGroupComponentProps<\n TParentData,\n TName,\n TData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TSubmitMeta,\n TFormOnMount,\n TFormOnChange,\n TFormOnChangeAsync,\n TFormOnBlur,\n TFormOnBlurAsync,\n TFormOnSubmit,\n TFormOnSubmitAsync,\n TFormOnDynamic,\n TFormOnDynamicAsync,\n TFormOnServer,\n TParentSubmitMeta\n>): ReturnType<FunctionComponent> => {\n const formGroupApi = useFormGroup(formGroupOptions as any)\n\n const jsxToDisplay = useMemo(\n () => functionalUpdate(children, formGroupApi as any),\n [children, formGroupApi],\n )\n return (<>{jsxToDisplay}</>) as never\n}) satisfies FunctionComponent<\n FormGroupComponentProps<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n>\n","'use client'\n\nimport { FormApi, functionalUpdate, mergeAndUpdate } from '@tanstack/form-core'\nimport { useStore } from '@tanstack/react-store'\nimport { useMemo, useRef, useState } from 'react'\nimport { Field } from './useField'\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\nimport { useFormId } from './useFormId'\nimport { FormGroup } from './useFormGroup'\nimport type { FormGroupComponent } from './useFormGroup'\nimport type {\n AnyFormApi,\n AnyFormState,\n FormAsyncValidateOrFn,\n FormOptions,\n FormState,\n FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { FunctionComponent, PropsWithChildren, ReactNode } from 'react'\nimport type { FieldComponent } from './useField'\n\n/**\n * Fields that are added onto the `FormAPI` from `@tanstack/form-core` and returned from `useForm`\n */\nexport interface ReactFormApi<\n in out TFormData,\n in out TOnMount extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChange extends undefined | FormValidateOrFn<TFormData>,\n in out TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n in out TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n in out TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n in out TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n in out TSubmitMeta,\n> {\n /**\n * A React component to render form fields. With this, you can render and manage individual form fields.\n */\n Field: FieldComponent<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n FormGroup: FormGroupComponent<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n /**\n * A `Subscribe` function that allows you to listen and react to changes in the form's state. It's especially useful when you need to execute side effects or render specific components in response to state updates.\n */\n Subscribe: <\n TSelected = NoInfer<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n >,\n >(props: {\n selector?: (\n state: NoInfer<\n FormState<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer\n >\n >,\n ) => TSelected\n children: ((state: NoInfer<TSelected>) => ReactNode) | ReactNode\n }) => ReturnType<FunctionComponent>\n}\n\n/**\n * An extended version of the `FormApi` class that includes React-specific functionalities from `ReactFormApi`\n */\nexport type ReactFormExtendedApi<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n> = FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n> &\n ReactFormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >\n\nfunction LocalSubscribe({\n form,\n selector = (state) => state,\n children,\n}: PropsWithChildren<{\n form: AnyFormApi\n selector?: (state: AnyFormState) => AnyFormState\n}>): ReturnType<FunctionComponent> {\n const data = useStore(form.store, selector)\n\n return <>{functionalUpdate(children, data)}</>\n}\n\n/**\n * A custom React Hook that returns an extended instance of the `FormApi` class.\n *\n * This API encapsulates all the necessary functionalities related to the form. It allows you to manage form state, handle submissions, and interact with form fields\n */\nexport function useForm<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n>(\n opts?: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n) {\n const fallbackFormId = useFormId()\n const [prevFormId, setPrevFormId] = useState<string>(opts?.formId as never)\n\n const [formApi, setFormApi] = useState(() => {\n return new FormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >({ ...opts, formId: opts?.formId ?? fallbackFormId })\n })\n\n if (prevFormId !== opts?.formId) {\n const formId = opts?.formId ?? fallbackFormId\n setFormApi(new FormApi({ ...opts, formId }))\n setPrevFormId(formId)\n }\n\n const extendedFormApi = useMemo(() => {\n const extendedApi: ReactFormExtendedApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n > = {\n ...formApi,\n handleSubmit: ((...props: never[]) => {\n return formApi._handleSubmit(...props)\n }) as typeof formApi.handleSubmit,\n // We must add all `get`ters from `core`'s `FormApi` here, as otherwise the spread operator won't catch those\n get formId(): string {\n return formApi._formId\n },\n get state() {\n return formApi.store.state\n },\n } as never\n\n extendedApi.Field = function APIField(props) {\n return <Field {...props} form={formApi} />\n }\n\n extendedApi.FormGroup = function APIFormGroup(props) {\n return <FormGroup {...props} form={formApi} />\n }\n\n extendedApi.Subscribe = function Subscribe(props: any) {\n return (\n <LocalSubscribe\n form={formApi}\n selector={props.selector}\n children={props.children}\n />\n )\n }\n\n return extendedApi\n }, [formApi])\n\n useIsomorphicLayoutEffect(formApi.mount, [])\n\n /**\n * formApi.update should not have any side effects. Think of it like a `useRef`\n * that we need to keep updated every render with the most up-to-date information.\n */\n useIsomorphicLayoutEffect(() => {\n formApi.update(opts)\n })\n\n const hasRan = useRef(false)\n\n useIsomorphicLayoutEffect(() => {\n if (!hasRan.current) return\n if (!opts?.transform) return\n mergeAndUpdate(formApi, opts.transform as never)\n }, [formApi, opts?.transform])\n\n useIsomorphicLayoutEffect(() => {\n hasRan.current = true\n })\n\n return extendedFormApi\n}\n","'use client'\n\nimport { useState } from 'react'\nimport { useStore } from '@tanstack/react-store'\nimport { FieldGroupApi, functionalUpdate } from '@tanstack/form-core'\nimport { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect'\nimport type {\n AnyFieldGroupApi,\n DeepKeysOfType,\n FieldGroupState,\n FieldsMap,\n FormAsyncValidateOrFn,\n FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type { AppFieldExtendedReactFormApi } from './createFormHook'\nimport type {\n ComponentType,\n FunctionComponent,\n PropsWithChildren,\n ReactNode,\n} from 'react'\nimport type { LensFieldComponent } from './useField'\n\nfunction LocalSubscribe({\n lens,\n selector = (state) => state,\n children,\n}: PropsWithChildren<{\n lens: AnyFieldGroupApi\n selector?: (state: FieldGroupState<any>) => FieldGroupState<any>\n}>): ReturnType<FunctionComponent> {\n const data = useStore(lens.store, selector)\n\n return <>{functionalUpdate(children, data)}</>\n}\n\n/**\n * @private\n */\nexport type AppFieldExtendedReactFieldGroupApi<\n TFormData,\n TFieldGroupData,\n TFields extends\n | DeepKeysOfType<TFormData, TFieldGroupData | null | undefined>\n | FieldsMap<TFormData, TFieldGroupData>,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n TFieldComponents extends Record<string, ComponentType<any>>,\n TFormComponents extends Record<string, ComponentType<any>>,\n> = FieldGroupApi<\n TFormData,\n TFieldGroupData,\n TFields,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n> &\n NoInfer<TFormComponents> & {\n AppField: LensFieldComponent<\n TFieldGroupData,\n TSubmitMeta,\n NoInfer<TFieldComponents>\n >\n AppForm: ComponentType<PropsWithChildren<{}>>\n /**\n * A React component to render form fields. With this, you can render and manage individual form fields.\n */\n Field: LensFieldComponent<TFieldGroupData, TSubmitMeta>\n\n /**\n * A `Subscribe` function that allows you to listen and react to changes in the form's state. It's especially useful when you need to execute side effects or render specific components in response to state updates.\n */\n Subscribe: <TSelected = NoInfer<FieldGroupState<TFieldGroupData>>>(props: {\n selector?: (state: NoInfer<FieldGroupState<TFieldGroupData>>) => TSelected\n children: ((state: NoInfer<TSelected>) => ReactNode) | ReactNode\n }) => ReturnType<FunctionComponent>\n }\n\nexport function useFieldGroup<\n TFormData,\n TFieldGroupData,\n TFields extends\n | DeepKeysOfType<TFormData, TFieldGroupData | null | undefined>\n | FieldsMap<TFormData, TFieldGroupData>,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TComponents extends Record<string, ComponentType<any>>,\n TFormComponents extends Record<string, ComponentType<any>>,\n TSubmitMeta = never,\n>(opts: {\n form:\n | AppFieldExtendedReactFormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents\n >\n | AppFieldExtendedReactFieldGroupApi<\n // Since this only occurs if you nest it within other form lenses, it can be more\n // lenient with the types.\n unknown,\n TFormData,\n string | FieldsMap<unknown, TFormData>,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n TSubmitMeta,\n TComponents,\n TFormComponents\n >\n fields: TFields\n defaultValues?: TFieldGroupData\n onSubmitMeta?: TSubmitMeta\n formComponents: TFormComponents\n}): AppFieldExtendedReactFieldGroupApi<\n TFormData,\n TFieldGroupData,\n TFields,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents\n> {\n const [formLensApi] = useState(() => {\n const api = new FieldGroupApi(opts)\n const form =\n opts.form instanceof FieldGroupApi\n ? (opts.form.form as AppFieldExtendedReactFormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents\n >)\n : opts.form\n\n const extendedApi: AppFieldExtendedReactFieldGroupApi<\n TFormData,\n TFieldGroupData,\n TFields,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents\n > = api as never\n\n extendedApi.AppForm = function AppForm(appFormProps) {\n return <form.AppForm {...appFormProps} />\n }\n\n extendedApi.AppField = function AppField(props) {\n return (\n <form.AppField {...(formLensApi.getFormFieldOptions(props) as any)} />\n )\n }\n\n extendedApi.Field = function Field(props) {\n return <form.Field {...(formLensApi.getFormFieldOptions(props) as any)} />\n }\n\n extendedApi.Subscribe = function Subscribe(props: any) {\n return (\n <LocalSubscribe\n lens={formLensApi}\n selector={props.selector}\n children={props.children}\n />\n )\n }\n\n return Object.assign(extendedApi, {\n ...opts.formComponents,\n }) as AppFieldExtendedReactFieldGroupApi<\n TFormData,\n TFieldGroupData,\n TFields,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents\n >\n })\n\n useIsomorphicLayoutEffect(formLensApi.mount, [formLensApi])\n\n return formLensApi\n}\n","'use client'\n/* eslint-disable @eslint-react/no-context-provider */\nimport { createContext, useContext, useMemo } from 'react'\nimport { useForm } from './useForm'\nimport { useFieldGroup } from './useFieldGroup'\nimport type {\n AnyFieldApi,\n AnyFormApi,\n BaseFormOptions,\n DeepKeysOfType,\n FieldApi,\n FieldsMap,\n FormAsyncValidateOrFn,\n FormOptions,\n FormValidateOrFn,\n} from '@tanstack/form-core'\nimport type {\n ComponentType,\n Context,\n FunctionComponent,\n PropsWithChildren,\n} from 'react'\nimport type { FieldComponent } from './useField'\nimport type { ReactFormExtendedApi } from './useForm'\nimport type { AppFieldExtendedReactFieldGroupApi } from './useFieldGroup'\n\n// We should never hit the `null` case here\nconst fieldContext = createContext<AnyFieldApi>(null as never)\nconst formContext = createContext<AnyFormApi>(null as never)\n\n/**\n * TypeScript inferencing is weird.\n *\n * If you have:\n *\n * @example\n *\n * interface Args<T> {\n * arg?: T\n * }\n *\n * function test<T>(arg?: Partial<Args<T>>): T {\n * return 0 as any;\n * }\n *\n * const a = test({});\n *\n * Then `T` will default to `unknown`.\n *\n * However, if we change `test` to be:\n *\n * @example\n *\n * function test<T extends undefined>(arg?: Partial<Args<T>>): T;\n *\n * Then `T` becomes `undefined`.\n *\n * Here, we are checking if the passed type `T` extends `DefaultT` and **only**\n * `DefaultT`, as if that's the case we assume that inferencing has not occurred.\n */\ntype UnwrapOrAny<T> = [unknown] extends [T] ? any : T\ntype UnwrapDefaultOrAny<DefaultT, T> = [DefaultT] extends [T]\n ? [T] extends [DefaultT]\n ? any\n : T\n : T\n\nfunction useFormContext() {\n const form = useContext(formContext)\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!form) {\n throw new Error(\n '`formContext` only works when within a `formComponent` passed to `createFormHook`',\n )\n }\n\n return form as ReactFormExtendedApi<\n // If you need access to the form data, you need to use `withForm` instead\n Record<string, never>,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n}\n\nexport function createFormHookContexts() {\n function useFieldContext<TData>() {\n const field = useContext(fieldContext)\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!field) {\n throw new Error(\n '`fieldContext` only works when within a `fieldComponent` passed to `createFormHook`',\n )\n }\n\n return field as FieldApi<\n any,\n string,\n TData,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >\n }\n\n return { fieldContext, useFieldContext, useFormContext, formContext }\n}\n\ninterface CreateFormHookProps<\n TFieldComponents extends Record<string, ComponentType<any>>,\n TFormComponents extends Record<string, ComponentType<any>>,\n> {\n fieldComponents: TFieldComponents\n fieldContext: Context<AnyFieldApi>\n formComponents: TFormComponents\n formContext: Context<AnyFormApi>\n}\n\n/**\n * @private\n */\nexport type AppFieldExtendedReactFormApi<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n TFieldComponents extends Record<string, ComponentType<any>>,\n TFormComponents extends Record<string, ComponentType<any>>,\n> = ReactFormExtendedApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n> &\n NoInfer<TFormComponents> & {\n AppField: FieldComponent<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n NoInfer<TFieldComponents>\n >\n AppForm: ComponentType<\n // PropsWithChildren<P> is not optional in React 17\n PropsWithChildren<{}>\n >\n }\n\nexport interface WithFormProps<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n TFieldComponents extends Record<string, ComponentType<any>>,\n TFormComponents extends Record<string, ComponentType<any>>,\n TRenderProps extends object = Record<string, never>,\n> extends FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n> {\n // Optional, but adds props to the `render` function outside of `form`\n props?: TRenderProps\n render: FunctionComponent<\n PropsWithChildren<\n NoInfer<TRenderProps> & {\n form: AppFieldExtendedReactFormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TFieldComponents,\n TFormComponents\n >\n }\n >\n >\n}\n\nexport interface WithFieldGroupProps<\n TFieldGroupData,\n TFieldComponents extends Record<string, ComponentType<any>>,\n TFormComponents extends Record<string, ComponentType<any>>,\n TSubmitMeta,\n TRenderProps extends object = Record<string, never>,\n> extends BaseFormOptions<TFieldGroupData, TSubmitMeta> {\n // Optional, but adds props to the `render` function outside of `form`\n props?: TRenderProps\n render: FunctionComponent<\n PropsWithChildren<\n NoInfer<TRenderProps> & {\n group: AppFieldExtendedReactFieldGroupApi<\n unknown,\n TFieldGroupData,\n string | FieldsMap<unknown, TFieldGroupData>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n undefined | FormAsyncValidateOrFn<unknown>,\n // this types it as 'never' in the render prop. It should prevent any\n // untyped meta passed to the handleSubmit by accident.\n unknown extends TSubmitMeta ? never : TSubmitMeta,\n TFieldComponents,\n TFormComponents\n >\n }\n >\n >\n}\n\nexport function createFormHook<\n const TComponents extends Record<string, ComponentType<any>>,\n const TFormComponents extends Record<string, ComponentType<any>>,\n>({\n fieldComponents,\n fieldContext,\n formContext,\n formComponents,\n}: CreateFormHookProps<TComponents, TFormComponents>) {\n function useAppForm<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n >(\n props: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ): AppFieldExtendedReactFormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents\n > {\n const form = useForm(props)\n\n // PropsWithChildren<P> is not optional in React 17\n const AppForm = useMemo<ComponentType<PropsWithChildren<{}>>>(() => {\n return ({ children }) => {\n return (\n <formContext.Provider value={form}>{children}</formContext.Provider>\n )\n }\n }, [form])\n\n const AppField = useMemo(() => {\n const AppField = (({ children, ...props }) => {\n return (\n <form.Field {...props}>\n {(field) => (\n <fieldContext.Provider value={field}>\n {children(Object.assign(field, fieldComponents))}\n </fieldContext.Provider>\n )}\n </form.Field>\n )\n }) as FieldComponent<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents\n >\n return AppField\n }, [form])\n\n const extendedForm = useMemo(() => {\n return Object.assign(form, {\n AppField,\n AppForm,\n ...formComponents,\n })\n }, [form, AppField, AppForm])\n\n return extendedForm\n }\n\n function withForm<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n TRenderProps extends object = {},\n >({\n render,\n props,\n }: WithFormProps<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents,\n TRenderProps\n >): WithFormProps<\n UnwrapOrAny<TFormData>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnMount>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnChange>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnChangeAsync>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnBlur>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnBlurAsync>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnSubmit>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnSubmitAsync>,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnDynamic>,\n UnwrapDefaultOrAny<\n undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync\n >,\n UnwrapDefaultOrAny<undefined | FormValidateOrFn<TFormData>, TOnServer>,\n UnwrapOrAny<TSubmitMeta>,\n UnwrapOrAny<TComponents>,\n UnwrapOrAny<TFormComponents>,\n UnwrapOrAny<TRenderProps>\n >['render'] {\n return function Render(innerProps) {\n return render({ ...props, ...innerProps })\n }\n }\n\n function withFieldGroup<\n TFieldGroupData,\n TSubmitMeta,\n TRenderProps extends object = {},\n >({\n render,\n props,\n defaultValues,\n }: WithFieldGroupProps<\n TFieldGroupData,\n TComponents,\n TFormComponents,\n TSubmitMeta,\n TRenderProps\n >): <\n TFormData,\n TFields extends\n | DeepKeysOfType<TFormData, TFieldGroupData | null | undefined>\n | FieldsMap<TFormData, TFieldGroupData>,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TFormSubmitMeta,\n >(\n params: PropsWithChildren<\n NoInfer<TRenderProps> & {\n form:\n | AppFieldExtendedReactFormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n unknown extends TSubmitMeta ? TFormSubmitMeta : TSubmitMeta,\n TComponents,\n TFormComponents\n >\n | AppFieldExtendedReactFieldGroupApi<\n // Since this only occurs if you nest it within other field groups, it can be more\n // lenient with the types.\n unknown,\n TFormData,\n string | FieldsMap<unknown, TFormData>,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n unknown extends TSubmitMeta ? TFormSubmitMeta : TSubmitMeta,\n TComponents,\n TFormComponents\n >\n fields: TFields\n }\n >,\n ) => ReturnType<FunctionComponent> {\n return function Render(innerProps) {\n const fieldGroupProps = useMemo(() => {\n return {\n form: innerProps.form,\n fields: innerProps.fields,\n defaultValues,\n formComponents,\n }\n }, [innerProps.form, innerProps.fields])\n const fieldGroupApi = useFieldGroup(fieldGroupProps as any)\n\n return render({ ...props, ...innerProps, group: fieldGroupApi as any })\n }\n }\n\n /**\n * ⚠️ **Use withForm whenever possible.**\n *\n * Gets a typed form from the `<form.AppForm />` context.\n */\n function useTypedAppFormContext<\n TFormData,\n TOnMount extends undefined | FormValidateOrFn<TFormData>,\n TOnChange extends undefined | FormValidateOrFn<TFormData>,\n TOnChangeAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnBlur extends undefined | FormValidateOrFn<TFormData>,\n TOnBlurAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnSubmit extends undefined | FormValidateOrFn<TFormData>,\n TOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnDynamic extends undefined | FormValidateOrFn<TFormData>,\n TOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TFormData>,\n TOnServer extends undefined | FormAsyncValidateOrFn<TFormData>,\n TSubmitMeta,\n >(\n _props: FormOptions<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta\n >,\n ): AppFieldExtendedReactFormApi<\n TFormData,\n TOnMount,\n TOnChange,\n TOnChangeAsync,\n TOnBlur,\n TOnBlurAsync,\n TOnSubmit,\n TOnSubmitAsync,\n TOnDynamic,\n TOnDynamicAsync,\n TOnServer,\n TSubmitMeta,\n TComponents,\n TFormComponents\n > {\n const form = useFormContext()\n\n return form as never\n }\n\n function extendForm<\n const TNewField extends Record<string, ComponentType<any>> & {\n [K in keyof TComponents]?: 'Error: field component names must be unique — this key already exists in the base form'\n },\n const TNewForm extends Record<string, ComponentType<any>> & {\n [K in keyof TFormComponents]?: 'Error: form component names must be unique — this key already exists in the base form'\n },\n >(extension: { fieldComponents?: TNewField; formComponents?: TNewForm }) {\n return createFormHook({\n fieldContext,\n formContext,\n fieldComponents: {\n ...fieldComponents,\n ...extension.fieldComponents,\n } as TComponents & TNewField,\n formComponents: {\n ...formComponents,\n ...extension.formComponents,\n } as TFormComponents & TNewForm,\n })\n }\n\n return {\n useAppForm,\n withForm,\n withFieldGroup,\n useTypedAppFormContext,\n extendForm,\n }\n}\n","\"use client\";\n\nimport { createFormHookContexts } from \"@tanstack/react-form\";\n\nexport const {\n fieldContext: appFieldContext,\n formContext: appFormContext,\n useFieldContext: useAppFieldContext,\n useFormContext: useAppFormContext,\n} = createFormHookContexts();\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport {\n Field,\n FieldControl,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport {\n NumberFieldDecrement,\n NumberFieldGroup,\n NumberFieldIncrement,\n NumberFieldInput,\n NumberField as NumberFieldPrimitive,\n} from \"../ui/number-field\";\n\nexport function NumberField({\n field,\n label,\n min,\n className,\n}: {\n field: {\n name: string;\n state: {\n value: number;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: number) => void;\n handleBlur: () => void;\n };\n label: string;\n min?: number;\n className?: string;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n return (\n <Field className={className} name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <FieldControl\n render={\n <NumberFieldPrimitive\n value={field.state.value}\n min={min}\n onValueChange={(next) => {\n if (typeof next === \"number\") field.handleChange(next);\n }}\n onBlur={() => field.handleBlur()}\n >\n <NumberFieldGroup>\n <NumberFieldDecrement />\n <NumberFieldInput />\n <NumberFieldIncrement />\n </NumberFieldGroup>\n </NumberFieldPrimitive>\n }\n />\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport {\n Field,\n FieldControl,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport {\n Select,\n SelectItem,\n SelectPopup,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\n\nexport function SelectField({\n field,\n label,\n placeholder,\n options,\n}: {\n field: {\n name: string;\n state: {\n value: string;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: string) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n options: Array<{ value: string; label: string }>;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <FieldControl\n render={\n <Select\n items={options}\n value={field.state.value ? field.state.value : null}\n onValueChange={(next) => {\n field.handleChange(next ?? \"\");\n }}\n onOpenChangeComplete={(open) => {\n if (!open) field.handleBlur();\n }}\n >\n <SelectTrigger>\n <SelectValue placeholder={placeholder ?? \"Select\"} />\n </SelectTrigger>\n <SelectPopup>\n {options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectPopup>\n </Select>\n }\n />\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport { Button } from \"../ui/button\";\nimport { SpinnerOnDemand } from \"../ui/spinner-on-demand\";\nimport { useAppFormContext } from \"./form-context\";\n\ninterface SubmitButtonProps extends React.ComponentProps<typeof Button> {\n icon?: React.ReactNode;\n}\n\nexport function SubmitButton({\n children,\n disabled,\n icon,\n ...props\n}: SubmitButtonProps) {\n const form = useAppFormContext();\n return (\n <form.Subscribe selector={(state) => state.isSubmitting}>\n {(isSubmitting) => (\n <Button type=\"submit\" disabled={isSubmitting || disabled} {...props}>\n <SpinnerOnDemand icon={icon} isLoading={isSubmitting} />\n {children}\n </Button>\n )}\n </form.Subscribe>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport {\n Field,\n FieldControl,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport { Input } from \"../ui/input\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"../ui/input-group\";\n\nexport function TextField({\n field,\n label,\n placeholder,\n type = \"text\",\n inlineLabel,\n leadingIcon,\n trailingIcon,\n}: {\n field: {\n name: string;\n state: {\n value: string;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: string) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n type?: React.ComponentProps<typeof Input>[\"type\"];\n /** Render label inside the input border as a block-start addon */\n inlineLabel?: boolean;\n /** Content rendered as an inline-start addon (e.g. an icon) */\n leadingIcon?: React.ReactNode;\n /** Content rendered as an inline-end addon (e.g. an icon) */\n trailingIcon?: React.ReactNode;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n const useInputGroup = inlineLabel || leadingIcon || trailingIcon;\n\n if (useInputGroup) {\n return (\n <Field name={field.name}>\n {!inlineLabel && <FieldLabel>{label}</FieldLabel>}\n <InputGroup>\n {inlineLabel && (\n <InputGroupAddon align=\"block-start\">\n <FieldLabel>{label}</FieldLabel>\n </InputGroupAddon>\n )}\n {leadingIcon && (\n <InputGroupAddon align=\"inline-start\">\n {leadingIcon}\n </InputGroupAddon>\n )}\n <FieldControl\n render={\n <InputGroupInput\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n placeholder={placeholder}\n type={type}\n />\n }\n />\n {trailingIcon && (\n <InputGroupAddon align=\"inline-end\">{trailingIcon}</InputGroupAddon>\n )}\n </InputGroup>\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n }\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <FieldControl\n render={\n <Input\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n placeholder={placeholder}\n type={type}\n />\n }\n />\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport {\n createFormHook,\n formOptions,\n revalidateLogic,\n} from \"@tanstack/react-form\";\nimport { CheckboxGroupField } from \"./checkbox-group-field\";\nimport { DateField } from \"./date-field\";\nimport { DateRangeField } from \"./date-range-field\";\nimport { appFieldContext, appFormContext } from \"./form-context\";\nimport { NumberField } from \"./number-field\";\nimport { SelectField } from \"./select-field\";\nimport { SubmitButton } from \"./submit-button\";\nimport { TextField } from \"./text-field\";\n\nconst { useAppForm, withForm: withAppForm } = createFormHook({\n fieldContext: appFieldContext,\n formContext: appFormContext,\n fieldComponents: {\n TextField,\n CheckboxGroupField,\n SelectField,\n DateField,\n DateRangeField,\n NumberField,\n },\n formComponents: {\n SubmitButton,\n },\n});\n\nconst customFormOptions = formOptions({\n validationLogic: revalidateLogic({\n mode: \"submit\",\n modeAfterSubmission: \"blur\",\n }),\n});\n\nconst useCustomAppForm: typeof useAppForm = (options) => {\n return useAppForm({\n ...customFormOptions,\n ...options,\n });\n};\n\nconst withCustomAppForm: typeof withAppForm = (options) => {\n return withAppForm({\n ...customFormOptions,\n ...options,\n });\n};\n\nexport { useCustomAppForm as useAppForm, withCustomAppForm as withAppForm };\n"]}
1
+ {"version":3,"sources":["../src/components/form/checkbox-group-field.tsx","../src/components/form/date-field.tsx","../src/components/form/date-range-field.tsx","../src/components/form/form-context.ts","../src/components/form/number-field.tsx","../src/components/form/select-field.tsx","../src/components/form/submit-button.tsx","../src/components/form/text-field.tsx","../src/components/form/form.tsx"],"names":["jsxs","jsx","open","CalendarIcon","format","NumberField"],"mappings":"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","file":"form.js","sourcesContent":["\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport { Checkbox } from \"../ui/checkbox\";\nimport { CheckboxGroup } from \"../ui/checkbox-group\";\nimport {\n Field,\n FieldDescription,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\n\nexport function CheckboxGroupField({\n field,\n label,\n options,\n emptyMessage,\n description,\n}: {\n field: {\n name: string;\n state: {\n value: string[];\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: string[]) => void;\n };\n label: string;\n options: Array<{\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n }>;\n emptyMessage?: string;\n description?: string;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n\n {options.length === 0 ? (\n <div className=\"text-sm text-muted-foreground\">\n {emptyMessage ?? \"No options\"}\n </div>\n ) : (\n <CheckboxGroup\n value={field.state.value}\n onValueChange={(next) => field.handleChange(next)}\n className=\"gap-2 w-full\"\n >\n {options.map((opt) => {\n const isChecked = field.state.value.includes(opt.value);\n return (\n <button\n type=\"button\"\n key={opt.value}\n disabled={opt.disabled}\n className=\"flex w-full items-center gap-3 rounded-lg border px-3 py-2 transition-colors text-left bg-transparent disabled:cursor-not-allowed disabled:opacity-50 cursor-pointer hover:bg-accent/50\"\n onClick={() => {\n if (opt.disabled) return;\n const next = isChecked\n ? field.state.value.filter((v) => v !== opt.value)\n : [...field.state.value, opt.value];\n field.handleChange(next);\n }}\n >\n <Checkbox\n value={opt.value}\n checked={isChecked}\n disabled={opt.disabled}\n readOnly\n />\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm font-medium text-foreground\">\n {opt.label}\n </p>\n {opt.description ? (\n <p className=\"text-xs text-muted-foreground\">\n {opt.description}\n </p>\n ) : null}\n </div>\n </button>\n );\n })}\n </CheckboxGroup>\n )}\n\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n {description && <FieldDescription>{description}</FieldDescription>}\n </Field>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport { format } from \"date-fns\";\nimport { CalendarIcon } from \"lucide-react\";\n\nimport { Button } from \"../ui/button\";\nimport { Calendar } from \"../ui/calendar\";\nimport { Field, FieldError, FieldLabel } from \"../ui/field\";\nimport { Popover, PopoverPopup, PopoverTrigger } from \"../ui/popover\";\nimport { cn } from \"../../lib/utils/css\";\n\nexport function DateField({\n field,\n label,\n placeholder,\n}: {\n field: {\n name: string;\n state: {\n value: Date | undefined;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: Date | undefined) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n}) {\n const value = field.state.value;\n\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n const hasValue = Boolean(value);\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <Popover onOpenChangeComplete={(open) => !open && field.handleBlur()}>\n <PopoverTrigger\n render={\n <Button\n className={cn(\"w-full justify-start\", {\n \"text-muted-foreground\": !hasValue,\n })}\n variant=\"outline\"\n />\n }\n >\n <CalendarIcon aria-hidden=\"true\" />\n {value ? (\n format(value, \"LLL dd, y\")\n ) : (\n <span>{placeholder ?? \"Pick a date\"}</span>\n )}\n </PopoverTrigger>\n <PopoverPopup>\n <Calendar\n mode=\"single\"\n defaultMonth={value}\n selected={value}\n numberOfMonths={2}\n onSelect={(next) => {\n field.handleChange(next ?? undefined);\n }}\n autoFocus\n />\n </PopoverPopup>\n </Popover>\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport { format } from \"date-fns\";\nimport { CalendarIcon } from \"lucide-react\";\nimport { useState } from \"react\";\nimport { Button } from \"../ui/button\";\nimport { Calendar } from \"../ui/calendar\";\nimport { Field, FieldError, FieldLabel } from \"../ui/field\";\nimport { Popover, PopoverPopup, PopoverTrigger } from \"../ui/popover\";\nimport { cn } from \"../../lib/utils/css\";\n\nexport function DateRangeField({\n field,\n label,\n placeholder,\n numberOfMonths = 2,\n}: {\n field: {\n name: string;\n state: {\n value: {\n from: Date | undefined;\n to: Date | undefined;\n };\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: {\n from: Date | undefined;\n to: Date | undefined;\n }) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n numberOfMonths?: number;\n}) {\n const value = field.state.value;\n\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n const hasValue = Boolean(value.from);\n const [open, setOpen] = useState(false);\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <Popover\n open={open}\n onOpenChange={setOpen}\n onOpenChangeComplete={(open) => !open && field.handleBlur()}\n >\n <PopoverTrigger\n render={\n <Button\n className={cn(\"w-full justify-start\", {\n \"text-muted-foreground\": !hasValue,\n })}\n variant=\"outline\"\n />\n }\n >\n <CalendarIcon aria-hidden=\"true\" />\n {value.from ? (\n value.to ? (\n <>\n {format(value.from, \"LLL dd, y\")} -{\" \"}\n {format(value.to, \"LLL dd, y\")}\n </>\n ) : (\n format(value.from, \"LLL dd, y\")\n )\n ) : (\n <span>{placeholder ?? \"Pick a date range\"}</span>\n )}\n </PopoverTrigger>\n <PopoverPopup>\n <Calendar\n mode=\"range\"\n defaultMonth={value.from}\n selected={value}\n resetOnSelect\n numberOfMonths={numberOfMonths}\n onSelect={(range) => {\n field.handleChange({\n from: range?.from ?? undefined,\n to: range?.to ?? undefined,\n });\n if (range?.from && range?.to) {\n setOpen(false);\n }\n }}\n autoFocus\n />\n </PopoverPopup>\n </Popover>\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport { createFormHookContexts } from \"@tanstack/react-form\";\n\nexport const {\n fieldContext: appFieldContext,\n formContext: appFormContext,\n useFieldContext: useAppFieldContext,\n useFormContext: useAppFormContext,\n} = createFormHookContexts();\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport {\n Field,\n FieldControl,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport {\n NumberFieldDecrement,\n NumberFieldGroup,\n NumberFieldIncrement,\n NumberFieldInput,\n NumberField as NumberFieldPrimitive,\n} from \"../ui/number-field\";\n\nexport function NumberField({\n field,\n label,\n min,\n className,\n}: {\n field: {\n name: string;\n state: {\n value: number;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: number) => void;\n handleBlur: () => void;\n };\n label: string;\n min?: number;\n className?: string;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n return (\n <Field className={className} name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <FieldControl\n render={\n <NumberFieldPrimitive\n value={field.state.value}\n min={min}\n onValueChange={(next) => {\n if (typeof next === \"number\") field.handleChange(next);\n }}\n onBlur={() => field.handleBlur()}\n >\n <NumberFieldGroup>\n <NumberFieldDecrement />\n <NumberFieldInput />\n <NumberFieldIncrement />\n </NumberFieldGroup>\n </NumberFieldPrimitive>\n }\n />\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport {\n Field,\n FieldControl,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport {\n Select,\n SelectItem,\n SelectPopup,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\n\nexport function SelectField({\n field,\n label,\n placeholder,\n options,\n}: {\n field: {\n name: string;\n state: {\n value: string;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: string) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n options: Array<{ value: string; label: string }>;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <FieldControl\n render={\n <Select\n items={options}\n value={field.state.value ? field.state.value : null}\n onValueChange={(next) => {\n field.handleChange(next ?? \"\");\n }}\n onOpenChangeComplete={(open) => {\n if (!open) field.handleBlur();\n }}\n >\n <SelectTrigger>\n <SelectValue placeholder={placeholder ?? \"Select\"} />\n </SelectTrigger>\n <SelectPopup>\n {options.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectPopup>\n </Select>\n }\n />\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport { Button } from \"../ui/button\";\nimport { SpinnerOnDemand } from \"../ui/spinner-on-demand\";\nimport { useAppFormContext } from \"./form-context\";\n\ninterface SubmitButtonProps extends React.ComponentProps<typeof Button> {\n icon?: React.ReactNode;\n}\n\nexport function SubmitButton({\n children,\n disabled,\n icon,\n ...props\n}: SubmitButtonProps) {\n const form = useAppFormContext();\n return (\n <form.Subscribe selector={(state) => state.isSubmitting}>\n {(isSubmitting) => (\n <Button type=\"submit\" disabled={isSubmitting || disabled} {...props}>\n <SpinnerOnDemand icon={icon} isLoading={isSubmitting} />\n {children}\n </Button>\n )}\n </form.Subscribe>\n );\n}\n","\"use client\";\n\nimport type { StandardSchemaV1Issue } from \"@tanstack/react-form\";\nimport {\n Field,\n FieldControl,\n FieldError,\n FieldLabel,\n} from \"../ui/field\";\nimport { Input } from \"../ui/input\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupInput,\n} from \"../ui/input-group\";\n\nexport function TextField({\n field,\n label,\n placeholder,\n type = \"text\",\n inlineLabel,\n leadingIcon,\n trailingIcon,\n}: {\n field: {\n name: string;\n state: {\n value: string;\n meta: {\n readonly errors: ReadonlyArray<\n string | StandardSchemaV1Issue | undefined\n >;\n };\n };\n handleChange: (nextValue: string) => void;\n handleBlur: () => void;\n };\n label: string;\n placeholder?: string;\n type?: React.ComponentProps<typeof Input>[\"type\"];\n /** Render label inside the input border as a block-start addon */\n inlineLabel?: boolean;\n /** Content rendered as an inline-start addon (e.g. an icon) */\n leadingIcon?: React.ReactNode;\n /** Content rendered as an inline-end addon (e.g. an icon) */\n trailingIcon?: React.ReactNode;\n}) {\n const errors = field.state.meta.errors\n .map((err) => (typeof err === \"string\" ? err : err?.message))\n .filter(Boolean);\n\n const useInputGroup = inlineLabel || leadingIcon || trailingIcon;\n\n if (useInputGroup) {\n return (\n <Field name={field.name}>\n {!inlineLabel && <FieldLabel>{label}</FieldLabel>}\n <InputGroup>\n {inlineLabel && (\n <InputGroupAddon align=\"block-start\">\n <FieldLabel>{label}</FieldLabel>\n </InputGroupAddon>\n )}\n {leadingIcon && (\n <InputGroupAddon align=\"inline-start\">\n {leadingIcon}\n </InputGroupAddon>\n )}\n <FieldControl\n render={\n <InputGroupInput\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n placeholder={placeholder}\n type={type}\n />\n }\n />\n {trailingIcon && (\n <InputGroupAddon align=\"inline-end\">{trailingIcon}</InputGroupAddon>\n )}\n </InputGroup>\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n }\n\n return (\n <Field name={field.name}>\n <FieldLabel>{label}</FieldLabel>\n <FieldControl\n render={\n <Input\n value={field.state.value}\n onChange={(e) => field.handleChange(e.target.value)}\n onBlur={field.handleBlur}\n placeholder={placeholder}\n type={type}\n />\n }\n />\n <FieldError match={!!errors.length}>{errors.join(\", \")}</FieldError>\n </Field>\n );\n}\n","\"use client\";\n\nimport {\n createFormHook,\n formOptions,\n revalidateLogic,\n} from \"@tanstack/react-form\";\nimport { CheckboxGroupField } from \"./checkbox-group-field\";\nimport { DateField } from \"./date-field\";\nimport { DateRangeField } from \"./date-range-field\";\nimport { appFieldContext, appFormContext } from \"./form-context\";\nimport { NumberField } from \"./number-field\";\nimport { SelectField } from \"./select-field\";\nimport { SubmitButton } from \"./submit-button\";\nimport { TextField } from \"./text-field\";\n\nconst { useAppForm, withForm: withAppForm } = createFormHook({\n fieldContext: appFieldContext,\n formContext: appFormContext,\n fieldComponents: {\n TextField,\n CheckboxGroupField,\n SelectField,\n DateField,\n DateRangeField,\n NumberField,\n },\n formComponents: {\n SubmitButton,\n },\n});\n\nconst customFormOptions = formOptions({\n validationLogic: revalidateLogic({\n mode: \"submit\",\n modeAfterSubmission: \"blur\",\n }),\n});\n\nconst useCustomAppForm: typeof useAppForm = (options) => {\n return useAppForm({\n ...customFormOptions,\n ...options,\n });\n};\n\nconst withCustomAppForm: typeof withAppForm = (options) => {\n return withAppForm({\n ...customFormOptions,\n ...options,\n });\n};\n\nexport { useCustomAppForm as useAppForm, withCustomAppForm as withAppForm };\n"]}