react-f0rm 1.4.0 → 1.5.0

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.
Files changed (84) hide show
  1. package/README.md +17 -4
  2. package/dist/array-Bu7W8BSz.d.ts +54 -0
  3. package/dist/devtools/index.cjs.js +1 -1
  4. package/dist/devtools/index.cjs.js.map +1 -1
  5. package/dist/devtools/index.d.cts +8 -18
  6. package/dist/devtools/index.d.mts +8 -18
  7. package/dist/devtools/index.d.ts +8 -18
  8. package/dist/devtools/index.mjs +1 -1
  9. package/dist/devtools/index.mjs.map +1 -1
  10. package/dist/errors-DA4ReEd9.mjs +2 -0
  11. package/dist/errors-DA4ReEd9.mjs.map +1 -0
  12. package/dist/errors-TzyWwBfw.cjs.js +2 -0
  13. package/dist/errors-TzyWwBfw.cjs.js.map +1 -0
  14. package/dist/index.cjs.js +1 -1
  15. package/dist/index.cjs.js.map +1 -1
  16. package/dist/index.d.cts +347 -927
  17. package/dist/index.d.mts +347 -927
  18. package/dist/index.d.ts +347 -927
  19. package/dist/index.mjs +1 -1
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/index.umd.js +538 -451
  22. package/dist/index.umd.js.map +1 -1
  23. package/dist/index.umd.min.js +2 -2
  24. package/dist/index.umd.min.js.map +1 -1
  25. package/dist/persist.cjs.js +1 -1
  26. package/dist/persist.cjs.js.map +1 -1
  27. package/dist/persist.d.cts +9 -30
  28. package/dist/persist.d.mts +9 -30
  29. package/dist/persist.d.ts +9 -30
  30. package/dist/persist.mjs +1 -1
  31. package/dist/persist.mjs.map +1 -1
  32. package/dist/resolvers/standard-schema.cjs.js +1 -1
  33. package/dist/resolvers/standard-schema.d.cts +1 -1
  34. package/dist/resolvers/standard-schema.d.mts +1 -1
  35. package/dist/resolvers/standard-schema.d.ts +1 -1
  36. package/dist/resolvers/standard-schema.mjs +1 -1
  37. package/dist/resolvers/yup.cjs.js +1 -1
  38. package/dist/resolvers/yup.mjs +1 -1
  39. package/dist/resolvers/zod.cjs.js +1 -1
  40. package/dist/resolvers/zod.cjs.js.map +1 -1
  41. package/dist/resolvers/zod.d.cts +30 -2
  42. package/dist/resolvers/zod.d.mts +30 -2
  43. package/dist/resolvers/zod.d.ts +30 -2
  44. package/dist/resolvers/zod.mjs +1 -1
  45. package/dist/resolvers/zod.mjs.map +1 -1
  46. package/dist/server/index.cjs.js +1 -1
  47. package/dist/server/index.cjs.js.map +1 -1
  48. package/dist/server/index.d.cts +24 -92
  49. package/dist/server/index.d.mts +24 -92
  50. package/dist/server/index.d.ts +24 -92
  51. package/dist/server/index.mjs +1 -1
  52. package/dist/server/index.mjs.map +1 -1
  53. package/dist/standard-schema-BAaTmAHh.d.ts +682 -0
  54. package/dist/standardSchema-5WezjHlp.mjs +2 -0
  55. package/dist/standardSchema-5WezjHlp.mjs.map +1 -0
  56. package/dist/standardSchema-DINHlsYR.cjs.js +2 -0
  57. package/dist/standardSchema-DINHlsYR.cjs.js.map +1 -0
  58. package/dist/validate-2pX-N1O6.cjs.js +2 -0
  59. package/dist/validate-2pX-N1O6.cjs.js.map +1 -0
  60. package/dist/validate-C0HOsP9v.mjs +2 -0
  61. package/dist/validate-C0HOsP9v.mjs.map +1 -0
  62. package/dist/values-BbPnLByD.cjs.js +2 -0
  63. package/dist/values-BbPnLByD.cjs.js.map +1 -0
  64. package/dist/values-CHsmcZk4.mjs +2 -0
  65. package/dist/values-CHsmcZk4.mjs.map +1 -0
  66. package/package.json +6 -4
  67. package/dist/array-3hAjl6Bz.d.ts +0 -160
  68. package/dist/errors-8oPux7GR.cjs.js +0 -2
  69. package/dist/errors-8oPux7GR.cjs.js.map +0 -1
  70. package/dist/errors-ClH3eV1R.mjs +0 -2
  71. package/dist/errors-ClH3eV1R.mjs.map +0 -1
  72. package/dist/standard-schema-CYbnugL7.d.ts +0 -1184
  73. package/dist/standardSchema-BpZvg0tZ.mjs +0 -2
  74. package/dist/standardSchema-BpZvg0tZ.mjs.map +0 -1
  75. package/dist/standardSchema-CxV_DhBO.cjs.js +0 -2
  76. package/dist/standardSchema-CxV_DhBO.cjs.js.map +0 -1
  77. package/dist/validate-BEjNsNvd.mjs +0 -2
  78. package/dist/validate-BEjNsNvd.mjs.map +0 -1
  79. package/dist/validate-BvN6hiEG.cjs.js +0 -2
  80. package/dist/validate-BvN6hiEG.cjs.js.map +0 -1
  81. package/dist/values-Bod74Kzu.mjs +0 -2
  82. package/dist/values-Bod74Kzu.mjs.map +0 -1
  83. package/dist/values-DKpOCD5J.cjs.js +0 -2
  84. package/dist/values-DKpOCD5J.cjs.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-DA4ReEd9.mjs","sources":["../src/util.ts","../src/path.ts","../src/core/internals.ts","../src/core/errors.ts"],"sourcesContent":["import {on} from './emitter';\nimport type {EventEmitter} from './emitter';\n\n/** FIFO bound for {@link pathCache} — a backstop for dynamic keys\n * ('items[' + id + ']'); eviction drops the oldest and only costs a\n * re-parse, never behavior. */\nconst PATH_CACHE_LIMIT = 1e4;\n\nconst pathCache = new Map<string, (string | number)[]>();\n\n/** Test-only view of the path cache size (not re-exported from the entry). */\nexport const pathCacheSize: () => number = () => pathCache.size;\n\nexport function normalizePath(\n path: string | (string | number)[]\n): (string | number)[] {\n if (Array.isArray(path)) return path;\n const cached = pathCache.get(path);\n if (cached) return cached;\n const value = parsePath(path);\n if (pathCache.size >= PATH_CACHE_LIMIT) {\n // Insertion order is FIFO order (non-empty since size >= 1e4).\n const oldest = pathCache.keys().next();\n if (!oldest.done) pathCache.delete(oldest.value);\n }\n pathCache.set(path, value);\n return value;\n}\n\n/** Integer array index (optionally negative)? Parsed paths never carry\n * index strings (dotted numerics throw); it defends programmatic\n * segments from raw arrays and internal callers. */\nexport const isIndex: (segment: string) => boolean = segment =>\n /^-?\\d+$/.test(segment);\n\nfunction parsePath(path: string): (string | number)[] {\n const result: (string | number)[] = [];\n let identifier = '';\n const flushIdentifier = () => {\n if (isIndex(identifier)) {\n // Rebuild both spellings for an actionable error message.\n const dotted = [...result.map(String), identifier].join('.');\n const bracket = result.reduce(\n (acc: string, seg: string | number) =>\n acc +\n (typeof seg === 'number' ? `[${seg}]` : `${acc ? '.' : ''}${seg}`),\n ''\n );\n throw new TypeError(\n `Numeric path segment must use bracket notation: \"${dotted}\" → \"${bracket}[${identifier}]\" (path: ${path})`\n );\n }\n result.push(identifier);\n identifier = '';\n };\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i];\n if (char === '.') {\n if (identifier !== '') flushIdentifier();\n } else if (char === '[') {\n if (identifier !== '') flushIdentifier();\n const quote = path[i + 1];\n if (quote === '\"' || quote === \"'\") {\n const close = path.indexOf(quote, i + 2);\n if (close === -1) {\n throw new TypeError(`Unterminated quote in path: ${path}`);\n }\n if (path[close + 1] !== ']') {\n throw new TypeError(\n `Expected \"]\" after quoted segment in path: ${path}`\n );\n }\n result.push(path.slice(i + 2, close));\n i = close + 1;\n } else {\n const close = path.indexOf(']', i + 1);\n if (close === -1) {\n throw new TypeError(`Unterminated bracket in path: ${path}`);\n }\n const content = path.slice(i + 1, close);\n result.push(isIndex(content) ? Number(content) : content);\n i = close;\n }\n } else {\n identifier += char;\n }\n }\n if (identifier !== '' || result.length === 0) flushIdentifier();\n return result;\n}\n\nexport function get(values: any, path: (string | number)[]): any {\n return path.reduce((current: any, p: string | number) => {\n if (current == null) return undefined;\n return current[p];\n }, values);\n}\n\n/** Immutable counterpart of {@link set}: removes the path, copying only\n * the touched branch; deletes the key rather than writing undefined. */\nexport function unset(values: any, path: (string | number)[]): any {\n if (!path.length || values == null) return values;\n const [prop, ...props] = path;\n if (props.length) {\n const next = unset(values[prop], props);\n // Reattach at the parent key, not the full path (which would re-write\n // the removed subtree).\n return next === values[prop] ? values : set(values, [prop], next);\n }\n if (Array.isArray(values)) {\n if (!(prop in values)) return values;\n const arr = values.slice();\n delete arr[prop as number];\n return arr;\n }\n if (typeof values !== 'object' || !(prop in values)) return values;\n const copy = {...values};\n delete copy[prop as string];\n return copy;\n}\n\n/** The array index `prop` writes inside `container`, or `undefined` for\n * an object key. A numeric segment always addresses an array slot\n * (starting one when `container` isn't an array yet); a numeric string\n * does only when `container` is already an array. */\nfunction arraySlot(container: any, prop: string | number): number | undefined {\n if (typeof prop === 'number') return prop;\n if (Array.isArray(container) && typeof prop === 'string' && isIndex(prop)) {\n return Number(prop);\n }\n return undefined;\n}\n\n/** Copy-on-write for one descent step: array slots copy as an array (or\n * start one), object keys spread into a new object. */\nfunction copyForProp(container: any, prop: string | number): any {\n if (arraySlot(container, prop) !== undefined) {\n return Array.isArray(container) ? container.slice() : [];\n }\n return {...container};\n}\n\n/** Copy-on-write container for {@link setOwned}: returns `container` as-is\n * when this merge already owns it, otherwise copies it (registering the\n * copy) so later paths under it share the same allocation. */\nfunction ensureOwned(\n container: any,\n prop: string | number,\n owned: Set<object>\n): any {\n if (owned.has(container)) return container;\n const copy = copyForProp(container, prop);\n owned.add(copy);\n return copy;\n}\n\nexport function set(values: any, path: (string | number)[], value: any): any {\n if (!path.length) return value;\n\n const [prop, ...props] = path;\n // Numeric segments use the array copy rule; an object spread would\n // corrupt the array.\n const index = arraySlot(values, prop);\n if (index !== undefined) {\n const arr = copyForProp(values, prop);\n arr[index] = set(arr[index], props, value);\n return arr;\n }\n return {...values, [prop]: set(values && values[prop], props, value)};\n}\n\n/** Ownership-tracked {@link set}: merge many paths without re-copying\n * containers this merge already created. Containers in `owned` mutate in\n * place; borrowed containers are copied once (per `set`'s copy rules), so\n * a list of paths allocates each distinct prefix once. Use a fresh `owned`\n * per merge and thread the returned root onward. */\nexport function setOwned(\n root: any,\n path: (string | number)[],\n value: any,\n owned: Set<object>\n): any {\n if (!path.length) return value;\n let container = root;\n let parent: any = null;\n let parentProp: string | number = '';\n for (let i = 0; i < path.length; i++) {\n const prop = path[i];\n const copy = ensureOwned(container, prop, owned);\n if (copy !== container) {\n if (i === 0) root = copy;\n else parent[parentProp] = copy;\n container = copy;\n }\n if (i === path.length - 1) {\n container[prop] = value;\n } else {\n parent = container;\n parentProp = prop;\n container = container[prop];\n }\n }\n return root;\n}\n\nexport function isEmpty(value: any): boolean {\n if (value == null) return true;\n if (typeof value !== 'object') return false;\n\n const values = Object.values(value);\n return values.length === 0 || values.every(isEmpty);\n}\n\nexport function isPromise(value: any): value is Promise<any> {\n return value && typeof value.then === 'function';\n}\n\n/** Typed-accessor options shared by the event-value protocol. */\ntype TypedAccessorOptions = {valueAsNumber?: boolean; valueAsDate?: boolean};\n\n/** Shared DOM event → value protocol: file → FileList, checkbox →\n * `checked`, `valueAsNumber`/`valueAsDate` → typed accessors, else the\n * string `value`; a non-DOM argument passes through unchanged. */\nexport function extractEventValue(e: any, options?: TypedAccessorOptions): any {\n const target = e?.target;\n if (!target) return e;\n if (target.type === 'file') return target.files;\n if (target.type === 'checkbox') return target.checked;\n if (options?.valueAsNumber) return target.valueAsNumber;\n if (options?.valueAsDate) return target.valueAsDate;\n return target.value;\n}\n\n/** Default event-to-value binding: explicit `eventToValue` wins, else\n * extraction follows valueAsNumber/valueAsDate. */\nexport function eventToValueOrDefault(\n eventToValue: ((e: any) => any) | undefined,\n options?: TypedAccessorOptions\n): (e: any) => any {\n return eventToValue ?? ((e: any) => extractEventValue(e, options));\n}\n\n/** Structural equality for default data (primitives, arrays, plain\n * objects, Dates); class instances compare unequal, errs toward re-seeding. */\nexport function isEqual(a: any, b: any): boolean {\n if (Object.is(a, b)) return true;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const isArray = Array.isArray(a);\n if (isArray !== Array.isArray(b)) return false;\n if (isArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isEqual(a[i], b[i])) return false;\n }\n return true;\n }\n const proto = Object.getPrototypeOf(a);\n if (proto !== Object.prototype && proto !== null) return false;\n if (Object.getPrototypeOf(b) !== proto) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!isEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\nexport function waitUntil(\n emitter: EventEmitter<any>,\n event: string,\n isResolve: () => boolean,\n isReject: () => boolean\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (isReject()) return void reject();\n if (isResolve()) return void resolve();\n\n const off = on(emitter, event as any, () => {\n if (isReject()) {\n off();\n reject();\n return;\n }\n // Not resolved yet — stay subscribed and keep waiting.\n if (!isResolve()) return;\n off();\n resolve();\n });\n });\n}\n\n/** DEV-only snapshot guard for {@link getValues}: deep-clones and freezes\n * plain objects/arrays so mutation throws instead of corrupting the shared\n * memoized result. Non-plain values pass through unfrozen (cloning would\n * strip prototypes, freezing breaks methods like Date#setHours). */\nexport function freezeValues(value: any): any {\n if (value === null || typeof value !== 'object') return value;\n if (Array.isArray(value)) {\n return Object.freeze(value.map(freezeValues));\n }\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n const clone: Record<string, any> = {};\n for (const key of Object.keys(value)) clone[key] = freezeValues(value[key]);\n return Object.freeze(clone);\n}\n","import {normalizePath} from './util';\n\nexport type PathSegments = (string | number)[];\nexport type Name = string | PathSegments;\nexport type Path = {value: PathSegments; key: string};\n\nexport default function create(name: Name): Path {\n const value = normalizePath(name);\n return {value, key: JSON.stringify(value)};\n}\n\n/** Parse a path key (the JSON form {@link create} produces) back into\n * segments. */\nexport function segmentsFromKey(key: string): PathSegments {\n return JSON.parse(key) as PathSegments;\n}\n","import {emit} from '../emitter';\nimport {get} from '../util';\nimport type {Name, Path, PathSegments} from '../path';\nimport type {FieldError, Form} from '../form';\n\ntype Cache<V> = {version: number; result: V};\n\nexport function getOrCreate<V>(\n map: WeakMap<Form, V>,\n form: Form,\n create: () => V\n): V {\n if (map.has(form)) return map.get(form) as V;\n const value = create();\n map.set(form, value);\n return value;\n}\n\n/** Per-form memoization of {@link getValues}, the same version-bump/read\n * pattern {@link dirtyFieldsCaches} gives {@link getDirtyFields}. */\ntype ValuesCache = Cache<any>;\n\nexport const valuesCaches: WeakMap<Form, ValuesCache> = new WeakMap();\n\n/** Increment a memo cache's `version` — the write half of the\n * version-bump/read pattern that marks its result stale. */\nfunction bumpVersion<V extends {version: number}>(\n map: WeakMap<Form, V>,\n form: Form\n): void {\n const cache = map.get(form);\n if (cache) cache.version++;\n}\n\n/** Invalidate `form`'s cached {@link getValues} result — called at every\n * point that can change values/parsedValues/initialValues, so repeated\n * reads hand back a stable reference until the next write. */\nexport function bumpValuesVersion(form: Form): void {\n bumpVersion(valuesCaches, form);\n}\n\n/** Per-form memoization of {@link getErrorsRecord} / {@link getErrorsTree},\n * the same version-bump/read pattern {@link valuesCaches} gives {@link\n * getValues}: every errors-Map mutation bumps the counter, reads reset it,\n * so consecutive reads hand back one stable reference until the next write. */\ntype ErrorsCache = Cache<Record<string, FieldError[]>> & {tree: any};\n\nexport const errorsCaches: WeakMap<Form, ErrorsCache> = new WeakMap();\n\n/** Invalidate `form`'s cached {@link getErrorsRecord} result — called at\n * every point that mutates the errors Map. A no-op until the first read\n * installed a cache entry. */\nexport function bumpErrorsVersion(form: Form): void {\n bumpVersion(errorsCaches, form);\n}\n\n/** Per-path dirty-comparison baselines installed by writes with\n * `shouldDirty: false`: the written value becomes that field's baseline —\n * the write reads as a commit, not an edit. Module-private so the Form\n * shape is untouched for forms that never opt in. */\nconst dirtyBaselines = new WeakMap<Form, Map<string, any>>();\n\n/** The value a field's dirtiness is measured against: its committed\n * baseline when one exists, initialValues at the path otherwise. */\nexport function getDirtyBaseline(\n form: Form,\n key: string,\n segments: PathSegments\n): any {\n const baselines = dirtyBaselines.get(form);\n if (baselines?.has(key)) return baselines.get(key);\n return get(form.initialValues, segments);\n}\n\n/** Install a committed baseline for a `shouldDirty: false` write: the\n * field reads clean until a later write diverges. */\nexport function setDirtyBaseline(form: Form, {key}: Path, value: any): void {\n getOrCreate(dirtyBaselines, form, () => new Map()).set(key, value);\n}\n\n/** A wholesale write replaces the subtree below it, so baselines committed\n * under the branch die with the data they were committed against (array\n * movers rewrite the parent path, re-aligning row indices). */\nexport function pruneDirtyBaselines(form: Form, {key}: Path): void {\n const baselines = dirtyBaselines.get(form);\n if (!baselines?.size) return;\n const stem = `${key.slice(0, -1)},`;\n for (const baselineKey of baselines.keys()) {\n if (baselineKey.startsWith(stem)) baselines.delete(baselineKey);\n }\n}\n\n/** Drop committed baselines at one path or all of them — the state they\n * were measured against is gone. */\nexport function clearDirtyBaselines(form: Form, key?: string): void {\n const baselines = dirtyBaselines.get(form);\n if (!baselines) return;\n if (key === undefined) baselines.clear();\n else baselines.delete(key);\n}\n\n/** Per-form memoization of {@link getDirtyFields}. `version` counts value\n * mutations since the cached `result` was computed; bump points increment\n * it, reads reset it, so a non-zero version means the cache is stale. */\ntype DirtyFieldsCache = Cache<Record<string, boolean>>;\n\nexport const dirtyFieldsCaches: WeakMap<Form, DirtyFieldsCache> = new WeakMap();\n\n/** Invalidate `form`'s cached {@link getDirtyFields} result — called at\n * every point that can change values or initialValues, so repeated reads\n * hand out a stable reference and useWatch's Object.is check can skip\n * re-renders. */\nexport function bumpDirtyVersion(form: Form): void {\n bumpVersion(dirtyFieldsCaches, form);\n}\n/** Numbers only occur inside a segments path (`['a', 0]`), never as\n * standalone names, so a top-level number marks `name` as one path rather\n * than a list of names. */\nexport function isSegmentsPath(\n name: PathSegments | Name[]\n): name is PathSegments {\n return (name as (number | unknown)[]).some(part => typeof part === 'number');\n}\n\nexport function isFieldError(value: any): value is FieldError {\n return (\n !!value &&\n typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.message === 'string'\n );\n}\n\n/** Store a schema validator's parsed output as the getValues baseline layer\n * above initialValues. Dirty state is untouched — parsing is not an edit. */\nexport function setParsedValues(form: Form, values: any): void {\n if (values === undefined || values === form.parsedValues) return;\n form.parsedValues = values;\n // parsedValues is a getValues layer above initialValues, so a new parse\n // invalidates the cached merge (no bumpDirtyVersion — parsing isn't an\n // edit).\n bumpValuesVersion(form);\n emit(form.emitter, 'change');\n}\n","import {emit} from '../emitter';\nimport createPath, {segmentsFromKey} from '../path';\nimport type {Name, Path} from '../path';\nimport type {FieldPath, OpaqueTypes, AnyPath} from '../types';\nimport type {FieldError, FieldErrorEntry, Form} from '../form';\nimport {\n bumpErrorsVersion,\n errorsCaches,\n isFieldError,\n isSegmentsPath\n} from './internals';\n\n/** An error value as validators yield it and the error setters\n * accept it: one error, or a mixed list of them. */\nexport type ValidatorOutput = string | FieldError | (string | FieldError)[];\n\n/** Reserved top-level path segment for form-level errors: the Standard\n * Schema adapter lands path-less issues under this key, read via\n * getError(form, FORM_ERROR) / getFieldErrors(form, FORM_ERROR). */\nexport const FORM_ERROR = '_form';\n\n/** Brand marking a form-level validate result as a structured\n * {@link ValidationOutcome} rather than a plain nested error record.\n * Symbols can't collide with user records, so detection is\n * `VALIDATION_OUTCOME in result`. */\nexport const VALIDATION_OUTCOME: unique symbol = Symbol('validation-outcome');\n\n/** Get a field's first error, or undefined. */\nexport function getError<\n T extends Record<string, any> = any,\n P extends AnyPath<T> = AnyPath<T>\n>(form: Form<T>, name: P): FieldError | undefined {\n return getErrorByPath(form, createPath(name));\n}\n\n/** Get a field's first error by path, or undefined. */\nexport function getErrorByPath(\n {errors}: Form,\n path: Path\n): FieldError | undefined {\n return errors.get(path.key)?.[0];\n}\n\n/** Shared empty result for {@link getFieldErrorsByPath}: avoids allocating\n * on the hot no-error path. Stored arrays are handed out by reference too,\n * so treat results as read-only. */\nconst NO_ERRORS: FieldError[] = [];\n\n/** Get all errors of a field (insertion order; empty array when none). */\nexport function getFieldErrors<\n T extends Record<string, any> = any,\n P extends AnyPath<T> = AnyPath<T>\n>(form: Form<T>, name: P): FieldError[] {\n return getFieldErrorsByPath(form, createPath(name));\n}\n\n/** Get all errors of a field by path (insertion order; empty when none). */\nexport function getFieldErrorsByPath({errors}: Form, path: Path): FieldError[] {\n return errors.get(path.key) ?? NO_ERRORS;\n}\n\n/** Get all errors as {path, type, message} entries in insertion order;\n * `path` is the dotted field path ('a.b', 'list.0'), one entry per error. */\nexport function getErrors({errors}: Form): FieldErrorEntry[] {\n const entries: FieldErrorEntry[] = [];\n for (const [key, list] of errors) {\n const path = segmentsFromKey(key).join('.');\n for (const {type, message} of list) entries.push({path, type, message});\n }\n return entries;\n}\n\n/** A {@link FieldPath} string converted to the dotted key error records use\n * at runtime ('items[0].name' → 'items.0.name'); quoted segments drop\n * their quotes. Public so consumers can name the key style in their types. */\nexport type DottedPath<P extends string> =\n P extends `${infer H}[${infer N}]${infer R}`\n ? `${H extends '' ? '' : `${H}.`}${N extends `\"${infer K}\"` | `'${infer K}'` ? K : N}${DottedPath<R>}`\n : P;\n\n/** Every error as one record keyed by dotted path — react-hook-form's\n * `FieldErrors<T>` shape — plus the {@link FORM_ERROR} slot. Values are\n * the stored FieldError[] arrays shared with the form (read-only). */\nexport type FieldErrors<T extends Record<string, any> = any> = Partial<\n Record<DottedPath<Extract<FieldPath<T>, string>>, FieldError[]>\n> & {\n [FORM_ERROR]?: FieldError[];\n};\n\n/** `true` only for the `any` type (the same probe {@link FieldPath}\n * uses), so the tree of an untyped form degrades to `any` instead of an\n * infinite mapped-type expansion. */\ntype IsAnyTree<T> = 0 extends 1 & T ? true : false;\n\ntype TreePrimitive =\n null | undefined | string | number | boolean | symbol | bigint;\n\n/** One level of the nested error tree: arrays become arrays of the item's\n * tree, objects recurse per key, everything else is a leaf holding the\n * stored FieldError[] (shared with the form — read-only). */\ntype FieldErrorsTreeNode<T> =\n IsAnyTree<T> extends true\n ? any\n : T extends OpaqueTypes[keyof OpaqueTypes]\n ? FieldError[]\n : T extends\n | TreePrimitive\n | Function\n | Date\n | File\n | FileList\n | Map<any, any>\n | Set<any>\n ? FieldError[]\n : T extends ReadonlyArray<infer E>\n ? FieldErrorsTreeNode<E>[]\n : {[K in keyof T]?: FieldErrorsTreeNode<T[K]>};\n\n/** Every error as one nested object following the values tree — the typed\n * optional-chain counterpart of {@link FieldErrors}' flat dotted keys.\n * Leaves hold the stored FieldError[] arrays (read-only); {@link\n * FORM_ERROR} sits at the top level. A row-level error at `items[0]` and a\n * field error at `items[0].name` cannot both occupy the `items[0]` slot:\n * whichever landed later owns it (insertion order). The flat record never\n * conflicts — read it when both coexist. */\nexport type FieldErrorsTree<T = any> = FieldErrorsTreeNode<T> & {\n [FORM_ERROR]?: FieldError[];\n};\n\n/** Shared rebuild for {@link getErrorsRecord} / {@link getErrorsTree}:\n * one pass over the errors Map computes both views (the dotted record\n * and the nested tree), each sharing the stored FieldError[] references.\n * The version-bump/read pattern (see {@link errorsCaches}) guarantees\n * consecutive reads hand back stable references until the next error\n * write. */\nfunction computeErrorsViews(form: Form): void {\n const cached = errorsCaches.get(form);\n if (cached?.version === 0) return;\n const result: Record<string, FieldError[]> = {};\n const tree: any = {};\n for (const [key, list] of form.errors) {\n // The raw key preserves the parser's number-vs-string segment\n // distinction: 'items[0]' carries the number 0 (array index in the\n // tree), 'items[\"0\"]' the string '0' (object key).\n const segments = segmentsFromKey(key);\n result[segments.join('.')] = list;\n let node = tree;\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i];\n const slot = node[segment];\n // A shallower error inserted earlier yields to the deeper path —\n // insertion order owns the conflict, mirroring RHF's nested set.\n const container =\n slot &&\n !(Array.isArray(slot) && slot.length > 0 && isFieldError(slot[0]))\n ? slot\n : typeof segments[i + 1] === 'number'\n ? []\n : {};\n node[segment] = container;\n node = container;\n }\n node[segments[segments.length - 1]] = list;\n }\n if (cached) {\n cached.result = result;\n cached.tree = tree;\n cached.version = 0;\n } else {\n errorsCaches.set(form, {version: 0, result, tree});\n }\n}\n\n/** Get every error as one record keyed by dotted path ('a.b', 'list.0') —\n * react-hook-form's `formState.errors` shape. Values are the stored\n * FieldError[] arrays (read-only). Memoized per form with the same\n * version-bump/read pattern {@link getValues} uses, so consecutive reads\n * hand back one stable reference until an error actually changes. */\nexport function getErrorsRecord<T extends Record<string, any> = any>(\n form: Form<T>\n): FieldErrors<T> {\n computeErrorsViews(form);\n return errorsCaches.get(form)!.result;\n}\n\n/** Get every error as one nested object following the values tree\n * (`errors.items[0].name`), the optional-chaining counterpart of\n * {@link getErrorsRecord}. Leaves hold the stored FieldError[] arrays\n * (read-only); memoized via the same version-bump/read pattern. */\nexport function getErrorsTree<T extends Record<string, any> = any>(\n form: Form<T>\n): FieldErrorsTree<T> {\n computeErrorsViews(form);\n return errorsCaches.get(form)!.tree;\n}\n\n/** Convert a field path (bracket spelling, the `name` every API takes)\n * into the dotted key error records use: `'items[0].name'` →\n * `'items.0.name'`. */\nexport function fieldPathToDottedKey(name: Name): string {\n return createPath(name).value.join('.');\n}\n\n/** Convert a dotted errors-record key back into bracket path spelling\n * (`'items.0.name'` → `'items[0].name'`). Inherently lossy: the dotted key\n * cannot distinguish a segment containing a literal dot, so for such paths\n * keep the bracket spelling and read the record via\n * {@link fieldPathToDottedKey}. */\nexport function dottedKeyToFieldPath(key: string): string {\n const segments = key.split('.');\n const numeric = (segment: string) => /^(0|[1-9]\\d*)$/.test(segment);\n return segments\n .map((segment, i) =>\n i > 0 && numeric(segment)\n ? `[${segment}]`\n : `${i > 0 ? '.' : ''}${segment}`\n )\n .join('');\n}\n\n/** Get the first error's message, or undefined when there are no errors. */\nexport function getFirstError({errors}: Form): string | undefined {\n return errors.values().next().value?.[0]?.message;\n}\n\n/** Options accepted by {@link setError}. */\nexport type SetErrorOptions = {\n /** Focus the field's element after the error lands (react-hook-form's\n * `setError` `shouldFocus`); unmounted fields are silent no-ops. */\n shouldFocus?: boolean;\n};\n\n/** Set a field's error. A string is normalized to {type: 'custom',\n * message}; a FieldError is stored as-is; an array holds several (falsy\n * items dropped); undefined clears. */\nexport function setError<\n T extends Record<string, any> = any,\n P extends AnyPath<T> = AnyPath<T>\n>(\n form: Form<T>,\n name: P,\n error: ValidatorOutput | undefined,\n options?: SetErrorOptions\n): void {\n setErrorByPath(form, createPath(name), error, options);\n}\n\n/** Set a field's error by path. See {@link setError} for the input shapes. */\nexport function setErrorByPath(\n form: Form,\n path: Path,\n error: ValidatorOutput | undefined,\n options?: SetErrorOptions\n): void {\n const {emitter, errors} = form;\n const list = normalizeErrors(error);\n // An empty result clears the key: the errors Map never stores an empty\n // list, so hasErrors stays a plain size check and readers index [0]\n // unguarded.\n if (list) errors.set(path.key, list);\n else errors.delete(path.key);\n bumpErrorsVersion(form);\n // Path payload lets key-scoped subscribers skip unrelated fields;\n // payload-less listeners ignore it.\n emit(emitter, 'errors', path);\n if (options?.shouldFocus) emit(emitter, 'focusError', path.key);\n}\n\n/** Normalize a {@link setErrorByPath} input into the stored non-empty\n * FieldError[] shape, or undefined when there is nothing to store. */\nfunction normalizeErrors(\n error: ValidatorOutput | undefined\n): FieldError[] | undefined {\n if (typeof error === 'string') {\n return error ? [{type: 'custom', message: error}] : undefined;\n }\n if (isFieldError(error)) return [error];\n if (!error) return undefined;\n // Falsy items drop out before normalization, so '' never becomes a\n // stored {type: 'custom', message: ''} placeholder.\n const list: FieldError[] = [];\n error.forEach(item => {\n if (typeof item === 'string' && item) {\n list.push({type: 'custom', message: item});\n } else if (isFieldError(item)) {\n list.push(item);\n }\n });\n return list.length ? list : undefined;\n}\n\n/** Clear errors: a single path, a list of paths, or (omitted) every error. */\nexport function clearErrors(form: Form, name?: Name | Name[]): void {\n const {emitter, errors} = form;\n if (name === undefined) {\n errors.clear();\n bumpErrorsVersion(form);\n // Payload-less broadcast: every error subscriber re-syncs.\n emit(emitter, 'errors');\n return;\n }\n // Same single-path vs list discrimination as trigger: a segment array\n // holding a number is one path ('a.0'), not a list of names.\n const paths =\n typeof name === 'string' || isSegmentsPath(name)\n ? [createPath(name)]\n : name.map(one => createPath(one));\n for (const {key} of paths) errors.delete(key);\n bumpErrorsVersion(form);\n // Path-payload emits wake exactly the affected fields' subscribers.\n for (const path of paths) emit(emitter, 'errors', path);\n}\n\n/** Options accepted by {@link setServerErrors}. */\nexport type SetServerErrorsOptions = {\n /** Keep existing field errors instead of clearing them first. Defaults\n * to `false`: a fresh response replaces the prior error state. */\n keepExisting?: boolean;\n};\n\n/** Land a server-side error response: each entry becomes the named field's\n * error(s) with `type: 'server'`. A string lands as one error, an array as\n * several, an empty array clears the field. By default existing errors are\n * cleared first; pass `keepExisting: true` to layer instead. */\nexport function setServerErrors(\n form: Form,\n errors: Record<string, string | string[]>,\n options?: SetServerErrorsOptions\n): void {\n if (!options?.keepExisting) clearErrors(form);\n for (const [name, error] of Object.entries(errors)) {\n setError(\n form,\n name,\n (Array.isArray(error) ? error : [error]).map(message => ({\n type: 'server',\n message\n }))\n );\n }\n}\n\n/** Drop every `type: 'server'` error — the round-trip state a previous\n * submit landed. {@link handleSubmit} runs this before its validation\n * round so a retry is judged fresh; client errors are untouched. Emits\n * payload-less 'errors' when anything changed. */\nexport function clearServerErrors(form: Form): void {\n const affected = Array.from(form.errors).filter(([, list]) =>\n list.some(error => error.type === 'server')\n );\n if (affected.length === 0) return;\n for (const [key, list] of affected) {\n const kept = list.filter(error => error.type !== 'server');\n if (kept.length) form.errors.set(key, kept);\n else form.errors.delete(key);\n }\n bumpErrorsVersion(form);\n emit(form.emitter, 'errors');\n}\n\nexport function hasErrors({errors}: Form): boolean {\n return errors.size > 0;\n}\n"],"names":["pathCache","Map","normalizePath","path","Array","isArray","cached","get","value","result","identifier","flushIdentifier","isIndex","dotted","map","String","join","bracket","reduce","acc","seg","TypeError","push","i","length","char","quote","close","indexOf","slice","content","Number","parsePath","size","oldest","keys","next","done","delete","set","segment","test","values","current","p","unset","prop","props","arr","copy","arraySlot","container","copyForProp","ensureOwned","owned","has","add","index","setOwned","root","parent","parentProp","isPromise","then","isEqual","a","b","Object","is","Date","getTime","proto","getPrototypeOf","prototype","keysA","keysB","key","waitUntil","emitter","event","isResolve","isReject","Promise","resolve","reject","off","on","create","name","JSON","stringify","segmentsFromKey","parse","getOrCreate","form","valuesCaches","WeakMap","bumpVersion","cache","version","bumpValuesVersion","errorsCaches","bumpErrorsVersion","dirtyBaselines","getDirtyBaseline","segments","baselines","initialValues","setDirtyBaseline","pruneDirtyBaselines","stem","baselineKey","startsWith","clearDirtyBaselines","clear","dirtyFieldsCaches","bumpDirtyVersion","isFieldError","type","message","setParsedValues","parsedValues","emit","FORM_ERROR","VALIDATION_OUTCOME","NO_ERRORS","getFieldErrorsByPath","errors","getErrors","entries","list","setError","error","options","setErrorByPath","createPath","forEach","item","normalizeErrors","clearErrors","hasErrors"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("@for-fun/event-emitter");const t=new Map;function r(e){if(Array.isArray(e))return e;const r=t.get(e);if(r)return r;const o=function(e){const t=[];let r="";const o=()=>{if(n(r)){const n=[...t.map(String),r].join("."),o=t.reduce((e,t)=>e+("number"==typeof t?`[${t}]`:`${e?".":""}${t}`),"");throw new TypeError(`Numeric path segment must use bracket notation: "${n}" → "${o}[${r}]" (path: ${e})`)}t.push(r),r=""};for(let s=0;s<e.length;s++){const i=e[s];if("."===i)""!==r&&o();else if("["===i){""!==r&&o();const i=e[s+1];if('"'===i||"'"===i){const r=e.indexOf(i,s+2);if(-1===r)throw new TypeError(`Unterminated quote in path: ${e}`);if("]"!==e[r+1])throw new TypeError(`Expected "]" after quoted segment in path: ${e}`);t.push(e.slice(s+2,r)),s=r+1}else{const r=e.indexOf("]",s+1);if(-1===r)throw new TypeError(`Unterminated bracket in path: ${e}`);const o=e.slice(s+1,r);t.push(n(o)?Number(o):o),s=r}}else r+=i}""===r&&0!==t.length||o();return t}(e);if(t.size>=1e4){const e=t.keys().next();e.done||t.delete(e.value)}return t.set(e,o),o}const n=e=>/^-?\d+$/.test(e);function o(e,t){return t.reduce((e,t)=>{if(null!=e)return e[t]},e)}function s(e,t){return"number"==typeof t?t:Array.isArray(e)&&"string"==typeof t&&n(t)?Number(t):void 0}function i(e,t){return void 0!==s(e,t)?Array.isArray(e)?e.slice():[]:{...e}}function u(e,t,r){if(r.has(e))return e;const n=i(e,t);return r.add(n),n}function c(e,t,r){if(!t.length)return r;const[n,...o]=t,u=s(e,n);if(void 0!==u){const t=i(e,n);return t[u]=c(t[u],o,r),t}return{...e,[n]:c(e&&e[n],o,r)}}function f(e){const t=r(e);return{value:t,key:JSON.stringify(t)}}function a(e){return JSON.parse(e)}function p(e,t,r){if(e.has(t))return e.get(t);const n=r();return e.set(t,n),n}const l=new WeakMap;function y(e,t){const r=e.get(t);r&&r.version++}function g(e){y(l,e)}const h=new WeakMap;function d(e){y(h,e)}const m=new WeakMap;const x=new WeakMap;function b(e){return!!e&&"object"==typeof e&&"string"==typeof e.type&&"string"==typeof e.message}const O=Symbol("validation-outcome"),v=[];function w(t,r,n,o){const{emitter:s,errors:i}=t,u=function(e){if("string"==typeof e)return e?[{type:"custom",message:e}]:void 0;if(b(e))return[e];if(!e)return;const t=[];return e.forEach(e=>{"string"==typeof e&&e?t.push({type:"custom",message:e}):b(e)&&t.push(e)}),t.length?t:void 0}(n);u?i.set(r.key,u):i.delete(r.key),d(t),e.emit(s,"errors",r)}exports.FORM_ERROR="_form",exports.VALIDATION_OUTCOME=O,exports.bumpDirtyVersion=function(e){y(x,e)},exports.bumpErrorsVersion=d,exports.bumpValuesVersion=g,exports.clearDirtyBaselines=function(e,t){const r=m.get(e);r&&(void 0===t?r.clear():r.delete(t))},exports.clearErrors=function(t,r){const{emitter:n,errors:o}=t;return o.clear(),d(t),void e.emit(n,"errors")},exports.create=f,exports.dirtyFieldsCaches=x,exports.get=o,exports.getDirtyBaseline=function(e,t,r){const n=m.get(e);return n?.has(t)?n.get(t):o(e.initialValues,r)},exports.getErrors=function({errors:e}){const t=[];for(const[r,n]of e){const e=a(r).join(".");for(const{type:r,message:o}of n)t.push({path:e,type:r,message:o})}return t},exports.getFieldErrorsByPath=function({errors:e},t){return e.get(t.key)??v},exports.getOrCreate=p,exports.hasErrors=function({errors:e}){return e.size>0},exports.isEqual=function e(t,r){if(Object.is(t,r))return!0;if(t instanceof Date&&r instanceof Date)return t.getTime()===r.getTime();if(!t||!r||"object"!=typeof t||"object"!=typeof r)return!1;const n=Array.isArray(t);if(n!==Array.isArray(r))return!1;if(n){if(t.length!==r.length)return!1;for(let n=0;n<t.length;n++)if(!e(t[n],r[n]))return!1;return!0}const o=Object.getPrototypeOf(t);if(o!==Object.prototype&&null!==o)return!1;if(Object.getPrototypeOf(r)!==o)return!1;const s=Object.keys(t),i=Object.keys(r);if(s.length!==i.length)return!1;for(const n of s)if(!e(t[n],r[n]))return!1;return!0},exports.isFieldError=b,exports.isIndex=n,exports.isPromise=function(e){return e&&"function"==typeof e.then},exports.normalizePath=r,exports.pruneDirtyBaselines=function(e,{key:t}){const r=m.get(e);if(!r?.size)return;const n=`${t.slice(0,-1)},`;for(const e of r.keys())e.startsWith(n)&&r.delete(e)},exports.segmentsFromKey=a,exports.setDirtyBaseline=function(e,{key:t},r){p(m,e,()=>new Map).set(t,r)},exports.setError=function(e,t,r,n){w(e,f(t),r)},exports.setErrorByPath=w,exports.setOwned=function(e,t,r,n){if(!t.length)return r;let o=e,s=null,i="";for(let c=0;c<t.length;c++){const f=t[c],a=u(o,f,n);a!==o&&(0===c?e=a:s[i]=a,o=a),c===t.length-1?o[f]=r:(s=o,i=f,o=o[f])}return e},exports.setParsedValues=function(t,r){void 0!==r&&r!==t.parsedValues&&(t.parsedValues=r,g(t),e.emit(t.emitter,"change"))},exports.unset=function e(t,r){if(!r.length||null==t)return t;const[n,...o]=r;if(o.length){const r=e(t[n],o);return r===t[n]?t:c(t,[n],r)}if(Array.isArray(t)){if(!(n in t))return t;const e=t.slice();return delete e[n],e}if("object"!=typeof t||!(n in t))return t;const s={...t};return delete s[n],s},exports.valuesCaches=l,exports.waitUntil=function(t,r,n,o){return new Promise((s,i)=>{if(o())return void i();if(n())return void s();const u=e.on(t,r,()=>{if(o())return u(),void i();n()&&(u(),s())})})};
2
+ //# sourceMappingURL=errors-TzyWwBfw.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-TzyWwBfw.cjs.js","sources":["../src/util.ts","../src/path.ts","../src/core/internals.ts","../src/core/errors.ts"],"sourcesContent":["import {on} from './emitter';\nimport type {EventEmitter} from './emitter';\n\n/** FIFO bound for {@link pathCache} — a backstop for dynamic keys\n * ('items[' + id + ']'); eviction drops the oldest and only costs a\n * re-parse, never behavior. */\nconst PATH_CACHE_LIMIT = 1e4;\n\nconst pathCache = new Map<string, (string | number)[]>();\n\n/** Test-only view of the path cache size (not re-exported from the entry). */\nexport const pathCacheSize: () => number = () => pathCache.size;\n\nexport function normalizePath(\n path: string | (string | number)[]\n): (string | number)[] {\n if (Array.isArray(path)) return path;\n const cached = pathCache.get(path);\n if (cached) return cached;\n const value = parsePath(path);\n if (pathCache.size >= PATH_CACHE_LIMIT) {\n // Insertion order is FIFO order (non-empty since size >= 1e4).\n const oldest = pathCache.keys().next();\n if (!oldest.done) pathCache.delete(oldest.value);\n }\n pathCache.set(path, value);\n return value;\n}\n\n/** Integer array index (optionally negative)? Parsed paths never carry\n * index strings (dotted numerics throw); it defends programmatic\n * segments from raw arrays and internal callers. */\nexport const isIndex: (segment: string) => boolean = segment =>\n /^-?\\d+$/.test(segment);\n\nfunction parsePath(path: string): (string | number)[] {\n const result: (string | number)[] = [];\n let identifier = '';\n const flushIdentifier = () => {\n if (isIndex(identifier)) {\n // Rebuild both spellings for an actionable error message.\n const dotted = [...result.map(String), identifier].join('.');\n const bracket = result.reduce(\n (acc: string, seg: string | number) =>\n acc +\n (typeof seg === 'number' ? `[${seg}]` : `${acc ? '.' : ''}${seg}`),\n ''\n );\n throw new TypeError(\n `Numeric path segment must use bracket notation: \"${dotted}\" → \"${bracket}[${identifier}]\" (path: ${path})`\n );\n }\n result.push(identifier);\n identifier = '';\n };\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i];\n if (char === '.') {\n if (identifier !== '') flushIdentifier();\n } else if (char === '[') {\n if (identifier !== '') flushIdentifier();\n const quote = path[i + 1];\n if (quote === '\"' || quote === \"'\") {\n const close = path.indexOf(quote, i + 2);\n if (close === -1) {\n throw new TypeError(`Unterminated quote in path: ${path}`);\n }\n if (path[close + 1] !== ']') {\n throw new TypeError(\n `Expected \"]\" after quoted segment in path: ${path}`\n );\n }\n result.push(path.slice(i + 2, close));\n i = close + 1;\n } else {\n const close = path.indexOf(']', i + 1);\n if (close === -1) {\n throw new TypeError(`Unterminated bracket in path: ${path}`);\n }\n const content = path.slice(i + 1, close);\n result.push(isIndex(content) ? Number(content) : content);\n i = close;\n }\n } else {\n identifier += char;\n }\n }\n if (identifier !== '' || result.length === 0) flushIdentifier();\n return result;\n}\n\nexport function get(values: any, path: (string | number)[]): any {\n return path.reduce((current: any, p: string | number) => {\n if (current == null) return undefined;\n return current[p];\n }, values);\n}\n\n/** Immutable counterpart of {@link set}: removes the path, copying only\n * the touched branch; deletes the key rather than writing undefined. */\nexport function unset(values: any, path: (string | number)[]): any {\n if (!path.length || values == null) return values;\n const [prop, ...props] = path;\n if (props.length) {\n const next = unset(values[prop], props);\n // Reattach at the parent key, not the full path (which would re-write\n // the removed subtree).\n return next === values[prop] ? values : set(values, [prop], next);\n }\n if (Array.isArray(values)) {\n if (!(prop in values)) return values;\n const arr = values.slice();\n delete arr[prop as number];\n return arr;\n }\n if (typeof values !== 'object' || !(prop in values)) return values;\n const copy = {...values};\n delete copy[prop as string];\n return copy;\n}\n\n/** The array index `prop` writes inside `container`, or `undefined` for\n * an object key. A numeric segment always addresses an array slot\n * (starting one when `container` isn't an array yet); a numeric string\n * does only when `container` is already an array. */\nfunction arraySlot(container: any, prop: string | number): number | undefined {\n if (typeof prop === 'number') return prop;\n if (Array.isArray(container) && typeof prop === 'string' && isIndex(prop)) {\n return Number(prop);\n }\n return undefined;\n}\n\n/** Copy-on-write for one descent step: array slots copy as an array (or\n * start one), object keys spread into a new object. */\nfunction copyForProp(container: any, prop: string | number): any {\n if (arraySlot(container, prop) !== undefined) {\n return Array.isArray(container) ? container.slice() : [];\n }\n return {...container};\n}\n\n/** Copy-on-write container for {@link setOwned}: returns `container` as-is\n * when this merge already owns it, otherwise copies it (registering the\n * copy) so later paths under it share the same allocation. */\nfunction ensureOwned(\n container: any,\n prop: string | number,\n owned: Set<object>\n): any {\n if (owned.has(container)) return container;\n const copy = copyForProp(container, prop);\n owned.add(copy);\n return copy;\n}\n\nexport function set(values: any, path: (string | number)[], value: any): any {\n if (!path.length) return value;\n\n const [prop, ...props] = path;\n // Numeric segments use the array copy rule; an object spread would\n // corrupt the array.\n const index = arraySlot(values, prop);\n if (index !== undefined) {\n const arr = copyForProp(values, prop);\n arr[index] = set(arr[index], props, value);\n return arr;\n }\n return {...values, [prop]: set(values && values[prop], props, value)};\n}\n\n/** Ownership-tracked {@link set}: merge many paths without re-copying\n * containers this merge already created. Containers in `owned` mutate in\n * place; borrowed containers are copied once (per `set`'s copy rules), so\n * a list of paths allocates each distinct prefix once. Use a fresh `owned`\n * per merge and thread the returned root onward. */\nexport function setOwned(\n root: any,\n path: (string | number)[],\n value: any,\n owned: Set<object>\n): any {\n if (!path.length) return value;\n let container = root;\n let parent: any = null;\n let parentProp: string | number = '';\n for (let i = 0; i < path.length; i++) {\n const prop = path[i];\n const copy = ensureOwned(container, prop, owned);\n if (copy !== container) {\n if (i === 0) root = copy;\n else parent[parentProp] = copy;\n container = copy;\n }\n if (i === path.length - 1) {\n container[prop] = value;\n } else {\n parent = container;\n parentProp = prop;\n container = container[prop];\n }\n }\n return root;\n}\n\nexport function isEmpty(value: any): boolean {\n if (value == null) return true;\n if (typeof value !== 'object') return false;\n\n const values = Object.values(value);\n return values.length === 0 || values.every(isEmpty);\n}\n\nexport function isPromise(value: any): value is Promise<any> {\n return value && typeof value.then === 'function';\n}\n\n/** Typed-accessor options shared by the event-value protocol. */\ntype TypedAccessorOptions = {valueAsNumber?: boolean; valueAsDate?: boolean};\n\n/** Shared DOM event → value protocol: file → FileList, checkbox →\n * `checked`, `valueAsNumber`/`valueAsDate` → typed accessors, else the\n * string `value`; a non-DOM argument passes through unchanged. */\nexport function extractEventValue(e: any, options?: TypedAccessorOptions): any {\n const target = e?.target;\n if (!target) return e;\n if (target.type === 'file') return target.files;\n if (target.type === 'checkbox') return target.checked;\n if (options?.valueAsNumber) return target.valueAsNumber;\n if (options?.valueAsDate) return target.valueAsDate;\n return target.value;\n}\n\n/** Default event-to-value binding: explicit `eventToValue` wins, else\n * extraction follows valueAsNumber/valueAsDate. */\nexport function eventToValueOrDefault(\n eventToValue: ((e: any) => any) | undefined,\n options?: TypedAccessorOptions\n): (e: any) => any {\n return eventToValue ?? ((e: any) => extractEventValue(e, options));\n}\n\n/** Structural equality for default data (primitives, arrays, plain\n * objects, Dates); class instances compare unequal, errs toward re-seeding. */\nexport function isEqual(a: any, b: any): boolean {\n if (Object.is(a, b)) return true;\n if (a instanceof Date && b instanceof Date)\n return a.getTime() === b.getTime();\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false;\n const isArray = Array.isArray(a);\n if (isArray !== Array.isArray(b)) return false;\n if (isArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isEqual(a[i], b[i])) return false;\n }\n return true;\n }\n const proto = Object.getPrototypeOf(a);\n if (proto !== Object.prototype && proto !== null) return false;\n if (Object.getPrototypeOf(b) !== proto) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!isEqual(a[key], b[key])) return false;\n }\n return true;\n}\n\nexport function waitUntil(\n emitter: EventEmitter<any>,\n event: string,\n isResolve: () => boolean,\n isReject: () => boolean\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (isReject()) return void reject();\n if (isResolve()) return void resolve();\n\n const off = on(emitter, event as any, () => {\n if (isReject()) {\n off();\n reject();\n return;\n }\n // Not resolved yet — stay subscribed and keep waiting.\n if (!isResolve()) return;\n off();\n resolve();\n });\n });\n}\n\n/** DEV-only snapshot guard for {@link getValues}: deep-clones and freezes\n * plain objects/arrays so mutation throws instead of corrupting the shared\n * memoized result. Non-plain values pass through unfrozen (cloning would\n * strip prototypes, freezing breaks methods like Date#setHours). */\nexport function freezeValues(value: any): any {\n if (value === null || typeof value !== 'object') return value;\n if (Array.isArray(value)) {\n return Object.freeze(value.map(freezeValues));\n }\n if (Object.getPrototypeOf(value) !== Object.prototype) return value;\n const clone: Record<string, any> = {};\n for (const key of Object.keys(value)) clone[key] = freezeValues(value[key]);\n return Object.freeze(clone);\n}\n","import {normalizePath} from './util';\n\nexport type PathSegments = (string | number)[];\nexport type Name = string | PathSegments;\nexport type Path = {value: PathSegments; key: string};\n\nexport default function create(name: Name): Path {\n const value = normalizePath(name);\n return {value, key: JSON.stringify(value)};\n}\n\n/** Parse a path key (the JSON form {@link create} produces) back into\n * segments. */\nexport function segmentsFromKey(key: string): PathSegments {\n return JSON.parse(key) as PathSegments;\n}\n","import {emit} from '../emitter';\nimport {get} from '../util';\nimport type {Name, Path, PathSegments} from '../path';\nimport type {FieldError, Form} from '../form';\n\ntype Cache<V> = {version: number; result: V};\n\nexport function getOrCreate<V>(\n map: WeakMap<Form, V>,\n form: Form,\n create: () => V\n): V {\n if (map.has(form)) return map.get(form) as V;\n const value = create();\n map.set(form, value);\n return value;\n}\n\n/** Per-form memoization of {@link getValues}, the same version-bump/read\n * pattern {@link dirtyFieldsCaches} gives {@link getDirtyFields}. */\ntype ValuesCache = Cache<any>;\n\nexport const valuesCaches: WeakMap<Form, ValuesCache> = new WeakMap();\n\n/** Increment a memo cache's `version` — the write half of the\n * version-bump/read pattern that marks its result stale. */\nfunction bumpVersion<V extends {version: number}>(\n map: WeakMap<Form, V>,\n form: Form\n): void {\n const cache = map.get(form);\n if (cache) cache.version++;\n}\n\n/** Invalidate `form`'s cached {@link getValues} result — called at every\n * point that can change values/parsedValues/initialValues, so repeated\n * reads hand back a stable reference until the next write. */\nexport function bumpValuesVersion(form: Form): void {\n bumpVersion(valuesCaches, form);\n}\n\n/** Per-form memoization of {@link getErrorsRecord} / {@link getErrorsTree},\n * the same version-bump/read pattern {@link valuesCaches} gives {@link\n * getValues}: every errors-Map mutation bumps the counter, reads reset it,\n * so consecutive reads hand back one stable reference until the next write. */\ntype ErrorsCache = Cache<Record<string, FieldError[]>> & {tree: any};\n\nexport const errorsCaches: WeakMap<Form, ErrorsCache> = new WeakMap();\n\n/** Invalidate `form`'s cached {@link getErrorsRecord} result — called at\n * every point that mutates the errors Map. A no-op until the first read\n * installed a cache entry. */\nexport function bumpErrorsVersion(form: Form): void {\n bumpVersion(errorsCaches, form);\n}\n\n/** Per-path dirty-comparison baselines installed by writes with\n * `shouldDirty: false`: the written value becomes that field's baseline —\n * the write reads as a commit, not an edit. Module-private so the Form\n * shape is untouched for forms that never opt in. */\nconst dirtyBaselines = new WeakMap<Form, Map<string, any>>();\n\n/** The value a field's dirtiness is measured against: its committed\n * baseline when one exists, initialValues at the path otherwise. */\nexport function getDirtyBaseline(\n form: Form,\n key: string,\n segments: PathSegments\n): any {\n const baselines = dirtyBaselines.get(form);\n if (baselines?.has(key)) return baselines.get(key);\n return get(form.initialValues, segments);\n}\n\n/** Install a committed baseline for a `shouldDirty: false` write: the\n * field reads clean until a later write diverges. */\nexport function setDirtyBaseline(form: Form, {key}: Path, value: any): void {\n getOrCreate(dirtyBaselines, form, () => new Map()).set(key, value);\n}\n\n/** A wholesale write replaces the subtree below it, so baselines committed\n * under the branch die with the data they were committed against (array\n * movers rewrite the parent path, re-aligning row indices). */\nexport function pruneDirtyBaselines(form: Form, {key}: Path): void {\n const baselines = dirtyBaselines.get(form);\n if (!baselines?.size) return;\n const stem = `${key.slice(0, -1)},`;\n for (const baselineKey of baselines.keys()) {\n if (baselineKey.startsWith(stem)) baselines.delete(baselineKey);\n }\n}\n\n/** Drop committed baselines at one path or all of them — the state they\n * were measured against is gone. */\nexport function clearDirtyBaselines(form: Form, key?: string): void {\n const baselines = dirtyBaselines.get(form);\n if (!baselines) return;\n if (key === undefined) baselines.clear();\n else baselines.delete(key);\n}\n\n/** Per-form memoization of {@link getDirtyFields}. `version` counts value\n * mutations since the cached `result` was computed; bump points increment\n * it, reads reset it, so a non-zero version means the cache is stale. */\ntype DirtyFieldsCache = Cache<Record<string, boolean>>;\n\nexport const dirtyFieldsCaches: WeakMap<Form, DirtyFieldsCache> = new WeakMap();\n\n/** Invalidate `form`'s cached {@link getDirtyFields} result — called at\n * every point that can change values or initialValues, so repeated reads\n * hand out a stable reference and useWatch's Object.is check can skip\n * re-renders. */\nexport function bumpDirtyVersion(form: Form): void {\n bumpVersion(dirtyFieldsCaches, form);\n}\n/** Numbers only occur inside a segments path (`['a', 0]`), never as\n * standalone names, so a top-level number marks `name` as one path rather\n * than a list of names. */\nexport function isSegmentsPath(\n name: PathSegments | Name[]\n): name is PathSegments {\n return (name as (number | unknown)[]).some(part => typeof part === 'number');\n}\n\nexport function isFieldError(value: any): value is FieldError {\n return (\n !!value &&\n typeof value === 'object' &&\n typeof value.type === 'string' &&\n typeof value.message === 'string'\n );\n}\n\n/** Store a schema validator's parsed output as the getValues baseline layer\n * above initialValues. Dirty state is untouched — parsing is not an edit. */\nexport function setParsedValues(form: Form, values: any): void {\n if (values === undefined || values === form.parsedValues) return;\n form.parsedValues = values;\n // parsedValues is a getValues layer above initialValues, so a new parse\n // invalidates the cached merge (no bumpDirtyVersion — parsing isn't an\n // edit).\n bumpValuesVersion(form);\n emit(form.emitter, 'change');\n}\n","import {emit} from '../emitter';\nimport createPath, {segmentsFromKey} from '../path';\nimport type {Name, Path} from '../path';\nimport type {FieldPath, OpaqueTypes, AnyPath} from '../types';\nimport type {FieldError, FieldErrorEntry, Form} from '../form';\nimport {\n bumpErrorsVersion,\n errorsCaches,\n isFieldError,\n isSegmentsPath\n} from './internals';\n\n/** An error value as validators yield it and the error setters\n * accept it: one error, or a mixed list of them. */\nexport type ValidatorOutput = string | FieldError | (string | FieldError)[];\n\n/** Reserved top-level path segment for form-level errors: the Standard\n * Schema adapter lands path-less issues under this key, read via\n * getError(form, FORM_ERROR) / getFieldErrors(form, FORM_ERROR). */\nexport const FORM_ERROR = '_form';\n\n/** Brand marking a form-level validate result as a structured\n * {@link ValidationOutcome} rather than a plain nested error record.\n * Symbols can't collide with user records, so detection is\n * `VALIDATION_OUTCOME in result`. */\nexport const VALIDATION_OUTCOME: unique symbol = Symbol('validation-outcome');\n\n/** Get a field's first error, or undefined. */\nexport function getError<\n T extends Record<string, any> = any,\n P extends AnyPath<T> = AnyPath<T>\n>(form: Form<T>, name: P): FieldError | undefined {\n return getErrorByPath(form, createPath(name));\n}\n\n/** Get a field's first error by path, or undefined. */\nexport function getErrorByPath(\n {errors}: Form,\n path: Path\n): FieldError | undefined {\n return errors.get(path.key)?.[0];\n}\n\n/** Shared empty result for {@link getFieldErrorsByPath}: avoids allocating\n * on the hot no-error path. Stored arrays are handed out by reference too,\n * so treat results as read-only. */\nconst NO_ERRORS: FieldError[] = [];\n\n/** Get all errors of a field (insertion order; empty array when none). */\nexport function getFieldErrors<\n T extends Record<string, any> = any,\n P extends AnyPath<T> = AnyPath<T>\n>(form: Form<T>, name: P): FieldError[] {\n return getFieldErrorsByPath(form, createPath(name));\n}\n\n/** Get all errors of a field by path (insertion order; empty when none). */\nexport function getFieldErrorsByPath({errors}: Form, path: Path): FieldError[] {\n return errors.get(path.key) ?? NO_ERRORS;\n}\n\n/** Get all errors as {path, type, message} entries in insertion order;\n * `path` is the dotted field path ('a.b', 'list.0'), one entry per error. */\nexport function getErrors({errors}: Form): FieldErrorEntry[] {\n const entries: FieldErrorEntry[] = [];\n for (const [key, list] of errors) {\n const path = segmentsFromKey(key).join('.');\n for (const {type, message} of list) entries.push({path, type, message});\n }\n return entries;\n}\n\n/** A {@link FieldPath} string converted to the dotted key error records use\n * at runtime ('items[0].name' → 'items.0.name'); quoted segments drop\n * their quotes. Public so consumers can name the key style in their types. */\nexport type DottedPath<P extends string> =\n P extends `${infer H}[${infer N}]${infer R}`\n ? `${H extends '' ? '' : `${H}.`}${N extends `\"${infer K}\"` | `'${infer K}'` ? K : N}${DottedPath<R>}`\n : P;\n\n/** Every error as one record keyed by dotted path — react-hook-form's\n * `FieldErrors<T>` shape — plus the {@link FORM_ERROR} slot. Values are\n * the stored FieldError[] arrays shared with the form (read-only). */\nexport type FieldErrors<T extends Record<string, any> = any> = Partial<\n Record<DottedPath<Extract<FieldPath<T>, string>>, FieldError[]>\n> & {\n [FORM_ERROR]?: FieldError[];\n};\n\n/** `true` only for the `any` type (the same probe {@link FieldPath}\n * uses), so the tree of an untyped form degrades to `any` instead of an\n * infinite mapped-type expansion. */\ntype IsAnyTree<T> = 0 extends 1 & T ? true : false;\n\ntype TreePrimitive =\n null | undefined | string | number | boolean | symbol | bigint;\n\n/** One level of the nested error tree: arrays become arrays of the item's\n * tree, objects recurse per key, everything else is a leaf holding the\n * stored FieldError[] (shared with the form — read-only). */\ntype FieldErrorsTreeNode<T> =\n IsAnyTree<T> extends true\n ? any\n : T extends OpaqueTypes[keyof OpaqueTypes]\n ? FieldError[]\n : T extends\n | TreePrimitive\n | Function\n | Date\n | File\n | FileList\n | Map<any, any>\n | Set<any>\n ? FieldError[]\n : T extends ReadonlyArray<infer E>\n ? FieldErrorsTreeNode<E>[]\n : {[K in keyof T]?: FieldErrorsTreeNode<T[K]>};\n\n/** Every error as one nested object following the values tree — the typed\n * optional-chain counterpart of {@link FieldErrors}' flat dotted keys.\n * Leaves hold the stored FieldError[] arrays (read-only); {@link\n * FORM_ERROR} sits at the top level. A row-level error at `items[0]` and a\n * field error at `items[0].name` cannot both occupy the `items[0]` slot:\n * whichever landed later owns it (insertion order). The flat record never\n * conflicts — read it when both coexist. */\nexport type FieldErrorsTree<T = any> = FieldErrorsTreeNode<T> & {\n [FORM_ERROR]?: FieldError[];\n};\n\n/** Shared rebuild for {@link getErrorsRecord} / {@link getErrorsTree}:\n * one pass over the errors Map computes both views (the dotted record\n * and the nested tree), each sharing the stored FieldError[] references.\n * The version-bump/read pattern (see {@link errorsCaches}) guarantees\n * consecutive reads hand back stable references until the next error\n * write. */\nfunction computeErrorsViews(form: Form): void {\n const cached = errorsCaches.get(form);\n if (cached?.version === 0) return;\n const result: Record<string, FieldError[]> = {};\n const tree: any = {};\n for (const [key, list] of form.errors) {\n // The raw key preserves the parser's number-vs-string segment\n // distinction: 'items[0]' carries the number 0 (array index in the\n // tree), 'items[\"0\"]' the string '0' (object key).\n const segments = segmentsFromKey(key);\n result[segments.join('.')] = list;\n let node = tree;\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i];\n const slot = node[segment];\n // A shallower error inserted earlier yields to the deeper path —\n // insertion order owns the conflict, mirroring RHF's nested set.\n const container =\n slot &&\n !(Array.isArray(slot) && slot.length > 0 && isFieldError(slot[0]))\n ? slot\n : typeof segments[i + 1] === 'number'\n ? []\n : {};\n node[segment] = container;\n node = container;\n }\n node[segments[segments.length - 1]] = list;\n }\n if (cached) {\n cached.result = result;\n cached.tree = tree;\n cached.version = 0;\n } else {\n errorsCaches.set(form, {version: 0, result, tree});\n }\n}\n\n/** Get every error as one record keyed by dotted path ('a.b', 'list.0') —\n * react-hook-form's `formState.errors` shape. Values are the stored\n * FieldError[] arrays (read-only). Memoized per form with the same\n * version-bump/read pattern {@link getValues} uses, so consecutive reads\n * hand back one stable reference until an error actually changes. */\nexport function getErrorsRecord<T extends Record<string, any> = any>(\n form: Form<T>\n): FieldErrors<T> {\n computeErrorsViews(form);\n return errorsCaches.get(form)!.result;\n}\n\n/** Get every error as one nested object following the values tree\n * (`errors.items[0].name`), the optional-chaining counterpart of\n * {@link getErrorsRecord}. Leaves hold the stored FieldError[] arrays\n * (read-only); memoized via the same version-bump/read pattern. */\nexport function getErrorsTree<T extends Record<string, any> = any>(\n form: Form<T>\n): FieldErrorsTree<T> {\n computeErrorsViews(form);\n return errorsCaches.get(form)!.tree;\n}\n\n/** Convert a field path (bracket spelling, the `name` every API takes)\n * into the dotted key error records use: `'items[0].name'` →\n * `'items.0.name'`. */\nexport function fieldPathToDottedKey(name: Name): string {\n return createPath(name).value.join('.');\n}\n\n/** Convert a dotted errors-record key back into bracket path spelling\n * (`'items.0.name'` → `'items[0].name'`). Inherently lossy: the dotted key\n * cannot distinguish a segment containing a literal dot, so for such paths\n * keep the bracket spelling and read the record via\n * {@link fieldPathToDottedKey}. */\nexport function dottedKeyToFieldPath(key: string): string {\n const segments = key.split('.');\n const numeric = (segment: string) => /^(0|[1-9]\\d*)$/.test(segment);\n return segments\n .map((segment, i) =>\n i > 0 && numeric(segment)\n ? `[${segment}]`\n : `${i > 0 ? '.' : ''}${segment}`\n )\n .join('');\n}\n\n/** Get the first error's message, or undefined when there are no errors. */\nexport function getFirstError({errors}: Form): string | undefined {\n return errors.values().next().value?.[0]?.message;\n}\n\n/** Options accepted by {@link setError}. */\nexport type SetErrorOptions = {\n /** Focus the field's element after the error lands (react-hook-form's\n * `setError` `shouldFocus`); unmounted fields are silent no-ops. */\n shouldFocus?: boolean;\n};\n\n/** Set a field's error. A string is normalized to {type: 'custom',\n * message}; a FieldError is stored as-is; an array holds several (falsy\n * items dropped); undefined clears. */\nexport function setError<\n T extends Record<string, any> = any,\n P extends AnyPath<T> = AnyPath<T>\n>(\n form: Form<T>,\n name: P,\n error: ValidatorOutput | undefined,\n options?: SetErrorOptions\n): void {\n setErrorByPath(form, createPath(name), error, options);\n}\n\n/** Set a field's error by path. See {@link setError} for the input shapes. */\nexport function setErrorByPath(\n form: Form,\n path: Path,\n error: ValidatorOutput | undefined,\n options?: SetErrorOptions\n): void {\n const {emitter, errors} = form;\n const list = normalizeErrors(error);\n // An empty result clears the key: the errors Map never stores an empty\n // list, so hasErrors stays a plain size check and readers index [0]\n // unguarded.\n if (list) errors.set(path.key, list);\n else errors.delete(path.key);\n bumpErrorsVersion(form);\n // Path payload lets key-scoped subscribers skip unrelated fields;\n // payload-less listeners ignore it.\n emit(emitter, 'errors', path);\n if (options?.shouldFocus) emit(emitter, 'focusError', path.key);\n}\n\n/** Normalize a {@link setErrorByPath} input into the stored non-empty\n * FieldError[] shape, or undefined when there is nothing to store. */\nfunction normalizeErrors(\n error: ValidatorOutput | undefined\n): FieldError[] | undefined {\n if (typeof error === 'string') {\n return error ? [{type: 'custom', message: error}] : undefined;\n }\n if (isFieldError(error)) return [error];\n if (!error) return undefined;\n // Falsy items drop out before normalization, so '' never becomes a\n // stored {type: 'custom', message: ''} placeholder.\n const list: FieldError[] = [];\n error.forEach(item => {\n if (typeof item === 'string' && item) {\n list.push({type: 'custom', message: item});\n } else if (isFieldError(item)) {\n list.push(item);\n }\n });\n return list.length ? list : undefined;\n}\n\n/** Clear errors: a single path, a list of paths, or (omitted) every error. */\nexport function clearErrors(form: Form, name?: Name | Name[]): void {\n const {emitter, errors} = form;\n if (name === undefined) {\n errors.clear();\n bumpErrorsVersion(form);\n // Payload-less broadcast: every error subscriber re-syncs.\n emit(emitter, 'errors');\n return;\n }\n // Same single-path vs list discrimination as trigger: a segment array\n // holding a number is one path ('a.0'), not a list of names.\n const paths =\n typeof name === 'string' || isSegmentsPath(name)\n ? [createPath(name)]\n : name.map(one => createPath(one));\n for (const {key} of paths) errors.delete(key);\n bumpErrorsVersion(form);\n // Path-payload emits wake exactly the affected fields' subscribers.\n for (const path of paths) emit(emitter, 'errors', path);\n}\n\n/** Options accepted by {@link setServerErrors}. */\nexport type SetServerErrorsOptions = {\n /** Keep existing field errors instead of clearing them first. Defaults\n * to `false`: a fresh response replaces the prior error state. */\n keepExisting?: boolean;\n};\n\n/** Land a server-side error response: each entry becomes the named field's\n * error(s) with `type: 'server'`. A string lands as one error, an array as\n * several, an empty array clears the field. By default existing errors are\n * cleared first; pass `keepExisting: true` to layer instead. */\nexport function setServerErrors(\n form: Form,\n errors: Record<string, string | string[]>,\n options?: SetServerErrorsOptions\n): void {\n if (!options?.keepExisting) clearErrors(form);\n for (const [name, error] of Object.entries(errors)) {\n setError(\n form,\n name,\n (Array.isArray(error) ? error : [error]).map(message => ({\n type: 'server',\n message\n }))\n );\n }\n}\n\n/** Drop every `type: 'server'` error — the round-trip state a previous\n * submit landed. {@link handleSubmit} runs this before its validation\n * round so a retry is judged fresh; client errors are untouched. Emits\n * payload-less 'errors' when anything changed. */\nexport function clearServerErrors(form: Form): void {\n const affected = Array.from(form.errors).filter(([, list]) =>\n list.some(error => error.type === 'server')\n );\n if (affected.length === 0) return;\n for (const [key, list] of affected) {\n const kept = list.filter(error => error.type !== 'server');\n if (kept.length) form.errors.set(key, kept);\n else form.errors.delete(key);\n }\n bumpErrorsVersion(form);\n emit(form.emitter, 'errors');\n}\n\nexport function hasErrors({errors}: Form): boolean {\n return errors.size > 0;\n}\n"],"names":["pathCache","Map","normalizePath","path","Array","isArray","cached","get","value","result","identifier","flushIdentifier","isIndex","dotted","map","String","join","bracket","reduce","acc","seg","TypeError","push","i","length","char","quote","close","indexOf","slice","content","Number","parsePath","size","oldest","keys","next","done","delete","set","segment","test","values","current","p","arraySlot","container","prop","copyForProp","ensureOwned","owned","has","copy","add","props","index","arr","create","name","key","JSON","stringify","segmentsFromKey","parse","getOrCreate","form","valuesCaches","WeakMap","bumpVersion","cache","version","bumpValuesVersion","errorsCaches","bumpErrorsVersion","dirtyBaselines","dirtyFieldsCaches","isFieldError","type","message","VALIDATION_OUTCOME","NO_ERRORS","setErrorByPath","error","options","emitter","errors","list","forEach","item","normalizeErrors","emit","baselines","clear","segments","initialValues","entries","isEqual","a","b","Object","is","Date","getTime","proto","getPrototypeOf","prototype","keysA","keysB","then","stem","baselineKey","startsWith","createPath","root","parent","parentProp","parsedValues","unset","event","isResolve","isReject","Promise","resolve","reject","off","on"],"mappings":"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"}
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@for-fun/event-emitter"),t=require("react");function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var n=r(t);const o=new Map;function s(e){if(Array.isArray(e))return e;const t=o.get(e);if(t)return t;const r=function(e){const t=[];let r="";const n=()=>{if(i(r)){const n=[...t.map(String),r].join("."),o=t.reduce((e,t)=>e+("number"==typeof t?`[${t}]`:`${e?".":""}${t}`),"");throw new TypeError(`Numeric path segment must use bracket notation: "${n}" → "${o}[${r}]" (path: ${e})`)}t.push(r),r=""};for(let o=0;o<e.length;o++){const s=e[o];if("."===s)""!==r&&n();else if("["===s){""!==r&&n();const s=e[o+1];if('"'===s||"'"===s){const r=e.indexOf(s,o+2);if(-1===r)throw new TypeError(`Unterminated quote in path: ${e}`);if("]"!==e[r+1])throw new TypeError(`Expected "]" after quoted segment in path: ${e}`);t.push(e.slice(o+2,r)),o=r+1}else{const r=e.indexOf("]",o+1);if(-1===r)throw new TypeError(`Unterminated bracket in path: ${e}`);const n=e.slice(o+1,r);t.push(i(n)?Number(n):n),o=r}}else r+=s}""===r&&0!==t.length||n();return t}(e);if(o.size>=1e4){const e=o.keys().next();e.done||o.delete(e.value)}return o.set(e,r),r}const i=e=>/^-?\d+$/.test(e);function u(e,t){return t.reduce((e,t)=>{if(null!=e)return e[t]},e)}function a(e,t){if(!t.length||null==e)return e;const[r,...n]=t;if(n.length){const t=a(e[r],n);return t===e[r]?e:c(e,[r],t)}if(Array.isArray(e)){if(!(r in e))return e;const t=e.slice();return delete t[r],t}if("object"!=typeof e||!(r in e))return e;const o={...e};return delete o[r],o}function c(e,t,r){if(!t.length)return r;const[n,...o]=t,s="number"==typeof n?n:Array.isArray(e)&&"string"==typeof n&&i(n)?Number(n):void 0;if(void 0!==s){const t=Array.isArray(e)?e.slice():[];return t[s]=c(t[s],o,r),t}return{...e,[n]:c(e&&e[n],o,r)}}function l(e,t,r,n){if(!t.length)return r;let o=e,s=null,u="";for(let a=0;a<t.length;a++){const c=t[a];if(!n.has(o)){let t;t="number"==typeof c||Array.isArray(o)&&"string"==typeof c&&i(c)?Array.isArray(o)?o.slice():[]:{...o},n.add(t),0===a?e=t:s[u]=t,o=t}a===t.length-1?o[c]=r:(s=o,u=c,o=o[c])}return e}function d(e){return e&&"function"==typeof e.then}function f(e,t){const r=e?.target;return r?"file"===r.type?r.files:"checkbox"===r.type?r.checked:t?.valueAsNumber?r.valueAsNumber:t?.valueAsDate?r.valueAsDate:r.value:e}function m(e,t){if(Object.is(e,t))return!0;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(!e||!t||"object"!=typeof e||"object"!=typeof t)return!1;const r=Array.isArray(e);if(r!==Array.isArray(t))return!1;if(r){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!m(e[r],t[r]))return!1;return!0}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&null!==n)return!1;if(Object.getPrototypeOf(t)!==n)return!1;const o=Object.keys(e),s=Object.keys(t);if(o.length!==s.length)return!1;for(const r of o)if(!m(e[r],t[r]))return!1;return!0}function p(t,r,n,o){return new Promise((s,i)=>{if(o())return void i();if(n())return void s();const u=e.on(t,r,()=>{if(o())return u(),void i();n()&&(u(),s())})})}function y(e){const t=s(e);return{value:t,key:JSON.stringify(t)}}const h=new WeakMap;function v(e){const t=h.get(e);t&&t.version++}const g=new WeakMap;function b(e){const t=g.get(e);t&&t.version++}const k=new WeakMap;function x(e,t,r){const n=k.get(e);return n?.has(t)?n.get(t):u(e.initialValues,r)}function V(e,{key:t},r){let n=k.get(e);n||(n=new Map,k.set(e,n)),n.set(t,r)}function S(e,{key:t}){const r=k.get(e);if(!r?.size)return;const n=`${t.slice(0,-1)},`;for(const e of r.keys())e.startsWith(n)&&r.delete(e)}function w(e,t){const r=k.get(e);r&&(void 0===t?r.clear():r.delete(t))}const A=new WeakMap;function E(e){const t=A.get(e);t&&t.version++}function C(e){return e.some(e=>"number"==typeof e)}function O(e){return!!e&&"object"==typeof e&&"string"==typeof e.type&&"string"==typeof e.message}const F="_form",M=Symbol("validation-outcome");function D({errors:e},t){return e.get(t.key)?.[0]}const N=[];function P({errors:e},t){return e.get(t.key)??N}function T({errors:e}){const t=[];for(const[r,n]of e){const e=JSON.parse(r).join(".");for(const{type:r,message:o}of n)t.push({path:e,type:r,message:o})}return t}function j(e){const t=g.get(e);if(t&&0===t.version)return;const r={},n={};for(const[t,o]of e.errors){const e=JSON.parse(t);r[e.join(".")]=o;let s=n;for(let t=0;t<e.length-1;t++){const r=e[t],n=s[r],o=!n||Array.isArray(n)&&n.length>0&&O(n[0])?"number"==typeof e[t+1]?[]:{}:n;s[r]=o,s=o}s[e[e.length-1]]=o}t?(t.result=r,t.tree=n,t.version=0):g.set(e,{version:0,result:r,tree:n})}function B(e){return j(e),g.get(e).result}function R(e){return j(e),g.get(e).tree}function L({errors:e}){return e.values().next().value?.[0]?.message}function q(e,t,r,n){J(e,y(t),r,n)}function J(t,r,n,o){const{emitter:s,errors:i}=t,u=function(e){if("string"==typeof e)return e?[{type:"custom",message:e}]:void 0;if(O(e))return[e];if(!e)return;const t=[];return e.forEach(e=>{"string"==typeof e&&e?t.push({type:"custom",message:e}):O(e)&&t.push(e)}),t.length?t:void 0}(n);u?i.set(r.key,u):i.delete(r.key),b(t),e.emit(s,"errors",r),o?.shouldFocus&&e.emit(s,"focusError",r.key)}function $(t,r){const{emitter:n,errors:o}=t;if(void 0===r)return o.clear(),b(t),void e.emit(n,"errors");const s="string"==typeof r||C(r)?[y(r)]:r.map(e=>y(e));for(const{key:e}of s)o.delete(e);b(t);for(const t of s)e.emit(n,"errors",t)}function I(e,t,r){r?.keepExisting||$(e);for(const[r,n]of Object.entries(t))q(e,r,(Array.isArray(n)?n:[n]).map(e=>({type:"server",message:e})))}function U(t){let r=!1;for(const[e,n]of t.errors){const o=n.filter(e=>"server"!==e.type);0===o.length?(t.errors.delete(e),r=!0):o.length!==n.length&&(t.errors.set(e,o),r=!0)}r&&(b(t),e.emit(t.emitter,"errors"))}function W({errors:e}){return e.size>0}function z(e){return!!e&&"object"==typeof e&&"function"==typeof e["~standard"]?.validate}function _(e){return{type:"standard",message:e?.message||"Validation failed"}}function G(e){return async t=>{const r=await e["~standard"].validate(t);if(r.issues?.length)return r.issues.map(_)}}function K(e){const t=e.path||[],r=[];for(const e of t){const t="object"==typeof e&&null!==e?e.key:e;r.push(String(t))}return r}function H(e,t,r){let n=e;for(let e=0;e<t.length-1;e++){const r=t[e];let o=n[r];if(void 0===o&&(o=n[r]={}),!Q(o))return;n=o}const o=t[t.length-1],s=n[o];void 0===s?n[o]=[r]:Array.isArray(s)&&s.push(r)}function Q(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function X(e){let t=!1;const r={};return Object.entries(e).forEach(([e,n])=>{if(Q(n)){const o=X(n);o&&(r[e]=o,t=!0)}else r[e]=n,t=!0}),t?r:void 0}function Y(e,t){const r=e.values.get(t.key);return e.values.has(t.key)&&x(e,t.key,t.value)!==r}function Z(e){let t=!1;return ee(e,()=>{t=!0}),t}function ee(e,t){for(const[r,n]of e.values){const o=JSON.parse(r);x(e,r,o)!==n&&t(o.join("."))}}function te(e){const t={};return ee(e,e=>{t[e]=!0}),t}function re(e){let t=A.get(e);if(t){if(t.version>0){const r=te(e);(function(e,t){const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every(e=>!0===t[e])})(t.result,r)||(t.result=r),t.version=0}}else t={version:0,result:te(e)},A.set(e,t);return t.result}function ne({emitter:t,touched:r},n){r.has(n.key)||(r.add(n.key),e.emit(t,"touched",n))}function oe({touched:e},t){return e.has(t.key)}function se({touched:e}){return Array.from(e,e=>JSON.parse(e).join("."))}function ie(e){let t=h.get(e);return t?t.version>0&&(t.result=ue(e),t.version=0):(t={version:0,result:ue(e)},h.set(e,t)),t.result}function ue(e){const{initialValues:t,parsedValues:r,values:n,deleted:o}=e,s=new Set;let i=r??t;for(const[e,t]of n)i=l(i,JSON.parse(e),t,s);for(const e of o)i=a(i,JSON.parse(e));return i}function ae({initialValues:e,parsedValues:t,values:r,deleted:n},o){const{key:s,value:i}=o;if(r.has(s))return r.get(s);if(!n.has(s)){for(let e=i.length-1;e>0;e--){const t=JSON.stringify(i.slice(0,e));if(r.has(t))return u(r.get(t),i.slice(e))}return u(t??e,i)}}function ce(t,r,n,o){const{emitter:s,values:i,deleted:u}=t,a="function"==typeof n?n(ae(t,r)):n;i.set(r.key,a),me(i,r),pe(u,r),S(t,r),!1===o?.shouldDirty&&V(t,r,a),E(t),v(t),o?.shouldTouch&&ne(t,r),o?.shouldValidate&&t.validators.get(r.key)?.(),e.emit(s,"change",r)}function le(e,t,r){const{values:n,deleted:o}=e;n.set(t.key,r),me(n,t),pe(o,t),S(e,t),E(e),v(e)}function de({emitter:t},r){e.emit(t,"change",r)}function fe(t,r,n){const{key:o,value:s}=r,{emitter:i,values:u,touched:a,errors:c,validating:l,deleted:d}=t;n?.keepValue||n?.keepDirty||(u.delete(o),w(t,o),function(e,t){for(let r=1;r<t.length;r++)if(e.has(JSON.stringify(t.slice(0,r))))return!0;const r=`${JSON.stringify(t).slice(0,-1)},`;for(const t of e.keys())if(t.startsWith(r))return!0;return!1}(u,s)||d.add(o)),n?.keepTouched||a.delete(o),!n?.keepError&&c.delete(o)&&b(t),l.delete(o),E(t),v(t),e.emit(i,"change",r),e.emit(i,"touched",r),e.emit(i,"errors",r),e.emit(i,"validating",r)}function me(e,{key:t}){if(!e.size)return;const r=`${t.slice(0,-1)},`;for(const t of e.keys())t.startsWith(r)&&e.delete(t)}function pe(e,{key:t}){if(e.size)for(const r of e)(r===t||r.startsWith(`${t.slice(0,-1)},`)||t.startsWith(`${r.slice(0,-1)},`))&&e.delete(r)}function ye(t,r){t.initialValues===r||m(t.initialValues,r)||(t.initialValues=r,t.parsedValues=void 0,t.values.clear(),t.deleted.clear(),w(t),E(t),v(t),e.emit(t.emitter,"change"))}function he(e,t,r){if(null!==e&&"object"==typeof e){if(Array.isArray(e)){for(let n=0;n<e.length;n++)he(e[n],[...t,n],r);return}const n=Object.keys(e);if(n.length>0){for(const o of n)he(e[o],[...t,o],r);return}}r.push({segments:t,value:e})}function ve({emitter:t,validating:r},n){r.delete(n.key),e.emit(t,"validating",n)}function ge({emitter:t,validating:r},n){r.add(n.key),e.emit(t,"validating",n)}function be(e,t,r){let n=null,o=null,s=!1,i=null,u=null;const a=e=>void 0!==e&&!(Array.isArray(e)&&0===e.length),c=()=>{s||(s=!0,ge(e,t))},l=()=>{s&&(s=!1,ve(e,t))},f=()=>{const n=r.sync();if(!n)return!1;const o=n(ae(e,t),{form:e,path:t});return a(o)?(J(e,t,o),u="sync",!0):(r.validate()&&"sync"!==u||(J(e,t,void 0),u=null),!1)},m=n=>{if(r.asyncAlways?.()){const o=(()=>{const n=r.sync();if(!n)return null;const o=n(ae(e,t),{form:e,path:t});if(void 0===o)return null;const s=Array.isArray(o)?o:[o];return s.length?s:null})(),s=void 0===n?[]:Array.isArray(n)?n:[n];J(e,t,[...o??[],...s]),u=a(n)?"validator":o?"sync":null}else J(e,t,n),u=a(n)?"validator":null},p=()=>{null!==n&&(clearTimeout(n),n=null),o?.abort(),i={}},y=()=>{const n=r.validate();if(!n)return void l();o?.abort(),o=new AbortController;const s=i={};let u;try{u=n(ae(e,t),{form:e,path:t,signal:o.signal})}catch(e){throw l(),e}if(!d(u))return m(u),void l();c(),u.then(e=>{i===s&&m(e)}).catch(()=>{}).finally(()=>{i===s&&(l(),i=null)})},h=()=>{if(n=null,f()&&!r.asyncAlways?.())return p(),void l();y()};return e.validators.set(t.key,()=>{if(f()&&!r.asyncAlways?.())return p(),void l();if(!r.validate())return;const e=r.debounce();if(e>0)return null!==n?clearTimeout(n):c(),void(n=setTimeout(h,e));y()}),()=>{e.validators.delete(t.key),null!==n&&(clearTimeout(n),n=null),l(),o?.abort()}}function ke(e,t){t.forEach(t=>ne(e,y(JSON.parse(t))))}function xe(e,t,r=[],n){Object.entries(t).forEach(([t,o])=>{const u=[...r,...i(t)?[t]:s(t)];"string"==typeof o?o&&(q(e,u,o),Ve(e,u,n)):Array.isArray(o)||O(o)?(q(e,u,o),Ve(e,u,n)):o&&"object"==typeof o&&xe(e,o,u,n)})}function Ve(e,t,r){if(!r)return;const n=y(t),o=e.errors.get(n.key);o&&r.set(n.key,o)}function Se(t,r){const n=t.validateDeps||"onSubmit"!==t.validateMode?function(e){let t=we.get(e);t||(t=new Map,we.set(e,t));return t}(t):void 0;if(n&&(!function(t,r){for(const[n,o]of r){t.errors.get(n)===o&&(t.errors.delete(n),b(t),e.emit(t.emitter,"errors",y(JSON.parse(n))))}}(t,n),n.clear()),r){if("object"==typeof r&&M in r){const o=r;return o.errors&&xe(t,o.errors,[],n),void function(t,r){void 0!==r&&r!==t.parsedValues&&(t.parsedValues=r,v(t),e.emit(t.emitter,"change"))}(t,o.values)}xe(t,r,[],n)}}const we=new WeakMap;const Ae="__form_validate__";function Ee(e){for(const t of e.validating)if(t!==Ae)return!1;return!0}const Ce=Symbol("form-validate-settled"),Oe=new WeakMap;function Fe(t){const r=t.validate;if(!r)return Promise.resolve();const n=t.validateDebounce??0;if(n<=0){const e=new AbortController;return Promise.resolve(r(ie(t),{form:t,signal:e.signal})).then(e=>{Se(t,e)})}const o=function(e){let t=Oe.get(e);return t||(t={timer:null,controller:null,round:null,marked:!1,waiters:[]},Oe.set(e,t)),t}(t);return null!==o.timer?clearTimeout(o.timer):(o.marked=!0,t.validating.add(Ae),e.emit(t.emitter,"validating")),o.timer=setTimeout(()=>{o.timer=null;const e=o.round={};(function(e,t,r){const n=e.validate;if(!n)return Promise.resolve();t.controller?.abort();const o=t.controller=new AbortController;let s;try{s=Promise.resolve(n(ie(e),{form:e,signal:o.signal}))}catch(e){s=Promise.reject(e)}return s.then(n=>{t.round===r&&Se(e,n)},e=>{if(t.round===r)throw e})})(t,o,e).then(()=>Me(t,o,e,Ce),r=>Me(t,o,e,r))},n),new Promise((e,t)=>{o.waiters.push({resolve:e,reject:t})})}function Me(t,r,n,o){if(r.round!==n)return;if(r.round=null,null!==r.timer)return;r.marked&&(r.marked=!1,t.validating.delete(Ae),e.emit(t.emitter,"validating"));const s=r.waiters;r.waiters=[];for(const e of s)o===Ce?e.resolve():e.reject(o)}function De(e,t,r){e.validateDeps?.has(t.key)&&e.validate&&("onChange"===r||"all"===r||"onTouched"===r&&oe(e,t)||"onChange"===e.reValidateMode&&function(e){const t=we.get(e);if(!t)return!1;for(const[r,n]of t)if(e.errors.get(r)===n)return!0;return!1}(e))&&Fe(e).catch(()=>{})}const Ne=new WeakMap;function Pe(e,t,r){let n=Ne.get(e);n||(n=new Map,Ne.set(e,n));for(const e of r){let r=n.get(e);r||(r=new Set,n.set(e,r)),r.add(t)}}function Te(e,t,r){const n=Ne.get(e);if(n)for(const e of r){const r=n.get(e);r?.delete(t)&&(r.size||n.delete(e))}}function je(e,t,r){const n=Ne.get(e)?.get(t.key);if(n?.size)for(const o of n)o!==t.key&&("onChange"===r||"all"===r||"onTouched"===r&&oe(e,t)||"onChange"===e.reValidateMode&&e.errors.has(o))&&e.validators.get(o)?.()}function Be(e){const t=new Error(L(e));return t.errors=T(e),t}async function Re(e){if(e.validators.forEach(e=>e()),await p(e.emitter,"validating",()=>Ee(e),()=>W(e)).catch(()=>{throw Be(e)}),e.validate&&(await Fe(e),W(e)))throw Be(e)}async function Le(e){return Re(e).catch(e=>e.message)}const qe=new WeakMap;function Je(e,t,r,n){!1===n?.shouldDirty&&V(e,t,r),qe.get(e)?.get(t.key)?Ue(e,t,r):ce(e,t,r,n)}function $e(e,t,r){let n=qe.get(e);n||(n=new Map,qe.set(e,n));const o=n.has(t.key),s={};return n.set(t.key,{mode:r,token:s}),{token:s,displaced:o}}function Ie(e,t,r){const n=qe.get(e),o=n?.get(t.key);n&&o&&o.token===r&&n.delete(t.key)}function Ue(e,t,r){ce(e,t,r);const n=qe.get(e)?.get(t.key);n&&function(e,t,r){("onChange"===r||"all"===r||"onTouched"===r&&oe(e,t)||P(e,t).length>0&&"onChange"===e.reValidateMode)&&e.validators.get(t.key)?.(),De(e,t,r),"onChange"===e.validateMode&&e.validate&&Fe(e).catch(()=>{}),je(e,t,r)}(e,t,n.mode??e.mode)}function We(e,t){ne(e,t);const r=qe.get(e)?.get(t.key);if(!r)return;const n=r.mode??e.mode;("onBlur"===n||"onTouched"===n||"all"===n||P(e,t).length>0&&"onBlur"===e.reValidateMode)&&e.validators.get(t.key)?.(),"onBlur"===e.validateMode&&e.validate&&Fe(e).catch(()=>{})}function ze(e,t){const{key:r}=t,n={present:e.values.has(r),value:e.values.get(r),touched:e.touched.has(r),errors:e.errors.get(r)};return fe(e,t),n}function _e(t,r,n){const{key:o}=r;n.present?ce(t,r,n.value,{shouldDirty:!1}):(t.deleted.delete(o),v(t),e.emit(t.emitter,"change",r)),n.touched&&ne(t,r),n.errors&&J(t,r,n.errors)}function Ge(e){return void 0!==e.required||void 0!==e.min||void 0!==e.max||void 0!==e.minLength||void 0!==e.maxLength||void 0!==e.pattern||void 0!==e.validate}function Ke(e,t){switch(e){case"required":return"This field is required";case"min":return`Must be at least ${t}`;case"max":return`Must be at most ${t}`;case"minLength":return`Must be at least ${t} characters`;case"maxLength":return`Must be at most ${t} characters`;case"pattern":return"Invalid format";default:return"Invalid value"}}function He(e){return(t,r)=>{if(e.required&&(""===t||null==t||Array.isArray(t)&&0===t.length))return[{type:"required",message:"string"==typeof e.required?e.required:Ke("required")}];const n=[],o=(t,r)=>e.messages?.[t]??Ke(t,r);if(void 0!==e.min){const r=Number(t);!Number.isNaN(r)&&r<e.min&&n.push({type:"min",message:o("min",e.min)})}if(void 0!==e.max){const r=Number(t);!Number.isNaN(r)&&r>e.max&&n.push({type:"max",message:o("max",e.max)})}const s="string"==typeof t||Array.isArray(t);if(void 0!==e.minLength&&s&&t.length<e.minLength&&n.push({type:"minLength",message:o("minLength",e.minLength)}),void 0!==e.maxLength&&s&&t.length>e.maxLength&&n.push({type:"maxLength",message:o("maxLength",e.maxLength)}),e.pattern&&!e.pattern.value.test(t)&&n.push({type:"pattern",message:e.messages?.pattern??e.pattern.message??Ke("pattern")}),void 0!==e.validate){const o="function"==typeof e.validate?{validate:e.validate}:e.validate;for(const[e,s]of Object.entries(o)){const o=s(t,r);if(void 0!==o)for(const t of Array.isArray(o)?o:[o])n.push("string"==typeof t?{type:e,message:t}:{...t,type:e})}}return n.length?n:void 0}}function Qe(e){const t={};return e.required&&(t.required=!0),void 0!==e.min&&(t.min=e.min),void 0!==e.max&&(t.max=e.max),void 0!==e.minLength&&(t.minLength=e.minLength),void 0!==e.maxLength&&(t.maxLength=e.maxLength),e.pattern&&(t.pattern=e.pattern.value.source),t}function Xe(t,r,n){const o=y(r),{mode:s,shouldUnregister:i,eventToValue:u,valueAsNumber:a,valueAsDate:c,rules:l}=n??{},d=u??(e=>{const t=e?.target;return t?"file"===t.type?t.files:"checkbox"===t.type?t.checked:a?t.valueAsNumber:c?t.valueAsDate:t.value:e});let f=null,m=null,p=null,h=null,v=null,g=null;const b=r=>{if(h&&(_e(t,o,h),h=null),f=r,"file"!==r.type&&void 0===ae(t,o)&&(le(t,o,"checkbox"===r.type?r.checked:r.value),de(t,o)),m=$e(t,o,s).token,l&&Ge(l)){const e=void 0!==l.required?He({required:l.required}):void 0,r=void 0!==l.required?{...l,required:void 0}:l;p=be(t,o,{validate:()=>Ge(r)?He(r):void 0,debounce:()=>0,sync:()=>e})}v=e.on(t.emitter,"focusError",(e,t)=>{e===o.key&&f&&"function"==typeof f.focus&&(f.focus(),t?.shouldSelect&&"function"==typeof f.select&&f.select())}),g=e.on(t.emitter,"change",e=>{e||(()=>{if(!f||"file"===f.type)return;const e=ae(t,o),r=null==e?"":String(e);f.value!==r&&(f.value=r)})()})};return{name:o.key,onChange:e=>Je(t,o,d(e)),onBlur:()=>We(t,o),ref:e=>{e?b(e):(m&&(Ie(t,o,m),m=null),p&&(p(),p=null),v&&(v(),v=null),g&&(g(),g=null),f=null,!1!==(i??t.shouldUnregister)&&(h=ze(t,o)))}}}function Ye(e,t){const r=ae(e,t);return Array.isArray(r)?r:[]}function Ze(e,t,r){ce(e,t,[...Ye(e,t),r])}function et(e,t,r){ce(e,t,[r,...Ye(e,t)])}function tt(e,t,r,n){const o=Ye(e,t);return!(r<0||r>o.length)&&(ce(e,t,[...o.slice(0,r),n,...o.slice(r)]),!0)}function rt(e,t,r){const n=Ye(e,t),o=new Set;for(const e of Array.isArray(r)?r:[r])e>=0&&e<n.length&&o.add(e);if(0===o.size)return[];const s=[...o].sort((e,t)=>t-e);return ce(e,t,n.filter((e,t)=>!o.has(t))),s}function nt(e,t,r,n){const o=Ye(e,t);if(r<0||r>=o.length||n<0||n>=o.length)return!1;if(r===n)return!1;const s=[...o],[i]=s.splice(r,1);return s.splice(n,0,i),ce(e,t,s),!0}function ot(e,t,r,n){const o=Ye(e,t);if(r<0||r>=o.length||n<0||n>=o.length)return!1;if(r===n)return!1;const s=[...o];return[s[r],s[n]]=[s[n],s[r]],ce(e,t,s),!0}function st(e,t,r){ce(e,t,[...r])}function it(e,t,r,n){const o=Ye(e,t);if(r<0||r>=o.length)return!1;const s=[...o];return s[r]=n,ce(e,t,s),!0}function ut(t,r){t.isSubmitting=r,e.emit(t.emitter,"submitting")}function at(t){t.submitCount++,e.emit(t.emitter,"submitCount")}function ct(t,r){t.isSubmitSuccessful=r,e.emit(t.emitter,"submitSuccessful")}function lt(t,r){t.disabled=r,e.emit(t.emitter,"disabled")}function dt(e){if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.join(".")}catch{}return e}function ft(t,r){const{onSubmit:n,onValidSubmit:o,onInvalidSubmit:s,onAction:i,shouldFocusError:u=!0,shouldUseNativeValidation:a=t.shouldUseNativeValidation}=r??{};return async r=>{r&&"function"==typeof r.preventDefault&&r.preventDefault();const c=r?.currentTarget;U(t),t.isSubmitted=!0,ut(t,!0),at(t);const l=ie(t);if(a&&c&&"function"==typeof c.checkValidity&&!1===c.checkValidity()){if(c.reportValidity(),u&&"function"==typeof c.querySelector){const e=c.querySelector(":invalid");e&&"function"==typeof e.focus&&e.focus()}return ut(t,!1),ct(t,!1),void(s&&s(function(e){const t=[],{elements:r}=e;for(let e=0;e<r.length;e++){const n=r[e];n.name&&"function"==typeof n.checkValidity&&!n.checkValidity()&&t.push({path:dt(n.name),type:"native",message:n.validationMessage})}return t}(c),l))}if(await Le(t)){if(ut(t,!1),ct(t,!1),u){const r=t.errors.keys().next().value;void 0!==r&&e.emit(t.emitter,"focusError",r)}s&&s(T(t),l)}else try{const e=ie(t);if(n&&await n(e,r),o&&await o(e,r),i){const n=await i(e,r);if(n&&"object"==typeof n&&void 0!==n.errors&&"object"==typeof n.errors)return I(t,n.errors),void ct(t,!1)}ct(t,!0)}catch{ct(t,!1)}finally{ut(t,!1)}}}function mt(t){const r=e.create();e.setMaxListeners(r,0);let n=t?.initialValues??{};"function"==typeof n&&(n=n());const o=t?.validate,s=o&&z(o)?(i=o,async e=>{const t=await i["~standard"].validate(e),{issues:r}=t;if(!r?.length)return{[M]:!0,values:"value"in t?t.value:void 0};const n={};for(const e of r){const t=K(e);if(t.length)H(n,t,_(e));else{const t=n[F]??=[];Array.isArray(t)&&t.push(_(e))}}return{[M]:!0,errors:X(n)||{}}}):o;var i;const u={emitter:r,...t,validate:s,mode:t?.mode??"onSubmit",reValidateMode:t?.reValidateMode??"onChange",validateMode:t?.validateMode??"onSubmit",disabled:t?.disabled??!1,validateOnMount:t?.validateOnMount??!1,asyncAlways:t?.asyncAlways??!1,shouldUseNativeValidation:t?.shouldUseNativeValidation??!0,validateDeps:t?.validateDeps?new Set(t.validateDeps.map(e=>y(e).key)):void 0,initialValues:{},values:new Map,deleted:new Set,errors:new Map,touched:new Set,validators:new Map,validating:new Set,parsedValues:void 0,isSubmitting:!1,isSubmitted:!1,submitCount:0,isSubmitSuccessful:void 0,isLoading:!1,status:void 0,register:(e,t)=>Xe(u,e,t)};return d(n)?(u.isLoading=!0,e.emit(r,"loading"),Promise.resolve(n).then(t=>{ye(u,t??{}),u.isLoading=!1,e.emit(r,"loading")},t=>{u.isLoading=!1,e.emit(r,"loading")})):u.initialValues=n,u}function pt(e){return e.replace(/["'[\],\s]+/g,"-").replace(/^-+|-+$/g,"")||"field"}const yt=new WeakMap;function ht(e,t){return e.startsWith(`${t.slice(0,-1)},`)}function vt(t,r,n,o,s){const{key:i}=n;return e.on(t,r,e=>{(void 0===e||e.key===i||ht(i,e.key)||"branch"===o&&ht(e.key,i))&&s()})}function gt(t,r,n,o){return e.on(t,r,e=>{void 0!==e&&e.key!==n||o()})}function bt(r){const[n]=t.useState(()=>{const e=mt(r);return r&&void 0!==r.values&&ye(e,r.values),e}),o=r&&r.initialValues,s=r&&r.values,i=t.useRef(null);null===i.current&&(i.current={done:!1,source:void 0}),t.useEffect(()=>{if(void 0===o)return;if("function"==typeof o||d(o))return;const e=i.current;e.done&&(e.source===o||m(e.source,o))||(e.done=!0,e.source=o,ye(n,o))},[n,o]);const u=t.useRef(null);return null===u.current&&(u.current={done:!1,source:void 0}),t.useEffect(()=>{if(void 0===s)return;const e=u.current;e.done&&(e.source===s||m(e.source,s))||(e.done=!0,e.source=s,ye(n,s))},[n,s]),t.useEffect(()=>{if(!n.validateOnMount||!n.validate)return;const t=()=>{Fe(n).catch(()=>{})};if(n.isLoading)return e.on(n.emitter,"loading",()=>{t()});t()},[n]),n}function kt(e,r,n){const o=t.useRef(null);null===o.current&&(o.current={hasValue:!1});const s=o.current,i=t.useRef(r);i.current=r;const u=t.useRef(n);u.current=n;const a=t.useCallback(()=>(s.hasValue||(s.value=i.current(),s.hasValue=!0),s.value),[s]),c=t.useCallback(t=>{s.hasValue=!1;return e(()=>{const e=u.current;if(e&&s.hasValue){const r=i.current();if(e(s.value,r))return;return s.value=r,void t()}s.hasValue=!1,t()})},[e,s]);return t.useSyncExternalStore(c,a,a)}function xt(r,n,o,s){const i="emitter"in r?r.emitter:r;return kt(t.useCallback(t=>e.on(i,n,t),[i,n]),o,s)}function Vt(e,r,n){const{emitter:o}=e,{key:s}=r,i=!1===n?.exact?"branch":"leaf";return kt(t.useCallback(e=>vt(o,"change",y(JSON.parse(s)),i,e),[o,s,i]),()=>{if(!1===n?.exact)return u(ie(e),r.value);const t=ae(e,r);return void 0===t?n?.defaultValue:t})}function St(e,r){const{emitter:n}=e,{key:o}=r;return kt(t.useCallback(e=>gt(n,"touched",o,e),[n,o]),oe.bind(null,e,r))}function wt(e,r){const{emitter:n}=e,{key:o}=r;return kt(t.useCallback(e=>gt(n,"errors",o,e),[n,o]),D.bind(null,e,r))}function At(e,r){const{emitter:n}=e,{key:o}=r;return kt(t.useCallback(e=>gt(n,"errors",o,e),[n,o]),P.bind(null,e,r))}function Et(e,r){const{emitter:n}=e,{key:o}=r;return kt(t.useCallback(e=>vt(n,"change",y(JSON.parse(o)),"leaf",e),[n,o]),()=>Y(e,r))}const Ct=["change","errors","touched","validating","submitting","submitCount","submitSuccessful","disabled","loading"];function Ot(e,t){const r=e.touchedFields.length===t.touchedFields.length&&e.touchedFields.every((e,r)=>e===t.touchedFields[r]);return e.isDirty===t.isDirty&&e.dirtyFields===t.dirtyFields&&e.isTouched===t.isTouched&&r&&e.hasErrors===t.hasErrors&&e.isValid===t.isValid&&e.errors===t.errors&&e.isSubmitting===t.isSubmitting&&e.isSubmitted===t.isSubmitted&&e.isValidating===t.isValidating&&e.isSubmitSuccessful===t.isSubmitSuccessful&&e.submitCount===t.submitCount&&e.isLoading===t.isLoading&&e.disabled===t.disabled}function Ft(e){const r=t.useMemo(()=>y(s(e)).key,[e]);return t.useMemo(()=>y(JSON.parse(r)),[r])}function Mt(e){const r=t.useRef(e);return r.current=e,r}function Dt(e){const r=Mt(e);return t.useCallback((...e)=>r.current(...e),[r])}function Nt(e,r){const n=t.useRef(!1),o=Mt(e),s=Mt(r);t.useEffect(()=>{const e=o.current,t=s.current;return n.current&&(n.current=!1,t()),()=>{n.current=!0,e()}},[n,o,s])}function Pt(r,n,o,s){const i=t.useContext(_t),u=o||i;if(!u)throw new Error("no form provided");const a=r,c=t.useRef(void 0);c.current=a&&z(a)?G(a):a;const l=t.useRef(s?.debounce??0);l.current=s?.debounce??0;const d=t.useRef(s?.sync);d.current=s?.sync;const f=t.useRef(s?.asyncAlways??!1);f.current=s?.asyncAlways??!1;const m=t.useRef(s?.validateOnMount);return m.current=s?.validateOnMount,t.useEffect(()=>{const t=y(JSON.parse(n.key)),r=be(u,t,{validate:()=>c.current,debounce:()=>l.current,sync:()=>d.current,asyncAlways:()=>f.current});if(!(m.current??u.validateOnMount)||!c.current&&!d.current)return r;let o=!1;const s=()=>{o||u.validators.get(n.key)?.()};if(u.isLoading){const t=e.on(u.emitter,"loading",()=>{t(),s()})}else s();return()=>{o=!0,r()}},[u,n.key]),Dt(()=>u.validators.get(n.key)?.())}const Tt=new WeakMap;const jt=[];function Bt(e,r,n){const o=t.useRef(!1),s=t.useRef(!1),i=t.useRef(null);return kt(t.useCallback(t=>{const u=y(JSON.parse(r.key)),a=()=>{null!==i.current&&(clearTimeout(i.current),i.current=null)};o.current=!1,s.current=!1,a();const c=gt(e.emitter,"errors",u.key,()=>{const r=P(e,u).length>0,c=s.current;s.current=r,void 0!==n&&(r?c&&!o.current||(a(),o.current=!0,i.current=setTimeout(()=>{i.current=null,o.current=!1,t()},n)):o.current&&(a(),o.current=!1)),t()});return()=>{c(),a()}},[e,r.key,n]),()=>void 0!==n&&o.current?jt:P(e,r))}function Rt({form:r,name:n,initialValue:o,shouldUnregister:s,validate:i,rules:u,validateDebounce:a,validateDeps:c,validateOnMount:l,delayError:m,disabled:p,uncontrolled:h,asyncAlways:v,mode:g,eventToValue:b,valueAsNumber:k,valueAsDate:x,type:V},S){const w=t.useContext(S),A=r||w;if(!A)throw new Error("no form provided");const E=Ft(n),C=t.useRef(!1);void 0!==o&&void 0===ae(A,E)&&(le(A,E,o),C.current=!0),t.useEffect(()=>{C.current&&(C.current=!1,de(A,E))});const O=i;Pt(function(e,t){if(!e||!Ge(e))return t;const r=He(e);return t?(e,n)=>{const o=r(e,n),s=e=>{const t=[...o??[]];return Array.isArray(e)?t.push(...e):e&&t.push(e),t.length?t:void 0},i=t(e,n);return d(i)?i.then(s):s(i)}:r}(u?{...u,required:void 0}:void 0,O&&z(O)?G(O):O),E,A,{debounce:a,validateOnMount:l,asyncAlways:v??A.asyncAlways,sync:u&&void 0!==u.required?He({required:u.required}):void 0});const F=Bt(A,E,m),M=F[0],D=M?.message,N=function(e,r,n){const o=t.useRef({has:!1,value:void 0}),s=t.useCallback(()=>n?(o.current.has||(o.current={has:!0,value:ae(e,r)}),o.current.value):ae(e,r),[n,e,r]);return kt(t.useCallback(t=>n?()=>{}:vt(e.emitter,"change",r,"leaf",t),[n,e.emitter,r]),s)}(A,E,!!h),P=kt(t.useCallback(e=>h?()=>{}:vt(A.emitter,"change",y(JSON.parse(E.key)),"leaf",e),[A.emitter,E.key,h]),()=>Y(A,E)),T=kt(t.useCallback(e=>gt(A.emitter,"validating",E.key,e),[A.emitter,E.key]),()=>A.validating.has(E.key)),j=kt(t.useCallback(e=>vt(A.emitter,"disabled",y(JSON.parse(E.key)),"branch",e),[A.emitter,E.key]),()=>A.disabled||!0===p||!1!==p&&function(e,t){const r=yt.get(e);if(!r?.size)return!1;const n=t.value;for(let e=1;e<n.length;e++){const t=JSON.stringify(n.slice(0,e));if(r.get(t)?.disabled)return!0}return!1}(A,E)),B=t.useRef(null);t.useEffect(()=>{const t=y(JSON.parse(E.key)),r=function(t,r,n){if(void 0===n)return null;let o=yt.get(t);o||(o=new Map,yt.set(t,o));const s={};return o.set(r.key,{disabled:n,token:s}),e.emit(t.emitter,"disabled",r),{token:s}}(A,t,p);return r&&(B.current=r.token),()=>{null!==B.current&&(!function(t,r,n){const o=yt.get(t),s=o?.get(r.key);o&&s&&s.token===n&&(o.delete(r.key),e.emit(t.emitter,"disabled",r))}(A,t,B.current),B.current=null)}},[A,E.key,p]);const R=Dt(e=>Ue(A,E,e)),L=Dt(()=>We(A,E));t.useEffect(()=>{const e=y(JSON.parse(E.key)),{token:t,displaced:r}=$e(A,e,g);return()=>Ie(A,e,t)},[A,E.key,g]);const q=c?.length?c.join("\n"):void 0,J=Mt(c);t.useEffect(()=>{if(!q)return;const e=J.current.map(e=>y(e).key);return Pe(A,E.key,e),()=>Te(A,E.key,e)},[A,E.key,q,J]);const $=t.useRef(null),I=t.useCallback(e=>{$.current=e},[]);t.useEffect(()=>e.on(A.emitter,"focusError",(e,t)=>{if(e!==E.key)return;const r=$.current;r&&"function"==typeof r.focus&&(r.focus(),t?.shouldSelect&&"function"==typeof r.select&&r.select())}),[A,E.key]),t.useEffect(()=>{const t=y(JSON.parse(E.key));let r=Tt.get(A);if(!r){const t=new Map,n=e.on(A.emitter,"change",e=>{if(!e)for(const e of t.values()){const{el:t,path:r}=e();if(!t||"file"===t.type)continue;const n=ae(A,r),o=null==n?"":String(n);t.value!==o&&(t.value=o)}});r={cells:t,off:n},Tt.set(A,r)}return r.cells.set(E.key,()=>({el:$.current,path:t})),()=>{r.cells.delete(E.key),0===r.cells.size&&(r.off(),Tt.delete(A))}},[A,E.key,h]);const U=t.useRef(null);Nt(Dt(()=>{!1!==(s??A.shouldUnregister)&&(U.current=ze(A,E))}),Dt(()=>{const e=U.current;U.current=null,e&&_e(A,E,e)}));const W=b??(e=>f(e,{valueAsNumber:k,valueAsDate:x})),_={name:E.key,ref:I,onChange:e=>R(W(e)),onBlur:L,disabled:j,..."checkbox"===V?{checked:!!N}:"file"===V?{}:h?{defaultValue:N}:{value:N??""},...D?{"aria-invalid":!0,"aria-describedby":pt(E.key)}:{}};return{form:A,value:N,error:D,errorObject:M,errors:F,isDirty:P,validating:T,onChange:R,onBlur:L,name:E.key,disabled:j,focusRef:I,inputProps:_}}function Lt(e){return Rt(e,_t)}const qt=new WeakMap;function Jt(e){const t=(qt.get(e)??0)+1;return qt.set(e,t),`_${t}`}const $t=new WeakMap;function It(e,t,r){let n=$t.get(e);n||(n=new Map,$t.set(e,n)),n.set(t,r)}function Ut(e){return e+1}function Wt(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const s=e.keyName??"id",{rules:i,shouldUnregister:u}=e,a=Ft(e.name),c=t.useRef([]),l=t.useCallback(()=>ae(o,a)||[],[o,a]),d=t.useCallback(()=>{const e=l();for(;c.current.length<e.length;)c.current.push(Jt(o));for(;c.current.length>e.length;)c.current.pop();return c.current.map((e,t)=>({id:e,index:t,[s]:e}))},[l,o,s]),[f,m]=t.useReducer(d,void 0,d);t.useEffect(()=>vt(o.emitter,"change",a,"branch",m),[o.emitter,a]),It(o,a.key,c.current),t.useEffect(()=>(It(o,a.key,c.current),()=>{const e=$t.get(o);e?.get(a.key)===c.current&&e.delete(a.key)}),[o,a.key]);const p=t.useRef(null);Nt(Dt(()=>{!1!==(u??o.shouldUnregister)&&(p.current=ze(o,a))}),Dt(()=>{const e=p.current;p.current=null,e&&_e(o,a,e)})),Pt(i?He({...i,required:void 0}):void 0,a,o,{sync:i&&void 0!==i.required?He({required:i.required}):void 0});return{fields:f,append:Dt(e=>{c.current.push(Jt(o)),Ze(o,a,e)}),prepend:Dt(e=>{c.current.unshift(Jt(o)),et(o,a,e)}),insert:Dt((e,t)=>{tt(o,a,e,t)&&c.current.splice(e,0,Jt(o))}),remove:Dt(e=>{const t=rt(o,a,e);for(const e of t)c.current.splice(e,1)}),swap:Dt((e,t)=>{ot(o,a,e,t)&&([c.current[e],c.current[t]]=[c.current[t],c.current[e]])}),move:Dt((e,t)=>{if(!nt(o,a,e,t))return;const[r]=c.current.splice(e,1);c.current.splice(t,0,r)}),replace:Dt(e=>{c.current=e.map(()=>Jt(o)),st(o,a,e)}),update:Dt((e,t)=>{it(o,a,e,t)})}}function zt(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const{id:s}=e,i=Ft(e.name),u=t.useCallback(()=>function(e,t){return $t.get(e)?.get(t)}(o,i.key)?.indexOf(s)??-1,[o,i.key,s]),a=t.useCallback(e=>{const t=ae(o,i);return Array.isArray(t)?t[e]:void 0},[o,i]),c=u(),l=a(c),d=t.useRef({index:c,value:l});d.current={index:c,value:l};const f=Mt({computeIndex:u,computeValue:a}),[,m]=t.useReducer(Ut,0);t.useEffect(()=>vt(o.emitter,"change",i,"leaf",()=>{const{computeIndex:e,computeValue:t}=f.current,r=e();r===d.current.index&&Object.is(t(r),d.current.value)||m()}),[o.emitter,i,f]);const p=Ft([...i.value,c]),y=At(o,p);return{value:l,setValue:Dt(e=>{if(c<0)return;const t=[...ae(o,i)??[]];c>=t.length||(t[c]=e,ce(o,i,t))}),errors:y,error:y[0]?.message,name:p.key,index:c,form:o}}const _t=t.createContext(null),Gt=_t.Provider;const Kt=t.createContext(null),Ht=Kt.Provider;function Qt(e,t,r){if(null!=r)if(Array.isArray(r))for(const n of r)Qt(e,t,n);else if("undefined"!=typeof FileList&&r instanceof FileList)for(let n=0;n<r.length;n++)e.append(t,r.item(n));else"undefined"!=typeof File&&r instanceof File?e.append(t,r,r.name):"undefined"!=typeof Blob&&r instanceof Blob?e.append(t,r):r instanceof Date?e.append(t,r.toISOString()):e.append(t,"object"==typeof r?JSON.stringify(r):String(r))}function Xt(e,t,r){return{"aria-invalid":!!e||r["aria-invalid"],"aria-describedby":e?[r["aria-describedby"],pt(t)].filter(Boolean).join(" "):r["aria-describedby"]}}const Yt=n.forwardRef(({validate:e,eventToValue:t,initialValue:r,name:o,asProps:s,renderError:i,as:u,valueToProps:a,form:c,shouldUnregister:l,rules:d,validateDebounce:m,validateOnMount:p,valueAsNumber:y,valueAsDate:h,asyncAlways:v,disabled:g,delayError:b,mode:k,uncontrolled:x,...V},S)=>{const w=n.useRef(null),[A,E]=n.useState(0),C=n.useContext(_t),O=c??C,F=e,M=F&&z(F)?G(F):F,{value:D,onChange:N,onBlur:P,error:T,name:j,disabled:B,focusRef:R}=Lt({name:o,form:c,initialValue:r,shouldUnregister:l,rules:d,validateDebounce:m,validateOnMount:p,delayError:b,disabled:g,asyncAlways:v,mode:k,uncontrolled:x||"file"===V.type,validate:(...e)=>{if(!1!==O?.shouldUseNativeValidation){const e=w.current;if(e&&"function"==typeof e.checkValidity&&(e.setCustomValidity(""),!1===e.checkValidity()))return void E(e=>e+1)}if(M)return M(...e)}}),L=n.useCallback(e=>{w.current=e,R(e),function(e,t){"function"==typeof e?e(t):e&&(e.current=t)}(S,e)},[S,R]),q=u||"input";n.useEffect(()=>{const e=w.current;e&&"function"==typeof e.setCustomValidity&&("string"==typeof T?(e.setCustomValidity(T),e.reportValidity()):e.setCustomValidity(""))},[T]),n.useEffect(()=>{A>0&&w.current?.reportValidity()},[A]);const J="file"===V.type,$=t??(e=>f(e,{valueAsNumber:y,valueAsDate:h})),I=a?a(D):J?{}:x?{defaultValue:D}:{value:D},U=pt(j),W=d?Qe(d):void 0;return n.createElement(n.Fragment,null,n.createElement(q,{...W,...V,name:j,onBlur:P,...s,...I,...Xt(T,j,V),disabled:B,onChange:e=>N($(e)),ref:L}),T&&i?n.createElement("span",{id:U,role:"alert"},i(T,U)):null)}),Zt=n.forwardRef(({name:e,form:t,initialValue:r,shouldUnregister:o,validate:s,rules:i,validateDebounce:u,validateOnMount:a,asyncAlways:c,disabled:l,delayError:d,mode:f,...m},p)=>{const{value:y,onChange:h,onBlur:v,error:g,name:b,disabled:k}=Lt({name:e,form:t,initialValue:r,shouldUnregister:o,validate:s,rules:i,validateDebounce:u,validateOnMount:a,asyncAlways:c,delayError:d,disabled:l,mode:f}),x=i?Qe(i):void 0;return n.createElement("input",{...x,...m,name:b,onBlur:v,type:"checkbox",checked:!!y,...Xt(g,b,m),disabled:k,onChange:e=>h(e.target.checked),ref:p})});function er(e,t){return e?Array.isArray(t)?t:[]:t??""}const tr=n.forwardRef(({name:e,multiple:t,children:r,form:o,initialValue:s,shouldUnregister:i,validate:u,rules:a,validateDebounce:c,validateOnMount:l,asyncAlways:d,disabled:f,delayError:m,mode:p,...y},h)=>{const{value:v,onChange:g,onBlur:b,error:k,name:x,disabled:V}=Lt({name:e,form:o,initialValue:s,shouldUnregister:i,validate:u,rules:a,validateDebounce:c,validateOnMount:l,asyncAlways:d,delayError:m,disabled:f,mode:p}),S=a?Qe(a):void 0;return n.createElement("select",{...S,...y,name:x,onBlur:b,multiple:t,value:er(t,v),...Xt(k,x,y),disabled:V,onChange:e=>g(t?Array.from(e.target.selectedOptions,e=>e.value):e.target.value),ref:h},r)});exports.Checkbox=Zt,exports.CheckboxGroupContext=Kt,exports.CheckboxGroupProvider=Ht,exports.FORM_ERROR=F,exports.Field=Yt,exports.Form=function({form:e,context:t,initialValues:r,values:o,shouldUnregister:s,validateOnMount:i,disabled:u,asyncAlways:a,onSubmit:c,onValidSubmit:l,onInvalidSubmit:d,action:f,shouldFocusError:m,shouldUseNativeValidation:p,...y}){const h=bt({initialValues:r,values:o,shouldUnregister:s,validateOnMount:i,disabled:u,asyncAlways:a,shouldUseNativeValidation:p}),v=e||h;n.useEffect(()=>{void 0!==u&&lt(v,u)},[v,u]);const g=ft(v,{onSubmit:c,onValidSubmit:l,onInvalidSubmit:d,shouldFocusError:m,shouldUseNativeValidation:p,onAction:"function"==typeof f?e=>f(function(e){const t=new FormData;for(const r of Object.keys(e))Qt(t,r,e[r]);return t}(e)):void 0}),{Provider:b}=t??_t,k="string"==typeof f?f:void 0;return n.createElement(b,{value:v},n.createElement("form",{...y,action:k,noValidate:!0,onSubmit:g}))},exports.FormContext=_t,exports.FormField=function({children:e,...t}){return e(Lt(t))},exports.FormProvider=Gt,exports.Select=tr,exports.VALIDATION_OUTCOME=M,exports.appendValue=function(e,t,r){Ze(e,y(t),r)},exports.appendValueByPath=Ze,exports.changeValue=function(e,t,r,n){Je(e,y(t),r,n)},exports.changeValueByPath=Je,exports.clearErrors=$,exports.clearServerErrors=U,exports.createForm=mt,exports.createFormContext=function(){const e=t.createContext(null);return{context:e,FormProvider:function({form:r,children:n}){return t.createElement(e.Provider,{value:r},n)},useFormContext:function(){const r=t.useContext(e);if(!r)throw new Error("no form provided");return r},useField:function(t){return Rt(t,e)},useFieldArray:function(t){return Wt(t,e)},useFieldArrayItem:function(t){return zt(t,e)}}},exports.dottedKeyToFieldPath=function(e){return e.split(".").map((e,t)=>t>0&&(e=>/^(0|[1-9]\d*)$/.test(e))(e)?`[${e}]`:`${t>0?".":""}${e}`).join("")},exports.emitChangeByPath=de,exports.ensureValidate=Re,exports.fieldErrorId=function(e){return pt(y(e).key)},exports.fieldPathToDottedKey=function(e){return y(e).value.join(".")},exports.getDirtyFields=re,exports.getError=function(e,t){return D(e,y(t))},exports.getErrorByPath=D,exports.getErrors=T,exports.getErrorsRecord=B,exports.getErrorsTree=R,exports.getFieldErrors=function(e,t){return P(e,y(t))},exports.getFieldErrorsByPath=P,exports.getFieldState=function(e,t){const r=y(t),{touched:n,validating:o}=e;return{value:ae(e,r),error:D(e,r),errors:P(e,r),isDirty:Y(e,r),isTouched:n.has(r.key),isValidating:o.has(r.key)}},exports.getFirstError=L,exports.getTouchedFields=se,exports.getValue=function(e,t){return ae(e,y(t))},exports.getValueByPath=ae,exports.getValues=ie,exports.handleSubmit=ft,exports.hasErrors=W,exports.hasTouched=function(e,t){return oe(e,y(t))},exports.hasTouchedByPath=oe,exports.incrementSubmitCount=at,exports.insertValue=function(e,t,r,n){return tt(e,y(t),r,n)},exports.insertValueByPath=tt,exports.isDirty=Z,exports.isFieldDirtyByPath=Y,exports.isTouched=function({touched:e}){return e.size>0},exports.moveValue=function(e,t,r,n){return nt(e,y(t),r,n)},exports.moveValueByPath=nt,exports.prependValue=function(e,t,r){et(e,y(t),r)},exports.prependValueByPath=et,exports.registerField=Xe,exports.registerFieldMode=$e,exports.registerFieldValidateDeps=Pe,exports.registerValidatorByPath=be,exports.removeField=function(e,t,r){fe(e,y(t),r)},exports.removeFieldByPath=fe,exports.removeValue=function(e,t,r){return rt(e,y(t),r)},exports.removeValueByPath=rt,exports.replaceValues=function(e,t,r){st(e,y(t),r)},exports.replaceValuesByPath=st,exports.reset=function(t,r,n){const o=[];if(n?.keepValues)he(ie(t),[],o);else if(n?.keepDirtyValues)for(const[e,r]of t.values){const n=JSON.parse(e);x(t,e,n)!==r&&o.push({segments:n,value:r})}t.initialValues=n?.keepDefaultValues?t.initialValues:r??t.initialValues,t.parsedValues=void 0,n?.keepErrors||$(t);const{emitter:s,touched:i,values:u,deleted:a,validating:c}=t;u.clear(),a.clear(),w(t),n?.keepTouched||i.clear(),c.clear(),n?.keepIsSubmitting||(t.isSubmitting=!1),n?.keepSubmitCount||(t.submitCount=0),n?.keepIsSubmitted||(t.isSubmitted=!1),n?.keepIsSubmitSuccessful||(t.isSubmitSuccessful=void 0),E(t),v(t);for(const{segments:e,value:r}of o)ce(t,y(e),r);e.emit(s,"change"),e.emit(s,"touched"),e.emit(s,"validating"),e.emit(s,"submitting"),e.emit(s,"submitCount"),e.emit(s,"submitSuccessful"),e.emit(s,"reset")},exports.resetField=function(t,r,n){const o=y(r),{emitter:s,values:i,touched:c,errors:l,deleted:d}=t;if(i.delete(o.key),w(t,o.key),void 0!==t.parsedValues){t.parsedValues=a(t.parsedValues,o.value);const e=u(t.initialValues,o.value);void 0!==e&&i.set(o.key,e)}n&&"value"in n&&i.set(o.key,n.value),pe(d,o),e.emit(s,"change"),!n?.keepTouched&&c.delete(o.key)&&e.emit(s,"touched",o),!n?.keepErrors&&l.delete(o.key)&&(b(t),e.emit(s,"errors",o)),E(t),v(t)},exports.revalidateDependentsOnChange=je,exports.revalidateFormOnChange=De,exports.runFormValidate=Fe,exports.seedValueByPath=le,exports.setDisabled=lt,exports.setError=q,exports.setErrorByPath=J,exports.setFocus=function(t,r,n){const{key:o}=y(r);n?e.emit(t.emitter,"focusError",o,n):e.emit(t.emitter,"focusError",o)},exports.setInitialValues=ye,exports.setIsSubmitting=ut,exports.setServerErrors=I,exports.setStatus=function(t,r){t.status=r,e.emit(t.emitter,"status")},exports.setSubmitSuccessful=ct,exports.setTouched=function(e,t){ne(e,y(t))},exports.setTouchedByPath=ne,exports.setValidatingByPath=ge,exports.setValue=function(e,t,r,n){ce(e,y(t),r,n)},exports.setValueByPath=ce,exports.subscribe=function(t,r){const{name:n,event:o="change",scope:s="branch",callback:i}=r;if(void 0===n)return e.on(t.emitter,o,i);const u=(function(e){return Array.isArray(e)&&e.every(e=>"number"!=typeof e)}(n)?n:[n]).map(e=>{const r=y(e);return"errors"===o||"touched"===o?gt(t.emitter,o,r.key,i):vt(t.emitter,o,r,s,i)});return 1===u.length?u[0]:()=>u.forEach(e=>e())},exports.swapValues=function(e,t,r,n){return ot(e,y(t),r,n)},exports.swapValuesByPath=ot,exports.trigger=async function(t,r,n){const o=e=>p(t.emitter,"validating",()=>void 0===e?Ee(t):e.every(e=>!t.validating.has(e)),()=>!1);if(void 0===r){if(t.validators.forEach(e=>e()),await o(),t.validate&&await Fe(t),n?.shouldTouch&&ke(t,[...t.validators.keys()]),n?.shouldFocus){const r=t.errors.keys().next().value;void 0!==r&&e.emit(t.emitter,"focusError",r)}return!W(t)}const s="string"==typeof r||C(r)?[y(r).key]:r.map(e=>y(e).key);if(s.forEach(e=>t.validators.get(e)?.()),await o(s),n?.shouldTouch&&ke(t,s),n?.shouldFocus){const r=s.find(e=>t.errors.has(e));void 0!==r&&e.emit(t.emitter,"focusError",r)}return s.every(e=>!t.errors.has(e))},exports.unregisterFieldMode=Ie,exports.unregisterFieldValidateDeps=Te,exports.unsetValidatingByPath=ve,exports.updateValue=function(e,t,r,n){return it(e,y(t),r,n)},exports.updateValueByPath=it,exports.useCanSubmit=function(r){const{emitter:n}=r;return kt(t.useCallback(t=>{const r=e.on(n,"errors",t),o=e.on(n,"submitting",t);return()=>{r(),o()}},[n]),()=>!r.isSubmitting&&!W(r))},exports.useCheckboxGroupContext=function(){const e=t.useContext(Kt);if(!e)throw new Error("no group provided");return e},exports.useDirtyFields=function(e){return xt(e,"change",re.bind(null,e))},exports.useError=function(e,t){return wt(e,y(t))?.message},exports.useErrorByPath=wt,exports.useErrors=function(e){return xt(e,"errors",()=>B(e))},exports.useErrorsTree=function(e){return xt(e,"errors",()=>R(e))},exports.useField=Lt,exports.useFieldArray=function(e){return Wt(e,_t)},exports.useFieldArrayItem=function(e){return zt(e,_t)},exports.useFieldErrors=function(e,t){return At(e,y(t))},exports.useFieldErrorsByPath=At,exports.useForm=bt,exports.useFormContext=function(){const e=t.useContext(_t);if(!e)throw new Error("no form provided");return e},exports.useFormError=function(e){return wt(e,y(F))?.message},exports.useFormErrors=function(e){return At(e,y(F))},exports.useFormState=function(r){const n=t.useCallback(()=>function(e){return{isDirty:Z(e),dirtyFields:re(e),isTouched:e.touched.size>0,touchedFields:se(e),hasErrors:W(e),isValid:!W(e),errors:B(e),isSubmitting:e.isSubmitting,isSubmitted:e.isSubmitted,isValidating:e.validating.size>0,isSubmitSuccessful:e.isSubmitSuccessful,submitCount:e.submitCount,isLoading:e.isLoading,disabled:e.disabled}}(r),[r]);return kt(t.useCallback(t=>{const n=Ct.map(n=>e.on(r.emitter,n,t));return()=>{for(const e of n)e()}},[r.emitter]),n,Ot)},exports.useHasErrors=function(e){return xt(e,"errors",W.bind(null,e))},exports.useIsDirty=function(e){return xt(e,"change",Z.bind(null,e))},exports.useIsFieldDirty=function(e,t){return Et(e,y(t))},exports.useIsFieldDirtyByPath=Et,exports.useIsLoading=function(e){return xt(e,"loading",()=>e.isLoading)},exports.useIsSubmitSuccessful=function(e){return xt(e.emitter,"submitSuccessful",()=>!!e.isSubmitSuccessful)},exports.useIsSubmitting=function(e){return xt(e,"submitting",()=>e.isSubmitting)},exports.useIsValid=function(e){return xt(e,"errors",()=>!W(e))},exports.useIsValidating=function(e){return xt(e,"validating",()=>e.validating.size>0)},exports.useStatus=function(e){return xt(e,"status",()=>e.status)},exports.useStore=function(r,n,o){return kt(t.useCallback(t=>{const n=Ct.map(n=>e.on(r.emitter,n,t));return()=>{for(const e of n)e()}},[r.emitter]),n,o)},exports.useSubmitCount=function(e){return xt(e,"submitCount",()=>e.submitCount)},exports.useTouched=function(e,t){return St(e,y(t))},exports.useTouchedByPath=St,exports.useTouchedFields=function(e){return xt(e,"touched",se.bind(null,e))},exports.useTransform=function(e,r,n={}){const o=Ft(r),{toDisplay:s,fromDisplay:i,asyncDebounceMs:u}=n,a=kt(t.useCallback(t=>vt(e.emitter,"change",y(JSON.parse(o.key)),"leaf",t),[e.emitter,o.key]),()=>ae(e,o)),c=s?s(a):a,l=t.useRef(null),f=t.useRef(0),m=t.useRef(i);m.current=i;const p=t.useRef(u??0);return p.current=u??0,t.useEffect(()=>()=>{null!==l.current&&clearTimeout(l.current)},[]),{value:c,onChange:t.useCallback(t=>{const r=()=>{const r=++f.current,n=m.current,s=t=>Ue(e,o,t);if(!n)return void s(t);const i=n(t);d(i)?i.then(e=>{f.current===r&&s(e)}):f.current===r&&s(i)};null!==l.current&&clearTimeout(l.current),l.current=null,p.current>0?l.current=setTimeout(r,p.current):r()},[e,o])}},exports.useValue=function(e,t,r){return Vt(e,y(t),r)},exports.useValueByPath=Vt,exports.useValues=function(e){return xt(e,"change",()=>ie(e))},exports.useWatch=xt,exports.useWatchCore=kt,exports.userBlur=We,exports.userChangeByPath=Ue,exports.validate=Le,exports.watch=function(t,r,n,o){const s={hasValue:!1},i=new Set,u=e.on(t.emitter,r,()=>{if(o&&s.hasValue){const e=n();if(o(s.value,e))return;s.value=e}else s.value=n(),s.hasValue=!0;i.forEach(e=>e())});return{getSnapshot:()=>(s.hasValue||(s.value=n(),s.hasValue=!0),s.value),subscribe:e=>(i.add(e),()=>{i.delete(e)}),dispose:()=>{u(),i.clear()}}};
1
+ "use strict";var e=require("@for-fun/event-emitter"),t=require("react");function r(e){var t=Object.create(null);return e&&Object.keys(e).forEach(function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}}),t.default=e,Object.freeze(t)}var n=r(t);const o=new Map;function s(e){if(Array.isArray(e))return e;const t=o.get(e);if(t)return t;const r=function(e){const t=[];let r="";const n=()=>{if(i(r)){const n=[...t.map(String),r].join("."),o=t.reduce((e,t)=>e+("number"==typeof t?`[${t}]`:`${e?".":""}${t}`),"");throw new TypeError(`Numeric path segment must use bracket notation: "${n}" → "${o}[${r}]" (path: ${e})`)}t.push(r),r=""};for(let o=0;o<e.length;o++){const s=e[o];if("."===s)""!==r&&n();else if("["===s){""!==r&&n();const s=e[o+1];if('"'===s||"'"===s){const r=e.indexOf(s,o+2);if(-1===r)throw new TypeError(`Unterminated quote in path: ${e}`);if("]"!==e[r+1])throw new TypeError(`Expected "]" after quoted segment in path: ${e}`);t.push(e.slice(o+2,r)),o=r+1}else{const r=e.indexOf("]",o+1);if(-1===r)throw new TypeError(`Unterminated bracket in path: ${e}`);const n=e.slice(o+1,r);t.push(i(n)?Number(n):n),o=r}}else r+=s}""===r&&0!==t.length||n();return t}(e);if(o.size>=1e4){const e=o.keys().next();e.done||o.delete(e.value)}return o.set(e,r),r}const i=e=>/^-?\d+$/.test(e);function u(e,t){return t.reduce((e,t)=>{if(null!=e)return e[t]},e)}function a(e,t){if(!t.length||null==e)return e;const[r,...n]=t;if(n.length){const t=a(e[r],n);return t===e[r]?e:d(e,[r],t)}if(Array.isArray(e)){if(!(r in e))return e;const t=e.slice();return delete t[r],t}if("object"!=typeof e||!(r in e))return e;const o={...e};return delete o[r],o}function c(e,t){return"number"==typeof t?t:Array.isArray(e)&&"string"==typeof t&&i(t)?Number(t):void 0}function l(e,t){return void 0!==c(e,t)?Array.isArray(e)?e.slice():[]:{...e}}function f(e,t,r){if(r.has(e))return e;const n=l(e,t);return r.add(n),n}function d(e,t,r){if(!t.length)return r;const[n,...o]=t,s=c(e,n);if(void 0!==s){const t=l(e,n);return t[s]=d(t[s],o,r),t}return{...e,[n]:d(e&&e[n],o,r)}}function m(e,t,r,n){if(!t.length)return r;let o=e,s=null,i="";for(let u=0;u<t.length;u++){const a=t[u],c=f(o,a,n);c!==o&&(0===u?e=c:s[i]=c,o=c),u===t.length-1?o[a]=r:(s=o,i=a,o=o[a])}return e}function p(e){return e&&"function"==typeof e.then}function y(e,t){return e??(e=>function(e,t){const r=e?.target;return r?"file"===r.type?r.files:"checkbox"===r.type?r.checked:t?.valueAsNumber?r.valueAsNumber:t?.valueAsDate?r.valueAsDate:r.value:e}(e,t))}function v(e,t){if(Object.is(e,t))return!0;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(!e||!t||"object"!=typeof e||"object"!=typeof t)return!1;const r=Array.isArray(e);if(r!==Array.isArray(t))return!1;if(r){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(!v(e[r],t[r]))return!1;return!0}const n=Object.getPrototypeOf(e);if(n!==Object.prototype&&null!==n)return!1;if(Object.getPrototypeOf(t)!==n)return!1;const o=Object.keys(e),s=Object.keys(t);if(o.length!==s.length)return!1;for(const r of o)if(!v(e[r],t[r]))return!1;return!0}function h(t,r,n,o){return new Promise((s,i)=>{if(o())return void i();if(n())return void s();const u=e.on(t,r,()=>{if(o())return u(),void i();n()&&(u(),s())})})}function g(e){const t=s(e);return{value:t,key:JSON.stringify(t)}}function b(e){return JSON.parse(e)}function k(e,t,r){if(e.has(t))return e.get(t);const n=r();return e.set(t,n),n}const x=new WeakMap;function V(e,t){const r=e.get(t);r&&r.version++}function E(e){V(x,e)}const S=new WeakMap;function w(e){V(S,e)}const A=new WeakMap;function C(e,t,r){const n=A.get(e);return n?.has(t)?n.get(t):u(e.initialValues,r)}function F(e,{key:t},r){k(A,e,()=>new Map).set(t,r)}function O(e,{key:t}){const r=A.get(e);if(!r?.size)return;const n=`${t.slice(0,-1)},`;for(const e of r.keys())e.startsWith(n)&&r.delete(e)}function M(e,t){const r=A.get(e);r&&(void 0===t?r.clear():r.delete(t))}const D=new WeakMap;function P(e){V(D,e)}function T(e){return e.some(e=>"number"==typeof e)}function j(e){return!!e&&"object"==typeof e&&"string"==typeof e.type&&"string"==typeof e.message}const B="_form",R=Symbol("validation-outcome");function N({errors:e},t){return e.get(t.key)?.[0]}const $=[];function I({errors:e},t){return e.get(t.key)??$}function q({errors:e}){const t=[];for(const[r,n]of e){const e=b(r).join(".");for(const{type:r,message:o}of n)t.push({path:e,type:r,message:o})}return t}function L(e){const t=S.get(e);if(0===t?.version)return;const r={},n={};for(const[t,o]of e.errors){const e=b(t);r[e.join(".")]=o;let s=n;for(let t=0;t<e.length-1;t++){const r=e[t],n=s[r],o=!n||Array.isArray(n)&&n.length>0&&j(n[0])?"number"==typeof e[t+1]?[]:{}:n;s[r]=o,s=o}s[e[e.length-1]]=o}t?(t.result=r,t.tree=n,t.version=0):S.set(e,{version:0,result:r,tree:n})}function U(e){return L(e),S.get(e).result}function W(e){return L(e),S.get(e).tree}function z(e){const t=e.split(".");return t.map((e,t)=>t>0&&(e=>/^(0|[1-9]\d*)$/.test(e))(e)?`[${e}]`:`${t>0?".":""}${e}`).join("")}function _({errors:e}){return e.values().next().value?.[0]?.message}function J(e,t,r,n){K(e,g(t),r,n)}function K(t,r,n,o){const{emitter:s,errors:i}=t,u=function(e){if("string"==typeof e)return e?[{type:"custom",message:e}]:void 0;if(j(e))return[e];if(!e)return;const t=[];return e.forEach(e=>{"string"==typeof e&&e?t.push({type:"custom",message:e}):j(e)&&t.push(e)}),t.length?t:void 0}(n);u?i.set(r.key,u):i.delete(r.key),w(t),e.emit(s,"errors",r),o?.shouldFocus&&e.emit(s,"focusError",r.key)}function G(t,r){const{emitter:n,errors:o}=t;if(void 0===r)return o.clear(),w(t),void e.emit(n,"errors");const s="string"==typeof r||T(r)?[g(r)]:r.map(e=>g(e));for(const{key:e}of s)o.delete(e);w(t);for(const t of s)e.emit(n,"errors",t)}function H(e,t,r){r?.keepExisting||G(e);for(const[r,n]of Object.entries(t))J(e,r,(Array.isArray(n)?n:[n]).map(e=>({type:"server",message:e})))}function Q(t){const r=Array.from(t.errors).filter(([,e])=>e.some(e=>"server"===e.type));if(0!==r.length){for(const[e,n]of r){const r=n.filter(e=>"server"!==e.type);r.length?t.errors.set(e,r):t.errors.delete(e)}w(t),e.emit(t.emitter,"errors")}}function X({errors:e}){return e.size>0}function Y(e){return!!e&&"object"==typeof e&&"function"==typeof e["~standard"]?.validate}function Z(e){return{type:"standard",message:e?.message||"Validation failed"}}function ee(e){return async t=>{const r=await e["~standard"].validate(t);if(r.issues?.length)return r.issues.map(Z)}}function te(e){return(e.path||[]).map(e=>String("object"==typeof e&&null!==e?e.key:e))}function re(e,t,r){let n=e;for(let e=0;e<t.length-1;e++){const r=t[e];void 0===n[r]&&(n[r]={});const o=n[r];if(!ne(o))return;n=o}const o=t[t.length-1],s=n[o];void 0===s?n[o]=[r]:Array.isArray(s)&&s.push(r)}function ne(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}function oe(e){const t={};for(const[r,n]of Object.entries(e))if(ne(n)){const e=oe(n);e&&(t[r]=e)}else t[r]=n;return Object.keys(t).length?t:void 0}function se(e,t){const r=e.values.get(t.key);return e.values.has(t.key)&&C(e,t.key,t.value)!==r}function ie(e){for(const[t,r]of e.values){if(C(e,t,b(t))!==r)return!0}return!1}function ue(e){const t={};return function(e,t){for(const[r,n]of e.values){const o=b(r);C(e,r,o)!==n&&t(o.join("."))}}(e,e=>{t[e]=!0}),t}function ae(e){const t=k(D,e,()=>({version:0,result:ue(e)}));if(t.version>0){const r=ue(e);(function(e,t){const r=Object.keys(e);return r.length===Object.keys(t).length&&r.every(e=>!0===t[e])})(t.result,r)||(t.result=r),t.version=0}return t.result}function ce({emitter:t,touched:r},n){r.has(n.key)||(r.add(n.key),e.emit(t,"touched",n))}function le({touched:e},t){return e.has(t.key)}function fe({touched:e}){return Array.from(e,e=>b(e).join("."))}function de(e){const t=k(x,e,()=>({version:0,result:me(e)}));return t.version>0&&(t.result=me(e),t.version=0),t.result}function me(e){const{initialValues:t,parsedValues:r,values:n,deleted:o}=e,s=new Set;let i=r??t;for(const[e,t]of n)i=m(i,b(e),t,s);for(const e of o)i=a(i,b(e));return i}function pe({initialValues:e,parsedValues:t,values:r,deleted:n},o){const{key:s,value:i}=o;if(r.has(s))return r.get(s);if(!n.has(s)){for(let e=i.length-1;e>0;e--){const t=JSON.stringify(i.slice(0,e));if(r.has(t))return u(r.get(t),i.slice(e))}return u(t??e,i)}}function ye(t,r,n,o){const{emitter:s,values:i,deleted:u}=t,a="function"==typeof n?n(pe(t,r)):n;i.set(r.key,a),be(i,r),ke(u,r),O(t,r),!1===o?.shouldDirty&&F(t,r,a),P(t),E(t),o?.shouldTouch&&ce(t,r),o?.shouldValidate&&t.validators.get(r.key)?.(),e.emit(s,"change",r)}function ve(e,t,r){const{values:n,deleted:o}=e;n.set(t.key,r),be(n,t),ke(o,t),O(e,t),P(e),E(e)}function he({emitter:t},r){e.emit(t,"change",r)}function ge(t,r,n){const{key:o,value:s}=r,{emitter:i,values:u,touched:a,errors:c,validating:l,deleted:f}=t;n?.keepValue||n?.keepDirty||(u.delete(o),M(t,o),function(e,t){for(let r=1;r<t.length;r++)if(e.has(JSON.stringify(t.slice(0,r))))return!0;const r=`${JSON.stringify(t).slice(0,-1)},`;for(const t of e.keys())if(t.startsWith(r))return!0;return!1}(u,s)||f.add(o)),n?.keepTouched||a.delete(o),!n?.keepError&&c.delete(o)&&w(t),l.delete(o),P(t),E(t),e.emit(i,"change",r),e.emit(i,"touched",r),e.emit(i,"errors",r),e.emit(i,"validating",r)}function be(e,{key:t}){if(!e.size)return;const r=`${t.slice(0,-1)},`;for(const t of e.keys())t.startsWith(r)&&e.delete(t)}function ke(e,{key:t}){if(e.size)for(const r of e)(r===t||r.startsWith(`${t.slice(0,-1)},`)||t.startsWith(`${r.slice(0,-1)},`))&&e.delete(r)}function xe(t,r){t.initialValues===r||v(t.initialValues,r)||(t.initialValues=r,t.parsedValues=void 0,t.values.clear(),t.deleted.clear(),M(t),P(t),E(t),e.emit(t.emitter,"change"))}function Ve(e,t,r){if(null!==e&&"object"==typeof e){if(Array.isArray(e))return void e.forEach((e,n)=>Ve(e,[...t,n],r));const n=Object.keys(e);if(n.length>0){for(const o of n)Ve(e[o],[...t,o],r);return}}r.push({segments:t,value:e})}function Ee(e,t){const r=[];if(t?.keepValues)Ve(de(e),[],r);else if(t?.keepDirtyValues)for(const[t,n]of e.values){const o=b(t);C(e,t,o)!==n&&r.push({segments:o,value:n})}return r}function Se(t,r,n){const o=Ee(t,n);t.initialValues=n?.keepDefaultValues?t.initialValues:r??t.initialValues,t.parsedValues=void 0,n?.keepErrors||G(t);const{emitter:s,touched:i,values:u,deleted:a,validating:c}=t;u.clear(),a.clear(),M(t),n?.keepTouched||i.clear(),c.clear(),n?.keepIsSubmitting||(t.isSubmitting=!1),n?.keepSubmitCount||(t.submitCount=0),n?.keepIsSubmitted||(t.isSubmitted=!1),n?.keepIsSubmitSuccessful||(t.isSubmitSuccessful=void 0),P(t),E(t);for(const{segments:e,value:r}of o)ye(t,g(e),r);e.emit(s,"change"),e.emit(s,"touched"),e.emit(s,"validating"),e.emit(s,"submitting"),e.emit(s,"submitCount"),e.emit(s,"submitSuccessful"),e.emit(s,"reset")}function we({emitter:t,validating:r},n){r.delete(n.key),e.emit(t,"validating",n)}function Ae({emitter:t,validating:r},n){r.add(n.key),e.emit(t,"validating",n)}function Ce(e){if(void 0===e)return null;const t=Array.isArray(e)?e:[e];return t.length?t:null}function Fe(e,t,r){let n=null,o=null,s=!1,i=null,u=null;const a=()=>{s||(s=!0,Ae(e,t))},c=()=>{s&&(s=!1,we(e,t))},l=n=>{if(r.asyncAlways?.()){const o=(()=>{const n=r.sync();return n?Ce(n(pe(e,t),{form:e,path:t})):null})(),s=Ce(n)??[];K(e,t,[...o??[],...s]),u=s.length?"validator":o?"sync":null}else K(e,t,n),u=Ce(n)?"validator":null},f=()=>{null!==n&&(clearTimeout(n),n=null),o?.abort(),i={},c()},d=()=>{const n=r.validate();if(!n)return void c();o?.abort(),o=new AbortController;const s=i={};let u;try{u=n(pe(e,t),{form:e,path:t,signal:o.signal})}catch(e){throw c(),e}if(!p(u))return l(u),void c();a(),u.then(e=>{i===s&&l(e)}).catch(()=>{}).finally(()=>{i===s&&(c(),i=null)})},m=()=>!(!(()=>{const n=r.sync();if(!n)return!1;const o=Ce(n(pe(e,t),{form:e,path:t}));return o?(K(e,t,o),u="sync",!0):(r.validate()&&"sync"!==u||(K(e,t,void 0),u=null),!1)})()||r.asyncAlways?.())&&(f(),!0),y=()=>{n=null,m()||d()};return e.validators.set(t.key,()=>{if(m())return;if(!r.validate())return;const e=r.debounce();if(e>0)return null!==n?clearTimeout(n):a(),void(n=setTimeout(y,e));d()}),()=>{e.validators.delete(t.key),f()}}function Oe(e,t){t.forEach(t=>ce(e,g(b(t))))}function Me(e,t,r=[],n){Object.entries(t).forEach(([t,o])=>{const u=[...r,...i(t)?[t]:s(t)];"string"==typeof o?o&&De(e,u,o,n):Array.isArray(o)||j(o)?De(e,u,o,n):o&&"object"==typeof o&&Me(e,o,u,n)})}function De(e,t,r,n){J(e,t,r),function(e,t,r){if(!r)return;const n=g(t),o=e.errors.get(n.key);o&&r.set(n.key,o)}(e,t,n)}function Pe(t,r){const n=t.validateDeps||"onSubmit"!==t.validateMode?function(e){return k(Te,e,()=>new Map)}(t):void 0;if(n&&(!function(t,r){for(const[n,o]of r){t.errors.get(n)===o&&(t.errors.delete(n),w(t),e.emit(t.emitter,"errors",g(b(n))))}}(t,n),n.clear()),r){if("object"==typeof r&&R in r){const o=r;return o.errors&&Me(t,o.errors,[],n),void function(t,r){void 0!==r&&r!==t.parsedValues&&(t.parsedValues=r,E(t),e.emit(t.emitter,"change"))}(t,o.values)}Me(t,r,[],n)}}const Te=new WeakMap;const je="__form_validate__";function Be(e){for(const t of e.validating)if(t!==je)return!1;return!0}const Re=Symbol("form-validate-settled"),Ne=new WeakMap;function $e(t){const r=t.validate;if(!r)return Promise.resolve();const n=t.validateDebounce??0;if(n<=0){const e=new AbortController;return Promise.resolve(r(de(t),{form:t,signal:e.signal})).then(e=>{Pe(t,e)})}const o=function(e){return k(Ne,e,()=>({timer:null,controller:null,round:null,marked:!1,waiters:[]}))}(t);return null!==o.timer?clearTimeout(o.timer):(o.marked=!0,t.validating.add(je),e.emit(t.emitter,"validating")),o.timer=setTimeout(()=>{o.timer=null;const e=o.round={};(function(e,t,r){const n=e.validate;if(!n)return Promise.resolve();t.controller?.abort();const o=t.controller=new AbortController,s=new Promise(t=>t(n(de(e),{form:e,signal:o.signal})));return s.then(n=>{t.round===r&&Pe(e,n)},e=>{if(t.round===r)throw e})})(t,o,e).then(()=>Ie(t,o,e,Re),r=>Ie(t,o,e,r))},n),new Promise((e,t)=>{o.waiters.push({resolve:e,reject:t})})}function Ie(t,r,n,o){if(r.round!==n)return;if(r.round=null,null!==r.timer)return;r.marked&&(r.marked=!1,t.validating.delete(je),e.emit(t.emitter,"validating"));const s=r.waiters;r.waiters=[];for(const e of s)o===Re?e.resolve():e.reject(o)}function qe(e,t,r,n,o){return e===t||"all"===e||"onTouched"===e&&r||o===t&&n()}function Le(e,t,r){e.validateDeps?.has(t.key)&&e.validate&&qe(r,"onChange",le(e,t),()=>function(e){const t=Te.get(e);if(!t)return!1;for(const[r,n]of t)if(e.errors.get(r)===n)return!0;return!1}(e),e.reValidateMode)&&$e(e).catch(()=>{})}const Ue=new WeakMap;function We(e,t,r){const n=k(Ue,e,()=>new Map);for(const e of r){const r=n.get(e)??new Set;r.add(t),n.set(e,r)}}function ze(e,t,r){const n=Ue.get(e);if(n)for(const e of r){const r=n.get(e);r?.delete(t)&&(r.size||n.delete(e))}}function _e(e,t,r){const n=Ue.get(e)?.get(t.key);if(n?.size)for(const o of n)o!==t.key&&qe(r,"onChange",le(e,t),()=>e.errors.has(o),e.reValidateMode)&&e.validators.get(o)?.()}function Je(e){const t=new Error(_(e));return t.errors=q(e),t}async function Ke(e){if(e.validators.forEach(e=>e()),await h(e.emitter,"validating",()=>Be(e),()=>X(e)).catch(()=>{throw Je(e)}),e.validate&&(await $e(e),X(e)))throw Je(e)}async function Ge(e){return Ke(e).catch(e=>e.message)}const He=new WeakMap;function Qe(e,t,r,n){!1===n?.shouldDirty&&F(e,t,r),He.get(e)?.get(t.key)?rt(e,t,r):ye(e,t,r,n)}function Xe(e,t,r){const n=k(He,e,()=>new Map),o=n.has(t.key),s={};return n.set(t.key,{mode:r,token:s}),{token:s,displaced:o}}function Ye(e,t,r){const n=He.get(e),o=n?.get(t.key);n&&o&&o.token===r&&n.delete(t.key)}function Ze(e,t){const r=`${t.key.slice(0,-1)},`;for(const t of He.get(e)?.keys()??[])if(t.startsWith(r))return t}function et(e,t){e.validateMode===t&&e.validate&&$e(e).catch(()=>{})}function tt(e,t,r,n,o){qe(r,n,o,()=>I(e,t).length>0,e.reValidateMode)&&e.validators.get(t.key)?.()}function rt(e,t,r){ye(e,t,r);const n=He.get(e)?.get(t.key);n&&function(e,t,r){tt(e,t,r,"onChange",le(e,t)),Le(e,t,r),et(e,"onChange"),_e(e,t,r)}(e,t,n.mode??e.mode)}function nt(e,t){ce(e,t);const r=He.get(e)?.get(t.key);r&&(tt(e,t,r.mode??e.mode,"onBlur",!0),et(e,"onBlur"))}function ot(e,t){const{key:r}=t,n={present:e.values.has(r),value:e.values.get(r),touched:e.touched.has(r),errors:e.errors.get(r)};return ge(e,t),n}function st(t,r,n){const{key:o}=r;n.present?ye(t,r,n.value,{shouldDirty:!1}):(t.deleted.delete(o),E(t),e.emit(t.emitter,"change",r)),n.touched&&ce(t,r),n.errors&&K(t,r,n.errors)}function it(e){return void 0!==e.required||void 0!==e.min||void 0!==e.max||void 0!==e.minLength||void 0!==e.maxLength||void 0!==e.pattern||void 0!==e.validate}function ut(e,t){switch(e){case"required":return"This field is required";case"min":return`Must be at least ${t}`;case"max":return`Must be at most ${t}`;case"minLength":return`Must be at least ${t} characters`;case"maxLength":return`Must be at most ${t} characters`;case"pattern":return"Invalid format";default:return"Invalid value"}}function at(e,t){return"function"==typeof e?e(t):e?.replace("{bound}",String(t))}function ct(e){const t=Number(e);return Number.isNaN(t)?void 0:t}function lt(e){return"string"==typeof e||Array.isArray(e)?e.length:void 0}const ft=[["min",ct,(e,t)=>e<t],["max",ct,(e,t)=>e>t],["minLength",lt,(e,t)=>e<t],["maxLength",lt,(e,t)=>e>t]];function dt(e,t){return(r,n)=>{if(e.required&&(""===r||null==r||Array.isArray(r)&&0===r.length))return[{type:"required",message:"string"==typeof e.required?e.required:at(t?.required)??ut("required")}];const o=[],s=(r,n)=>e.messages?.[r]??at(t?.[r],n)??ut(r,n);for(const[t,n,i]of ft){const u=e[t];if(void 0===u)continue;const a=n(r);void 0!==a&&i(a,u)&&o.push({type:t,message:s(t,u)})}if(e.pattern&&!e.pattern.value.test(r)&&o.push({type:"pattern",message:e.messages?.pattern??e.pattern.message??at(t?.pattern)??ut("pattern")}),void 0!==e.validate){const t="function"==typeof e.validate?{validate:e.validate}:e.validate;for(const[e,s]of Object.entries(t)){const t=s(r,n);if(void 0!==t)for(const r of Array.isArray(t)?t:[t])o.push("string"==typeof r?{type:e,message:r}:{...r,type:e})}}return o.length?o:void 0}}function mt(t,r,n){const o=g(r),{mode:s,shouldUnregister:i,eventToValue:u,valueAsNumber:a,valueAsDate:c,rules:l}=n??{},f=u??(e=>{const t=e?.target;return t?"file"===t.type?t.files:"checkbox"===t.type?t.checked:a?t.valueAsNumber:c?t.valueAsDate:t.value:e});let d=null,m=null,p=null,y=null,v=null,h=null;const b=r=>{if(y&&(st(t,o,y),y=null),d=r,"file"!==r.type&&void 0===pe(t,o)&&(ve(t,o,"checkbox"===r.type?r.checked:r.value),he(t,o)),m=Xe(t,o,s).token,l&&it(l)){const{required:e,...r}=l,n=void 0!==e?dt({required:e},t.messages):void 0;p=Fe(t,o,{validate:()=>it(r)?dt(r,t.messages):void 0,debounce:()=>0,sync:()=>n})}v=e.on(t.emitter,"focusError",(e,t)=>{e===o.key&&d&&"function"==typeof d.focus&&(d.focus(),t?.shouldSelect&&"function"==typeof d.select&&d.select())}),h=e.on(t.emitter,"change",e=>{e||(()=>{if(!d||"file"===d.type)return;const e=pe(t,o),r=null==e?"":String(e);d.value!==r&&(d.value=r)})()})};return{name:o.key,onChange:e=>Qe(t,o,f(e)),onBlur:()=>nt(t,o),ref:e=>{e?b(e):(m&&(Ye(t,o,m),m=null),p&&(p(),p=null),v&&(v(),v=null),h&&(h(),h=null),d=null,!1!==(i??t.shouldUnregister)&&(y=ot(t,o)))}}}function pt(e,t){const r=pe(e,t);return Array.isArray(r)?r:[]}function yt(e,t,r){ye(e,t,[...pt(e,t),r])}function vt(e,t,r){ye(e,t,[r,...pt(e,t)])}function ht(e,t,r,n){const o=pt(e,t);return!(r<0||r>o.length)&&(ye(e,t,[...o.slice(0,r),n,...o.slice(r)]),!0)}function gt(e,t,r){const n=pt(e,t),o=new Set;for(const e of Array.isArray(r)?r:[r])e>=0&&e<n.length&&o.add(e);if(0===o.size)return[];const s=[...o].sort((e,t)=>t-e);return ye(e,t,n.filter((e,t)=>!o.has(t))),s}function bt(e,t,r,n){const o=pt(e,t);if(r<0||r>=o.length||n<0||n>=o.length)return!1;if(r===n)return!1;const s=[...o],[i]=s.splice(r,1);return s.splice(n,0,i),ye(e,t,s),!0}function kt(e,t,r,n){const o=pt(e,t);if(r<0||r>=o.length||n<0||n>=o.length)return!1;if(r===n)return!1;const s=[...o];return[s[r],s[n]]=[s[n],s[r]],ye(e,t,s),!0}function xt(e,t,r){ye(e,t,[...r])}function Vt(e,t,r,n){const o=pt(e,t);if(r<0||r>=o.length)return!1;const s=[...o];return s[r]=n,ye(e,t,s),!0}function Et(t,r){t.isSubmitting=r,e.emit(t.emitter,"submitting")}function St(t){t.submitCount++,e.emit(t.emitter,"submitCount")}function wt(t,r){t.isSubmitSuccessful=r,e.emit(t.emitter,"submitSuccessful")}function At(t,r){t.disabled=r,e.emit(t.emitter,"disabled")}function Ct(e){if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.join(".")}catch{}return e}function Ft(t,r){const{onSubmit:n,onValidSubmit:o,onInvalidSubmit:s,onAction:i,shouldFocusError:u=!0,shouldUseNativeValidation:a=t.shouldUseNativeValidation}=r??{};return async r=>{r&&"function"==typeof r.preventDefault&&r.preventDefault();const c=r?.currentTarget;if(t.isSubmitting)return;Q(t),t.isSubmitted=!0,Et(t,!0),St(t);const l=de(t);if(a&&c&&"function"==typeof c.checkValidity&&!1===c.checkValidity()){if(c.reportValidity(),u&&"function"==typeof c.querySelector){const e=c.querySelector(":invalid");e&&"function"==typeof e.focus&&e.focus()}return Et(t,!1),wt(t,!1),void(s&&s(function(e){const t=[];for(const r of e.elements)r.name&&"function"==typeof r.checkValidity&&!r.checkValidity()&&t.push({path:Ct(r.name),type:"native",message:r.validationMessage});return t}(c),l))}if(await Ge(t)){if(Et(t,!1),wt(t,!1),u){const r=t.errors.keys().next().value;void 0!==r&&e.emit(t.emitter,"focusError",r)}s&&s(q(t),l)}else try{const e=de(t);if(n&&await n(e,r),o&&await o(e,r),i){const n=await i(e,r);if(n&&"object"==typeof n&&void 0!==n.errors&&"object"==typeof n.errors)return H(t,n.errors),void wt(t,!1)}wt(t,!0)}catch{wt(t,!1)}finally{Et(t,!1)}}}function Ot(t,r,n){const{key:o}=g(r);n?e.emit(t.emitter,"focusError",o,n):e.emit(t.emitter,"focusError",o)}function Mt(t){const r=e.create();e.setMaxListeners(r,0);const n=t?.initialValues??{},o="function"==typeof n?n():n,s=t?.validate,i=s&&Y(s)?(u=s,async e=>{const t=await u["~standard"].validate(e),{issues:r}=t;if(!r?.length)return{[R]:!0,values:"value"in t?t.value:void 0};const n={};for(const e of r){const t=te(e);if(t.length)re(n,t,Z(e));else{const t=n[B]??=[];Array.isArray(t)&&t.push(Z(e))}}return{[R]:!0,errors:oe(n)||{}}}):s;var u;const a={emitter:r,...t,validate:i,mode:t?.mode??"onSubmit",reValidateMode:t?.reValidateMode??"onChange",validateMode:t?.validateMode??"onSubmit",disabled:t?.disabled??!1,validateOnMount:t?.validateOnMount??!1,asyncAlways:t?.asyncAlways??!1,shouldUseNativeValidation:t?.shouldUseNativeValidation??!0,validateDeps:t?.validateDeps?new Set(t.validateDeps.map(e=>g(e).key)):void 0,initialValues:{},values:new Map,deleted:new Set,errors:new Map,touched:new Set,validators:new Map,validating:new Set,parsedValues:void 0,isSubmitting:!1,isSubmitted:!1,submitCount:0,isSubmitSuccessful:void 0,isLoading:!1,status:void 0,register:(e,t)=>mt(a,e,t)};return function(t,r,n){p(n)?(t.isLoading=!0,e.emit(r,"loading"),Promise.resolve(n).then(n=>{xe(t,n??{}),t.isLoading=!1,e.emit(r,"loading")},n=>{t.isLoading=!1,e.emit(r,"loading")})):t.initialValues=n}(a,r,o),a}function Dt(e){return e.replace(/["'[\],\s]+/g,"-").replace(/^-+|-+$/g,"")||"field"}function Pt(e){return Dt(g(e).key)}const Tt=new WeakMap;function jt(e,t){return e.startsWith(`${t.slice(0,-1)},`)}function Bt(t,r,n,o,s){const{key:i}=n;return e.on(t,r,e=>{(void 0===e||e.key===i||jt(i,e.key)||"branch"===o&&jt(e.key,i))&&s()})}function Rt(t,r,n,o){return e.on(t,r,e=>{void 0!==e&&e.key!==n||o()})}function Nt(e){return g(b(e))}function $t(e){const r=t.useMemo(()=>g(s(e)).key,[e]);return t.useMemo(()=>Nt(r),[r])}function It(e,t,r,n){t.done&&(t.source===r||v(t.source,r))||(t.done=!0,t.source=r,void 0!==n?Se(e,r,n):xe(e,r))}function qt(r){const[n]=t.useState(()=>{const e=Mt(r);return r&&void 0!==r.values&&xe(e,r.values),e}),o=r&&r.initialValues,s=r&&r.values,i=r&&r.resetOptions,u=t.useRef(null);null===u.current&&(u.current={done:!1,source:void 0}),t.useEffect(()=>{void 0!==o&&("function"==typeof o||p(o)||It(n,u.current,o))},[n,o]);const a=t.useRef(null);return null===a.current&&(a.current={done:!1,source:void 0}),t.useEffect(()=>{void 0!==s&&It(n,a.current,s,i)},[n,s,i]),t.useEffect(()=>{if(!n.validateOnMount||!n.validate)return;const t=()=>{$e(n).catch(()=>{})};if(n.isLoading)return e.on(n.emitter,"loading",()=>{t()});t()},[n]),n}function Lt(e,r,n){const o=t.useRef(null);null===o.current&&(o.current={hasValue:!1});const s=o.current,i=t.useRef(r);i.current=r;const u=t.useRef(n);u.current=n;const a=t.useCallback(()=>(s.hasValue||(s.value=i.current(),s.hasValue=!0),s.value),[s]),c=t.useCallback(t=>{s.hasValue=!1;return e(()=>{const e=u.current;if(e&&s.hasValue){const r=i.current();if(e(s.value,r))return;return s.value=r,void t()}s.hasValue=!1,t()})},[e,s]);return t.useSyncExternalStore(c,a,a)}function Ut(r,n,o,s){const i="emitter"in r?r.emitter:r;return Lt(t.useCallback(t=>e.on(i,n,t),[i,n]),o,s)}function Wt(e,r,n){const{emitter:o}=e,{key:s}=r,i=!1===n?.exact?"branch":"leaf";return Lt(t.useCallback(e=>Bt(o,"change",Nt(s),i,e),[o,s,i]),()=>{if(!1===n?.exact)return u(de(e),r.value);const t=pe(e,r);return void 0===t?n?.defaultValue:t})}function zt(e,r,n,o){const{emitter:s}=e,{key:i}=r;return Lt(t.useCallback(e=>Rt(s,n,i,e),[s,n,i]),o)}function _t(e,t){return zt(e,t,"touched",le.bind(null,e,t))}function Jt(e,t){return zt(e,t,"errors",N.bind(null,e,t))}function Kt(e,t){return zt(e,t,"errors",I.bind(null,e,t))}function Gt(e,r){const{emitter:n}=e,{key:o}=r;return Lt(t.useCallback(e=>Bt(n,"change",Nt(o),"leaf",e),[n,o]),()=>se(e,r))}const Ht=["change","errors","touched","validating","submitting","submitCount","submitSuccessful","disabled","loading"];function Qt(t,r){const n=Ht.map(n=>e.on(t,n,r));return()=>{for(const e of n)e()}}function Xt(e,t){const r=e.touchedFields.length===t.touchedFields.length&&e.touchedFields.every((e,r)=>e===t.touchedFields[r]);return e.isDirty===t.isDirty&&e.dirtyFields===t.dirtyFields&&e.isTouched===t.isTouched&&r&&e.hasErrors===t.hasErrors&&e.isValid===t.isValid&&e.errors===t.errors&&e.isSubmitting===t.isSubmitting&&e.isSubmitted===t.isSubmitted&&e.isValidating===t.isValidating&&e.isSubmitSuccessful===t.isSubmitSuccessful&&e.submitCount===t.submitCount&&e.isLoading===t.isLoading&&e.disabled===t.disabled}function Yt(e){return Ut(e,"errors",()=>U(e))}function Zt(e){const r=t.useRef(e);return r.current=e,r}function er(e){const r=Zt(e);return t.useCallback((...e)=>r.current(...e),[r])}function tr(e,r,n){const o=t.useRef(null);!function(e,r){const n=t.useRef(!1),o=Zt(e),s=Zt(r);t.useEffect(()=>{const e=o.current,t=s.current;return n.current&&(n.current=!1,t()),()=>{n.current=!0,e()}},[n,o,s])}(er(()=>{!1!==(n??e.shouldUnregister)&&(o.current=ot(e,r))}),er(()=>{const t=o.current;o.current=null,t&&st(e,r,t)}))}function rr(e){return e&&Y(e)?ee(e):e}function nr(r,n,o,s){const i=t.useContext(hr),u=o||i;if(!u)throw new Error("no form provided");const a=Zt(rr(r)),c=Zt(s?.debounce??0),l=Zt(s?.sync),f=Zt(s?.asyncAlways??!1),d=Zt(s?.validateOnMount);return t.useEffect(()=>{const t=Nt(n.key),r=Fe(u,t,{validate:()=>a.current,debounce:()=>c.current,sync:()=>l.current,asyncAlways:()=>f.current});if(!(d.current??u.validateOnMount)||!a.current&&!l.current)return r;let o=!1;const s=()=>{o||u.validators.get(n.key)?.()};if(u.isLoading){const t=e.on(u.emitter,"loading",()=>{t(),s()})}else s();return()=>{o=!0,r()}},[u,n.key,c,l,f,a,d]),er(()=>u.validators.get(n.key)?.())}const or=new WeakMap;const sr=[];function ir(e,r,n){const o=t.useRef(!1),s=t.useRef(!1),i=t.useRef(null);return Lt(t.useCallback(t=>{const u=Nt(r.key),a=()=>{null!==i.current&&(clearTimeout(i.current),i.current=null)};o.current=!1,s.current=!1,a();const c=Rt(e.emitter,"errors",u.key,()=>{const r=I(e,u).length>0,c=s.current;s.current=r,void 0!==n&&(r?c&&!o.current||(a(),o.current=!0,i.current=setTimeout(()=>{i.current=null,o.current=!1,t()},n)):o.current&&(a(),o.current=!1)),t()});return()=>{c(),a()}},[e,r.key,n]),()=>void 0!==n&&o.current?sr:I(e,r))}function ur({form:r,name:n,initialValue:o,shouldUnregister:s,validate:i,rules:u,validateDebounce:a,validateDeps:c,validateOnMount:l,delayError:f,disabled:d,uncontrolled:m,asyncAlways:v,mode:h,eventToValue:b,valueAsNumber:x,valueAsDate:V,type:E},S){const w=t.useContext(S),A=r||w;if(!A)throw new Error("no form provided");const C=$t(n),F=t.useRef(!1);void 0!==o&&void 0===pe(A,C)&&(ve(A,C,o),F.current=!0),t.useEffect(()=>{F.current&&(F.current=!1,he(A,C))});nr(function(e,t,r){if(!e||!it(e))return t;const n=dt(e,r);return t?(e,r)=>{const o=n(e,r),s=e=>{const t=[...o??[]];return Array.isArray(e)?t.push(...e):e&&t.push(e),t.length?t:void 0},i=t(e,r);return p(i)?i.then(s):s(i)}:n}(u?{...u,required:void 0}:void 0,rr(i),A.messages),C,A,{debounce:a,validateOnMount:l,asyncAlways:v??A.asyncAlways,sync:u&&void 0!==u.required?dt({required:u.required},A.messages):void 0});const O=ir(A,C,f),M=O[0],D=M?.message,P=function(e,r,n){const o=t.useRef({has:!1,value:void 0}),s=t.useCallback(()=>n?(o.current.has||(o.current={has:!0,value:pe(e,r)}),o.current.value):pe(e,r),[n,e,r]);return Lt(t.useCallback(t=>n?()=>{}:Bt(e.emitter,"change",r,"leaf",t),[n,e.emitter,r]),s)}(A,C,!!m),T=Lt(t.useCallback(e=>m?()=>{}:Bt(A.emitter,"change",Nt(C.key),"leaf",e),[A.emitter,C.key,m]),()=>se(A,C)),j=Lt(t.useCallback(e=>Rt(A.emitter,"validating",C.key,e),[A.emitter,C.key]),()=>A.validating.has(C.key)),B=Lt(t.useCallback(e=>Bt(A.emitter,"disabled",Nt(C.key),"branch",e),[A.emitter,C.key]),()=>A.disabled||!0===d||!1!==d&&function(e,t){const r=Tt.get(e);if(!r?.size)return!1;const n=t.value;for(let e=1;e<n.length;e++){const t=JSON.stringify(n.slice(0,e));if(r.get(t)?.disabled)return!0}return!1}(A,C)),R=t.useRef(null);t.useEffect(()=>{const t=Nt(C.key),r=function(t,r,n){if(void 0===n)return null;const o={};return k(Tt,t,()=>new Map).set(r.key,{disabled:n,token:o}),e.emit(t.emitter,"disabled",r),{token:o}}(A,t,d);return r&&(R.current=r.token),()=>{null!==R.current&&(!function(t,r,n){const o=Tt.get(t),s=o?.get(r.key);o&&s&&s.token===n&&(o.delete(r.key),e.emit(t.emitter,"disabled",r))}(A,t,R.current),R.current=null)}},[A,C.key,d]);const N=er(e=>rt(A,C,e)),$=er(()=>nt(A,C));t.useEffect(()=>{const e=Nt(C.key),{token:t,displaced:r}=Xe(A,e,h);return()=>Ye(A,e,t)},[A,C.key,h]);const I=c?.length?c.join("\n"):void 0,q=Zt(c);t.useEffect(()=>{if(!I)return;const e=q.current.map(e=>g(e).key);return We(A,C.key,e),()=>ze(A,C.key,e)},[A,C.key,I,q]);const L=t.useRef(null),U=t.useCallback(e=>{L.current=e},[]);t.useEffect(()=>e.on(A.emitter,"focusError",(e,t)=>{if(e!==C.key)return;const r=L.current;r&&"function"==typeof r.focus&&(r.focus(),t?.shouldSelect&&"function"==typeof r.select&&r.select())}),[A,C.key]),t.useEffect(()=>{const t=Nt(C.key),r=function(t){const r=or.get(t);if(r)return r;const n=new Map,o=e.on(t.emitter,"change",e=>{if(!e)for(const e of n.values()){const{el:r,path:n}=e();if(!r||"file"===r.type)continue;const o=pe(t,n),s=null==o?"":String(o);r.value!==s&&(r.value=s)}}),s={cells:n,off:o};return or.set(t,s),s}(A);return r.cells.set(C.key,()=>({el:L.current,path:t})),()=>{r.cells.delete(C.key),0===r.cells.size&&(r.off(),or.delete(A))}},[A,C.key,m]),tr(A,C,s);const W=y(b,{valueAsNumber:x,valueAsDate:V}),z={name:C.key,ref:U,onChange:e=>N(W(e)),onBlur:$,disabled:B};return"checkbox"===E?z.checked=!!P:"file"!==E&&(m?z.defaultValue=P:z.value=P??""),D&&(z["aria-invalid"]=!0,z["aria-describedby"]=Dt(C.key)),{form:A,value:P,error:D,errorObject:M,errors:O,isDirty:T,validating:j,onChange:N,onBlur:$,name:C.key,disabled:B,focusRef:U,inputProps:z}}function ar(e){return ur(e,hr)}const cr=new WeakMap;function lr(e){const t=(cr.get(e)??0)+1;return cr.set(e,t),`_${t}`}const fr=new WeakMap;function dr(e,t,r){const n=fr.get(e)??new Map;n.set(t,r),fr.set(e,n)}function mr(t,r,n,o){const{focus:s}=o??{};void 0!==s&&setTimeout(()=>{const o=[...r.value,n],i="string"==typeof s?g([...o,s]).key:Ze(t,g(o));void 0!==i&&e.emit(t.emitter,"focusError",i)},0)}function pr(e){return e+1}function yr(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const s=e.keyName??"id",{rules:i,shouldUnregister:u}=e,a=$t(e.name),c=t.useRef([]),l=t.useCallback(()=>{const e=pe(o,a)||[];for(;c.current.length<e.length;)c.current.push(lr(o));for(;c.current.length>e.length;)c.current.pop();return c.current.map((e,t)=>({id:e,index:t,[s]:e}))},[o,a,s]),[f,d]=t.useReducer(l,void 0,l);t.useEffect(()=>Bt(o.emitter,"change",a,"branch",d),[o.emitter,a]),dr(o,a.key,c.current),t.useEffect(()=>{const e=c.current;return dr(o,a.key,e),()=>{const t=fr.get(o);t?.get(a.key)===e&&t.delete(a.key)}},[o,a.key]),tr(o,a,u),nr(i?dt({...i,required:void 0},o.messages):void 0,a,o,{sync:void 0!==i?.required?dt({required:i.required},o.messages):void 0});return{fields:f,append:er((e,t)=>{c.current.push(lr(o)),yt(o,a,e),mr(o,a,c.current.length-1,t)}),prepend:er((e,t)=>{c.current.unshift(lr(o)),vt(o,a,e),mr(o,a,0,t)}),insert:er((e,t,r)=>{ht(o,a,e,t)&&(c.current.splice(e,0,lr(o)),mr(o,a,e,r))}),remove:er(e=>{const t=gt(o,a,e);for(const e of t)c.current.splice(e,1)}),swap:er((e,t)=>{kt(o,a,e,t)&&([c.current[e],c.current[t]]=[c.current[t],c.current[e]])}),move:er((e,t)=>{if(!bt(o,a,e,t))return;const[r]=c.current.splice(e,1);c.current.splice(t,0,r)}),replace:er(e=>{c.current=e.map(()=>lr(o)),xt(o,a,e)}),update:er((e,t)=>{Vt(o,a,e,t)})}}function vr(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const{id:s}=e,i=$t(e.name),u=t.useCallback(()=>function(e,t){return fr.get(e)?.get(t)}(o,i.key)?.indexOf(s)??-1,[o,i.key,s]),a=t.useCallback(e=>{const t=pe(o,i);return Array.isArray(t)?t[e]:void 0},[o,i]),c=u(),l=a(c),f=t.useRef({index:c,value:l});f.current={index:c,value:l};const d=Zt({computeIndex:u,computeValue:a}),[,m]=t.useReducer(pr,0);t.useEffect(()=>Bt(o.emitter,"change",i,"leaf",()=>{const{computeIndex:e,computeValue:t}=d.current,r=e();r===f.current.index&&Object.is(t(r),f.current.value)||m()}),[o.emitter,i,d]);const p=$t([...i.value,c]),y=Kt(o,p);return{value:l,setValue:er(e=>{if(c<0)return;const t=[...pe(o,i)??[]];c>=t.length||(t[c]=e,ye(o,i,t))}),errors:y,error:y[0]?.message,name:p.key,index:c,form:o}}const hr=t.createContext(null),gr=hr.Provider;const br=t.createContext(null),kr=br.Provider;function xr(e,t,r){if(null!=r)if(Array.isArray(r))for(const n of r)xr(e,t,n);else if("undefined"!=typeof FileList&&r instanceof FileList)for(let n=0;n<r.length;n++)e.append(t,r.item(n));else"undefined"!=typeof File&&r instanceof File?e.append(t,r,r.name):"undefined"!=typeof Blob&&r instanceof Blob?e.append(t,r):r instanceof Date?e.append(t,r.toISOString()):e.append(t,"object"==typeof r?JSON.stringify(r):String(r))}function Vr(e,t,r){return{"aria-invalid":!!e||r["aria-invalid"],"aria-describedby":e?[r["aria-describedby"],Dt(t)].filter(Boolean).join(" "):r["aria-describedby"]}}function Er(e){return e?function(e){const t={};e.required&&(t.required=!0);for(const r of["min","max","minLength","maxLength"])void 0!==e[r]&&(t[r]=e[r]);return e.pattern&&(t.pattern=e.pattern.value.source),t}(e):void 0}const Sr=n.forwardRef(({validate:e,eventToValue:t,initialValue:r,name:o,asProps:s,renderError:i,as:u,valueToProps:a,form:c,shouldUnregister:l,rules:f,validateDebounce:d,validateOnMount:m,valueAsNumber:p,valueAsDate:v,asyncAlways:h,disabled:g,delayError:b,mode:k,uncontrolled:x,...V},E)=>{const S=n.useRef(null),[w,A]=n.useState(0),C=n.useContext(hr),F=c??C,O="file"===V.type,M=e&&Y(e)?ee(e):e,{value:D,onChange:P,onBlur:T,error:j,name:B,disabled:R,focusRef:N,validating:$}=ar({name:o,form:c,initialValue:r,shouldUnregister:l,rules:f,validateDebounce:d,validateOnMount:m,delayError:b,disabled:g,asyncAlways:h,mode:k,uncontrolled:x||O,validate:(...e)=>{if(!1!==F?.shouldUseNativeValidation){const e=S.current;if(e&&"function"==typeof e.checkValidity&&(e.setCustomValidity(""),!1===e.checkValidity()))return void A(e=>e+1)}if(M)return M(...e)}}),I=n.useCallback(e=>{S.current=e,N(e),function(e,t){"function"==typeof e?e(t):e&&(e.current=t)}(E,e)},[E,N]);n.useEffect(()=>{const e=S.current;e&&"function"==typeof e.setCustomValidity&&("string"==typeof j?(e.setCustomValidity(j),e.reportValidity()):e.setCustomValidity(""))},[j]),n.useEffect(()=>{w>0&&S.current?.reportValidity()},[w]);const q=u||"input",L=y(t,{valueAsNumber:p,valueAsDate:v}),U=a?a(D):O?{}:x?{defaultValue:D}:{value:D},W=Dt(B),z=Er(f);return n.createElement(n.Fragment,null,n.createElement(q,{...z,...V,name:B,onBlur:T,...s,...U,...Vr(j,B,V),disabled:R,"aria-busy":$||void 0,onChange:e=>P(L(e)),ref:I}),j&&i?n.createElement("span",{id:W,role:"alert"},i(j,W)):null)}),wr=n.forwardRef(({name:e,form:t,initialValue:r,shouldUnregister:o,validate:s,rules:i,validateDebounce:u,validateOnMount:a,asyncAlways:c,disabled:l,delayError:f,mode:d,...m},p)=>{const{value:y,onChange:v,onBlur:h,error:g,name:b,disabled:k,validating:x}=ar({name:e,form:t,initialValue:r,shouldUnregister:o,validate:s,rules:i,validateDebounce:u,validateOnMount:a,asyncAlways:c,delayError:f,disabled:l,mode:d}),V=Er(i);return n.createElement("input",{...V,...m,name:b,onBlur:h,type:"checkbox",checked:!!y,...Vr(g,b,m),disabled:k,"aria-busy":x||void 0,onChange:e=>v(e.target.checked),ref:p})});function Ar(e,t){return e?Array.isArray(t)?t:[]:t??""}const Cr=n.forwardRef(({name:e,multiple:t,children:r,form:o,initialValue:s,shouldUnregister:i,validate:u,rules:a,validateDebounce:c,validateOnMount:l,asyncAlways:f,disabled:d,delayError:m,mode:p,...y},v)=>{const{value:h,onChange:g,onBlur:b,error:k,name:x,disabled:V,validating:E}=ar({name:e,form:o,initialValue:s,shouldUnregister:i,validate:u,rules:a,validateDebounce:c,validateOnMount:l,asyncAlways:f,delayError:m,disabled:d,mode:p}),S=Er(a);return n.createElement("select",{...S,...y,name:x,onBlur:b,multiple:t,value:Ar(t,h),...Vr(k,x,y),disabled:V,"aria-busy":E||void 0,onChange:e=>g(t?Array.from(e.target.selectedOptions,e=>e.value):e.target.value),ref:v},r)});exports.Checkbox=wr,exports.CheckboxGroupContext=br,exports.CheckboxGroupProvider=kr,exports.ErrorSummary=function({form:t,context:r,heading:o}){const s=n.useContext(r??hr),i=t??s;if(!i)throw new Error("no form provided");const u=n.useRef(null),a=n.useRef(!1),c=n.useId(),l=Yt(i);Lt(n.useCallback(t=>{const r=()=>{const e=a.current;a.current=i.isSubmitting,e&&!i.isSubmitting&&X(i)&&u.current?.focus(),t()},n=e.on(i.emitter,"errors",r),o=e.on(i.emitter,"submitting",r);return()=>{n(),o()}},[i]),()=>null);const f=Object.entries(l);return 0===f.length?null:n.createElement("div",{role:"alert",tabIndex:-1,ref:u,"aria-labelledby":c},n.createElement("h2",{id:c},o??"There is a problem"),n.createElement("ul",null,f.map(([e,t])=>{const r=t[0]?.message;if(e===B)return n.createElement("li",{key:e},n.createElement("p",null,r));const o=z(e);return n.createElement("li",{key:e},n.createElement("a",{href:`#${Pt(o)}`,onClick:e=>{e.preventDefault(),Ot(i,o)}},r))})))},exports.FORM_ERROR=B,exports.Field=Sr,exports.Form=function({form:e,context:t,initialValues:r,values:o,shouldUnregister:s,validateOnMount:i,disabled:u,asyncAlways:a,onSubmit:c,onValidSubmit:l,onInvalidSubmit:f,action:d,shouldFocusError:m,shouldUseNativeValidation:p,...y}){const v=qt({initialValues:r,values:o,shouldUnregister:s,validateOnMount:i,disabled:u,asyncAlways:a,shouldUseNativeValidation:p}),h=e||v;n.useEffect(()=>{void 0!==u&&At(h,u)},[h,u]);const g=Ft(h,{onSubmit:c,onValidSubmit:l,onInvalidSubmit:f,shouldFocusError:m,shouldUseNativeValidation:p,onAction:"function"==typeof d?e=>d(function(e){const t=new FormData;for(const r of Object.keys(e))xr(t,r,e[r]);return t}(e)):void 0}),{Provider:b}=t??hr,k="string"==typeof d?d:void 0;return n.createElement(b,{value:h},n.createElement("form",{...y,action:k,noValidate:!0,onSubmit:g}))},exports.FormContext=hr,exports.FormField=function({children:e,...t}){return e(ar(t))},exports.FormProvider=gr,exports.Select=Cr,exports.VALIDATION_OUTCOME=R,exports.appendValue=function(e,t,r){yt(e,g(t),r)},exports.appendValueByPath=yt,exports.changeValue=function(e,t,r,n){Qe(e,g(t),r,n)},exports.changeValueByPath=Qe,exports.clearErrors=G,exports.clearServerErrors=Q,exports.createForm=Mt,exports.createFormContext=function(){const e=t.createContext(null);return{context:e,FormProvider:function({form:r,children:n}){return t.createElement(e.Provider,{value:r},n)},useFormContext:function(){const r=t.useContext(e);if(!r)throw new Error("no form provided");return r},useField:function(t){return ur(t,e)},useFieldArray:function(t){return yr(t,e)},useFieldArrayItem:function(t){return vr(t,e)}}},exports.dottedKeyToFieldPath=z,exports.emitChangeByPath=he,exports.ensureValidate=Ke,exports.fieldErrorId=Pt,exports.fieldPathToDottedKey=function(e){return g(e).value.join(".")},exports.firstMountedDescendantKey=Ze,exports.getDirtyFields=ae,exports.getError=function(e,t){return N(e,g(t))},exports.getErrorByPath=N,exports.getErrors=q,exports.getErrorsRecord=U,exports.getErrorsTree=W,exports.getFieldErrors=function(e,t){return I(e,g(t))},exports.getFieldErrorsByPath=I,exports.getFieldState=function(e,t){const r=g(t),{touched:n,validating:o}=e;return{value:pe(e,r),error:N(e,r),errors:I(e,r),isDirty:se(e,r),isTouched:n.has(r.key),isValidating:o.has(r.key)}},exports.getFirstError=_,exports.getTouchedFields=fe,exports.getValue=function(e,t){return pe(e,g(t))},exports.getValueByPath=pe,exports.getValues=de,exports.handleSubmit=Ft,exports.hasErrors=X,exports.hasTouched=function(e,t){return le(e,g(t))},exports.hasTouchedByPath=le,exports.incrementSubmitCount=St,exports.insertValue=function(e,t,r,n){return ht(e,g(t),r,n)},exports.insertValueByPath=ht,exports.isDirty=ie,exports.isFieldDirtyByPath=se,exports.isTouched=function({touched:e}){return e.size>0},exports.moveValue=function(e,t,r,n){return bt(e,g(t),r,n)},exports.moveValueByPath=bt,exports.prependValue=function(e,t,r){vt(e,g(t),r)},exports.prependValueByPath=vt,exports.registerField=mt,exports.registerFieldMode=Xe,exports.registerFieldValidateDeps=We,exports.registerValidatorByPath=Fe,exports.removeField=function(e,t,r){ge(e,g(t),r)},exports.removeFieldByPath=ge,exports.removeValue=function(e,t,r){return gt(e,g(t),r)},exports.removeValueByPath=gt,exports.replaceValues=function(e,t,r){xt(e,g(t),r)},exports.replaceValuesByPath=xt,exports.reset=Se,exports.resetField=function(t,r,n){const o=g(r),{emitter:s,values:i,touched:c,errors:l,deleted:f}=t;if(i.delete(o.key),M(t,o.key),void 0!==t.parsedValues){t.parsedValues=a(t.parsedValues,o.value);const e=u(t.initialValues,o.value);void 0!==e&&i.set(o.key,e)}n&&"value"in n&&i.set(o.key,n.value),ke(f,o),e.emit(s,"change"),!n?.keepTouched&&c.delete(o.key)&&e.emit(s,"touched",o),!n?.keepErrors&&l.delete(o.key)&&(w(t),e.emit(s,"errors",o)),P(t),E(t)},exports.revalidateDependentsOnChange=_e,exports.revalidateFormOnChange=Le,exports.runFormValidate=$e,exports.seedValueByPath=ve,exports.setDisabled=At,exports.setError=J,exports.setErrorByPath=K,exports.setFocus=Ot,exports.setInitialValues=xe,exports.setIsSubmitting=Et,exports.setServerErrors=H,exports.setStatus=function(t,r){t.status=r,e.emit(t.emitter,"status")},exports.setSubmitSuccessful=wt,exports.setTouched=function(e,t){ce(e,g(t))},exports.setTouchedByPath=ce,exports.setValidatingByPath=Ae,exports.setValue=function(e,t,r,n){ye(e,g(t),r,n)},exports.setValueByPath=ye,exports.shouldKick=qe,exports.subscribe=function(t,r){const{name:n,event:o="change",scope:s="branch",callback:i}=r;if(void 0===n)return e.on(t.emitter,o,i);const u=(function(e){return Array.isArray(e)&&e.every(e=>"number"!=typeof e)}(n)?n:[n]).map(e=>{const r=g(e);return"errors"===o||"touched"===o?Rt(t.emitter,o,r.key,i):Bt(t.emitter,o,r,s,i)});return 1===u.length?u[0]:()=>u.forEach(e=>e())},exports.swapValues=function(e,t,r,n){return kt(e,g(t),r,n)},exports.swapValuesByPath=kt,exports.trigger=async function(t,r,n){const o=e=>h(t.emitter,"validating",()=>void 0===e?Be(t):e.every(e=>!t.validating.has(e)),()=>!1),s=r=>{const n=void 0===r?t.errors.keys().next().value:r.find(e=>t.errors.has(e));void 0!==n&&e.emit(t.emitter,"focusError",n)};if(void 0===r)return t.validators.forEach(e=>e()),await o(),t.validate&&await $e(t),n?.shouldTouch&&Oe(t,[...t.validators.keys()]),n?.shouldFocus&&s(),!X(t);const i="string"==typeof r||T(r)?[g(r).key]:r.map(e=>g(e).key);return i.forEach(e=>t.validators.get(e)?.()),await o(i),n?.shouldTouch&&Oe(t,i),n?.shouldFocus&&s(i),i.every(e=>!t.errors.has(e))},exports.unregisterFieldMode=Ye,exports.unregisterFieldValidateDeps=ze,exports.unsetValidatingByPath=we,exports.updateValue=function(e,t,r,n){return Vt(e,g(t),r,n)},exports.updateValueByPath=Vt,exports.useCanSubmit=function(r){const{emitter:n}=r;return Lt(t.useCallback(t=>{const r=e.on(n,"errors",t),o=e.on(n,"submitting",t);return()=>{r(),o()}},[n]),()=>!r.isSubmitting&&!X(r))},exports.useCheckboxGroupContext=function(){const e=t.useContext(br);if(!e)throw new Error("no group provided");return e},exports.useDirtyFields=function(e){return Ut(e,"change",ae.bind(null,e))},exports.useError=function(e,t){return Jt(e,g(t))?.message},exports.useErrorByPath=Jt,exports.useErrors=Yt,exports.useErrorsTree=function(e){return Ut(e,"errors",()=>W(e))},exports.useField=ar,exports.useFieldArray=function(e){return yr(e,hr)},exports.useFieldArrayItem=function(e){return vr(e,hr)},exports.useFieldErrors=function(e,t){return Kt(e,g(t))},exports.useFieldErrorsByPath=Kt,exports.useForm=qt,exports.useFormContext=function(){const e=t.useContext(hr);if(!e)throw new Error("no form provided");return e},exports.useFormError=function(e){return Jt(e,g(B))?.message},exports.useFormErrors=function(e){return Kt(e,g(B))},exports.useFormState=function(e){const r=t.useCallback(()=>function(e){const t=X(e);return{isDirty:ie(e),dirtyFields:ae(e),isTouched:e.touched.size>0,touchedFields:fe(e),hasErrors:t,isValid:!t,errors:U(e),isSubmitting:e.isSubmitting,isSubmitted:e.isSubmitted,isValidating:e.validating.size>0,isSubmitSuccessful:e.isSubmitSuccessful,submitCount:e.submitCount,isLoading:e.isLoading,disabled:e.disabled}}(e),[e]);return Lt(t.useCallback(t=>Qt(e.emitter,t),[e.emitter]),r,Xt)},exports.useHasErrors=function(e){return Ut(e,"errors",X.bind(null,e))},exports.useIsDirty=function(e){return Ut(e,"change",ie.bind(null,e))},exports.useIsFieldDirty=function(e,t){return Gt(e,g(t))},exports.useIsFieldDirtyByPath=Gt,exports.useIsLoading=function(e){return Ut(e,"loading",()=>e.isLoading)},exports.useIsSubmitSuccessful=function(e){return Ut(e.emitter,"submitSuccessful",()=>!!e.isSubmitSuccessful)},exports.useIsSubmitting=function(e){return Ut(e,"submitting",()=>e.isSubmitting)},exports.useIsValid=function(e){return Ut(e,"errors",()=>!X(e))},exports.useIsValidating=function(e){return Ut(e,"validating",()=>e.validating.size>0)},exports.useStatus=function(e){return Ut(e,"status",()=>e.status)},exports.useStore=function(e,r,n){return Lt(t.useCallback(t=>Qt(e.emitter,t),[e.emitter]),r,n)},exports.useSubmitCount=function(e){return Ut(e,"submitCount",()=>e.submitCount)},exports.useTouched=function(e,t){return _t(e,g(t))},exports.useTouchedByPath=_t,exports.useTouchedFields=function(e){return Ut(e,"touched",fe.bind(null,e))},exports.useTransform=function(e,r,n={}){const o=$t(r),{toDisplay:s,fromDisplay:i,asyncDebounceMs:u}=n,a=Lt(t.useCallback(t=>Bt(e.emitter,"change",Nt(o.key),"leaf",t),[e.emitter,o.key]),()=>pe(e,o)),c=s?s(a):a,l=t.useRef(null),f=t.useRef(0),d=Zt(i),m=Zt(u??0);return t.useEffect(()=>()=>{null!==l.current&&clearTimeout(l.current)},[]),{value:c,onChange:t.useCallback(t=>{const r=()=>{const r=++f.current,n=d.current,s=t=>rt(e,o,t);if(!n)return void s(t);const i=n(t);p(i)?i.then(e=>{f.current===r&&s(e)}):f.current===r&&s(i)};null!==l.current&&clearTimeout(l.current),l.current=null,m.current>0?l.current=setTimeout(r,m.current):r()},[e,o,d,m])}},exports.useValue=function(e,t,r){return Wt(e,g(t),r)},exports.useValueByPath=Wt,exports.useValues=function(e){return Ut(e,"change",()=>de(e))},exports.useWatch=Ut,exports.useWatchCore=Lt,exports.userBlur=nt,exports.userChangeByPath=rt,exports.validate=Ge,exports.watch=function(t,r,n,o){const s={hasValue:!1},i=new Set,u=e.on(t.emitter,r,()=>{if(o&&s.hasValue){const e=n();if(o(s.value,e))return;s.value=e}else s.value=n(),s.hasValue=!0;i.forEach(e=>e())});return{getSnapshot:()=>(s.hasValue||(s.value=n(),s.hasValue=!0),s.value),subscribe:e=>(i.add(e),()=>{i.delete(e)}),dispose:()=>{u(),i.clear()}}};
2
2
  //# sourceMappingURL=index.cjs.js.map