@formhaus/core 0.11.2 → 0.12.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/definition-validation/issues.ts","../src/definition-validation/format.ts","../src/definition-validation/conditions.ts","../src/definition-validation/context.ts","../src/definition-validation/fields.ts","../src/definition-validation/graph.ts","../src/definition-validation/shape.ts","../src/definition-validation/paths.ts","../src/definition-validation/structure.ts","../src/definition-validation/warnings.ts","../src/definition-validation/check-definition.ts","../src/definition-validation/validate-definition.ts","../src/engine/subscriptions.ts","../src/engine/warnings.ts","../src/engine/visibility-index.ts","../src/engine/visibility-state.ts","../src/engine/runtime.ts"],"names":["FormDefinitionError","issues","issue","create","severity","code","path","problem","hint","error","warning","pointer","key","isError","oneOf","values","shown","value","distance","a","b","row","_","index","next","j","closest","candidates","lower","candidate","suggest","match","FORMAT_VERSION","formatIssues","version","valid","OPERATORS","CONDITION_OPERATORS","operatorIssues","condition","keys","unknown","count","referenceIssues","context","owner","step","target","sameStep","allowed","conditionErrors","entry","conditionIssues","collect","source","name","collectAction","action","createContext","definition","validators","steps","entries","field","position","conditions","route","rangeIssue","rules","min","max","low","high","patternIssue","pattern","ruleIssues","fieldIssues","dependencyGraph","graph","link","owners","dependencies","known","fieldsOf","findCycles","visiting","cycles","start","stack","frame","neighbor","nodes","node","cycleIssues","cycle","graphIssues","isEntry","KINDS","item","typed","kind","list","check","required","text","option","RULES","validation","shapeIssues","input","format","metaIssues","conditional","successors","indexes","from","reachableSteps","seen","queue","RESERVED","stepIssues","first","later","keyIssues","reachable","exclusive","clash","other","structureIssues","LIST_OPERATORS","COMPARISONS","STRING_TYPES","expectedType","BOOLEAN_TYPES","valueIssue","operator","operand","mismatch","result","operands","expected","wrong","options","missing","conditionWarnings","optionIssues","defaults","ruleWarnings","rule","BUILT_IN_TYPES","numeric","ranges","sized","fieldWarnings","routeWarnings","targets","to","sibling","exits","definitionWarnings","warnings","shape","definitionErrors","checkDefinition","parseDefinition","errors","validateDefinition","listen","listeners","listener","createSubscriptions","structureVersion","structureListeners","fieldVersions","fieldListeners","set","fieldKeys","structureChanged","developmentIssues","assertDefinition","warn","indexConditions","dependent","conditionFields","dependents","createVisibility","allFields","getAllFields","fieldsByKey","routeFields","createActivePath","fieldDependents","stepDependents","stepOfField","visibilityDirty","canGoNextDirty","cache","isMultiStep","visible","isVisible","onPath","state","stepIndex","current","valuesChanged","validateStep","fieldKey","clearedFields","queued","cleared","held","clear","FormEngine","initialValues","createValues","total","previousSteps","valueChanged","previousError","clearError","stepId","dropServerErrors","revalidated","clearResolvedMatchErrors","changedFields","reconcileStepIndex","pruned","pruneOffPathErrors","applyValidationErrors","loading","previous","changeStep","submit","skipStep","handler","submitForm","validateForm","validateOne","getSubmitValues","goToStepWithField","resetEngine"],"mappings":"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","file":"chunk-OZ352IOK.js","sourcesContent":["export type DefinitionIssueCode =\n | 'invalid-type'\n | 'missing-property'\n | 'fields-and-steps'\n | 'duplicate-step-id'\n | 'duplicate-key'\n | 'reserved-key'\n | 'route-target'\n | 'unknown-field'\n | 'forward-reference'\n | 'condition-operator-count'\n | 'unknown-operator'\n | 'condition-value-mismatch'\n | 'condition-cycle'\n | 'invalid-pattern'\n | 'invalid-range'\n | 'rule-not-applicable'\n | 'missing-options'\n | 'default-not-in-options'\n | 'unknown-field-type'\n | 'unknown-validator'\n | 'skip-unreachable'\n | 'route-fallthrough'\n | 'unsupported-format-version';\n\nexport interface DefinitionIssue {\n code: DefinitionIssueCode;\n severity: 'error' | 'warning';\n path: string;\n message: string;\n hint?: string;\n}\n\nexport class FormDefinitionError extends Error {\n readonly issues: DefinitionIssue[];\n\n constructor(issues: DefinitionIssue[]) {\n super(`Invalid form definition:\\n${issues.map((issue) => issue.message).join('\\n')}`);\n this.name = 'FormDefinitionError';\n this.issues = issues;\n }\n}\n\nfunction create(severity: DefinitionIssue['severity']) {\n return (code: DefinitionIssueCode, path: string, problem: string, hint?: string): DefinitionIssue => ({\n code,\n severity,\n path,\n message: `${path || '/'}: ${problem}.${hint ? ` ${hint}.` : ''}`,\n ...(hint && { hint: `${hint}.` }),\n });\n}\n\nexport const error = create('error');\nexport const warning = create('warning');\n\nexport function pointer(key: string): string {\n return key.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n\nexport function isError(issue: DefinitionIssue): boolean {\n return issue.severity === 'error';\n}\n\nexport function oneOf(values: string[]): string {\n if (values.length === 1) return `Use ${JSON.stringify(values[0])}`;\n const shown = values.slice(0, 10).map((value) => JSON.stringify(value)).join(', ');\n return values.length > 10 ? `Use one of: ${shown}, ...` : `Use one of: ${shown}`;\n}\n\nfunction distance(a: string, b: string): number {\n let row = Array.from({ length: b.length + 1 }, (_, index) => index);\n for (let i = 1; i <= a.length; i++) {\n const next = [i];\n for (let j = 1; j <= b.length; j++) {\n next[j] = Math.min(row[j] + 1, next[j - 1] + 1, row[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));\n }\n row = next;\n }\n return row[b.length];\n}\n\nexport function closest(value: string, candidates: string[]): string | undefined {\n const lower = value.toLowerCase();\n return candidates.find((candidate) => candidate !== value && distance(lower, candidate.toLowerCase()) <= (candidate.length > 4 ? 2 : 1));\n}\n\nexport function suggest(value: string, candidates: string[]): string | undefined {\n const match = closest(value, candidates);\n if (match !== undefined) return `Use ${JSON.stringify(match)}`;\n return candidates.length ? oneOf(candidates) : undefined;\n}\n","import type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nexport const FORMAT_VERSION = '1.0';\n\nexport function formatIssues({ formatVersion: version }: Record<string, unknown>): DefinitionIssue[] {\n if (version === undefined) return [];\n const valid = typeof version === 'string' && /^[1-9]\\d*(\\.\\d+)?$/.test(version);\n if (valid && parseInt(version) <= parseInt(FORMAT_VERSION)) return [];\n return [valid\n ? error('unsupported-format-version', '/formatVersion', `format ${version} is not supported`, 'Upgrade @formhaus/core')\n : error('invalid-type', '/formatVersion', 'must be a version string', `Use \"${FORMAT_VERSION}\"`)];\n}\n","import { CONDITION_OPERATORS } from '../visibility/evaluate-condition';\nimport type { ShowCondition } from '../types';\nimport type { CheckContext, ConditionEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, pointer } from './issues';\n\nexport const OPERATORS: readonly string[] = CONDITION_OPERATORS;\n\nfunction operatorIssues({ suggest }: CheckContext, condition: ShowCondition, path: string): DefinitionIssue[] {\n const keys = Object.keys(condition).filter((key) => key !== 'field');\n const unknown = keys.filter((key) => !OPERATORS.includes(key));\n const issues = unknown.map((key) => error('unknown-operator', `${path}/${pointer(key)}`, `\"${key}\" is not a condition operator`, suggest(key, [...OPERATORS])));\n const count = keys.length - unknown.length;\n if (count !== 1 && !(count === 0 && unknown.length)) {\n const problem = count ? `the condition has ${count} operators` : 'the condition has no operator';\n issues.push(error('condition-operator-count', path, problem, `Use exactly one of: ${OPERATORS.join(', ')}`));\n }\n return issues;\n}\n\nfunction referenceIssues(context: CheckContext, { condition, path, owner, step, key }: ConditionEntry): DefinitionIssue[] {\n const target = context.keys.get(condition.field);\n if (!target) {\n const candidates = context.keyList.filter((candidate) => candidate !== key);\n return [error('unknown-field', `${path}/field`, `\"${condition.field}\" is not a field key`, context.suggest(condition.field, candidates))];\n }\n if (step < 0 || owner === 'action') return [];\n const sameStep = owner === 'step' ? 'this or a later step' : 'a later step';\n if (target.step < step || (owner !== 'step' && target.step === step)) return [];\n const allowed = owner === 'step' ? 'earlier steps' : 'this or an earlier step';\n return [error('forward-reference', `${path}/field`, `\"${condition.field}\" belongs to ${sameStep}`, `${owner === 'route' ? 'Route' : owner === 'step' ? 'Step' : 'Field'} conditions can use fields of ${allowed}`)];\n}\n\nexport function conditionErrors(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (typeof condition.field !== 'string') return [error('missing-property', `${path}/field`, 'the condition has no \"field\"', 'Add the key of the field to test')];\n return [...operatorIssues(context, condition, path), ...referenceIssues(context, entry)];\n}\n\nexport function conditionIssues(context: CheckContext): DefinitionIssue[] {\n return context.conditions.flatMap((entry) => conditionErrors(context, entry));\n}\n","import type { FormAction, FormDefinition, FormField, ShowCondition } from '../types';\n\nexport interface FieldEntry {\n field: FormField;\n path: string;\n step: number;\n}\n\nexport interface ConditionEntry {\n condition: ShowCondition;\n path: string;\n owner: 'field' | 'step' | 'route' | 'action';\n step: number;\n key?: string;\n}\n\nexport interface CheckContext {\n definition: FormDefinition;\n entries: FieldEntry[];\n keys: Map<string, FieldEntry>;\n keyList: string[];\n conditions: ConditionEntry[];\n validators?: Record<string, unknown>;\n suggest: (value: string, candidates: string[]) => string | undefined;\n}\n\ntype Owner = { show?: ShowCondition[]; showAny?: ShowCondition[] };\n\nfunction collect(target: ConditionEntry[], source: Owner, path: string, owner: ConditionEntry['owner'], step: number, key?: string): void {\n for (const name of ['show', 'showAny'] as const) {\n (source[name] ?? []).forEach((condition, index) => target.push({ condition, path: `${path}/${name}/${index}`, owner, step, key }));\n }\n}\n\nfunction collectAction(target: ConditionEntry[], action: FormAction | false | undefined, path: string, step: number): void {\n (action ? action.disabled ?? [] : []).forEach((condition, index) => (\n target.push({ condition, path: `${path}/disabled/${index}`, owner: 'action', step })\n ));\n}\n\nexport function createContext(definition: FormDefinition, validators?: Record<string, unknown>, suggest: CheckContext['suggest'] = () => undefined): CheckContext {\n const steps = definition.steps ?? [];\n const entries: FieldEntry[] = steps.length\n ? steps.flatMap((step, index) => step.fields.map((field, position) => ({ field, path: `/steps/${index}/fields/${position}`, step: index })))\n : (definition.fields ?? []).map((field, position) => ({ field, path: `/fields/${position}`, step: -1 }));\n const keys = new Map<string, FieldEntry>();\n for (const entry of entries) if (!keys.has(entry.field.key)) keys.set(entry.field.key, entry);\n const conditions: ConditionEntry[] = [];\n for (const entry of entries) collect(conditions, entry.field, entry.path, 'field', entry.step, entry.field.key);\n steps.forEach((step, index) => {\n collect(conditions, step, `/steps/${index}`, 'step', index);\n (step.routes ?? []).forEach((route, position) => collect(conditions, route, `/steps/${index}/routes/${position}`, 'route', index));\n for (const name of ['next', 'back', 'skip'] as const) collectAction(conditions, step[name], `/steps/${index}/${name}`, index);\n });\n collectAction(conditions, definition.submit, '/submit', -1);\n collectAction(conditions, definition.cancel, '/cancel', -1);\n return {\n definition,\n entries,\n keys,\n keyList: [...keys.keys()],\n conditions,\n validators,\n suggest,\n };\n}\n","import type { FieldValidation } from '../types';\nimport type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction rangeIssue(rules: FieldValidation, path: string, min: 'min' | 'minLength', max: 'max' | 'maxLength'): DefinitionIssue[] {\n const low = rules[min];\n const high = rules[max];\n if (low === undefined || high === undefined || low <= high) return [];\n return [error('invalid-range', `${path}/validation/${min}`, `${min} (${low}) is greater than ${max} (${high})`, `Lower ${min} or raise ${max}`)];\n}\n\nfunction patternIssue(pattern: string | undefined, path: string): DefinitionIssue[] {\n if (pattern === undefined) return [];\n try {\n new RegExp(pattern);\n return [];\n } catch {\n return [error('invalid-pattern', `${path}/validation/pattern`, `${JSON.stringify(pattern)} is not a valid regular expression`, 'Fix the pattern or escape special characters with a backslash')];\n }\n}\n\nfunction ruleIssues(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation;\n if (!rules) return [];\n const match = rules.matchField;\n return [\n ...rangeIssue(rules, path, 'minLength', 'maxLength'),\n ...rangeIssue(rules, path, 'min', 'max'),\n ...patternIssue(rules.pattern, path),\n ...(match === undefined || context.keys.has(match) ? [] : [error('unknown-field', `${path}/validation/matchField`, `\"${match}\" is not a field key`, context.suggest(match, context.keyList))]),\n ];\n}\n\nexport function fieldIssues(context: CheckContext): DefinitionIssue[] {\n return context.entries.flatMap((entry) => ruleIssues(context, entry));\n}\n","import type { CheckContext } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error } from './issues';\n\nfunction dependencyGraph({ definition, entries, keys }: CheckContext): Map<string, string[]> {\n const graph = new Map<string, string[]>();\n const link = (owners: string[], dependencies: string[]) => {\n const known = dependencies.filter((key) => keys.has(key));\n if (known.length) for (const owner of owners) graph.set(owner, [...(graph.get(owner) ?? []), ...known]);\n };\n const fieldsOf = (source: { show?: { field: string }[]; showAny?: { field: string }[] }) => (\n [...(source.show ?? []), ...(source.showAny ?? [])].map((condition) => condition.field)\n );\n for (const { field } of entries) link([field.key], fieldsOf(field));\n for (const step of definition.steps ?? []) link(step.fields.map((field) => field.key), fieldsOf(step));\n return graph;\n}\n\nfunction findCycles(graph: Map<string, string[]>): string[][] {\n const visiting = new Map<string, boolean>();\n const cycles: string[][] = [];\n for (const start of graph.keys()) {\n if (visiting.has(start)) continue;\n visiting.set(start, true);\n const stack: [string, number][] = [[start, 0]];\n while (stack.length > 0) {\n const frame = stack[stack.length - 1];\n const neighbor = graph.get(frame[0])?.[frame[1]++];\n if (neighbor === undefined) {\n visiting.set(frame[0], false);\n stack.pop();\n } else if (visiting.get(neighbor)) {\n const nodes = stack.map(([node]) => node);\n cycles.push([...nodes.slice(nodes.indexOf(neighbor)), neighbor]);\n } else if (!visiting.has(neighbor)) {\n visiting.set(neighbor, true);\n stack.push([neighbor, 0]);\n }\n }\n }\n return cycles;\n}\n\nfunction cycleIssues(context: CheckContext): DefinitionIssue[] {\n return findCycles(dependencyGraph(context)).map((cycle) => (\n error('condition-cycle', context.keys.get(cycle[0])!.path, `show conditions form a cycle: ${cycle.join(' -> ')}`, 'Remove one of the conditions in the cycle')\n ));\n}\n\nexport function graphIssues(context: CheckContext): DefinitionIssue[] {\n return cycleIssues(context);\n}\n","import type { DefinitionIssue } from './issues';\nimport { formatIssues } from './format';\nimport { error, pointer } from './issues';\n\ntype Entry = Record<string, unknown>;\ntype Check = (value: Entry, path: string) => DefinitionIssue[];\ntype Kind = 'string' | 'number' | 'boolean' | 'requirement' | 'scalar' | 'list';\n\nexport const isEntry = (value: unknown): value is Entry =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst KINDS: Record<Kind, [(value: unknown) => boolean, string]> = {\n string: [(value) => typeof value === 'string', 'a string'],\n number: [(value) => typeof value === 'number' && Number.isFinite(value), 'a number'],\n boolean: [(value) => typeof value === 'boolean', 'true or false'],\n requirement: [(value) => ['boolean', 'string'].includes(typeof value), 'true, false or a message string'],\n scalar: [(value) => ['string', 'number', 'boolean'].includes(typeof value), 'a string, number or boolean'],\n list: [(value) => Array.isArray(value) && value.every((item) => ['string', 'number'].includes(typeof item)), 'an array of strings or numbers'],\n};\n\nfunction typed(value: Entry, rules: Record<string, Kind>, path: string): DefinitionIssue[] {\n return Object.entries(rules).flatMap(([key, kind]) => {\n const [valid, name] = KINDS[kind];\n return value[key] === undefined || valid(value[key]) ? [] : [error('invalid-type', `${path}/${pointer(key)}`, `\"${key}\" must be ${name}`)];\n });\n}\n\nfunction list(value: unknown, path: string, name: string, check: Check, required = false): DefinitionIssue[] {\n if (value == null && !required) return [];\n if (!Array.isArray(value)) return [error('invalid-type', path, 'must be an array', required ? 'Use [] when there is nothing to list' : undefined)];\n return value.flatMap((item, index) => (\n isEntry(item) ? check(item, `${path}/${index}`) : [error('invalid-type', `${path}/${index}`, `must be ${name}`)]\n ));\n}\n\nfunction text(value: Entry, key: string, path: string): DefinitionIssue[] {\n return typeof value[key] === 'string' ? [] : [error('missing-property', `${path}/${key}`, `\"${key}\" must be a string`)];\n}\n\nconst condition: Check = (value, path) => typed(value, { field: 'string', eq: 'scalar', neq: 'scalar', in: 'list', notIn: 'list', notEmpty: 'boolean', gt: 'number', gte: 'number', lt: 'number', lte: 'number' }, path);\n\nfunction conditions(value: Entry, path: string): DefinitionIssue[] {\n return [\n ...list(value.show, `${path}/show`, 'a condition object', condition),\n ...list(value.showAny, `${path}/showAny`, 'a condition object', condition),\n ];\n}\n\nfunction action(value: unknown, path: string): DefinitionIssue[] {\n if (!isEntry(value)) return [];\n return [...typed(value, { label: 'string' }, path), ...list(value.disabled, `${path}/disabled`, 'a condition object', condition)];\n}\n\nconst option: Check = (value, path) => [...text(value, 'value', path), ...typed(value, { label: 'string' }, path)];\n\nconst RULES: Record<string, Kind> = {\n required: 'requirement', minLength: 'number', maxLength: 'number', min: 'number', max: 'number', pattern: 'string', matchField: 'string', validator: 'string',\n minLengthMessage: 'string', maxLengthMessage: 'string', minMessage: 'string', maxMessage: 'string', patternMessage: 'string', matchFieldMessage: 'string',\n};\n\nfunction validation(value: unknown, path: string): DefinitionIssue[] {\n if (value === undefined) return [];\n return isEntry(value) ? typed(value, RULES, path) : [error('invalid-type', path, 'must be an object of validation rules')];\n}\n\nfunction dependencies(value: unknown, path: string): DefinitionIssue[] {\n const valid = value === undefined || (Array.isArray(value) && value.every((key) => typeof key === 'string'));\n return valid ? [] : [error('invalid-type', path, 'must be an array of field keys')];\n}\n\nconst field: Check = (value, path) => [\n ...text(value, 'key', path),\n ...text(value, 'type', path),\n ...typed(value, { label: 'string', placeholder: 'string', helperText: 'string' }, path),\n ...conditions(value, path),\n ...list(value.options, `${path}/options`, 'an option object', option),\n ...validation(value.validation, `${path}/validation`),\n ...dependencies(value.optionsDependsOn, `${path}/optionsDependsOn`),\n];\n\nconst route: Check = (value, path) => [\n ...(value.to === null || typeof value.to === 'string' ? [] : [error('missing-property', `${path}/to`, '\"to\" must be a step id or null')]),\n ...conditions(value, path),\n];\n\nconst step: Check = (value, path) => [\n ...text(value, 'id', path),\n ...typed(value, { title: 'string', description: 'string' }, path),\n ...list(value.fields, `${path}/fields`, 'a field object', field, true),\n ...conditions(value, path),\n ...list(value.routes, `${path}/routes`, 'a route object', route),\n ...['next', 'back', 'skip'].flatMap((name) => action(value[name], `${path}/${name}`)),\n];\n\nexport function shapeIssues(input: unknown): DefinitionIssue[] {\n if (!isEntry(input)) return [error('invalid-type', '', 'the form definition must be an object')];\n const format = formatIssues(input);\n if (format.length) return format;\n return [\n ...list(input.fields, '/fields', 'a field object', field),\n ...list(input.steps, '/steps', 'a step object', step),\n ...action(input.submit, '/submit'),\n ...action(input.cancel, '/cancel'),\n ];\n}\n\nexport function metaIssues(input: Entry): DefinitionIssue[] {\n return [\n ...text(input, 'id', ''),\n ...(isEntry(input.submit) ? [] : [error('missing-property', '/submit', 'the submit action is missing', 'Add \"submit\": { \"label\": \"Submit\" }')]),\n ];\n}\n","import type { FormStep, StepRoute } from '../types';\n\nconst conditional = (source: Pick<StepRoute, 'show' | 'showAny'>) => !!(source.show?.length || source.showAny?.length);\n\nfunction successors(steps: FormStep[], indexes: Map<string, number>, from: number): number[] {\n const next: number[] = [];\n for (const route of steps[from].routes ?? []) {\n const target = route.to === null ? null : indexes.get(route.to);\n if (target === null && !conditional(route)) return next;\n if (target === null || target === undefined || target <= from) continue;\n next.push(target);\n if (!conditional(route) && !conditional(steps[target])) return next;\n }\n return from + 1 < steps.length ? [...next, from + 1] : next;\n}\n\nexport function reachableSteps(steps: FormStep[]): Set<number>[] {\n const indexes = new Map(steps.map((step, index) => [step.id, index]));\n return steps.map((_, start) => {\n const seen = new Set<number>();\n const queue = successors(steps, indexes, start);\n while (queue.length) {\n const index = queue.pop()!;\n if (seen.has(index)) continue;\n seen.add(index);\n queue.push(...successors(steps, indexes, index));\n if (conditional(steps[index]) && index + 1 < steps.length) queue.push(index + 1);\n }\n return seen;\n });\n}\n","import type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, oneOf } from './issues';\nimport { reachableSteps } from './paths';\n\nconst RESERVED = new Set([...Object.getOwnPropertyNames(Object.prototype), 'prototype']);\n\nfunction stepIssues({ definition }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const steps = definition.steps ?? [];\n const seen = new Map<string, number>();\n steps.forEach((step, index) => {\n const first = seen.get(step.id);\n if (first === undefined) seen.set(step.id, index);\n else issues.push(error('duplicate-step-id', `/steps/${index}/id`, `step id \"${step.id}\" is already used by /steps/${first}`, 'Give each step a unique id'));\n });\n steps.forEach((step, index) => (step.routes ?? []).forEach((route, position) => {\n if (route.to === null) return;\n const target = seen.get(route.to);\n if (target !== undefined && target > index) return;\n const later = steps.slice(index + 1).map((candidate) => candidate.id);\n const problem = target === undefined ? `\"${route.to}\" is not a step id` : `\"${route.to}\" is not a later step`;\n const hint = later.length ? `${oneOf(later)}, or null to end the form here` : 'Use null to end the form here';\n issues.push(error('route-target', `/steps/${index}/routes/${position}/to`, problem, hint));\n }));\n return issues;\n}\n\nfunction keyIssues({ definition, entries }: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n const reachable = reachableSteps(definition.steps ?? []);\n const exclusive = (a: FieldEntry, b: FieldEntry) => a.step !== b.step && !reachable[a.step]?.has(b.step);\n entries.forEach((entry, index) => {\n const { field, path } = entry;\n const clash = entries.slice(0, index).find((other) => other.field.key === field.key && !exclusive(other, entry));\n if (RESERVED.has(field.key)) {\n issues.push(error('reserved-key', `${path}/key`, `\"${field.key}\" is a built-in object property name`, 'Rename the field key'));\n } else if (clash) {\n issues.push(error('duplicate-key', `${path}/key`, `key \"${field.key}\" is already used by ${clash.path} on the same path`, 'Rename one of the fields, or move them to route branches that never meet'));\n }\n });\n return issues;\n}\n\nexport function structureIssues(context: CheckContext): DefinitionIssue[] {\n const { definition } = context;\n const both = !!definition.fields?.length && !!definition.steps?.length;\n return [\n ...(both ? [error('fields-and-steps', '', 'the definition has both \"fields\" and \"steps\"', 'Move the top-level fields into a step, or remove \"steps\"')] : []),\n ...stepIssues(context),\n ...keyIssues(context),\n ];\n}\n","import type { FormField } from '../types';\nimport { BOOLEAN_TYPES, BUILT_IN_TYPES } from '../validation/type-checks';\nimport { conditionErrors, OPERATORS } from './conditions';\nimport type { CheckContext, ConditionEntry, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { closest, oneOf, suggest, warning } from './issues';\n\nconst LIST_OPERATORS = ['in', 'notIn'];\nconst COMPARISONS = ['gt', 'gte', 'lt', 'lte'];\nconst STRING_TYPES = ['text', 'email', 'phone', 'password', 'textarea', 'date', 'datetime', 'select', 'radio', 'autocomplete'];\n\nfunction expectedType(field: FormField): string | undefined {\n if (field.type === 'number') return 'number';\n if (BOOLEAN_TYPES.includes(field.type)) return 'boolean';\n return STRING_TYPES.includes(field.type) ? 'string' : undefined;\n}\n\nfunction valueIssue(target: FormField, operator: string, operand: unknown, path: string): DefinitionIssue[] {\n const mismatch = (problem: string, hint: string) => [warning('condition-value-mismatch', path, problem, hint)];\n if (operator === 'notEmpty') return [];\n if (COMPARISONS.includes(operator)) {\n if (target.type !== 'multiselect' && !BOOLEAN_TYPES.includes(target.type)) return [];\n return mismatch(`\"${target.key}\" is a ${target.type} field, so \"${operator}\" never matches it`, 'Compare a number, text, radio or select field');\n }\n if (target.type === 'multiselect') {\n const result = operator === 'neq' || operator === 'notIn' ? 'always' : 'never';\n return mismatch(`\"${target.key}\" holds a list of values, so \"${operator}\" ${result} matches it`, 'Use notEmpty, or a select or radio field');\n }\n const operands = LIST_OPERATORS.includes(operator) && Array.isArray(operand) ? operand : [operand];\n const expected = expectedType(target);\n const wrong = expected && operands.find((item) => typeof item !== expected);\n if (expected && wrong !== undefined) return mismatch(`${JSON.stringify(wrong)} is a ${typeof wrong}, but \"${target.key}\" holds a ${expected}`, `Use a ${expected} value`);\n const options = expected === 'string' && !target.optionsFrom && target.options?.length ? target.options.map((option) => option.value) : null;\n const missing = options && operands.find((item) => !options.includes(item as string));\n return options && missing !== undefined ? mismatch(`${JSON.stringify(missing)} is not an option of \"${target.key}\"`, oneOf(options)) : [];\n}\n\nfunction conditionWarnings(context: CheckContext, entry: ConditionEntry): DefinitionIssue[] {\n const { condition, path } = entry;\n if (conditionErrors(context, entry).length) return [];\n const operator = OPERATORS.find((key) => key in condition)!;\n return valueIssue(context.keys.get(condition.field)!.field, operator, condition[operator as keyof typeof condition], `${path}/${operator}`);\n}\n\nfunction optionIssues({ field, path }: FieldEntry): DefinitionIssue[] {\n if (!['select', 'radio', 'multiselect'].includes(field.type)) return [];\n if (!Array.isArray(field.options)) {\n return field.optionsFrom ? [] : [warning('missing-options', `${path}/options`, `the ${field.type} field \"${field.key}\" has no options`, 'Add \"options\" or \"optionsFrom\"')];\n }\n const values = field.options.map((option) => option.value);\n const defaults = field.type === 'multiselect' && Array.isArray(field.defaultValue) ? field.defaultValue : [field.defaultValue];\n const missing = field.defaultValue === undefined || !values.length || field.optionsFrom ? undefined : defaults.find((value) => !values.includes(value as string));\n if (missing === undefined) return [];\n return [warning('default-not-in-options', `${path}/defaultValue`, `${JSON.stringify(missing)} is not an option of \"${field.key}\"`, oneOf(values))];\n}\n\nfunction ruleWarnings(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n const rules = field.validation ?? {};\n const rule = (name: string, problem: string, hint: string) => warning('rule-not-applicable', `${path}/validation/${name}`, problem, hint);\n const known = BUILT_IN_TYPES.includes(field.type);\n const numeric = field.type === 'number';\n const ranges = known && !numeric ? (['min', 'max'] as const).filter((name) => rules[name] !== undefined) : [];\n const sized = known && ['number', 'checkbox', 'switch'].includes(field.type) ? (['minLength', 'maxLength'] as const).filter((name) => rules[name] !== undefined) : [];\n const issues = [\n ...ranges.map((name) => rule(name, `\"${name}\" applies to number fields only`, `Use ${name}Length to limit text length`)),\n ...sized.map((name) => rule(name, `\"${name}\" does not apply to ${field.type} fields`, numeric ? 'Use min and max for numbers' : `Remove ${name}`)),\n ];\n const { validators } = context;\n if (rules.validator !== undefined && validators && !Object.prototype.hasOwnProperty.call(validators, rules.validator)) {\n issues.push(warning('unknown-validator', `${path}/validation/validator`, `the validator \"${rules.validator}\" is not registered`, 'Pass it in the \"validators\" option'));\n }\n return issues;\n}\n\nfunction fieldWarnings(context: CheckContext, entry: FieldEntry): DefinitionIssue[] {\n const { field, path } = entry;\n const match = BUILT_IN_TYPES.includes(field.type) ? undefined : closest(field.type, BUILT_IN_TYPES);\n return [\n ...(match === undefined ? [] : [warning('unknown-field-type', `${path}/type`, `\"${field.type}\" is not a built-in field type`, `Use \"${match}\", or register a component for \"${field.type}\"`)]),\n ...optionIssues(entry),\n ...ruleWarnings(context, entry),\n ...(field.optionsDependsOn ?? []).flatMap((key, index) => (\n context.keys.has(key) ? [] : [warning('unknown-field', `${path}/optionsDependsOn/${index}`, `\"${key}\" is not a field key`, suggest(key, context.keyList))]\n )),\n ];\n}\n\nfunction routeWarnings({ definition }: CheckContext): DefinitionIssue[] {\n const steps = definition.steps ?? [];\n return steps.flatMap((step, index) => {\n const issues: DefinitionIssue[] = [];\n const targets = new Set((step.routes ?? []).map((route) => route.to).filter((to) => to !== null));\n for (const target of targets) {\n const position = steps.findIndex((candidate) => candidate.id === target);\n const sibling = steps[position + 1];\n const exits = steps[position]?.routes?.some((route) => !route.show?.length && !route.showAny?.length);\n if (!sibling || !targets.has(sibling.id) || exits) continue;\n issues.push(warning('route-fallthrough', `/steps/${position}`, `branch \"${target}\" from \"${step.id}\" continues into the sibling branch \"${sibling.id}\"`, `Add an unconditional route on \"${target}\" to the step where the branches meet`));\n }\n if (step.skip && (step.next === false || !steps[1])) {\n issues.push(warning('skip-unreachable', `/steps/${index}/skip`, `step \"${step.id}\" has \"skip\" but no Continue button or later step`, 'Remove \"skip\", or remove \"next\": false'));\n }\n return issues;\n });\n}\n\nexport function definitionWarnings(context: CheckContext): DefinitionIssue[] {\n return [\n ...(typeof context.definition.title === 'string' ? [] : [warning('missing-property', '/title', '\"title\" must be a string', 'Add a title for host UI and editors')]),\n ...context.conditions.flatMap((entry) => conditionWarnings(context, entry)),\n ...context.entries.flatMap((entry) => fieldWarnings(context, entry)),\n ...routeWarnings(context),\n ];\n}\n","import type { FormDefinition } from '../types';\nimport { conditionIssues } from './conditions';\nimport { createContext, type CheckContext } from './context';\nimport { fieldIssues } from './fields';\nimport { graphIssues } from './graph';\nimport { FormDefinitionError, suggest, type DefinitionIssue } from './issues';\nimport { metaIssues, shapeIssues } from './shape';\nimport { structureIssues } from './structure';\nimport { definitionWarnings } from './warnings';\n\nexport interface CheckDefinitionOptions {\n validators?: Record<string, unknown>;\n}\n\ninterface Checks {\n validators?: Record<string, unknown>;\n suggest?: CheckContext['suggest'];\n warnings?: (context: CheckContext) => DefinitionIssue[];\n}\n\nfunction issues(input: unknown, { validators, suggest, warnings }: Checks = {}): DefinitionIssue[] {\n const shape = shapeIssues(input);\n if (shape.length) return shape;\n const context = createContext(input as FormDefinition, validators, suggest);\n return [\n ...metaIssues(input as Record<string, unknown>),\n ...structureIssues(context),\n ...conditionIssues(context),\n ...fieldIssues(context),\n ...graphIssues(context),\n ...(warnings ? warnings(context) : []),\n ];\n}\n\nexport function definitionErrors(input: unknown): DefinitionIssue[] {\n return issues(input);\n}\n\nexport function checkDefinition(input: unknown, options: CheckDefinitionOptions = {}): DefinitionIssue[] {\n return issues(input, { validators: options.validators, suggest, warnings: definitionWarnings });\n}\n\nexport function parseDefinition(input: unknown, options?: CheckDefinitionOptions): FormDefinition {\n const errors = issues(input, { suggest });\n if (errors.length) throw new FormDefinitionError(errors);\n return input as FormDefinition;\n}\n","import { checkDefinition } from './check-definition';\n\nexport function validateDefinition(input: unknown): string[] {\n return checkDefinition(input).map((issue) => issue.message);\n}\n","export interface NotifyOptions {\n fieldKeys?: Iterable<string>;\n structureChanged?: boolean;\n}\n\ntype Listener = () => void;\n\nfunction listen(listeners: Set<Listener>, listener: Listener): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n}\n\nexport function createSubscriptions() {\n let version = 0;\n let structureVersion = 0;\n const listeners = new Set<Listener>();\n const structureListeners = new Set<Listener>();\n const fieldVersions = new Map<string, number>();\n const fieldListeners = new Map<string, Set<Listener>>();\n\n return {\n subscribe: (listener: Listener) => listen(listeners, listener),\n getSnapshot: () => version,\n subscribeStructure: (listener: Listener) => listen(structureListeners, listener),\n getStructureSnapshot: () => structureVersion,\n getFieldSnapshot: (key: string) => fieldVersions.get(key) ?? 0,\n\n subscribeField(key: string, listener: Listener): () => void {\n const set = fieldListeners.get(key) ?? new Set();\n set.add(listener);\n fieldListeners.set(key, set);\n return () => {\n set.delete(listener);\n if (set.size === 0) fieldListeners.delete(key);\n };\n },\n\n notify({ fieldKeys = [], structureChanged = false }: NotifyOptions = {}): void {\n for (const key of new Set(fieldKeys)) {\n fieldVersions.set(key, (fieldVersions.get(key) ?? 0) + 1);\n for (const listener of fieldListeners.get(key) ?? []) listener();\n }\n if (structureChanged) {\n structureVersion++;\n for (const listener of structureListeners) listener();\n }\n version++;\n for (const listener of listeners) listener();\n },\n };\n}\n","import { checkDefinition, FormDefinitionError, type DefinitionIssue } from '../definition-validation';\nimport { definitionErrors } from '../definition-validation/check-definition';\nimport { isError } from '../definition-validation/issues';\nimport type { FormDefinition } from '../types';\nimport type { FormEngineOptions } from './engine-options';\n\nfunction developmentIssues(definition: FormDefinition, validators: Record<string, unknown>): DefinitionIssue[] | undefined {\n try {\n if (process.env.NODE_ENV !== 'production') return checkDefinition(definition, { validators });\n } catch (error) {\n if (!(error instanceof ReferenceError)) throw error;\n }\n return undefined;\n}\n\nexport function assertDefinition(definition: FormDefinition, options: FormEngineOptions, validators: Record<string, unknown>): void {\n const issues = developmentIssues(definition, validators) ?? definitionErrors(definition);\n const errors = issues.filter(isError);\n if (errors.length) throw new FormDefinitionError(errors);\n const warn = options.onWarning ?? ((issue: DefinitionIssue) => console.warn(`[formhaus] ${issue.message}`));\n for (const issue of issues) warn(issue);\n}\n","import type { FormField, FormStep } from '../types';\nimport { conditionFields } from './engine-utils';\n\nexport function indexConditions<T extends FormField | FormStep>(dependent: T, index: Map<string, Set<T>>): void {\n for (const field of conditionFields(dependent)) {\n const dependents = index.get(field) ?? new Set<T>();\n dependents.add(dependent);\n index.set(field, dependents);\n }\n}\n","import { conditionFields, getAllFields } from './engine-utils';\nimport { indexConditions } from './visibility-index';\nimport { createActivePath } from './step-routes';\nimport type { ValidatorFn } from '../validation';\nimport { validateStep } from '../validation';\nimport type { FormDefinition, FormField, FormStep } from '../types';\nimport { isVisible } from '../visibility';\n\ninterface VisibilityCache {\n visibleSteps: FormStep[];\n currentStep: FormStep | null;\n visibleFields: FormField[];\n canGoNext: boolean;\n}\n\ntype Values = Record<string, unknown>;\n\nexport type VisibilityState = ReturnType<typeof createVisibility>;\n\nexport function createVisibility(definition: FormDefinition) {\n const allFields = getAllFields(definition);\n const fieldsByKey = new Map<string, FormField[]>();\n const routeFields = new Set<string>();\n const path = createActivePath(definition);\n const fieldDependents = new Map<string, Set<FormField>>();\n const stepDependents = new Map<string, Set<FormStep>>();\n const stepOfField = new Map<FormField, FormStep>();\n let visibilityDirty = true;\n let canGoNextDirty = true;\n const cache: VisibilityCache = { visibleSteps: [], currentStep: null, visibleFields: [], canGoNext: false };\n\n for (const field of allFields) {\n fieldsByKey.set(field.key, [...(fieldsByKey.get(field.key) ?? []), field]);\n indexConditions(field, fieldDependents);\n }\n for (const step of definition.steps ?? []) {\n for (const field of step.fields) stepOfField.set(field, step);\n indexConditions(step, stepDependents);\n for (const route of step.routes ?? []) for (const key of conditionFields(route)) routeFields.add(key);\n }\n\n const isMultiStep = () => (definition.steps ?? []).length > 0;\n const visible = (source: FormField | FormStep, values: Values) => isVisible(source, path.values(values));\n const onPath = (field: FormField, values: Values) => {\n const step = stepOfField.get(field);\n return !step || path.steps(values).includes(step);\n };\n\n function state(values: Values, stepIndex: number): VisibilityCache {\n if (!visibilityDirty) return cache;\n visibilityDirty = false;\n if (!isMultiStep()) {\n cache.visibleSteps = [];\n cache.currentStep = null;\n cache.visibleFields = (definition.fields ?? []).filter((field) => visible(field, values));\n return cache;\n }\n const steps = cache.visibleSteps = path.steps(values);\n const current = cache.currentStep = steps[stepIndex] ?? steps[steps.length - 1] ?? null;\n cache.visibleFields = current ? current.fields.filter((field) => visible(field, values)) : [];\n return cache;\n }\n\n return {\n allFields,\n conditionValues: path.values,\n state,\n\n markChanged(structureChanged: boolean, valuesChanged: boolean): void {\n if (structureChanged || valuesChanged) path.invalidate();\n if (structureChanged) visibilityDirty = true;\n if (structureChanged || valuesChanged) canGoNextDirty = true;\n },\n\n getCanGoNext(values: Values, stepIndex: number, validators: Record<string, ValidatorFn>): boolean {\n const step = state(values, stepIndex).currentStep;\n if (!canGoNextDirty) return cache.canGoNext;\n canGoNextDirty = false;\n const errors = step ? validateStep(step, path.values(values), validators) : {};\n return cache.canGoNext = isMultiStep() && Object.keys(errors).length === 0;\n },\n\n findStepIndex(fieldKey: string, values: Values, stepIndex: number): number | null {\n const target = state(values, stepIndex).visibleSteps.findIndex((step) => step.fields.some((field) => field.key === fieldKey));\n return target === -1 ? null : target;\n },\n\n affectsStructure(key: string, clearedFields: Set<string>): boolean {\n return routeFields.has(key) || fieldDependents.has(key) || stepDependents.has(key) || clearedFields.size > 0;\n },\n\n activeField(key: string, values: Values): FormField | undefined {\n return fieldsByKey.get(key)?.find((field) => onPath(field, values) && visible(field, values));\n },\n\n reconcileHidden(values: Values, errors: Record<string, string>): Set<string> {\n path.invalidate();\n const queue = [...new Set([...fieldDependents.keys(), ...stepDependents.keys()])];\n const queued = new Set(queue);\n const cleared = new Set<string>();\n const held = (key: string) => values[key] !== undefined || errors[key] !== undefined;\n const clear = (key: string) => {\n delete values[key];\n delete errors[key];\n path.invalidate();\n cleared.add(key);\n if (queued.has(key)) return;\n queued.add(key);\n queue.push(key);\n };\n for (let index = 0; index < queue.length; index++) {\n const key = queue[index];\n queued.delete(key);\n for (const field of fieldDependents.get(key) ?? []) {\n if (onPath(field, values) && !visible(field, values) && held(field.key)) clear(field.key);\n }\n for (const step of stepDependents.get(key) ?? []) {\n if (!visible(step, values)) for (const field of step.fields) if (held(field.key)) clear(field.key);\n }\n }\n return cleared;\n },\n };\n}\n","import type { ValidatorFn } from '../validation';\nimport type { FormDefinition, FormField, FormStep } from '../types';\nimport type { FormEngineOptions, StepValidateFn, SubmitHandler } from './engine-options';\nimport { createValues } from './engine-utils';\nimport { changeStep, goToStepWithField, skipStep } from './navigation';\nimport type { EngineInternals, EngineState, RuntimeNotifyOptions } from './runtime-internals';\nimport { createSubscriptions, type NotifyOptions } from './subscriptions';\nimport {\n applyValidationErrors,\n getSubmitValues,\n resetEngine,\n validateForm,\n validateOne,\n clearError,\n clearResolvedMatchErrors,\n dropServerErrors,\n pruneOffPathErrors,\n} from './validation-state';\nimport { submitForm } from './submission';\nimport { reconcileStepIndex } from './step-routes';\nimport { assertDefinition } from './warnings';\nimport { createVisibility, type VisibilityState } from './visibility-state';\n\nexport class FormEngine<TValues extends object = Record<string, unknown>> {\n private readonly state: EngineState;\n private readonly skipped = new Map<string, string[]>();\n private validationEpoch = 0;\n private operationEpoch = 0;\n private readonly lifecycle: FormEngineOptions;\n\n private readonly validators: Record<string, ValidatorFn>;\n private get onStepValidate(): StepValidateFn | undefined { return this.lifecycle.onStepValidate; }\n private readonly visibility: VisibilityState;\n private readonly subscriptions = createSubscriptions();\n\n constructor(\n readonly definition: FormDefinition,\n initialValues?: Partial<NoInfer<TValues>>,\n options?: FormEngineOptions,\n ) {\n this.lifecycle = options ?? {};\n this.validators = options?.validators ?? {};\n assertDefinition(definition, this.lifecycle, this.validators);\n this.visibility = createVisibility(definition);\n const values = createValues(this.visibility.allFields, initialValues as Record<string, unknown> | undefined);\n this.state = { values, errors: {}, topLevelErrors: [], serverErrors: {}, serverFormErrors: [], currentStepIndex: 0, fieldLoading: {}, stepValidating: false, submitting: false };\n this.visibility.reconcileHidden(values, this.state.errors);\n }\n\n get values(): Readonly<Partial<TValues>> { return this.state.values as Partial<TValues>; }\n get errors(): Readonly<Record<string, string>> { return this.state.errors; }\n get topLevelErrors(): readonly string[] { return this.state.topLevelErrors; }\n get currentStepIndex(): number { return this.state.currentStepIndex; }\n get fieldLoading(): Readonly<Record<string, boolean>> { return this.state.fieldLoading; }\n get stepValidating(): boolean { return this.state.stepValidating; }\n get submitting(): boolean { return this.state.submitting; }\n\n get isMultiStep(): boolean {\n return (this.definition.steps ?? []).length > 0;\n }\n\n get visibleSteps(): FormStep[] {\n return this.view.visibleSteps;\n }\n\n get currentStep(): FormStep | null {\n return this.view.currentStep;\n }\n\n get visibleFields(): FormField[] {\n return this.view.visibleFields;\n }\n\n get isFirstStep(): boolean {\n return this.currentStepIndex === 0;\n }\n\n get isLastStep(): boolean {\n return this.currentStepIndex >= this.visibleSteps.length - 1;\n }\n\n get canGoNext(): boolean {\n return this.visibility.getCanGoNext(this.state.values, this.currentStepIndex, this.validators);\n }\n\n get stepErrors(): Record<string, string[]> {\n const result: Record<string, string[]> = {};\n for (const step of this.visibleSteps) {\n const keys = step.fields.map((field) => field.key).filter((key) => this.errors[key] !== undefined);\n if (keys.length > 0) result[step.id] = keys;\n }\n return result;\n }\n\n get progress(): { current: number; total: number } {\n const total = this.visibleSteps.length;\n return { current: Math.min(this.currentStepIndex + 1, total), total };\n }\n\n subscribe(listener: () => void): () => void {\n return this.subscriptions.subscribe(listener);\n }\n\n getSnapshot(): number {\n return this.subscriptions.getSnapshot();\n }\n\n subscribeField(key: string, listener: () => void): () => void {\n return this.subscriptions.subscribeField(key, listener);\n }\n\n getFieldSnapshot(key: string): number {\n return this.subscriptions.getFieldSnapshot(key);\n }\n\n subscribeStructure(listener: () => void): () => void {\n return this.subscriptions.subscribeStructure(listener);\n }\n\n getStructureSnapshot(): number {\n return this.subscriptions.getStructureSnapshot();\n }\n\n setValue(key: string, value: unknown): void {\n const { values, errors } = this.state;\n const previousSteps = this.isMultiStep ? this.visibleSteps : null;\n const valueChanged = !Object.is(values[key], value);\n const previousError = errors[key];\n values[key] = value;\n clearError(this.internals, key, valueChanged);\n for (const [stepId, keys] of this.skipped) if (valueChanged && keys.includes(key)) this.skipped.delete(stepId);\n const clearedFields = this.visibility.reconcileHidden(values, errors);\n dropServerErrors(this.internals, clearedFields);\n const revalidated = clearResolvedMatchErrors(this.internals, key);\n const changedFields = new Set([...clearedFields, ...revalidated]);\n if (valueChanged || previousError !== errors[key]) changedFields.add(key);\n const valuesChanged = valueChanged || clearedFields.size > 0;\n const structureChanged = valuesChanged && this.visibility.affectsStructure(key, clearedFields);\n if (previousSteps && structureChanged) {\n this.visibility.markChanged(true, true);\n this.state.currentStepIndex = reconcileStepIndex(previousSteps, this.visibleSteps, this.currentStepIndex);\n for (const pruned of pruneOffPathErrors(this.internals)) changedFields.add(pruned);\n }\n this.notify({ fieldKeys: changedFields, structureChanged, valuesChanged });\n }\n\n setErrors(errors: Record<string, string>): void {\n applyValidationErrors(this.internals, errors, true);\n }\n\n setFieldLoading(key: string, loading: boolean): void {\n const previous = this.state.fieldLoading[key] === true;\n if (loading) this.state.fieldLoading[key] = true;\n else delete this.state.fieldLoading[key];\n this.notify({ fieldKeys: previous === loading ? [] : [key] });\n }\n\n cancelPendingActions(): void {\n this.validationEpoch++;\n this.operationEpoch++;\n this.state.stepValidating = false;\n this.state.submitting = false;\n this.notify();\n }\n\n next(): Promise<boolean> { return changeStep(this.internals, 'next'); }\n back(): Promise<boolean> { return changeStep(this.internals, 'back'); }\n skip(submit?: SubmitHandler): Promise<boolean> { return skipStep(this.internals, submit); }\n submit(handler: SubmitHandler): Promise<boolean> { return submitForm(this.internals, handler); }\n isStepSkipped(stepId: string): boolean { return this.skipped.has(stepId); }\n validate(): Record<string, string> { return validateForm(this.internals); }\n validateField(key: string): string | null { return validateOne(this.internals, key); }\n getSubmitValues(): Partial<TValues> { return getSubmitValues(this.internals) as Partial<TValues>; }\n goToStepWithField(key: string): void { goToStepWithField(this.internals, key); }\n reset(values?: Record<string, unknown>): void { resetEngine(this.internals, values); }\n\n private get view() {\n return this.visibility.state(this.state.values, this.currentStepIndex);\n }\n\n private get internals(): EngineInternals {\n return this as unknown as EngineInternals;\n }\n\n private notify(options: RuntimeNotifyOptions = {}): void {\n this.visibility.markChanged(!!options.structureChanged, !!options.valuesChanged);\n this.subscriptions.notify(options);\n }\n}\n"]}
package/dist/cloud.js CHANGED
@@ -1,2 +1,2 @@
1
- export{d as CloudError,i as createSubmitter,h as fetchDefinition,g as fetchForm,k as sessionDraftStore}from'./chunk-TTELQZQA.js';//# sourceMappingURL=cloud.js.map
1
+ export{d as CloudError,i as createSubmitter,h as fetchDefinition,g as fetchForm,k as sessionDraftStore}from'./chunk-KXLWZLOO.js';//# sourceMappingURL=cloud.js.map
2
2
  //# sourceMappingURL=cloud.js.map
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { F as FormField, a as FormStep, S as ShowCondition, b as FormAction } from './definition-PdtKhxBh.js';
2
2
  export { D as DefaultFieldType, c as FieldOption, d as FieldType, e as FieldValidation, f as FormDefinition, g as StepRoute } from './definition-PdtKhxBh.js';
