@formhaus/core 0.10.0 → 0.11.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/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/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","i","next","j","closest","candidates","lower","candidate","suggest","match","OPERATORS","CONDITION_OPERATORS","LIST_OPERATORS","NEGATIONS","COMPARISONS","STRING_TYPES","BOOLEAN_TYPES","expectedType","field","comparisonIssue","target","operator","valueIssue","operand","result","operands","expected","wrong","item","options","option","missing","operatorIssues","condition","keys","unknown","count","referenceIssue","context","owner","step","sameStep","allowed","conditionIssues","entry","operators","reference","mismatch","collect","source","name","collectAction","action","createContext","definition","validators","steps","entries","position","conditions","route","BUILT_IN_TYPES","CHOICE_TYPES","UNSIZED_TYPES","typeIssue","optionIssues","defaults","rangeIssue","rules","min","max","low","high","applicableIssues","numeric","names","sized","patternIssue","pattern","ruleIssues","dependencyIssues","fieldIssues","dependencyGraph","graph","link","owners","dependencies","known","fieldsOf","findCycles","visiting","cycles","start","stack","frame","neighbor","nodes","node","cycleIssues","cycle","fallthroughIssues","targets","to","sibling","exits","graphIssues","isEntry","KINDS","typed","kind","valid","list","check","required","text","RULES","validation","shapeIssues","input","metaIssues","conditional","successors","indexes","from","reachableSteps","seen","queue","RESERVED","stepIssues","first","later","keyIssues","reachable","exclusive","clash","other","structureIssues","ordered","checkDefinition","shape","parseDefinition","errors","validateDefinition","FormSubscriptions","listener","listeners","fieldKeys","structureChanged","isProduction","warnInDevelopment","indexConditions","dependent","conditionFields","dependents","VisibilityState","getAllFields","ActivePath","valuesChanged","stepIndex","validateStep","fieldKey","clearedFields","seed","queued","cleared","clear","isVisible","current","fields","FormEngine","initialValues","warn","createValues","total","previousSteps","valueChanged","hadError","stepId","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-OMINRKEL.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\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 { FormField, ShowCondition } from '../types';\nimport { CONDITION_OPERATORS } from '../visibility/evaluate-condition';\nimport type { CheckContext, ConditionEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, oneOf, pointer, suggest, warning } from './issues';\n\nconst OPERATORS: readonly string[] = CONDITION_OPERATORS;\nconst LIST_OPERATORS = new Set(['in', 'notIn']);\nconst NEGATIONS = new Set(['neq', 'notIn']);\nconst COMPARISONS = new Set(['gt', 'gte', 'lt', 'lte']);\nconst STRING_TYPES = new Set(['text', 'email', 'phone', 'password', 'textarea', 'date', 'datetime', 'select', 'radio', 'autocomplete']);\nconst BOOLEAN_TYPES = new Set(['checkbox', 'switch']);\n\nfunction expectedType(field: FormField): string | undefined {\n if (field.type === 'number') return 'number';\n if (BOOLEAN_TYPES.has(field.type)) return 'boolean';\n return STRING_TYPES.has(field.type) ? 'string' : undefined;\n}\n\nfunction comparisonIssue(target: FormField, operator: string, path: string): DefinitionIssue | undefined {\n if (target.type !== 'multiselect' && !BOOLEAN_TYPES.has(target.type)) return undefined;\n return warning('condition-value-mismatch', path, `\"${target.key}\" is a ${target.type} field, so \"${operator}\" never matches it`, 'Compare a number, text, radio or select field');\n}\n\nfunction valueIssue(target: FormField, operator: string, operand: unknown, path: string): DefinitionIssue | undefined {\n if (operator === 'notEmpty') return undefined;\n if (COMPARISONS.has(operator)) return comparisonIssue(target, operator, path);\n if (target.type === 'multiselect') {\n const result = NEGATIONS.has(operator) ? 'always' : 'never';\n return warning('condition-value-mismatch', path, `\"${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.has(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) {\n return warning('condition-value-mismatch', path, `${JSON.stringify(wrong)} is a ${typeof wrong}, but \"${target.key}\" holds a ${expected}`, `Use a ${expected} value`);\n }\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 if (options && missing !== undefined) {\n return warning('condition-value-mismatch', path, `${JSON.stringify(missing)} is not an option of \"${target.key}\"`, oneOf(options));\n }\n return undefined;\n}\n\nfunction operatorIssues(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 referenceIssue(context: CheckContext, { condition, path, owner, step, key }: ConditionEntry): DefinitionIssue | undefined {\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`, suggest(condition.field, candidates));\n }\n if (step < 0 || owner === 'action') return undefined;\n const sameStep = owner === 'step' ? 'this or a later step' : 'a later step';\n if (target.step < step || (owner !== 'step' && target.step === step)) return undefined;\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 conditionIssues(context: CheckContext): DefinitionIssue[] {\n const issues: DefinitionIssue[] = [];\n for (const entry of context.conditions) {\n const { condition, path } = entry;\n if (typeof condition.field !== 'string') {\n issues.push(error('missing-property', `${path}/field`, 'the condition has no \"field\"', 'Add the key of the field to test'));\n continue;\n }\n const operators = operatorIssues(condition, path);\n issues.push(...operators);\n const reference = referenceIssue(context, entry);\n if (reference) issues.push(reference);\n const target = context.keys.get(condition.field);\n const operator = OPERATORS.find((key) => key in condition);\n if (!reference && !operators.length && target && operator) {\n const mismatch = valueIssue(target.field, operator, condition[operator as keyof ShowCondition], `${path}/${operator}`);\n if (mismatch) issues.push(mismatch);\n }\n }\n return issues;\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}\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>): 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 };\n}\n","import type { FieldValidation } from '../types';\nimport type { CheckContext, FieldEntry } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { closest, error, oneOf, suggest, warning } from './issues';\n\nconst BUILT_IN_TYPES = ['text', 'email', 'phone', 'number', 'password', 'select', 'autocomplete', 'multiselect', 'checkbox', 'radio', 'switch', 'file', 'date', 'datetime', 'textarea'];\nconst CHOICE_TYPES = new Set(['select', 'radio', 'multiselect']);\nconst UNSIZED_TYPES = new Set(['number', 'checkbox', 'switch']);\n\nfunction typeIssue({ field, path }: FieldEntry): DefinitionIssue[] {\n const match = BUILT_IN_TYPES.includes(field.type) ? undefined : closest(field.type, BUILT_IN_TYPES);\n if (match === undefined) return [];\n return [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}\n\nfunction optionIssues({ field, path }: FieldEntry): DefinitionIssue[] {\n if (!CHOICE_TYPES.has(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 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 applicableIssues({ field, path }: FieldEntry, rules: FieldValidation): DefinitionIssue[] {\n if (!BUILT_IN_TYPES.includes(field.type)) return [];\n const numeric = field.type === 'number';\n const names = numeric ? [] : (['min', 'max'] as const).filter((name) => rules[name] !== undefined);\n const sized = UNSIZED_TYPES.has(field.type) ? (['minLength', 'maxLength'] as const).filter((name) => rules[name] !== undefined) : [];\n return [\n ...names.map((name) => warning('rule-not-applicable', `${path}/validation/${name}`, `\"${name}\" applies to number fields only`, `Use ${name}Length to limit text length`)),\n ...sized.map((name) => warning('rule-not-applicable', `${path}/validation/${name}`, `\"${name}\" does not apply to ${field.type} fields`, numeric ? 'Use min and max for numbers' : `Remove ${name}`)),\n ];\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, entry: FieldEntry): DefinitionIssue[] {\n const rules = entry.field.validation;\n if (!rules) return [];\n const { path } = entry;\n const issues = [\n ...rangeIssue(rules, path, 'minLength', 'maxLength'),\n ...rangeIssue(rules, path, 'min', 'max'),\n ...applicableIssues(entry, rules),\n ...patternIssue(rules.pattern, path),\n ];\n if (rules.matchField !== undefined && !context.keys.has(rules.matchField)) {\n issues.push(error('unknown-field', `${path}/validation/matchField`, `\"${rules.matchField}\" is not a field key`, suggest(rules.matchField, context.keyList)));\n }\n const validators = context.validators;\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 dependencyIssues(context: CheckContext, { field, path }: FieldEntry): DefinitionIssue[] {\n return (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\nexport function fieldIssues(context: CheckContext): DefinitionIssue[] {\n return context.entries.flatMap((entry) => [\n ...typeIssue(entry),\n ...optionIssues(entry),\n ...ruleIssues(context, entry),\n ...dependencyIssues(context, entry),\n ]);\n}\n","import type { CheckContext } from './context';\nimport type { DefinitionIssue } from './issues';\nimport { error, warning } 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\nfunction fallthroughIssues({ definition }: CheckContext): DefinitionIssue[] {\n const steps = definition.steps ?? [];\n const issues: DefinitionIssue[] = [];\n steps.forEach((step, index) => {\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 });\n return issues;\n}\n\nexport function graphIssues(context: CheckContext): DefinitionIssue[] {\n return [...cycleIssues(context), ...fallthroughIssues(context)];\n}\n","import type { DefinitionIssue } from './issues';\nimport { error, pointer, warning } from './issues';\n\ntype Entry = Record<string, unknown>;\ntype Check = (value: Entry, path: string) => DefinitionIssue[];\ntype Kind = 'string' | 'number' | 'boolean' | '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 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 return isEntry(value) ? list(value.disabled, `${path}/disabled`, 'a condition object', condition) : [];\n}\n\nconst option: Check = (value, path) => text(value, 'value', path);\n\nconst RULES: Record<string, Kind> = {\n minLength: 'number', maxLength: 'number', min: 'number', max: 'number', pattern: 'string', matchField: 'string', validator: '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 ...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 ...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 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 ...(typeof input.title === 'string' ? [] : [warning('missing-property', '/title', '\"title\" must be a string', 'Add a title for host UI and editors')]),\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 { FormDefinition } from '../types';\nimport { conditionIssues } from './conditions';\nimport { createContext } from './context';\nimport { fieldIssues } from './fields';\nimport { graphIssues } from './graph';\nimport { FormDefinitionError, isError, type DefinitionIssue } from './issues';\nimport { metaIssues, shapeIssues } from './shape';\nimport { structureIssues } from './structure';\n\nexport interface CheckDefinitionOptions {\n validators?: Record<string, unknown>;\n}\n\nfunction ordered(issues: DefinitionIssue[]): DefinitionIssue[] {\n return [...issues.filter(isError), ...issues.filter((issue) => !isError(issue))];\n}\n\nexport function checkDefinition(input: unknown, options: CheckDefinitionOptions = {}): DefinitionIssue[] {\n const shape = shapeIssues(input);\n if (shape.length) return shape;\n const context = createContext(input as FormDefinition, options.validators);\n return ordered([\n ...metaIssues(input as Record<string, unknown>),\n ...structureIssues(context),\n ...conditionIssues(context),\n ...fieldIssues(context),\n ...graphIssues(context),\n ]);\n}\n\nexport function parseDefinition(input: unknown, options?: CheckDefinitionOptions): FormDefinition {\n const errors = checkDefinition(input, options).filter(isError);\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\nexport class FormSubscriptions {\n private version = 0;\n private listeners = new Set<() => void>();\n private fieldVersions = new Map<string, number>();\n private fieldListeners = new Map<string, Set<() => void>>();\n private structureVersion = 0;\n private structureListeners = new Set<() => void>();\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n getSnapshot(): number {\n return this.version;\n }\n\n subscribeField(key: string, listener: () => void): () => void {\n const listeners = this.fieldListeners.get(key) ?? new Set();\n listeners.add(listener);\n this.fieldListeners.set(key, listeners);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) this.fieldListeners.delete(key);\n };\n }\n\n getFieldSnapshot(key: string): number {\n return this.fieldVersions.get(key) ?? 0;\n }\n\n subscribeStructure(listener: () => void): () => void {\n this.structureListeners.add(listener);\n return () => this.structureListeners.delete(listener);\n }\n\n getStructureSnapshot(): number {\n return this.structureVersion;\n }\n\n notify({ fieldKeys = [], structureChanged = false }: NotifyOptions = {}): void {\n for (const key of new Set(fieldKeys)) this.notifyField(key);\n if (structureChanged) this.notifyStructure();\n\n this.version++;\n for (const listener of this.listeners) listener();\n }\n\n private notifyField(key: string): void {\n this.fieldVersions.set(key, (this.fieldVersions.get(key) ?? 0) + 1);\n for (const listener of this.fieldListeners.get(key) ?? []) listener();\n }\n\n private notifyStructure(): void {\n this.structureVersion++;\n for (const listener of this.structureListeners) listener();\n }\n}\n","import type { DefinitionIssue } from '../definition-validation';\n\nfunction isProduction(): boolean {\n try {\n return process.env.NODE_ENV === 'production';\n } catch {\n return false;\n }\n}\n\nexport function warnInDevelopment(issue: DefinitionIssue): void {\n if (!isProduction()) console.warn(`[formhaus] ${issue.message}`);\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 { ActivePath } 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\nexport class VisibilityState {\n readonly allFields: FormField[];\n private readonly fieldsByKey = new Map<string, FormField[]>();\n private routeFields = new Set<string>();\n private readonly path: ActivePath;\n private fieldDependents = new Map<string, Set<FormField>>();\n private stepDependents = new Map<string, Set<FormStep>>();\n private stepOfField = new Map<FormField, FormStep>();\n private visibilityDirty = true;\n private canGoNextDirty = true;\n private cache: VisibilityCache = {\n visibleSteps: [],\n currentStep: null,\n visibleFields: [],\n canGoNext: false,\n };\n\n constructor(private definition: FormDefinition) {\n this.allFields = getAllFields(definition);\n for (const field of this.allFields) this.fieldsByKey.set(field.key, [...(this.fieldsByKey.get(field.key) ?? []), field]);\n this.path = new ActivePath(definition);\n for (const step of definition.steps ?? []) {\n for (const field of step.fields) this.stepOfField.set(field, step);\n }\n this.buildIndexes();\n }\n\n markChanged(structureChanged: boolean, valuesChanged: boolean): void {\n if (structureChanged || valuesChanged) this.path.invalidate();\n if (structureChanged) {\n this.visibilityDirty = true;\n this.canGoNextDirty = true;\n } else if (valuesChanged) {\n this.canGoNextDirty = true;\n }\n }\n\n state(values: Record<string, unknown>, stepIndex: number): VisibilityCache {\n this.recomputeVisibility(values, stepIndex);\n return this.cache;\n }\n\n getCanGoNext(\n values: Record<string, unknown>,\n stepIndex: number,\n validators: Record<string, ValidatorFn>,\n ): boolean {\n this.recomputeVisibility(values, stepIndex);\n if (!this.canGoNextDirty) return this.cache.canGoNext;\n this.canGoNextDirty = false;\n const step = this.cache.currentStep;\n const errors = step ? validateStep(step, this.conditionValues(values), validators) : {};\n this.cache.canGoNext = this.isMultiStep && Object.keys(errors).length === 0;\n return this.cache.canGoNext;\n }\n\n findStepIndex(fieldKey: string, values: Record<string, unknown>, stepIndex: number): number | null {\n const steps = this.state(values, stepIndex).visibleSteps;\n const target = steps.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 this.routeFields.has(key) || this.fieldDependents.has(key) || this.stepDependents.has(key) || clearedFields.size > 0;\n }\n\n cascadeHiddenFields(\n values: Record<string, unknown>,\n errors: Record<string, string>,\n ): Set<string> {\n return this.reconcileHidden(values, errors);\n }\n\n reconcileHidden(values: Record<string, unknown>, errors: Record<string, string>): Set<string> {\n this.path.invalidate();\n const seed = new Set([...this.fieldDependents.keys(), ...this.stepDependents.keys()]);\n return this.drainQueue(seed, values, errors);\n }\n private drainQueue(\n seed: Set<string>,\n values: Record<string, unknown>,\n errors: Record<string, string>,\n ): Set<string> {\n const queue = [...seed];\n const queued = new Set(queue);\n const cleared = new Set<string>();\n const clear = (key: string) => {\n delete values[key];\n delete errors[key];\n this.path.invalidate();\n cleared.add(key);\n if (queued.has(key)) return;\n queued.add(key);\n queue.push(key);\n };\n\n for (let index = 0; index < queue.length; index++) {\n const key = queue[index];\n queued.delete(key);\n this.clearHiddenFields(this.fieldDependents.get(key), values, errors, clear);\n this.clearHiddenSteps(this.stepDependents.get(key), values, errors, clear);\n }\n return cleared;\n }\n\n activeField(key: string, values: Record<string, unknown>): FormField | undefined {\n return this.fieldsByKey.get(key)?.find((field) => this.onPath(field, values) && isVisible(field, this.conditionValues(values)));\n }\n\n isFieldVisible(key: string, values: Record<string, unknown>): boolean {\n return this.activeField(key, values) !== undefined;\n }\n\n conditionValues(values: Record<string, unknown>): Record<string, unknown> { return this.path.values(values); }\n private onPath(field: FormField, values: Record<string, unknown>): boolean {\n const step = this.stepOfField.get(field);\n return !step || this.path.steps(values).includes(step);\n }\n private get isMultiStep(): boolean { return (this.definition.steps ?? []).length > 0; }\n private buildIndexes(): void {\n for (const field of this.allFields) {\n indexConditions(field, this.fieldDependents);\n }\n for (const step of this.definition.steps ?? []) {\n indexConditions(step, this.stepDependents);\n for (const route of step.routes ?? []) {\n for (const field of conditionFields(route)) this.routeFields.add(field);\n }\n }\n }\n private recomputeVisibility(values: Record<string, unknown>, stepIndex: number): void {\n if (!this.visibilityDirty) return;\n this.visibilityDirty = false;\n if (!this.isMultiStep) {\n this.cache.visibleSteps = [];\n this.cache.currentStep = null;\n this.cache.visibleFields = (this.definition.fields ?? []).filter((field) => isVisible(field, this.conditionValues(values)));\n return;\n }\n this.cache.visibleSteps = this.path.steps(values);\n const steps = this.cache.visibleSteps;\n this.cache.currentStep = steps[stepIndex] ?? steps[steps.length - 1] ?? null;\n const current = this.cache.currentStep;\n this.cache.visibleFields = current\n ? current.fields.filter((field) => isVisible(field, this.conditionValues(values)))\n : [];\n }\n private clearHiddenFields(\n fields: Iterable<FormField> | undefined,\n values: Record<string, unknown>,\n errors: Record<string, string>,\n clear: (key: string) => void,\n ): void {\n for (const field of fields ?? []) {\n if (!this.onPath(field, values)) continue;\n if (isVisible(field, this.conditionValues(values)) || (values[field.key] === undefined && errors[field.key] === undefined)) continue;\n clear(field.key);\n }\n }\n private clearHiddenSteps(\n steps: Iterable<FormStep> | undefined,\n values: Record<string, unknown>,\n errors: Record<string, string>,\n clear: (key: string) => void,\n ): void {\n for (const step of steps ?? []) {\n if (isVisible(step, this.conditionValues(values))) continue;\n for (const field of step.fields) {\n if (values[field.key] === undefined && errors[field.key] === undefined) continue;\n clear(field.key);\n }\n }\n }\n}\n","import { checkDefinition, FormDefinitionError } from '../definition-validation';\nimport { isError } from '../definition-validation/issues';\nimport type { ValidatorFn } from '../validation';\nimport type { FormDefinition, FormField, FormStep } from '../types';\nimport type { FormEngineOptions, StepValidateFn, SubmitFn } from './engine-options';\nimport { createValues } from './engine-utils';\nimport { changeStep, goToStepWithField, skipStep } from './navigation';\nimport type { EngineInternals, EngineState, RuntimeNotifyOptions } from './runtime-internals';\nimport { FormSubscriptions, type NotifyOptions } from './subscriptions';\nimport {\n applyValidationErrors,\n getSubmitValues,\n resetEngine,\n validateForm,\n validateOne,\n clearResolvedMatchErrors,\n pruneOffPathErrors,\n} from './validation-state';\nimport { submitForm } from './submission';\nimport { reconcileStepIndex } from './step-routes';\nimport { warnInDevelopment } from './warnings';\nimport { 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 = new FormSubscriptions();\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 const issues = checkDefinition(definition, { validators: this.validators });\n const errors = issues.filter(isError);\n if (errors.length) throw new FormDefinitionError(errors);\n const warn = this.lifecycle.onWarning ?? warnInDevelopment;\n for (const issue of issues) warn(issue);\n this.visibility = new VisibilityState(definition);\n const values = createValues(this.visibility.allFields, initialValues as Record<string, unknown> | undefined);\n this.state = { values, errors: {}, topLevelErrors: [], 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.visibility.state(this.state.values, this.currentStepIndex).visibleSteps;\n }\n\n get currentStep(): FormStep | null {\n return this.visibility.state(this.state.values, this.currentStepIndex).currentStep;\n }\n\n get visibleFields(): FormField[] {\n return this.visibility.state(this.state.values, this.currentStepIndex).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 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 hadError = errors[key] !== undefined;\n values[key] = value;\n delete errors[key];\n for (const [stepId, keys] of this.skipped) if (valueChanged && keys.includes(key)) this.skipped.delete(stepId);\n const clearedFields = this.visibility.cascadeHiddenFields(values, errors);\n const revalidated = clearResolvedMatchErrors(this.internals, key);\n const changedFields = new Set([...clearedFields, ...revalidated]);\n if (valueChanged || hadError) 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?: SubmitFn): Promise<boolean> { return skipStep(this.internals, submit); }\n submit(handler: SubmitFn): 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 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.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { b as FormDefinition } from './definition-H3WUR596.js';
2
-
3
- type CloudAction = 'retry' | 'reload' | null;
1
+ import { C as CloudAction } from './controller-x_emKgtv.js';
2
+ export { a as CloudClientOptions, b as CloudNotice, c as CloudSettings, d as CloudSubmission, e as CloudSubmitterOptions, D as DraftStorage, f as DraftStore, P as PublishedForm, g as createSubmitter, h as fetchDefinition, i as fetchForm, s as sessionDraftStore } from './controller-x_emKgtv.js';
3
+ import './definition-Bufih_Bx.js';
4
4
 
5
5
  declare class CloudError extends Error {
6
6
  readonly status: number;
@@ -13,61 +13,4 @@ declare class CloudError extends Error {
13
13
  get retryable(): boolean;
14
14
  }
15
15
 
16
- interface Searchable {
17
- querySelector(selector: string): unknown;
18
- }
19
- interface Focusable extends Searchable {
20
- focus(options?: {
21
- preventScroll?: boolean;
22
- }): void;
23
- scrollIntoView?(options?: {
24
- block?: 'center' | 'nearest';
25
- }): void;
26
- matches(selector: string): boolean;
27
- }
28
- declare function focusProblem(root: Searchable | null, notice?: Focusable | null): void;
29
-
30
- interface CloudSubmission {
31
- id: string;
32
- values: Record<string, unknown>;
33
- }
34
- interface CloudClientOptions {
35
- id: string;
36
- apiBase?: string;
37
- }
38
- declare function fetchDefinition(options: CloudClientOptions, signal?: AbortSignal): Promise<FormDefinition>;
39
- interface CloudSubmitterOptions extends CloudClientOptions {
40
- version?: number;
41
- }
42
- declare function createSubmitter(options: CloudSubmitterOptions): (values: Record<string, unknown>, skippedSteps?: string[]) => Promise<CloudSubmission>;
43
-
44
- interface CloudNotice {
45
- tone: 'error' | 'info';
46
- message: string;
47
- action: CloudAction;
48
- details: string[];
49
- }
50
- interface CloudState {
51
- definition: FormDefinition | null;
52
- version: number | null;
53
- loadError: Error | null;
54
- errors: Record<string, string>;
55
- notice: CloudNotice | null;
56
- initialValues: Record<string, unknown> | null;
57
- revision: number;
58
- attempt: number;
59
- done: boolean;
60
- }
61
- interface CloudCallbacks {
62
- onChange(state: CloudState): void;
63
- onSuccess?(submission: CloudSubmission): void;
64
- onError?(error: unknown): void;
65
- }
66
- declare const initialCloudState: CloudState;
67
- declare function createCloudController(options: CloudClientOptions, callbacks: CloudCallbacks): {
68
- start(): void;
69
- dispose(): void;
70
- submit(values: Record<string, unknown>, skippedSteps?: string[]): Promise<void>;
71
- };
72
-
73
- export { type CloudAction, type CloudCallbacks, type CloudClientOptions, CloudError, type CloudNotice, type CloudState, type CloudSubmission, type CloudSubmitterOptions, createCloudController, createSubmitter, fetchDefinition, focusProblem, initialCloudState };
16
+ export { CloudAction, CloudError };
package/dist/cloud.js CHANGED
@@ -1,3 +1,2 @@
1
- var E="This form was updated. Please review your answers and submit again.",R="Please answer again.",h={message:"Something went wrong. Try again.",action:"retry"},j={message:"Could not send. Try again.",action:"retry"},w={message:"Could not send. Reload the page and try again.",action:"reload"},v={network:{message:"You are offline. Check your connection and try again.",action:"retry"},invalid:{message:"Some answers were not accepted.",action:null},rate_limited:{message:"Too many attempts. Wait a minute and try again.",action:"retry"},limit_reached:{message:"This form is not accepting responses right now.",action:null},not_found:{message:"This form no longer exists.",action:null},paused:{message:"This form is paused.",action:null},expired:{message:"This form has expired.",action:null},body_too_large:{message:"Your answers are too long. Shorten them and try again.",action:null},idempotency_key_reused:{message:"Your answers changed while sending. Try again.",action:"retry"},form_updated:{message:"This form was updated. Reload the page.",action:"reload"},malformed_body:w,unsupported_media_type:w,invalid_idempotency_key:w,unavailable:h,internal:h},M={0:"network",400:"malformed_body",402:"limit_reached",404:"not_found",410:"expired",413:"body_too_large",422:"invalid",429:"rate_limited"};function g(n,e=""){let o=v[e]??v[M[n]??""];return o||(n>=500?h:j)}var d=class extends Error{constructor(e,o,i,t,r){let a=g(e,o);super(a.message),this.name="CloudError",this.status=e,this.code=o,this.errors=i,this.version=t,this.action=a.action,this.cause=r;}get retryable(){return this.action==="retry"}};function F(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function y(n){return new d(0,"network",void 0,void 0,n)}async function k(n){let e=await n.json().catch(()=>null);if(!F(e))return new d(n.status,"unknown");let o=F(e.errors)?e.errors:void 0,i=typeof e.version=="number"&&Number.isInteger(e.version)?e.version:void 0;return new d(n.status,typeof e.error=="string"?e.error:"unknown",o,i)}var x='input:not([type="hidden"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';function A(n,e){e.scrollIntoView?.({block:"center"}),n.focus({preventScroll:true});}function q(n,e){if(e)return A(e,e);let o=n?.querySelector('[aria-invalid="true"]');o&&A(o.matches(x)?o:o.querySelector(x)??o,o);}function _(){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();let n=crypto.getRandomValues(new Uint8Array(16));n[6]=n[6]&15|64,n[8]=n[8]&63|128;let e=Array.from(n,o=>o.toString(16).padStart(2,"0")).join("");return `${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}var B="https://api.formhaus.dev",G="Formhaus-Version";function D({id:n,apiBase:e=B}){return `${e.replace(/\/+$/,"")}/f/${encodeURIComponent(n)}`}async function O(n,e){try{return await fetch(n,e)}catch(o){throw e?.signal?.aborted?o:y(o)}}function Y(n){let e=Number(n.headers?.get(G));return Number.isInteger(e)&&e>0?e:void 0}async function b(n,e,o){let i=o===void 0?"":`?v=${o}`,t=await O(`${D(n)}/definition${i}`,{signal:e});if(!t.ok)throw await k(t);return {definition:await t.json(),version:Y(t)}}async function W(n,e){return (await b(n,e)).definition}function m(n){let e=null;return async(o,i=[])=>{let t=JSON.stringify({values:o,skippedSteps:i,version:n.version});e?.body!==t&&(e={body:t,key:_()});let r=await O(D(n),{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":e.key},body:t});if(!r.ok)throw await k(r);return e=null,await r.json()}}var H={multiselect:"list",checkbox:"flag",switch:"flag",number:"number",file:"file"};function C(n){return [...n.fields??[],...(n.steps??[]).flatMap(e=>e.fields)]}function S(n){return H[n.type]??"text"}function K(n,e){if(!Array.isArray(n.options))return true;let o=new Set(n.options.map(i=>String(i.value)));return (Array.isArray(e)?e:[e]).every(i=>o.has(String(i)))}function L(n,e,o){if(n&&S(n)!==S(e))return false;switch(S(e)){case "list":return Array.isArray(o);case "flag":return typeof o=="boolean";case "number":return typeof o=="number";case "text":return typeof o=="string";default:return n!==void 0}}function P(n,e,o){let i=new Map(o?C(o).map(r=>[r.key,r]):[]),t={};for(let r of C(e)){let a=n[r.key];a!=null&&L(i.get(r.key),r,a)&&K(r,a)&&(t[r.key]=a);}return t}function T(n,e){let o=new Set(C(n).map(r=>r.key)),i={},t=new Set;for(let[r,a]of Object.entries(e))o.has(r)?i[r]=a:t.add(a);return {fields:i,other:[...t]}}function N(n,e,o,i){let t={};for(let r of C(n)){let a=e[r.key]!==void 0&&e[r.key]!==null&&e[r.key]!=="";a&&!(r.key in o)?t[r.key]=R:i[r.key]&&(!a||r.key in o)&&(t[r.key]=i[r.key]);}return t}var V={definition:null,version:null,loadError:null,errors:{},notice:null,initialValues:null,revision:0,attempt:0,done:false};function I(n,e=[]){return {tone:"error",message:n.message,action:n.action,details:e}}function J(n,e){let o=new AbortController,i=m(n),t=()=>!o.signal.aborted,r=V,a=s=>{r={...r,...s},e.onChange(r);},p=s=>a({...s,attempt:r.attempt+1});async function $(s,c){let u=r.definition;try{let l=await b(n,o.signal,s.version);if(!t())return;if(l.version===void 0||l.version<(s.version??0))throw new d(409,"form_updated");let f=u?P(c,l.definition,u):{};i=m({...n,version:l.version}),p({definition:l.definition,version:l.version,initialValues:f,revision:r.revision+1,errors:N(l.definition,c,f,s.errors??{}),notice:{tone:"info",message:E,action:null,details:[]}});}catch{t()&&p({notice:{tone:"error",...g(409,"form_updated"),details:[]}});}}async function U(s,c){let u=s instanceof d?s:y(s);if(u.code==="form_updated"&&u.version!==void 0)return $(u,c);if(u.status!==422)return p({notice:I(u)});let l=u.errors??{},f=r.definition?T(r.definition,l):{fields:l,other:[]};p({errors:f.fields,notice:f.other.length>0?I(u,f.other):null});}return {start(){b(n,o.signal).then(s=>{t()&&(i=m({...n,version:s.version}),a({definition:s.definition,version:s.version??null}));},s=>{t()&&(a({loadError:s}),e.onError?.(s));});},dispose(){o.abort();},async submit(s,c){r.notice&&a({notice:null});try{let u=await i(s,c);if(!t())return;a({done:!0}),e.onSuccess?.(u);}catch(u){throw t()&&(await U(u,s),e.onError?.(u)),u}}}}
2
- export{d as CloudError,J as createCloudController,m as createSubmitter,W as fetchDefinition,q as focusProblem,V as initialCloudState};//# sourceMappingURL=cloud.js.map
1
+ export{d as CloudError,i as createSubmitter,h as fetchDefinition,g as fetchForm,k as sessionDraftStore}from'./chunk-EPXEKDCK.js';//# sourceMappingURL=cloud.js.map
3
2
  //# sourceMappingURL=cloud.js.map
package/dist/cloud.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cloud/failures.ts","../src/cloud/error.ts","../src/cloud/focus.ts","../src/cloud/uuid.ts","../src/cloud/client.ts","../src/cloud/carry.ts","../src/cloud/controller.ts"],"names":["FORM_UPDATED_MESSAGE","ANSWER_AGAIN","SERVER","GENERIC","BROKEN","BY_CODE","CODE_BY_STATUS","failureFor","status","code","known","CloudError","errors","version","cause","failure","isRecord","value","networkError","toCloudError","response","body","CONTROLS","reveal","target","scrollTo","focusProblem","root","notice","invalid","randomId","bytes","hex","byte","DEFAULT_API_BASE","VERSION_HEADER","endpoint","id","apiBase","send","url","init","error","versionOf","fetchPublished","options","signal","after","query","fetchDefinition","createSubmitter","pending","values","skippedSteps","SHAPES","fieldsOf","definition","step","shapeOf","field","allowed","option","item","fits","previous","next","carryValues","before","kept","splitErrors","fields","other","key","message","updatedErrors","sent","rejected","answered","initialCloudState","errorNotice","details","createCloudController","callbacks","controller","submitter","alive","state","update","patch","report","refresh","fail","cloud","split","published","submission"],"mappings":"AAOO,IAAMA,EAAuB,qEAAA,CACvBC,CAAAA,CAAe,sBAAA,CAEtBC,CAAAA,CAAuB,CAAE,OAAA,CAAS,kCAAA,CAAoC,MAAA,CAAQ,OAAQ,EACtFC,CAAAA,CAAwB,CAAE,QAAS,4BAAA,CAA8B,MAAA,CAAQ,OAAQ,CAAA,CACjFC,CAAAA,CAAuB,CAAE,OAAA,CAAS,iDAAkD,MAAA,CAAQ,QAAS,EAErGC,CAAAA,CAAwC,CAC5C,QAAS,CAAE,OAAA,CAAS,uDAAA,CAAyD,MAAA,CAAQ,OAAQ,CAAA,CAC7F,OAAA,CAAS,CAAE,OAAA,CAAS,iCAAA,CAAmC,OAAQ,IAAK,CAAA,CACpE,YAAA,CAAc,CAAE,QAAS,iDAAA,CAAmD,MAAA,CAAQ,OAAQ,CAAA,CAC5F,aAAA,CAAe,CAAE,OAAA,CAAS,iDAAA,CAAmD,MAAA,CAAQ,IAAK,EAC1F,SAAA,CAAW,CAAE,QAAS,6BAAA,CAA+B,MAAA,CAAQ,IAAK,CAAA,CAClE,MAAA,CAAQ,CAAE,OAAA,CAAS,uBAAwB,MAAA,CAAQ,IAAK,EACxD,OAAA,CAAS,CAAE,QAAS,wBAAA,CAA0B,MAAA,CAAQ,IAAK,CAAA,CAC3D,eAAgB,CAAE,OAAA,CAAS,yDAA0D,MAAA,CAAQ,IAAK,EAClG,sBAAA,CAAwB,CAAE,OAAA,CAAS,gDAAA,CAAkD,OAAQ,OAAQ,CAAA,CACrG,aAAc,CAAE,OAAA,CAAS,0CAA2C,MAAA,CAAQ,QAAS,CAAA,CACrF,cAAA,CAAgBD,EAChB,sBAAA,CAAwBA,CAAAA,CACxB,wBAAyBA,CAAAA,CACzB,WAAA,CAAaF,EACb,QAAA,CAAUA,CACZ,CAAA,CAEMI,CAAAA,CAAyC,CAC7C,CAAA,CAAG,SAAA,CACH,IAAK,gBAAA,CACL,GAAA,CAAK,gBACL,GAAA,CAAK,WAAA,CACL,GAAA,CAAK,SAAA,CACL,IAAK,gBAAA,CACL,GAAA,CAAK,UACL,GAAA,CAAK,cACP,EAEO,SAASC,CAAAA,CAAWC,CAAAA,CAAgBC,CAAAA,CAAO,GAAkB,CAClE,IAAMC,EAAQL,CAAAA,CAAQI,CAAI,GAAKJ,CAAAA,CAAQC,CAAAA,CAAeE,CAAM,CAAA,EAAK,EAAE,CAAA,CACnE,OAAIE,IACGF,CAAAA,EAAU,GAAA,CAAMN,EAASC,CAAAA,CAClC,CC7CO,IAAMQ,CAAAA,CAAN,cAAyB,KAAM,CAQpC,YAAYH,CAAAA,CAAgBC,CAAAA,CAAcG,EAAiCC,CAAAA,CAAkBC,CAAAA,CAAiB,CAC5G,IAAMC,EAAUR,CAAAA,CAAWC,CAAAA,CAAQC,CAAI,CAAA,CACvC,KAAA,CAAMM,EAAQ,OAAO,CAAA,CACrB,IAAA,CAAK,IAAA,CAAO,aACZ,IAAA,CAAK,MAAA,CAASP,EACd,IAAA,CAAK,IAAA,CAAOC,EACZ,IAAA,CAAK,MAAA,CAASG,CAAAA,CACd,IAAA,CAAK,QAAUC,CAAAA,CACf,IAAA,CAAK,OAASE,CAAAA,CAAQ,MAAA,CACtB,KAAK,KAAA,CAAQD,EACf,CAEA,IAAI,WAAqB,CACvB,OAAO,KAAK,MAAA,GAAW,OACzB,CACF,EAEA,SAASE,CAAAA,CAASC,CAAAA,CAAkD,CAClE,OAAOA,CAAAA,GAAU,MAAQ,OAAOA,CAAAA,EAAU,UAAY,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAC5E,CAEO,SAASC,EAAaJ,CAAAA,CAA4B,CACvD,OAAO,IAAIH,CAAAA,CAAW,CAAA,CAAG,SAAA,CAAW,OAAW,MAAA,CAAWG,CAAK,CACjE,CAEA,eAAsBK,EAAaC,CAAAA,CAA8C,CAC/E,IAAMC,CAAAA,CAAgB,MAAMD,CAAAA,CAAS,IAAA,GAAO,KAAA,CAAM,IAAM,IAAI,CAAA,CAC5D,GAAI,CAACJ,CAAAA,CAASK,CAAI,CAAA,CAAG,OAAO,IAAIV,CAAAA,CAAWS,CAAAA,CAAS,OAAQ,SAAS,CAAA,CACrE,IAAMR,CAAAA,CAASI,EAASK,CAAAA,CAAK,MAAM,EAAIA,CAAAA,CAAK,MAAA,CAAmC,OACzER,CAAAA,CAAU,OAAOQ,CAAAA,CAAK,OAAA,EAAY,UAAY,MAAA,CAAO,SAAA,CAAUA,EAAK,OAAO,CAAA,CAAIA,EAAK,OAAA,CAAU,MAAA,CACpG,OAAO,IAAIV,EAAWS,CAAAA,CAAS,MAAA,CAAQ,OAAOC,CAAAA,CAAK,KAAA,EAAU,SAAWA,CAAAA,CAAK,KAAA,CAAQ,SAAA,CAAWT,CAAAA,CAAQC,CAAO,CACjH,CC/BA,IAAMS,CAAAA,CAAW,kHAAA,CAEjB,SAASC,CAAAA,CAAOC,CAAAA,CAAmBC,CAAAA,CAA2B,CAC5DA,EAAS,cAAA,GAAiB,CAAE,MAAO,QAAS,CAAC,EAC7CD,CAAAA,CAAO,KAAA,CAAM,CAAE,aAAA,CAAe,IAAK,CAAC,EACtC,CAEO,SAASE,CAAAA,CAAaC,EAAyBC,CAAAA,CAAiC,CACrF,GAAIA,CAAAA,CAAQ,OAAOL,CAAAA,CAAOK,CAAAA,CAAQA,CAAM,CAAA,CACxC,IAAMC,EAAUF,CAAAA,EAAM,aAAA,CAAc,uBAAuB,CAAA,CACvDE,GAASN,CAAAA,CAAOM,CAAAA,CAAQ,QAAQP,CAAQ,CAAA,CAAIO,EAAWA,CAAAA,CAAQ,aAAA,CAAcP,CAAQ,CAAA,EAA0BO,EAASA,CAAO,EACrI,CCrBO,SAASC,CAAAA,EAAmB,CACjC,GAAI,OAAO,MAAA,CAAO,UAAA,EAAe,WAAY,OAAO,MAAA,CAAO,YAAW,CACtE,IAAMC,EAAQ,MAAA,CAAO,eAAA,CAAgB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,CACvDA,EAAM,CAAC,CAAA,CAAKA,EAAM,CAAC,CAAA,CAAI,EAAA,CAAM,EAAA,CAC7BA,EAAM,CAAC,CAAA,CAAKA,EAAM,CAAC,CAAA,CAAI,GAAM,GAAA,CAC7B,IAAMC,CAAAA,CAAM,KAAA,CAAM,KAAKD,CAAAA,CAAQE,CAAAA,EAASA,EAAK,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,EAAE,IAAA,CAAK,EAAE,EACnF,OAAO,CAAA,EAAGD,EAAI,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,IAAIA,CAAAA,CAAI,KAAA,CAAM,EAAG,EAAE,CAAC,IAAIA,CAAAA,CAAI,KAAA,CAAM,EAAA,CAAI,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAI,MAAM,EAAA,CAAI,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAI,KAAA,CAAM,EAAE,CAAC,CAAA,CAC1G,CCHA,IAAME,CAAAA,CAAmB,0BAAA,CACnBC,EAAiB,kBAAA,CAiBvB,SAASC,CAAAA,CAAS,CAAE,GAAAC,CAAAA,CAAI,OAAA,CAAAC,EAAUJ,CAAiB,CAAA,CAA+B,CAChF,OAAO,CAAA,EAAGI,CAAAA,CAAQ,OAAA,CAAQ,OAAQ,EAAE,CAAC,MAAM,kBAAA,CAAmBD,CAAE,CAAC,CAAA,CACnE,CAEA,eAAeE,CAAAA,CAAKC,EAAaC,CAAAA,CAAiD,CAChF,GAAI,CACF,OAAO,MAAM,KAAA,CAAMD,CAAAA,CAAKC,CAAI,CAC9B,OAASC,CAAAA,CAAO,CACd,MAAID,CAAAA,EAAM,MAAA,EAAQ,QAAeC,CAAAA,CAC3BxB,CAAAA,CAAawB,CAAK,CAC1B,CACF,CAEA,SAASC,EAAUvB,CAAAA,CAA6C,CAC9D,IAAMP,CAAAA,CAAU,MAAA,CAAOO,CAAAA,CAAS,OAAA,EAAS,IAAIe,CAAc,CAAC,EAC5D,OAAO,MAAA,CAAO,UAAUtB,CAAO,CAAA,EAAKA,CAAAA,CAAU,CAAA,CAAIA,EAAU,MAC9D,CAEA,eAAsB+B,CAAAA,CAAeC,CAAAA,CAA6BC,EAAsBC,CAAAA,CAA8C,CACpI,IAAMC,CAAAA,CAAQD,IAAU,MAAA,CAAY,EAAA,CAAK,MAAMA,CAAK,CAAA,CAAA,CAC9C3B,EAAW,MAAMmB,CAAAA,CAAK,CAAA,EAAGH,CAAAA,CAASS,CAAO,CAAC,CAAA,WAAA,EAAcG,CAAK,CAAA,CAAA,CAAI,CAAE,OAAAF,CAAO,CAAC,CAAA,CACjF,GAAI,CAAC1B,CAAAA,CAAS,EAAA,CAAI,MAAM,MAAMD,CAAAA,CAAaC,CAAQ,CAAA,CACnD,OAAO,CAAE,UAAA,CAAY,MAAMA,CAAAA,CAAS,IAAA,GAA0B,OAAA,CAASuB,CAAAA,CAAUvB,CAAQ,CAAE,CAC7F,CAEA,eAAsB6B,EAAgBJ,CAAAA,CAA6BC,CAAAA,CAA+C,CAChH,OAAA,CAAQ,MAAMF,EAAeC,CAAAA,CAASC,CAAM,CAAA,EAAG,UACjD,CAMO,SAASI,CAAAA,CAAgBL,EAAgC,CAC9D,IAAIM,EAAgD,IAAA,CAEpD,OAAO,MAAOC,CAAAA,CAAiCC,EAAyB,EAAC,GAAgC,CACvG,IAAMhC,CAAAA,CAAO,KAAK,SAAA,CAAU,CAAE,MAAA,CAAA+B,CAAAA,CAAQ,aAAAC,CAAAA,CAAc,OAAA,CAASR,EAAQ,OAAQ,CAAC,EAC1EM,CAAAA,EAAS,IAAA,GAAS9B,CAAAA,GAAM8B,CAAAA,CAAU,CAAE,IAAA,CAAA9B,CAAAA,CAAM,IAAKS,CAAAA,EAAW,GAC9D,IAAMV,CAAAA,CAAW,MAAMmB,CAAAA,CAAKH,EAASS,CAAO,CAAA,CAAG,CAC7C,MAAA,CAAQ,MAAA,CACR,QAAS,CAAE,cAAA,CAAgB,kBAAA,CAAoB,iBAAA,CAAmBM,EAAQ,GAAI,CAAA,CAC9E,KAAA9B,CACF,CAAC,EACD,GAAI,CAACD,CAAAA,CAAS,EAAA,CAAI,MAAM,MAAMD,CAAAA,CAAaC,CAAQ,CAAA,CACnD,OAAA+B,EAAU,IAAA,CACH,MAAM/B,CAAAA,CAAS,IAAA,EACxB,CACF,CCnEA,IAAMkC,CAAAA,CAAiC,CACrC,YAAa,MAAA,CACb,QAAA,CAAU,MAAA,CACV,MAAA,CAAQ,OACR,MAAA,CAAQ,QAAA,CACR,KAAM,MACR,CAAA,CAEA,SAASC,CAAAA,CAASC,CAAAA,CAAyC,CACzD,OAAO,CAAC,GAAIA,CAAAA,CAAW,QAAU,EAAC,CAAI,IAAIA,CAAAA,CAAW,KAAA,EAAS,EAAC,EAAG,QAASC,CAAAA,EAASA,CAAAA,CAAK,MAAM,CAAC,CAClG,CAEA,SAASC,CAAAA,CAAQC,CAAAA,CAA0B,CACzC,OAAOL,CAAAA,CAAOK,CAAAA,CAAM,IAAI,CAAA,EAAK,MAC/B,CAEA,SAASC,CAAAA,CAAQD,CAAAA,CAAkB1C,EAAyB,CAC1D,GAAI,CAAC,KAAA,CAAM,OAAA,CAAQ0C,EAAM,OAAO,CAAA,CAAG,OAAO,KAAA,CAC1C,IAAMd,CAAAA,CAAU,IAAI,IAAIc,CAAAA,CAAM,OAAA,CAAQ,IAAKE,CAAAA,EAAW,MAAA,CAAOA,CAAAA,CAAO,KAAK,CAAC,CAAC,CAAA,CAC3E,QAAQ,KAAA,CAAM,OAAA,CAAQ5C,CAAK,CAAA,CAAIA,CAAAA,CAAQ,CAACA,CAAK,GAAG,KAAA,CAAO6C,CAAAA,EAASjB,EAAQ,GAAA,CAAI,MAAA,CAAOiB,CAAI,CAAC,CAAC,CAC3F,CAEA,SAASC,CAAAA,CAAKC,CAAAA,CAAiCC,EAAiBhD,CAAAA,CAAyB,CACvF,GAAI+C,CAAAA,EAAYN,CAAAA,CAAQM,CAAQ,CAAA,GAAMN,EAAQO,CAAI,CAAA,CAAG,OAAO,MAAA,CAC5D,OAAQP,EAAQO,CAAI,CAAA,EAClB,KAAK,OAAQ,OAAO,KAAA,CAAM,QAAQhD,CAAK,CAAA,CACvC,KAAK,MAAA,CAAQ,OAAO,OAAOA,CAAAA,EAAU,UACrC,KAAK,QAAA,CAAU,OAAO,OAAOA,CAAAA,EAAU,SACvC,KAAK,MAAA,CAAQ,OAAO,OAAOA,GAAU,QAAA,CACrC,QAAS,OAAO+C,CAAAA,GAAa,MAC/B,CACF,CAEO,SAASE,CAAAA,CACdd,CAAAA,CACAa,EACAD,CAAAA,CACyB,CACzB,IAAMG,CAAAA,CAAS,IAAI,IAAIH,CAAAA,CAAWT,CAAAA,CAASS,CAAQ,CAAA,CAAE,IAAKL,CAAAA,EAAU,CAACA,EAAM,GAAA,CAAKA,CAAK,CAAC,CAAA,CAAI,EAAE,CAAA,CACtFS,EAAgC,EAAC,CACvC,QAAWT,CAAAA,IAASJ,CAAAA,CAASU,CAAI,CAAA,CAAG,CAClC,IAAMhD,CAAAA,CAAQmC,EAAOO,CAAAA,CAAM,GAAG,EACH1C,CAAAA,EAAU,IAAA,EACjC8C,EAAKI,CAAAA,CAAO,GAAA,CAAIR,CAAAA,CAAM,GAAG,EAAGA,CAAAA,CAAO1C,CAAK,GAAK2C,CAAAA,CAAQD,CAAAA,CAAO1C,CAAK,CAAA,GAAGmD,CAAAA,CAAKT,CAAAA,CAAM,GAAG,EAAI1C,CAAAA,EAC5F,CACA,OAAOmD,CACT,CAEO,SAASC,CAAAA,CAAYb,CAAAA,CAA4B5C,CAAAA,CAAgC,CACtF,IAAMF,CAAAA,CAAQ,IAAI,IAAI6C,CAAAA,CAASC,CAAU,EAAE,GAAA,CAAKG,CAAAA,EAAUA,CAAAA,CAAM,GAAG,CAAC,CAAA,CAC9DW,CAAAA,CAAiC,EAAC,CAClCC,CAAAA,CAAQ,IAAI,GAAA,CAClB,IAAA,GAAW,CAACC,CAAAA,CAAKC,CAAO,CAAA,GAAK,MAAA,CAAO,QAAQ7D,CAAM,CAAA,CAC5CF,EAAM,GAAA,CAAI8D,CAAG,CAAA,CAAGF,CAAAA,CAAOE,CAAG,CAAA,CAAIC,CAAAA,CAC7BF,EAAM,GAAA,CAAIE,CAAO,EAExB,OAAO,CAAE,MAAA,CAAAH,CAAAA,CAAQ,MAAO,CAAC,GAAGC,CAAK,CAAE,CACrC,CAEO,SAASG,CAAAA,CACdT,CAAAA,CACAU,CAAAA,CACAP,EACAQ,CAAAA,CACwB,CACxB,IAAMhE,CAAAA,CAAiC,GACvC,IAAA,IAAW+C,CAAAA,IAASJ,CAAAA,CAASU,CAAI,EAAG,CAClC,IAAMY,EAAWF,CAAAA,CAAKhB,CAAAA,CAAM,GAAG,CAAA,GAAM,MAAA,EAAagB,CAAAA,CAAKhB,CAAAA,CAAM,GAAG,CAAA,GAAM,IAAA,EAAQgB,EAAKhB,CAAAA,CAAM,GAAG,IAAM,EAAA,CAC9FkB,CAAAA,EAAY,EAAElB,CAAAA,CAAM,OAAOS,CAAAA,CAAAA,CAAOxD,CAAAA,CAAO+C,EAAM,GAAG,CAAA,CAAI1D,EACjD2E,CAAAA,CAASjB,CAAAA,CAAM,GAAG,CAAA,GAAM,CAACkB,CAAAA,EAAYlB,CAAAA,CAAM,OAAOS,CAAAA,CAAAA,GAAOxD,CAAAA,CAAO+C,EAAM,GAAG,CAAA,CAAIiB,CAAAA,CAASjB,CAAAA,CAAM,GAAG,CAAA,EAC1G,CACA,OAAO/C,CACT,KC5CakE,CAAAA,CAAgC,CAC3C,UAAA,CAAY,IAAA,CAAM,QAAS,IAAA,CAAM,SAAA,CAAW,KAAM,MAAA,CAAQ,GAAI,MAAA,CAAQ,IAAA,CACtE,aAAA,CAAe,IAAA,CAAM,SAAU,CAAA,CAAG,OAAA,CAAS,EAAG,IAAA,CAAM,KACtD,EAEA,SAASC,CAAAA,CAAYrC,CAAAA,CAAmBsC,CAAAA,CAAoB,EAAC,CAAgB,CAC3E,OAAO,CAAE,IAAA,CAAM,QAAS,OAAA,CAAStC,CAAAA,CAAM,OAAA,CAAS,MAAA,CAAQA,EAAM,MAAA,CAAQ,OAAA,CAAAsC,CAAQ,CAChF,CAEO,SAASC,CAAAA,CAAsBpC,CAAAA,CAA6BqC,CAAAA,CAA2B,CAC5F,IAAMC,CAAAA,CAAa,IAAI,gBACnBC,CAAAA,CAAYlC,CAAAA,CAAgBL,CAAO,CAAA,CACjCwC,CAAAA,CAAQ,IAAM,CAACF,EAAW,MAAA,CAAO,OAAA,CACnCG,EAAQR,CAAAA,CACNS,CAAAA,CAAUC,GAA+B,CAC7CF,CAAAA,CAAQ,CAAE,GAAGA,EAAO,GAAGE,CAAM,EAC7BN,CAAAA,CAAU,QAAA,CAASI,CAAK,EAC1B,CAAA,CACMG,CAAAA,CAAUD,CAAAA,EAA+BD,EAAO,CAAE,GAAGC,EAAO,OAAA,CAASF,CAAAA,CAAM,QAAU,CAAE,CAAC,CAAA,CAE9F,eAAeI,EAAQhD,CAAAA,CAAmBiC,CAAAA,CAA+B,CACvE,IAAMR,CAAAA,CAASmB,EAAM,UAAA,CACrB,GAAI,CACF,IAAMrB,EAAO,MAAMrB,CAAAA,CAAeC,EAASsC,CAAAA,CAAW,MAAA,CAAQzC,EAAM,OAAO,CAAA,CAC3E,GAAI,CAAC2C,GAAM,CAAG,OACd,GAAIpB,CAAAA,CAAK,OAAA,GAAY,QAAaA,CAAAA,CAAK,OAAA,EAAWvB,CAAAA,CAAM,OAAA,EAAW,GAAI,MAAM,IAAI/B,EAAW,GAAA,CAAK,cAAc,EAC/G,IAAMyD,CAAAA,CAAOD,CAAAA,CAASD,CAAAA,CAAYS,EAAMV,CAAAA,CAAK,UAAA,CAAYE,CAAM,CAAA,CAAI,GACnEiB,CAAAA,CAAYlC,CAAAA,CAAgB,CAAE,GAAGL,EAAS,OAAA,CAASoB,CAAAA,CAAK,OAAQ,CAAC,CAAA,CACjEwB,EAAO,CACL,UAAA,CAAYxB,CAAAA,CAAK,UAAA,CACjB,QAASA,CAAAA,CAAK,OAAA,CACd,cAAeG,CAAAA,CACf,QAAA,CAAUkB,EAAM,QAAA,CAAW,CAAA,CAC3B,MAAA,CAAQZ,CAAAA,CAAcT,EAAK,UAAA,CAAYU,CAAAA,CAAMP,EAAM1B,CAAAA,CAAM,MAAA,EAAU,EAAE,CAAA,CACrE,MAAA,CAAQ,CAAE,KAAM,MAAA,CAAQ,OAAA,CAAS1C,EAAsB,MAAA,CAAQ,IAAA,CAAM,QAAS,EAAG,CACnF,CAAC,EACH,CAAA,KAAQ,CACFqF,GAAM,EAAGI,CAAAA,CAAO,CAAE,MAAA,CAAQ,CAAE,IAAA,CAAM,OAAA,CAAS,GAAGlF,CAAAA,CAAW,GAAA,CAAK,cAAc,CAAA,CAAG,OAAA,CAAS,EAAG,CAAE,CAAC,EACpG,CACF,CAEA,eAAeoF,EAAKjD,CAAAA,CAAgBU,CAAAA,CAAiC,CACnE,IAAMwC,CAAAA,CAAQlD,CAAAA,YAAiB/B,CAAAA,CAAa+B,EAAQxB,CAAAA,CAAawB,CAAK,EACtE,GAAIkD,CAAAA,CAAM,OAAS,cAAA,EAAkBA,CAAAA,CAAM,OAAA,GAAY,MAAA,CAAW,OAAOF,CAAAA,CAAQE,CAAAA,CAAOxC,CAAM,CAAA,CAC9F,GAAIwC,EAAM,MAAA,GAAW,GAAA,CAAK,OAAOH,CAAAA,CAAO,CAAE,MAAA,CAAQV,CAAAA,CAAYa,CAAK,CAAE,CAAC,EACtE,IAAMhF,CAAAA,CAASgF,CAAAA,CAAM,MAAA,EAAU,EAAC,CAC1BC,CAAAA,CAAQP,EAAM,UAAA,CAAajB,CAAAA,CAAYiB,EAAM,UAAA,CAAY1E,CAAM,CAAA,CAAI,CAAE,OAAQA,CAAAA,CAAQ,KAAA,CAAO,EAAG,CAAA,CACrG6E,EAAO,CAAE,MAAA,CAAQI,CAAAA,CAAM,MAAA,CAAQ,OAAQA,CAAAA,CAAM,KAAA,CAAM,OAAS,CAAA,CAAId,CAAAA,CAAYa,EAAOC,CAAAA,CAAM,KAAK,CAAA,CAAI,IAAK,CAAC,EAC1G,CAEA,OAAO,CACL,KAAA,EAAQ,CACNjD,CAAAA,CAAeC,CAAAA,CAASsC,CAAAA,CAAW,MAAM,EAAE,IAAA,CACxCW,CAAAA,EAAc,CACRT,CAAAA,EAAM,GACXD,EAAYlC,CAAAA,CAAgB,CAAE,GAAGL,CAAAA,CAAS,QAASiD,CAAAA,CAAU,OAAQ,CAAC,CAAA,CACtEP,CAAAA,CAAO,CAAE,UAAA,CAAYO,CAAAA,CAAU,UAAA,CAAY,OAAA,CAASA,EAAU,OAAA,EAAW,IAAK,CAAC,CAAA,EACjF,CAAA,CACCpD,GAAiB,CACX2C,CAAAA,EAAM,GACXE,CAAAA,CAAO,CAAE,SAAA,CAAW7C,CAAM,CAAC,CAAA,CAC3BwC,CAAAA,CAAU,UAAUxC,CAAK,CAAA,EAC3B,CACF,EACF,EACA,OAAA,EAAU,CACRyC,EAAW,KAAA,GACb,EACA,MAAM,MAAA,CAAO/B,CAAAA,CAAiCC,CAAAA,CAAyB,CACjEiC,CAAAA,CAAM,MAAA,EAAQC,EAAO,CAAE,MAAA,CAAQ,IAAK,CAAC,CAAA,CACzC,GAAI,CACF,IAAMQ,CAAAA,CAAa,MAAMX,EAAUhC,CAAAA,CAAQC,CAAY,EACvD,GAAI,CAACgC,CAAAA,EAAM,CAAG,OACdE,CAAAA,CAAO,CAAE,KAAM,CAAA,CAAK,CAAC,EACrBL,CAAAA,CAAU,SAAA,GAAYa,CAAU,EAClC,OAASrD,CAAAA,CAAO,CACd,MAAK2C,CAAAA,EAAM,GACX,MAAMM,CAAAA,CAAKjD,CAAAA,CAAOU,CAAM,CAAA,CACxB8B,EAAU,OAAA,GAAUxC,CAAK,GACnBA,CACR,CACF,CACF,CACF","file":"cloud.js","sourcesContent":["export type CloudAction = 'retry' | 'reload' | null;\n\nexport interface CloudFailure {\n message: string;\n action: CloudAction;\n}\n\nexport const FORM_UPDATED_MESSAGE = 'This form was updated. Please review your answers and submit again.';\nexport const ANSWER_AGAIN = 'Please answer again.';\n\nconst SERVER: CloudFailure = { message: 'Something went wrong. Try again.', action: 'retry' };\nconst GENERIC: CloudFailure = { message: 'Could not send. Try again.', action: 'retry' };\nconst BROKEN: CloudFailure = { message: 'Could not send. Reload the page and try again.', action: 'reload' };\n\nconst BY_CODE: Record<string, CloudFailure> = {\n network: { message: 'You are offline. Check your connection and try again.', action: 'retry' },\n invalid: { message: 'Some answers were not accepted.', action: null },\n rate_limited: { message: 'Too many attempts. Wait a minute and try again.', action: 'retry' },\n limit_reached: { message: 'This form is not accepting responses right now.', action: null },\n not_found: { message: 'This form no longer exists.', action: null },\n paused: { message: 'This form is paused.', action: null },\n expired: { message: 'This form has expired.', action: null },\n body_too_large: { message: 'Your answers are too long. Shorten them and try again.', action: null },\n idempotency_key_reused: { message: 'Your answers changed while sending. Try again.', action: 'retry' },\n form_updated: { message: 'This form was updated. Reload the page.', action: 'reload' },\n malformed_body: BROKEN,\n unsupported_media_type: BROKEN,\n invalid_idempotency_key: BROKEN,\n unavailable: SERVER,\n internal: SERVER,\n};\n\nconst CODE_BY_STATUS: Record<number, string> = {\n 0: 'network',\n 400: 'malformed_body',\n 402: 'limit_reached',\n 404: 'not_found',\n 410: 'expired',\n 413: 'body_too_large',\n 422: 'invalid',\n 429: 'rate_limited',\n};\n\nexport function failureFor(status: number, code = ''): CloudFailure {\n const known = BY_CODE[code] ?? BY_CODE[CODE_BY_STATUS[status] ?? ''];\n if (known) return known;\n return status >= 500 ? SERVER : GENERIC;\n}\n","import { failureFor, type CloudAction } from './failures';\n\nexport class CloudError extends Error {\n readonly status: number;\n readonly code: string;\n readonly errors?: Record<string, string>;\n readonly version?: number;\n readonly action: CloudAction;\n readonly cause?: unknown;\n\n constructor(status: number, code: string, errors?: Record<string, string>, version?: number, cause?: unknown) {\n const failure = failureFor(status, code);\n super(failure.message);\n this.name = 'CloudError';\n this.status = status;\n this.code = code;\n this.errors = errors;\n this.version = version;\n this.action = failure.action;\n this.cause = cause;\n }\n\n get retryable(): boolean {\n return this.action === 'retry';\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function networkError(cause: unknown): CloudError {\n return new CloudError(0, 'network', undefined, undefined, cause);\n}\n\nexport async function toCloudError(response: CloudResponse): Promise<CloudError> {\n const body: unknown = await response.json().catch(() => null);\n if (!isRecord(body)) return new CloudError(response.status, 'unknown');\n const errors = isRecord(body.errors) ? body.errors as Record<string, string> : undefined;\n const version = typeof body.version === 'number' && Number.isInteger(body.version) ? body.version : undefined;\n return new CloudError(response.status, typeof body.error === 'string' ? body.error : 'unknown', errors, version);\n}\n","interface Searchable {\n querySelector(selector: string): unknown;\n}\n\ninterface Focusable extends Searchable {\n focus(options?: { preventScroll?: boolean }): void;\n scrollIntoView?(options?: { block?: 'center' | 'nearest' }): void;\n matches(selector: string): boolean;\n}\n\nconst CONTROLS = 'input:not([type=\"hidden\"]):not(:disabled), select:not(:disabled), textarea:not(:disabled), button:not(:disabled)';\n\nfunction reveal(target: Focusable, scrollTo: Focusable): void {\n scrollTo.scrollIntoView?.({ block: 'center' });\n target.focus({ preventScroll: true });\n}\n\nexport function focusProblem(root: Searchable | null, notice?: Focusable | null): void {\n if (notice) return reveal(notice, notice);\n const invalid = root?.querySelector('[aria-invalid=\"true\"]') as Focusable | null | undefined;\n if (invalid) reveal(invalid.matches(CONTROLS) ? invalid : (invalid.querySelector(CONTROLS) as Focusable | null) ?? invalid, invalid);\n}\n","export function randomId(): string {\n if (typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 15) | 64;\n bytes[8] = (bytes[8] & 63) | 128;\n const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import type { FormDefinition } from '../types';\nimport { networkError, toCloudError } from './error';\nimport { randomId } from './uuid';\n\nconst DEFAULT_API_BASE = 'https://api.formhaus.dev';\nconst VERSION_HEADER = 'Formhaus-Version';\n\nexport interface CloudSubmission {\n id: string;\n values: Record<string, unknown>;\n}\n\nexport interface CloudClientOptions {\n id: string;\n apiBase?: string;\n}\n\nexport interface PublishedDefinition {\n definition: FormDefinition;\n version?: number;\n}\n\nfunction endpoint({ id, apiBase = DEFAULT_API_BASE }: CloudClientOptions): string {\n return `${apiBase.replace(/\\/+$/, '')}/f/${encodeURIComponent(id)}`;\n}\n\nasync function send(url: string, init?: CloudRequestInit): Promise<CloudResponse> {\n try {\n return await fetch(url, init);\n } catch (error) {\n if (init?.signal?.aborted) throw error;\n throw networkError(error);\n }\n}\n\nfunction versionOf(response: CloudResponse): number | undefined {\n const version = Number(response.headers?.get(VERSION_HEADER));\n return Number.isInteger(version) && version > 0 ? version : undefined;\n}\n\nexport async function fetchPublished(options: CloudClientOptions, signal?: AbortSignal, after?: number): Promise<PublishedDefinition> {\n const query = after === undefined ? '' : `?v=${after}`;\n const response = await send(`${endpoint(options)}/definition${query}`, { signal });\n if (!response.ok) throw await toCloudError(response);\n return { definition: await response.json() as FormDefinition, version: versionOf(response) };\n}\n\nexport async function fetchDefinition(options: CloudClientOptions, signal?: AbortSignal): Promise<FormDefinition> {\n return (await fetchPublished(options, signal)).definition;\n}\n\nexport interface CloudSubmitterOptions extends CloudClientOptions {\n version?: number;\n}\n\nexport function createSubmitter(options: CloudSubmitterOptions) {\n let pending: { body: string; key: string } | null = null;\n\n return async (values: Record<string, unknown>, skippedSteps: string[] = []): Promise<CloudSubmission> => {\n const body = JSON.stringify({ values, skippedSteps, version: options.version });\n if (pending?.body !== body) pending = { body, key: randomId() };\n const response = await send(endpoint(options), {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'Idempotency-Key': pending.key },\n body,\n });\n if (!response.ok) throw await toCloudError(response);\n pending = null;\n return await response.json() as CloudSubmission;\n };\n}\n","import type { FormDefinition, FormField } from '../types';\nimport { ANSWER_AGAIN } from './failures';\n\nconst SHAPES: Record<string, string> = {\n multiselect: 'list',\n checkbox: 'flag',\n switch: 'flag',\n number: 'number',\n file: 'file',\n};\n\nfunction fieldsOf(definition: FormDefinition): FormField[] {\n return [...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)];\n}\n\nfunction shapeOf(field: FormField): string {\n return SHAPES[field.type] ?? 'text';\n}\n\nfunction allowed(field: FormField, value: unknown): boolean {\n if (!Array.isArray(field.options)) return true;\n const options = new Set(field.options.map((option) => String(option.value)));\n return (Array.isArray(value) ? value : [value]).every((item) => options.has(String(item)));\n}\n\nfunction fits(previous: FormField | undefined, next: FormField, value: unknown): boolean {\n if (previous && shapeOf(previous) !== shapeOf(next)) return false;\n switch (shapeOf(next)) {\n case 'list': return Array.isArray(value);\n case 'flag': return typeof value === 'boolean';\n case 'number': return typeof value === 'number';\n case 'text': return typeof value === 'string';\n default: return previous !== undefined;\n }\n}\n\nexport function carryValues(\n values: Record<string, unknown>,\n next: FormDefinition,\n previous?: FormDefinition,\n): Record<string, unknown> {\n const before = new Map(previous ? fieldsOf(previous).map((field) => [field.key, field]) : []);\n const kept: Record<string, unknown> = {};\n for (const field of fieldsOf(next)) {\n const value = values[field.key];\n if (value === undefined || value === null) continue;\n if (fits(before.get(field.key), field, value) && allowed(field, value)) kept[field.key] = value;\n }\n return kept;\n}\n\nexport function splitErrors(definition: FormDefinition, errors: Record<string, string>) {\n const known = new Set(fieldsOf(definition).map((field) => field.key));\n const fields: Record<string, string> = {};\n const other = new Set<string>();\n for (const [key, message] of Object.entries(errors)) {\n if (known.has(key)) fields[key] = message;\n else other.add(message);\n }\n return { fields, other: [...other] };\n}\n\nexport function updatedErrors(\n next: FormDefinition,\n sent: Record<string, unknown>,\n kept: Record<string, unknown>,\n rejected: Record<string, string>,\n): Record<string, string> {\n const errors: Record<string, string> = {};\n for (const field of fieldsOf(next)) {\n const answered = sent[field.key] !== undefined && sent[field.key] !== null && sent[field.key] !== '';\n if (answered && !(field.key in kept)) errors[field.key] = ANSWER_AGAIN;\n else if (rejected[field.key] && (!answered || field.key in kept)) errors[field.key] = rejected[field.key];\n }\n return errors;\n}\n","import type { FormDefinition } from '../types';\nimport { carryValues, splitErrors, updatedErrors } from './carry';\nimport { createSubmitter, fetchPublished, type CloudClientOptions, type CloudSubmission } from './client';\nimport { CloudError, networkError } from './error';\nimport { FORM_UPDATED_MESSAGE, failureFor, type CloudAction } from './failures';\n\nexport interface CloudNotice {\n tone: 'error' | 'info';\n message: string;\n action: CloudAction;\n details: string[];\n}\n\nexport interface CloudState {\n definition: FormDefinition | null;\n version: number | null;\n loadError: Error | null;\n errors: Record<string, string>;\n notice: CloudNotice | null;\n initialValues: Record<string, unknown> | null;\n revision: number;\n attempt: number;\n done: boolean;\n}\n\nexport interface CloudCallbacks {\n onChange(state: CloudState): void;\n onSuccess?(submission: CloudSubmission): void;\n onError?(error: unknown): void;\n}\n\nexport const initialCloudState: CloudState = {\n definition: null, version: null, loadError: null, errors: {}, notice: null,\n initialValues: null, revision: 0, attempt: 0, done: false,\n};\n\nfunction errorNotice(error: CloudError, details: string[] = []): CloudNotice {\n return { tone: 'error', message: error.message, action: error.action, details };\n}\n\nexport function createCloudController(options: CloudClientOptions, callbacks: CloudCallbacks) {\n const controller = new AbortController();\n let submitter = createSubmitter(options);\n const alive = () => !controller.signal.aborted;\n let state = initialCloudState;\n const update = (patch: Partial<CloudState>) => {\n state = { ...state, ...patch };\n callbacks.onChange(state);\n };\n const report = (patch: Partial<CloudState>) => update({ ...patch, attempt: state.attempt + 1 });\n\n async function refresh(error: CloudError, sent: Record<string, unknown>) {\n const before = state.definition;\n try {\n const next = await fetchPublished(options, controller.signal, error.version);\n if (!alive()) return;\n if (next.version === undefined || next.version < (error.version ?? 0)) throw new CloudError(409, 'form_updated');\n const kept = before ? carryValues(sent, next.definition, before) : {};\n submitter = createSubmitter({ ...options, version: next.version });\n report({\n definition: next.definition,\n version: next.version,\n initialValues: kept,\n revision: state.revision + 1,\n errors: updatedErrors(next.definition, sent, kept, error.errors ?? {}),\n notice: { tone: 'info', message: FORM_UPDATED_MESSAGE, action: null, details: [] },\n });\n } catch {\n if (alive()) report({ notice: { tone: 'error', ...failureFor(409, 'form_updated'), details: [] } });\n }\n }\n\n async function fail(error: unknown, values: Record<string, unknown>) {\n const cloud = error instanceof CloudError ? error : networkError(error);\n if (cloud.code === 'form_updated' && cloud.version !== undefined) return refresh(cloud, values);\n if (cloud.status !== 422) return report({ notice: errorNotice(cloud) });\n const errors = cloud.errors ?? {};\n const split = state.definition ? splitErrors(state.definition, errors) : { fields: errors, other: [] };\n report({ errors: split.fields, notice: split.other.length > 0 ? errorNotice(cloud, split.other) : null });\n }\n\n return {\n start() {\n fetchPublished(options, controller.signal).then(\n (published) => {\n if (!alive()) return;\n submitter = createSubmitter({ ...options, version: published.version });\n update({ definition: published.definition, version: published.version ?? null });\n },\n (error: Error) => {\n if (!alive()) return;\n update({ loadError: error });\n callbacks.onError?.(error);\n },\n );\n },\n dispose() {\n controller.abort();\n },\n async submit(values: Record<string, unknown>, skippedSteps?: string[]) {\n if (state.notice) update({ notice: null });\n try {\n const submission = await submitter(values, skippedSteps);\n if (!alive()) return;\n update({ done: true });\n callbacks.onSuccess?.(submission);\n } catch (error) {\n if (!alive()) throw error;\n await fail(error, values);\n callbacks.onError?.(error);\n throw error;\n }\n },\n };\n}\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"cloud.js"}
@@ -0,0 +1,84 @@
1
+ import { f as FormDefinition } from './definition-Bufih_Bx.js';
2
+
3
+ type CloudAction = 'retry' | 'reload' | null;
4
+
5
+ interface CloudSettings {
6
+ successMessage?: string;
7
+ redirectUrl?: string;
8
+ allowAnother?: boolean;
9
+ }
10
+ interface PublishedForm {
11
+ definition: FormDefinition;
12
+ version?: number;
13
+ settings?: CloudSettings;
14
+ renderToken?: string;
15
+ }
16
+
17
+ interface CloudSubmission {
18
+ id: string;
19
+ values: Record<string, unknown>;
20
+ }
21
+ interface CloudClientOptions {
22
+ id: string;
23
+ apiBase?: string;
24
+ }
25
+ declare function fetchForm(options: CloudClientOptions, signal?: AbortSignal, after?: number): Promise<PublishedForm>;
26
+ declare function fetchDefinition(options: CloudClientOptions, signal?: AbortSignal): Promise<FormDefinition>;
27
+ interface CloudSubmitterOptions extends CloudClientOptions {
28
+ version?: number;
29
+ renderToken?: string;
30
+ extraBody?: () => Record<string, unknown>;
31
+ }
32
+ declare function createSubmitter(options: CloudSubmitterOptions): (values: Record<string, unknown>, skippedSteps?: string[]) => Promise<CloudSubmission>;
33
+
34
+ interface DraftStorage {
35
+ getItem(key: string): string | null;
36
+ setItem(key: string, value: string): void;
37
+ removeItem(key: string): void;
38
+ }
39
+ interface DraftStore {
40
+ load(id: string, version: number | undefined): Record<string, unknown> | null;
41
+ save(id: string, version: number | undefined, values: Record<string, unknown>): void;
42
+ clear(id: string): void;
43
+ }
44
+ declare function sessionDraftStore(maxAge?: number, storageOf?: () => DraftStorage | undefined): DraftStore;
45
+
46
+ interface CloudNotice {
47
+ tone: 'error' | 'info';
48
+ message: string;
49
+ action: CloudAction;
50
+ details: string[];
51
+ }
52
+ interface CloudState {
53
+ definition: FormDefinition | null;
54
+ version: number | null;
55
+ settings: CloudSettings;
56
+ loadError: Error | null;
57
+ errors: Record<string, string>;
58
+ notice: CloudNotice | null;
59
+ initialValues: Record<string, unknown> | null;
60
+ revision: number;
61
+ attempt: number;
62
+ done: boolean;
63
+ }
64
+ interface CloudCallbacks {
65
+ onChange(state: CloudState): void;
66
+ onSuccess?(submission: CloudSubmission): void;
67
+ onError?(error: unknown): void;
68
+ }
69
+ interface CloudControllerOptions extends CloudClientOptions {
70
+ initialForm?: PublishedForm;
71
+ extraBody?: () => Record<string, unknown>;
72
+ draftStore?: DraftStore;
73
+ }
74
+ declare const initialCloudState: CloudState;
75
+ declare function cloudStateFor(form?: PublishedForm): CloudState;
76
+ declare function createCloudController(options: CloudControllerOptions, callbacks: CloudCallbacks): {
77
+ start(): void;
78
+ dispose(): void;
79
+ saveDraft(values: Record<string, unknown>): void;
80
+ again(): void;
81
+ submit(values: Record<string, unknown>, skippedSteps?: string[]): Promise<void>;
82
+ };
83
+
84
+ export { type CloudAction as C, type DraftStorage as D, type PublishedForm as P, type CloudClientOptions as a, type CloudNotice as b, type CloudSettings as c, type CloudSubmission as d, type CloudSubmitterOptions as e, type DraftStore as f, createSubmitter as g, fetchDefinition as h, fetchForm as i, type CloudCallbacks as j, type CloudControllerOptions as k, type CloudState as l, cloudStateFor as m, createCloudController as n, initialCloudState as o, sessionDraftStore as s };
@@ -22,7 +22,7 @@ interface FormField {
22
22
  accept?: string;
23
23
  rows?: number;
24
24
  mask?: string;
25
- inputMode?: 'text' | 'numeric' | 'tel' | 'email';
25
+ inputMode?: 'text' | 'numeric' | 'decimal' | 'tel' | 'email' | 'url' | 'search';
26
26
  }
27
27
  interface ShowCondition {
28
28
  field: string;
@@ -31,6 +31,10 @@ interface ShowCondition {
31
31
  in?: (string | number)[];
32
32
  notIn?: (string | number)[];
33
33
  notEmpty?: boolean;
34
+ gt?: number;
35
+ gte?: number;
36
+ lt?: number;
37
+ lte?: number;
34
38
  }
35
39
  interface FieldValidation {
36
40
  required?: boolean | string;
@@ -52,11 +56,11 @@ interface FieldValidation {
52
56
  interface FormAction {
53
57
  label: string;
54
58
  variant?: 'primary' | 'secondary' | 'text';
55
- action?: string;
56
59
  disabled?: ShowCondition[];
57
60
  }
58
61
 
59
62
  interface FormDefinition {
63
+ $schema?: string;
60
64
  id: string;
61
65
  title: string;
62
66
  description?: string;
@@ -83,4 +87,4 @@ interface FormStep {
83
87
  skip?: FormAction;
84
88
  }
85
89
 
86
- export type { DefaultFieldType as D, FormField as F, ShowCondition as S, FormStep as a, FormDefinition as b, FieldOption as c, FieldType as d, FieldValidation as e, FormAction as f, StepRoute as g };
90
+ export type { DefaultFieldType as D, FormField as F, ShowCondition as S, FormStep as a, FieldOption as b, FieldType as c, FieldValidation as d, FormAction as e, FormDefinition as f, StepRoute as g };