react-f0rm 1.3.0 → 1.4.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 (98) hide show
  1. package/README.md +88 -1143
  2. package/devtools.d.ts +1 -0
  3. package/devtools.js +1 -0
  4. package/dist/array-3hAjl6Bz.d.ts +160 -0
  5. package/dist/devtools/index.cjs.js +1 -1
  6. package/dist/devtools/index.cjs.js.map +1 -1
  7. package/dist/devtools/index.d.cts +34 -0
  8. package/dist/devtools/index.d.mts +34 -0
  9. package/dist/devtools/index.d.ts +3 -2
  10. package/dist/devtools/index.mjs +1 -1
  11. package/dist/devtools/index.mjs.map +1 -1
  12. package/dist/errors-8oPux7GR.cjs.js +2 -0
  13. package/dist/errors-8oPux7GR.cjs.js.map +1 -0
  14. package/dist/errors-ClH3eV1R.mjs +2 -0
  15. package/dist/errors-ClH3eV1R.mjs.map +1 -0
  16. package/dist/index.cjs.js +1 -1
  17. package/dist/index.cjs.js.map +1 -1
  18. package/dist/index.d.cts +1833 -0
  19. package/dist/index.d.mts +1833 -0
  20. package/dist/index.d.ts +372 -117
  21. package/dist/index.mjs +1 -1
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/index.umd.js +859 -225
  24. package/dist/index.umd.js.map +1 -1
  25. package/dist/index.umd.min.js +2 -2
  26. package/dist/index.umd.min.js.map +1 -1
  27. package/dist/persist.cjs.js +1 -1
  28. package/dist/persist.cjs.js.map +1 -1
  29. package/dist/persist.d.cts +49 -0
  30. package/dist/persist.d.mts +49 -0
  31. package/dist/persist.mjs +1 -1
  32. package/dist/persist.mjs.map +1 -1
  33. package/dist/resolvers/standard-schema.cjs.js +1 -1
  34. package/dist/resolvers/standard-schema.cjs.js.map +1 -1
  35. package/dist/resolvers/standard-schema.d.cts +2 -0
  36. package/dist/resolvers/standard-schema.d.mts +2 -0
  37. package/dist/resolvers/standard-schema.d.ts +1 -67
  38. package/dist/resolvers/standard-schema.mjs +1 -1
  39. package/dist/resolvers/standard-schema.mjs.map +1 -1
  40. package/dist/resolvers/yup.cjs.js +1 -1
  41. package/dist/resolvers/yup.cjs.js.map +1 -1
  42. package/dist/resolvers/yup.d.cts +6 -0
  43. package/dist/resolvers/yup.d.mts +6 -0
  44. package/dist/resolvers/yup.d.ts +0 -1
  45. package/dist/resolvers/yup.mjs +1 -1
  46. package/dist/resolvers/yup.mjs.map +1 -1
  47. package/dist/resolvers/zod.cjs.js +1 -1
  48. package/dist/resolvers/zod.cjs.js.map +1 -1
  49. package/dist/resolvers/zod.d.cts +6 -0
  50. package/dist/resolvers/zod.d.mts +6 -0
  51. package/dist/resolvers/zod.d.ts +0 -1
  52. package/dist/resolvers/zod.mjs +1 -1
  53. package/dist/resolvers/zod.mjs.map +1 -1
  54. package/dist/server/index.cjs.js +1 -1
  55. package/dist/server/index.cjs.js.map +1 -1
  56. package/dist/server/index.d.cts +106 -0
  57. package/dist/server/index.d.mts +106 -0
  58. package/dist/server/index.d.ts +31 -2
  59. package/dist/server/index.mjs +1 -1
  60. package/dist/server/index.mjs.map +1 -1
  61. package/dist/standard-schema-CYbnugL7.d.ts +1184 -0
  62. package/dist/standardSchema-BpZvg0tZ.mjs +2 -0
  63. package/dist/standardSchema-BpZvg0tZ.mjs.map +1 -0
  64. package/dist/standardSchema-CxV_DhBO.cjs.js +2 -0
  65. package/dist/standardSchema-CxV_DhBO.cjs.js.map +1 -0
  66. package/dist/validate-BEjNsNvd.mjs +2 -0
  67. package/dist/validate-BEjNsNvd.mjs.map +1 -0
  68. package/dist/validate-BvN6hiEG.cjs.js +2 -0
  69. package/dist/validate-BvN6hiEG.cjs.js.map +1 -0
  70. package/dist/values-Bod74Kzu.mjs +2 -0
  71. package/dist/values-Bod74Kzu.mjs.map +1 -0
  72. package/dist/values-DKpOCD5J.cjs.js +2 -0
  73. package/dist/values-DKpOCD5J.cjs.js.map +1 -0
  74. package/package.json +72 -27
  75. package/persist.d.ts +1 -0
  76. package/persist.js +1 -0
  77. package/resolvers/standard-schema.d.ts +1 -0
  78. package/resolvers/standard-schema.js +1 -0
  79. package/resolvers/yup.d.ts +1 -0
  80. package/resolvers/yup.js +1 -0
  81. package/resolvers/zod.d.ts +1 -0
  82. package/resolvers/zod.js +1 -0
  83. package/server.d.ts +1 -0
  84. package/server.js +1 -0
  85. package/dist/errors-BKrUdpfI.cjs.js +0 -2
  86. package/dist/errors-BKrUdpfI.cjs.js.map +0 -1
  87. package/dist/errors-CrQBddrJ.mjs +0 -2
  88. package/dist/errors-CrQBddrJ.mjs.map +0 -1
  89. package/dist/form-CeKSBs31.d.ts +0 -486
  90. package/dist/validate-CNtuUhmk.mjs +0 -2
  91. package/dist/validate-CNtuUhmk.mjs.map +0 -1
  92. package/dist/validate-Cl4ksNFu.cjs.js +0 -2
  93. package/dist/validate-Cl4ksNFu.cjs.js.map +0 -1
  94. package/dist/validate-nksgv1pR.d.ts +0 -272
  95. package/dist/values-Cu6awQOJ.cjs.js +0 -2
  96. package/dist/values-Cu6awQOJ.cjs.js.map +0 -1
  97. package/dist/values-DRY-a32G.mjs +0 -2
  98. package/dist/values-DRY-a32G.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors-ClH3eV1R.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}. Static field names ('user.email')\n * number in the dozens per app, so the cache barely grows in practice;\n * the cap is only a backstop for dynamic keys ('items[' + id + ']'\n * style — array inputs skip the cache entirely), where long-lived forms\n * would otherwise accumulate entries forever. Map preserves insertion\n * order, so eviction drops the oldest entry; a dropped string only\n * costs a re-parse the next time normalizePath sees it — results are\n * deterministic, so eviction affects performance, 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\n * package entry — tests import this module directly to assert the\n * FIFO bound above. */\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; the cache is non-empty here\n // because 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/** Does a segment string denote an integer array index (optionally\n * negative)? The parser feeds it bracket contents ('items[0]' → number)\n * and rejects dotted numerics outright ('items.0' throws), so parsed\n * paths never carry index-looking strings. Its remaining duty is\n * defending programmatic segments: normalizePath also accepts raw\n * (string | number)[] arrays, and index-shaped strings can still arrive\n * from internal callers (error-tree keys) or array containers met\n * during set/setOwned walks. */\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 message: the dotted\n // form the caller wrote vs. the bracket form the parser accepts.\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/**\n * Immutable counterpart of {@link set}: removes the path from the value\n * tree, copying only along the touched branch (untouched branches stay\n * shared with the source, like set). Deletes the key entirely rather than\n * writing undefined, so the result carries no `a: undefined` entries.\n */\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 the pruned child at its parent key — NOT at the full path,\n // which would write the pruned subtree back under the removed key.\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\nexport function set(values: any, path: (string | number)[], value: any): any {\n if (!path.length) return value;\n\n const [prop, ...props] = path;\n // A numeric segment lands with the array copy rule — numbers, and the\n // string form dotted paths parse to ('a.0'), on an array container: an\n // object spread there would corrupt the array into {'0': ...}.\n const index =\n typeof prop === 'number'\n ? prop\n : Array.isArray(values) && typeof prop === 'string' && isIndex(prop)\n ? Number(prop)\n : undefined;\n if (index !== undefined) {\n const arr = Array.isArray(values) ? values.slice() : [];\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/**\n * Ownership-tracked {@link set}: merge many paths into one tree without\n * re-copying containers the merge itself already created.\n *\n * Containers present in `owned` (freshly created by an earlier call of the\n * same merge) are mutated in place; every other container -- nodes borrowed\n * from the seed tree and user leaf values -- is copied first with the exact\n * copy rules `set` applies (numeric prop: array slice, or a fresh array\n * when the node is not one; string prop: object spread). Chaining\n * `setOwned` over a list of paths therefore produces the tree chaining\n * `set` would, in the same insertion order, but allocates each distinct\n * container once (O(distinct path prefixes)) instead of re-copying the\n * whole branch for every path (O(paths x depth)).\n *\n * Use a fresh `owned` set per merge and thread the returned root (a copied\n * replacement when the seed root itself had to be copied) into the next\n * call. Borrowed containers are never mutated.\n */\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 if (!owned.has(container)) {\n let copy: any;\n if (\n typeof prop === 'number' ||\n (Array.isArray(container) && typeof prop === 'string' && isIndex(prop))\n ) {\n copy = Array.isArray(container) ? container.slice() : [];\n } else {\n copy = {...container};\n }\n owned.add(copy);\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/**\n * The shared DOM event → value protocol every binding uses (Field's\n * `eventToValue` default, `useField`'s `inputProps`, `form.register`):\n * - file inputs store their `FileList` (a value prop can never control\n * them, and validation/submit want the files);\n * - checkbox inputs store `checked` (the value attribute is not the\n * control's state);\n * - `valueAsNumber`/`valueAsDate` store the typed DOM accessors\n * (number/date inputs, RHF's `register` options; number wins when both\n * are set);\n * - everything else stores the string `value`;\n * - a non-DOM first argument (no `target`) passes through unchanged, so\n * custom controls can hand raw values.\n */\nexport function extractEventValue(\n e: any,\n options?: {\n valueAsNumber?: boolean;\n valueAsDate?: boolean;\n }\n): 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/** Structural equality for form default data (primitives, arrays, plain\n * objects, Dates). Class instances and other exotic objects compare as\n * unequal, which errs on the side of re-seeding when {@link\n * setInitialValues} uses it to tell a re-rendered inline literal from\n * genuinely changed content. */\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 // Condition not reached yet — stay subscribed and keep waiting. (The\n // previous `if (isResolve()) return` was inverted: it hung forever\n // once the condition held and resolved prematurely while it didn't.)\n if (!isResolve()) return;\n off();\n resolve();\n });\n });\n}\n\n/**\n * DEV-only snapshot guard for {@link getValues}: deep-clones and freezes\n * plain objects and arrays so a consumer mutating the returned tree throws\n * immediately instead of silently corrupting the shared memoized result\n * (getValues hands the same cached reference to every reader between\n * writes). Non-plain values (Date, File, Blob, class instances, Map/Set)\n * pass through by reference, unfrozen — cloning would strip their\n * prototypes and freezing would break legitimate methods like\n * Date#setHours. Callers gate the call behind `__DEV__` so production\n * builds pay nothing.\n */\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","import {emit} from '../emitter';\nimport {get} from '../util';\nimport type {Name, Path, PathSegments} from '../path';\nimport type {FieldError, Form} from '../form';\n\n/** Per-form memoization of {@link getValues}, the same version-bump/read\n * pattern {@link dirtyFieldsCaches} gives {@link getDirtyFields}. */\ntype ValuesCache = {version: number; result: any};\n\nexport const valuesCaches: WeakMap<Form, ValuesCache> = new WeakMap();\n\n/**\n * Invalidate `form`'s cached {@link getValues} result. Called at every\n * point that can change values, parsedValues or initialValues\n * (setValueByPath, removeFieldByPath, setInitialValues, reset, resetField,\n * setParsedValues) so repeated reads hand back a stable reference until\n * the next write.\n */\nexport function bumpValuesVersion(form: Form): void {\n const cache = valuesCaches.get(form);\n if (cache) cache.version++;\n}\n\n/** Per-form memoization of {@link getErrorsRecord} /\n * {@link getErrorsTree} (src/core/errors.ts), the same version-bump/read\n * pattern {@link valuesCaches} gives {@link getValues}: every errors-Map\n * mutation bumps the counter, reads reset it, so consecutive reads hand\n * back one stable record/tree reference until the next error write. */\ntype ErrorsCache = {\n version: number;\n result: Record<string, FieldError[]>;\n tree: any;\n};\n\nexport const errorsCaches: WeakMap<Form, ErrorsCache> = new WeakMap();\n\n/**\n * Invalidate `form`'s cached {@link getErrorsRecord} result. Called at\n * every point that mutates the errors Map — setErrorByPath, clearErrors,\n * setServerErrors/clearServerErrors, clearFormValidateErrors (the\n * form-level round's pre-land cleanup), removeFieldByPath and resetField's\n * error drops. A no-op until the first read installed a cache entry.\n */\nexport function bumpErrorsVersion(form: Form): void {\n const cache = errorsCaches.get(form);\n if (cache) cache.version++;\n}\n\n/**\n * Get form values: the values Map layered over parsedValues (when a schema\n * validation produced them) layered over initialValues.\n *\n * Merged with copy-on-write ownership tracking ({@link setOwned}): every\n * distinct container on a written path is allocated once and shared by all\n * paths through it, instead of re-copying the whole branch for every key.\n * One owned set spans the whole merge, so containers borrowed from the\n * parsedValues tree are copied before mutation exactly like initialValues\n * ones. The result is a freshly merged tree per mutation, with untouched\n * branches sharing references with the baseline exactly like chained\n * `set` did.\n *\n * Memoized per form like {@link getDirtyFields}: every value write bumps a\n * `version` counter ({@link bumpValuesVersion}) while reads reset it, so\n * consecutive reads hand back the same reference (submit, changeValue and\n * form-level validate all read the whole tree, often several times per\n * interaction). Treat the result as read-only — the next read after a\n * write returns a fresh tree, but between writes the cached one is shared\n * with every other reader.\n *\n * parsedValues is the schema's complete output tree: once validation\n * succeeds it replaces the initialValues baseline (fields the schema\n * dropped disappear), while live edits in the values Map still win over\n * both. It never affects dirty state — {@link isDirty} and\n * {@link getDirtyFields} compare live edits against initialValues only,\n * because parsing is not a user edit.\n *\n * @param form\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 (like\n * {@link dirtyFieldsCaches}) so the Form shape is untouched for forms that\n * 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 from the new baseline. */\nexport function setDirtyBaseline(form: Form, {key}: Path, value: any): void {\n let baselines = dirtyBaselines.get(form);\n if (!baselines) {\n baselines = new Map();\n dirtyBaselines.set(form, baselines);\n }\n baselines.set(key, value);\n}\n\n/** A wholesale write at a path replaces the subtree below it, so baselines\n * committed under the branch die with the data they were committed against\n * (array movers rewrite the parent path, re-aligning row indices). Called\n * from every write — a no-op unless the form ever opted in. */\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 ({@link removeFieldByPath} /\n * {@link resetField}) or all of them ({@link setInitialValues} /\n * {@link reset}) — the state they 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 = {version: number; result: Record<string, boolean>};\n\nexport const dirtyFieldsCaches: WeakMap<Form, DirtyFieldsCache> = new WeakMap();\n\n/**\n * Invalidate `form`'s cached {@link getDirtyFields} result. Called at every\n * point that can change values or initialValues (setValueByPath,\n * removeFieldByPath, setInitialValues, reset) so repeated reads hand out a\n * stable reference and useWatch's Object.is snapshot check can skip\n * re-renders.\n */\nexport function bumpDirtyVersion(form: Form): void {\n const cache = dirtyFieldsCaches.get(form);\n if (cache) cache.version++;\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 single path\n * rather 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/**\n * Flatten a form-level validate result and write each leaf error through\n * setError. Nested objects descend into deeper paths ({a: {b: 'msg'}} sets\n * the 'a.b' error), array values contribute every non-empty string they\n * hold as separate errors (zod flatten() formErrors style), and\n * FieldError-shaped objects are stored as-is. Falsy values are skipped.\n *\n * When `footprint` is passed (validateDeps forms only), every leaf this\n * round actually stored is recorded into it — the exact stored array —\n * so the next round can drop exactly what this one wrote.\n/** Store a schema validator's parsed output as the getValues baseline\n * layer above initialValues. Payload-less 'change' notifies value\n * watchers (useValue, useDirtyFields, ...); dirty state is untouched —\n * it only compares live edits against initialValues, and parsing is not\n * 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 (dirty state is untouched — parsing is\n // not an edit, hence no bumpDirtyVersion here).\n bumpValuesVersion(form);\n emit(form.emitter, 'change');\n}\n\n/**\n * Land a form-level validate result. A plain record keeps the\n * long-standing behavior — flattened into field errors by\n * {@link setFormErrors}. A branded {@link ValidationOutcome} splits\n * instead: `errors` flattens exactly like a plain record, and `values`\n * (the schema's parsed output — coerced/transformed values included)\n * becomes the form's parsedValues baseline. Falsy results are skipped,\n * branded or not.\n *\n * Forms that opted into `validateDeps` additionally get round-scoped\n * error ownership: before the new result lands, the errors the previous\n * round wrote are dropped ({@link clearFormValidateErrors}), so a re-run\n * that passes makes the cross-field error disappear — and the new\n * round's own writes become the tracked footprint. Forms without the\n * option keep the historical write-only behavior untouched.\n */\n","import {emit} from '../emitter';\nimport createPath from '../path';\nimport type {Name, Path, PathSegments} from '../path';\nimport type {FieldPath, OpaqueTypes} from '../types';\nimport type {FieldError, FieldErrorEntry, Form} from '../form';\nimport {\n bumpErrorsVersion,\n errorsCaches,\n isFieldError,\n isSegmentsPath\n} from './internals';\n\n/** Reserved top-level path segment for form-level errors. The Standard\n * Schema form-level adapter lands path-less issues under this key; the\n * exported constant replaces the magic string, and readers consume it via\n * getError(form, FORM_ERROR) / getFieldErrors(form, FORM_ERROR). */\nexport const FORM_ERROR = '_form';\n\n/** When a field is validated:\n * - `'onSubmit'` (default): only on submit\n * - `'onBlur'`: when the field loses focus\n * - `'onChange'`: on every change\n * - `'onTouched'`: on first blur, then on every change\n * - `'all'`: on both change and blur\n */\n/** Brand marking a form-level validate result as a structured\n * {@link ValidationOutcome} (parsed values and/or errors) rather than a\n * plain nested error record. Symbols cannot collide with user error\n * records, so detection is an exact `VALIDATION_OUTCOME in result`. */\nexport const VALIDATION_OUTCOME: unique symbol = Symbol('validation-outcome');\n\n/** Structured form-level validate result: `errors` uses the same nested\n * shape a plain error record uses, `values` is the schema's parsed output\n * (coerce/transform results included). Either side may be omitted. */\n/**\n * Get field error\n * @param form\n * @param name\n * @return FieldError object or undefined\n */\nexport function getError<\n T extends Record<string, any> = any,\n P extends FieldPath<T> | PathSegments = FieldPath<T> | PathSegments\n>(form: Form<T>, name: P): FieldError | undefined {\n return getErrorByPath(form, createPath(name));\n}\n\n/**\n * Get field error by path\n * @param form\n * @param path\n * @return first FieldError of the field, or undefined\n */\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}: a fresh `[]` per\n * call would allocate on the hot no-error path, and the stored arrays are\n * handed out by reference too, so callers must treat results as read-only. */\nconst NO_ERRORS: FieldError[] = [];\n\n/**\n * Get all errors of a field\n * @param form\n * @param name\n * @return every error registered for the field (insertion order); an empty\n * array when the field has none\n */\nexport function getFieldErrors<\n T extends Record<string, any> = any,\n P extends FieldPath<T> | PathSegments = FieldPath<T> | PathSegments\n>(form: Form<T>, name: P): FieldError[] {\n return getFieldErrorsByPath(form, createPath(name));\n}\n\n/**\n * Get all errors of a field by path\n * @param form\n * @param path\n * @return every error registered for the field (insertion order); an empty\n * array when the field has none\n */\nexport function getFieldErrorsByPath({errors}: Form, path: Path): FieldError[] {\n return errors.get(path.key) ?? NO_ERRORS;\n}\n\n/**\n * Get all errors\n * @param form\n * @return array of {path, type, message} entries, in insertion order; path\n * is the user-facing dotted field path ('a.b', 'list.0'), and a\n * field holding several errors contributes one entry per error\n */\nexport function getErrors({errors}: Form): FieldErrorEntry[] {\n const entries: FieldErrorEntry[] = [];\n for (const [key, list] of errors) {\n const path = (JSON.parse(key) as PathSegments).join('.');\n for (const {type, message} of list) entries.push({path, type, message});\n }\n return entries;\n}\n\n/**\n * Convert a {@link FieldPath} string to the key form error records use at\n * runtime: paths spell array access with brackets ('items[0].name') while\n * {@link getErrorsRecord} keys are dot-joined segments ('items.0.name').\n * The declared keys follow the runtime, so typed reads\n * (`errors['items.0.name']`) match what the record actually holds. Quoted\n * segments ('items[\"0\"]') drop their quotes like the parser does.\n *\n * Public so consumers can name the key style in their own types —\n * `const key: DottedPath<'items[0].name'> = 'items.0.name'`.\n */\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/**\n * Every error as one record keyed by user-facing dotted path, typed\n * against the values shape — react-hook-form's `FieldErrors<T>` shape\n * (per-key values are optional there too). Keys follow the runtime form:\n * dotted paths ('a.b', 'list.0'), plus the {@link FORM_ERROR} slot for\n * form-level errors. Values are the stored FieldError[] arrays shared\n * with the form, so treat the whole result as read-only.\n */\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 — primitives, functions,\n * registered {@link OpaqueTypes} leaves, and the common opaque DOM/date\n * containers (Date, File, FileList, Map, Set) — is a leaf holding the\n * stored FieldError[] (shared with the form — treat as 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/**\n * Every error as one nested object following the values tree —\n * react-hook-form's `formState.errors` shape with typed optional chains\n * (`errors.items?.[0]?.name`), the readable counterpart of\n * {@link FieldErrors}' flat dotted keys. Array positions become array\n * indices (holes stay absent), object fields become optional keys,\n * leaves hold the stored FieldError[] arrays shared with the form — treat\n * the whole result as read-only. The {@link FORM_ERROR} slot holds\n * form-level errors at the top level.\n *\n * One conflict is resolved by insertion order: a row-level error at\n * `items[0]` and a field error at `items[0].name` cannot both occupy the\n * `items[0]` slot, so whichever landed later owns it (react-hook-form's\n * nested `setError` clobbers the same way). The flat record never\n * conflicts — read it when both coexist.\n */\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 && 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]' segments carry the number 0 (array index in\n // the tree) while 'items[\"0\"]' carries the string '0' (object key).\n const segments = JSON.parse(key) as PathSegments;\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 // Descend: a leaf error list already sitting here (a shallower\n // error inserted earlier) yields to the deeper path — insertion\n // 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/**\n * Get every error as one record keyed by user-facing dotted path\n * ('a.b', 'list.0') — react-hook-form's `formState.errors` shape. Values\n * are the stored FieldError[] arrays shared with the form, so treat the\n * whole result as read-only. Memoized per form with the same\n * version-bump/read pattern {@link getValues} uses: every error write\n * bumps {@link bumpErrorsVersion}, consecutive reads hand back one stable\n * reference, so {@link useErrors} / `useFormState().errors` only re-render\n * when an error actually changed.\n *\n * @param form\n */\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/**\n * Get every error as one nested object following the values tree\n * (`errors.items[0].name` reads — the shape react-hook-form's\n * `formState.errors` uses), the optional-chaining counterpart of\n * {@link getErrorsRecord}'s flat dotted keys. Array positions become\n * array indices, leaves hold the stored FieldError[] arrays shared with\n * the form — treat the whole result as read-only. Memoized alongside the\n * record through the same version-bump/read pattern, so {@link\n * useErrorsTree} only re-renders when an error actually changed.\n *\n * @param form\n */\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/**\n * Convert a field path (bracket spelling, the `name` every API takes) into\n * the dotted key {@link getErrorsRecord} / {@link getErrors} use:\n * `'items[0].name'` → `'items.0.name'`. Useful for error-record reads —\n * `errors[fieldPathToDottedKey(name)]` — and for centralizing the\n * translation when the two spellings meet in one component.\n */\nexport function fieldPathToDottedKey(name: Name): string {\n return createPath(name).value.join('.');\n}\n\n/**\n * Convert a dotted errors-record key back into bracket path spelling:\n * `'items.0.name'` → `'items[0].name'` — the form every API takes, so the\n * result feeds straight into `getError(form, …)` / `<Field name=…>`.\n *\n * Numeric-shaped segments become bracket segments; everything else stays\n * dot-joined. Inherently lossy by the record's own convention: the dotted\n * key cannot distinguish a segment containing a literal dot (a quoted path\n * like `a[\"b.c\"]` joins to the same `'a.b.c'` as `a.b.c`) — for such paths\n * keep the bracket spelling and use {@link fieldPathToDottedKey} for the\n * record read instead.\n */\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/**\n * Get first error message\n * @param form\n * @return first error's message string, or undefined when there are no errors\n */\nexport function getFirstError({errors}: Form): string | undefined {\n return errors.values().next().value?.[0]?.message;\n}\n\n/** Snapshot of one field's aggregated state, as {@link getFieldState}\n * returns it. `errors` is the stored array shared with the form — treat it\n * as read-only, like every {@link getFieldErrors} result. */\n/** Options accepted by {@link setError}. */\nexport type SetErrorOptions = {\n /**\n * Focus the named field's element after the error lands (react-hook-form's\n * `setError` `shouldFocus`). Rides the same 'focusError' channel\n * `setFocus` and a failed submit's auto-focus use: only mounted bound\n * fields react, unmounted ones are silent no-ops.\n */\n shouldFocus?: boolean;\n};\n\n/**\n * Set field error\n * @param form\n * @param name\n * @param error string is normalized to {type: 'custom', message}; a\n * FieldError object is stored as-is; an array holds several errors\n * (falsy items dropped, strings normalized); undefined clears\n * @param options {@link SetErrorOptions} — `shouldFocus` focuses the field\n * after the error lands\n */\nexport function setError<\n T extends Record<string, any> = any,\n P extends FieldPath<T> | PathSegments = FieldPath<T> | PathSegments\n>(\n form: Form<T>,\n name: P,\n error: string | FieldError | (string | FieldError)[] | undefined,\n options?: SetErrorOptions\n): void {\n setErrorByPath(form, createPath(name), error, options);\n}\n\n/**\n * Set field error\n * @param form\n * @param path\n * @param error string is normalized to {type: 'custom', message}; a\n * FieldError object is stored as-is; an array holds several errors\n * (falsy items dropped, strings normalized); undefined clears\n * @param options {@link SetErrorOptions} — `shouldFocus` focuses the field\n * after the error lands\n */\nexport function setErrorByPath(\n form: Form,\n path: Path,\n error: string | FieldError | (string | FieldError)[] | undefined,\n options?: SetErrorOptions\n): void {\n const {emitter, errors} = form;\n const list = normalizeErrors(error);\n // An empty result (undefined, '', or an array of only falsy items) clears\n // the key: the errors Map never stores an empty list, so hasErrors stays\n // a plain size check and readers can index [0] 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 (onKeyEvent) skip unrelated\n // fields; payload-less listeners ignore it.\n emit(emitter, 'errors', path);\n if (options?.shouldFocus) emit(emitter, 'focusError', path.key);\n}\n\n/** Normalize any {@link setErrorByPath} input into the stored non-empty\n * FieldError[] shape, or undefined when there is nothing to store. */\nfunction normalizeErrors(\n error: string | FieldError | (string | FieldError)[] | 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/**\n * Clear errors\n * @param form\n * @param name a single path or a list of paths; omit to clear every error\n */\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' shape), 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 — the setErrorByPath scoping — wake exactly the\n // 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 server response replaces the prior error state. */\n keepExisting?: boolean;\n};\n\n/**\n * Land a server-side error response on the form: each entry becomes the\n * named field's error(s) with `type: 'server'`, ready for the same\n * renderError/`useError` channel client-side validation uses. Takes the\n * flat `Record<string, string | string[]>` shape REST APIs commonly\n * return (RealWorld: `422 {errors: {email: ['has already been taken']}}`)\n * without a hand-rolled `Object.entries` + `setError` loop.\n *\n * A string value lands as one error, a string array as several (first one\n * is what `getError`/`error` expose); an empty array clears that field's\n * errors. By default every existing error is cleared first — a fresh\n * response describes the current state, not a patch onto stale client\n * errors; pass `keepExisting: true` to layer instead.\n * @param form\n * @param errors field errors keyed by name\n * @param options\n */\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/**\n * Drop every `type: 'server'` error from the form — the round-trip state\n * a previous submit landed. {@link handleSubmit} runs this before its\n * validation round so a retry is judged on the fresh attempt, not on the\n * server's verdict for the last payload (client errors are untouched:\n * they describe the current form state). Emits payload-less 'errors' when\n * anything changed.\n */\nexport function clearServerErrors(form: Form): void {\n let changed = false;\n for (const [key, errors] of form.errors) {\n const kept = errors.filter(error => error.type !== 'server');\n if (kept.length === 0) {\n form.errors.delete(key);\n changed = true;\n } else if (kept.length !== errors.length) {\n form.errors.set(key, kept);\n changed = true;\n }\n }\n if (changed) {\n bumpErrorsVersion(form);\n emit(form.emitter, 'errors');\n }\n}\n\n/**\n * Set field touched state\n * @param form\n * @param name\n */\n/**\n * @param form\n */\nexport function hasErrors({errors}: Form): boolean {\n return errors.size > 0;\n}\n\n/** Options accepted by {@link trigger}. `shouldTouch` defaults to `false`;\n * omitting the options object entirely keeps the plain validate-only\n * behavior, so the historical two-argument calls are untouched. */\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","index","setOwned","root","owned","container","parent","parentProp","has","add","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","valuesCaches","WeakMap","bumpValuesVersion","form","cache","version","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","parse","setError","error","options","setErrorByPath","createPath","forEach","item","normalizeErrors","clearErrors","hasErrors"],"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 i(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(s(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 i=e[o];if("."===i)""!==r&&n();else if("["===i){""!==r&&n();const i=e[o+1];if('"'===i||"'"===i){const r=e.indexOf(i,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(s(n)?Number(n):n),o=r}}else r+=i}""===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 s=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,i="number"==typeof n?n:Array.isArray(e)&&"string"==typeof n&&s(n)?Number(n):void 0;if(void 0!==i){const t=Array.isArray(e)?e.slice():[];return t[i]=c(t[i],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,i=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&&s(c)?Array.isArray(o)?o.slice():[]:{...o},n.add(t),0===a?e=t:i[u]=t,o=t}a===t.length-1?o[c]=r:(i=o,u=c,o=o[c])}return e}function d(e){return e&&"function"==typeof e.then}function f(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(!f(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),i=Object.keys(t);if(o.length!==i.length)return!1;for(const r of o)if(!f(e[r],t[r]))return!1;return!0}function m(t,r,n,o){return new Promise((i,s)=>{if(o())return void s();if(n())return void i();const u=e.on(t,r,()=>{if(o())return u(),void s();n()&&(u(),i())})})}function y(e){const t=i(e);return{value:t,key:JSON.stringify(t)}}const p=new WeakMap;function h(e){const t=p.get(e);t&&t.version++}const g=new WeakMap;function v(e,t,r){const n=g.get(e);return n?.has(t)?n.get(t):u(e.initialValues,r)}function b(e,{key:t},r){let n=g.get(e);n||(n=new Map,g.set(e,n)),n.set(t,r)}function k(e,{key:t}){const r=g.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 x(e,t){const r=g.get(e);r&&(void 0===t?r.clear():r.delete(t))}const S=new WeakMap;function V(e){const t=S.get(e);t&&t.version++}function w(e){return e.some(e=>"number"==typeof e)}function E(e){return!!e&&"object"==typeof e&&"string"==typeof e.type&&"string"==typeof e.message}const C="_form",A=Symbol("validation-outcome");function F({errors:e},t){return e.get(t.key)?.[0]}const O=[];function M({errors:e},t){return e.get(t.key)??O}function D({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 T({errors:e}){return e.values().next().value?.[0]?.message}function P(e,t,r,n){j(e,y(t),r,n)}function j(t,r,n,o){const{emitter:i,errors:s}=t,u=function(e){if("string"==typeof e)return e?[{type:"custom",message:e}]:void 0;if(E(e))return[e];if(!e)return;const t=[];return e.forEach(e=>{"string"==typeof e&&e?t.push({type:"custom",message:e}):E(e)&&t.push(e)}),t.length?t:void 0}(n);u?s.set(r.key,u):s.delete(r.key),e.emit(i,"errors",r),o?.shouldFocus&&e.emit(i,"focusError",r.key)}function L(t,r){const{emitter:n,errors:o}=t;if(void 0===r)return o.clear(),void e.emit(n,"errors");const i="string"==typeof r||w(r)?[y(r)]:r.map(e=>y(e));for(const{key:e}of i)o.delete(e);for(const t of i)e.emit(n,"errors",t)}function B({errors:e}){return e.size>0}function R(e,t){const r=e.values.get(t.key);return e.values.has(t.key)&&v(e,t.key,t.value)!==r}function N(e){let t=!1;return I(e,()=>{t=!0}),t}function I(e,t){for(const[r,n]of e.values){const o=JSON.parse(r);v(e,r,o)!==n&&t(o.join("."))}}function q(e){const t={};return I(e,e=>{t[e]=!0}),t}function $(e){let t=S.get(e);if(t){if(t.version>0){const r=q(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:q(e)},S.set(e,t);return t.result}function W({emitter:t,touched:r},n){r.has(n.key)||(r.add(n.key),e.emit(t,"touched",n))}function U({touched:e},t){return e.has(t.key)}function J({touched:e}){return Array.from(e,e=>JSON.parse(e).join("."))}function z(e){let t=p.get(e);return t?t.version>0&&(t.result=_(e),t.version=0):(t={version:0,result:_(e)},p.set(e,t)),t.result}function _(e){const{initialValues:t,parsedValues:r,values:n,deleted:o}=e,i=new Set;let s=r??t;for(const[e,t]of n)s=l(s,JSON.parse(e),t,i);for(const e of o)s=a(s,JSON.parse(e));return s}function G({initialValues:e,parsedValues:t,values:r,deleted:n},o){const{key:i,value:s}=o;if(r.has(i))return r.get(i);if(!n.has(i)){for(let e=s.length-1;e>0;e--){const t=JSON.stringify(s.slice(0,e));if(r.has(t))return u(r.get(t),s.slice(e))}return u(t??e,s)}}function H(t,r,n,o){const{emitter:i,values:s,deleted:u}=t,a="function"==typeof n?n(G(t,r)):n;s.set(r.key,a),Y(s,r),Z(u,r),k(t,r),!1===o?.shouldDirty&&b(t,r,a),V(t),h(t),o?.shouldTouch&&W(t,r),o?.shouldValidate&&t.validators.get(r.key)?.(),e.emit(i,"change",r)}function K(e,t,r){const{values:n,deleted:o}=e;n.set(t.key,r),Y(n,t),Z(o,t),k(e,t),V(e),h(e)}function Q({emitter:t},r){e.emit(t,"change",r)}function X(t,r,n){const{key:o,value:i}=r,{emitter:s,values:u,touched:a,errors:c,validating:l,deleted:d}=t;n?.keepValue||n?.keepDirty||(u.delete(o),x(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,i)||d.add(o)),n?.keepTouched||a.delete(o),n?.keepError||c.delete(o),l.delete(o),V(t),h(t),e.emit(s,"change",r),e.emit(s,"touched",r),e.emit(s,"errors",r),e.emit(s,"validating",r)}function Y(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 Z(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 ee(t,r){t.initialValues===r||f(t.initialValues,r)||(t.initialValues=r,t.parsedValues=void 0,t.values.clear(),t.deleted.clear(),x(t),V(t),h(t),e.emit(t.emitter,"change"))}function te(e,t,r){if(null!==e&&"object"==typeof e){if(Array.isArray(e)){for(let n=0;n<e.length;n++)te(e[n],[...t,n],r);return}const n=Object.keys(e);if(n.length>0){for(const o of n)te(e[o],[...t,o],r);return}}r.push({segments:t,value:e})}function re({emitter:t,validating:r},n){r.delete(n.key),e.emit(t,"validating",n)}function ne({emitter:t,validating:r},n){r.add(n.key),e.emit(t,"validating",n)}function oe(e,t,r){let n=null,o=null,i=!1,s=null,u=null;const a=e=>void 0!==e&&!(Array.isArray(e)&&0===e.length),c=()=>{i||(i=!0,ne(e,t))},l=()=>{i&&(i=!1,re(e,t))},f=()=>{const n=r.sync();if(!n)return!1;const o=n(G(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(G(e,t),{form:e,path:t});if(void 0===o)return null;const i=Array.isArray(o)?o:[o];return i.length?i:null})(),i=void 0===n?[]:Array.isArray(n)?n:[n];j(e,t,[...o??[],...i]),u=a(n)?"validator":o?"sync":null}else j(e,t,n),u=a(n)?"validator":null},y=()=>{null!==n&&(clearTimeout(n),n=null),o?.abort(),s={}},p=()=>{const n=r.validate();if(!n)return void l();o?.abort(),o=new AbortController;const i=s={};let u;try{u=n(G(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=>{s===i&&m(e)}).catch(()=>{}).finally(()=>{s===i&&(l(),s=null)})},h=()=>{if(n=null,f()&&!r.asyncAlways?.())return y(),void l();p()};return e.validators.set(t.key,()=>{if(f()&&!r.asyncAlways?.())return y(),void l();if(!r.validate())return;const e=r.debounce();if(e>0)return null!==n?clearTimeout(n):c(),void(n=setTimeout(h,e));p()}),()=>{e.validators.delete(t.key),null!==n&&(clearTimeout(n),n=null),l(),o?.abort()}}function ie(e,t){t.forEach(t=>W(e,y(JSON.parse(t))))}function se(e,t,r=[],n){Object.entries(t).forEach(([t,o])=>{const u=[...r,...s(t)?[t]:i(t)];"string"==typeof o?o&&(P(e,u,o),ue(e,u,n)):Array.isArray(o)||E(o)?(P(e,u,o),ue(e,u,n)):o&&"object"==typeof o&&se(e,o,u,n)})}function ue(e,t,r){if(!r)return;const n=y(t),o=e.errors.get(n.key);o&&r.set(n.key,o)}function ae(t,r){const n=t.validateDeps?function(e){let t=ce.get(e);t||(t=new Map,ce.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),e.emit(t.emitter,"errors",y(JSON.parse(n))))}}(t,n),n.clear()),r){if("object"==typeof r&&A in r){const o=r;return o.errors&&se(t,o.errors,[],n),void function(t,r){void 0!==r&&r!==t.parsedValues&&(t.parsedValues=r,h(t),e.emit(t.emitter,"change"))}(t,o.values)}se(t,r,[],n)}}const ce=new WeakMap;const le="__form_validate__";function de(e){for(const t of e.validating)if(t!==le)return!1;return!0}const fe=Symbol("form-validate-settled"),me=new WeakMap;function ye(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(z(t),{form:t,signal:e.signal})).then(e=>{ae(t,e)})}const o=function(e){let t=me.get(e);return t||(t={timer:null,controller:null,round:null,marked:!1,waiters:[]},me.set(e,t)),t}(t);return null!==o.timer?clearTimeout(o.timer):(o.marked=!0,t.validating.add(le),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 i;try{i=Promise.resolve(n(z(e),{form:e,signal:o.signal}))}catch(e){i=Promise.reject(e)}return i.then(n=>{t.round===r&&ae(e,n)},e=>{if(t.round===r)throw e})})(t,o,e).then(()=>pe(t,o,e,fe),r=>pe(t,o,e,r))},n),new Promise((e,t)=>{o.waiters.push({resolve:e,reject:t})})}function pe(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(le),e.emit(t.emitter,"validating"));const i=r.waiters;r.waiters=[];for(const e of i)o===fe?e.resolve():e.reject(o)}function he(e,t,r){e.validateDeps?.has(t.key)&&e.validate&&("onChange"===r||"all"===r||"onTouched"===r&&U(e,t)||"onChange"===e.reValidateMode&&function(e){const t=ce.get(e);if(!t)return!1;for(const[r,n]of t)if(e.errors.get(r)===n)return!0;return!1}(e))&&ye(e).catch(()=>{})}const ge=new WeakMap;function ve(e,t,r){let n=ge.get(e);n||(n=new Map,ge.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 be(e,t,r){const n=ge.get(e);if(n)for(const e of r){const r=n.get(e);r?.delete(t)&&(r.size||n.delete(e))}}function ke(e,t,r){const n=ge.get(e)?.get(t.key);if(n?.size)for(const o of n)o!==t.key&&("onChange"===r||"all"===r||"onTouched"===r&&U(e,t)||"onChange"===e.reValidateMode&&e.errors.has(o))&&e.validators.get(o)?.()}function xe(e){const t=new Error(T(e));return t.errors=D(e),t}async function Se(e){if(e.validators.forEach(e=>e()),await m(e.emitter,"validating",()=>de(e),()=>B(e)).catch(()=>{throw xe(e)}),e.validate&&(await ye(e),B(e)))throw xe(e)}async function Ve(e){return Se(e).catch(e=>e.message)}const we=new WeakMap;function Ee(e,t,r,n){!1===n?.shouldDirty&&b(e,t,r),we.get(e)?.get(t.key)?Fe(e,t,r):H(e,t,r,n)}function Ce(e,t,r){let n=we.get(e);n||(n=new Map,we.set(e,n));const o=n.has(t.key),i={};return n.set(t.key,{mode:r,token:i}),{token:i,displaced:o}}function Ae(e,t,r){const n=we.get(e),o=n?.get(t.key);n&&o&&o.token===r&&n.delete(t.key)}function Fe(e,t,r){H(e,t,r);const n=we.get(e)?.get(t.key);n&&function(e,t,r){("onChange"===r||"all"===r||"onTouched"===r&&U(e,t)||M(e,t).length>0&&"onChange"===e.reValidateMode)&&e.validators.get(t.key)?.(),he(e,t,r),ke(e,t,r)}(e,t,n.mode??e.mode)}function Oe(e,t){W(e,t);const r=we.get(e)?.get(t.key);if(!r)return;const n=r.mode??e.mode;("onBlur"===n||"onTouched"===n||"all"===n||M(e,t).length>0&&"onBlur"===e.reValidateMode)&&e.validators.get(t.key)?.()}function Me(t,r){t.isSubmitting=r,e.emit(t.emitter,"submitting")}function De(t){t.submitCount++,e.emit(t.emitter,"submitCount")}function Te(t,r){t.isSubmitSuccessful=r,e.emit(t.emitter,"submitSuccessful")}function Pe(t,r){t.disabled=r,e.emit(t.emitter,"disabled")}function je(e){if(e.startsWith("["))try{const t=JSON.parse(e);if(Array.isArray(t))return t.join(".")}catch{}return e}function Le(t,r){const{onSubmit:n,onValidSubmit:o,onInvalidSubmit:i,onAction:s,shouldFocusError:u=!0}=r??{};return async r=>{r&&"function"==typeof r.preventDefault&&r.preventDefault();const a=r?.currentTarget;t.isSubmitted=!0,Me(t,!0),De(t);const c=z(t);if(a&&"function"==typeof a.checkValidity&&!1===a.checkValidity()){if(a.reportValidity(),u&&"function"==typeof a.querySelector){const e=a.querySelector(":invalid");e&&"function"==typeof e.focus&&e.focus()}return Me(t,!1),Te(t,!1),void(i&&i(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:je(n.name),type:"native",message:n.validationMessage})}return t}(a),c))}if(await Ve(t)){if(Me(t,!1),Te(t,!1),u){const r=t.errors.keys().next().value;void 0!==r&&e.emit(t.emitter,"focusError",r)}i&&i(D(t),c)}else try{const e=z(t);n&&await n(e,r),o&&await o(e,r),s&&await s(e,r),Te(t,!0)}catch{Te(t,!1)}finally{Me(t,!1)}}}function Be(t){const r=e.create();e.setMaxListeners(r,0);let n=t?.initialValues??{};"function"==typeof n&&(n=n());const o={emitter:r,...t,mode:t?.mode??"onSubmit",reValidateMode:t?.reValidateMode??"onChange",disabled:t?.disabled??!1,validateOnMount:t?.validateOnMount??!1,asyncAlways:t?.asyncAlways??!1,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};return d(n)?(o.isLoading=!0,e.emit(r,"loading"),Promise.resolve(n).then(t=>{ee(o,t??{}),o.isLoading=!1,e.emit(r,"loading")},t=>{o.isLoading=!1,e.emit(r,"loading")})):o.initialValues=n,o}function Re(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 Ne(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:Re("required")}];const n=[],o=(t,r)=>e.messages?.[t]??Re(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 i="string"==typeof t||Array.isArray(t);if(void 0!==e.minLength&&i&&t.length<e.minLength&&n.push({type:"minLength",message:o("minLength",e.minLength)}),void 0!==e.maxLength&&i&&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??Re("pattern")}),void 0!==e.validate){const o="function"==typeof e.validate?{validate:e.validate}:e.validate;for(const[e,i]of Object.entries(o)){const o=i(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 Ie(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 qe(e,t){return e.startsWith(`${t.slice(0,-1)},`)}function $e(t,r,n,o,i){const{key:s}=n;return e.on(t,r,e=>{(void 0===e||e.key===s||qe(s,e.key)||"branch"===o&&qe(e.key,s))&&i()})}function We(t,r,n,o){return e.on(t,r,e=>{void 0!==e&&e.key!==n||o()})}function Ue(r){const[n]=t.useState(()=>{const e=Be(r);return r&&void 0!==r.values&&ee(e,r.values),e}),o=r&&r.initialValues,i=r&&r.values,s=t.useRef(null);null===s.current&&(s.current={done:!1,source:void 0}),t.useEffect(()=>{if(void 0===o)return;if("function"==typeof o||d(o))return;const e=s.current;e.done&&(e.source===o||f(e.source,o))||(e.done=!0,e.source=o,ee(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===i)return;const e=u.current;e.done&&(e.source===i||f(e.source,i))||(e.done=!0,e.source=i,ee(n,i))},[n,i]),t.useEffect(()=>{if(!n.validateOnMount||!n.validate)return;const t=()=>{ye(n).catch(()=>{})};if(n.isLoading)return e.on(n.emitter,"loading",()=>{t()});t()},[n]),n}function Je(e,r,n){const o=t.useRef(null);null===o.current&&(o.current={hasValue:!1});const i=o.current,s=t.useRef(r);s.current=r;const u=t.useRef(n);u.current=n;const a=t.useCallback(()=>(i.hasValue||(i.value=s.current(),i.hasValue=!0),i.value),[i]),c=t.useCallback(t=>{i.hasValue=!1;return e(()=>{const e=u.current;if(e&&i.hasValue){const r=s.current();if(e(i.value,r))return;return i.value=r,void t()}i.hasValue=!1,t()})},[e,i]);return t.useSyncExternalStore(c,a,a)}function ze(r,n,o,i){const s="emitter"in r?r.emitter:r;return Je(t.useCallback(t=>e.on(s,n,t),[s,n]),o,i)}function _e(e,r,n){const{emitter:o}=e,{key:i}=r,s=!1===n?.exact?"branch":"leaf";return Je(t.useCallback(e=>$e(o,"change",r,s,e),[o,i,s]),()=>{if(!1===n?.exact)return u(z(e),r.value);const t=G(e,r);return void 0===t?n?.defaultValue:t})}function Ge(e,r){const{emitter:n}=e,{key:o}=r;return Je(t.useCallback(e=>We(n,"touched",o,e),[n,o]),U.bind(null,e,r))}function He(e,r){const{emitter:n}=e,{key:o}=r;return Je(t.useCallback(e=>We(n,"errors",o,e),[n,o]),F.bind(null,e,r))}function Ke(e,r){const{emitter:n}=e,{key:o}=r;return Je(t.useCallback(e=>We(n,"errors",o,e),[n,o]),M.bind(null,e,r))}function Qe(e,r){const{emitter:n}=e,{key:o}=r;return Je(t.useCallback(e=>$e(n,"change",r,"leaf",e),[n,o]),()=>R(e,r))}const Xe=["change","errors","touched","validating","submitting","submitCount","submitSuccessful","disabled","loading"];function Ye(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.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 Ze(e){const r=t.useMemo(()=>y(i(e)),[e]);return t.useMemo(()=>r,[r.key])}function et(e){const r=t.useRef(e);return r.current=e,r}function tt(e){const r=et(e);return t.useCallback((...e)=>r.current(...e),[r])}function rt(e,r){const n=t.useRef(!1);t.useEffect(()=>(n.current&&(n.current=!1,r()),()=>{n.current=!0,e()}),[])}function nt(r,n,o,i){const s=t.useContext(ht),u=o||s;if(!u)throw new Error("no form provided");const a=t.useRef(r);a.current=r;const c=t.useRef(i?.debounce??0);c.current=i?.debounce??0;const l=t.useRef(i?.sync);l.current=i?.sync;const d=t.useRef(i?.asyncAlways??!1);return d.current=i?.asyncAlways??!1,t.useEffect(()=>{const t=oe(u,n,{validate:()=>a.current,debounce:()=>c.current,sync:()=>l.current,asyncAlways:()=>d.current});if(!(i?.validateOnMount??u.validateOnMount)||!a.current&&!l.current)return t;let r=!1;const o=()=>{r||u.validators.get(n.key)?.()};if(u.isLoading){const t=e.on(u.emitter,"loading",()=>{t(),o()})}else o();return()=>{r=!0,t()}},[u,n.key]),tt(()=>u.validators.get(n.key)?.())}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 X(e,t),n}function it(t,r,n){const{key:o}=r;n.present?H(t,r,n.value,{shouldDirty:!1}):(t.deleted.delete(o),h(t),e.emit(t.emitter,"change",r)),n.touched&&W(t,r),n.errors&&j(t,r,n.errors)}const st=new WeakMap;function ut({form:r,name:n,initialValue:o,shouldUnregister:i,validate:s,rules:u,validateDebounce:a,validateDeps:c,validateOnMount:l,delayError:f,disabled:m,uncontrolled:p,asyncAlways:h,mode:g},v){const b=t.useContext(v),k=r||b;if(!k)throw new Error("no form provided");const x=Ze(n),S=t.useRef(!1);void 0!==o&&void 0===G(k,x)&&(K(k,x,o),S.current=!0),t.useEffect(()=>{S.current&&(S.current=!1,Q(k,x))});nt(function(e,t){if(!e||!function(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}(e))return t;const r=Ne(e);return t?(e,n)=>{const o=r(e,n),i=e=>{const t=[...o??[]];return Array.isArray(e)?t.push(...e):e&&t.push(e),t.length?t:void 0},s=t(e,n);return d(s)?s.then(i):i(s)}:r}(u?{...u,required:void 0}:void 0,s),x,k,{debounce:a,validateOnMount:l,asyncAlways:h??k.asyncAlways,sync:u&&void 0!==u.required?Ne({required:u.required}):void 0});const V=function(e,r){const[n,o]=t.useState(e);return t.useEffect(()=>{if(void 0===r)return;if(0===e.length)return void o(e);if(n.length>0)return void o(e);const t=setTimeout(()=>o(e),r);return()=>clearTimeout(t)},[e,r,n]),void 0===r?e:n}(Ke(k,x),f),w=V[0],E=w?.message,C=function(e,r,n){const o=t.useRef({has:!1,value:void 0}),i=t.useCallback(()=>n?(o.current.has||(o.current={has:!0,value:G(e,r)}),o.current.value):G(e,r),[n,e,r]);return Je(t.useCallback(t=>n?()=>{}:$e(e.emitter,"change",r,"leaf",t),[n,e.emitter,r]),i)}(k,x,!!p),A=Je(t.useCallback(e=>p?()=>{}:$e(k.emitter,"change",x,"leaf",e),[k.emitter,x.key,p]),()=>R(k,x)),F=Je(t.useCallback(e=>We(k.emitter,"validating",x.key,e),[k.emitter,x.key]),()=>k.validating.has(x.key)),O=ze(k,"disabled",()=>k.disabled),M=tt(e=>Fe(k,x,e)),D=tt(()=>Oe(k,x));t.useEffect(()=>{const{token:e,displaced:t}=Ce(k,x,g);return()=>Ae(k,x,e)},[k,x.key,g]);const T=c?.length?c.join("\n"):void 0;t.useEffect(()=>{if(!T)return;const e=c.map(e=>y(e).key);return ve(k,x.key,e),()=>be(k,x.key,e)},[k,x.key,T]);const P=t.useRef(null),j=t.useCallback(e=>{P.current=e},[]);t.useEffect(()=>e.on(k.emitter,"focusError",(e,t)=>{if(e!==x.key)return;const r=P.current;r&&"function"==typeof r.focus&&(r.focus(),t?.shouldSelect&&"function"==typeof r.select&&r.select())}),[k,x.key]),t.useEffect(()=>{if(!p)return;let t=st.get(k);if(!t){const r=new Map,n=e.on(k.emitter,"change",e=>{if(!e)for(const e of r.values()){const{el:t,path:r}=e();if(!t||"file"===t.type)continue;const n=G(k,r),o=null==n?"":String(n);t.value!==o&&(t.value=o)}});t={cells:r,off:n},st.set(k,t)}return t.cells.set(x.key,()=>({el:P.current,path:x})),()=>{t.cells.delete(x.key),0===t.cells.size&&(t.off(),st.delete(k))}},[k,x.key,p]);const L=t.useRef(null);return rt(tt(()=>{!1!==(i??k.shouldUnregister)&&(L.current=ot(k,x))}),tt(()=>{const e=L.current;L.current=null,e&&it(k,x,e)})),{form:k,value:C,error:E,errorObject:w,errors:V,isDirty:A,validating:F,onChange:M,onBlur:D,name:x.key,disabled:O||!!m,focusRef:j}}function at(e){return ut(e,ht)}const ct=new WeakMap;function lt(e){const t=(ct.get(e)??0)+1;return ct.set(e,t),`_${t}`}const dt=new WeakMap;function ft(e,t,r){let n=dt.get(e);n||(n=new Map,dt.set(e,n)),n.set(t,r)}function mt(e){return e+1}function yt(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const i=e.keyName??"id",{rules:s,shouldUnregister:u}=e,a=Ze(e.name),c=t.useRef([]),l=t.useCallback(()=>G(o,a)||[],[o,a]),d=t.useCallback(e=>{H(o,a,e)},[o,a]),f=t.useCallback(()=>{const e=l();for(;c.current.length<e.length;)c.current.push(lt(o));for(;c.current.length>e.length;)c.current.pop();return c.current.map((e,t)=>({id:e,index:t,[i]:e}))},[l,o,i]),[m,y]=t.useReducer(f,void 0,f);t.useEffect(()=>$e(o.emitter,"change",a,"branch",y),[o.emitter,a]),ft(o,a.key,c.current),t.useEffect(()=>(ft(o,a.key,c.current),()=>{const e=dt.get(o);e?.get(a.key)===c.current&&e.delete(a.key)}),[o,a.key]);const p=t.useRef(null);rt(tt(()=>{!1!==(u??o.shouldUnregister)&&(p.current=ot(o,a))}),tt(()=>{const e=p.current;p.current=null,e&&it(o,a,e)})),nt(s?Ne({...s,required:void 0}):void 0,a,o,{sync:s&&void 0!==s.required?Ne({required:s.required}):void 0});return{fields:m,append:tt(e=>{const t=l();c.current.push(lt(o)),d([...t,e])}),prepend:tt(e=>{const t=l();c.current.unshift(lt(o)),d([e,...t])}),insert:tt((e,t)=>{const r=l();c.current.splice(e,0,lt(o));const n=[...r.slice(0,e),t,...r.slice(e)];d(n)}),remove:tt(e=>{const t=l();c.current.splice(e,1);const r=t.filter((t,r)=>r!==e);d(r)}),swap:tt((e,t)=>{const r=l();[c.current[e],c.current[t]]=[c.current[t],c.current[e]];const n=[...r];[n[e],n[t]]=[n[t],n[e]],d(n)}),move:tt((e,t)=>{const r=l(),[n]=c.current.splice(e,1);c.current.splice(t,0,n);const o=[...r],[i]=o.splice(e,1);o.splice(t,0,i),d(o)}),replace:tt(e=>{c.current=e.map(()=>lt(o)),d([...e])}),update:tt((e,t)=>{const r=l();if(e<0||e>=r.length)return;const n=[...r];n[e]=t,d(n)})}}function pt(e,r){const n=t.useContext(r),o=e.form||n;if(!o)throw new Error("no form provided");const{id:i}=e,s=Ze(e.name),u=t.useCallback(()=>function(e,t){return dt.get(e)?.get(t)}(o,s.key)?.indexOf(i)??-1,[o,s.key,i]),a=t.useCallback(e=>{const t=G(o,s);return Array.isArray(t)?t[e]:void 0},[o,s]),c=u(),l=a(c),d=t.useRef({index:c,value:l});d.current={index:c,value:l};const f=et({computeIndex:u,computeValue:a}),[,m]=t.useReducer(mt,0);t.useEffect(()=>$e(o.emitter,"change",s,"leaf",()=>{const{computeIndex:e,computeValue:t}=f.current,r=e();r===d.current.index&&Object.is(t(r),d.current.value)||m()}),[o.emitter,s,f]);const y=Ze([...s.value,c]),p=Ke(o,y);return{value:l,setValue:tt(e=>{if(c<0)return;const t=[...G(o,s)??[]];c>=t.length||(t[c]=e,H(o,s,t))}),errors:p,error:p[0]?.message,name:y.key,index:c,form:o}}const ht=t.createContext(null),gt=ht.Provider;const vt=t.createContext(null),bt=vt.Provider;function kt(e,t,r){if(null!=r)if(Array.isArray(r))for(const n of r)kt(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){return e.replace(/["'[\],\s]+/g,"-").replace(/^-+|-+$/g,"")||"field"}function St(e,t,r){return{"aria-invalid":!!e||r["aria-invalid"],"aria-describedby":e?[r["aria-describedby"],xt(t)].filter(Boolean).join(" "):r["aria-describedby"]}}const Vt=n.forwardRef(({validate:e,eventToValue:t,initialValue:r,name:o,asProps:i,renderError:s,as:u,valueToProps:a,form:c,shouldUnregister:l,rules:d,validateDebounce:f,validateOnMount:m,valueAsNumber:y,valueAsDate:p,asyncAlways:h,disabled:g,delayError:v,mode:b,uncontrolled:k,...x},S)=>{const V=n.useRef(null),[w,E]=n.useState(0),{value:C,onChange:A,onBlur:F,error:O,name:M,disabled:D,focusRef:T}=at({name:o,form:c,initialValue:r,shouldUnregister:l,rules:d,validateDebounce:f,validateOnMount:m,delayError:v,disabled:g,asyncAlways:h,mode:b,uncontrolled:k||"file"===x.type,validate:(...t)=>{const r=V.current;if(!r||"function"!=typeof r.checkValidity||(r.setCustomValidity(""),!1!==r.checkValidity()))return e?e(...t):void 0;E(e=>e+1)}}),P=n.useCallback(e=>{V.current=e,T(e),function(e,t){"function"==typeof e?e(t):e&&(e.current=t)}(S,e)},[S,T]),j=u||"input";n.useEffect(()=>{const e=V.current;e&&"function"==typeof e.setCustomValidity&&("string"==typeof O?(e.setCustomValidity(O),e.reportValidity()):e.setCustomValidity(""))},[O]),n.useEffect(()=>{w>0&&V.current?.reportValidity()},[w]);const L="file"===x.type,B=t??(L?e=>e.target.files:y?e=>e.target.valueAsNumber:p?e=>e.target.valueAsDate:e=>e.target.value),R=a?a(C):L?{}:k?{defaultValue:C}:{value:C},N=xt(M),I=d?Ie(d):void 0;return n.createElement(n.Fragment,null,n.createElement(j,{...I,...x,name:M,onBlur:F,...i,...R,...St(O,M,x),disabled:D,onChange:e=>A(B(e)),ref:P}),O&&s?n.createElement("span",{id:N,role:"alert"},s(O,N)):null)}),wt=n.forwardRef(({name:e,form:t,initialValue:r,shouldUnregister:o,validate:i,rules:s,validateDebounce:u,validateOnMount:a,asyncAlways:c,disabled:l,delayError:d,mode:f,...m},y)=>{const{value:p,onChange:h,onBlur:g,error:v,name:b,disabled:k}=at({name:e,form:t,initialValue:r,shouldUnregister:o,validate:i,rules:s,validateDebounce:u,validateOnMount:a,asyncAlways:c,delayError:d,disabled:l,mode:f}),x=s?Ie(s):void 0;return n.createElement("input",{...x,...m,name:b,onBlur:g,type:"checkbox",checked:!!p,...St(v,b,m),disabled:k,onChange:e=>h(e.target.checked),ref:y})});function Et(e,t){return e?Array.isArray(t)?t:[]:t??""}const Ct=n.forwardRef(({name:e,multiple:t,children:r,form:o,initialValue:i,shouldUnregister:s,validate:u,rules:a,validateDebounce:c,validateOnMount:l,asyncAlways:d,disabled:f,delayError:m,mode:y,...p},h)=>{const{value:g,onChange:v,onBlur:b,error:k,name:x,disabled:S}=at({name:e,form:o,initialValue:i,shouldUnregister:s,validate:u,rules:a,validateDebounce:c,validateOnMount:l,asyncAlways:d,delayError:m,disabled:f,mode:y}),V=a?Ie(a):void 0;return n.createElement("select",{...V,...p,name:x,onBlur:b,multiple:t,value:Et(t,g),...St(k,x,p),disabled:S,onChange:e=>v(t?Array.from(e.target.selectedOptions,e=>e.value):e.target.value),ref:h},r)});exports.Checkbox=wt,exports.CheckboxGroupContext=vt,exports.CheckboxGroupProvider=bt,exports.FORM_ERROR=C,exports.Field=Vt,exports.Form=function({form:e,context:t,initialValues:r,values:o,shouldUnregister:i,validateOnMount:s,disabled:u,asyncAlways:a,onSubmit:c,onValidSubmit:l,onInvalidSubmit:d,action:f,shouldFocusError:m,...y}){const p=Ue({initialValues:r,values:o,shouldUnregister:i,validateOnMount:s,disabled:u,asyncAlways:a}),h=e||p;n.useEffect(()=>{void 0!==u&&Pe(h,u)},[h,u]);const g=Le(h,{onSubmit:c,onValidSubmit:l,onInvalidSubmit:d,shouldFocusError:m,onAction:f?e=>f(function(e){const t=new FormData;for(const r of Object.keys(e))kt(t,r,e[r]);return t}(e)):void 0}),{Provider:v}=t??ht;return n.createElement(v,{value:h},n.createElement("form",{...y,noValidate:!0,onSubmit:g}))},exports.FormContext=ht,exports.FormField=function({children:e,...t}){return e(at(t))},exports.FormProvider=gt,exports.Select=Ct,exports.VALIDATION_OUTCOME=A,exports.changeValue=function(e,t,r,n){Ee(e,y(t),r,n)},exports.changeValueByPath=Ee,exports.clearErrors=L,exports.createForm=Be,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 ut(t,e)},useFieldArray:function(t){return yt(t,e)},useFieldArrayItem:function(t){return pt(t,e)}}},exports.emitChangeByPath=Q,exports.ensureValidate=Se,exports.fieldErrorId=function(e){return xt(y(e).key)},exports.getDirtyFields=$,exports.getError=function(e,t){return F(e,y(t))},exports.getErrorByPath=F,exports.getErrors=D,exports.getFieldErrors=function(e,t){return M(e,y(t))},exports.getFieldErrorsByPath=M,exports.getFieldState=function(e,t){const r=y(t),{touched:n,validating:o}=e;return{value:G(e,r),error:F(e,r),errors:M(e,r),isDirty:R(e,r),isTouched:n.has(r.key),isValidating:o.has(r.key)}},exports.getFirstError=T,exports.getTouchedFields=J,exports.getValue=function(e,t){return G(e,y(t))},exports.getValueByPath=G,exports.getValues=z,exports.handleSubmit=Le,exports.hasErrors=B,exports.hasTouched=function(e,t){return U(e,y(t))},exports.hasTouchedByPath=U,exports.incrementSubmitCount=De,exports.isDirty=N,exports.isFieldDirtyByPath=R,exports.isTouched=function({touched:e}){return e.size>0},exports.registerFieldMode=Ce,exports.registerFieldValidateDeps=ve,exports.registerValidatorByPath=oe,exports.removeField=function(e,t,r){X(e,y(t),r)},exports.removeFieldByPath=X,exports.reset=function(t,r,n){const o=[];if(n?.keepValues)te(z(t),[],o);else if(n?.keepDirtyValues)for(const[e,r]of t.values){const n=JSON.parse(e);v(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||L(t);const{emitter:i,touched:s,values:u,deleted:a,validating:c}=t;u.clear(),a.clear(),x(t),n?.keepTouched||s.clear(),c.clear(),n?.keepIsSubmitting||(t.isSubmitting=!1),n?.keepSubmitCount||(t.submitCount=0),n?.keepIsSubmitted||(t.isSubmitted=!1),n?.keepIsSubmitSuccessful||(t.isSubmitSuccessful=void 0),V(t),h(t);for(const{segments:e,value:r}of o)H(t,y(e),r);e.emit(i,"change"),e.emit(i,"touched"),e.emit(i,"validating"),e.emit(i,"submitting"),e.emit(i,"submitCount"),e.emit(i,"submitSuccessful"),e.emit(i,"reset")},exports.resetField=function(t,r,n){const o=y(r),{emitter:i,values:s,touched:c,errors:l,deleted:d}=t;if(s.delete(o.key),x(t,o.key),void 0!==t.parsedValues){t.parsedValues=a(t.parsedValues,o.value);const e=u(t.initialValues,o.value);void 0!==e&&s.set(o.key,e)}n&&"value"in n&&s.set(o.key,n.value),Z(d,o),e.emit(i,"change"),!n?.keepTouched&&c.delete(o.key)&&e.emit(i,"touched",o),!n?.keepErrors&&l.delete(o.key)&&e.emit(i,"errors",o),V(t),h(t)},exports.revalidateDependentsOnChange=ke,exports.revalidateFormOnChange=he,exports.runFormValidate=ye,exports.seedValueByPath=K,exports.setDisabled=Pe,exports.setError=P,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=ee,exports.setIsSubmitting=Me,exports.setServerErrors=function(e,t,r){r?.keepExisting||L(e);for(const[r,n]of Object.entries(t))P(e,r,(Array.isArray(n)?n:[n]).map(e=>({type:"server",message:e})))},exports.setStatus=function(t,r){t.status=r,e.emit(t.emitter,"status")},exports.setSubmitSuccessful=Te,exports.setTouched=function(e,t){W(e,y(t))},exports.setTouchedByPath=W,exports.setValidatingByPath=ne,exports.setValue=function(e,t,r,n){H(e,y(t),r,n)},exports.setValueByPath=H,exports.subscribe=function(t,r){const{name:n,event:o="change",scope:i="branch",callback:s}=r;if(void 0===n)return e.on(t.emitter,o,s);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?We(t.emitter,o,r.key,s):$e(t.emitter,o,r,i,s)});return 1===u.length?u[0]:()=>u.forEach(e=>e())},exports.trigger=async function(t,r,n){const o=e=>m(t.emitter,"validating",()=>void 0===e?de(t):e.every(e=>!t.validating.has(e)),()=>!1);if(void 0===r){if(t.validators.forEach(e=>e()),await o(),t.validate&&await ye(t),n?.shouldTouch&&ie(t,[...t.validators.keys()]),n?.shouldFocus){const r=t.errors.keys().next().value;void 0!==r&&e.emit(t.emitter,"focusError",r)}return!B(t)}const i="string"==typeof r||w(r)?[y(r).key]:r.map(e=>y(e).key);if(i.forEach(e=>t.validators.get(e)?.()),await o(i),n?.shouldTouch&&ie(t,i),n?.shouldFocus){const r=i.find(e=>t.errors.has(e));void 0!==r&&e.emit(t.emitter,"focusError",r)}return i.every(e=>!t.errors.has(e))},exports.unregisterFieldMode=Ae,exports.unregisterFieldValidateDeps=be,exports.unsetValidatingByPath=re,exports.useCanSubmit=function(r){const{emitter:n}=r;return Je(t.useCallback(t=>{const r=e.on(n,"errors",t),o=e.on(n,"submitting",t);return()=>{r(),o()}},[n]),()=>!r.isSubmitting&&!B(r))},exports.useCheckboxGroupContext=function(){const e=t.useContext(vt);if(!e)throw new Error("no group provided");return e},exports.useDirtyFields=function(e){return ze(e,"change",$.bind(null,e))},exports.useError=function(e,t){return He(e,y(t))?.message},exports.useErrorByPath=He,exports.useField=at,exports.useFieldArray=function(e){return yt(e,ht)},exports.useFieldArrayItem=function(e){return pt(e,ht)},exports.useFieldErrors=function(e,t){return Ke(e,y(t))},exports.useFieldErrorsByPath=Ke,exports.useForm=Ue,exports.useFormContext=function(){const e=t.useContext(ht);if(!e)throw new Error("no form provided");return e},exports.useFormError=function(e){return He(e,y(C))?.message},exports.useFormErrors=function(e){return Ke(e,y(C))},exports.useFormState=function(r){const n=t.useCallback(()=>function(e){return{isDirty:N(e),dirtyFields:$(e),isTouched:e.touched.size>0,touchedFields:J(e),hasErrors:B(e),isValid:!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 Je(t.useCallback(t=>{const n=Xe.map(n=>e.on(r.emitter,n,t));return()=>{for(const e of n)e()}},[r.emitter]),n,Ye)},exports.useHasErrors=function(e){return ze(e,"errors",B.bind(null,e))},exports.useIsDirty=function(e){return ze(e,"change",N.bind(null,e))},exports.useIsFieldDirty=function(e,t){return Qe(e,y(t))},exports.useIsFieldDirtyByPath=Qe,exports.useIsLoading=function(e){return ze(e,"loading",()=>e.isLoading)},exports.useIsSubmitSuccessful=function(e){return ze(e.emitter,"submitSuccessful",()=>!!e.isSubmitSuccessful)},exports.useIsSubmitting=function(e){return ze(e,"submitting",()=>e.isSubmitting)},exports.useIsValid=function(e){return ze(e,"errors",()=>!B(e))},exports.useIsValidating=function(e){return ze(e,"validating",()=>e.validating.size>0)},exports.useStatus=function(e){return ze(e,"status",()=>e.status)},exports.useSubmitCount=function(e){return ze(e,"submitCount",()=>e.submitCount)},exports.useTouched=function(e,t){return Ge(e,y(t))},exports.useTouchedByPath=Ge,exports.useTouchedFields=function(e){return ze(e,"touched",J.bind(null,e))},exports.useTransform=function(e,r,n={}){const o=Ze(r),{toDisplay:i,fromDisplay:s}=n,u=Je(t.useCallback(t=>$e(e.emitter,"change",o,"leaf",t),[e.emitter,o.key]),()=>G(e,o));return{value:i?i(u):u,onChange:t.useCallback(t=>{Fe(e,o,s?s(t):t)},[e,o,s])}},exports.useValue=function(e,t,r){return _e(e,y(t),r)},exports.useValueByPath=_e,exports.useWatch=ze,exports.useWatchCore=Je,exports.userBlur=Oe,exports.userChangeByPath=Fe,exports.validate=Ve;
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()}}};
2
2
  //# sourceMappingURL=index.cjs.js.map