3
- export { A as AfterStepChangeFn, B as BeforeStepChangeFn, a as BeforeSubmitFn, F as FormEngine, b as FormEngineOptions, S as StepChangeContext, c as StepValidateFn, d as SubmitFn } from './runtime-Bmzuud3o.js';
3
+ export { A as AfterStepChangeFn, B as BeforeStepChangeFn, a as BeforeSubmitFn, F as FormEngine, b as FormEngineOptions, S as StepChangeContext, c as StepValidateFn, d as SubmitFn, e as SubmitHandler, f as SubmitResult } from './runtime-Dn2_UIxt.js';
4
4
  import { V as ValidatorFn } from './validate-field-dZd5yZAp.js';
5
5
  export { D as DefinitionIssue, a as DefinitionIssueCode, F as FormDefinitionError, v as validateFieldValue } from './validate-field-dZd5yZAp.js';
6
6
  export { C as CheckDefinitionOptions, c as checkDefinition, p as parseDefinition } from './check-definition-B-YU_XN6.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{b as FORMAT_VERSION,a as FormDefinitionError,g as FormEngine,c as checkDefinition,d as parseDefinition,e as validateDefinition}from'./chunk-NAKPTXVB.js';export{d as FormLifecycleError,g as evaluateCondition,e as getDefaultMessage,i as isActionDisabled,h as isVisible,n as validateFieldValue,p as validateFields,o as validateStep}from'./chunk-XLTPGPGA.js';//# sourceMappingURL=index.js.map
1
+ export{b as FORMAT_VERSION,a as FormDefinitionError,g as FormEngine,c as checkDefinition,d as parseDefinition,e as validateDefinition}from'./chunk-OZ352IOK.js';export{d as FormLifecycleError,g as evaluateCondition,e as getDefaultMessage,i as isActionDisabled,h as isVisible,n as validateFieldValue,p as validateFields,o as validateStep}from'./chunk-OBVVPPVA.js';//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
1
  export { j as CloudCallbacks, k as CloudControllerOptions, l as CloudState, m as cloudStateFor, n as createCloudController, o as initialCloudState } from './controller-DXb698eH.js';
2
- import { F as FormEngine } from './runtime-Bmzuud3o.js';
2
+ import { F as FormEngine } from './runtime-Dn2_UIxt.js';
3
3
  import './definition-PdtKhxBh.js';
4
4
  import './validate-field-dZd5yZAp.js';
5
5
 
package/dist/internal.js CHANGED
@@ -1,2 +1,2 @@
1
- import {f,i,j,g,d,e,a,c,b as b$1}from'./chunk-TTELQZQA.js';import {C}from'./chunk-XLTPGPGA.js';var G={multiselect:"list",checkbox:"flag",switch:"flag",number:"number",file:"file"};function y(e){return [...e.fields??[],...(e.steps??[]).flatMap(n=>n.fields)]}function h(e){return G[e.type]??"text"}function L(e,n){if(!Array.isArray(e.options))return true;let r=new Set(e.options.map(i=>String(i.value)));return (Array.isArray(n)?n:[n]).every(i=>r.has(String(i)))}function $(e,n,r){if(e&&h(e)!==h(n))return false;switch(h(n)){case "list":return Array.isArray(r);case "flag":return typeof r=="boolean";case "number":return typeof r=="number";case "text":return typeof r=="string";default:return e!==void 0}}function O(e,n,r){let i=new Map(r?y(r).map(o=>[o.key,o]):[]),a={};for(let o of y(n)){let u=e[o.key];u!=null&&$(i.get(o.key),o,u)&&L(o,u)&&(a[o.key]=u);}return a}function P(e,n){let r=new Set(y(e).map(o=>o.key)),i={},a=new Set;for(let[o,u]of Object.entries(n))r.has(o)?i[o]=u:a.add(u);return {fields:i,other:[...a]}}function V(e,n,r,i){let a={};for(let o of y(e)){let u=n[o.key]!==void 0&&n[o.key]!==null&&n[o.key]!=="";u&&!(o.key in r)?a[o.key]=b$1:i[o.key]&&(!u||o.key in r)&&(a[o.key]=i[o.key]);}return a}var b={definition:null,version:null,settings:{},loadError:null,errors:{},notice:null,initialValues:null,revision:0,attempt:0,done:false};function N(e){return e?{...b,definition:e.definition,version:e.version??null,settings:f(e.settings)}:b}function T(e,n=[]){return {tone:"error",message:e.message,action:e.action,details:n}}function z(e$1,n){let r=new AbortController,i$1,a$1=t=>{i$1??(i$1=t.renderToken);let c=i$1===t.renderToken?void 0:i$1;return i({...e$1,version:t.version,renderToken:t.renderToken,firstRenderToken:c})},o=i(e$1),u=e$1.initialForm,m=()=>!r.signal.aborted,s=b,f$1=t=>{s={...s,...t},n.onChange(s);},p=t=>f$1({...t,attempt:s.attempt+1});function w(t){o=a$1(t);let c=e$1.draftStore?.load(e$1.id,t.version)??null;f$1({...N(t),revision:s.revision,attempt:s.attempt,initialValues:c});}async function j$1(t,c$1){let l=s.definition;try{let d$1=await g(e$1,r.signal,t.version);if(!m())return;if(d$1.version===void 0||d$1.version<(t.version??0))throw new d(409,"form_updated");let g$1=l?O(c$1,d$1.definition,l):{};o=a$1(d$1),p({definition:d$1.definition,version:d$1.version,settings:f(d$1.settings),initialValues:g$1,revision:s.revision+1,errors:V(d$1.definition,c$1,g$1,t.errors??{}),notice:{tone:"info",message:a,action:null,details:[]}});}catch{m()&&p({notice:{tone:"error",...c(409,"form_updated"),details:[]}});}}async function q(t,c){let l=t instanceof d?t:e(t);if(l.code==="form_updated"&&l.version!==void 0)return j$1(l,c);if(l.status!==422)return p({notice:T(l)});let d$1=l.errors??{},g=s.definition?P(s.definition,d$1):{fields:d$1,other:[]};p({errors:g.fields,notice:g.other.length>0?T(l,g.other):null});}return {start(){if(s.loadError&&f$1({loadError:null}),u){w(u),u=void 0;return}g(e$1,r.signal).then(t=>{m()&&w(t);},t=>{m()&&(f$1({loadError:t}),n.onError?.(t));});},dispose(){r.abort();},saveDraft(t){s.definition&&!s.done&&e$1.draftStore?.save(e$1.id,s.version??void 0,j(s.definition,t));},again(){f$1({done:false,errors:{},notice:null,initialValues:null,revision:s.revision+1});},async submit(t,c){s.notice&&f$1({notice:null});try{let l=await o(t,c);if(!m())return;e$1.draftStore?.clear(e$1.id),f$1({done:!0}),n.onSuccess?.(l);}catch(l){throw m()&&(await q(l,t),n.onError?.(l)),l}}}}var _='input:not([type="hidden"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';function I(e,n){n.scrollIntoView?.({block:"center"}),e.focus({preventScroll:true});}function B(e,n){if(n)return I(n,n);let r=e?.querySelector('[aria-invalid="true"]');r&&I(r.matches(_)?r:r.querySelector(_)??r,r);}function H(e,n){let r=Object.keys(n);return r.length===Object.keys(e).length&&r.every(i=>e[i]===n[i])}function U(e,n){return Object.entries(n).every(([r,i])=>e.errors[r]===i||e.topLevelErrors.includes(i))}function W(e,n,r){return !n||!H(n,r)||!U(e,r)}function se(e){return C(e,"next","autoAdvance")}var M=e=>e.replace(/[^A-Za-z0-9_-]/g,"-");function le(e,n){return `${e?M(e):"fh"}-${M(n)}`}export{se as autoAdvance,N as cloudStateFor,z as createCloudController,le as fieldDomId,B as focusProblem,b as initialCloudState,W as shouldApplyExternalErrors};//# sourceMappingURL=internal.js.map
1
+ import {f,i,j,g,d,e,a,c,b as b$1}from'./chunk-KXLWZLOO.js';import {E}from'./chunk-OBVVPPVA.js';var G={multiselect:"list",checkbox:"flag",switch:"flag",number:"number",file:"file"};function y(e){return [...e.fields??[],...(e.steps??[]).flatMap(n=>n.fields)]}function h(e){return G[e.type]??"text"}function L(e,n){if(!Array.isArray(e.options))return true;let r=new Set(e.options.map(i=>String(i.value)));return (Array.isArray(n)?n:[n]).every(i=>r.has(String(i)))}function $(e,n,r){if(e&&h(e)!==h(n))return false;switch(h(n)){case "list":return Array.isArray(r);case "flag":return typeof r=="boolean";case "number":return typeof r=="number";case "text":return typeof r=="string";default:return e!==void 0}}function O(e,n,r){let i=new Map(r?y(r).map(o=>[o.key,o]):[]),a={};for(let o of y(n)){let u=e[o.key];u!=null&&$(i.get(o.key),o,u)&&L(o,u)&&(a[o.key]=u);}return a}function P(e,n){let r=new Set(y(e).map(o=>o.key)),i={},a=new Set;for(let[o,u]of Object.entries(n))r.has(o)?i[o]=u:a.add(u);return {fields:i,other:[...a]}}function V(e,n,r,i){let a={};for(let o of y(e)){let u=n[o.key]!==void 0&&n[o.key]!==null&&n[o.key]!=="";u&&!(o.key in r)?a[o.key]=b$1:i[o.key]&&(!u||o.key in r)&&(a[o.key]=i[o.key]);}return a}var b={definition:null,version:null,settings:{},loadError:null,errors:{},notice:null,initialValues:null,revision:0,attempt:0,done:false};function N(e){return e?{...b,definition:e.definition,version:e.version??null,settings:f(e.settings)}:b}function T(e,n=[]){return {tone:"error",message:e.message,action:e.action,details:n}}function z(e$1,n){let r=new AbortController,i$1,a$1=t=>{i$1??(i$1=t.renderToken);let c=i$1===t.renderToken?void 0:i$1;return i({...e$1,version:t.version,renderToken:t.renderToken,firstRenderToken:c})},o=i(e$1),u=e$1.initialForm,m=()=>!r.signal.aborted,s=b,f$1=t=>{s={...s,...t},n.onChange(s);},p=t=>f$1({...t,attempt:s.attempt+1});function w(t){o=a$1(t);let c=e$1.draftStore?.load(e$1.id,t.version)??null;f$1({...N(t),revision:s.revision,attempt:s.attempt,initialValues:c});}async function j$1(t,c$1){let l=s.definition;try{let d$1=await g(e$1,r.signal,t.version);if(!m())return;if(d$1.version===void 0||d$1.version<(t.version??0))throw new d(409,"form_updated");let g$1=l?O(c$1,d$1.definition,l):{};o=a$1(d$1),p({definition:d$1.definition,version:d$1.version,settings:f(d$1.settings),initialValues:g$1,revision:s.revision+1,errors:V(d$1.definition,c$1,g$1,t.errors??{}),notice:{tone:"info",message:a,action:null,details:[]}});}catch{m()&&p({notice:{tone:"error",...c(409,"form_updated"),details:[]}});}}async function q(t,c){let l=t instanceof d?t:e(t);if(l.code==="form_updated"&&l.version!==void 0)return j$1(l,c);if(l.status!==422)return p({notice:T(l)});let d$1=l.errors??{},g=s.definition?P(s.definition,d$1):{fields:d$1,other:[]};p({errors:g.fields,notice:g.other.length>0?T(l,g.other):null});}return {start(){if(s.loadError&&f$1({loadError:null}),u){w(u),u=void 0;return}g(e$1,r.signal).then(t=>{m()&&w(t);},t=>{m()&&(f$1({loadError:t}),n.onError?.(t));});},dispose(){r.abort();},saveDraft(t){s.definition&&!s.done&&e$1.draftStore?.save(e$1.id,s.version??void 0,j(s.definition,t));},again(){f$1({done:false,errors:{},notice:null,initialValues:null,revision:s.revision+1});},async submit(t,c){s.notice&&f$1({notice:null});try{let l=await o(t,c);if(!m())return;e$1.draftStore?.clear(e$1.id),f$1({done:!0}),n.onSuccess?.(l);}catch(l){throw m()&&(await q(l,t),n.onError?.(l)),l}}}}var _='input:not([type="hidden"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';function I(e,n){n.scrollIntoView?.({block:"center"}),e.focus({preventScroll:true});}function B(e,n){if(n)return I(n,n);let r=e?.querySelector('[aria-invalid="true"]');r&&I(r.matches(_)?r:r.querySelector(_)??r,r);}function H(e,n){let r=Object.keys(n);return r.length===Object.keys(e).length&&r.every(i=>e[i]===n[i])}function U(e,n){return Object.entries(n).every(([r,i])=>e.errors[r]===i||e.topLevelErrors.includes(i))}function W(e,n,r){return !n||!H(n,r)||!U(e,r)}function se(e){return E(e,"next","autoAdvance")}var M=e=>e.replace(/[^A-Za-z0-9_-]/g,"-");function le(e,n){return `${e?M(e):"fh"}-${M(n)}`}export{se as autoAdvance,N as cloudStateFor,z as createCloudController,le as fieldDomId,B as focusProblem,b as initialCloudState,W as shouldApplyExternalErrors};//# sourceMappingURL=internal.js.map
2
2
  //# sourceMappingURL=internal.js.map
@@ -12,6 +12,14 @@ type BeforeStepChangeFn = (context: StepChangeContext) => boolean | void | Promi
12
12
  type AfterStepChangeFn = (context: StepChangeContext) => void | Promise<void>;
13
13
  type BeforeSubmitFn = (values: Record<string, unknown>) => boolean | void | Promise<boolean | void>;
14
14
  type SubmitFn = (values: Record<string, unknown>, skippedSteps: string[]) => void | Promise<void>;
15
+ type SubmitResult = {
16
+ ok: true;
17
+ } | {
18
+ ok: false;
19
+ errors?: Record<string, string>;
20
+ formErrors?: string[];
21
+ };
22
+ type SubmitHandler = (values: Record<string, unknown>, skippedSteps: string[]) => void | SubmitResult | Promise<void | SubmitResult>;
15
23
  interface FormEngineOptions {
16
24
  onBeforeStepChange?: BeforeStepChangeFn;
17
25
  onAfterStepChange?: AfterStepChangeFn;
@@ -48,6 +56,7 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
48
56
  get isFirstStep(): boolean;
49
57
  get isLastStep(): boolean;
50
58
  get canGoNext(): boolean;
59
+ get stepErrors(): Record<string, string[]>;
51
60
  get progress(): {
52
61
  current: number;
53
62
  total: number;
@@ -64,8 +73,8 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
64
73
  cancelPendingActions(): void;
65
74
  next(): Promise<boolean>;
66
75
  back(): Promise<boolean>;
67
- skip(submit?: SubmitFn): Promise<boolean>;
68
- submit(handler: SubmitFn): Promise<boolean>;
76
+ skip(submit?: SubmitHandler): Promise<boolean>;
77
+ submit(handler: SubmitHandler): Promise<boolean>;
69
78
  isStepSkipped(stepId: string): boolean;
70
79
  validate(): Record<string, string>;
71
80
  validateField(key: string): string | null;
@@ -77,4 +86,4 @@ declare class FormEngine<TValues extends object = Record<string, unknown>> {
77
86
  private notify;
78
87
  }
79
88
 
80
- export { type AfterStepChangeFn as A, type BeforeStepChangeFn as B, FormEngine as F, type StepChangeContext as S, type BeforeSubmitFn as a, type FormEngineOptions as b, type StepValidateFn as c, type SubmitFn as d };
89
+ export { type AfterStepChangeFn as A, type BeforeStepChangeFn as B, FormEngine as F, type StepChangeContext as S, type BeforeSubmitFn as a, type FormEngineOptions as b, type StepValidateFn as c, type SubmitFn as d, type SubmitHandler as e, type SubmitResult as f };
@@ -1,6 +1,6 @@
1
1
  var Formhaus=(function(exports){'use strict';typeof console==="undefined"&&(globalThis.console={log:function(){},warn:function(){},error:function(){}});
2
- var De=Object.defineProperty,Re=Object.defineProperties;var Ve=Object.getOwnPropertyDescriptors;var Nt=Object.getOwnPropertySymbols;var Oe=Object.prototype.hasOwnProperty,Ae=Object.prototype.propertyIsEnumerable;var Pt=(t,e,n)=>e in t?De(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n,h=(t,e)=>{for(var n in e||(e={}))Oe.call(e,n)&&Pt(t,n,e[n]);if(Nt)for(var n of Nt(e))Ae.call(e,n)&&Pt(t,n,e[n]);return t},kt=(t,e)=>Re(t,Ve(e));var _t=["eq","neq","in","notIn","notEmpty","gt","gte","lt","lte"];function G(t){return t==null||t===""||Array.isArray(t)&&!t.length}function Me(t){let e=typeof t=="string"&&t.trim()!==""?Number(t):t;return typeof e=="number"&&Number.isFinite(e)?e:void 0}function et(t,e,n){let r=Me(t);return r!==void 0&&n(r,e)}function St(t,e){let n=e[t.field];return t.eq!==void 0?n===t.eq:t.neq!==void 0?n!==t.neq:t.in!==void 0?t.in.includes(n):t.notIn!==void 0?!t.notIn.includes(n):t.notEmpty!==void 0?!t.notEmpty||!G(n):t.gt!==void 0?et(n,t.gt,(r,i)=>r>i):t.gte!==void 0?et(n,t.gte,(r,i)=>r>=i):t.lt!==void 0?et(n,t.lt,(r,i)=>r<i):t.lte!==void 0?et(n,t.lte,(r,i)=>r<=i):false}var $=class extends Error{constructor(e){super(`Invalid form definition:
2
+ var Oe=Object.defineProperty,Ae=Object.defineProperties;var Me=Object.getOwnPropertyDescriptors;var qt=Object.getOwnPropertySymbols;var Le=Object.prototype.hasOwnProperty,je=Object.prototype.propertyIsEnumerable;var Ut=(t,e,n)=>e in t?Oe(t,e,{enumerable:true,configurable:true,writable:true,value:n}):t[e]=n,m=(t,e)=>{for(var n in e||(e={}))Le.call(e,n)&&Ut(t,n,e[n]);if(qt)for(var n of qt(e))je.call(e,n)&&Ut(t,n,e[n]);return t},St=(t,e)=>Ae(t,Me(e));var Kt=["eq","neq","in","notIn","notEmpty","gt","gte","lt","lte"];function W(t){return t==null||t===""||Array.isArray(t)&&!t.length}function Te(t){let e=typeof t=="string"&&t.trim()!==""?Number(t):t;return typeof e=="number"&&Number.isFinite(e)?e:void 0}function rt(t,e,n){let r=Te(t);return r!==void 0&&n(r,e)}function wt(t,e){let n=e[t.field];return t.eq!==void 0?n===t.eq:t.neq!==void 0?n!==t.neq:t.in!==void 0?t.in.includes(n):t.notIn!==void 0?!t.notIn.includes(n):t.notEmpty!==void 0?!t.notEmpty||!W(n):t.gt!==void 0?rt(n,t.gt,(r,i)=>r>i):t.gte!==void 0?rt(n,t.gte,(r,i)=>r>=i):t.lt!==void 0?rt(n,t.lt,(r,i)=>r<i):t.lte!==void 0?rt(n,t.lte,(r,i)=>r<=i):false}var R=class extends Error{constructor(e){super(`Invalid form definition:
3
3
  ${e.map(n=>n.message).join(`
4
- `)}`),this.name="FormDefinitionError",this.issues=e;}};function qt(t){return (e,n,r,i)=>h({code:e,severity:t,path:n,message:`${n||"/"}: ${r}.${i?` ${i}.`:""}`},i&&{hint:`${i}.`})}var m=qt("error"),E=qt("warning");function nt(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function Kt(t){return t.severity==="error"}function N(t){if(t.length===1)return `Use ${JSON.stringify(t[0])}`;let e=t.slice(0,10).map(n=>JSON.stringify(n)).join(", ");return t.length>10?`Use one of: ${e}, ...`:`Use one of: ${e}`}function Le(t,e){let n=Array.from({length:e.length+1},(r,i)=>i);for(let r=1;r<=t.length;r++){let i=[r];for(let o=1;o<=e.length;o++)i[o]=Math.min(n[o]+1,i[o-1]+1,n[o-1]+(t[r-1]===e[o-1]?0:1));n=i;}return n[e.length]}function vt(t,e){let n=t.toLowerCase();return e.find(r=>r!==t&&Le(n,r.toLowerCase())<=(r.length>4?2:1))}function Y(t,e){let n=vt(t,e);return n!==void 0?`Use ${JSON.stringify(n)}`:e.length?N(e):void 0}var W=_t;function Te({suggest:t},e,n){let r=Object.keys(e).filter(a=>a!=="field"),i=r.filter(a=>!W.includes(a)),o=i.map(a=>m("unknown-operator",`${n}/${nt(a)}`,`"${a}" is not a condition operator`,t(a,[...W]))),s=r.length-i.length;if(s!==1&&!(s===0&&i.length)){let a=s?`the condition has ${s} operators`:"the condition has no operator";o.push(m("condition-operator-count",n,a,`Use exactly one of: ${W.join(", ")}`));}return o}function je(t,{condition:e,path:n,owner:r,step:i,key:o}){let s=t.keys.get(e.field);if(!s){let c=t.keyList.filter(l=>l!==o);return [m("unknown-field",`${n}/field`,`"${e.field}" is not a field key`,t.suggest(e.field,c))]}if(i<0||r==="action")return [];let a=r==="step"?"this or a later step":"a later step";if(s.step<i||r!=="step"&&s.step===i)return [];let u=r==="step"?"earlier steps":"this or an earlier step";return [m("forward-reference",`${n}/field`,`"${e.field}" belongs to ${a}`,`${r==="route"?"Route":r==="step"?"Step":"Field"} conditions can use fields of ${u}`)]}function wt(t,e){let{condition:n,path:r}=e;return typeof n.field!="string"?[m("missing-property",`${r}/field`,'the condition has no "field"',"Add the key of the field to test")]:[...Te(t,n,r),...je(t,e)]}function Ut(t){return t.conditions.flatMap(e=>wt(t,e))}function xt(t,e,n,r,i,o){var s;for(let a of ["show","showAny"])((s=e[a])!=null?s:[]).forEach((u,c)=>t.push({condition:u,path:`${n}/${a}/${c}`,owner:r,step:i,key:o}));}function Et(t,e,n,r){var i;(e?(i=e.disabled)!=null?i:[]:[]).forEach((o,s)=>t.push({condition:o,path:`${n}/disabled/${s}`,owner:"action",step:r}));}function Bt(t,e,n=()=>{}){var a,u;let r=(a=t.steps)!=null?a:[],i=r.length?r.flatMap((c,l)=>c.fields.map((f,d)=>({field:f,path:`/steps/${l}/fields/${d}`,step:l}))):((u=t.fields)!=null?u:[]).map((c,l)=>({field:c,path:`/fields/${l}`,step:-1})),o=new Map;for(let c of i)o.has(c.field.key)||o.set(c.field.key,c);let s=[];for(let c of i)xt(s,c.field,c.path,"field",c.step,c.field.key);return r.forEach((c,l)=>{var f;xt(s,c,`/steps/${l}`,"step",l),((f=c.routes)!=null?f:[]).forEach((d,g)=>xt(s,d,`/steps/${l}/routes/${g}`,"route",l));for(let d of ["next","back","skip"])Et(s,c[d],`/steps/${l}/${d}`,l);}),Et(s,t.submit,"/submit",-1),Et(s,t.cancel,"/cancel",-1),{definition:t,entries:i,keys:o,keyList:[...o.keys()],conditions:s,validators:e,suggest:n}}function Gt(t,e,n,r){let i=t[n],o=t[r];return i===void 0||o===void 0||i<=o?[]:[m("invalid-range",`${e}/validation/${n}`,`${n} (${i}) is greater than ${r} (${o})`,`Lower ${n} or raise ${r}`)]}function Ne(t,e){if(t===void 0)return [];try{return new RegExp(t),[]}catch(n){return [m("invalid-pattern",`${e}/validation/pattern`,`${JSON.stringify(t)} is not a valid regular expression`,"Fix the pattern or escape special characters with a backslash")]}}function Pe(t,{field:e,path:n}){let r=e.validation;if(!r)return [];let i=r.matchField;return [...Gt(r,n,"minLength","maxLength"),...Gt(r,n,"min","max"),...Ne(r.pattern,n),...i===void 0||t.keys.has(i)?[]:[m("unknown-field",`${n}/validation/matchField`,`"${i}" is not a field key`,t.suggest(i,t.keyList))]]}function Yt(t){return t.entries.flatMap(e=>Pe(t,e))}function _e({definition:t,entries:e,keys:n}){var s;let r=new Map,i=(a,u)=>{var l;let c=u.filter(f=>n.has(f));if(c.length)for(let f of a)r.set(f,[...(l=r.get(f))!=null?l:[],...c]);},o=a=>{var u,c;return [...(u=a.show)!=null?u:[],...(c=a.showAny)!=null?c:[]].map(l=>l.field)};for(let{field:a}of e)i([a.key],o(a));for(let a of (s=t.steps)!=null?s:[])i(a.fields.map(u=>u.key),o(a));return r}function qe(t){var r;let e=new Map,n=[];for(let i of t.keys()){if(e.has(i))continue;e.set(i,true);let o=[[i,0]];for(;o.length>0;){let s=o[o.length-1],a=(r=t.get(s[0]))==null?void 0:r[s[1]++];if(a===void 0)e.set(s[0],false),o.pop();else if(e.get(a)){let u=o.map(([c])=>c);n.push([...u.slice(u.indexOf(a)),a]);}else e.has(a)||(e.set(a,true),o.push([a,0]));}}return n}function Ke(t){return qe(_e(t)).map(e=>m("condition-cycle",t.keys.get(e[0]).path,`show conditions form a cycle: ${e.join(" -> ")}`,"Remove one of the conditions in the cycle"))}function Wt(t){return Ke(t)}var Ht="1.0";function Jt({formatVersion:t}){if(t===void 0)return [];let e=typeof t=="string"&&/^[1-9]\d*(\.\d+)?$/.test(t);return e&&parseInt(t)<=parseInt(Ht)?[]:[e?m("unsupported-format-version","/formatVersion",`format ${t} is not supported`,"Upgrade @formhaus/core"):m("invalid-type","/formatVersion","must be a version string",`Use "${Ht}"`)]}var J=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),Ue={string:[t=>typeof t=="string","a string"],number:[t=>typeof t=="number"&&Number.isFinite(t),"a number"],boolean:[t=>typeof t=="boolean","true or false"],scalar:[t=>["string","number","boolean"].includes(typeof t),"a string, number or boolean"],list:[t=>Array.isArray(t)&&t.every(e=>["string","number"].includes(typeof e)),"an array of strings or numbers"]};function P(t,e,n){return Object.entries(e).flatMap(([r,i])=>{let[o,s]=Ue[i];return t[r]===void 0||o(t[r])?[]:[m("invalid-type",`${n}/${nt(r)}`,`"${r}" must be ${s}`)]})}function D(t,e,n,r,i=false){return t==null&&!i?[]:Array.isArray(t)?t.flatMap((o,s)=>J(o)?r(o,`${e}/${s}`):[m("invalid-type",`${e}/${s}`,`must be ${n}`)]):[m("invalid-type",e,"must be an array",i?"Use [] when there is nothing to list":void 0)]}function H(t,e,n){return typeof t[e]=="string"?[]:[m("missing-property",`${n}/${e}`,`"${e}" must be a string`)]}var It=(t,e)=>P(t,{field:"string",eq:"scalar",neq:"scalar",in:"list",notIn:"list",notEmpty:"boolean",gt:"number",gte:"number",lt:"number",lte:"number"},e);function $t(t,e){return [...D(t.show,`${e}/show`,"a condition object",It),...D(t.showAny,`${e}/showAny`,"a condition object",It)]}function Ct(t,e){return J(t)?[...P(t,{label:"string"},e),...D(t.disabled,`${e}/disabled`,"a condition object",It)]:[]}var Be=(t,e)=>[...H(t,"value",e),...P(t,{label:"string"},e)],Ge={minLength:"number",maxLength:"number",min:"number",max:"number",pattern:"string",matchField:"string",validator:"string"};function Ye(t,e){return t===void 0?[]:J(t)?P(t,Ge,e):[m("invalid-type",e,"must be an object of validation rules")]}function We(t,e){return t===void 0||Array.isArray(t)&&t.every(r=>typeof r=="string")?[]:[m("invalid-type",e,"must be an array of field keys")]}var zt=(t,e)=>[...H(t,"key",e),...H(t,"type",e),...P(t,{label:"string",placeholder:"string",helperText:"string"},e),...$t(t,e),...D(t.options,`${e}/options`,"an option object",Be),...Ye(t.validation,`${e}/validation`),...We(t.optionsDependsOn,`${e}/optionsDependsOn`)],He=(t,e)=>[...t.to===null||typeof t.to=="string"?[]:[m("missing-property",`${e}/to`,'"to" must be a step id or null')],...$t(t,e)],Je=(t,e)=>[...H(t,"id",e),...P(t,{title:"string",description:"string"},e),...D(t.fields,`${e}/fields`,"a field object",zt,true),...$t(t,e),...D(t.routes,`${e}/routes`,"a route object",He),...["next","back","skip"].flatMap(n=>Ct(t[n],`${e}/${n}`))];function Xt(t){if(!J(t))return [m("invalid-type","","the form definition must be an object")];let e=Jt(t);return e.length?e:[...D(t.fields,"/fields","a field object",zt),...D(t.steps,"/steps","a step object",Je),...Ct(t.submit,"/submit"),...Ct(t.cancel,"/cancel")]}function Zt(t){return [...H(t,"id",""),...J(t.submit)?[]:[m("missing-property","/submit","the submit action is missing",'Add "submit": { "label": "Submit" }')]]}var rt=t=>{var e,n;return !!((e=t.show)!=null&&e.length||(n=t.showAny)!=null&&n.length)};function Qt(t,e,n){var i;let r=[];for(let o of (i=t[n].routes)!=null?i:[]){let s=o.to===null?null:e.get(o.to);if(s===null&&!rt(o))return r;if(!(s==null||s<=n)&&(r.push(s),!rt(o)&&!rt(t[s])))return r}return n+1<t.length?[...r,n+1]:r}function te(t){let e=new Map(t.map((n,r)=>[n.id,r]));return t.map((n,r)=>{let i=new Set,o=Qt(t,e,r);for(;o.length;){let s=o.pop();i.has(s)||(i.add(s),o.push(...Qt(t,e,s)),rt(t[s])&&s+1<t.length&&o.push(s+1));}return i})}var ze=new Set([...Object.getOwnPropertyNames(Object.prototype),"prototype"]);function Xe({definition:t}){var i;let e=[],n=(i=t.steps)!=null?i:[],r=new Map;return n.forEach((o,s)=>{let a=r.get(o.id);a===void 0?r.set(o.id,s):e.push(m("duplicate-step-id",`/steps/${s}/id`,`step id "${o.id}" is already used by /steps/${a}`,"Give each step a unique id"));}),n.forEach((o,s)=>{var a;return ((a=o.routes)!=null?a:[]).forEach((u,c)=>{if(u.to===null)return;let l=r.get(u.to);if(l!==void 0&&l>s)return;let f=n.slice(s+1).map(b=>b.id),d=l===void 0?`"${u.to}" is not a step id`:`"${u.to}" is not a later step`,g=f.length?`${N(f)}, or null to end the form here`:"Use null to end the form here";e.push(m("route-target",`/steps/${s}/routes/${c}/to`,d,g));})}),e}function Ze({definition:t,entries:e}){var o;let n=[],r=te((o=t.steps)!=null?o:[]),i=(s,a)=>{var u;return s.step!==a.step&&!((u=r[s.step])!=null&&u.has(a.step))};return e.forEach((s,a)=>{let{field:u,path:c}=s,l=e.slice(0,a).find(f=>f.field.key===u.key&&!i(f,s));ze.has(u.key)?n.push(m("reserved-key",`${c}/key`,`"${u.key}" is a built-in object property name`,"Rename the field key")):l&&n.push(m("duplicate-key",`${c}/key`,`key "${u.key}" is already used by ${l.path} on the same path`,"Rename one of the fields, or move them to route branches that never meet"));}),n}function ee(t){var r,i;let{definition:e}=t;return [...!!((r=e.fields)!=null&&r.length)&&!!((i=e.steps)!=null&&i.length)?[m("fields-and-steps","",'the definition has both "fields" and "steps"','Move the top-level fields into a step, or remove "steps"')]:[],...Xe(t),...Ze(t)]}var v={email:"Enter a valid email",number:"Enter a number",boolean:"Must be true or false",option:"Select one of the available options",options:"Must be a list of available options",string:"Must be text",date:"Enter a valid date",datetime:"Enter a valid date and time",file:"Must be a file reference",value:"Invalid value"};function R(t,e){var n,r;switch(t){case "required":return "This field is required";case "minLength":return `Must be at least ${e==null?void 0:e.min} ${(n=e==null?void 0:e.unit)!=null?n:"characters"}`;case "maxLength":return `Must be at most ${e==null?void 0:e.max} ${(r=e==null?void 0:e.unit)!=null?r:"characters"}`;case "min":return `Must be at least ${e==null?void 0:e.min}`;case "max":return `Must be at most ${e==null?void 0:e.max}`;case "pattern":return "Invalid format";case "matchField":return "Fields must match";default:return "Invalid value"}}var _=["checkbox","switch"],X=["text","email","phone","number","password","select","autocomplete","multiselect","checkbox","radio","switch","file","date","datetime","textarea"],z=1e4,Qe=254,tn=1e3,ne=/^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/,en=/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/,re="\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])",nn=new RegExp(`^${re}$`),rn=new RegExp(`^${re}T(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d{1,3})?)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)?$`),on=new Set(["text","phone","password","textarea","autocomplete"]),sn=new Map([["email",[ne,v.email,Qe]],["date",[nn,v.date,z]],["datetime",[rn,v.datetime,z]]]);function an(t){let[e,n,r]=t.split(/\D/).map(Number);return r<=new Date(new Date(0).setUTCFullYear(e,n,0)).getUTCDate()}var un=new Set(["password","number","select","radio","file"]);function Z(t,e){return typeof e=="string"&&!un.has(t.type)?e.trim():e}function ie(t,e){let n=Z(t,e);if(t.type!=="number"||typeof n!="string"||!en.test(n))return n;let r=Number(n);return Number.isFinite(r)?r:n}var oe=t=>t.optionsFrom?void 0:t.options;function se(t,e){let n=oe(t);return !n||n.some(r=>r.value===e)}function ae(t,e){var r,i,o,s;let n=Math.min(z,(i=(r=t.validation)==null?void 0:r.maxLength)!=null?i:z);return e.length<=n?null:(s=(o=t.validation)==null?void 0:o.maxLengthMessage)!=null?s:R("maxLength",{max:n})}function ln(t,e){var r,i;return Array.isArray(e)?e.length>((i=(r=oe(t))==null?void 0:r.length)!=null?i:tn)?v.option:e.every(o=>typeof o=="string"&&o.length<=z&&se(t,o))?null:v.option:v.options}function it(t,e,n){return typeof e=="string"?ae(t,e):n}function cn(t,e,[n,r,i]){var o;return typeof e!="string"?r:(o=ae(t,e))!=null?o:e.length<=i&&n.test(e)&&(n===ne||an(e))?null:r}function fn(t,e){return typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e)?null:it(t,e,v.value)}function dn(t,e){return e==null||e===""||t.type==="multiselect"&&Array.isArray(e)&&!e.length}function Dt(t,e){var r;if(dn(t,e))return null;if(_.includes(t.type))return typeof e=="boolean"?null:v.boolean;if(t.type==="number")return typeof e=="number"&&Number.isFinite(e)?null:v.number;if(t.type==="multiselect")return ln(t,e);if(t.type==="file")return it(t,e,v.file);let n=sn.get(t.type);return n?cn(t,e,n):t.type==="select"||t.type==="radio"?(r=it(t,e,v.option))!=null?r:se(t,e)?null:v.option:on.has(t.type)?it(t,e,v.string):fn(t,e)}function ue(t,e){return t.type==="file"||!X.includes(t.type)?null:Dt(t,e)}var pn=["in","notIn"],mn=["gt","gte","lt","lte"],hn=["text","email","phone","password","textarea","date","datetime","select","radio","autocomplete"];function gn(t){return t.type==="number"?"number":_.includes(t.type)?"boolean":hn.includes(t.type)?"string":void 0}function yn(t,e,n,r){var l;let i=(f,d)=>[E("condition-value-mismatch",r,f,d)];if(e==="notEmpty")return [];if(mn.includes(e))return t.type!=="multiselect"&&!_.includes(t.type)?[]:i(`"${t.key}" is a ${t.type} field, so "${e}" never matches it`,"Compare a number, text, radio or select field");if(t.type==="multiselect"){let f=e==="neq"||e==="notIn"?"always":"never";return i(`"${t.key}" holds a list of values, so "${e}" ${f} matches it`,"Use notEmpty, or a select or radio field")}let o=pn.includes(e)&&Array.isArray(n)?n:[n],s=gn(t),a=s&&o.find(f=>typeof f!==s);if(s&&a!==void 0)return i(`${JSON.stringify(a)} is a ${typeof a}, but "${t.key}" holds a ${s}`,`Use a ${s} value`);let u=s==="string"&&!t.optionsFrom&&((l=t.options)!=null&&l.length)?t.options.map(f=>f.value):null,c=u&&o.find(f=>!u.includes(f));return u&&c!==void 0?i(`${JSON.stringify(c)} is not an option of "${t.key}"`,N(u)):[]}function bn(t,e){let{condition:n,path:r}=e;if(wt(t,e).length)return [];let i=W.find(o=>o in n);return yn(t.keys.get(n.field).field,i,n[i],`${r}/${i}`)}function Fn({field:t,path:e}){if(!["select","radio","multiselect"].includes(t.type))return [];if(!Array.isArray(t.options))return t.optionsFrom?[]:[E("missing-options",`${e}/options`,`the ${t.type} field "${t.key}" has no options`,'Add "options" or "optionsFrom"')];let n=t.options.map(o=>o.value),r=t.type==="multiselect"&&Array.isArray(t.defaultValue)?t.defaultValue:[t.defaultValue],i=t.defaultValue===void 0||!n.length||t.optionsFrom?void 0:r.find(o=>!n.includes(o));return i===void 0?[]:[E("default-not-in-options",`${e}/defaultValue`,`${JSON.stringify(i)} is not an option of "${t.key}"`,N(n))]}function kn(t,{field:e,path:n}){var f;let r=(f=e.validation)!=null?f:{},i=(d,g,b)=>E("rule-not-applicable",`${n}/validation/${d}`,g,b),o=X.includes(e.type),s=e.type==="number",a=o&&!s?["min","max"].filter(d=>r[d]!==void 0):[],u=o&&["number","checkbox","switch"].includes(e.type)?["minLength","maxLength"].filter(d=>r[d]!==void 0):[],c=[...a.map(d=>i(d,`"${d}" applies to number fields only`,`Use ${d}Length to limit text length`)),...u.map(d=>i(d,`"${d}" does not apply to ${e.type} fields`,s?"Use min and max for numbers":`Remove ${d}`))],{validators:l}=t;return r.validator!==void 0&&l&&!Object.prototype.hasOwnProperty.call(l,r.validator)&&c.push(E("unknown-validator",`${n}/validation/validator`,`the validator "${r.validator}" is not registered`,'Pass it in the "validators" option')),c}function Sn(t,e){var o;let{field:n,path:r}=e,i=X.includes(n.type)?void 0:vt(n.type,X);return [...i===void 0?[]:[E("unknown-field-type",`${r}/type`,`"${n.type}" is not a built-in field type`,`Use "${i}", or register a component for "${n.type}"`)],...Fn(e),...kn(t,e),...((o=n.optionsDependsOn)!=null?o:[]).flatMap((s,a)=>t.keys.has(s)?[]:[E("unknown-field",`${r}/optionsDependsOn/${a}`,`"${s}" is not a field key`,Y(s,t.keyList))])]}function vn({definition:t}){var n;let e=(n=t.steps)!=null?n:[];return e.flatMap((r,i)=>{var a,u,c;let o=[],s=new Set(((a=r.routes)!=null?a:[]).map(l=>l.to).filter(l=>l!==null));for(let l of s){let f=e.findIndex(b=>b.id===l),d=e[f+1],g=(c=(u=e[f])==null?void 0:u.routes)==null?void 0:c.some(b=>{var V,x;return !((V=b.show)!=null&&V.length)&&!((x=b.showAny)!=null&&x.length)});!d||!s.has(d.id)||g||o.push(E("route-fallthrough",`/steps/${f}`,`branch "${l}" from "${r.id}" continues into the sibling branch "${d.id}"`,`Add an unconditional route on "${l}" to the step where the branches meet`));}return r.skip&&(r.next===false||!e[1])&&o.push(E("skip-unreachable",`/steps/${i}/skip`,`step "${r.id}" has "skip" but no Continue button or later step`,'Remove "skip", or remove "next": false')),o})}function le(t){return [...typeof t.definition.title=="string"?[]:[E("missing-property","/title",'"title" must be a string',"Add a title for host UI and editors")],...t.conditions.flatMap(e=>bn(t,e)),...t.entries.flatMap(e=>Sn(t,e)),...vn(t)]}function Rt(t,{validators:e,suggest:n,warnings:r}={}){let i=Xt(t);if(i.length)return i;let o=Bt(t,e,n);return [...Zt(t),...ee(o),...Ut(o),...Yt(o),...Wt(o),...r?r(o):[]]}function ce(t){return Rt(t)}function ot(t,e={}){return Rt(t,{validators:e.validators,suggest:Y,warnings:le})}function st(t,e){let n=Rt(t,{suggest:Y});if(n.length)throw new $(n);return t}function at(t){var e,n;return [...(e=t.show)!=null?e:[],...(n=t.showAny)!=null?n:[]].map(r=>r.field)}function ut(t){var e,n;return (e=t.steps)!=null&&e.length?t.steps.flatMap(r=>r.fields):(n=t.fields)!=null?n:[]}function q(t,e){let n={};for(let i of t)i.defaultValue!==void 0&&(n[i.key]=i.defaultValue);let r=e!=null?e:{};for(let i of Object.keys(r))i!=="__proto__"&&(n[i]=r[i]);return n}function M(t,e){let n=new Set([...Object.keys(t),...Object.keys(e)]);return new Set([...n].filter(r=>!Object.is(t[r],e[r])))}var Vt=class extends Error{constructor(n,r){super(`The action completed, but ${n} failed: ${r instanceof Error?r.message:String(r)}`);this.phase=n;this.committed=true;this.name="FormLifecycleError",this.cause=r;}};async function lt(t,e){try{await e();}catch(n){throw new Vt(t,n)}}function fe(t){return t.visibleSteps.map(e=>e.id).join(`
5
- `)}function Q(t,e){let n=fe(t),r=Object.keys(e).filter(i=>e[i]!==void 0).map(i=>[i,t.values[i]]);return ()=>fe(t)!==n||r.some(([i,o])=>!Object.is(t.values[i],o))}function I(t,e){var r,i;let n=o=>St(o,e);return ((r=t.show)!=null?r:[]).every(n)&&(!((i=t.showAny)!=null&&i.length)||t.showAny.some(n))}function wn(t,e){return G(t)||t===false&&_.includes(e.type)}function de(t,e,n,r){var s,a;let i=n[`min${e}`],o=n[`max${e}`];if(i!==void 0&&t<i)return (s=n[`min${e}Message`])!=null?s:R(`min${e}`,{min:i,unit:r});if(o!==void 0&&t>o)return (a=n[`max${e}Message`])!=null?a:R(`max${e}`,{max:o,unit:r})}function xn(t,e){var n;if(e.pattern!==void 0)try{return new RegExp(e.pattern).test(String(t))?void 0:(n=e.patternMessage)!=null?n:R("pattern")}catch(r){return}}function K(t,e,n,r){var l,f,d,g,b;let i=Z(t,e),o=(l=t.validation)!=null?l:{},s=(f=o.matchFieldMessage)!=null?f:R("matchField");if(wn(i,t))return o.required?typeof o.required=="string"?o.required:R("required"):o.matchField!==void 0&&!G(n[o.matchField])?s:null;let a=ue(t,i);if(a)return a;let u=typeof i=="string"||Array.isArray(i)?de(i.length,"Length",o,Array.isArray(i)?"items":void 0):typeof i=="number"?de(i,"",o):void 0,c=o.matchField!==void 0&&i!==n[o.matchField]?s:void 0;return ((b=(d=u!=null?u:xn(i,o))!=null?d:c)!=null?b:o.validator?(g=r==null?void 0:r[o.validator])==null?void 0:g.call(r,i,n):void 0)||null}function L(t,e,n){return ct(t.fields,e,n)}function ct(t,e,n){let r={};for(let i of t){if(!I(i,e))continue;let o=K(i,e[i.key],e,n);o&&(r[i.key]=o);}return r}function ft(t,e,n=false){let r=t.errors;t.state.errors={},t.state.topLevelErrors=[];for(let[o,s]of Object.entries(e))t.visibility.activeField(o,t.values)?t.errors[o]=s:t.topLevelErrors.push(s);let i=n&&pe(t,e);t.notify({fieldKeys:M(r,t.errors),structureChanged:i});}function pe(t,e){let n=Object.keys(e).find(i=>t.errors[i]!==void 0),r=n&&t.isMultiStep?t.visibility.findStepIndex(n,t.values,t.currentStepIndex):null;return r===null||r===t.currentStepIndex?false:(t.state.currentStepIndex=r,true)}function me(t,e){var r;let n=[];for(let i of t.visibility.allFields)((r=i.validation)==null?void 0:r.matchField)!==e||t.errors[i.key]===void 0||K(i,t.values[i.key],T(t),t.validators)||(delete t.errors[i.key],n.push(i.key));return n}function dt(t){let e=new Set(t.visibleSteps.flatMap(r=>r.fields.map(i=>i.key))),n=Object.keys(t.errors).filter(r=>!e.has(r));for(let r of n)delete t.errors[r];return n}function T(t){return U(t)}function En(t,e){for(let n of [...t.skipped.values()].flat())delete e[n];return e}function tt(t,e=false){var o;let n=t.errors,r={};if(t.isMultiStep)for(let s of t.visibleSteps)t.skipped.has(s.id)||Object.assign(r,L(s,T(t),t.validators));else Object.assign(r,ct((o=t.definition.fields)!=null?o:[],T(t),t.validators));t.state.errors=r;let i=e&&pe(t,r);return t.notify({fieldKeys:M(n,r),structureChanged:i}),r}function he(t,e){let n=t.visibility.activeField(e,t.values);if(!n)return null;let r=t.errors[e],i=K(n,t.values[e],T(t),t.validators);i?t.errors[e]=i:delete t.errors[e];let o=Object.is(r,t.errors[e])?[]:[e];return t.notify({fieldKeys:o}),i}function U(t){let e=h({},t.visibility.conditionValues(t.values));for(let n of Object.keys(e)){let r=t.visibility.activeField(n,t.values);r&&(e[n]=Z(r,e[n]));}return En(t,e)}function ge(t,e){let n=t.values,r=t.errors,i=Object.keys(t.fieldLoading);t.validationEpoch++,t.operationEpoch++,t.state.submitting=false,t.state.values=q(t.visibility.allFields,e),t.state.errors={},t.state.topLevelErrors=[],t.state.fieldLoading={},t.state.stepValidating=false,t.state.currentStepIndex=0,t.skipped.clear(),t.visibility.reconcileHidden(t.values,t.errors);let o=M(n,t.values),s=new Set([...o,...M(r,t.errors),...i]);t.notify({fieldKeys:s,structureChanged:true,valuesChanged:o.size>0});}function Ot(t,e){var s,a;let n=(s=t.steps)!=null?s:[],r=new Map(n.map((u,c)=>[u.id,c])),i=[],o={};for(let u=0;u<n.length;){let c=n[u];if(!I(c,o)){u++;continue}i.push(c),Object.assign(o,be(c,e,o));let l=(a=c.routes)==null?void 0:a.find(f=>{var d;return I(f,o)&&(f.to===null||((d=r.get(f.to))!=null?d:-1)>u&&I(n[r.get(f.to)],o))});if((l==null?void 0:l.to)===null)break;u=l?r.get(l.to):u+1;}return i}function ye(t,e,n){var s;let r=(s=t[n])!=null?s:t[t.length-1],i=e.findIndex(a=>a.id===(r==null?void 0:r.id));if(i!==-1)return i;let o=new Map(e.map((a,u)=>[a.id,u]));for(let a=Math.min(n-1,t.length-1);a>=0;a--){let u=o.get(t[a].id);if(u!==void 0)return u}return 0}function be(t,e,n){let r=h({},n);for(let o of t.fields)r[o.key]=e[o.key];let i={};for(let o of t.fields)I(o,r)&&e[o.key]!==void 0&&(i[o.key]=e[o.key]);return i}function Fe(t){let e=null,n=[],r={},i=o=>{var u,c;if(e===o)return;e=o,n=Ot(t,o);let s={},a=(u=t.steps)!=null&&u.length?n:[{fields:(c=t.fields)!=null?c:[]}];for(let l of a)Object.assign(s,be(l,o,s));r=s;};return {invalidate(){e=null;},steps(o){return i(o),n},values(o){return i(o),r}}}function ke(t){var r,i;let e=(i=(r=t.currentStep)==null?void 0:r.fields)!=null?i:[],n=h({},t.values);for(let{key:o}of e)delete n[o];return Object.assign(n,q(e))}function At(t){return Ot(t.definition,ke(t))[t.currentStepIndex+1]}function pt(t){let e=t.currentStep,n=e.fields.map(({key:i})=>i);t.state.values=ke(t);for(let i of n)delete t.errors[i];t.skipped.set(e.id,n),t.visibility.reconcileHidden(t.values,t.errors),t.visibility.markChanged(true,true);let r=dt(t);return t.notify({fieldKeys:[...n,...r],structureChanged:true,valuesChanged:true}),n}function mt(t){let e=t.currentStep;e&&t.skipped.delete(e.id);}function Se(t,e){return t.state.currentStepIndex=e,t.notify({structureChanged:true}),pt(t)}async function ht(t,e,n=false){if(t.submitting||t.stepValidating)return false;n||mt(t);let r=h({},t.lifecycle),i=false,o=t.validationEpoch,s=++t.operationEpoch,a=U(t),u=Q(t,a),c=()=>o!==t.validationEpoch||s!==t.operationEpoch||u();t.state.submitting=true,t.notify();try{if(c()||Object.keys(tt(t,!0)).length>0||c())return !1;if(r.onBeforeSubmit){let f=await r.onBeforeSubmit(a);if(c()||f===!1)return !1}if(c())return !1;if(r.onBeforeSubmit){if(Object.keys(tt(t,!0)).length>0||c())return !1;a=U(t);}i=!0;let l=[...t.skipped.keys()];return await e(a,[...l]),s!==t.operationEpoch||await lt("afterSubmit",()=>{var f;return (f=r.onAfterSubmit)==null?void 0:f.call(r,a,l)}),!0}catch(l){if(!i&&c())return false;throw l}finally{s===t.operationEpoch&&(t.state.submitting=false,t.notify());}}function ve(t){let e=t.currentStep;if(!e)return true;let n=L(e,T(t),t.validators);if(Object.keys(n).length===0)return false;let r=h({},t.errors);return Object.assign(t.errors,n),t.notify({fieldKeys:M(r,t.errors)}),true}function we(t,e){t.validationEpoch++,t.state.currentStepIndex=e,t.notify({structureChanged:true});}async function xe(t,e){var c;if(!t.isMultiStep||t.stepValidating||t.submitting||!((c=t.currentStep)!=null&&c.skip))return false;if(At(t))return gt(t,"next","skip");let n=t.currentStep;if(!e||!n)return false;let r=t.values,i=h({},t.errors),o=false,s=pt(t),a=t.values,u=Q(t,h({},a));try{return await ht(t,async(l,f)=>{await e(l,f),o=!0;},!0)}finally{!o&&t.values===a&&!u()&&(t.state.values=r,t.state.errors=h(h({},i),t.errors),t.skipped.delete(n.id),t.notify({fieldKeys:s,structureChanged:true,valuesChanged:true}));}}async function gt(t,e,n=e){let r=n==="skip";if(!t.isMultiStep||t.stepValidating||t.submitting||!r&&(e==="next"?t.isLastStep:t.isFirstStep))return false;let i=t.currentStep,o=e==="next"&&!r;if(o&&mt(t),o&&ve(t))return false;let s=h({},t.lifecycle),a=t.onStepValidate,u=false,l=t.currentStepIndex+(e==="next"?1:-1),f=r?At(t):t.visibleSteps[l];if(!f)return false;let d={fromStepId:i.id,toStepId:f.id,reason:n,values:h({},T(t))},g=t.validationEpoch,b=++t.operationEpoch,V=Q(t,d.values),x=()=>{var k;return g!==t.validationEpoch||b!==t.operationEpoch||((k=t.currentStep)==null?void 0:k.id)!==i.id||V()};t.state.stepValidating=true,t.notify();try{if(x())return !1;if(o&&a){let k=await a(i.id,d.values);if(x())return !1;if(k&&Object.keys(k).length>0)return ft(t,k),!1}if(s.onBeforeStepChange){let k=await s.onBeforeStepChange(d);if(x()||k===!1)return !1}return x()||o&&ve(t)?!1:(u=!0,r&&pt(t),we(t,l),await lt("afterStepChange",()=>{var k;return (k=s.onAfterStepChange)==null?void 0:k.call(s,d)}),!0)}catch(k){if(!u&&x())return false;throw k}finally{b===t.operationEpoch&&(t.state.stepValidating=false,t.notify());}}function Ee(t,e){if(!t.isMultiStep)return;let n=t.visibility.findStepIndex(e,t.values,t.currentStepIndex);n===t.currentStepIndex?t.notify():n!==null&&we(t,n);}function Ie(t,e){return t.add(e),()=>t.delete(e)}function Ce(){let t=0,e=0,n=new Set,r=new Set,i=new Map,o=new Map;return {subscribe:s=>Ie(n,s),getSnapshot:()=>t,subscribeStructure:s=>Ie(r,s),getStructureSnapshot:()=>e,getFieldSnapshot:s=>{var a;return (a=i.get(s))!=null?a:0},subscribeField(s,a){var c;let u=(c=o.get(s))!=null?c:new Set;return u.add(a),o.set(s,u),()=>{u.delete(a),u.size===0&&o.delete(s);}},notify({fieldKeys:s=[],structureChanged:a=false}={}){var u,c;for(let l of new Set(s)){i.set(l,((u=i.get(l))!=null?u:0)+1);for(let f of (c=o.get(l))!=null?c:[])f();}if(a){e++;for(let l of r)l();}t++;for(let l of n)l();}}}function In(t,e){try{if(process.env.NODE_ENV!=="production")return ot(t,{validators:e})}catch(n){if(!(n instanceof ReferenceError))throw n}}function $e(t,e,n){var s,a;let r=(s=In(t,n))!=null?s:ce(t),i=r.filter(Kt);if(i.length)throw new $(i);let o=(a=e.onWarning)!=null?a:(u=>console.warn(`[formhaus] ${u.message}`));for(let u of r)o(u);}function Mt(t,e){var n;for(let r of at(t)){let i=(n=e.get(r))!=null?n:new Set;i.add(t),e.set(r,i);}}function yt(t){var V,x,k;let e=ut(t),n=new Map,r=new Set,i=Fe(t),o=new Map,s=new Map,a=new Map,u=true,c=true,l={visibleSteps:[],currentStep:null,visibleFields:[],canGoNext:false};for(let p of e)n.set(p.key,[...(V=n.get(p.key))!=null?V:[],p]),Mt(p,o);for(let p of (x=t.steps)!=null?x:[]){for(let y of p.fields)a.set(y,p);Mt(p,s);for(let y of (k=p.routes)!=null?k:[])for(let F of at(y))r.add(F);}let f=()=>{var p;return ((p=t.steps)!=null?p:[]).length>0},d=(p,y)=>I(p,i.values(y)),g=(p,y)=>{let F=a.get(p);return !F||i.steps(y).includes(F)};function b(p,y){var C,O,B;if(!u)return l;if(u=false,!f())return l.visibleSteps=[],l.currentStep=null,l.visibleFields=((C=t.fields)!=null?C:[]).filter(j=>d(j,p)),l;let F=l.visibleSteps=i.steps(p),S=l.currentStep=(B=(O=F[y])!=null?O:F[F.length-1])!=null?B:null;return l.visibleFields=S?S.fields.filter(j=>d(j,p)):[],l}return {allFields:e,conditionValues:i.values,state:b,markChanged(p,y){(p||y)&&i.invalidate(),p&&(u=true),(p||y)&&(c=true);},getCanGoNext(p,y,F){let S=b(p,y).currentStep;if(!c)return l.canGoNext;c=false;let C=S?L(S,i.values(p),F):{};return l.canGoNext=f()&&Object.keys(C).length===0},findStepIndex(p,y,F){let S=b(y,F).visibleSteps.findIndex(C=>C.fields.some(O=>O.key===p));return S===-1?null:S},affectsStructure(p,y){return r.has(p)||o.has(p)||s.has(p)||y.size>0},activeField(p,y){var F;return (F=n.get(p))==null?void 0:F.find(S=>g(S,y)&&d(S,y))},reconcileHidden(p,y){var j,Tt;i.invalidate();let F=[...new Set([...o.keys(),...s.keys()])],S=new Set(F),C=new Set,O=w=>p[w]!==void 0||y[w]!==void 0,B=w=>{delete p[w],delete y[w],i.invalidate(),C.add(w),!S.has(w)&&(S.add(w),F.push(w));};for(let w=0;w<F.length;w++){let Ft=F[w];S.delete(Ft);for(let A of (j=o.get(Ft))!=null?j:[])g(A,p)&&!d(A,p)&&O(A.key)&&B(A.key);for(let A of (Tt=s.get(Ft))!=null?Tt:[])if(!d(A,p))for(let jt of A.fields)O(jt.key)&&B(jt.key);}return C}}}var bt=class{constructor(e,n,r){this.definition=e;this.skipped=new Map;this.validationEpoch=0;this.operationEpoch=0;this.subscriptions=Ce();var o;this.lifecycle=r!=null?r:{},this.validators=(o=r==null?void 0:r.validators)!=null?o:{},$e(e,this.lifecycle,this.validators),this.visibility=yt(e);let i=q(this.visibility.allFields,n);this.state={values:i,errors:{},topLevelErrors:[],currentStepIndex:0,fieldLoading:{},stepValidating:false,submitting:false},this.visibility.reconcileHidden(i,this.state.errors);}get onStepValidate(){return this.lifecycle.onStepValidate}get values(){return this.state.values}get errors(){return this.state.errors}get topLevelErrors(){return this.state.topLevelErrors}get currentStepIndex(){return this.state.currentStepIndex}get fieldLoading(){return this.state.fieldLoading}get stepValidating(){return this.state.stepValidating}get submitting(){return this.state.submitting}get isMultiStep(){var e;return ((e=this.definition.steps)!=null?e:[]).length>0}get visibleSteps(){return this.view.visibleSteps}get currentStep(){return this.view.currentStep}get visibleFields(){return this.view.visibleFields}get isFirstStep(){return this.currentStepIndex===0}get isLastStep(){return this.currentStepIndex>=this.visibleSteps.length-1}get canGoNext(){return this.visibility.getCanGoNext(this.state.values,this.currentStepIndex,this.validators)}get progress(){let e=this.visibleSteps.length;return {current:Math.min(this.currentStepIndex+1,e),total:e}}subscribe(e){return this.subscriptions.subscribe(e)}getSnapshot(){return this.subscriptions.getSnapshot()}subscribeField(e,n){return this.subscriptions.subscribeField(e,n)}getFieldSnapshot(e){return this.subscriptions.getFieldSnapshot(e)}subscribeStructure(e){return this.subscriptions.subscribeStructure(e)}getStructureSnapshot(){return this.subscriptions.getStructureSnapshot()}setValue(e,n){let{values:r,errors:i}=this.state,o=this.isMultiStep?this.visibleSteps:null,s=!Object.is(r[e],n),a=i[e]!==void 0;r[e]=n,delete i[e];for(let[g,b]of this.skipped)s&&b.includes(e)&&this.skipped.delete(g);let u=this.visibility.reconcileHidden(r,i),c=me(this.internals,e),l=new Set([...u,...c]);(s||a)&&l.add(e);let f=s||u.size>0,d=f&&this.visibility.affectsStructure(e,u);if(o&&d){this.visibility.markChanged(true,true),this.state.currentStepIndex=ye(o,this.visibleSteps,this.currentStepIndex);for(let g of dt(this.internals))l.add(g);}this.notify({fieldKeys:l,structureChanged:d,valuesChanged:f});}setErrors(e){ft(this.internals,e,true);}setFieldLoading(e,n){let r=this.state.fieldLoading[e]===true;n?this.state.fieldLoading[e]=true:delete this.state.fieldLoading[e],this.notify({fieldKeys:r===n?[]:[e]});}cancelPendingActions(){this.validationEpoch++,this.operationEpoch++,this.state.stepValidating=false,this.state.submitting=false,this.notify();}next(){return gt(this.internals,"next")}back(){return gt(this.internals,"back")}skip(e){return xe(this.internals,e)}submit(e){return ht(this.internals,e)}isStepSkipped(e){return this.skipped.has(e)}validate(){return tt(this.internals)}validateField(e){return he(this.internals,e)}getSubmitValues(){return U(this.internals)}goToStepWithField(e){Ee(this.internals,e);}reset(e){ge(this.internals,e);}get view(){return this.visibility.state(this.state.values,this.currentStepIndex)}get internals(){return this}notify(e={}){this.visibility.markChanged(!!e.structureChanged,!!e.valuesChanged),this.subscriptions.notify(e);}};var Cn='Pass the values object as the second argument, not the request body with "values" and "skippedSteps".',$n=()=>null,Lt=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);function Dn(t,e,n){var a;let r=n!==null&&typeof n=="object"&&!Array.isArray(n)?n:{},i=yt(t),o=[...new Set(e.map(({key:u})=>u))].filter(u=>Lt(r,u)),s={values:{},active:new Map};for(let u=0;u<=e.length;u++){let c={};for(let d of o)c[d]=ie((a=s.active.get(d))!=null?a:e.find(g=>g.key===d),r[d]);let l=new Map;for(let d of o){let g=i.activeField(d,c);g&&l.set(d,g);}let f=o.every(d=>l.get(d)===s.active.get(d));if(s={values:c,active:l},f)break}return s}function Rn({values:t,active:e}){let n=new Map;for(let[r,i]of e){let o=Dt(i,t[r]);o&&n.set(r,o);}return n}function Vn(t,e){var i;let n=o=>o.map(s=>e.has(s.key)?kt(h({},s),{validation:void 0}):s),r=(i=t.steps)==null?void 0:i.map(o=>kt(h({},o),{fields:n(o.fields)}));return h(h(h({},t),t.fields&&{fields:n(t.fields)}),r&&{steps:r})}function On(t,e={}){let n={};for(let{validation:r}of t)r!=null&&r.validator&&(n[r.validator]=$n);return h(h({},n),e)}function An(t,e){return e===null||typeof e!="object"||!Lt(e,"values")?false:!t.some(n=>n.key==="values"||n.key==="skippedSteps")}function Mn(t,e){if(!Array.isArray(e))return;let n=new Set(e);for(let r=0;r<t.visibleSteps.length;r++){let i=t.visibleSteps[r];i.skip&&n.has(i.id)&&Se(t,r);}}function Ln(t,e,n={}){st(t);let r=ut(t),i=Dn(t,r,e),o=Rn(i),s={validators:On(r,n.validators),onWarning:()=>{}},a=new bt(Vn(t,o),i.values,s);Mn(a,n.skippedSteps);let u=a.validate(),c=a.getSubmitValues();for(let[l,f]of o)Lt(c,l)&&(u[l]=f);return An(r,e)&&(u.values=Cn),{values:c,errors:u}}exports.FormDefinitionError=$;exports.checkDefinition=ot;exports.parseDefinition=st;exports.validateSubmission=Ln;return exports;})({});//# sourceMappingURL=server.iife.js.map
4
+ `)}`),this.name="FormDefinitionError",this.issues=e;}};function Bt(t){return (e,n,r,i)=>m({code:e,severity:t,path:n,message:`${n||"/"}: ${r}.${i?` ${i}.`:""}`},i&&{hint:`${i}.`})}var h=Bt("error"),I=Bt("warning");function it(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function Gt(t){return t.severity==="error"}function _(t){if(t.length===1)return `Use ${JSON.stringify(t[0])}`;let e=t.slice(0,10).map(n=>JSON.stringify(n)).join(", ");return t.length>10?`Use one of: ${e}, ...`:`Use one of: ${e}`}function Ne(t,e){let n=Array.from({length:e.length+1},(r,i)=>i);for(let r=1;r<=t.length;r++){let i=[r];for(let o=1;o<=e.length;o++)i[o]=Math.min(n[o]+1,i[o-1]+1,n[o-1]+(t[r-1]===e[o-1]?0:1));n=i;}return n[e.length]}function Et(t,e){let n=t.toLowerCase();return e.find(r=>r!==t&&Ne(n,r.toLowerCase())<=(r.length>4?2:1))}function J(t,e){let n=Et(t,e);return n!==void 0?`Use ${JSON.stringify(n)}`:e.length?_(e):void 0}var z=Kt;function Pe({suggest:t},e,n){let r=Object.keys(e).filter(a=>a!=="field"),i=r.filter(a=>!z.includes(a)),o=i.map(a=>h("unknown-operator",`${n}/${it(a)}`,`"${a}" is not a condition operator`,t(a,[...z]))),s=r.length-i.length;if(s!==1&&!(s===0&&i.length)){let a=s?`the condition has ${s} operators`:"the condition has no operator";o.push(h("condition-operator-count",n,a,`Use exactly one of: ${z.join(", ")}`));}return o}function _e(t,{condition:e,path:n,owner:r,step:i,key:o}){let s=t.keys.get(e.field);if(!s){let c=t.keyList.filter(l=>l!==o);return [h("unknown-field",`${n}/field`,`"${e.field}" is not a field key`,t.suggest(e.field,c))]}if(i<0||r==="action")return [];let a=r==="step"?"this or a later step":"a later step";if(s.step<i||r!=="step"&&s.step===i)return [];let u=r==="step"?"earlier steps":"this or an earlier step";return [h("forward-reference",`${n}/field`,`"${e.field}" belongs to ${a}`,`${r==="route"?"Route":r==="step"?"Step":"Field"} conditions can use fields of ${u}`)]}function xt(t,e){let{condition:n,path:r}=e;return typeof n.field!="string"?[h("missing-property",`${r}/field`,'the condition has no "field"',"Add the key of the field to test")]:[...Pe(t,n,r),..._e(t,e)]}function Ht(t){return t.conditions.flatMap(e=>xt(t,e))}function It(t,e,n,r,i,o){var s;for(let a of ["show","showAny"])((s=e[a])!=null?s:[]).forEach((u,c)=>t.push({condition:u,path:`${n}/${a}/${c}`,owner:r,step:i,key:o}));}function Ct(t,e,n,r){var i;(e?(i=e.disabled)!=null?i:[]:[]).forEach((o,s)=>t.push({condition:o,path:`${n}/disabled/${s}`,owner:"action",step:r}));}function Yt(t,e,n=()=>{}){var a,u;let r=(a=t.steps)!=null?a:[],i=r.length?r.flatMap((c,l)=>c.fields.map((d,f)=>({field:d,path:`/steps/${l}/fields/${f}`,step:l}))):((u=t.fields)!=null?u:[]).map((c,l)=>({field:c,path:`/fields/${l}`,step:-1})),o=new Map;for(let c of i)o.has(c.field.key)||o.set(c.field.key,c);let s=[];for(let c of i)It(s,c.field,c.path,"field",c.step,c.field.key);return r.forEach((c,l)=>{var d;It(s,c,`/steps/${l}`,"step",l),((d=c.routes)!=null?d:[]).forEach((f,g)=>It(s,f,`/steps/${l}/routes/${g}`,"route",l));for(let f of ["next","back","skip"])Ct(s,c[f],`/steps/${l}/${f}`,l);}),Ct(s,t.submit,"/submit",-1),Ct(s,t.cancel,"/cancel",-1),{definition:t,entries:i,keys:o,keyList:[...o.keys()],conditions:s,validators:e,suggest:n}}function Wt(t,e,n,r){let i=t[n],o=t[r];return i===void 0||o===void 0||i<=o?[]:[h("invalid-range",`${e}/validation/${n}`,`${n} (${i}) is greater than ${r} (${o})`,`Lower ${n} or raise ${r}`)]}function qe(t,e){if(t===void 0)return [];try{return new RegExp(t),[]}catch(n){return [h("invalid-pattern",`${e}/validation/pattern`,`${JSON.stringify(t)} is not a valid regular expression`,"Fix the pattern or escape special characters with a backslash")]}}function Ue(t,{field:e,path:n}){let r=e.validation;if(!r)return [];let i=r.matchField;return [...Wt(r,n,"minLength","maxLength"),...Wt(r,n,"min","max"),...qe(r.pattern,n),...i===void 0||t.keys.has(i)?[]:[h("unknown-field",`${n}/validation/matchField`,`"${i}" is not a field key`,t.suggest(i,t.keyList))]]}function Jt(t){return t.entries.flatMap(e=>Ue(t,e))}function Ke({definition:t,entries:e,keys:n}){var s;let r=new Map,i=(a,u)=>{var l;let c=u.filter(d=>n.has(d));if(c.length)for(let d of a)r.set(d,[...(l=r.get(d))!=null?l:[],...c]);},o=a=>{var u,c;return [...(u=a.show)!=null?u:[],...(c=a.showAny)!=null?c:[]].map(l=>l.field)};for(let{field:a}of e)i([a.key],o(a));for(let a of (s=t.steps)!=null?s:[])i(a.fields.map(u=>u.key),o(a));return r}function Be(t){var r;let e=new Map,n=[];for(let i of t.keys()){if(e.has(i))continue;e.set(i,true);let o=[[i,0]];for(;o.length>0;){let s=o[o.length-1],a=(r=t.get(s[0]))==null?void 0:r[s[1]++];if(a===void 0)e.set(s[0],false),o.pop();else if(e.get(a)){let u=o.map(([c])=>c);n.push([...u.slice(u.indexOf(a)),a]);}else e.has(a)||(e.set(a,true),o.push([a,0]));}}return n}function Ge(t){return Be(Ke(t)).map(e=>h("condition-cycle",t.keys.get(e[0]).path,`show conditions form a cycle: ${e.join(" -> ")}`,"Remove one of the conditions in the cycle"))}function zt(t){return Ge(t)}var Xt="1.0";function Zt({formatVersion:t}){if(t===void 0)return [];let e=typeof t=="string"&&/^[1-9]\d*(\.\d+)?$/.test(t);return e&&parseInt(t)<=parseInt(Xt)?[]:[e?h("unsupported-format-version","/formatVersion",`format ${t} is not supported`,"Upgrade @formhaus/core"):h("invalid-type","/formatVersion","must be a version string",`Use "${Xt}"`)]}var Z=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),He={string:[t=>typeof t=="string","a string"],number:[t=>typeof t=="number"&&Number.isFinite(t),"a number"],boolean:[t=>typeof t=="boolean","true or false"],requirement:[t=>["boolean","string"].includes(typeof t),"true, false or a message string"],scalar:[t=>["string","number","boolean"].includes(typeof t),"a string, number or boolean"],list:[t=>Array.isArray(t)&&t.every(e=>["string","number"].includes(typeof e)),"an array of strings or numbers"]};function q(t,e,n){return Object.entries(e).flatMap(([r,i])=>{let[o,s]=He[i];return t[r]===void 0||o(t[r])?[]:[h("invalid-type",`${n}/${it(r)}`,`"${r}" must be ${s}`)]})}function D(t,e,n,r,i=false){return t==null&&!i?[]:Array.isArray(t)?t.flatMap((o,s)=>Z(o)?r(o,`${e}/${s}`):[h("invalid-type",`${e}/${s}`,`must be ${n}`)]):[h("invalid-type",e,"must be an array",i?"Use [] when there is nothing to list":void 0)]}function X(t,e,n){return typeof t[e]=="string"?[]:[h("missing-property",`${n}/${e}`,`"${e}" must be a string`)]}var $t=(t,e)=>q(t,{field:"string",eq:"scalar",neq:"scalar",in:"list",notIn:"list",notEmpty:"boolean",gt:"number",gte:"number",lt:"number",lte:"number"},e);function Dt(t,e){return [...D(t.show,`${e}/show`,"a condition object",$t),...D(t.showAny,`${e}/showAny`,"a condition object",$t)]}function Rt(t,e){return Z(t)?[...q(t,{label:"string"},e),...D(t.disabled,`${e}/disabled`,"a condition object",$t)]:[]}var Ye=(t,e)=>[...X(t,"value",e),...q(t,{label:"string"},e)],We={required:"requirement",minLength:"number",maxLength:"number",min:"number",max:"number",pattern:"string",matchField:"string",validator:"string",minLengthMessage:"string",maxLengthMessage:"string",minMessage:"string",maxMessage:"string",patternMessage:"string",matchFieldMessage:"string"};function Je(t,e){return t===void 0?[]:Z(t)?q(t,We,e):[h("invalid-type",e,"must be an object of validation rules")]}function ze(t,e){return t===void 0||Array.isArray(t)&&t.every(r=>typeof r=="string")?[]:[h("invalid-type",e,"must be an array of field keys")]}var Qt=(t,e)=>[...X(t,"key",e),...X(t,"type",e),...q(t,{label:"string",placeholder:"string",helperText:"string"},e),...Dt(t,e),...D(t.options,`${e}/options`,"an option object",Ye),...Je(t.validation,`${e}/validation`),...ze(t.optionsDependsOn,`${e}/optionsDependsOn`)],Xe=(t,e)=>[...t.to===null||typeof t.to=="string"?[]:[h("missing-property",`${e}/to`,'"to" must be a step id or null')],...Dt(t,e)],Ze=(t,e)=>[...X(t,"id",e),...q(t,{title:"string",description:"string"},e),...D(t.fields,`${e}/fields`,"a field object",Qt,true),...Dt(t,e),...D(t.routes,`${e}/routes`,"a route object",Xe),...["next","back","skip"].flatMap(n=>Rt(t[n],`${e}/${n}`))];function te(t){if(!Z(t))return [h("invalid-type","","the form definition must be an object")];let e=Zt(t);return e.length?e:[...D(t.fields,"/fields","a field object",Qt),...D(t.steps,"/steps","a step object",Ze),...Rt(t.submit,"/submit"),...Rt(t.cancel,"/cancel")]}function ee(t){return [...X(t,"id",""),...Z(t.submit)?[]:[h("missing-property","/submit","the submit action is missing",'Add "submit": { "label": "Submit" }')]]}var ot=t=>{var e,n;return !!((e=t.show)!=null&&e.length||(n=t.showAny)!=null&&n.length)};function ne(t,e,n){var i;let r=[];for(let o of (i=t[n].routes)!=null?i:[]){let s=o.to===null?null:e.get(o.to);if(s===null&&!ot(o))return r;if(!(s==null||s<=n)&&(r.push(s),!ot(o)&&!ot(t[s])))return r}return n+1<t.length?[...r,n+1]:r}function re(t){let e=new Map(t.map((n,r)=>[n.id,r]));return t.map((n,r)=>{let i=new Set,o=ne(t,e,r);for(;o.length;){let s=o.pop();i.has(s)||(i.add(s),o.push(...ne(t,e,s)),ot(t[s])&&s+1<t.length&&o.push(s+1));}return i})}var Qe=new Set([...Object.getOwnPropertyNames(Object.prototype),"prototype"]);function tn({definition:t}){var i;let e=[],n=(i=t.steps)!=null?i:[],r=new Map;return n.forEach((o,s)=>{let a=r.get(o.id);a===void 0?r.set(o.id,s):e.push(h("duplicate-step-id",`/steps/${s}/id`,`step id "${o.id}" is already used by /steps/${a}`,"Give each step a unique id"));}),n.forEach((o,s)=>{var a;return ((a=o.routes)!=null?a:[]).forEach((u,c)=>{if(u.to===null)return;let l=r.get(u.to);if(l!==void 0&&l>s)return;let d=n.slice(s+1).map(y=>y.id),f=l===void 0?`"${u.to}" is not a step id`:`"${u.to}" is not a later step`,g=d.length?`${_(d)}, or null to end the form here`:"Use null to end the form here";e.push(h("route-target",`/steps/${s}/routes/${c}/to`,f,g));})}),e}function en({definition:t,entries:e}){var o;let n=[],r=re((o=t.steps)!=null?o:[]),i=(s,a)=>{var u;return s.step!==a.step&&!((u=r[s.step])!=null&&u.has(a.step))};return e.forEach((s,a)=>{let{field:u,path:c}=s,l=e.slice(0,a).find(d=>d.field.key===u.key&&!i(d,s));Qe.has(u.key)?n.push(h("reserved-key",`${c}/key`,`"${u.key}" is a built-in object property name`,"Rename the field key")):l&&n.push(h("duplicate-key",`${c}/key`,`key "${u.key}" is already used by ${l.path} on the same path`,"Rename one of the fields, or move them to route branches that never meet"));}),n}function ie(t){var r,i;let{definition:e}=t;return [...!!((r=e.fields)!=null&&r.length)&&!!((i=e.steps)!=null&&i.length)?[h("fields-and-steps","",'the definition has both "fields" and "steps"','Move the top-level fields into a step, or remove "steps"')]:[],...tn(t),...en(t)]}var w={email:"Enter a valid email",number:"Enter a number",boolean:"Must be true or false",option:"Select one of the available options",options:"Must be a list of available options",string:"Must be text",date:"Enter a valid date",datetime:"Enter a valid date and time",file:"Must be a file reference",value:"Invalid value"};function V(t,e){var n,r;switch(t){case "required":return "This field is required";case "minLength":return `Must be at least ${e==null?void 0:e.min} ${(n=e==null?void 0:e.unit)!=null?n:"characters"}`;case "maxLength":return `Must be at most ${e==null?void 0:e.max} ${(r=e==null?void 0:e.unit)!=null?r:"characters"}`;case "min":return `Must be at least ${e==null?void 0:e.min}`;case "max":return `Must be at most ${e==null?void 0:e.max}`;case "pattern":return "Invalid format";case "matchField":return "Fields must match";default:return "Invalid value"}}var U=["checkbox","switch"],tt=["text","email","phone","number","password","select","autocomplete","multiselect","checkbox","radio","switch","file","date","datetime","textarea"],Q=1e4,nn=254,rn=1e3,oe=/^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/,on=/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/,se="\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])",sn=new RegExp(`^${se}$`),an=new RegExp(`^${se}T(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d{1,3})?)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)?$`),un=new Set(["text","phone","password","textarea","autocomplete"]),ln=new Map([["email",[oe,w.email,nn]],["date",[sn,w.date,Q]],["datetime",[an,w.datetime,Q]]]);function cn(t){let[e,n,r]=t.split(/\D/).map(Number);return r<=new Date(new Date(0).setUTCFullYear(e,n,0)).getUTCDate()}var fn=new Set(["password","number","select","radio","file"]);function O(t,e){return typeof e=="string"&&!fn.has(t.type)?e.trim():e}function ae(t,e){let n=O(t,e);if(t.type!=="number"||typeof n!="string"||!on.test(n))return n;let r=Number(n);return Number.isFinite(r)?r:n}var ue=t=>t.optionsFrom?void 0:t.options;function le(t,e){let n=ue(t);return !n||n.some(r=>r.value===e)}function ce(t,e){var r,i,o,s;let n=Math.min(Q,(i=(r=t.validation)==null?void 0:r.maxLength)!=null?i:Q);return e.length<=n?null:(s=(o=t.validation)==null?void 0:o.maxLengthMessage)!=null?s:V("maxLength",{max:n})}function dn(t,e){var r,i;return Array.isArray(e)?e.length>((i=(r=ue(t))==null?void 0:r.length)!=null?i:rn)?w.option:e.every(o=>typeof o=="string"&&o.length<=Q&&le(t,o))?null:w.option:w.options}function st(t,e,n){return typeof e=="string"?ce(t,e):n}function pn(t,e,[n,r,i]){var o;return typeof e!="string"?r:(o=ce(t,e))!=null?o:e.length<=i&&n.test(e)&&(n===oe||cn(e))?null:r}function mn(t,e){return typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e)?null:st(t,e,w.value)}function hn(t,e){return e==null||e===""||t.type==="multiselect"&&Array.isArray(e)&&!e.length}function Vt(t,e){var r;if(hn(t,e))return null;if(U.includes(t.type))return typeof e=="boolean"?null:w.boolean;if(t.type==="number")return typeof e=="number"&&Number.isFinite(e)?null:w.number;if(t.type==="multiselect")return dn(t,e);if(t.type==="file")return st(t,e,w.file);let n=ln.get(t.type);return n?pn(t,e,n):t.type==="select"||t.type==="radio"?(r=st(t,e,w.option))!=null?r:le(t,e)?null:w.option:un.has(t.type)?st(t,e,w.string):mn(t,e)}function fe(t,e){return t.type==="file"||!tt.includes(t.type)?null:Vt(t,e)}var gn=["in","notIn"],yn=["gt","gte","lt","lte"],bn=["text","email","phone","password","textarea","date","datetime","select","radio","autocomplete"];function vn(t){return t.type==="number"?"number":U.includes(t.type)?"boolean":bn.includes(t.type)?"string":void 0}function kn(t,e,n,r){var l;let i=(d,f)=>[I("condition-value-mismatch",r,d,f)];if(e==="notEmpty")return [];if(yn.includes(e))return t.type!=="multiselect"&&!U.includes(t.type)?[]:i(`"${t.key}" is a ${t.type} field, so "${e}" never matches it`,"Compare a number, text, radio or select field");if(t.type==="multiselect"){let d=e==="neq"||e==="notIn"?"always":"never";return i(`"${t.key}" holds a list of values, so "${e}" ${d} matches it`,"Use notEmpty, or a select or radio field")}let o=gn.includes(e)&&Array.isArray(n)?n:[n],s=vn(t),a=s&&o.find(d=>typeof d!==s);if(s&&a!==void 0)return i(`${JSON.stringify(a)} is a ${typeof a}, but "${t.key}" holds a ${s}`,`Use a ${s} value`);let u=s==="string"&&!t.optionsFrom&&((l=t.options)!=null&&l.length)?t.options.map(d=>d.value):null,c=u&&o.find(d=>!u.includes(d));return u&&c!==void 0?i(`${JSON.stringify(c)} is not an option of "${t.key}"`,_(u)):[]}function Fn(t,e){let{condition:n,path:r}=e;if(xt(t,e).length)return [];let i=z.find(o=>o in n);return kn(t.keys.get(n.field).field,i,n[i],`${r}/${i}`)}function Sn({field:t,path:e}){if(!["select","radio","multiselect"].includes(t.type))return [];if(!Array.isArray(t.options))return t.optionsFrom?[]:[I("missing-options",`${e}/options`,`the ${t.type} field "${t.key}" has no options`,'Add "options" or "optionsFrom"')];let n=t.options.map(o=>o.value),r=t.type==="multiselect"&&Array.isArray(t.defaultValue)?t.defaultValue:[t.defaultValue],i=t.defaultValue===void 0||!n.length||t.optionsFrom?void 0:r.find(o=>!n.includes(o));return i===void 0?[]:[I("default-not-in-options",`${e}/defaultValue`,`${JSON.stringify(i)} is not an option of "${t.key}"`,_(n))]}function wn(t,{field:e,path:n}){var d;let r=(d=e.validation)!=null?d:{},i=(f,g,y)=>I("rule-not-applicable",`${n}/validation/${f}`,g,y),o=tt.includes(e.type),s=e.type==="number",a=o&&!s?["min","max"].filter(f=>r[f]!==void 0):[],u=o&&["number","checkbox","switch"].includes(e.type)?["minLength","maxLength"].filter(f=>r[f]!==void 0):[],c=[...a.map(f=>i(f,`"${f}" applies to number fields only`,`Use ${f}Length to limit text length`)),...u.map(f=>i(f,`"${f}" does not apply to ${e.type} fields`,s?"Use min and max for numbers":`Remove ${f}`))],{validators:l}=t;return r.validator!==void 0&&l&&!Object.prototype.hasOwnProperty.call(l,r.validator)&&c.push(I("unknown-validator",`${n}/validation/validator`,`the validator "${r.validator}" is not registered`,'Pass it in the "validators" option')),c}function En(t,e){var o;let{field:n,path:r}=e,i=tt.includes(n.type)?void 0:Et(n.type,tt);return [...i===void 0?[]:[I("unknown-field-type",`${r}/type`,`"${n.type}" is not a built-in field type`,`Use "${i}", or register a component for "${n.type}"`)],...Sn(e),...wn(t,e),...((o=n.optionsDependsOn)!=null?o:[]).flatMap((s,a)=>t.keys.has(s)?[]:[I("unknown-field",`${r}/optionsDependsOn/${a}`,`"${s}" is not a field key`,J(s,t.keyList))])]}function xn({definition:t}){var n;let e=(n=t.steps)!=null?n:[];return e.flatMap((r,i)=>{var a,u,c;let o=[],s=new Set(((a=r.routes)!=null?a:[]).map(l=>l.to).filter(l=>l!==null));for(let l of s){let d=e.findIndex(y=>y.id===l),f=e[d+1],g=(c=(u=e[d])==null?void 0:u.routes)==null?void 0:c.some(y=>{var F,x;return !((F=y.show)!=null&&F.length)&&!((x=y.showAny)!=null&&x.length)});!f||!s.has(f.id)||g||o.push(I("route-fallthrough",`/steps/${d}`,`branch "${l}" from "${r.id}" continues into the sibling branch "${f.id}"`,`Add an unconditional route on "${l}" to the step where the branches meet`));}return r.skip&&(r.next===false||!e[1])&&o.push(I("skip-unreachable",`/steps/${i}/skip`,`step "${r.id}" has "skip" but no Continue button or later step`,'Remove "skip", or remove "next": false')),o})}function de(t){return [...typeof t.definition.title=="string"?[]:[I("missing-property","/title",'"title" must be a string',"Add a title for host UI and editors")],...t.conditions.flatMap(e=>Fn(t,e)),...t.entries.flatMap(e=>En(t,e)),...xn(t)]}function Ot(t,{validators:e,suggest:n,warnings:r}={}){let i=te(t);if(i.length)return i;let o=Yt(t,e,n);return [...ee(t),...ie(o),...Ht(o),...Jt(o),...zt(o),...r?r(o):[]]}function pe(t){return Ot(t)}function at(t,e={}){return Ot(t,{validators:e.validators,suggest:J,warnings:de})}function ut(t,e){let n=Ot(t,{suggest:J});if(n.length)throw new R(n);return t}function lt(t){var e,n;return [...(e=t.show)!=null?e:[],...(n=t.showAny)!=null?n:[]].map(r=>r.field)}function ct(t){var e,n;return (e=t.steps)!=null&&e.length?t.steps.flatMap(r=>r.fields):(n=t.fields)!=null?n:[]}function K(t,e){let n={};for(let i of t)i.defaultValue!==void 0&&(n[i.key]=i.defaultValue);let r=e!=null?e:{};for(let i of Object.keys(r))i!=="__proto__"&&(n[i]=r[i]);return n}function L(t,e){let n=new Set([...Object.keys(t),...Object.keys(e)]);return new Set([...n].filter(r=>!Object.is(t[r],e[r])))}var At=class extends Error{constructor(n,r){super(`The action completed, but ${n} failed: ${r instanceof Error?r.message:String(r)}`);this.phase=n;this.committed=true;this.name="FormLifecycleError",this.cause=r;}};async function ft(t,e){try{await e();}catch(n){throw new At(t,n)}}function me(t){return t.visibleSteps.map(e=>e.id).join(`
5
+ `)}function et(t,e){let n=me(t),r=Object.keys(e).filter(i=>e[i]!==void 0).map(i=>[i,t.values[i]]);return ()=>me(t)!==n||r.some(([i,o])=>!Object.is(t.values[i],o))}function C(t,e){var r,i;let n=o=>wt(o,e);return ((r=t.show)!=null?r:[]).every(n)&&(!((i=t.showAny)!=null&&i.length)||t.showAny.some(n))}function In(t,e){return W(t)||t===false&&U.includes(e.type)}function he(t,e,n,r){var s,a;let i=n[`min${e}`],o=n[`max${e}`];if(i!==void 0&&t<i)return (s=n[`min${e}Message`])!=null?s:V(`min${e}`,{min:i,unit:r});if(o!==void 0&&t>o)return (a=n[`max${e}Message`])!=null?a:V(`max${e}`,{max:o,unit:r})}function Cn(t,e){var n;if(e.pattern!==void 0)try{return new RegExp(e.pattern).test(String(t))?void 0:(n=e.patternMessage)!=null?n:V("pattern")}catch(r){return}}function B(t,e,n,r){var l,d,f,g,y;let i=O(t,e),o=(l=t.validation)!=null?l:{},s=(d=o.matchFieldMessage)!=null?d:V("matchField");if(In(i,t))return o.required?typeof o.required=="string"?o.required:V("required"):o.matchField!==void 0&&!W(n[o.matchField])?s:null;let a=fe(t,i);if(a)return a;let u=typeof i=="string"||Array.isArray(i)?he(i.length,"Length",o,Array.isArray(i)?"items":void 0):typeof i=="number"?he(i,"",o):void 0,c=o.matchField!==void 0&&i!==n[o.matchField]?s:void 0;return ((y=(f=u!=null?u:Cn(i,o))!=null?f:c)!=null?y:o.validator?(g=r==null?void 0:r[o.validator])==null?void 0:g.call(r,i,n):void 0)||null}function j(t,e,n){return dt(t.fields,e,n)}function dt(t,e,n){let r={};for(let i of t){if(!C(i,e))continue;let o=B(i,e[i.key],e,n);o&&(r[i.key]=o);}return r}function N(t,e,n=false,r=[]){let{state:i}=t,o=t.errors,s={},a=[...r];for(let[c,l]of Object.entries(e))t.visibility.activeField(c,t.values)?s[c]=l:a.push(l);n&&(i.serverErrors=s,i.serverFormErrors=a),i.errors=m(m({},i.serverErrors),s),i.topLevelErrors=n?a:[...i.serverFormErrors,...a];let u=n&&ge(t,s);t.notify({fieldKeys:L(o,t.errors),structureChanged:u});}function ge(t,e){let n=t.visibleSteps.findIndex(r=>r.fields.some(i=>e[i.key]!==void 0));return n<0||n===t.currentStepIndex?false:(t.state.currentStepIndex=n,true)}function pt(t,e,n=false){n&&delete t.state.serverErrors[e];let r=t.state.serverErrors[e];r===void 0?delete t.errors[e]:t.errors[e]=r;}function G(t,e){for(let n of e)delete t.state.serverErrors[n];}function ye(t,e){var r;let n=[];for(let i of t.visibility.allFields)((r=i.validation)==null?void 0:r.matchField)!==e||t.errors[i.key]===void 0||B(i,t.values[i.key],T(t),t.validators)||(pt(t,i.key),n.push(i.key));return n}function mt(t){let e=new Set(t.visibleSteps.flatMap(r=>r.fields.map(i=>i.key))),n=Object.keys(t.errors).filter(r=>!e.has(r));for(let r of n)delete t.errors[r];return G(t,n),n}function T(t){return H(t)}function $n(t,e){for(let n of [...t.skipped.values()].flat())delete e[n];return e}function nt(t,e=false){var o;let n=t.errors,r={};if(t.isMultiStep)for(let s of t.visibleSteps)t.skipped.has(s.id)||Object.assign(r,j(s,T(t),t.validators));else Object.assign(r,dt((o=t.definition.fields)!=null?o:[],T(t),t.validators));t.state.errors=m(m({},t.state.serverErrors),r);let i=e&&ge(t,r);return t.notify({fieldKeys:L(n,r),structureChanged:i}),r}function be(t,e){let n=t.visibility.activeField(e,t.values);if(!n)return null;let r=t.errors[e],i=B(n,t.values[e],T(t),t.validators);i?t.errors[e]=i:pt(t,e,true);let o=Object.is(r,t.errors[e])?[]:[e];return t.notify({fieldKeys:o}),i}function H(t){let e=m({},t.visibility.conditionValues(t.values));for(let n of Object.keys(e)){let r=t.visibility.activeField(n,t.values);r&&(e[n]=O(r,e[n]));}return $n(t,e)}function ve(t,e){let n=t.values,r=t.errors,i=Object.keys(t.fieldLoading);t.validationEpoch++,t.operationEpoch++,t.state.submitting=false,t.state.values=K(t.visibility.allFields,e),t.state.errors={},t.state.topLevelErrors=[],t.state.serverErrors={},t.state.serverFormErrors=[],t.state.fieldLoading={},t.state.stepValidating=false,t.state.currentStepIndex=0,t.skipped.clear(),t.visibility.reconcileHidden(t.values,t.errors);let o=L(n,t.values),s=new Set([...o,...L(r,t.errors),...i]);t.notify({fieldKeys:s,structureChanged:true,valuesChanged:o.size>0});}function Mt(t,e){var s,a;let n=(s=t.steps)!=null?s:[],r=new Map(n.map((u,c)=>[u.id,c])),i=[],o={};for(let u=0;u<n.length;){let c=n[u];if(!C(c,o)){u++;continue}i.push(c),Object.assign(o,Fe(c,e,o));let l=(a=c.routes)==null?void 0:a.find(d=>{var f;return C(d,o)&&(d.to===null||((f=r.get(d.to))!=null?f:-1)>u&&C(n[r.get(d.to)],o))});if((l==null?void 0:l.to)===null)break;u=l?r.get(l.to):u+1;}return i}function ke(t,e,n){var s;let r=(s=t[n])!=null?s:t[t.length-1],i=e.findIndex(a=>a.id===(r==null?void 0:r.id));if(i!==-1)return i;let o=new Map(e.map((a,u)=>[a.id,u]));for(let a=Math.min(n-1,t.length-1);a>=0;a--){let u=o.get(t[a].id);if(u!==void 0)return u}return 0}function Fe(t,e,n){let r=m({},n);for(let o of t.fields)r[o.key]=O(o,e[o.key]);let i={};for(let o of t.fields)C(o,r)&&e[o.key]!==void 0&&(i[o.key]=O(o,e[o.key]));return i}function Se(t){let e=null,n=[],r={},i=o=>{var u,c;if(e===o)return;e=o,n=Mt(t,o);let s={},a=(u=t.steps)!=null&&u.length?n:[{fields:(c=t.fields)!=null?c:[]}];for(let l of a)Object.assign(s,Fe(l,o,s));r=s;};return {invalidate(){e=null;},steps(o){return i(o),n},values(o){return i(o),r}}}function we(t){var r,i;let e=(i=(r=t.currentStep)==null?void 0:r.fields)!=null?i:[],n=m({},t.values);for(let{key:o}of e)delete n[o];return Object.assign(n,K(e))}function Lt(t){return Mt(t.definition,we(t))[t.currentStepIndex+1]}function ht(t){let e=t.currentStep,n=e.fields.map(({key:i})=>i);t.state.values=we(t);for(let i of n)delete t.errors[i];G(t,n),t.skipped.set(e.id,n),G(t,t.visibility.reconcileHidden(t.values,t.errors)),t.visibility.markChanged(true,true);let r=mt(t);return t.notify({fieldKeys:[...n,...r],structureChanged:true,valuesChanged:true}),n}function gt(t){let e=t.currentStep;e&&t.skipped.delete(e.id);}function Ee(t,e){return t.state.currentStepIndex=e,t.notify({structureChanged:true}),ht(t)}function jt(t){return !!t&&Object.getPrototypeOf(t)===Object.prototype&&t.ok===false}function Rn(t,e,n){let r={},i=typeof e.errors=="object"&&e.errors?e.errors:{};for(let[s,a]of Object.entries(i)){let u=Array.isArray(a)?a.join(" "):a;typeof u=="string"&&Object.is(t.values[s],n[s])&&(r[s]=u);}let o=Array.isArray(e.formErrors)?e.formErrors.filter(s=>typeof s=="string"):[];N(t,r,true,o);}async function yt(t,e,n=false){if(t.submitting||t.stepValidating)return false;n||gt(t);let r=m({},t.lifecycle),i=false,o=t.validationEpoch,s=++t.operationEpoch,a=H(t),u=et(t,a),c=()=>o!==t.validationEpoch||s!==t.operationEpoch||u();t.state.submitting=true,t.notify();try{if(c()||Object.keys(nt(t,!0)).length>0||c())return !1;if(r.onBeforeSubmit){let F=await r.onBeforeSubmit(a);if(c()||F===!1)return !1}if(c())return !1;if(r.onBeforeSubmit){if(Object.keys(nt(t,!0)).length>0||c())return !1;a=H(t);}i=!0;let l=[...t.skipped.keys()],d=m({},t.values),f=t.state.serverErrors,g=await e(a,[...l]),y=jt(g);return s!==t.operationEpoch?!y:y?(Rn(t,g,d),!1):(t.state.serverErrors===f&&N(t,{},!0),await ft("afterSubmit",()=>{var F;return (F=r.onAfterSubmit)==null?void 0:F.call(r,a,l)}),!0)}catch(l){if(!i&&c())return false;throw l}finally{s===t.operationEpoch&&(t.state.submitting=false,t.notify());}}function xe(t){let e=t.currentStep;if(!e)return true;let n=j(e,T(t),t.validators);if(Object.keys(n).length===0)return false;let r=t.errors;return t.state.errors=m(m({},r),n),t.notify({fieldKeys:L(r,t.errors)}),true}function Ie(t,e){t.validationEpoch++,t.state.currentStepIndex=e,t.notify({structureChanged:true});}async function Ce(t,e){var l;if(!t.isMultiStep||t.stepValidating||t.submitting||!((l=t.currentStep)!=null&&l.skip))return false;if(Lt(t))return bt(t,"next","skip");let n=t.currentStep;if(!e||!n)return false;let r=t.values,i=m({},t.errors),o=m({},t.state.serverErrors),s,a=ht(t),u=t.values,c=et(t,m({},u));try{return await yt(t,async(d,f)=>{let g=t.operationEpoch,y=await e(d,f),F=jt(y);return (!F||g===t.operationEpoch)&&(s=F),y},!0)}finally{s!==false&&t.values===u&&!c()&&(t.state.values=r,s===void 0&&(t.state.serverErrors=o),t.state.errors=m(m({},s?{}:i),t.errors),t.skipped.delete(n.id),t.notify({fieldKeys:a,structureChanged:true,valuesChanged:true}));}}async function bt(t,e,n=e){let r=n==="skip";if(!t.isMultiStep||t.stepValidating||t.submitting||!r&&(e==="next"?t.isLastStep:t.isFirstStep))return false;let i=t.currentStep,o=e==="next"&&!r;if(o&&gt(t),o&&xe(t))return false;let s=m({},t.lifecycle),a=t.onStepValidate,u=false,l=t.currentStepIndex+(e==="next"?1:-1),d=r?Lt(t):t.visibleSteps[l];if(!d)return false;let f={fromStepId:i.id,toStepId:d.id,reason:n,values:m({},T(t))},g=t.validationEpoch,y=++t.operationEpoch,F=et(t,f.values),x=()=>{var k;return g!==t.validationEpoch||y!==t.operationEpoch||((k=t.currentStep)==null?void 0:k.id)!==i.id||F()};t.state.stepValidating=true,t.notify();try{if(x())return !1;if(o&&a){let k=await a(i.id,f.values);if(x())return !1;if(k&&Object.keys(k).length>0)return N(t,k),!1}if(s.onBeforeStepChange){let k=await s.onBeforeStepChange(f);if(x()||k===!1)return !1}return x()||o&&xe(t)?!1:(u=!0,r&&ht(t),Ie(t,l),await ft("afterStepChange",()=>{var k;return (k=s.onAfterStepChange)==null?void 0:k.call(s,f)}),!0)}catch(k){if(!u&&x())return false;throw k}finally{y===t.operationEpoch&&(t.state.stepValidating=false,t.notify());}}function $e(t,e){if(!t.isMultiStep)return;let n=t.visibility.findStepIndex(e,t.values,t.currentStepIndex);n===t.currentStepIndex?t.notify():n!==null&&Ie(t,n);}function Re(t,e){return t.add(e),()=>t.delete(e)}function De(){let t=0,e=0,n=new Set,r=new Set,i=new Map,o=new Map;return {subscribe:s=>Re(n,s),getSnapshot:()=>t,subscribeStructure:s=>Re(r,s),getStructureSnapshot:()=>e,getFieldSnapshot:s=>{var a;return (a=i.get(s))!=null?a:0},subscribeField(s,a){var c;let u=(c=o.get(s))!=null?c:new Set;return u.add(a),o.set(s,u),()=>{u.delete(a),u.size===0&&o.delete(s);}},notify({fieldKeys:s=[],structureChanged:a=false}={}){var u,c;for(let l of new Set(s)){i.set(l,((u=i.get(l))!=null?u:0)+1);for(let d of (c=o.get(l))!=null?c:[])d();}if(a){e++;for(let l of r)l();}t++;for(let l of n)l();}}}function Dn(t,e){try{if(process.env.NODE_ENV!=="production")return at(t,{validators:e})}catch(n){if(!(n instanceof ReferenceError))throw n}}function Ve(t,e,n){var s,a;let r=(s=Dn(t,n))!=null?s:pe(t),i=r.filter(Gt);if(i.length)throw new R(i);let o=(a=e.onWarning)!=null?a:(u=>console.warn(`[formhaus] ${u.message}`));for(let u of r)o(u);}function Tt(t,e){var n;for(let r of lt(t)){let i=(n=e.get(r))!=null?n:new Set;i.add(t),e.set(r,i);}}function vt(t){var F,x,k;let e=ct(t),n=new Map,r=new Set,i=Se(t),o=new Map,s=new Map,a=new Map,u=true,c=true,l={visibleSteps:[],currentStep:null,visibleFields:[],canGoNext:false};for(let p of e)n.set(p.key,[...(F=n.get(p.key))!=null?F:[],p]),Tt(p,o);for(let p of (x=t.steps)!=null?x:[]){for(let b of p.fields)a.set(b,p);Tt(p,s);for(let b of (k=p.routes)!=null?k:[])for(let v of lt(b))r.add(v);}let d=()=>{var p;return ((p=t.steps)!=null?p:[]).length>0},f=(p,b)=>C(p,i.values(b)),g=(p,b)=>{let v=a.get(p);return !v||i.steps(b).includes(v)};function y(p,b){var $,A,Y;if(!u)return l;if(u=false,!d())return l.visibleSteps=[],l.currentStep=null,l.visibleFields=(($=t.fields)!=null?$:[]).filter(P=>f(P,p)),l;let v=l.visibleSteps=i.steps(p),S=l.currentStep=(Y=(A=v[b])!=null?A:v[v.length-1])!=null?Y:null;return l.visibleFields=S?S.fields.filter(P=>f(P,p)):[],l}return {allFields:e,conditionValues:i.values,state:y,markChanged(p,b){(p||b)&&i.invalidate(),p&&(u=true),(p||b)&&(c=true);},getCanGoNext(p,b,v){let S=y(p,b).currentStep;if(!c)return l.canGoNext;c=false;let $=S?j(S,i.values(p),v):{};return l.canGoNext=d()&&Object.keys($).length===0},findStepIndex(p,b,v){let S=y(b,v).visibleSteps.findIndex($=>$.fields.some(A=>A.key===p));return S===-1?null:S},affectsStructure(p,b){return r.has(p)||o.has(p)||s.has(p)||b.size>0},activeField(p,b){var v;return (v=n.get(p))==null?void 0:v.find(S=>g(S,b)&&f(S,b))},reconcileHidden(p,b){var P,Pt;i.invalidate();let v=[...new Set([...o.keys(),...s.keys()])],S=new Set(v),$=new Set,A=E=>p[E]!==void 0||b[E]!==void 0,Y=E=>{delete p[E],delete b[E],i.invalidate(),$.add(E),!S.has(E)&&(S.add(E),v.push(E));};for(let E=0;E<v.length;E++){let Ft=v[E];S.delete(Ft);for(let M of (P=o.get(Ft))!=null?P:[])g(M,p)&&!f(M,p)&&A(M.key)&&Y(M.key);for(let M of (Pt=s.get(Ft))!=null?Pt:[])if(!f(M,p))for(let _t of M.fields)A(_t.key)&&Y(_t.key);}return $}}}var kt=class{constructor(e,n,r){this.definition=e;this.skipped=new Map;this.validationEpoch=0;this.operationEpoch=0;this.subscriptions=De();var o;this.lifecycle=r!=null?r:{},this.validators=(o=r==null?void 0:r.validators)!=null?o:{},Ve(e,this.lifecycle,this.validators),this.visibility=vt(e);let i=K(this.visibility.allFields,n);this.state={values:i,errors:{},topLevelErrors:[],serverErrors:{},serverFormErrors:[],currentStepIndex:0,fieldLoading:{},stepValidating:false,submitting:false},this.visibility.reconcileHidden(i,this.state.errors);}get onStepValidate(){return this.lifecycle.onStepValidate}get values(){return this.state.values}get errors(){return this.state.errors}get topLevelErrors(){return this.state.topLevelErrors}get currentStepIndex(){return this.state.currentStepIndex}get fieldLoading(){return this.state.fieldLoading}get stepValidating(){return this.state.stepValidating}get submitting(){return this.state.submitting}get isMultiStep(){var e;return ((e=this.definition.steps)!=null?e:[]).length>0}get visibleSteps(){return this.view.visibleSteps}get currentStep(){return this.view.currentStep}get visibleFields(){return this.view.visibleFields}get isFirstStep(){return this.currentStepIndex===0}get isLastStep(){return this.currentStepIndex>=this.visibleSteps.length-1}get canGoNext(){return this.visibility.getCanGoNext(this.state.values,this.currentStepIndex,this.validators)}get stepErrors(){let e={};for(let n of this.visibleSteps){let r=n.fields.map(i=>i.key).filter(i=>this.errors[i]!==void 0);r.length>0&&(e[n.id]=r);}return e}get progress(){let e=this.visibleSteps.length;return {current:Math.min(this.currentStepIndex+1,e),total:e}}subscribe(e){return this.subscriptions.subscribe(e)}getSnapshot(){return this.subscriptions.getSnapshot()}subscribeField(e,n){return this.subscriptions.subscribeField(e,n)}getFieldSnapshot(e){return this.subscriptions.getFieldSnapshot(e)}subscribeStructure(e){return this.subscriptions.subscribeStructure(e)}getStructureSnapshot(){return this.subscriptions.getStructureSnapshot()}setValue(e,n){let{values:r,errors:i}=this.state,o=this.isMultiStep?this.visibleSteps:null,s=!Object.is(r[e],n),a=i[e];r[e]=n,pt(this.internals,e,s);for(let[g,y]of this.skipped)s&&y.includes(e)&&this.skipped.delete(g);let u=this.visibility.reconcileHidden(r,i);G(this.internals,u);let c=ye(this.internals,e),l=new Set([...u,...c]);(s||a!==i[e])&&l.add(e);let d=s||u.size>0,f=d&&this.visibility.affectsStructure(e,u);if(o&&f){this.visibility.markChanged(true,true),this.state.currentStepIndex=ke(o,this.visibleSteps,this.currentStepIndex);for(let g of mt(this.internals))l.add(g);}this.notify({fieldKeys:l,structureChanged:f,valuesChanged:d});}setErrors(e){N(this.internals,e,true);}setFieldLoading(e,n){let r=this.state.fieldLoading[e]===true;n?this.state.fieldLoading[e]=true:delete this.state.fieldLoading[e],this.notify({fieldKeys:r===n?[]:[e]});}cancelPendingActions(){this.validationEpoch++,this.operationEpoch++,this.state.stepValidating=false,this.state.submitting=false,this.notify();}next(){return bt(this.internals,"next")}back(){return bt(this.internals,"back")}skip(e){return Ce(this.internals,e)}submit(e){return yt(this.internals,e)}isStepSkipped(e){return this.skipped.has(e)}validate(){return nt(this.internals)}validateField(e){return be(this.internals,e)}getSubmitValues(){return H(this.internals)}goToStepWithField(e){$e(this.internals,e);}reset(e){ve(this.internals,e);}get view(){return this.visibility.state(this.state.values,this.currentStepIndex)}get internals(){return this}notify(e={}){this.visibility.markChanged(!!e.structureChanged,!!e.valuesChanged),this.subscriptions.notify(e);}};var Vn='Pass the values object as the second argument, not the request body with "values" and "skippedSteps".',On=()=>null,Nt=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);function An(t,e,n){var a;let r=n!==null&&typeof n=="object"&&!Array.isArray(n)?n:{},i=vt(t),o=[...new Set(e.map(({key:u})=>u))].filter(u=>Nt(r,u)),s={values:{},active:new Map};for(let u=0;u<=e.length;u++){let c={};for(let f of o)c[f]=ae((a=s.active.get(f))!=null?a:e.find(g=>g.key===f),r[f]);let l=new Map;for(let f of o){let g=i.activeField(f,c);g&&l.set(f,g);}let d=o.every(f=>l.get(f)===s.active.get(f));if(s={values:c,active:l},d)break}return s}function Mn({values:t,active:e}){let n=new Map;for(let[r,i]of e){let o=Vt(i,t[r]);o&&n.set(r,o);}return n}function Ln(t,e){var i;let n=o=>o.map(s=>e.has(s.key)?St(m({},s),{validation:void 0}):s),r=(i=t.steps)==null?void 0:i.map(o=>St(m({},o),{fields:n(o.fields)}));return m(m(m({},t),t.fields&&{fields:n(t.fields)}),r&&{steps:r})}function jn(t,e={}){let n={};for(let{validation:r}of t)r!=null&&r.validator&&(n[r.validator]=On);return m(m({},n),e)}function Tn(t,e){return e===null||typeof e!="object"||!Nt(e,"values")?false:!t.some(n=>n.key==="values"||n.key==="skippedSteps")}function Nn(t,e){if(!Array.isArray(e))return;let n=new Set(e);for(let r=0;r<t.visibleSteps.length;r++){let i=t.visibleSteps[r];i.skip&&n.has(i.id)&&Ee(t,r);}}function Pn(t,e,n={}){ut(t);let r=ct(t),i=An(t,r,e),o=Mn(i),s={validators:jn(r,n.validators),onWarning:()=>{}},a=new kt(Ln(t,o),i.values,s);Nn(a,n.skippedSteps);let u=a.validate(),c=a.getSubmitValues();for(let[l,d]of o)Nt(c,l)&&(u[l]=d);return Tn(r,e)&&(u.values=Vn),{values:c,errors:u}}exports.FormDefinitionError=R;exports.checkDefinition=at;exports.parseDefinition=ut;exports.validateSubmission=Pn;return exports;})({});//# sourceMappingURL=server.iife.js.map
6
6
  //# sourceMappingURL=server.iife.js.map