@formhaus/core 0.13.1 → 0.14.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.
- package/dist/{check-definition-DuLExofm.d.ts → check-definition-DyiWqhEV.d.ts} +3 -3
- package/dist/chunk-5WADJMJJ.js +2 -0
- package/dist/chunk-5WADJMJJ.js.map +1 -0
- package/dist/chunk-5YPOS62Y.js +3 -0
- package/dist/chunk-5YPOS62Y.js.map +1 -0
- package/dist/chunk-CW5ZWCSD.js +2 -0
- package/dist/chunk-CW5ZWCSD.js.map +1 -0
- package/dist/chunk-QMT7RJ4T.js +3 -0
- package/dist/chunk-QMT7RJ4T.js.map +1 -0
- package/dist/chunk-QVA6DLYS.js +2 -0
- package/dist/chunk-QVA6DLYS.js.map +1 -0
- package/dist/chunk-REIX6ART.js +2 -0
- package/dist/chunk-REIX6ART.js.map +1 -0
- package/dist/chunk-TMO47L42.js +5 -0
- package/dist/chunk-TMO47L42.js.map +1 -0
- package/dist/cloud.d.ts +3 -3
- package/dist/cloud.js +1 -1
- package/dist/{controller-Ds_kbXSU.d.ts → controller-BJVYkMHT.d.ts} +1 -1
- package/dist/default-messages-E-nZe4Tc.d.ts +10 -0
- package/dist/{definition-B4OIy_wH.d.ts → definition-o4Y0OY6y.d.ts} +53 -6
- package/dist/fix.d.ts +38 -0
- package/dist/fix.js +3 -0
- package/dist/fix.js.map +1 -0
- package/dist/i18n.d.ts +4 -3
- package/dist/i18n.js +1 -1
- package/dist/i18n.js.map +1 -1
- package/dist/{runtime-BN2PuKD7.d.ts → index-BNGgMIbC.d.ts} +20 -6
- package/dist/index.d.ts +67 -11
- package/dist/index.js +1 -1
- package/dist/internal.d.ts +28 -8
- package/dist/internal.js +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/issues-Dua58e1J.d.ts +14 -0
- package/dist/server.d.ts +5 -5
- package/dist/server.iife.js +3 -3
- package/dist/server.iife.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/{validate-field-ND_UxoJU.d.ts → validate-field-CRR6GQBA.d.ts} +2 -2
- package/fixtures/submissions/choices.json +6 -26
- package/fixtures/submissions/groups.json +649 -0
- package/fixtures/submissions/messages.json +4 -16
- package/fixtures/submissions/show-conditions.json +2 -7
- package/fixtures/submissions/skip-routes.json +1 -3
- package/fixtures/submissions/skip.json +3 -9
- package/fixtures/submissions/special-types.json +2 -6
- package/package.json +10 -6
- package/schema/form-definition.schema.json +380 -19
- package/schema/form-translation.schema.json +79 -1
- package/style.css +103 -82
- package/dist/chunk-35SAVPYL.js +0 -2
- package/dist/chunk-35SAVPYL.js.map +0 -1
- package/dist/chunk-76YV4J3Q.js +0 -3
- package/dist/chunk-76YV4J3Q.js.map +0 -1
- package/dist/chunk-PBTYUSZR.js +0 -2
- package/dist/chunk-PBTYUSZR.js.map +0 -1
- package/dist/chunk-PZEBYRGE.js +0 -2
- package/dist/chunk-PZEBYRGE.js.map +0 -1
- package/dist/chunk-RN5GQHKN.js +0 -5
- package/dist/chunk-RN5GQHKN.js.map +0 -1
- package/dist/chunk-YTUVSJUF.js +0 -3
- package/dist/chunk-YTUVSJUF.js.map +0 -1
- package/dist/default-messages-yS4QtrYi.d.ts +0 -23
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { D as DefinitionIssue } from './
|
|
1
|
+
import { l as FormDefinition } from './definition-o4Y0OY6y.js';
|
|
2
|
+
import { D as DefinitionIssue } from './issues-Dua58e1J.js';
|
|
3
3
|
|
|
4
4
|
interface CheckDefinitionOptions {
|
|
5
5
|
validators?: Record<string, unknown>;
|
|
6
6
|
}
|
|
7
7
|
declare function checkDefinition(input: unknown, options?: CheckDefinitionOptions): DefinitionIssue[];
|
|
8
|
-
declare function parseDefinition(input: unknown,
|
|
8
|
+
declare function parseDefinition(input: unknown, _options?: CheckDefinitionOptions): FormDefinition;
|
|
9
9
|
|
|
10
10
|
export { type CheckDefinitionOptions as C, checkDefinition as c, parseDefinition as p };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var P=["eq","neq","in","notIn","notEmpty","gt","gte","lt","lte"];function g(e){return e==null||e===""||Array.isArray(e)&&!e.length}function p(e){let n=typeof e=="string"&&e.trim()!==""?Number(e):e;return typeof n=="number"&&Number.isFinite(n)?n:void 0}var _={eq:(e,n)=>e===n,neq:(e,n)=>e!==n,in:(e,n)=>n.includes(e),notIn:(e,n)=>!n.includes(e),notEmpty:(e,n)=>!n||!g(e),gt:(e,n)=>p(e)>n,gte:(e,n)=>p(e)>=n,lt:(e,n)=>p(e)<n,lte:(e,n)=>p(e)<=n};function x(e,n){let t=n[e.field],r=P.find(o=>e[o]!==void 0);return !!r&&_[r](t,e[r])}function m(e,n){let t=r=>x(r,n);return (e.show??[]).every(t)&&(!e.showAny?.length||e.showAny.some(t))}var c=Object.freeze({required:"This field is required",minLength:"Must be at least {min} characters",maxLength:"Must be at most {max} characters",minItems:"Must be at least {min} items",maxItems:"Must be at most {max} items",min:"Must be at least {min}",max:"Must be at most {max}",pattern:"Invalid format",matchField:"Fields must match",email:"Enter a valid email",number:"Enter a number",date:"Enter a valid date",datetime:"Enter a valid date and time",time:"Enter a valid time",option:"Select one of the available options",options:"Must be a list of available options",boolean:"Must be true or false",string:"Must be text",file:"Must be a file reference",value:"Invalid value",hidden:"{label}: {message}"});function d(e,n){return e.replace(/\{(\w+)\}/g,(t,r)=>u(n,r)?String(n[r]):t)}function D(e,n,t,r,...o){for(let s of r){let i=typeof s=="function"?s(n,t,...o):s?.[n];if(i&&typeof i=="string")return typeof s=="function"?i:d(i,t)}return d(e[n],t)}function h(...e){return (n,t,r)=>D(c,n,t,e,r)}function ie(e){return (n,t,r)=>{let o=e(n,t,r);return r.type==="hidden"?e("hidden",{label:r.label||r.key,message:o},r):o}}function ae(e,n={}){let t=u(c,e)?c[e]:c.value,r=n.unit!==void 0&&(e==="minLength"||e==="maxLength");return d(r?t.replace("characters","{unit}"):t,n)}var w=["checkbox","switch"],b=["text","email","phone","number","password","select","autocomplete","multiselect","checkbox","radio","switch","file","date","datetime","time","textarea","hidden"],a=1e4,$=2e3,C=254,G=1e3,M=100,k=/^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/,V=/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/,E="\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])",j=new RegExp(`^${E}$`),y="(?:[01]\\d|2[0-3]):[0-5]\\d",v=new RegExp(`^${E}T${y}(?::[0-5]\\d(?:\\.\\d{1,3})?)?(?:Z|[+-]${y})?$`),A=new RegExp(`^${y}(?::[0-5]\\d)?$`),R=new Set(["text","phone","password","textarea","autocomplete","hidden"]),T=new Map([["email",[k,"email",C]],["date",[j,"date",a]],["datetime",[v,"datetime",a]],["time",[A,"time",a]]]);function q(e){let[n,t,r]=e.split(/\D/).map(Number);return r<=new Date(new Date(0).setUTCFullYear(n,t,0)).getUTCDate()}var U=new Set(["password","number","select","radio","file"]);function f(e,n){return typeof n=="string"&&!U.has(e.type)?n.trim():n}function X(e,n){if(Array.isArray(n)&&n.length===0&&e.type!=="multiselect"&&b.includes(e.type))return;if(e.type==="group")return Y(e,n);let t=f(e,n);if(e.type!=="number"||typeof t!="string"||!V.test(t))return t;let r=Number(t);return Number.isFinite(r)?r:t}function Y(e,n){return !Array.isArray(n)||n.length>(e.validation?.maxLength??M)?n:n.map(t=>{if(!N(t))return t;let r={};for(let o of e.fields){let s=u(t,o.key)?X(o,t[o.key]):void 0;s!==void 0&&(r[o.key]=s);}return r})}var S=e=>e.optionsFrom?void 0:e.options;function I(e,n){let t=S(e);return !t||t.some(r=>r.value===n)}function L(e,n,t){let r=Math.min(a,e.validation?.maxLength??(e.type==="hidden"?$:a));return n.length<=r?null:e.validation?.maxLengthMessage??t("maxLength",{max:r})}function H(e,n,t){return Array.isArray(n)?n.length>(S(e)?.length??G)?t("option"):n.every(o=>typeof o=="string"&&o.length<=a&&I(e,o))?null:t("option"):t("options")}function l(e,n,t,r){return typeof n=="string"?L(e,n,r):r(t)}function B(e,n,[t,r,o],s){return typeof n!="string"?s(r):L(e,n,s)??(n.length<=o&&t.test(n)&&(t===k||t===A||q(n))?null:s(r))}function z(e,n,t){return typeof n=="boolean"||typeof n=="number"&&Number.isFinite(n)?null:l(e,n,"value",t)}function W(e,n){return g(n)&&(e.type==="multiselect"||!Array.isArray(n))}var N=e=>Object.prototype.toString.call(e)==="[object Object]";function Z(e,n,t){let r=e.validation?.maxLength;return Array.isArray(n)?r!==void 0&&n.length>r?e.validation?.maxLengthMessage??t("maxItems",{max:r}):n.length>(r??M)||!n.every(N)?t("value"):null:t("value")}function J(e,n,t=h()){if(W(e,n))return null;let r=(s,i={})=>t(s,i,e);if(e.type==="group")return Z(e,n,r);if(w.includes(e.type))return typeof n=="boolean"?null:r("boolean");if(e.type==="number")return typeof n=="number"&&Number.isFinite(n)?null:r("number");if(e.type==="multiselect")return H(e,n,r);if(e.type==="file")return l(e,n,"file",r);let o=T.get(e.type);return o?B(e,n,o,r):e.type==="select"||e.type==="radio"?l(e,n,"option",r)??(I(e,n)?null:r("option")):R.has(e.type)?l(e,n,"string",r):z(e,n,r)}function le(e){if(e.type==="group")return ["value"];if(w.includes(e.type))return ["boolean"];if(e.type==="number")return ["number"];if(e.type==="multiselect")return ["options","option"];let n=T.get(e.type)?.[1];return n?[n,"maxLength"]:e.type==="file"?["file","maxLength"]:e.type==="select"||e.type==="radio"?["option","maxLength"]:[R.has(e.type)?"string":"value","maxLength",...e.type==="hidden"?["hidden"]:[]]}function ge(e,n,t){return e.type==="file"||!b.includes(e.type)&&e.type!=="group"?null:J(e,n,t)}var O=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),u=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),K=e=>e.type==="section",Fe=e=>e.type==="group";function xe(e){return e.flatMap(n=>K(n)?n.fields:[n])}function he(e){return e.steps?.length?e.steps.flatMap(n=>n.fields):e.fields??[]}function we(e){return [...e.show??[],...e.showAny??[]].map(n=>n.field)}function be(e,n){return e.flatMap(t=>m(t,n)?K(t)?t.fields.filter(r=>m(r,n)):[t]:[])}var Me=e=>Array.isArray(e)?e:[];function Q(e,n,t){let r={...t},o=O(n)?n:{};for(let s of e.fields)r[s.key]=f(s,o[s.key]);return r}function ke(e,n,t){return Array.isArray(n)?n.map(r=>{let o=Q(e,r,t),s={};for(let i of e.fields)o[i.key]!==void 0&&m(i,o)&&(s[i.key]=o[i.key]);return s}):n}function Ee(e,n,t){return `${e}.${n}.${t}`}function Ae(e,n){if(!n.startsWith(`${e}.`))return;let t=n.slice(e.length+1),r=/^(0|[1-9]\d*)\.(.+)$/.exec(t);return r?[Number(r[1]),r[2]]:void 0}var F=new WeakMap,ee=0;function ne(e,n){if(!O(e))return `${n}`;let t=F.get(e);return t===void 0&&F.set(e,t=`i${++ee}`),t}function Re(e,n){return F.set(n,ne(e,0)),n}export{ne as A,Re as B,c as C,d as D,D as E,h as F,ie as G,ae as H,P as a,g as b,x as c,w as d,b as e,a as f,$ as g,f as h,X as i,J as j,le as k,ge as l,m,O as n,u as o,K as p,Fe as q,xe as r,he as s,we as t,be as u,Me as v,Q as w,ke as x,Ee as y,Ae as z};//# sourceMappingURL=chunk-5WADJMJJ.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-5WADJMJJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/visibility/evaluate-condition.ts","../src/visibility/is-visible.ts","../src/validation/default-messages.ts","../src/validation/type-checks.ts","../src/visibility/nodes.ts"],"names":["CONDITION_OPERATORS","isBlank","value","toNumber","number","TESTS","operand","evaluateCondition","condition","values","operator","name","isVisible","field","matches","DEFAULT_MESSAGES","formatText","template","params","match","hasOwn","resolveText","defaults","key","sources","context","source","text","messageResolver","namedResolver","resolve","message","getDefaultMessage","rule","custom","BOOLEAN_TYPES","BUILT_IN_TYPES","MAX_STRING_LENGTH","MAX_HIDDEN_LENGTH","MAX_EMAIL_LENGTH","MAX_ITEMS","MAX_GROUP_ITEMS","EMAIL","DECIMAL","DATE","DATE_ONLY","HOURS","DATE_TIME","TIME","TEXT_TYPES","FORMATS","isCalendarDate","year","month","day","UNTRIMMED_TYPES","trimValue","normalizeValue","input","normalizeItems","parsed","group","item","entry","result","staticOptions","isOption","options","option","lengthError","fail","max","multiselectError","stringError","formatError","format","primitiveError","isEmpty","groupError","typeError","typeMessageKeys","clientTypeError","isEntry","isSection","node","isGroup","valueFields","nodes","topNodes","definition","step","conditionFields","shownFields","itemsOf","itemScope","scope","cleanItems","itemPath","index","splitPath","rest","ids","lastId","itemId","id","keepId","from","to"],"mappings":"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","file":"chunk-5WADJMJJ.js","sourcesContent":["import type { ShowCondition } from '../types';\n\nexport const CONDITION_OPERATORS = ['eq', 'neq', 'in', 'notIn', 'notEmpty', 'gt', 'gte', 'lt', 'lte'] as const;\n\nexport function isBlank(value: unknown): boolean {\n return value == null || value === '' || (Array.isArray(value) && !value.length);\n}\n\nfunction toNumber(value: unknown): number | undefined {\n const number = typeof value === 'string' && value.trim() !== '' ? Number(value) : value;\n return typeof number === 'number' && Number.isFinite(number) ? number : undefined;\n}\n\ntype Operands = Required<Omit<ShowCondition, 'field'>>;\n\nconst TESTS: { [K in keyof Operands]: (value: unknown, operand: Operands[K]) => boolean } = {\n eq: (value, operand) => value === operand,\n neq: (value, operand) => value !== operand,\n in: (value, operand) => operand.includes(value as string | number),\n notIn: (value, operand) => !operand.includes(value as string | number),\n notEmpty: (value, operand) => !operand || !isBlank(value),\n gt: (value, operand) => toNumber(value)! > operand,\n gte: (value, operand) => toNumber(value)! >= operand,\n lt: (value, operand) => toNumber(value)! < operand,\n lte: (value, operand) => toNumber(value)! <= operand,\n};\n\nexport function evaluateCondition(condition: ShowCondition, values: Record<string, unknown>): boolean {\n const value = values[condition.field];\n const operator = CONDITION_OPERATORS.find((name) => condition[name] !== undefined);\n return !!operator && (TESTS[operator] as (value: unknown, operand: unknown) => boolean)(value, condition[operator]);\n}\n","import type { FormField, ShowCondition } from '../types';\nimport { evaluateCondition } from './evaluate-condition';\n\nexport function isVisible(field: Pick<FormField, 'show' | 'showAny'>, values: Record<string, unknown>): boolean {\n const matches = (condition: ShowCondition) => evaluateCondition(condition, values);\n return (field.show ?? []).every(matches) && (!field.showAny?.length || field.showAny.some(matches));\n}\n","import type { FormField, MessageCatalog, MessageKey } from '../types';\nimport { hasOwn } from '../visibility/nodes';\n\nexport type { MessageCatalog, MessageKey };\nexport type MessageParams = Record<string, unknown>;\nexport type MessageFn = (key: MessageKey, params: MessageParams, field: FormField) => string | undefined;\nexport type MessageSource = MessageCatalog | MessageFn;\nexport type ResolveMessage = (key: MessageKey, params: MessageParams, field: FormField) => string;\n\nexport const DEFAULT_MESSAGES: Readonly<Record<MessageKey, string>> = Object.freeze({\n required: 'This field is required',\n minLength: 'Must be at least {min} characters',\n maxLength: 'Must be at most {max} characters',\n minItems: 'Must be at least {min} items',\n maxItems: 'Must be at most {max} items',\n min: 'Must be at least {min}',\n max: 'Must be at most {max}',\n pattern: 'Invalid format',\n matchField: 'Fields must match',\n email: 'Enter a valid email',\n number: 'Enter a number',\n date: 'Enter a valid date',\n datetime: 'Enter a valid date and time',\n time: 'Enter a valid time',\n option: 'Select one of the available options',\n options: 'Must be a list of available options',\n boolean: 'Must be true or false',\n string: 'Must be text',\n file: 'Must be a file reference',\n value: 'Invalid value',\n hidden: '{label}: {message}',\n});\n\nexport type ValidationRule = 'required' | 'minLength' | 'maxLength' | 'min' | 'max' | 'pattern' | 'matchField';\n\nexport function formatText(template: string, params: Record<string, unknown>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, name: string) => (hasOwn(params, name) ? String(params[name]) : match));\n}\n\ntype TextSource<K extends string> =\n | Partial<Record<K, string>>\n | ((key: K, params: MessageParams, ...context: never[]) => string | undefined);\n\nexport function resolveText<K extends string>(\n defaults: Record<K, string>,\n key: K,\n params: MessageParams,\n sources: (TextSource<K> | undefined)[],\n ...context: unknown[]\n): string {\n for (const source of sources) {\n const text = typeof source === 'function' ? (source as (...args: unknown[]) => unknown)(key, params, ...context) : source?.[key];\n if (text && typeof text === 'string') return typeof source === 'function' ? text : formatText(text, params);\n }\n return formatText(defaults[key], params);\n}\n\nexport function messageResolver(...sources: (MessageSource | undefined)[]): ResolveMessage {\n return (key, params, field) => resolveText(DEFAULT_MESSAGES, key, params, sources, field);\n}\n\nexport function namedResolver(resolve: ResolveMessage): ResolveMessage {\n return (key, params, field) => {\n const message = resolve(key, params, field);\n return field.type === 'hidden' ? resolve('hidden', { label: field.label || field.key, message }, field) : message;\n };\n}\n\nexport function getDefaultMessage(rule: ValidationRule | MessageKey, params: Record<string, unknown> = {}): string {\n const template = hasOwn(DEFAULT_MESSAGES, rule) ? DEFAULT_MESSAGES[rule] : DEFAULT_MESSAGES.value;\n const custom = params.unit !== undefined && (rule === 'minLength' || rule === 'maxLength');\n return formatText(custom ? template.replace('characters', '{unit}') : template, params);\n}\n","import type { FormField, FormGroup } from '../types';\nimport { type MessageKey, messageResolver, type ResolveMessage } from './default-messages';\nimport { hasOwn } from '../visibility/nodes';\nimport { isBlank } from '../visibility/evaluate-condition';\n\nexport const BOOLEAN_TYPES = ['checkbox', 'switch'];\nexport const BUILT_IN_TYPES = [\n 'text',\n 'email',\n 'phone',\n 'number',\n 'password',\n 'select',\n 'autocomplete',\n 'multiselect',\n 'checkbox',\n 'radio',\n 'switch',\n 'file',\n 'date',\n 'datetime',\n 'time',\n 'textarea',\n 'hidden',\n];\n\nexport const MAX_STRING_LENGTH = 10000;\nexport const MAX_HIDDEN_LENGTH = 2000;\nconst MAX_EMAIL_LENGTH = 254;\nconst MAX_ITEMS = 1000;\nconst MAX_GROUP_ITEMS = 100;\nconst EMAIL = /^[^\\s@]+@[^\\s@.]+(?:\\.[^\\s@.]+)+$/;\nconst DECIMAL = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/;\nconst DATE = '\\\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\\\d|3[01])';\nconst DATE_ONLY = new RegExp(`^${DATE}$`);\nconst HOURS = '(?:[01]\\\\d|2[0-3]):[0-5]\\\\d';\nconst DATE_TIME = new RegExp(`^${DATE}T${HOURS}(?::[0-5]\\\\d(?:\\\\.\\\\d{1,3})?)?(?:Z|[+-]${HOURS})?$`);\nconst TIME = new RegExp(`^${HOURS}(?::[0-5]\\\\d)?$`);\nconst TEXT_TYPES = new Set(['text', 'phone', 'password', 'textarea', 'autocomplete', 'hidden']);\nconst FORMATS = new Map<string, [RegExp, MessageKey, number]>([\n ['email', [EMAIL, 'email', MAX_EMAIL_LENGTH]],\n ['date', [DATE_ONLY, 'date', MAX_STRING_LENGTH]],\n ['datetime', [DATE_TIME, 'datetime', MAX_STRING_LENGTH]],\n ['time', [TIME, 'time', MAX_STRING_LENGTH]],\n]);\n\ntype Fail = (key: MessageKey, params?: Record<string, unknown>) => string;\n\nfunction isCalendarDate(value: string): boolean {\n const [year, month, day] = value.split(/\\D/).map(Number);\n return day <= new Date(new Date(0).setUTCFullYear(year, month, 0)).getUTCDate();\n}\n\nconst UNTRIMMED_TYPES = new Set(['password', 'number', 'select', 'radio', 'file']);\n\nexport function trimValue(field: FormField, value: unknown): unknown {\n return typeof value === 'string' && !UNTRIMMED_TYPES.has(field.type) ? value.trim() : value;\n}\n\nexport function normalizeValue(field: FormField, input: unknown): unknown {\n if (Array.isArray(input) && input.length === 0 && field.type !== 'multiselect' && BUILT_IN_TYPES.includes(field.type)) return undefined;\n if (field.type === 'group') return normalizeItems(field as FormGroup, input);\n const value = trimValue(field, input);\n if (field.type !== 'number' || typeof value !== 'string' || !DECIMAL.test(value)) return value;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : value;\n}\n\nfunction normalizeItems(group: FormGroup, input: unknown): unknown {\n if (!Array.isArray(input) || input.length > (group.validation?.maxLength ?? MAX_GROUP_ITEMS)) return input;\n return input.map((item) => {\n if (!entry(item)) return item;\n const result: Record<string, unknown> = {};\n for (const field of group.fields) {\n const value = hasOwn(item, field.key) ? normalizeValue(field, item[field.key]) : undefined;\n if (value !== undefined) result[field.key] = value;\n }\n return result;\n });\n}\n\nconst staticOptions = (field: FormField) => (field.optionsFrom ? undefined : field.options);\n\nfunction isOption(field: FormField, value: unknown): boolean {\n const options = staticOptions(field);\n return !options || options.some((option) => option.value === value);\n}\n\nfunction lengthError(field: FormField, value: string, fail: Fail): string | null {\n const max = Math.min(MAX_STRING_LENGTH, field.validation?.maxLength ?? (field.type === 'hidden' ? MAX_HIDDEN_LENGTH : MAX_STRING_LENGTH));\n if (value.length <= max) return null;\n return field.validation?.maxLengthMessage ?? fail('maxLength', { max });\n}\n\nfunction multiselectError(field: FormField, value: unknown, fail: Fail): string | null {\n if (!Array.isArray(value)) return fail('options');\n if (value.length > (staticOptions(field)?.length ?? MAX_ITEMS)) return fail('option');\n const valid = value.every((item) => typeof item === 'string' && item.length <= MAX_STRING_LENGTH && isOption(field, item));\n return valid ? null : fail('option');\n}\n\nfunction stringError(field: FormField, value: unknown, key: MessageKey, fail: Fail): string | null {\n return typeof value === 'string' ? lengthError(field, value, fail) : fail(key);\n}\n\nfunction formatError(field: FormField, value: unknown, [format, key, max]: [RegExp, MessageKey, number], fail: Fail): string | null {\n if (typeof value !== 'string') return fail(key);\n return (\n lengthError(field, value, fail) ??\n (value.length <= max && format.test(value) && (format === EMAIL || format === TIME || isCalendarDate(value)) ? null : fail(key))\n );\n}\n\nfunction primitiveError(field: FormField, value: unknown, fail: Fail): string | null {\n if (typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value))) return null;\n return stringError(field, value, 'value', fail);\n}\n\nfunction isEmpty(field: FormField, value: unknown): boolean {\n return isBlank(value) && (field.type === 'multiselect' || !Array.isArray(value));\n}\n\nconst entry = (item: unknown) => Object.prototype.toString.call(item) === '[object Object]';\n\nfunction groupError(field: FormField, value: unknown, fail: Fail): string | null {\n const max = field.validation?.maxLength;\n if (!Array.isArray(value)) return fail('value');\n if (max !== undefined && value.length > max) return field.validation?.maxLengthMessage ?? fail('maxItems', { max });\n return value.length > (max ?? MAX_GROUP_ITEMS) || !value.every(entry) ? fail('value') : null;\n}\n\nexport function typeError(field: FormField, value: unknown, resolve: ResolveMessage = messageResolver()): string | null {\n if (isEmpty(field, value)) return null;\n const fail: Fail = (key, params = {}) => resolve(key, params, field);\n if (field.type === 'group') return groupError(field, value, fail);\n if (BOOLEAN_TYPES.includes(field.type)) return typeof value === 'boolean' ? null : fail('boolean');\n if (field.type === 'number') return typeof value === 'number' && Number.isFinite(value) ? null : fail('number');\n if (field.type === 'multiselect') return multiselectError(field, value, fail);\n if (field.type === 'file') return stringError(field, value, 'file', fail);\n const format = FORMATS.get(field.type);\n if (format) return formatError(field, value, format, fail);\n if (field.type === 'select' || field.type === 'radio')\n return stringError(field, value, 'option', fail) ?? (isOption(field, value) ? null : fail('option'));\n return TEXT_TYPES.has(field.type) ? stringError(field, value, 'string', fail) : primitiveError(field, value, fail);\n}\n\nexport function typeMessageKeys(field: FormField): MessageKey[] {\n if (field.type === 'group') return ['value'];\n if (BOOLEAN_TYPES.includes(field.type)) return ['boolean'];\n if (field.type === 'number') return ['number'];\n if (field.type === 'multiselect') return ['options', 'option'];\n const format = FORMATS.get(field.type)?.[1];\n if (format) return [format, 'maxLength'];\n if (field.type === 'file') return ['file', 'maxLength'];\n if (field.type === 'select' || field.type === 'radio') return ['option', 'maxLength'];\n return [TEXT_TYPES.has(field.type) ? 'string' : 'value', 'maxLength', ...(field.type === 'hidden' ? ['hidden' as const] : [])];\n}\n\nexport function clientTypeError(field: FormField, value: unknown, resolve?: ResolveMessage): string | null {\n if (field.type === 'file' || (!BUILT_IN_TYPES.includes(field.type) && field.type !== 'group')) return null;\n return typeError(field, value, resolve);\n}\n","import type { FormDefinition, FormField, FormGroup, FormNode, FormSection } from '../types';\nimport { trimValue } from '../validation/type-checks';\nimport { isVisible } from './is-visible';\n\ntype Values = Record<string, unknown>;\n\nexport const isEntry = (value: unknown): value is Values => typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport const hasOwn = (value: object, key: PropertyKey): boolean => Object.prototype.hasOwnProperty.call(value, key);\n\nexport const isSection = (node: { type?: unknown }): node is FormSection => node.type === 'section';\nexport const isGroup = (node: { type?: unknown }): node is FormGroup => node.type === 'group';\n\nexport function valueFields(nodes: FormNode[]): FormField[] {\n return nodes.flatMap((node) => (isSection(node) ? node.fields : [node]));\n}\n\nexport function topNodes(definition: FormDefinition): FormNode[] {\n return definition.steps?.length ? definition.steps.flatMap((step) => step.fields) : (definition.fields ?? []);\n}\n\nexport function conditionFields(source: Pick<FormField, 'show' | 'showAny'>): string[] {\n return [...(source.show ?? []), ...(source.showAny ?? [])].map((condition) => condition.field);\n}\n\nexport function shownFields(nodes: FormNode[], values: Values): FormField[] {\n return nodes.flatMap((node) =>\n !isVisible(node, values) ? [] : isSection(node) ? node.fields.filter((field) => isVisible(field, values)) : [node],\n );\n}\n\nexport const itemsOf = (value: unknown): unknown[] => (Array.isArray(value) ? value : []);\n\nexport function itemScope(group: FormGroup, item: unknown, values: Values): Values {\n const scope = { ...values };\n const source = isEntry(item) ? item : {};\n for (const field of group.fields) scope[field.key] = trimValue(field, source[field.key]);\n return scope;\n}\n\nexport function cleanItems(group: FormGroup, value: unknown, values: Values): unknown {\n if (!Array.isArray(value)) return value;\n return value.map((item) => {\n const scope = itemScope(group, item, values);\n const result: Values = {};\n for (const field of group.fields) {\n if (scope[field.key] !== undefined && isVisible(field, scope)) result[field.key] = scope[field.key];\n }\n return result;\n });\n}\n\nexport function itemPath(group: string, index: number, field: string): string {\n return `${group}.${index}.${field}`;\n}\n\nexport function splitPath(group: string, key: string): [number, string] | undefined {\n if (!key.startsWith(`${group}.`)) return undefined;\n const rest = key.slice(group.length + 1);\n const match = /^(0|[1-9]\\d*)\\.(.+)$/.exec(rest);\n return match ? [Number(match[1]), match[2]] : undefined;\n}\n\nconst ids = new WeakMap<object, string>();\nlet lastId = 0;\n\nexport function itemId(item: unknown, index: number): string {\n if (!isEntry(item)) return `${index}`;\n let id = ids.get(item);\n if (id === undefined) ids.set(item, (id = `i${++lastId}`));\n return id;\n}\n\nexport function keepId<T extends object>(from: unknown, to: T): T {\n ids.set(to, itemId(from, 0));\n return to;\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {r,q,n}from'./chunk-5WADJMJJ.js';var j="This form was updated. Please review your answers and submit again.",J="Please answer again.",c={message:"Something went wrong. Try again.",action:"retry"},A={message:"Could not send. Try again.",action:"retry"},l={message:"Could not send. Reload the page and try again.",action:"reload"},k={network:{message:"Could not reach the form server. Check your connection and try again.",action:"retry"},timeout:{message:"The form server did not respond. 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"},client_outdated:{message:"This form needs a newer version of this page.",action:null},malformed_body:l,unsupported_media_type:l,invalid_idempotency_key:l,invalid_response:c,unavailable:c,internal:c},D={0:"network",400:"malformed_body",402:"limit_reached",404:"not_found",409:"paused",410:"expired",413:"body_too_large",422:"invalid",426:"client_outdated",429:"rate_limited"};function C(e,n=""){let t=k[n]??k[D[e]??""];return t||(e>=500?c:A)}var u=class extends Error{constructor(n,t,i,r,o){let a=C(n,t);super(a.message),this.name="CloudError",this.status=n,this.code=t,this.errors=i,this.version=r,this.action=a.action,this.cause=o;}get retryable(){return this.action==="retry"}};function b(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var I=new Map([["Form paused","paused"],["Form not found","not_found"],["Form expired","expired"],["internal error","internal"]]);function _(e,n="network"){return new u(0,n,void 0,void 0,e)}async function f(e){try{return await e.json()}catch(n){throw new u(e.status,"invalid_response",void 0,void 0,n)}}async function m(e){let n=await e.json().catch(()=>null);if(!b(n))return new u(e.status,"unknown");let t=b(n.errors)?n.errors:void 0,i=typeof n.version=="number"&&Number.isInteger(n.version)?n.version:void 0,r=typeof n.error=="string"?I.get(n.error)??n.error:"unknown";return new u(e.status,r,t,i)}var O=["Formhaus-Form-Version","Formhaus-Version"];function g(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function R(e){let n=Number(e);return e!==null&&e!==""&&Number.isInteger(n)&&n>0?n:void 0}function S(e){for(let n of O){let t=R(e.headers?.get(n));if(t!==void 0)return t}}function d(e){return typeof e=="string"&&e!==""?e:void 0}function U(e){if(!g(e))return {};let n=d(e.redirectUrl);return {...d(e.successMessage)&&{successMessage:d(e.successMessage)},...n&&/^https?:\/\//i.test(n)&&{redirectUrl:n},...typeof e.allowAnother=="boolean"&&{allowAnother:e.allowAnother}}}function v(e,n){if(!g(e))throw new u(n.status,"invalid_response");if(!("definition"in e))return {definition:e,version:S(n),settings:{}};if(!g(e.definition))throw new u(n.status,"invalid_response");return {definition:e.definition,version:R(e.version)??S(n),settings:U(e.settings),...d(e.renderToken)&&{renderToken:d(e.renderToken)}}}function T(){if(typeof crypto.randomUUID=="function")return crypto.randomUUID();let e=crypto.getRandomValues(new Uint8Array(16));e[6]=e[6]&15|64,e[8]=e[8]&63|128;let n=Array.from(e,t=>t.toString(16).padStart(2,"0")).join("");return `${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}var $="https://api.formhaus.cc",p="core=0.14.0";function F({id:e,apiBase:n=$}){return `${n.replace(/\/+$/,"")}/f/${encodeURIComponent(e)}`}var P=15e3,M=3e4;async function E(e,n,t={},i){let r=new AbortController,o=()=>r.abort(),a=setTimeout(o,n);i?.aborted&&o(),i?.addEventListener("abort",o);try{return await fetch(e,{...t,signal:r.signal})}catch(s){throw i?.aborted?s:_(s,r.signal.aborted?"timeout":"network")}finally{clearTimeout(a),i?.removeEventListener("abort",o);}}async function N(e,n,t){let i=t===void 0?p:`${p}&v=${t}`,r=await E(`${F(e)}/form?${i}`,P,{},n);if(!r.ok)throw await m(r);return v(await f(r),r)}async function Z(e,n){return (await N(e,n)).definition}function ee(e){let n=null;return async(t,i=[])=>{let r=JSON.stringify({...e.extraBody?.(),values:t,skippedSteps:i,version:e.version,_fh_rt:e.renderToken,...e.firstRenderToken&&{_fh_rt_first:e.firstRenderToken}});n?.body!==r&&(n={body:r,key:T()});let o=await E(`${F(e)}?${p}`,M,{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":n.key},body:r});if(!o.ok)throw await m(o);let a=await f(o);return n=null,a}}var V=new Set(["password","file","hidden"]),B=10080*60*1e3;function x(e,n$1){let t=new Set(e.filter(r=>V.has(r.type)).map(r=>r.key)),i={};for(let r of e){let o=n$1[r.key];if(t.has(r.key)||o===void 0)continue;let a=e.filter(s=>s.key===r.key&&q(s)).flatMap(s=>s.fields);i[r.key]=a.length&&Array.isArray(o)?o.map(s=>n(s)?x(a,s):s):o;}return i}function te(e,n){return x(r([...e.fields??[],...(e.steps??[]).flatMap(t=>t.fields)]),n)}var G=()=>globalThis.sessionStorage;function oe(e=B,n=G){let t=r=>`formhaus:draft:${r}`,i=(r,o)=>{try{let a=n();return a?r(a):o}catch{return o}};return {load:(r,o)=>i(a=>{let s=JSON.parse(a.getItem(t(r))??"null");return s&&s.version===o&&Date.now()-s.savedAt<e?s.values:null},null),save:(r,o,a)=>i(s=>s.setItem(t(r),JSON.stringify({version:o,savedAt:Date.now(),values:a})),void 0),clear:r=>i(o=>o.removeItem(t(r)),void 0)}}
|
|
2
|
+
export{j as a,J as b,C as c,u as d,_ as e,U as f,N as g,Z as h,ee as i,te as j,oe as k};//# sourceMappingURL=chunk-5YPOS62Y.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-5YPOS62Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cloud/failures.ts","../src/cloud/error.ts","../src/cloud/envelope.ts","../src/cloud/uuid.ts","../src/cloud/client.ts","../src/cloud/draft.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","LEGACY_CODES","networkError","readJson","response","error","toCloudError","body","VERSION_HEADERS","toVersion","headerVersion","name","text","parseSettings","redirect","parseForm","randomId","bytes","hex","byte","DEFAULT_API_BASE","CORE","endpoint","id","apiBase","LOAD_TIMEOUT","SUBMIT_TIMEOUT","send","url","timeout","init","signal","controller","abort","timer","fetchForm","options","after","query","fetchDefinition","createSubmitter","pending","values","skippedSteps","submission","SENSITIVE","WEEK","keep","fields","blocked","field","kept","items","other","isGroup","item","isEntry","draftValues","definition","valueFields","step","sessionStorageOf","sessionDraftStore","maxAge","storageOf","key","attempt","action","fallback","storage","draft"],"mappings":"wCAOO,IAAMA,CAAAA,CAAuB,qEAAA,CACvBC,CAAAA,CAAe,sBAAA,CAEtBC,EAAuB,CAAE,OAAA,CAAS,kCAAA,CAAoC,MAAA,CAAQ,OAAQ,CAAA,CACtFC,CAAAA,CAAwB,CAAE,QAAS,4BAAA,CAA8B,MAAA,CAAQ,OAAQ,CAAA,CACjFC,CAAAA,CAAuB,CAAE,OAAA,CAAS,gDAAA,CAAkD,OAAQ,QAAS,CAAA,CAErGC,CAAAA,CAAwC,CAC5C,QAAS,CAAE,OAAA,CAAS,uEAAA,CAAyE,MAAA,CAAQ,OAAQ,CAAA,CAC7G,OAAA,CAAS,CAAE,OAAA,CAAS,6CAAA,CAA+C,MAAA,CAAQ,OAAQ,CAAA,CACnF,QAAS,CAAE,OAAA,CAAS,iCAAA,CAAmC,MAAA,CAAQ,IAAK,CAAA,CACpE,YAAA,CAAc,CAAE,OAAA,CAAS,kDAAmD,MAAA,CAAQ,OAAQ,CAAA,CAC5F,aAAA,CAAe,CAAE,OAAA,CAAS,iDAAA,CAAmD,MAAA,CAAQ,IAAK,CAAA,CAC1F,SAAA,CAAW,CAAE,OAAA,CAAS,8BAA+B,MAAA,CAAQ,IAAK,CAAA,CAClE,MAAA,CAAQ,CAAE,OAAA,CAAS,sBAAA,CAAwB,MAAA,CAAQ,IAAK,CAAA,CACxD,OAAA,CAAS,CAAE,OAAA,CAAS,yBAA0B,MAAA,CAAQ,IAAK,CAAA,CAC3D,cAAA,CAAgB,CAAE,OAAA,CAAS,wDAAA,CAA0D,MAAA,CAAQ,IAAK,CAAA,CAClG,sBAAA,CAAwB,CAAE,OAAA,CAAS,gDAAA,CAAkD,MAAA,CAAQ,OAAQ,CAAA,CACrG,aAAc,CAAE,OAAA,CAAS,yCAAA,CAA2C,MAAA,CAAQ,QAAS,CAAA,CACrF,eAAA,CAAiB,CAAE,OAAA,CAAS,gDAAiD,MAAA,CAAQ,IAAK,CAAA,CAC1F,cAAA,CAAgBD,CAAAA,CAChB,sBAAA,CAAwBA,CAAAA,CACxB,uBAAA,CAAyBA,EACzB,gBAAA,CAAkBF,CAAAA,CAClB,WAAA,CAAaA,CAAAA,CACb,SAAUA,CACZ,CAAA,CAEMI,CAAAA,CAAyC,CAC7C,EAAG,SAAA,CACH,GAAA,CAAK,gBAAA,CACL,GAAA,CAAK,eAAA,CACL,GAAA,CAAK,WAAA,CACL,GAAA,CAAK,SACL,GAAA,CAAK,SAAA,CACL,GAAA,CAAK,gBAAA,CACL,IAAK,SAAA,CACL,GAAA,CAAK,iBAAA,CACL,GAAA,CAAK,cACP,EAEO,SAASC,CAAAA,CAAWC,CAAAA,CAAgBC,CAAAA,CAAO,EAAA,CAAkB,CAClE,IAAMC,EAAQL,CAAAA,CAAQI,CAAI,CAAA,EAAKJ,CAAAA,CAAQC,CAAAA,CAAeE,CAAM,CAAA,EAAK,EAAE,EACnE,OAAIE,CAAAA,GACGF,CAAAA,EAAU,GAAA,CAAMN,CAAAA,CAASC,CAAAA,CAClC,CClDO,IAAMQ,EAAN,cAAyB,KAAM,CAQpC,WAAA,CAAYH,EAAgBC,CAAAA,CAAcG,CAAAA,CAAiCC,CAAAA,CAAkBC,CAAAA,CAAiB,CAC5G,IAAMC,CAAAA,CAAUR,CAAAA,CAAWC,CAAAA,CAAQC,CAAI,CAAA,CACvC,KAAA,CAAMM,CAAAA,CAAQ,OAAO,CAAA,CACrB,IAAA,CAAK,IAAA,CAAO,YAAA,CACZ,KAAK,MAAA,CAASP,CAAAA,CACd,IAAA,CAAK,IAAA,CAAOC,EACZ,IAAA,CAAK,MAAA,CAASG,CAAAA,CACd,IAAA,CAAK,OAAA,CAAUC,CAAAA,CACf,IAAA,CAAK,MAAA,CAASE,EAAQ,MAAA,CACtB,IAAA,CAAK,KAAA,CAAQD,EACf,CAEA,IAAI,SAAA,EAAqB,CACvB,OAAO,KAAK,MAAA,GAAW,OACzB,CACF,EAEA,SAASE,CAAAA,CAASC,CAAAA,CAAkD,CAClE,OAAOA,CAAAA,GAAU,IAAA,EAAQ,OAAOA,CAAAA,EAAU,UAAY,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAC5E,CAEA,IAAMC,CAAAA,CAAe,IAAI,GAAA,CAAI,CAC3B,CAAC,aAAA,CAAe,QAAQ,CAAA,CACxB,CAAC,gBAAA,CAAkB,WAAW,EAC9B,CAAC,cAAA,CAAgB,SAAS,CAAA,CAC1B,CAAC,gBAAA,CAAkB,UAAU,CAC/B,CAAC,CAAA,CAEM,SAASC,CAAAA,CAAaL,CAAAA,CAAgBL,EAAO,SAAA,CAAuB,CACzE,OAAO,IAAIE,EAAW,CAAA,CAAGF,CAAAA,CAAM,MAAA,CAAW,MAAA,CAAWK,CAAK,CAC5D,CAEA,eAAsBM,CAAAA,CAASC,CAAAA,CAA2C,CACxE,GAAI,CACF,OAAO,MAAMA,CAAAA,CAAS,IAAA,EACxB,OAASC,CAAAA,CAAO,CACd,MAAM,IAAIX,EAAWU,CAAAA,CAAS,MAAA,CAAQ,kBAAA,CAAoB,MAAA,CAAW,MAAA,CAAWC,CAAK,CACvF,CACF,CAEA,eAAsBC,CAAAA,CAAaF,CAAAA,CAA8C,CAC/E,IAAMG,CAAAA,CAAgB,MAAMH,CAAAA,CAAS,MAAK,CAAE,KAAA,CAAM,IAAM,IAAI,CAAA,CAC5D,GAAI,CAACL,CAAAA,CAASQ,CAAI,CAAA,CAAG,OAAO,IAAIb,CAAAA,CAAWU,EAAS,MAAA,CAAQ,SAAS,CAAA,CACrE,IAAMT,EAASI,CAAAA,CAASQ,CAAAA,CAAK,MAAM,CAAA,CAAKA,CAAAA,CAAK,MAAA,CAAoC,MAAA,CAC3EX,CAAAA,CAAU,OAAOW,CAAAA,CAAK,OAAA,EAAY,QAAA,EAAY,MAAA,CAAO,UAAUA,CAAAA,CAAK,OAAO,CAAA,CAAIA,CAAAA,CAAK,QAAU,MAAA,CAC9Ff,CAAAA,CAAO,OAAOe,CAAAA,CAAK,KAAA,EAAU,QAAA,CAAYN,CAAAA,CAAa,GAAA,CAAIM,EAAK,KAAK,CAAA,EAAKA,CAAAA,CAAK,KAAA,CAAS,UAC7F,OAAO,IAAIb,CAAAA,CAAWU,CAAAA,CAAS,OAAQZ,CAAAA,CAAMG,CAAAA,CAAQC,CAAO,CAC9D,CCzCA,IAAMY,CAAAA,CAAkB,CAAC,wBAAyB,kBAAkB,CAAA,CAEpE,SAAST,CAAAA,CAASC,CAAAA,CAAkD,CAClE,OAAOA,CAAAA,GAAU,MAAQ,OAAOA,CAAAA,EAAU,QAAA,EAAY,CAAC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAC5E,CAEA,SAASS,CAAAA,CAAUT,CAAAA,CAAoC,CACrD,IAAMJ,CAAAA,CAAU,MAAA,CAAOI,CAAK,CAAA,CAC5B,OAAOA,CAAAA,GAAU,IAAA,EAAQA,CAAAA,GAAU,EAAA,EAAM,MAAA,CAAO,SAAA,CAAUJ,CAAO,CAAA,EAAKA,EAAU,CAAA,CAAIA,CAAAA,CAAU,MAChG,CAEA,SAASc,CAAAA,CAAcN,CAAAA,CAA6C,CAClE,IAAA,IAAWO,KAAQH,CAAAA,CAAiB,CAClC,IAAMZ,CAAAA,CAAUa,CAAAA,CAAUL,CAAAA,CAAS,OAAA,EAAS,GAAA,CAAIO,CAAI,CAAC,CAAA,CACrD,GAAIf,CAAAA,GAAY,OAAW,OAAOA,CACpC,CAEF,CAEA,SAASgB,CAAAA,CAAKZ,CAAAA,CAAoC,CAChD,OAAO,OAAOA,CAAAA,EAAU,QAAA,EAAYA,CAAAA,GAAU,GAAKA,CAAAA,CAAQ,MAC7D,CAEO,SAASa,CAAAA,CAAcb,CAAAA,CAA+B,CAC3D,GAAI,CAACD,CAAAA,CAASC,CAAK,CAAA,CAAG,OAAO,EAAC,CAC9B,IAAMc,CAAAA,CAAWF,EAAKZ,CAAAA,CAAM,WAAW,CAAA,CACvC,OAAO,CACL,GAAIY,CAAAA,CAAKZ,CAAAA,CAAM,cAAc,GAAK,CAAE,cAAA,CAAgBY,CAAAA,CAAKZ,CAAAA,CAAM,cAAc,CAAE,CAAA,CAC/E,GAAIc,GAAY,eAAA,CAAgB,IAAA,CAAKA,CAAQ,CAAA,EAAK,CAAE,WAAA,CAAaA,CAAS,CAAA,CAC1E,GAAI,OAAOd,CAAAA,CAAM,YAAA,EAAiB,SAAA,EAAa,CAAE,YAAA,CAAcA,CAAAA,CAAM,YAAa,CACpF,CACF,CAEO,SAASe,CAAAA,CAAUR,CAAAA,CAAeH,EAAwC,CAC/E,GAAI,CAACL,CAAAA,CAASQ,CAAI,CAAA,CAAG,MAAM,IAAIb,CAAAA,CAAWU,CAAAA,CAAS,MAAA,CAAQ,kBAAkB,CAAA,CAC7E,GAAI,EAAE,YAAA,GAAgBG,CAAAA,CAAAA,CAAO,OAAO,CAAE,UAAA,CAAYA,CAAAA,CAAmC,OAAA,CAASG,CAAAA,CAAcN,CAAQ,CAAA,CAAG,QAAA,CAAU,EAAG,CAAA,CACpI,GAAI,CAACL,CAAAA,CAASQ,EAAK,UAAU,CAAA,CAAG,MAAM,IAAIb,EAAWU,CAAAA,CAAS,MAAA,CAAQ,kBAAkB,CAAA,CACxF,OAAO,CACL,UAAA,CAAYG,CAAAA,CAAK,UAAA,CACjB,OAAA,CAASE,CAAAA,CAAUF,CAAAA,CAAK,OAAO,GAAKG,CAAAA,CAAcN,CAAQ,CAAA,CAC1D,QAAA,CAAUS,EAAcN,CAAAA,CAAK,QAAQ,CAAA,CACrC,GAAIK,EAAKL,CAAAA,CAAK,WAAW,CAAA,EAAK,CAAE,WAAA,CAAaK,CAAAA,CAAKL,CAAAA,CAAK,WAAW,CAAE,CACtE,CACF,CC3DO,SAASS,GAAmB,CACjC,GAAI,OAAO,MAAA,CAAO,YAAe,UAAA,CAAY,OAAO,MAAA,CAAO,UAAA,EAAW,CACtE,IAAMC,CAAAA,CAAQ,MAAA,CAAO,gBAAgB,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,CACvDA,CAAAA,CAAM,CAAC,CAAA,CAAKA,EAAM,CAAC,CAAA,CAAI,EAAA,CAAM,EAAA,CAC7BA,CAAAA,CAAM,CAAC,CAAA,CAAKA,CAAAA,CAAM,CAAC,CAAA,CAAI,EAAA,CAAM,GAAA,CAC7B,IAAMC,EAAM,KAAA,CAAM,IAAA,CAAKD,CAAAA,CAAQE,CAAAA,EAASA,EAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,CAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA,CACnF,OAAO,CAAA,EAAGD,EAAI,KAAA,CAAM,CAAA,CAAG,CAAC,CAAC,IAAIA,CAAAA,CAAI,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAI,KAAA,CAAM,GAAI,EAAE,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAI,MAAM,EAAA,CAAI,EAAE,CAAC,CAAA,CAAA,EAAIA,EAAI,KAAA,CAAM,EAAE,CAAC,CAAA,CAC1G,CCFA,IAAME,CAAAA,CAAmB,yBAAA,CACnBC,EAAO,aAAA,CAYb,SAASC,CAAAA,CAAS,CAAE,EAAA,CAAAC,CAAAA,CAAI,OAAA,CAAAC,CAAAA,CAAUJ,CAAiB,CAAA,CAA+B,CAChF,OAAO,CAAA,EAAGI,CAAAA,CAAQ,OAAA,CAAQ,MAAA,CAAQ,EAAE,CAAC,CAAA,GAAA,EAAM,kBAAA,CAAmBD,CAAE,CAAC,EACnE,CAEA,IAAME,CAAAA,CAAe,IAAA,CACfC,EAAiB,GAAA,CAEvB,eAAeC,CAAAA,CAAKC,CAAAA,CAAaC,CAAAA,CAAiBC,CAAAA,CAAyB,EAAC,CAAGC,EAA8C,CAC3H,IAAMC,CAAAA,CAAa,IAAI,gBACjBC,CAAAA,CAAQ,IAAMD,CAAAA,CAAW,KAAA,GACzBE,CAAAA,CAAQ,UAAA,CAAWD,CAAAA,CAAOJ,CAAO,CAAA,CACnCE,CAAAA,EAAQ,OAAA,EAASE,CAAAA,GACrBF,CAAAA,EAAQ,gBAAA,CAAiB,OAAA,CAASE,CAAK,EACvC,GAAI,CACF,OAAO,MAAM,MAAML,CAAAA,CAAK,CAAE,GAAGE,CAAAA,CAAM,MAAA,CAAQE,CAAAA,CAAW,MAAO,CAAC,CAChE,CAAA,MAAS3B,CAAAA,CAAO,CACd,MAAI0B,CAAAA,EAAQ,OAAA,CAAe1B,CAAAA,CACrBH,CAAAA,CAAaG,EAAO2B,CAAAA,CAAW,MAAA,CAAO,OAAA,CAAU,SAAA,CAAY,SAAS,CAC7E,CAAA,OAAE,CACA,aAAaE,CAAK,CAAA,CAClBH,CAAAA,EAAQ,mBAAA,CAAoB,QAASE,CAAK,EAC5C,CACF,CAEA,eAAsBE,CAAAA,CAAUC,CAAAA,CAA6BL,CAAAA,CAAsBM,CAAAA,CAAwC,CACzH,IAAMC,CAAAA,CAAQD,CAAAA,GAAU,OAAYhB,CAAAA,CAAO,CAAA,EAAGA,CAAI,CAAA,GAAA,EAAMgB,CAAK,CAAA,CAAA,CACvDjC,CAAAA,CAAW,MAAMuB,CAAAA,CAAK,GAAGL,CAAAA,CAASc,CAAO,CAAC,CAAA,MAAA,EAASE,CAAK,CAAA,CAAA,CAAIb,CAAAA,CAAc,GAAIM,CAAM,CAAA,CAC1F,GAAI,CAAC3B,EAAS,EAAA,CAAI,MAAM,MAAME,CAAAA,CAAaF,CAAQ,CAAA,CACnD,OAAOW,CAAAA,CAAU,MAAMZ,CAAAA,CAASC,CAAQ,CAAA,CAAGA,CAAQ,CACrD,CAEA,eAAsBmC,CAAAA,CAAgBH,CAAAA,CAA6BL,EAA+C,CAChH,OAAA,CAAQ,MAAMI,CAAAA,CAAUC,EAASL,CAAM,CAAA,EAAG,UAC5C,CASO,SAASS,EAAAA,CAAgBJ,CAAAA,CAAgC,CAC9D,IAAIK,CAAAA,CAAgD,IAAA,CAEpD,OAAO,MAAOC,EAAiCC,CAAAA,CAAyB,EAAC,GAAgC,CACvG,IAAMpC,CAAAA,CAAO,IAAA,CAAK,SAAA,CAAU,CAC1B,GAAG6B,CAAAA,CAAQ,SAAA,IAAY,CACvB,OAAAM,CAAAA,CACA,YAAA,CAAAC,CAAAA,CACA,OAAA,CAASP,EAAQ,OAAA,CACjB,MAAA,CAAQA,CAAAA,CAAQ,WAAA,CAChB,GAAIA,CAAAA,CAAQ,gBAAA,EAAoB,CAAE,YAAA,CAAcA,CAAAA,CAAQ,gBAAiB,CAC3E,CAAC,EACGK,CAAAA,EAAS,IAAA,GAASlC,CAAAA,GAAMkC,CAAAA,CAAU,CAAE,IAAA,CAAAlC,CAAAA,CAAM,GAAA,CAAKS,CAAAA,EAAW,CAAA,CAAA,CAC9D,IAAMZ,CAAAA,CAAW,MAAMuB,CAAAA,CAAK,CAAA,EAAGL,CAAAA,CAASc,CAAO,CAAC,CAAA,CAAA,EAAIf,CAAI,CAAA,CAAA,CAAIK,CAAAA,CAAgB,CAC1E,MAAA,CAAQ,MAAA,CACR,OAAA,CAAS,CAAE,cAAA,CAAgB,kBAAA,CAAoB,iBAAA,CAAmBe,CAAAA,CAAQ,GAAI,CAAA,CAC9E,IAAA,CAAAlC,CACF,CAAC,CAAA,CACD,GAAI,CAACH,CAAAA,CAAS,GAAI,MAAM,MAAME,CAAAA,CAAaF,CAAQ,EACnD,IAAMwC,CAAAA,CAAc,MAAMzC,CAAAA,CAASC,CAAQ,CAAA,CAC3C,OAAAqC,CAAAA,CAAU,KACHG,CACT,CACF,CCpEA,IAAMC,EAAY,IAAI,GAAA,CAAI,CAAC,UAAA,CAAY,OAAQ,QAAQ,CAAC,CAAA,CAClDC,CAAAA,CAAO,KAAA,CAAc,EAAA,CAAK,GAAA,CAEhC,SAASC,EAAKC,CAAAA,CAAqBN,GAAAA,CAA0D,CAC3F,IAAMO,EAAU,IAAI,GAAA,CAAID,CAAAA,CAAO,MAAA,CAAQE,GAAUL,CAAAA,CAAU,GAAA,CAAIK,CAAAA,CAAM,IAAI,CAAC,CAAA,CAAE,GAAA,CAAKA,CAAAA,EAAUA,EAAM,GAAG,CAAC,CAAA,CAC/FC,CAAAA,CAAgC,EAAC,CACvC,IAAA,IAAWD,CAAAA,IAASF,CAAAA,CAAQ,CAC1B,IAAMhD,CAAAA,CAAQ0C,GAAAA,CAAOQ,CAAAA,CAAM,GAAG,CAAA,CAC9B,GAAID,CAAAA,CAAQ,IAAIC,CAAAA,CAAM,GAAG,CAAA,EAAKlD,CAAAA,GAAU,OAAW,SACnD,IAAMoD,CAAAA,CAAQJ,CAAAA,CAAO,OAAQK,CAAAA,EAAUA,CAAAA,CAAM,GAAA,GAAQH,CAAAA,CAAM,GAAA,EAAOI,CAAAA,CAAQD,CAAK,CAAC,EAAE,OAAA,CAASA,CAAAA,EAAWA,CAAAA,CAAoB,MAAM,EAChIF,CAAAA,CAAKD,CAAAA,CAAM,GAAG,CAAA,CAAIE,EAAM,MAAA,EAAU,KAAA,CAAM,OAAA,CAAQpD,CAAK,CAAA,CAAIA,CAAAA,CAAM,GAAA,CAAKuD,CAAAA,EAAUC,EAAQD,CAAI,CAAA,CAAIR,CAAAA,CAAKK,CAAAA,CAAOG,CAAI,CAAA,CAAIA,CAAK,CAAA,CAAIvD,EAC7H,CACA,OAAOmD,CACT,CAEO,SAASM,EAAAA,CAAYC,CAAAA,CAA4BhB,CAAAA,CAA0D,CAChH,OAAOK,CAAAA,CAAKY,CAAAA,CAAY,CAAC,GAAID,CAAAA,CAAW,MAAA,EAAU,EAAC,CAAI,IAAIA,CAAAA,CAAW,KAAA,EAAS,EAAC,EAAG,OAAA,CAASE,CAAAA,EAASA,CAAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAAGlB,CAAM,CAC7H,CAEA,IAAMmB,CAAAA,CAAmB,IAAO,UAAA,CAAiD,eAE1E,SAASC,EAAAA,CAAkBC,CAAAA,CAASjB,CAAAA,CAAMkB,CAAAA,CAA4CH,CAAAA,CAA8B,CACzH,IAAMI,EAAO1C,CAAAA,EAAe,CAAA,eAAA,EAAkBA,CAAE,CAAA,CAAA,CAC1C2C,EAAU,CAAIC,CAAAA,CAAsCC,CAAAA,GAAmB,CAC3E,GAAI,CACF,IAAMC,CAAAA,CAAUL,CAAAA,EAAU,CAC1B,OAAOK,CAAAA,CAAUF,CAAAA,CAAOE,CAAO,CAAA,CAAID,CACrC,CAAA,KAAQ,CACN,OAAOA,CACT,CACF,CAAA,CACA,OAAO,CACL,IAAA,CAAM,CAAC7C,CAAAA,CAAI3B,CAAAA,GACTsE,CAAAA,CAASG,CAAAA,EAAY,CACnB,IAAMC,EAAQ,IAAA,CAAK,KAAA,CAAMD,CAAAA,CAAQ,OAAA,CAAQJ,EAAI1C,CAAE,CAAC,CAAA,EAAK,MAAM,EAK3D,OAAO+C,CAAAA,EAASA,CAAAA,CAAM,OAAA,GAAY1E,CAAAA,EAAW,IAAA,CAAK,GAAA,EAAI,CAAI0E,EAAM,OAAA,CAAUP,CAAAA,CAASO,CAAAA,CAAM,MAAA,CAAS,IACpG,CAAA,CAAG,IAAI,CAAA,CACT,IAAA,CAAM,CAAC/C,CAAAA,CAAI3B,CAAAA,CAAS8C,CAAAA,GAClBwB,CAAAA,CAASG,CAAAA,EAAYA,CAAAA,CAAQ,OAAA,CAAQJ,CAAAA,CAAI1C,CAAE,CAAA,CAAG,IAAA,CAAK,SAAA,CAAU,CAAE,QAAA3B,CAAAA,CAAS,OAAA,CAAS,IAAA,CAAK,GAAA,GAAO,MAAA,CAAA8C,CAAO,CAAC,CAAC,CAAA,CAAG,MAAS,CAAA,CACpH,KAAA,CAAQnB,GAAO2C,CAAAA,CAASG,CAAAA,EAAYA,CAAAA,CAAQ,UAAA,CAAWJ,EAAI1C,CAAE,CAAC,CAAA,CAAG,MAAS,CAC5E,CACF","file":"chunk-5YPOS62Y.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: 'Could not reach the form server. Check your connection and try again.', action: 'retry' },\n timeout: { message: 'The form server did not respond. 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 client_outdated: { message: 'This form needs a newer version of this page.', action: null },\n malformed_body: BROKEN,\n unsupported_media_type: BROKEN,\n invalid_idempotency_key: BROKEN,\n invalid_response: SERVER,\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 409: 'paused',\n 410: 'expired',\n 413: 'body_too_large',\n 422: 'invalid',\n 426: 'client_outdated',\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\nconst LEGACY_CODES = new Map([\n ['Form paused', 'paused'],\n ['Form not found', 'not_found'],\n ['Form expired', 'expired'],\n ['internal error', 'internal'],\n]);\n\nexport function networkError(cause: unknown, code = 'network'): CloudError {\n return new CloudError(0, code, undefined, undefined, cause);\n}\n\nexport async function readJson(response: CloudResponse): Promise<unknown> {\n try {\n return await response.json();\n } catch (error) {\n throw new CloudError(response.status, 'invalid_response', undefined, undefined, error);\n }\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 const code = typeof body.error === 'string' ? (LEGACY_CODES.get(body.error) ?? body.error) : 'unknown';\n return new CloudError(response.status, code, errors, version);\n}\n","import type { FormDefinition } from '../types';\nimport { CloudError } from './error';\n\nexport interface CloudSettings {\n successMessage?: string;\n redirectUrl?: string;\n allowAnother?: boolean;\n}\n\nexport interface PublishedForm {\n definition: FormDefinition;\n version?: number;\n settings?: CloudSettings;\n renderToken?: string;\n}\n\nconst VERSION_HEADERS = ['Formhaus-Form-Version', 'Formhaus-Version'];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction toVersion(value: unknown): number | undefined {\n const version = Number(value);\n return value !== null && value !== '' && Number.isInteger(version) && version > 0 ? version : undefined;\n}\n\nfunction headerVersion(response: CloudResponse): number | undefined {\n for (const name of VERSION_HEADERS) {\n const version = toVersion(response.headers?.get(name));\n if (version !== undefined) return version;\n }\n return undefined;\n}\n\nfunction text(value: unknown): string | undefined {\n return typeof value === 'string' && value !== '' ? value : undefined;\n}\n\nexport function parseSettings(value: unknown): CloudSettings {\n if (!isRecord(value)) return {};\n const redirect = text(value.redirectUrl);\n return {\n ...(text(value.successMessage) && { successMessage: text(value.successMessage) }),\n ...(redirect && /^https?:\\/\\//i.test(redirect) && { redirectUrl: redirect }),\n ...(typeof value.allowAnother === 'boolean' && { allowAnother: value.allowAnother }),\n };\n}\n\nexport function parseForm(body: unknown, response: CloudResponse): PublishedForm {\n if (!isRecord(body)) throw new CloudError(response.status, 'invalid_response');\n if (!('definition' in body)) return { definition: body as unknown as FormDefinition, version: headerVersion(response), settings: {} };\n if (!isRecord(body.definition)) throw new CloudError(response.status, 'invalid_response');\n return {\n definition: body.definition as unknown as FormDefinition,\n version: toVersion(body.version) ?? headerVersion(response),\n settings: parseSettings(body.settings),\n ...(text(body.renderToken) && { renderToken: text(body.renderToken) }),\n };\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, readJson, toCloudError } from './error';\nimport { parseForm, type PublishedForm } from './envelope';\nimport { randomId } from './uuid';\n\nconst DEFAULT_API_BASE = 'https://api.formhaus.cc';\nconst CORE = `core=${__FORMHAUS_CORE_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\nfunction endpoint({ id, apiBase = DEFAULT_API_BASE }: CloudClientOptions): string {\n return `${apiBase.replace(/\\/+$/, '')}/f/${encodeURIComponent(id)}`;\n}\n\nconst LOAD_TIMEOUT = 15_000;\nconst SUBMIT_TIMEOUT = 30_000;\n\nasync function send(url: string, timeout: number, init: CloudRequestInit = {}, signal?: AbortSignal): Promise<CloudResponse> {\n const controller = new AbortController();\n const abort = () => controller.abort();\n const timer = setTimeout(abort, timeout);\n if (signal?.aborted) abort();\n signal?.addEventListener('abort', abort);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (signal?.aborted) throw error;\n throw networkError(error, controller.signal.aborted ? 'timeout' : 'network');\n } finally {\n clearTimeout(timer);\n signal?.removeEventListener('abort', abort);\n }\n}\n\nexport async function fetchForm(options: CloudClientOptions, signal?: AbortSignal, after?: number): Promise<PublishedForm> {\n const query = after === undefined ? CORE : `${CORE}&v=${after}`;\n const response = await send(`${endpoint(options)}/form?${query}`, LOAD_TIMEOUT, {}, signal);\n if (!response.ok) throw await toCloudError(response);\n return parseForm(await readJson(response), response);\n}\n\nexport async function fetchDefinition(options: CloudClientOptions, signal?: AbortSignal): Promise<FormDefinition> {\n return (await fetchForm(options, signal)).definition;\n}\n\nexport interface CloudSubmitterOptions extends CloudClientOptions {\n version?: number;\n renderToken?: string;\n firstRenderToken?: string;\n extraBody?: () => Record<string, unknown>;\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({\n ...options.extraBody?.(),\n values,\n skippedSteps,\n version: options.version,\n _fh_rt: options.renderToken,\n ...(options.firstRenderToken && { _fh_rt_first: options.firstRenderToken }),\n });\n if (pending?.body !== body) pending = { body, key: randomId() };\n const response = await send(`${endpoint(options)}?${CORE}`, SUBMIT_TIMEOUT, {\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 const submission = (await readJson(response)) as CloudSubmission;\n pending = null;\n return submission;\n };\n}\n","import type { FormDefinition, FormField, FormGroup } from '../types';\nimport { isEntry, isGroup, valueFields } from '../visibility/nodes';\n\nexport interface DraftStorage {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\nexport interface DraftStore {\n load(id: string, version: number | undefined): Record<string, unknown> | null;\n save(id: string, version: number | undefined, values: Record<string, unknown>): void;\n clear(id: string): void;\n}\n\nconst SENSITIVE = new Set(['password', 'file', 'hidden']);\nconst WEEK = 7 * 24 * 60 * 60 * 1000;\n\nfunction keep(fields: FormField[], values: Record<string, unknown>): Record<string, unknown> {\n const blocked = new Set(fields.filter((field) => SENSITIVE.has(field.type)).map((field) => field.key));\n const kept: Record<string, unknown> = {};\n for (const field of fields) {\n const value = values[field.key];\n if (blocked.has(field.key) || value === undefined) continue;\n const items = fields.filter((other) => other.key === field.key && isGroup(other)).flatMap((other) => (other as FormGroup).fields);\n kept[field.key] = items.length && Array.isArray(value) ? value.map((item) => (isEntry(item) ? keep(items, item) : item)) : value;\n }\n return kept;\n}\n\nexport function draftValues(definition: FormDefinition, values: Record<string, unknown>): Record<string, unknown> {\n return keep(valueFields([...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)]), values);\n}\n\nconst sessionStorageOf = () => (globalThis as { sessionStorage?: DraftStorage }).sessionStorage;\n\nexport function sessionDraftStore(maxAge = WEEK, storageOf: () => DraftStorage | undefined = sessionStorageOf): DraftStore {\n const key = (id: string) => `formhaus:draft:${id}`;\n const attempt = <T>(action: (storage: DraftStorage) => T, fallback: T): T => {\n try {\n const storage = storageOf();\n return storage ? action(storage) : fallback;\n } catch {\n return fallback;\n }\n };\n return {\n load: (id, version) =>\n attempt((storage) => {\n const draft = JSON.parse(storage.getItem(key(id)) ?? 'null') as {\n version?: number;\n savedAt: number;\n values: Record<string, unknown>;\n } | null;\n return draft && draft.version === version && Date.now() - draft.savedAt < maxAge ? draft.values : null;\n }, null),\n save: (id, version, values) =>\n attempt((storage) => storage.setItem(key(id), JSON.stringify({ version, savedAt: Date.now(), values })), undefined),\n clear: (id) => attempt((storage) => storage.removeItem(key(id)), undefined),\n };\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a,e,c as c$1,d}from'./chunk-QVA6DLYS.js';import {c,h as h$1,G as G$1,F,b as b$1,l,u,q,r,v,y,m,o,x,A as A$1,n,B,d as d$1,f,w,z}from'./chunk-5WADJMJJ.js';function ur(r,t){return !!r&&!!r.disabled?.length&&r.disabled.every(e=>c(e,t))}function dr(r,t){return b$1(r)||r===false&&d$1.includes(t.type)}function U(r,t,e,o){let i=e[`min${t}`],s=e[`max${t}`];if(i!==void 0&&r<i)return e[`min${t}Message`]??o("min",{min:i});if(s!==void 0&&r>s)return e[`max${t}Message`]??o("max",{max:s})}function cr(r,t,e){if(t.pattern!==void 0)try{let o=new RegExp(t.pattern),i=String(r);return i.length<=f&&o.test(i)?void 0:t.patternMessage??e()}catch{return}}function lr(r,t,e,o){if(typeof r=="number")return U(r,"",t,(s,n)=>o(s,n,e));if(typeof r!="string"&&!Array.isArray(r))return;let i=Array.isArray(r)?"Items":"Length";return U(r.length,"Length",t,(s,n)=>o(`${s}${i}`,n,e))}function h(r,t,e,o,i){let s=h$1(r,t),n=r.validation??{},a=G$1(F(i)),u=()=>n.matchFieldMessage??a("matchField",{},r);if(dr(s,r))return n.required?typeof n.required=="string"?n.required:a("required",{},r):n.matchField!==void 0&&!b$1(e[n.matchField])?u():null;let d=l(r,s,a);return d||(lr(s,n,r,a)??cr(s,n,()=>a("pattern",{},r))??(n.matchField!==void 0&&s!==e[n.matchField]?u():void 0)??(n.validator?o?.[n.validator]?.(s,e):void 0))||null}function fr(r,t,e,o){return V(r.fields,t,e,o)}function pr(r,t,e,o){let i={};return v(t[r.key]).forEach((s,n)=>{let a=w(r,s,t);for(let u of r.fields){let d=m(u,a)&&h(u,a[u.key],a,e,o);d&&(i[y(r.key,n,u.key)]=d);}}),i}function V(r,t,e,o){let i={};for(let s of u(r,t)){let n=h(s,t[s.key],t,e,o);n&&(i[s.key]=n),q(s)&&Object.assign(i,pr(s,t,e,o));}return i}function mr(r$1,t,e){return r(r$1).flatMap(o=>[...a(t,o)?[o.key]:[],...q(o)?v(e[o.key]).flatMap((i,s)=>o.fields.map(({key:n})=>y(o.key,s,n))).filter(i=>t[i]!==void 0):[]])}function W(r,t){return V(t,N(r),r.validators,r.messages)}function A(r,t,e,o=N(r)){return h(t,e,o,r.validators,r.messages)}function Z(r,{group:t,index:e,field:o}){let i=N(r),s=w(t,v(i[t.key])[e],i);return A(r,o,s[o.key],s)}function _r(r,t,e$1=false,o=[]){let{state:i}=r,s=r.errors,n={},a=[...o];for(let[d,c]of Object.entries(t))r.e.s(d,r.values)||r.e.l(d,r.values)?n[d]=c:a.push(c);e$1&&(i.n=n,i.g=a),i.errors={...i.n,...n},i.topLevelErrors=e$1?a:[...i.g,...a];let u=e$1&&rr(r,n);r.t({fieldKeys:e(s,r.errors),structureChanged:u});}function rr(r,t){let e=r.visibleSteps.findIndex(o=>mr(o.fields,t,r.values).length>0);return e<0||e===r.currentStepIndex?false:(r.state.currentStepIndex=e,true)}function E(r,t,e=false){e&&delete r.state.n[t];let o=r.state.n[t];o===void 0?delete r.errors[t]:r.errors[t]=o;}function L(r,t){let e=new Set(t),{n:o}=r.state;for(let i of Object.keys(o))(e.has(i)||e.has(r.e.owner(i)))&&delete o[i];}function b(r,t,e){let o=[],i=e?e.group.fields.map(s=>[y(e.group.key,e.index,s.key),s]):r.e.c.map(s=>[s.key,s]);for(let[s,n]of i)n.validation?.matchField!==t||r.errors[s]===void 0||(e?Z(r,{...e,field:n}):A(r,n,r.values[n.key]))||(E(r,s),o.push(s));if(!e)for(let s of r.e.groups)r.e.s(s.key,r.values)!==s||!s.fields.some(n=>n.validation?.matchField===t)||v(r.values[s.key]).forEach((n,a)=>{o.push(...b(r,t,{group:s,index:a,field:s.fields[0]}));});return o}function tr(r$1){let t=new Set(r$1.visibleSteps.flatMap(o=>r(o.fields).map(i=>i.key))),e=Object.keys(r$1.errors).filter(o=>!t.has(r$1.e.owner(o)));for(let o of e)delete r$1.errors[o];return L(r$1,e),e}function Fr(r,t){for(let e of [...r.r.values()].flat())delete t[e];return t}function $r(r,t=false){let e$1=r.errors,o={};if(r.isMultiStep)for(let s of r.visibleSteps)r.r.has(s.id)||Object.assign(o,W(r,s.fields));else Object.assign(o,W(r,r.definition.fields??[]));r.state.errors={...r.state.n,...o};let i=t&&rr(r,o);return r.t({fieldKeys:e(e$1,o),structureChanged:i}),o}function qr(r,t){let e=r.e.s(t,r.values),o=!e&&r.e.l(t,r.values);if(!e&&!o)return null;let i=r.errors[t],s=o?Z(r,o):A(r,e,r.values[t]);s?r.errors[t]=s:E(r,t,true);let n=Object.is(i,r.errors[t])?[]:[t];return r.t({fieldKeys:n}),s}function N(r){return Fr(r,{...r.e.y(r.values)})}function Tr(r,t){let e$1=r.values,o=r.errors,i=Object.keys(r.fieldLoading);r.i++,r.o++,Object.assign(r.state,c$1(d(r.e.c,t))),r.r.clear(),r.e.u(r.values,r.errors,true);let s=e(e$1,r.values),n=new Set([...s,...e(o,r.errors),...i]);r.t({fieldKeys:n,structureChanged:true,valuesChanged:s.size>0});}function Yr(r,t){return or(r,t).steps}function or(r,t){let e=r.steps??[],o=new Map(e.map((n,a)=>[n.id,a])),i=[],s={};e.length||er({fields:r.fields??[]},t,s);for(let n=0;n<e.length;){let a=e[n];if(!m(a,s)){n++;continue}i.push(a),er(a,t,s);let u=a.routes?.find(d=>m(d,s)&&(d.to===null||(o.get(d.to)??-1)>n&&m(e[o.get(d.to)],s)));if(u?.to===null)break;n=u?o.get(u.to):n+1;}return {steps:i,values:s}}function sr(r,t,e){let o=r[e]??r[r.length-1],i=t.findIndex(n=>n.id===o?.id);if(i!==-1)return i;let s=new Map(t.map((n,a)=>[n.id,a]));for(let n=Math.min(e-1,r.length-1);n>=0;n--){let a=s.get(r[n].id);if(a!==void 0)return a}return 0}function er(r$1,t,e){let o$1=r(r$1.fields),i=o$1.map(({key:n})=>[n,o(e,n),e[n]]);for(let n of o$1)e[n.key]=h$1(n,t[n.key]);let s=u(r$1.fields,e).filter(n=>t[n.key]!==void 0).map(n=>[n.key,q(n)?x(n,t[n.key],e):h$1(n,t[n.key])]);for(let[n,a,u]of i)a?e[n]=u:delete e[n];for(let[n,a]of s)e[n]=a;}function Jr(r){let t=null,e=[],o={},i=s=>{t!==s&&(t=s,{steps:e,values:o}=or(r,s));};return {invalidate(){t=null;},steps(s){return i(s),e},values(s){return i(s),o}}}function O(r,t,e,o=true,i=()=>[]){let{values:s,errors:n}=r.state,a=r.isMultiStep?r.visibleSteps:null,u=!Object.is(s[t],e),d=n[t];s[t]=e,o&&E(r,t,u);for(let[F,j]of r.r)u&&j.includes(t)&&r.r.delete(F);let c=r.e.u(s,n);L(r,c);let m=new Set([...c,...b(r,t),...i()]);(u||d!==n[t])&&m.add(t);let w=u||c.size>0,y=w&&r.e.k(t,c);if(a&&y){r.e.f(true,true),r.state.currentStepIndex=sr(a,r.visibleSteps,r.currentStepIndex);for(let F of tr(r))m.add(F);}r.t({fieldKeys:m,structureChanged:y,valuesChanged:w});}function G(r,t){let e=r.e.s(t,r.values);return e&&q(e)?e:void 0}function nr(r){let t=r.validation??{};return [t.minLength??(t.required?1:0),t.maxLength??100]}var ir=(r,t)=>Number.isInteger(r)&&r>=0&&r<t.length;function st(r,t){let e=G(r,t);return e?v(r.values[t]).map((o,i)=>({id:A$1(o,i),fields:r.e.F(e,o,r.values)})):[]}function nt(r,t){let e=G(r,t),o=v(r.values[t]);return !e||o.length>=nr(e)[1]?false:(O(r,t,[...o,d(e.fields)]),true)}function P(r,t,e){let o={};for(let i of Object.keys(r)){let s=z(t,i);!s||s[0]<e||(s[0]>e&&(o[y(t,s[0]-1,s[1])]=r[i]),delete r[i]);}Object.assign(r,o);}function it(r,t,e$1){let o=G(r,t),i=v(r.values[t]);if(!o||!ir(e$1,i)||i.length<=nr(o)[0])return false;let s={...r.errors};return P(r.state.errors,t,e$1),P(r.state.n,t,e$1),P(r.state.fieldLoading,t,e$1),O(r,t,i.filter((n,a)=>a!==e$1),true,()=>e(s,r.errors)),true}function at(r,t,e,o,i){let s=G(r,t),n$1=v(r.values[t]),a=s?.fields.find(F=>F.key===o);if(!s||!a||!ir(e,n$1))return;let u=n$1[e],d=n(u)?u:{},c=y(t,e,o),m=!Object.is(d[o],i),w=r.errors[c],y$1=n$1;if(m){let F=B(u,{...d,[o]:i});y$1=n$1.map((j,ar)=>ar===e?F:j);}E(r,c,m),O(r,t,y$1,false,()=>[...m||w!==r.errors[c]?[c]:[],...b(r,o,{group:s,index:e,field:a})]);}export{ur as a,h as b,fr as c,V as d,mr as e,W as f,_r as g,L as h,tr as i,$r as j,qr as k,N as l,Tr as m,Yr as n,sr as o,Jr as p,O as q,nr as r,st as s,nt as t,it as u,at as v};//# sourceMappingURL=chunk-CW5ZWCSD.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-CW5ZWCSD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/visibility/is-action-disabled.ts","../src/validation/validate-field.ts","../src/validation/validate-step.ts","../src/engine/validation-state.ts","../src/engine/step-routes.ts","../src/engine/write-value.ts","../src/engine/groups.ts"],"names":["isActionDisabled","action","values","condition","evaluateCondition","isEmpty","value","field","isBlank","BOOLEAN_TYPES","boundError","size","rule","rules","message","min","max","patternError","pattern","text","MAX_STRING_LENGTH","sizeError","resolve","key","params","unit","validateFieldValue","input","allValues","validators","messages","trimValue","namedResolver","messageResolver","matchMessage","typeIssue","clientTypeError","validateStep","step","validateFields","validateItems","group","errors","itemsOf","item","index","scope","itemScope","error","isVisible","itemPath","fields","shownFields","isGroup","errorKeys","nodes","valueFields","shownError","_","fieldsErrors","engine","getSubmitValues","fieldError","itemError","applyValidationErrors","server","formErrors","state","previousErrors","bound","general","visibility","activeField","activeItem","serverErrors","serverFormErrors","structureChanged","moveToFirstError","notify","getChangedKeys","targetIndex","clearError","kept","dropServerErrors","keys","dropped","clearResolvedMatchErrors","cleared","allFields","path","pruneOffPathErrors","pathFields","pruned","withoutSkipped","skipped","validateForm","navigate","validateOne","previousError","fieldKeys","conditionValues","resetEngine","previousValues","loadingFields","validationEpoch","operationEpoch","initialState","createValues","reconcileHidden","changedValues","changedFields","activeSteps","definition","walkPath","steps","indexes","result","available","addStepValues","route","reconcileStepIndex","previous","next","previousStep","preserved","nextIds","before","predecessor","target","saved","hasOwn","shown","cleanItems","had","createActivePath","source","active","refresh","writeValue","own","changed","previousSteps","valueChanged","stepId","clearedFields","valuesChanged","affectsStructure","markChanged","activeGroup","itemLimits","within","items","groupItems","itemId","itemFields","addItem","shift","removed","moved","errorKey","parts","splitPath","removeItem","position","setItemValue","fieldKey","candidate","current","isEntry","updated","keepId","entry"],"mappings":"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","file":"chunk-CW5ZWCSD.js","sourcesContent":["import type { FormAction } from '../types';\nimport { evaluateCondition } from './evaluate-condition';\n\nexport function isActionDisabled(action: FormAction | false | undefined, values: Record<string, unknown>): boolean {\n return !!action && !!action.disabled?.length && action.disabled.every((condition) => evaluateCondition(condition, values));\n}\n","import type { FieldValidation, FormField } from '../types';\nimport { isBlank } from '../visibility';\nimport { messageResolver, namedResolver, type MessageSource, type ResolveMessage } from './default-messages';\nimport { BOOLEAN_TYPES, clientTypeError, MAX_STRING_LENGTH, trimValue } from './type-checks';\n\nexport type ValidatorFn = (value: unknown, allValues: Record<string, unknown>) => string | null;\n\nfunction isEmpty(value: unknown, field: FormField): boolean {\n return isBlank(value) || (value === false && BOOLEAN_TYPES.includes(field.type));\n}\n\nfunction boundError(\n size: number,\n rule: 'Length' | '',\n rules: FieldValidation,\n message: (key: 'min' | 'max', params: Record<string, number>) => string,\n): string | undefined {\n const min = rules[`min${rule}`];\n const max = rules[`max${rule}`];\n if (min !== undefined && size < min) return rules[`min${rule}Message`] ?? message('min', { min });\n if (max !== undefined && size > max) return rules[`max${rule}Message`] ?? message('max', { max });\n return undefined;\n}\n\nfunction patternError(value: unknown, rules: FieldValidation, message: () => string): string | undefined {\n if (rules.pattern === undefined) return undefined;\n try {\n const pattern = new RegExp(rules.pattern);\n const text = String(value);\n return text.length <= MAX_STRING_LENGTH && pattern.test(text) ? undefined : (rules.patternMessage ?? message());\n } catch {\n return undefined;\n }\n}\n\nfunction sizeError(value: unknown, rules: FieldValidation, field: FormField, resolve: ResolveMessage): string | undefined {\n if (typeof value === 'number') return boundError(value, '', rules, (key, params) => resolve(key, params, field));\n if (typeof value !== 'string' && !Array.isArray(value)) return undefined;\n const unit = Array.isArray(value) ? 'Items' : 'Length';\n return boundError(value.length, 'Length', rules, (key, params) => resolve(`${key}${unit}`, params, field));\n}\n\nexport function validateFieldValue(\n field: FormField,\n input: unknown,\n allValues: Record<string, unknown>,\n validators?: Record<string, ValidatorFn>,\n messages?: MessageSource,\n): string | null {\n const value = trimValue(field, input);\n const rules = field.validation ?? {};\n const resolve = namedResolver(messageResolver(messages));\n const matchMessage = () => rules.matchFieldMessage ?? resolve('matchField', {}, field);\n if (isEmpty(value, field)) {\n if (rules.required) return typeof rules.required === 'string' ? rules.required : resolve('required', {}, field);\n return rules.matchField !== undefined && !isBlank(allValues[rules.matchField]) ? matchMessage() : null;\n }\n const typeIssue = clientTypeError(field, value, resolve);\n if (typeIssue) return typeIssue;\n return (\n (sizeError(value, rules, field, resolve) ??\n patternError(value, rules, () => resolve('pattern', {}, field)) ??\n (rules.matchField !== undefined && value !== allValues[rules.matchField] ? matchMessage() : undefined) ??\n (rules.validator ? validators?.[rules.validator]?.(value, allValues) : undefined)) ||\n null\n );\n}\n","import type { FormGroup, FormNode, FormStep } from '../types';\nimport { isGroup, isVisible } from '../visibility';\nimport { itemPath, itemsOf, itemScope, shownFields } from '../visibility/nodes';\nimport type { MessageSource } from './default-messages';\nimport { type ValidatorFn, validateFieldValue } from './validate-field';\n\nexport function validateStep(\n step: FormStep,\n values: Record<string, unknown>,\n validators?: Record<string, ValidatorFn>,\n messages?: MessageSource,\n): Record<string, string> {\n return validateFields(step.fields, values, validators, messages);\n}\n\nexport function validateItems(\n group: FormGroup,\n values: Record<string, unknown>,\n validators?: Record<string, ValidatorFn>,\n messages?: MessageSource,\n): Record<string, string> {\n const errors: Record<string, string> = {};\n itemsOf(values[group.key]).forEach((item, index) => {\n const scope = itemScope(group, item, values);\n for (const field of group.fields) {\n const error = isVisible(field, scope) && validateFieldValue(field, scope[field.key], scope, validators, messages);\n if (error) errors[itemPath(group.key, index, field.key)] = error;\n }\n });\n return errors;\n}\n\nexport function validateFields(\n fields: FormNode[],\n values: Record<string, unknown>,\n validators?: Record<string, ValidatorFn>,\n messages?: MessageSource,\n): Record<string, string> {\n const errors: Record<string, string> = {};\n\n for (const field of shownFields(fields, values)) {\n const error = validateFieldValue(field, values[field.key], values, validators, messages);\n if (error) {\n errors[field.key] = error;\n }\n if (isGroup(field)) Object.assign(errors, validateItems(field, values, validators, messages));\n }\n\n return errors;\n}\n","import { validateFieldValue, validateFields } from '../validation';\nimport { createValues, getChangedKeys, initialState, shownError } from './engine-utils';\nimport type { FormField, FormNode } from '../types';\nimport { isGroup, itemPath, itemsOf, itemScope, valueFields } from '../visibility/nodes';\nimport type { EngineInternals } from './runtime-internals';\nimport type { ItemField } from './visibility-state';\n\nexport function errorKeys(nodes: FormNode[], errors: Record<string, string>, values: Record<string, unknown>): string[] {\n return valueFields(nodes).flatMap((field) => [\n ...(shownError(errors, field) ? [field.key] : []),\n ...(isGroup(field)\n ? itemsOf(values[field.key])\n .flatMap((_, index) => field.fields.map(({ key }) => itemPath(field.key, index, key)))\n .filter((key) => errors[key] !== undefined)\n : []),\n ]);\n}\n\nexport function fieldsErrors(engine: EngineInternals, nodes: FormNode[]): Record<string, string> {\n return validateFields(nodes, getSubmitValues(engine), engine.validators, engine.messages);\n}\n\nfunction fieldError(engine: EngineInternals, field: FormField, value: unknown, values = getSubmitValues(engine)): string | null {\n return validateFieldValue(field, value, values, engine.validators, engine.messages);\n}\n\nexport function itemError(engine: EngineInternals, { group, index, field }: ItemField): string | null {\n const values = getSubmitValues(engine);\n const scope = itemScope(group, itemsOf(values[group.key])[index], values);\n return fieldError(engine, field, scope[field.key], scope);\n}\n\nexport function applyValidationErrors(\n engine: EngineInternals,\n errors: Record<string, string>,\n server = false,\n formErrors: string[] = [],\n): void {\n const { state } = engine;\n const previousErrors = engine.errors;\n const bound: Record<string, string> = {};\n const general = [...formErrors];\n for (const [key, message] of Object.entries(errors)) {\n if (engine.visibility.activeField(key, engine.values) || engine.visibility.activeItem(key, engine.values)) bound[key] = message;\n else general.push(message);\n }\n if (server) {\n state.serverErrors = bound;\n state.serverFormErrors = general;\n }\n state.errors = { ...state.serverErrors, ...bound };\n state.topLevelErrors = server ? general : [...state.serverFormErrors, ...general];\n const structureChanged = server && moveToFirstError(engine, bound);\n engine.notify({ fieldKeys: getChangedKeys(previousErrors, engine.errors), structureChanged });\n}\n\nfunction moveToFirstError(engine: EngineInternals, errors: Record<string, string>): boolean {\n const targetIndex = engine.visibleSteps.findIndex((step) => errorKeys(step.fields, errors, engine.values).length > 0);\n if (targetIndex < 0 || targetIndex === engine.currentStepIndex) return false;\n engine.state.currentStepIndex = targetIndex;\n return true;\n}\n\nexport function clearError(engine: EngineInternals, key: string, server = false): void {\n if (server) delete engine.state.serverErrors[key];\n const kept = engine.state.serverErrors[key];\n if (kept === undefined) delete engine.errors[key];\n else engine.errors[key] = kept;\n}\n\nexport function dropServerErrors(engine: EngineInternals, keys: Iterable<string>): void {\n const dropped = new Set(keys);\n const { serverErrors } = engine.state;\n for (const key of Object.keys(serverErrors)) if (dropped.has(key) || dropped.has(engine.visibility.owner(key))) delete serverErrors[key];\n}\n\nexport function clearResolvedMatchErrors(engine: EngineInternals, key: string, item?: ItemField): string[] {\n const cleared: string[] = [];\n const fields: [string, FormField][] = item\n ? item.group.fields.map((field) => [itemPath(item.group.key, item.index, field.key), field])\n : engine.visibility.allFields.map((field) => [field.key, field]);\n for (const [path, field] of fields) {\n if (field.validation?.matchField !== key || engine.errors[path] === undefined) continue;\n const error = item ? itemError(engine, { ...item, field }) : fieldError(engine, field, engine.values[field.key]);\n if (error) continue;\n clearError(engine, path);\n cleared.push(path);\n }\n if (!item) {\n for (const group of engine.visibility.groups) {\n if (\n engine.visibility.activeField(group.key, engine.values) !== group ||\n !group.fields.some((field) => field.validation?.matchField === key)\n )\n continue;\n itemsOf(engine.values[group.key]).forEach((_, index) => {\n cleared.push(...clearResolvedMatchErrors(engine, key, { group, index, field: group.fields[0] }));\n });\n }\n }\n return cleared;\n}\n\nexport function pruneOffPathErrors(engine: EngineInternals): string[] {\n const pathFields = new Set(engine.visibleSteps.flatMap((step) => valueFields(step.fields).map((field) => field.key)));\n const pruned = Object.keys(engine.errors).filter((key) => !pathFields.has(engine.visibility.owner(key)));\n for (const key of pruned) delete engine.errors[key];\n dropServerErrors(engine, pruned);\n return pruned;\n}\n\nfunction withoutSkipped(engine: EngineInternals, values: Record<string, unknown>): Record<string, unknown> {\n for (const key of [...engine.skipped.values()].flat()) delete values[key];\n return values;\n}\n\nexport function validateForm(engine: EngineInternals, navigate = false): Record<string, string> {\n const previousErrors = engine.errors;\n const errors: Record<string, string> = {};\n if (engine.isMultiStep) {\n for (const step of engine.visibleSteps) if (!engine.skipped.has(step.id)) Object.assign(errors, fieldsErrors(engine, step.fields));\n } else {\n Object.assign(errors, fieldsErrors(engine, engine.definition.fields ?? []));\n }\n engine.state.errors = { ...engine.state.serverErrors, ...errors };\n const structureChanged = navigate && moveToFirstError(engine, errors);\n engine.notify({ fieldKeys: getChangedKeys(previousErrors, errors), structureChanged });\n return errors;\n}\n\nexport function validateOne(engine: EngineInternals, key: string): string | null {\n const field = engine.visibility.activeField(key, engine.values);\n const item = !field && engine.visibility.activeItem(key, engine.values);\n if (!field && !item) return null;\n const previousError = engine.errors[key];\n const error = item ? itemError(engine, item) : fieldError(engine, field!, engine.values[key]);\n if (error) engine.errors[key] = error;\n else clearError(engine, key, true);\n const fieldKeys = Object.is(previousError, engine.errors[key]) ? [] : [key];\n engine.notify({ fieldKeys });\n return error;\n}\n\nexport function getSubmitValues(engine: EngineInternals): Record<string, unknown> {\n return withoutSkipped(engine, { ...engine.visibility.conditionValues(engine.values) });\n}\n\nexport function resetEngine(engine: EngineInternals, values?: Record<string, unknown>): void {\n const previousValues = engine.values;\n const previousErrors = engine.errors;\n const loadingFields = Object.keys(engine.fieldLoading);\n engine.validationEpoch++;\n engine.operationEpoch++;\n Object.assign(engine.state, initialState(createValues(engine.visibility.allFields, values)));\n engine.skipped.clear();\n engine.visibility.reconcileHidden(engine.values, engine.errors, true);\n const changedValues = getChangedKeys(previousValues, engine.values);\n const changedFields = new Set([...changedValues, ...getChangedKeys(previousErrors, engine.errors), ...loadingFields]);\n engine.notify({\n fieldKeys: changedFields,\n structureChanged: true,\n valuesChanged: changedValues.size > 0,\n });\n}\n","import type { FormDefinition, FormNode, FormStep } from '../types';\nimport { isVisible } from '../visibility';\nimport { cleanItems, hasOwn, isGroup, shownFields, valueFields } from '../visibility/nodes';\nimport { trimValue } from '../validation/type-checks';\n\nexport function activeSteps(definition: FormDefinition, values: Record<string, unknown>): FormStep[] {\n return walkPath(definition, values).steps;\n}\n\nfunction walkPath(definition: FormDefinition, values: Record<string, unknown>) {\n const steps = definition.steps ?? [];\n const indexes = new Map(steps.map((step, index) => [step.id, index]));\n const result: FormStep[] = [];\n const available: Record<string, unknown> = {};\n if (!steps.length) addStepValues({ fields: definition.fields ?? [] }, values, available);\n for (let index = 0; index < steps.length; ) {\n const step = steps[index];\n if (!isVisible(step, available)) {\n index++;\n continue;\n }\n result.push(step);\n addStepValues(step, values, available);\n const route = step.routes?.find(\n (route) =>\n isVisible(route, available) &&\n (route.to === null || ((indexes.get(route.to) ?? -1) > index && isVisible(steps[indexes.get(route.to)!], available))),\n );\n if (route?.to === null) break;\n index = route ? indexes.get(route.to)! : index + 1;\n }\n return { steps: result, values: available };\n}\n\nexport function reconcileStepIndex(previous: FormStep[], next: FormStep[], index: number): number {\n const previousStep = previous[index] ?? previous[previous.length - 1];\n const preserved = next.findIndex((step) => step.id === previousStep?.id);\n if (preserved !== -1) return preserved;\n const nextIds = new Map(next.map((step, index) => [step.id, index]));\n for (let before = Math.min(index - 1, previous.length - 1); before >= 0; before--) {\n const predecessor = nextIds.get(previous[before].id);\n if (predecessor !== undefined) return predecessor;\n }\n return 0;\n}\n\nfunction addStepValues(step: { fields: FormNode[] }, values: Record<string, unknown>, target: Record<string, unknown>): void {\n const fields = valueFields(step.fields);\n const saved = fields.map(({ key }) => [key, hasOwn(target, key), target[key]] as const);\n for (const field of fields) target[field.key] = trimValue(field, values[field.key]);\n const shown = shownFields(step.fields, target)\n .filter((field) => values[field.key] !== undefined)\n .map(\n (field) => [field.key, isGroup(field) ? cleanItems(field, values[field.key], target) : trimValue(field, values[field.key])] as const,\n );\n for (const [key, had, value] of saved) {\n if (had) target[key] = value;\n else delete target[key];\n }\n for (const [key, value] of shown) target[key] = value;\n}\n\nexport function createActivePath(definition: FormDefinition) {\n let source: Record<string, unknown> | null = null;\n let steps: FormStep[] = [];\n let active: Record<string, unknown> = {};\n const refresh = (values: Record<string, unknown>) => {\n if (source === values) return;\n source = values;\n ({ steps, values: active } = walkPath(definition, values));\n };\n return {\n invalidate(): void {\n source = null;\n },\n steps(values: Record<string, unknown>): FormStep[] {\n refresh(values);\n return steps;\n },\n values(values: Record<string, unknown>): Record<string, unknown> {\n refresh(values);\n return active;\n },\n };\n}\n","import type { EngineInternals } from './runtime-internals';\nimport { reconcileStepIndex } from './step-routes';\nimport { clearError, clearResolvedMatchErrors, dropServerErrors, pruneOffPathErrors } from './validation-state';\n\nexport function writeValue(\n engine: EngineInternals,\n key: string,\n value: unknown,\n own = true,\n changed: () => Iterable<string> = () => [],\n): void {\n const { values, errors } = engine.state;\n const previousSteps = engine.isMultiStep ? engine.visibleSteps : null;\n const valueChanged = !Object.is(values[key], value);\n const previousError = errors[key];\n values[key] = value;\n if (own) clearError(engine, key, valueChanged);\n for (const [stepId, keys] of engine.skipped) if (valueChanged && keys.includes(key)) engine.skipped.delete(stepId);\n const clearedFields = engine.visibility.reconcileHidden(values, errors);\n dropServerErrors(engine, clearedFields);\n const changedFields = new Set([...clearedFields, ...clearResolvedMatchErrors(engine, key), ...changed()]);\n if (valueChanged || previousError !== errors[key]) changedFields.add(key);\n const valuesChanged = valueChanged || clearedFields.size > 0;\n const structureChanged = valuesChanged && engine.visibility.affectsStructure(key, clearedFields);\n if (previousSteps && structureChanged) {\n engine.visibility.markChanged(true, true);\n engine.state.currentStepIndex = reconcileStepIndex(previousSteps, engine.visibleSteps, engine.currentStepIndex);\n for (const pruned of pruneOffPathErrors(engine)) changedFields.add(pruned);\n }\n engine.notify({ fieldKeys: changedFields, structureChanged, valuesChanged });\n}\n","import type { FormField, FormGroup } from '../types';\nimport { isEntry, isGroup, itemId, itemPath, itemsOf, keepId, splitPath } from '../visibility/nodes';\nimport { createValues, getChangedKeys } from './engine-utils';\nimport type { EngineInternals } from './runtime-internals';\nimport { clearError, clearResolvedMatchErrors } from './validation-state';\nimport { writeValue } from './write-value';\n\nexport interface GroupItem {\n id: string;\n fields: FormField[];\n}\n\nfunction activeGroup(engine: EngineInternals, key: string): FormGroup | undefined {\n const field = engine.visibility.activeField(key, engine.values);\n return field && isGroup(field) ? field : undefined;\n}\n\nexport function itemLimits(group: FormGroup): [number, number] {\n const rules = group.validation ?? {};\n return [rules.minLength ?? (rules.required ? 1 : 0), rules.maxLength ?? 100];\n}\n\nconst within = (index: number, items: unknown[]) => Number.isInteger(index) && index >= 0 && index < items.length;\n\nexport function groupItems(engine: EngineInternals, key: string): GroupItem[] {\n const group = activeGroup(engine, key);\n if (!group) return [];\n return itemsOf(engine.values[key]).map((item, index) => ({\n id: itemId(item, index),\n fields: engine.visibility.itemFields(group, item, engine.values),\n }));\n}\n\nexport function addItem(engine: EngineInternals, key: string): boolean {\n const group = activeGroup(engine, key);\n const items = itemsOf(engine.values[key]);\n if (!group || items.length >= itemLimits(group)[1]) return false;\n writeValue(engine, key, [...items, createValues(group.fields)]);\n return true;\n}\n\nfunction shift(errors: Record<string, string>, key: string, removed: number): void {\n const moved: Record<string, string> = {};\n for (const errorKey of Object.keys(errors)) {\n const parts = splitPath(key, errorKey);\n if (!parts || parts[0] < removed) continue;\n if (parts[0] > removed) moved[itemPath(key, parts[0] - 1, parts[1])] = errors[errorKey];\n delete errors[errorKey];\n }\n Object.assign(errors, moved);\n}\n\nexport function removeItem(engine: EngineInternals, key: string, index: number): boolean {\n const group = activeGroup(engine, key);\n const items = itemsOf(engine.values[key]);\n if (!group || !within(index, items) || items.length <= itemLimits(group)[0]) return false;\n const previous = { ...engine.errors };\n shift(engine.state.errors, key, index);\n shift(engine.state.serverErrors, key, index);\n shift(engine.state.fieldLoading as unknown as Record<string, string>, key, index);\n writeValue(\n engine,\n key,\n items.filter((_, position) => position !== index),\n true,\n () => getChangedKeys(previous, engine.errors),\n );\n return true;\n}\n\nexport function setItemValue(engine: EngineInternals, key: string, index: number, fieldKey: string, value: unknown): void {\n const group = activeGroup(engine, key);\n const items = itemsOf(engine.values[key]);\n const field = group?.fields.find((candidate) => candidate.key === fieldKey);\n if (!group || !field || !within(index, items)) return;\n const current = items[index];\n const item = isEntry(current) ? current : {};\n const path = itemPath(key, index, fieldKey);\n const changed = !Object.is(item[fieldKey], value);\n const previousError = engine.errors[path];\n let next = items;\n if (changed) {\n const updated = keepId(current, { ...item, [fieldKey]: value });\n next = items.map((entry, position) => (position === index ? updated : entry));\n }\n clearError(engine, path, changed);\n writeValue(engine, key, next, false, () => [\n ...(changed || previousError !== engine.errors[path] ? [path] : []),\n ...clearResolvedMatchErrors(engine, fieldKey, { group, index, field }),\n ]);\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {p,d,e,v,q as q$1,s as s$1,t as t$1,u,g,j,k as k$1,l,m,h,i,o,f,n as n$1}from'./chunk-CW5ZWCSD.js';import {k,j as j$1,e as e$1,a}from'./chunk-TMO47L42.js';import {b,d as d$1,c,e as e$2}from'./chunk-QVA6DLYS.js';import {q,s,p as p$1,r,t,F,m as m$1,z as z$1,w,v as v$1,u as u$1,n,B,y}from'./chunk-5WADJMJJ.js';var nt=class extends Error{constructor(s,o){super(`The action completed, but ${s} failed: ${o instanceof Error?o.message:String(o)}`);this.phase=s;this.committed=true;this.name="FormLifecycleError",this.cause=o;}};async function z(t,e){try{await e();}catch(s){throw new nt(t,s)}}function zt(t){return k(t).map(e=>e.message)}function Dt(t){return t.visibleSteps.map(e=>e.id).join(`
|
|
2
|
+
`)}function _(t,e){let s=Dt(t),o=Object.keys(e).filter(i=>e[i]!==void 0).map(i=>[i,t.values[i]]);return ()=>Dt(t)!==s||o.some(([i,l])=>!Object.is(t.values[i],l))}function Nt(t,e){let s={...e};return ()=>e$2(s,t.values)}function Pt(t){let e=r(t.currentStep?.fields??[]),s={...t.values};for(let{key:o}of e)delete s[o];return Object.assign(s,d$1(e))}function at(t){return n$1(t.definition,Pt(t))[t.currentStepIndex+1]}function J(t){let e=t.currentStep,s=r(e.fields).map(({key:l})=>l);t.state.values=Pt(t);let o=Object.keys(t.errors).filter(l=>s.includes(t.e.owner(l)));for(let l of o)delete t.errors[l];h(t,s),t.r.set(e.id,s),h(t,t.e.u(t.values,t.errors)),t.e.f(true,true);let i$1=i(t);return t.t({fieldKeys:[...s,...o,...i$1],structureChanged:true,valuesChanged:true}),s}function Q(t){let e=t.currentStep;e&&t.r.delete(e.id);}function fe(t,e){return t.state.currentStepIndex=e,t.t({structureChanged:true}),J(t)}function ut(t){return !!t&&Object.getPrototypeOf(t)===Object.prototype&&t.ok===false}function _t(t,e,s){let o={},i=typeof e.errors=="object"&&e.errors?e.errors:{};for(let[a,m]of Object.entries(i)){let p=Array.isArray(m)?m.join(" "):m;typeof p=="string"&&Object.is(t.values[t.e.owner(a)],s[t.e.owner(a)])&&(o[a]=p);}let l=Array.isArray(e.formErrors)?e.formErrors.filter(a=>typeof a=="string"):[];g(t,o,true,l);}async function U(t,e,s=false){if(t.submitting||t.stepValidating)return false;s||Q(t);let o={...t.d},i=false,l$1=t.i,a=t.p=++t.o,m=l(t),p=_(t,m),v=()=>l$1!==t.i||a!==t.o||p();t.state.submitting=true,t.t();try{if(v()||Object.keys(j(t,!0)).length>0||v())return !1;if(o.onBeforeSubmit){let w=await o.onBeforeSubmit(m);if(v()||w===!1)return !1}if(v())return !1;if(o.onBeforeSubmit){if(Object.keys(j(t,!0)).length>0||v())return !1;m=l(t);}i=!0;let y=[...t.r.keys()],x={...t.values},k=t.state.n,h=await e(m,[...y]),b=ut(h);return a!==t.o?!b:b?(_t(t,h,x),!1):(t.state.n===k&&g(t,{},!0),await z("afterSubmit",()=>o.onAfterSubmit?.(m,y)),!0)}catch(y){if(!i&&v())return false;throw y}finally{a===t.o&&(t.state.submitting=false,t.t());}}function Lt(t){let e=t.currentStep;if(!e)return true;let s=f(t,e.fields);if(Object.keys(s).length===0)return false;let o=t.errors;return t.state.errors={...o,...s},t.t({fieldKeys:e$2(o,t.errors)}),true}function Mt(t,e){t.i++,t.state.currentStepIndex=e,t.t({structureChanged:true});}async function Tt(t,e){if(!t.isMultiStep||t.stepValidating||t.submitting||!t.currentStep?.skip)return false;if(at(t))return X(t,"next","skip");let s=t.currentStep;if(!e||!s)return false;let o$1=t.values,i$1={...t.errors},l={...t.state.n},a;J(t);let m=t.values,p=Nt(t,m),v=U(t,async(x,k)=>{let h=await e(x,k),b=ut(h);return (!b||y===t.o)&&(a=b),h},true),y=t.p;try{return await v}finally{if(a!==false&&y===t.p&&t.values===m){let x=t.visibleSteps,k=p(),h$1=t.values;t.state.values={...o$1};for(let b of k){delete t.values[b];for(let w of [i$1,l])for(let V of Object.keys(w))t.e.owner(V)===b&&delete w[V];b in h$1&&(t.values[b]=h$1[b]);}a===void 0&&(t.state.n=l),t.state.errors={...a?{}:i$1,...t.errors},t.r.delete(s.id),h(t,t.e.u(t.values,t.errors)),t.e.f(true,true),t.state.currentStepIndex=o(x,t.visibleSteps,t.currentStepIndex),i(t),t.t({fieldKeys:Object.keys({...o$1,...h$1,...i$1}),structureChanged:true,valuesChanged:true});}}}async function X(t,e,s=e){let o=s==="skip";if(!t.isMultiStep||t.stepValidating||t.submitting||!o&&(e==="next"?t.isLastStep:t.isFirstStep))return false;let i=t.currentStep,l$1=e==="next"&&!o;if(l$1&&Q(t),l$1&&Lt(t))return false;let a={...t.d},m=a.onStepValidate,p=false,y=t.currentStepIndex+(e==="next"?1:-1),x=o?at(t):t.visibleSteps[y];if(!x)return false;let k={fromStepId:i.id,toStepId:x.id,reason:s,values:{...l(t)}},h=t.i,b=t.p=++t.o,w=_(t,k.values),V=()=>h!==t.i||b!==t.o||t.currentStep?.id!==i.id||w();t.state.stepValidating=true,t.t();try{if(V())return !1;if(l$1&&m){let E=await m(i.id,k.values);if(V())return !1;if(E&&Object.keys(E).length>0)return g(t,E),!1}if(a.onBeforeStepChange){let E=await a.onBeforeStepChange(k);if(V()||E===!1)return !1}return V()||l$1&&Lt(t)?!1:(p=!0,o&&J(t),Mt(t,y),await z("afterStepChange",()=>a.onAfterStepChange?.(k)),!0)}catch(E){if(!p&&V())return false;throw E}finally{b===t.o&&(t.state.stepValidating=false,t.t());}}function Kt(t,e){if(!t.isMultiStep)return;let s=t.e.x(e,t.values,t.currentStepIndex);s===t.currentStepIndex?t.t():s!==null&&Mt(t,s);}function At(t,e){return t.add(e),()=>t.delete(e)}function Gt(){let t=0,e=0,s=new Set,o=new Set,i=new Map,l=new Map;return {subscribe:a=>At(s,a),getSnapshot:()=>t,subscribeStructure:a=>At(o,a),getStructureSnapshot:()=>e,getFieldSnapshot:a=>i.get(a)??0,subscribeField(a,m){let p=l.get(a)??new Set;return p.add(m),l.set(a,p),()=>{p.delete(m),p.size===0&&l.delete(a);}},t({fieldKeys:a=[],structureChanged:m=false}={}){for(let p of new Set(a)){i.set(p,(i.get(p)??0)+1);for(let v of l.get(p)??[])v();}if(m){e++;for(let p of o)p();}t++;for(let p of s)p();}}}function Jt(t,e){try{if(process.env.NODE_ENV!=="production")return k(t,{validators:e})}catch(s){if(!(s instanceof ReferenceError))throw s}}function Ht(t,e,s){let o=Jt(t,s)??j$1(t),i=o.filter(e$1);if(i.length)throw new a(i);let l=e.onWarning??(a=>console.warn(`[formhaus] ${a.message}`));for(let a of o)l(a);}function H(t$1,e,s=t$1){for(let o of t(s)){let i=e.get(o)??new Set;i.add(t$1),e.set(o,i);}}function Bt(t$1){let e=b(t$1),s$1=new Map,o=new Set,i=p(t$1),l=new Map,a=new Map,m=new Map,p$2=new Map,v=e.filter(q),y$1={},x=true,k=true,h={visibleSteps:[],currentStep:null,visibleFields:[],visibleNodes:[],canGoNext:false};for(let r of s(t$1))if(p$1(r))for(let n of r.fields)p$2.set(n,r);for(let r of e){s$1.set(r.key,[...s$1.get(r.key)??[],r]),H(r,l);let n=p$2.get(r);if(n&&H(r,l,n),q(r))for(let c of r.fields)H(r,l,c);}for(let r$1 of t$1.steps??[]){for(let n of r(r$1.fields))m.set(n,r$1);H(r$1,a);for(let n of r$1.routes??[])for(let c of t(n))o.add(c);}let b$1=()=>!!t$1.steps?.length,w$1=(r,n)=>{let c=i.values(n),f=p$2.get(r);return (!f||m$1(f,c))&&m$1(r,c)},V=(r,n)=>{let c=m.get(r);return !c||i.steps(n).includes(c)},E=(r,n)=>s$1.get(r)?.find(c=>V(c,n)&&w$1(c,n)),Y=r=>{if(!s$1.has(r))for(let n of v){let c=z$1(n.key,r);if(c)return [n.key,...c]}},Z=r=>Y(r)?.[0]??r;function B$1(r,n,c){let f=w(r,n,i.values(c));return r.fields.filter(S=>m$1(S,f))}function $t(r,n){let c=Y(r);if(!c)return;let[f,S,g]=c,d=E(f,n),F=v$1(n[f]);if(!d||!q(d)||S>=F.length)return;let I=B$1(d,F[S],n).find(R=>R.key===g);return I&&{group:d,index:S,field:I}}function tt(r,n){if(!x)return h;x=false;let c=h.visibleSteps=b$1()?i.steps(r):[],f=h.currentStep=b$1()?c[n]??c[c.length-1]??null:null,S=b$1()?f?.fields??[]:t$1.fields??[],g=i.values(r);return h.visibleFields=u$1(S,g),h.visibleNodes=S.filter(d=>m$1(d,g)).map(d=>p$1(d)?{...d,fields:d.fields.filter(F=>m$1(F,g))}:d),h}function qt(r,n$1,c){for(let f of v){if(E(f.key,r)!==f)continue;let S=v$1(r[f.key]),g=S.map((d,F)=>{let I=d;for(let R=0;n(I)&&R<=f.fields.length;R++){let u=I,C=B$1(f,u,r),O=f.fields.filter(j=>!C.includes(j)&&u[j.key]!==void 0);if(!O.length)break;I=B(u,{...u});for(let{key:j}of O)delete I[j],c.add(y(f.key,F,j));}return I});g.some((d,F)=>d!==S[F])&&(r[f.key]=g);for(let d of Object.keys(n$1)){let[F,I]=z$1(f.key,d)??[];F===void 0||F<g.length&&B$1(f,g[F],r).some(R=>R.key===I)||(delete n$1[d],c.add(d));}}i.invalidate();}return {c:e,groups:v,y:i.values,state:tt,s:E,l:$t,F:B$1,owner:Z,parse:Y,f(r,n){r&&(x=true),(r||n)&&(k=true);},w(r,n,c){let f=tt(r,n).currentStep;if(!k)return h.canGoNext;k=false;let S=f?d(f.fields,i.values(r),c):{};return h.canGoNext=b$1()&&Object.keys(S).length===0},x(r$1,n,c){let f=Z(r$1),S=tt(n,c).visibleSteps.findIndex(g=>r(g.fields).some(d=>d.key===f));return S===-1?null:S},k(r,n){return o.has(r)||l.has(r)||a.has(r)||n.size>0},seed(r){y$1={...y$1,...r};},u(r$1,n,c=false){c&&(y$1={...r$1}),i.invalidate();let f=[...new Set([...l.keys(),...a.keys()])],S=new Set(f),g=new Set,d=u=>r$1[u]!==void 0||n[u]!==void 0,F=u=>{i.invalidate(),g.add(u),!S.has(u)&&(S.add(u),f.push(u));},I=u=>{delete r$1[u],delete n[u];for(let C of Object.keys(n))Z(C)===u&&delete n[C];F(u);},R=(u,C)=>{C?u.type==="hidden"&&!d(u.key)&&y$1[u.key]!==void 0&&w$1(u,r$1)?(r$1[u.key]=y$1[u.key],F(u.key)):q(u)&&u.defaultItems>0&&!d(u.key)&&w$1(u,r$1)&&(r$1[u.key]=d$1([u])[u.key],F(u.key)):d(u.key)&&I(u.key);};for(let u=0;u<f.length;u++){let C=f[u];S.delete(C);for(let O of l.get(C)??[])V(O,r$1)&&R(O,w$1(O,r$1));for(let O of a.get(C)??[])for(let j of r(O.fields))R(j,w$1(O,r$1));}return v.length&&qt(r$1,n,g),g}}}var Wt=class{constructor(e,s,o){this.definition=e;this.r=new Map;this.i=0;this.o=0;this.p=0;this.a=Gt();this.d=o??{},this.validators=o?.validators??{},Ht(e,this.d,this.validators),this.messages=F(o?.messages,e.messages),this.e=Bt(e);let i=d$1(this.e.c,s);this.state=c(i),this.e.u(i,this.state.errors,true);}get values(){return this.state.values}get errors(){return this.state.errors}get topLevelErrors(){let{errors:e,topLevelErrors:s,values:o}=this.state;return [...s,...this.e.c.flatMap(i=>i.type==="hidden"&&e[i.key]&&(this.e.s(i.key,o)??i)===i&&e[i.key]||[])]}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(){return !!this.definition.steps?.length}get visibleSteps(){return this.m.visibleSteps}get currentStep(){return this.m.currentStep}get visibleFields(){return this.m.visibleFields}get visibleNodes(){return this.m.visibleNodes}get isFirstStep(){return this.currentStepIndex===0}get isLastStep(){return this.currentStepIndex>=this.visibleSteps.length-1}get canGoNext(){return this.e.w(this.state.values,this.currentStepIndex,this.validators)}get stepErrors(){let e$1=Object.create(null);for(let s of this.visibleSteps){let o=e(s.fields,this.errors,this.state.values);o.length>0&&(e$1[s.id]=o);}return e$1}get progress(){let e=this.visibleSteps.length;return {current:Math.min(this.currentStepIndex+1,e),total:e}}subscribe(e){return this.a.subscribe(e)}getSnapshot(){return this.a.getSnapshot()}subscribeField(e,s){return this.a.subscribeField(e,s)}getFieldSnapshot(e){return this.a.getFieldSnapshot(e)}subscribeStructure(e){return this.a.subscribeStructure(e)}getStructureSnapshot(){return this.a.getStructureSnapshot()}setValue(e,s){let o=this.e.parse(e);o?v(this,...o,s):q$1(this,e,s);}items(e){return s$1(this,e)}addItem(e){return t$1(this,e)}removeItem(e,s){return u(this,e,s)}setItemValue(e,s,o,i){v(this,e,s,o,i);}setErrors(e){g(this,e,true);}setFieldLoading(e,s){let o=this.state.fieldLoading[e]===true;s?this.state.fieldLoading[e]=true:delete this.state.fieldLoading[e],this.t({fieldKeys:o===s?[]:[e]});}cancelPendingActions(){this.i++,this.o++,this.state.stepValidating=false,this.state.submitting=false,this.t();}next(){return this.b("next")}back(){return X(this,"back")}skip(e){return Tt(this,e)}submit(e){return U(this,e)}isStepSkipped(e){return this.r.has(e)}validate(){return j(this)}validateField(e){return k$1(this,e)}getSubmitValues(){return l(this)}goToStepWithField(e){Kt(this,e);}reset(e){m(this,e);}b(e){return X(this,"next",e)}get m(){return this.e.state(this.state.values,this.currentStepIndex)}t(e={}){this.e.f(!!e.structureChanged,!!e.valuesChanged),this.a.t(e);}};export{nt as a,fe as b,zt as c,Bt as d,Wt as e};//# sourceMappingURL=chunk-QMT7RJ4T.js.map
|
|
3
|
+
//# sourceMappingURL=chunk-QMT7RJ4T.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/engine/lifecycle-error.ts","../src/definition-validation/validate-definition.ts","../src/engine/pending-inputs.ts","../src/engine/step-skip.ts","../src/engine/submission.ts","../src/engine/navigation.ts","../src/engine/subscriptions.ts","../src/engine/warnings.ts","../src/engine/visibility-index.ts","../src/engine/visibility-state.ts","../src/engine/runtime.ts"],"names":["FormLifecycleError","phase","cause","afterCommit","callback","error","validateDefinition","input","checkDefinition","issue","activePath","engine","step","watchCheckedInputs","checked","path","seen","key","value","watchValues","values","getChangedKeys","resetValues","fields","valueFields","createValues","skipTarget","activeSteps","skipCurrentStep","fieldKeys","owned","visibility","dropServerErrors","skipped","reconcileHidden","markChanged","pruned","pruneOffPathErrors","notify","includeCurrentStep","skipStepAt","index","isRejection","result","applyRejection","sent","errors","source","message","formErrors","applyValidationErrors","submitForm","submit","keepSkipped","lifecycle","dispatched","epoch","validationEpoch","operation","latestOperation","operationEpoch","getSubmitValues","inputsChanged","stale","validateForm","allowed","skippedSteps","serverErrors","rejected","hasStepErrors","fieldsErrors","previousErrors","moveTo","skipStep","changeStep","outcome","skippedValues","edited","submitting","submitted","steps","kept","current","record","errorKey","reconcileStepIndex","direction","reason","skipping","validating","validate","committed","toIndex","target","context","goToStepWithField","fieldKey","targetIndex","findStepIndex","listen","listeners","listener","createSubscriptions","version","structureVersion","structureListeners","fieldVersions","fieldListeners","set","structureChanged","developmentIssues","definition","validators","assertDefinition","options","issues","definitionErrors","isError","FormDefinitionError","warn","indexConditions","dependent","field","conditionFields","dependents","createVisibility","allFields","getAllFields","fieldsByKey","routeFields","createActivePath","fieldDependents","stepDependents","stepOfField","sectionOf","groups","isGroup","seeds","visibilityDirty","canGoNextDirty","cache","node","topNodes","isSection","section","item","route","isMultiStep","visible","active","isVisible","onPath","activeField","parse","group","parts","splitPath","owner","itemFields","scope","itemScope","activeItem","groupKey","items","itemsOf","candidate","state","stepIndex","shownFields","reconcileItems","cleared","round","isEntry","entry","shown","hidden","keepId","itemPath","conditionValues","valuesChanged","getCanGoNext","validateFields","affectsStructure","clearedFields","initial","queue","queued","held","mark","clear","update","FormEngine","initialValues","subscriptions","messageResolver","initialState","topLevelErrors","view","keys","errorKeys","total","setItemValue","writeValue","groupItems","addItem","removeItem","loading","previous","advance","handler","stepId","validateOne","resetEngine"],"mappings":"0TAAO,IAAMA,GAAN,cAAiC,KAAM,CAI5C,WAAA,CACWC,EACTC,CAAAA,CACA,CACA,KAAA,CAAM,CAAA,0BAAA,EAA6BD,CAAK,CAAA,SAAA,EAAYC,CAAAA,YAAiB,MAAQA,CAAAA,CAAM,OAAA,CAAU,OAAOA,CAAK,CAAC,CAAA,CAAE,CAAA,CAHnG,WAAAD,CAAAA,CAJX,IAAA,CAAS,SAAA,CAAY,IAAA,CAQnB,KAAK,IAAA,CAAO,oBAAA,CACZ,IAAA,CAAK,KAAA,CAAQC,EACf,CACF,EAEA,eAAsBC,CAAAA,CAAYF,CAAAA,CAA0CG,EAAqD,CAC/H,GAAI,CACF,MAAMA,IACR,CAAA,MAASC,CAAAA,CAAO,CACd,MAAM,IAAIL,EAAAA,CAAmBC,CAAAA,CAAOI,CAAK,CAC3C,CACF,CClBO,SAASC,EAAAA,CAAmBC,CAAAA,CAA0B,CAC3D,OAAOC,CAAAA,CAAgBD,CAAK,CAAA,CAAE,IAAKE,CAAAA,EAAUA,CAAAA,CAAM,OAAO,CAC5D,CCDA,SAASC,EAAAA,CAAWC,CAAAA,CAAiC,CACnD,OAAOA,EAAO,YAAA,CAAa,GAAA,CAAKC,GAASA,CAAAA,CAAK,EAAE,EAAE,IAAA,CAAK;AAAA,CAAI,CAC7D,CAEO,SAASC,CAAAA,CAAmBF,EAAyBG,CAAAA,CAAiD,CAC3G,IAAMC,CAAAA,CAAOL,EAAAA,CAAWC,CAAM,CAAA,CACxBK,CAAAA,CAAO,OAAO,IAAA,CAAKF,CAAO,EAC7B,MAAA,CAAQG,CAAAA,EAAQH,EAAQG,CAAG,CAAA,GAAM,MAAS,CAAA,CAC1C,GAAA,CAAKA,GAAQ,CAACA,CAAAA,CAAKN,EAAO,MAAA,CAAOM,CAAG,CAAC,CAAU,CAAA,CAClD,OAAO,IAAMP,EAAAA,CAAWC,CAAM,CAAA,GAAMI,CAAAA,EAAQC,EAAK,IAAA,CAAK,CAAC,CAACC,CAAAA,CAAKC,CAAK,CAAA,GAAM,CAAC,MAAA,CAAO,EAAA,CAAGP,EAAO,MAAA,CAAOM,CAAG,EAAGC,CAAK,CAAC,CAC/G,CAEO,SAASC,GAAYR,CAAAA,CAAyBS,CAAAA,CAAoD,CACvG,IAAMJ,CAAAA,CAAO,CAAE,GAAGI,CAAO,CAAA,CACzB,OAAO,IAAMC,GAAAA,CAAeL,EAAML,CAAAA,CAAO,MAAM,CACjD,CCXA,SAASW,GAAYX,CAAAA,CAAkD,CACrE,IAAMY,CAAAA,CAASC,CAAAA,CAAYb,EAAO,WAAA,EAAa,MAAA,EAAU,EAAE,CAAA,CACrDS,EAAS,CAAE,GAAGT,CAAAA,CAAO,MAAO,CAAA,CAClC,IAAA,GAAW,CAAE,GAAA,CAAAM,CAAI,IAAKM,CAAAA,CAAQ,OAAOH,EAAOH,CAAG,CAAA,CAC/C,OAAO,MAAA,CAAO,MAAA,CAAOG,EAAQK,GAAAA,CAAaF,CAAM,CAAC,CACnD,CAEO,SAASG,EAAAA,CAAWf,CAAAA,CAA+C,CACxE,OAAOgB,GAAAA,CAAYhB,EAAO,UAAA,CAAYW,EAAAA,CAAYX,CAAM,CAAC,CAAA,CAAEA,EAAO,gBAAA,CAAmB,CAAC,CACxF,CAEO,SAASiB,EAAgBjB,CAAAA,CAAmC,CACjE,IAAMC,CAAAA,CAAOD,CAAAA,CAAO,YACdkB,CAAAA,CAAYL,CAAAA,CAAYZ,CAAAA,CAAK,MAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAE,GAAA,CAAAK,CAAI,CAAA,GAAMA,CAAG,EAC/DN,CAAAA,CAAO,KAAA,CAAM,OAASW,EAAAA,CAAYX,CAAM,EACxC,IAAMmB,CAAAA,CAAQ,OAAO,IAAA,CAAKnB,CAAAA,CAAO,MAAM,CAAA,CAAE,MAAA,CAAQM,CAAAA,EAAQY,CAAAA,CAAU,QAAA,CAASlB,CAAAA,CAAOoB,EAAW,KAAA,CAAMd,CAAG,CAAC,CAAC,CAAA,CACzG,QAAWA,CAAAA,IAAOa,CAAAA,CAAO,OAAOnB,CAAAA,CAAO,MAAA,CAAOM,CAAG,CAAA,CACjDe,CAAAA,CAAiBrB,EAAQkB,CAAS,CAAA,CAClClB,EAAOsB,CAAAA,CAAQ,GAAA,CAAIrB,CAAAA,CAAK,EAAA,CAAIiB,CAAS,CAAA,CACrCG,EAAiBrB,CAAAA,CAAQA,CAAAA,CAAOoB,EAAWG,CAAAA,CAAgBvB,CAAAA,CAAO,OAAQA,CAAAA,CAAO,MAAM,CAAC,CAAA,CACxFA,CAAAA,CAAOoB,EAAWI,CAAAA,CAAY,IAAA,CAAM,IAAI,CAAA,CACxC,IAAMC,IAASC,CAAAA,CAAmB1B,CAAM,EACxC,OAAAA,CAAAA,CAAO2B,EAAO,CAAE,SAAA,CAAW,CAAC,GAAGT,CAAAA,CAAW,GAAGC,CAAAA,CAAO,GAAGM,GAAM,CAAA,CAAG,gBAAA,CAAkB,KAAM,aAAA,CAAe,IAAK,CAAC,CAAA,CACtGP,CACT,CAEO,SAASU,CAAAA,CAAmB5B,CAAAA,CAA+B,CAChE,IAAMC,CAAAA,CAAOD,EAAO,WAAA,CAChBC,CAAAA,EAAMD,EAAOsB,CAAAA,CAAQ,MAAA,CAAOrB,EAAK,EAAE,EACzC,CAEO,SAAS4B,EAAAA,CAAW7B,EAAyB8B,CAAAA,CAAyB,CAC3E,OAAA9B,CAAAA,CAAO,KAAA,CAAM,iBAAmB8B,CAAAA,CAChC9B,CAAAA,CAAO2B,CAAAA,CAAO,CAAE,gBAAA,CAAkB,IAAK,CAAC,CAAA,CACjCV,CAAAA,CAAgBjB,CAAM,CAC/B,CCjCO,SAAS+B,EAAAA,CAAYC,CAAAA,CAAsC,CAChE,OAAO,CAAC,CAACA,CAAAA,EAAU,MAAA,CAAO,eAAeA,CAAM,CAAA,GAAM,OAAO,SAAA,EAAcA,CAAAA,CAAwB,EAAA,GAAO,KAC3G,CAEA,SAASC,GAAejC,CAAAA,CAAyBgC,CAAAA,CAAmBE,EAAqC,CACvG,IAAMC,EAAiC,EAAC,CAClCC,EAAS,OAAOJ,CAAAA,CAAO,QAAW,QAAA,EAAYA,CAAAA,CAAO,OAASA,CAAAA,CAAO,MAAA,CAAS,EAAC,CACrF,IAAA,GAAW,CAAC1B,CAAAA,CAAKC,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQ6B,CAAM,CAAA,CAAG,CACjD,IAAMC,CAAAA,CAAmB,KAAA,CAAM,QAAQ9B,CAAK,CAAA,CAAIA,EAAM,IAAA,CAAK,GAAG,EAAIA,CAAAA,CAC9D,OAAO8B,GAAY,QAAA,EAAY,MAAA,CAAO,EAAA,CAAGrC,CAAAA,CAAO,MAAA,CAAOA,CAAAA,CAAOoB,EAAW,KAAA,CAAMd,CAAG,CAAC,CAAA,CAAG4B,CAAAA,CAAKlC,EAAOoB,CAAAA,CAAW,KAAA,CAAMd,CAAG,CAAC,CAAC,IAC1H6B,CAAAA,CAAO7B,CAAG,EAAI+B,CAAAA,EAClB,CACA,IAAMC,CAAAA,CAAa,KAAA,CAAM,OAAA,CAAQN,CAAAA,CAAO,UAAU,CAAA,CAAIA,EAAO,UAAA,CAAW,MAAA,CAAQK,GAAY,OAAOA,CAAAA,EAAY,QAAQ,CAAA,CAAI,GAC3HE,CAAAA,CAAsBvC,CAAAA,CAAQmC,EAAQ,IAAA,CAAMG,CAAU,EACxD,CAEA,eAAsBE,EAAWxC,CAAAA,CAAyByC,CAAAA,CAAuBC,CAAAA,CAAc,KAAA,CAAyB,CACtH,GAAI1C,EAAO,UAAA,EAAcA,CAAAA,CAAO,eAAgB,OAAO,MAAA,CAClD0C,GAAad,CAAAA,CAAmB5B,CAAM,EAC3C,IAAM2C,CAAAA,CAAY,CAAE,GAAG3C,CAAAA,CAAO2C,CAAU,CAAA,CACpCC,CAAAA,CAAa,MACXC,GAAAA,CAAQ7C,CAAAA,CAAO8C,EACfC,CAAAA,CAAa/C,CAAAA,CAAOgD,EAAkB,EAAEhD,CAAAA,CAAOiD,EACjDxC,CAAAA,CAASyC,CAAAA,CAAgBlD,CAAM,CAAA,CAC7BmD,CAAAA,CAAgBjD,EAAmBF,CAAAA,CAAQS,CAAM,EACjD2C,CAAAA,CAAQ,IAAMP,MAAU7C,CAAAA,CAAO8C,CAAAA,EAAmBC,IAAc/C,CAAAA,CAAOiD,CAAAA,EAAkBE,CAAAA,EAAc,CAC7GnD,CAAAA,CAAO,KAAA,CAAM,WAAa,IAAA,CAC1BA,CAAAA,CAAO2B,GAAO,CACd,GAAI,CAEF,GADIyB,CAAAA,IACA,MAAA,CAAO,IAAA,CAAKC,EAAarD,CAAAA,CAAQ,CAAA,CAAI,CAAC,CAAA,CAAE,MAAA,CAAS,GAAKoD,CAAAA,EAAM,CAAG,OAAO,CAAA,CAAA,CAC1E,GAAIT,CAAAA,CAAU,eAAgB,CAC5B,IAAMW,EAAU,MAAMX,CAAAA,CAAU,eAAelC,CAAM,CAAA,CACrD,GAAI2C,CAAAA,EAAM,EAAKE,IAAY,CAAA,CAAA,CAAO,OAAO,EAC3C,CACA,GAAIF,GAAM,CAAG,OAAO,CAAA,CAAA,CACpB,GAAIT,CAAAA,CAAU,cAAA,CAAgB,CAC5B,GAAI,MAAA,CAAO,KAAKU,CAAAA,CAAarD,CAAAA,CAAQ,EAAI,CAAC,CAAA,CAAE,OAAS,CAAA,EAAKoD,CAAAA,GAAS,OAAO,CAAA,CAAA,CAC1E3C,EAASyC,CAAAA,CAAgBlD,CAAM,EACjC,CACA4C,CAAAA,CAAa,GACb,IAAMW,CAAAA,CAAe,CAAC,GAAGvD,CAAAA,CAAOsB,EAAQ,IAAA,EAAM,EACxCY,CAAAA,CAAO,CAAE,GAAGlC,CAAAA,CAAO,MAAO,EAC1BwD,CAAAA,CAAexD,CAAAA,CAAO,MAAMwD,CAAAA,CAC5BxB,CAAAA,CAAS,MAAMS,CAAAA,CAAOhC,CAAAA,CAAQ,CAAC,GAAG8C,CAAY,CAAC,EAC/CE,CAAAA,CAAW1B,EAAAA,CAAYC,CAAM,CAAA,CACnC,OAAIe,IAAc/C,CAAAA,CAAOiD,CAAAA,CAAuB,CAACQ,CAAAA,CAC7CA,CAAAA,EACFxB,GAAejC,CAAAA,CAAQgC,CAAAA,CAAQE,CAAI,CAAA,CAC5B,CAAA,CAAA,GAELlC,EAAO,KAAA,CAAMwD,CAAAA,GAAiBA,CAAAA,EAAcjB,CAAAA,CAAsBvC,CAAAA,CAAQ,GAAI,CAAA,CAAI,CAAA,CACtF,MAAMR,CAAAA,CAAY,aAAA,CAAe,IAAMmD,CAAAA,CAAU,aAAA,GAAgBlC,EAAQ8C,CAAY,CAAC,EAC/E,CAAA,CAAA,CACT,CAAA,MAAS7D,EAAO,CACd,GAAI,CAACkD,CAAAA,EAAcQ,CAAAA,EAAM,CAAG,OAAO,MAAA,CACnC,MAAM1D,CACR,CAAA,OAAE,CACIqD,IAAc/C,CAAAA,CAAOiD,CAAAA,GACvBjD,EAAO,KAAA,CAAM,UAAA,CAAa,MAC1BA,CAAAA,CAAO2B,CAAAA,IAEX,CACF,CC9DA,SAAS+B,EAAAA,CAAc1D,CAAAA,CAAkC,CACvD,IAAMC,CAAAA,CAAOD,EAAO,WAAA,CACpB,GAAI,CAACC,CAAAA,CAAM,OAAO,MAClB,IAAMkC,CAAAA,CAASwB,EAAa3D,CAAAA,CAAQC,CAAAA,CAAK,MAAM,CAAA,CAC/C,GAAI,OAAO,IAAA,CAAKkC,CAAM,EAAE,MAAA,GAAW,CAAA,CAAG,OAAO,MAAA,CAC7C,IAAMyB,CAAAA,CAAiB5D,CAAAA,CAAO,MAAA,CAC9B,OAAAA,EAAO,KAAA,CAAM,MAAA,CAAS,CAAE,GAAG4D,CAAAA,CAAgB,GAAGzB,CAAO,CAAA,CACrDnC,EAAO2B,CAAAA,CAAO,CAAE,UAAWjB,GAAAA,CAAekD,CAAAA,CAAgB5D,EAAO,MAAM,CAAE,CAAC,CAAA,CACnE,IACT,CAEA,SAAS6D,EAAAA,CAAO7D,CAAAA,CAAyB8B,EAAqB,CAC5D9B,CAAAA,CAAO8C,IACP9C,CAAAA,CAAO,KAAA,CAAM,iBAAmB8B,CAAAA,CAChC9B,CAAAA,CAAO2B,EAAO,CAAE,gBAAA,CAAkB,IAAK,CAAC,EAC1C,CAEA,eAAsBmC,EAAAA,CAAS9D,EAAyByC,CAAAA,CAA0C,CAChG,GAAI,CAACzC,CAAAA,CAAO,WAAA,EAAeA,EAAO,cAAA,EAAkBA,CAAAA,CAAO,YAAc,CAACA,CAAAA,CAAO,aAAa,IAAA,CAAM,OAAO,OAC3G,GAAIe,EAAAA,CAAWf,CAAM,CAAA,CAAG,OAAO+D,EAAW/D,CAAAA,CAAQ,MAAA,CAAQ,MAAM,CAAA,CAChE,IAAMC,CAAAA,CAAOD,CAAAA,CAAO,WAAA,CACpB,GAAI,CAACyC,CAAAA,EAAU,CAACxC,EAAM,OAAO,MAAA,CAC7B,IAAMQ,GAAAA,CAAST,CAAAA,CAAO,OAChBmC,GAAAA,CAAS,CAAE,GAAGnC,CAAAA,CAAO,MAAO,EAC5BwD,CAAAA,CAAe,CAAE,GAAGxD,CAAAA,CAAO,KAAA,CAAMwD,CAAa,CAAA,CAChDQ,CAAAA,CACJ/C,CAAAA,CAAgBjB,CAAM,CAAA,CACtB,IAAMiE,EAAgBjE,CAAAA,CAAO,MAAA,CACvBkE,EAAS1D,EAAAA,CAAYR,CAAAA,CAAQiE,CAAa,CAAA,CAC1CE,CAAAA,CAAa3B,EACjBxC,CAAAA,CACA,MAAOoE,EAAW9C,CAAAA,GAAY,CAC5B,IAAMU,CAAAA,CAAS,MAAMS,CAAAA,CAAO2B,CAAAA,CAAW9C,CAAO,CAAA,CACxCmC,EAAW1B,EAAAA,CAAYC,CAAM,EACnC,OAAA,CAAI,CAACyB,GAAYV,CAAAA,GAAc/C,CAAAA,CAAOiD,KAAgBe,CAAAA,CAAUP,CAAAA,CAAAA,CACzDzB,CACT,CAAA,CACA,IACF,EACMe,CAAAA,CAAY/C,CAAAA,CAAOgD,EACzB,GAAI,CACF,OAAO,MAAMmB,CACf,CAAA,OAAE,CACA,GAAIH,CAAAA,GAAY,OAASjB,CAAAA,GAAc/C,CAAAA,CAAOgD,GAAmBhD,CAAAA,CAAO,MAAA,GAAWiE,EAAe,CAChG,IAAMI,EAAQrE,CAAAA,CAAO,YAAA,CACfsE,EAAOJ,CAAAA,EAAO,CACdK,IAAUvE,CAAAA,CAAO,MAAA,CACvBA,EAAO,KAAA,CAAM,MAAA,CAAS,CAAE,GAAGS,GAAO,EAClC,IAAA,IAAWH,CAAAA,IAAOgE,EAAM,CACtB,OAAOtE,EAAO,MAAA,CAAOM,CAAG,EACxB,IAAA,IAAWkE,CAAAA,IAAU,CAACrC,GAAAA,CAAQqB,CAAY,EACxC,IAAA,IAAWiB,CAAAA,IAAY,MAAA,CAAO,IAAA,CAAKD,CAAM,CAAA,CAAOxE,EAAOoB,CAAAA,CAAW,KAAA,CAAMqD,CAAQ,CAAA,GAAMnE,CAAAA,EAAK,OAAOkE,CAAAA,CAAOC,CAAQ,EAC/GnE,CAAAA,IAAOiE,GAAAA,GAASvE,EAAO,MAAA,CAAOM,CAAG,EAAIiE,GAAAA,CAAQjE,CAAG,GACtD,CACI0D,CAAAA,GAAY,MAAA,GAAWhE,CAAAA,CAAO,KAAA,CAAMwD,CAAAA,CAAeA,GACvDxD,CAAAA,CAAO,KAAA,CAAM,OAAS,CAAE,GAAIgE,EAAU,EAAC,CAAI7B,IAAS,GAAGnC,CAAAA,CAAO,MAAO,CAAA,CACrEA,CAAAA,CAAOsB,EAAQ,MAAA,CAAOrB,CAAAA,CAAK,EAAE,CAAA,CAC7BoB,CAAAA,CAAiBrB,CAAAA,CAAQA,CAAAA,CAAOoB,CAAAA,CAAWG,CAAAA,CAAgBvB,EAAO,MAAA,CAAQA,CAAAA,CAAO,MAAM,CAAC,CAAA,CACxFA,EAAOoB,CAAAA,CAAWI,CAAAA,CAAY,KAAM,IAAI,CAAA,CACxCxB,EAAO,KAAA,CAAM,gBAAA,CAAmB0E,EAAmBL,CAAAA,CAAOrE,CAAAA,CAAO,aAAcA,CAAAA,CAAO,gBAAgB,EACtG0B,CAAAA,CAAmB1B,CAAM,EACzBA,CAAAA,CAAO2B,CAAAA,CAAO,CAAE,SAAA,CAAW,MAAA,CAAO,KAAK,CAAE,GAAGlB,IAAQ,GAAG8D,GAAAA,CAAS,GAAGpC,GAAO,CAAC,EAAG,gBAAA,CAAkB,IAAA,CAAM,cAAe,IAAK,CAAC,EAC7H,CACF,CACF,CAEA,eAAsB4B,CAAAA,CACpB/D,CAAAA,CACA2E,EACAC,CAAAA,CAAsCD,CAAAA,CACpB,CAClB,IAAME,CAAAA,CAAWD,IAAW,MAAA,CAE5B,GADI,CAAC5E,CAAAA,CAAO,WAAA,EAAeA,EAAO,cAAA,EAAkBA,CAAAA,CAAO,YACvD,CAAC6E,CAAAA,GAAaF,CAAAA,GAAc,MAAA,CAAS3E,CAAAA,CAAO,UAAA,CAAaA,EAAO,WAAA,CAAA,CAAc,OAAO,OACzF,IAAMC,CAAAA,CAAOD,EAAO,WAAA,CACd8E,GAAAA,CAAaH,IAAc,MAAA,EAAU,CAACE,EAE5C,GADIC,GAAAA,EAAYlD,EAAmB5B,CAAM,CAAA,CACrC8E,KAAcpB,EAAAA,CAAc1D,CAAM,CAAA,CAAG,OAAO,MAAA,CAChD,IAAM2C,EAAY,CAAE,GAAG3C,EAAO2C,CAAU,CAAA,CAClCoC,EAAWpC,CAAAA,CAAU,cAAA,CACvBqC,EAAY,KAAA,CAEVC,CAAAA,CADYjF,EAAO,gBAAA,EACI2E,CAAAA,GAAc,OAAS,CAAA,CAAI,EAAA,CAAA,CAClDO,EAASL,CAAAA,CAAW9D,EAAAA,CAAWf,CAAM,CAAA,CAAIA,CAAAA,CAAO,aAAaiF,CAAO,CAAA,CAC1E,GAAI,CAACC,CAAAA,CAAQ,OAAO,MAAA,CACpB,IAAMC,EAA6B,CAAE,UAAA,CAAYlF,EAAK,EAAA,CAAI,QAAA,CAAUiF,EAAO,EAAA,CAAI,MAAA,CAAAN,EAAQ,MAAA,CAAQ,CAAE,GAAG1B,CAAAA,CAAgBlD,CAAM,CAAE,CAAE,CAAA,CACxH6C,CAAAA,CAAQ7C,EAAO8C,CAAAA,CACfC,CAAAA,CAAa/C,EAAOgD,CAAAA,CAAkB,EAAEhD,EAAOiD,CAAAA,CAC/CE,CAAAA,CAAgBjD,EAAmBF,CAAAA,CAAQmF,CAAAA,CAAQ,MAAM,CAAA,CACzD/B,CAAAA,CAAQ,IACZP,CAAAA,GAAU7C,CAAAA,CAAO8C,CAAAA,EAAmBC,CAAAA,GAAc/C,CAAAA,CAAOiD,CAAAA,EAAkBjD,EAAO,WAAA,EAAa,EAAA,GAAOC,EAAK,EAAA,EAAMkD,CAAAA,GACnHnD,CAAAA,CAAO,KAAA,CAAM,eAAiB,IAAA,CAC9BA,CAAAA,CAAO2B,GAAO,CACd,GAAI,CACF,GAAIyB,CAAAA,GAAS,OAAO,CAAA,CAAA,CACpB,GAAI0B,GAAAA,EAAcC,CAAAA,CAAU,CAC1B,IAAM/C,CAAAA,CAAS,MAAM+C,EAAU9E,CAAAA,CAAK,EAAA,CAAIkF,EAAQ,MAAM,CAAA,CACtD,GAAI/B,CAAAA,EAAM,CAAG,OAAO,CAAA,CAAA,CACpB,GAAIpB,GAAU,MAAA,CAAO,IAAA,CAAKA,CAAM,CAAA,CAAE,MAAA,CAAS,EACzC,OAAAO,CAAAA,CAAsBvC,EAAQgC,CAAM,CAAA,CAC7B,EAEX,CACA,GAAIW,EAAU,kBAAA,CAAoB,CAChC,IAAMW,CAAAA,CAAU,MAAMX,EAAU,kBAAA,CAAmBwC,CAAO,EAC1D,GAAI/B,CAAAA,IAAWE,CAAAA,GAAY,CAAA,CAAA,CAAO,OAAO,CAAA,CAC3C,CAEA,OADIF,GAAM,EACN0B,GAAAA,EAAcpB,GAAc1D,CAAM,CAAA,CAAU,IAChDgF,CAAAA,CAAY,CAAA,CAAA,CACRH,GAAU5D,CAAAA,CAAgBjB,CAAM,EACpC6D,EAAAA,CAAO7D,CAAAA,CAAQiF,CAAO,CAAA,CACtB,MAAMzF,EAAY,iBAAA,CAAmB,IAAMmD,CAAAA,CAAU,iBAAA,GAAoBwC,CAAO,CAAC,EAC1E,CAAA,CAAA,CACT,CAAA,MAASzF,EAAO,CACd,GAAI,CAACsF,CAAAA,EAAa5B,CAAAA,GAAS,OAAO,MAAA,CAClC,MAAM1D,CACR,CAAA,OAAE,CACIqD,CAAAA,GAAc/C,CAAAA,CAAOiD,IACvBjD,CAAAA,CAAO,KAAA,CAAM,cAAA,CAAiB,KAAA,CAC9BA,CAAAA,CAAO2B,CAAAA,IAEX,CACF,CAEO,SAASyD,EAAAA,CAAkBpF,CAAAA,CAAyBqF,EAAwB,CACjF,GAAI,CAACrF,CAAAA,CAAO,WAAA,CAAa,OACzB,IAAMsF,CAAAA,CAActF,EAAOoB,CAAAA,CAAWmE,CAAAA,CAAcF,EAAUrF,CAAAA,CAAO,MAAA,CAAQA,EAAO,gBAAgB,CAAA,CAChGsF,IAAgBtF,CAAAA,CAAO,gBAAA,CAAkBA,EAAO2B,CAAAA,EAAO,CAClD2D,IAAgB,IAAA,EAAMzB,EAAAA,CAAO7D,EAAQsF,CAAW,EAC3D,CCrIA,SAASE,EAAAA,CAAOC,EAA0BC,CAAAA,CAAgC,CACxE,OAAAD,CAAAA,CAAU,GAAA,CAAIC,CAAQ,CAAA,CACf,IAAMD,CAAAA,CAAU,OAAOC,CAAQ,CACxC,CAEO,SAASC,EAAAA,EAAsB,CACpC,IAAIC,CAAAA,CAAU,EACVC,CAAAA,CAAmB,CAAA,CACjBJ,EAAY,IAAI,GAAA,CAChBK,EAAqB,IAAI,GAAA,CACzBC,EAAgB,IAAI,GAAA,CACpBC,CAAAA,CAAiB,IAAI,GAAA,CAE3B,OAAO,CACL,SAAA,CAAYN,CAAAA,EAAuBF,GAAOC,CAAAA,CAAWC,CAAQ,EAC7D,WAAA,CAAa,IAAME,EACnB,kBAAA,CAAqBF,CAAAA,EAAuBF,GAAOM,CAAAA,CAAoBJ,CAAQ,EAC/E,oBAAA,CAAsB,IAAMG,EAC5B,gBAAA,CAAmBvF,CAAAA,EAAgByF,CAAAA,CAAc,GAAA,CAAIzF,CAAG,CAAA,EAAK,EAE7D,cAAA,CAAeA,CAAAA,CAAaoF,EAAgC,CAC1D,IAAMO,EAAMD,CAAAA,CAAe,GAAA,CAAI1F,CAAG,CAAA,EAAK,IAAI,IAC3C,OAAA2F,CAAAA,CAAI,IAAIP,CAAQ,CAAA,CAChBM,EAAe,GAAA,CAAI1F,CAAAA,CAAK2F,CAAG,CAAA,CACpB,IAAM,CACXA,CAAAA,CAAI,MAAA,CAAOP,CAAQ,CAAA,CACfO,CAAAA,CAAI,OAAS,CAAA,EAAGD,CAAAA,CAAe,OAAO1F,CAAG,EAC/C,CACF,CAAA,CAEAqB,CAAAA,CAAO,CAAE,SAAA,CAAAT,CAAAA,CAAY,EAAC,CAAG,gBAAA,CAAAgF,CAAAA,CAAmB,KAAM,CAAA,CAAmB,GAAU,CAC7E,IAAA,IAAW5F,KAAO,IAAI,GAAA,CAAIY,CAAS,CAAA,CAAG,CACpC6E,EAAc,GAAA,CAAIzF,CAAAA,CAAAA,CAAMyF,EAAc,GAAA,CAAIzF,CAAG,GAAK,CAAA,EAAK,CAAC,EACxD,IAAA,IAAWoF,CAAAA,IAAYM,CAAAA,CAAe,GAAA,CAAI1F,CAAG,CAAA,EAAK,EAAC,CAAGoF,CAAAA,GACxD,CACA,GAAIQ,EAAkB,CACpBL,CAAAA,EAAAA,CACA,QAAWH,CAAAA,IAAYI,CAAAA,CAAoBJ,IAC7C,CACAE,IACA,IAAA,IAAWF,CAAAA,IAAYD,EAAWC,CAAAA,GACpC,CACF,CACF,CC5CA,SAASS,GAAkBC,CAAAA,CAA4BC,CAAAA,CAAoE,CACzH,GAAI,CACF,GAAI,OAAA,CAAQ,GAAA,CAAI,WAAa,YAAA,CAAc,OAAOxG,EAAgBuG,CAAAA,CAAY,CAAE,WAAAC,CAAW,CAAC,CAC9F,CAAA,MAAS3G,CAAAA,CAAO,CACd,GAAI,EAAEA,aAAiB,cAAA,CAAA,CAAiB,MAAMA,CAChD,CAEF,CAEO,SAAS4G,EAAAA,CAAiBF,CAAAA,CAA4BG,EAA4BF,CAAAA,CAA2C,CAClI,IAAMG,CAAAA,CAASL,EAAAA,CAAkBC,EAAYC,CAAU,CAAA,EAAKI,IAAiBL,CAAU,CAAA,CACjFjE,CAAAA,CAASqE,CAAAA,CAAO,MAAA,CAAOE,GAAO,EACpC,GAAIvE,CAAAA,CAAO,OAAQ,MAAM,IAAIwE,EAAoBxE,CAAM,CAAA,CACvD,IAAMyE,CAAAA,CAAOL,CAAAA,CAAQ,YAAezG,CAAAA,EAA2B,OAAA,CAAQ,KAAK,CAAA,WAAA,EAAcA,CAAAA,CAAM,OAAO,CAAA,CAAE,CAAA,CAAA,CACzG,IAAA,IAAWA,CAAAA,IAAS0G,CAAAA,CAAQI,CAAAA,CAAK9G,CAAK,EACxC,CChBO,SAAS+G,CAAAA,CACdC,GAAAA,CACAhF,EACAM,CAAAA,CAAsB0E,GAAAA,CAChB,CACN,IAAA,IAAWC,CAAAA,IAASC,EAAgB5E,CAAM,CAAA,CAAG,CAC3C,IAAM6E,CAAAA,CAAanF,EAAM,GAAA,CAAIiF,CAAK,CAAA,EAAK,IAAI,GAAA,CAC3CE,CAAAA,CAAW,IAAIH,GAAS,CAAA,CACxBhF,EAAM,GAAA,CAAIiF,CAAAA,CAAOE,CAAU,EAC7B,CACF,CCyBO,SAASC,EAAAA,CAAiBd,IAA4B,CAC3D,IAAMe,EAAYC,CAAAA,CAAahB,GAAU,EACnCiB,GAAAA,CAAc,IAAI,GAAA,CAClBC,CAAAA,CAAc,IAAI,GAAA,CAClBlH,EAAOmH,CAAAA,CAAiBnB,GAAU,EAClCoB,CAAAA,CAAkB,IAAI,IACtBC,CAAAA,CAAiB,IAAI,IACrBC,CAAAA,CAAc,IAAI,IAClBC,GAAAA,CAAY,IAAI,IAChBC,CAAAA,CAAST,CAAAA,CAAU,OAAOU,CAAO,CAAA,CACnCC,GAAAA,CAAgB,EAAC,CACjBC,CAAAA,CAAkB,KAClBC,CAAAA,CAAiB,IAAA,CACfC,EAAyB,CAAE,YAAA,CAAc,EAAC,CAAG,WAAA,CAAa,KAAM,aAAA,CAAe,GAAI,YAAA,CAAc,GAAI,SAAA,CAAW,KAAM,EAE5H,IAAA,IAAWC,CAAAA,IAAQC,CAAAA,CAAS/B,GAAU,CAAA,CAAG,GAAIgC,IAAUF,CAAI,CAAA,CAAG,QAAWnB,CAAAA,IAASmB,CAAAA,CAAK,OAAQP,GAAAA,CAAU,GAAA,CAAIZ,EAAOmB,CAAI,CAAA,CACxH,QAAWnB,CAAAA,IAASI,CAAAA,CAAW,CAC7BE,GAAAA,CAAY,GAAA,CAAIN,EAAM,GAAA,CAAK,CAAC,GAAIM,GAAAA,CAAY,GAAA,CAAIN,CAAAA,CAAM,GAAG,CAAA,EAAK,GAAKA,CAAK,CAAC,EACzEF,CAAAA,CAAgBE,CAAAA,CAAOS,CAAe,CAAA,CACtC,IAAMa,EAAUV,GAAAA,CAAU,GAAA,CAAIZ,CAAK,CAAA,CAEnC,GADIsB,GAASxB,CAAAA,CAAgBE,CAAAA,CAAOS,EAAiBa,CAAO,CAAA,CACxDR,EAAQd,CAAK,CAAA,CAAG,QAAWuB,CAAAA,IAAQvB,CAAAA,CAAM,OAAQF,CAAAA,CAA2BE,CAAAA,CAAOS,EAAiBc,CAAI,EAC9G,CACA,IAAA,IAAWrI,GAAAA,IAAQmG,IAAW,KAAA,EAAS,GAAI,CACzC,IAAA,IAAWW,CAAAA,IAASlG,CAAAA,CAAYZ,GAAAA,CAAK,MAAM,EAAGyH,CAAAA,CAAY,GAAA,CAAIX,EAAO9G,GAAI,CAAA,CACzE4G,EAAgB5G,GAAAA,CAAMwH,CAAc,EACpC,IAAA,IAAWc,CAAAA,IAAStI,IAAK,MAAA,EAAU,GAAI,IAAA,IAAWK,CAAAA,IAAO0G,EAAgBuB,CAAK,CAAA,CAAGjB,CAAAA,CAAY,GAAA,CAAIhH,CAAG,EACtG,CAEA,IAAMkI,GAAAA,CAAc,IAAM,CAAC,CAACpC,IAAW,KAAA,EAAO,MAAA,CACxCqC,IAAU,CAACrG,CAAAA,CAA8B3B,IAAmB,CAChE,IAAMiI,EAAStI,CAAAA,CAAK,MAAA,CAAOK,CAAM,CAAA,CAC3B4H,CAAAA,CAAUV,GAAAA,CAAU,GAAA,CAAIvF,CAAmB,CAAA,CACjD,QAAQ,CAACiG,CAAAA,EAAWM,IAAUN,CAAAA,CAASK,CAAM,IAAMC,GAAAA,CAAUvG,CAAAA,CAAQsG,CAAM,CAC7E,CAAA,CACME,EAAS,CAAC7B,CAAAA,CAAkBtG,IAAmB,CACnD,IAAMR,EAAOyH,CAAAA,CAAY,GAAA,CAAIX,CAAK,CAAA,CAClC,OAAO,CAAC9G,CAAAA,EAAQG,CAAAA,CAAK,MAAMK,CAAM,CAAA,CAAE,SAASR,CAAI,CAClD,EACM4I,CAAAA,CAAc,CAACvI,EAAaG,CAAAA,GAChC4G,GAAAA,CAAY,IAAI/G,CAAG,CAAA,EAAG,KAAMyG,CAAAA,EAAU6B,CAAAA,CAAO7B,CAAAA,CAAOtG,CAAM,CAAA,EAAKgI,GAAAA,CAAQ1B,EAAOtG,CAAM,CAAC,EAEjFqI,CAAAA,CAASxI,CAAAA,EAAgB,CAC7B,GAAI,CAAA+G,IAAY,GAAA,CAAI/G,CAAG,EACvB,IAAA,IAAWyI,CAAAA,IAASnB,EAAQ,CAC1B,IAAMoB,EAAQC,GAAAA,CAAUF,CAAAA,CAAM,GAAA,CAAKzI,CAAG,CAAA,CACtC,GAAI0I,EAAO,OAAO,CAACD,EAAM,GAAA,CAAK,GAAGC,CAAK,CACxC,CAEF,EACME,CAAAA,CAAS5I,CAAAA,EAAgBwI,EAAMxI,CAAG,CAAA,GAAI,CAAC,CAAA,EAAKA,CAAAA,CAElD,SAAS6I,GAAAA,CAAWJ,CAAAA,CAAkBT,CAAAA,CAAe7H,CAAAA,CAA6B,CAChF,IAAM2I,EAAQC,CAAAA,CAAUN,CAAAA,CAAOT,EAAMlI,CAAAA,CAAK,MAAA,CAAOK,CAAM,CAAC,CAAA,CACxD,OAAOsI,CAAAA,CAAM,MAAA,CAAO,OAAQhC,CAAAA,EAAU4B,GAAAA,CAAU5B,EAAOqC,CAAK,CAAC,CAC/D,CAEA,SAASE,GAAWhJ,CAAAA,CAAaG,CAAAA,CAAuC,CACtE,IAAMuI,CAAAA,CAAQF,EAAMxI,CAAG,CAAA,CACvB,GAAI,CAAC0I,CAAAA,CAAO,OACZ,GAAM,CAACO,EAAUzH,CAAAA,CAAOuD,CAAQ,EAAI2D,CAAAA,CAC9BD,CAAAA,CAAQF,EAAYU,CAAAA,CAAU9I,CAAM,CAAA,CACpC+I,CAAAA,CAAQC,GAAAA,CAAQhJ,CAAAA,CAAO8I,CAAQ,CAAC,CAAA,CACtC,GAAI,CAACR,CAAAA,EAAS,CAAClB,CAAAA,CAAQkB,CAAK,GAAKjH,CAAAA,EAAS0H,CAAAA,CAAM,OAAQ,OACxD,IAAMzC,EAAQoC,GAAAA,CAAWJ,CAAAA,CAAOS,EAAM1H,CAAK,CAAA,CAAGrB,CAAM,CAAA,CAAE,IAAA,CAAMiJ,CAAAA,EAAcA,EAAU,GAAA,GAAQrE,CAAQ,EACpG,OAAO0B,CAAAA,EAAS,CAAE,KAAA,CAAAgC,CAAAA,CAAO,MAAAjH,CAAAA,CAAO,KAAA,CAAAiF,CAAM,CACxC,CAEA,SAAS4C,EAAAA,CAAMlJ,CAAAA,CAAgBmJ,EAAoC,CACjE,GAAI,CAAC7B,CAAAA,CAAiB,OAAOE,CAAAA,CAC7BF,EAAkB,KAAA,CAClB,IAAM1D,EAAS4D,CAAAA,CAAM,YAAA,CAAeO,KAAY,CAAIpI,CAAAA,CAAK,MAAMK,CAAM,CAAA,CAAI,EAAC,CACpE8D,CAAAA,CAAW0D,EAAM,WAAA,CAAcO,GAAAA,GAAiBnE,CAAAA,CAAMuF,CAAS,GAAKvF,CAAAA,CAAMA,CAAAA,CAAM,OAAS,CAAC,CAAA,EAAK,KAAQ,IAAA,CACvGjC,CAAAA,CAASoG,KAAY,CAAKjE,CAAAA,EAAS,QAAU,EAAC,CAAM6B,IAAW,MAAA,EAAU,GACzEsC,CAAAA,CAAStI,CAAAA,CAAK,OAAOK,CAAM,CAAA,CACjC,OAAAwH,CAAAA,CAAM,aAAA,CAAgB4B,GAAAA,CAAYzH,EAAQsG,CAAM,CAAA,CAChDT,EAAM,YAAA,CAAe7F,CAAAA,CAClB,OAAQ8F,CAAAA,EAASS,GAAAA,CAAUT,EAAMQ,CAAM,CAAC,EACxC,GAAA,CAAKR,CAAAA,EAAUE,IAAUF,CAAI,CAAA,CAAI,CAAE,GAAGA,CAAAA,CAAM,MAAA,CAAQA,CAAAA,CAAK,MAAA,CAAO,MAAA,CAAQnB,GAAU4B,GAAAA,CAAU5B,CAAAA,CAAO2B,CAAM,CAAC,CAAE,EAAIR,CAAK,CAAA,CACjHD,CACT,CAEA,SAAS6B,GAAerJ,CAAAA,CAAgB0B,GAAAA,CAAgC4H,EAA4B,CAClG,IAAA,IAAWhB,KAASnB,CAAAA,CAAQ,CAC1B,GAAIiB,CAAAA,CAAYE,CAAAA,CAAM,GAAA,CAAKtI,CAAM,CAAA,GAAMsI,CAAAA,CAAO,SAC9C,IAAM3G,CAAAA,CAASqH,IAAQhJ,CAAAA,CAAOsI,CAAAA,CAAM,GAAG,CAAC,CAAA,CAClCS,EAAQpH,CAAAA,CAAO,GAAA,CAAI,CAACkG,CAAAA,CAAMxG,CAAAA,GAAU,CACxC,IAAIE,CAAAA,CAASsG,EACb,IAAA,IAAS0B,CAAAA,CAAQ,EAAGC,CAAAA,CAAQjI,CAAM,GAAKgI,CAAAA,EAASjB,CAAAA,CAAM,OAAO,MAAA,CAAQiB,CAAAA,EAAAA,CAAS,CAC5E,IAAME,CAAAA,CAAgBlI,EAChBmI,CAAAA,CAAQhB,GAAAA,CAAWJ,EAAOmB,CAAAA,CAAOzJ,CAAM,EACvC2J,CAAAA,CAASrB,CAAAA,CAAM,MAAA,CAAO,MAAA,CAAQhC,CAAAA,EAAU,CAACoD,EAAM,QAAA,CAASpD,CAAK,GAAKmD,CAAAA,CAAMnD,CAAAA,CAAM,GAAG,CAAA,GAAM,MAAS,EACtG,GAAI,CAACqD,EAAO,MAAA,CAAQ,MACpBpI,EAASqI,CAAAA,CAAOH,CAAAA,CAAO,CAAE,GAAGA,CAAM,CAAC,CAAA,CACnC,IAAA,GAAW,CAAE,IAAA5J,CAAI,CAAA,GAAK8J,EACpB,OAAQpI,CAAAA,CAAkB1B,CAAG,CAAA,CAC7ByJ,CAAAA,CAAQ,IAAIO,CAAAA,CAASvB,CAAAA,CAAM,IAAKjH,CAAAA,CAAOxB,CAAG,CAAC,EAE/C,CACA,OAAO0B,CACT,CAAC,CAAA,CACGwH,CAAAA,CAAM,IAAA,CAAK,CAAClB,EAAMxG,CAAAA,GAAUwG,CAAAA,GAASlG,EAAON,CAAK,CAAC,IAAGrB,CAAAA,CAAOsI,CAAAA,CAAM,GAAG,CAAA,CAAIS,CAAAA,CAAAA,CAC7E,QAAWlJ,CAAAA,IAAO,MAAA,CAAO,KAAK6B,GAAM,CAAA,CAAG,CACrC,GAAM,CAACL,EAAOiF,CAAK,CAAA,CAAIkC,IAAUF,CAAAA,CAAM,GAAA,CAAKzI,CAAG,CAAA,EAAK,GAChDwB,CAAAA,GAAU,MAAA,EAAcA,EAAQ0H,CAAAA,CAAM,MAAA,EAAUL,IAAWJ,CAAAA,CAAOS,CAAAA,CAAM1H,CAAK,CAAA,CAAGrB,CAAM,EAAE,IAAA,CAAM6H,CAAAA,EAASA,CAAAA,CAAK,GAAA,GAAQvB,CAAK,CAAA,GAE7H,OAAO5E,GAAAA,CAAO7B,CAAG,EACjByJ,CAAAA,CAAQ,GAAA,CAAIzJ,CAAG,CAAA,EACjB,CACF,CACAF,CAAAA,CAAK,UAAA,GACP,CAEA,OAAO,CACL+G,CAAAA,CAAAA,CAAAA,CACA,MAAA,CAAAS,EACA2C,CAAAA,CAAiBnK,CAAAA,CAAK,MAAA,CACtB,KAAA,CAAAuJ,EAAAA,CACAd,CAAAA,CAAAA,CAAAA,CACAS,KACAH,CAAAA,CAAAA,GAAAA,CACA,KAAA,CAAAD,EACA,KAAA,CAAAJ,CAAAA,CAEAtH,EAAY0E,CAAAA,CAA2BsE,CAAAA,CAA8B,CAC/DtE,CAAAA,GAAkB6B,CAAAA,CAAkB,OACpC7B,CAAAA,EAAoBsE,CAAAA,IAAexC,EAAiB,IAAA,EAC1D,CAAA,CAEAyC,EAAahK,CAAAA,CAAgBmJ,CAAAA,CAAmBvD,CAAAA,CAAkD,CAChG,IAAMpG,CAAAA,CAAO0J,GAAMlJ,CAAAA,CAAQmJ,CAAS,EAAE,WAAA,CACtC,GAAI,CAAC5B,CAAAA,CAAgB,OAAOC,EAAM,SAAA,CAClCD,CAAAA,CAAiB,MACjB,IAAM7F,CAAAA,CAASlC,EAAOyK,CAAAA,CAAezK,CAAAA,CAAK,OAAQG,CAAAA,CAAK,MAAA,CAAOK,CAAM,CAAA,CAAG4F,CAAU,EAAI,EAAC,CACtF,OAAQ4B,CAAAA,CAAM,SAAA,CAAYO,KAAY,EAAK,MAAA,CAAO,KAAKrG,CAAM,CAAA,CAAE,SAAW,CAC5E,CAAA,CAEAoD,EAAcF,GAAAA,CAAkB5E,CAAAA,CAAgBmJ,EAAkC,CAChF,IAAMtJ,CAAAA,CAAM4I,CAAAA,CAAM7D,GAAQ,CAAA,CACpBH,EAASyE,EAAAA,CAAMlJ,CAAAA,CAAQmJ,CAAS,CAAA,CAAE,YAAA,CAAa,UAAW3J,CAAAA,EAASY,CAAAA,CAAYZ,EAAK,MAAM,CAAA,CAAE,KAAM8G,CAAAA,EAAUA,CAAAA,CAAM,MAAQzG,CAAG,CAAC,EACpI,OAAO4E,CAAAA,GAAW,EAAA,CAAK,IAAA,CAAOA,CAChC,CAAA,CAEAyF,EAAiBrK,CAAAA,CAAasK,CAAAA,CAAqC,CACjE,OAAOtD,CAAAA,CAAY,IAAIhH,CAAG,CAAA,EAAKkH,EAAgB,GAAA,CAAIlH,CAAG,GAAKmH,CAAAA,CAAe,GAAA,CAAInH,CAAG,CAAA,EAAKsK,CAAAA,CAAc,KAAO,CAC7G,CAAA,CAEA,IAAA,CAAKnK,CAAAA,CAAsB,CACzBqH,GAAAA,CAAQ,CAAE,GAAGA,GAAAA,CAAO,GAAGrH,CAAO,EAChC,EAEAc,CAAAA,CAAgBd,GAAAA,CAAgB0B,EAAgC0I,CAAAA,CAAU,KAAA,CAAoB,CACxFA,CAAAA,GAAS/C,GAAAA,CAAQ,CAAE,GAAGrH,GAAO,GACjCL,CAAAA,CAAK,UAAA,EAAW,CAChB,IAAM0K,CAAAA,CAAQ,CAAC,GAAG,IAAI,GAAA,CAAI,CAAC,GAAGtD,CAAAA,CAAgB,MAAK,CAAG,GAAGC,EAAe,IAAA,EAAM,CAAC,CAAC,CAAA,CAC1EsD,EAAS,IAAI,GAAA,CAAID,CAAK,CAAA,CACtBf,CAAAA,CAAU,IAAI,GAAA,CACdiB,CAAAA,CAAQ1K,CAAAA,EAAgBG,IAAOH,CAAG,CAAA,GAAM,QAAa6B,CAAAA,CAAO7B,CAAG,IAAM,MAAA,CACrE2K,CAAAA,CAAQ3K,GAAgB,CAC5BF,CAAAA,CAAK,YAAW,CAChB2J,CAAAA,CAAQ,IAAIzJ,CAAG,CAAA,CACX,CAAAyK,CAAAA,CAAO,GAAA,CAAIzK,CAAG,CAAA,GAClByK,CAAAA,CAAO,GAAA,CAAIzK,CAAG,CAAA,CACdwK,CAAAA,CAAM,KAAKxK,CAAG,CAAA,EAChB,EACM4K,CAAAA,CAAS5K,CAAAA,EAAgB,CAC7B,OAAOG,GAAAA,CAAOH,CAAG,CAAA,CACjB,OAAO6B,EAAO7B,CAAG,CAAA,CACjB,QAAWmE,CAAAA,IAAY,MAAA,CAAO,IAAA,CAAKtC,CAAM,CAAA,CAAO+G,CAAAA,CAAMzE,CAAQ,CAAA,GAAMnE,CAAAA,EAAK,OAAO6B,CAAAA,CAAOsC,CAAQ,EAC/FwG,CAAAA,CAAK3K,CAAG,EACV,CAAA,CACM6K,CAAAA,CAAS,CAACpE,CAAAA,CAAkBoD,CAAAA,GAAmB,CAC9CA,CAAAA,CAEMpD,CAAAA,CAAM,OAAS,QAAA,EAAY,CAACiE,EAAKjE,CAAAA,CAAM,GAAG,GAAKe,GAAAA,CAAMf,CAAAA,CAAM,GAAG,CAAA,GAAM,MAAA,EAAa0B,IAAQ1B,CAAAA,CAAOtG,GAAM,GAC/GA,GAAAA,CAAOsG,CAAAA,CAAM,GAAG,CAAA,CAAIe,GAAAA,CAAMf,EAAM,GAAG,CAAA,CACnCkE,EAAKlE,CAAAA,CAAM,GAAG,CAAA,EACLc,CAAAA,CAAQd,CAAK,CAAA,EAAKA,EAAM,YAAA,CAAgB,CAAA,EAAK,CAACiE,CAAAA,CAAKjE,CAAAA,CAAM,GAAG,CAAA,EAAK0B,GAAAA,CAAQ1B,EAAOtG,GAAM,CAAA,GAC/FA,IAAOsG,CAAAA,CAAM,GAAG,EAAIjG,GAAAA,CAAa,CAACiG,CAAK,CAAC,CAAA,CAAEA,CAAAA,CAAM,GAAG,CAAA,CACnDkE,CAAAA,CAAKlE,EAAM,GAAG,CAAA,CAAA,CANViE,EAAKjE,CAAAA,CAAM,GAAG,GAAGmE,CAAAA,CAAMnE,CAAAA,CAAM,GAAG,EAQxC,CAAA,CACA,QAASjF,CAAAA,CAAQ,CAAA,CAAGA,EAAQgJ,CAAAA,CAAM,MAAA,CAAQhJ,IAAS,CACjD,IAAMxB,CAAAA,CAAMwK,CAAAA,CAAMhJ,CAAK,CAAA,CACvBiJ,EAAO,MAAA,CAAOzK,CAAG,EACjB,IAAA,IAAWyG,CAAAA,IAASS,EAAgB,GAAA,CAAIlH,CAAG,GAAK,EAAC,CAAOsI,EAAO7B,CAAAA,CAAOtG,GAAM,GAAG0K,CAAAA,CAAOpE,CAAAA,CAAO0B,IAAQ1B,CAAAA,CAAOtG,GAAM,CAAC,CAAA,CACnH,IAAA,IAAWR,KAAQwH,CAAAA,CAAe,GAAA,CAAInH,CAAG,CAAA,EAAK,GAC5C,IAAA,IAAWyG,CAAAA,IAASlG,EAAYZ,CAAAA,CAAK,MAAM,EAAGkL,CAAAA,CAAOpE,CAAAA,CAAO0B,IAAQxI,CAAAA,CAAMQ,GAAM,CAAC,EAErF,CACA,OAAImH,CAAAA,CAAO,MAAA,EAAQkC,EAAAA,CAAerJ,IAAQ0B,CAAAA,CAAQ4H,CAAO,EAClDA,CACT,CACF,CACF,CC3NO,IAAMqB,GAAN,KAAmE,CAaxE,YACWhF,CAAAA,CACTiF,CAAAA,CACA9E,EACA,CAHS,IAAA,CAAA,UAAA,CAAAH,EAZX,IAAA,CAAiB9E,CAAAA,CAAU,IAAI,GAAA,CAC/B,IAAA,CAAQwB,CAAAA,CAAkB,EAC1B,IAAA,CAAQG,CAAAA,CAAiB,EACzB,IAAA,CAAQD,CAAAA,CAAkB,EAM1B,IAAA,CAAiBsI,CAAAA,CAAgB3F,IAAoB,CAOnD,IAAA,CAAKhD,EAAY4D,CAAAA,EAAW,GAC5B,IAAA,CAAK,UAAA,CAAaA,GAAS,UAAA,EAAc,EAAC,CAC1CD,EAAAA,CAAiBF,CAAAA,CAAY,IAAA,CAAKzD,EAAW,IAAA,CAAK,UAAU,EAC5D,IAAA,CAAK,QAAA,CAAW4I,EAAgBhF,CAAAA,EAAS,QAAA,CAAUH,EAAW,QAAQ,CAAA,CACtE,KAAKhF,CAAAA,CAAa8F,EAAAA,CAAiBd,CAAU,CAAA,CAC7C,IAAM3F,EAASK,GAAAA,CAAa,IAAA,CAAKM,EAAW+F,CAAAA,CAAWkE,CAAoD,EAC3G,IAAA,CAAK,KAAA,CAAQG,EAAa/K,CAAM,CAAA,CAChC,KAAKW,CAAAA,CAAWG,CAAAA,CAAgBd,EAAQ,IAAA,CAAK,KAAA,CAAM,OAAQ,IAAI,EACjE,CAEA,IAAI,MAAA,EAAqC,CACvC,OAAO,IAAA,CAAK,KAAA,CAAM,MACpB,CACA,IAAI,QAA2C,CAC7C,OAAO,KAAK,KAAA,CAAM,MACpB,CACA,IAAI,cAAA,EAAoC,CACtC,GAAM,CAAE,OAAA0B,CAAAA,CAAQ,cAAA,CAAAsJ,EAAgB,MAAA,CAAAhL,CAAO,EAAI,IAAA,CAAK,KAAA,CAChD,OAAO,CACL,GAAGgL,CAAAA,CACH,GAAG,IAAA,CAAKrK,CAAAA,CAAW+F,EAAU,OAAA,CAC1BJ,CAAAA,EACEA,EAAM,IAAA,GAAS,QAAA,EACd5E,EAAO4E,CAAAA,CAAM,GAAG,IACf,IAAA,CAAK3F,CAAAA,CAAWyH,EAAY9B,CAAAA,CAAM,GAAA,CAAKtG,CAAM,CAAA,EAAKsG,CAAAA,IAAWA,CAAAA,EAC9D5E,CAAAA,CAAO4E,CAAAA,CAAM,GAAG,GAClB,EACJ,CACF,CACF,CACA,IAAI,gBAAA,EAA2B,CAC7B,OAAO,IAAA,CAAK,KAAA,CAAM,gBACpB,CACA,IAAI,cAAkD,CACpD,OAAO,KAAK,KAAA,CAAM,YACpB,CACA,IAAI,cAAA,EAA0B,CAC5B,OAAO,IAAA,CAAK,KAAA,CAAM,cACpB,CACA,IAAI,YAAsB,CACxB,OAAO,KAAK,KAAA,CAAM,UACpB,CAEA,IAAI,WAAA,EAAuB,CACzB,OAAO,CAAC,CAAC,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,MAClC,CAEA,IAAI,cAA2B,CAC7B,OAAO,KAAK2E,CAAAA,CAAK,YACnB,CAEA,IAAI,WAAA,EAA+B,CACjC,OAAO,IAAA,CAAKA,EAAK,WACnB,CAEA,IAAI,aAAA,EAA6B,CAC/B,OAAO,IAAA,CAAKA,CAAAA,CAAK,aACnB,CAEA,IAAI,YAAA,EAA2B,CAC7B,OAAO,IAAA,CAAKA,EAAK,YACnB,CAEA,IAAI,WAAA,EAAuB,CACzB,OAAO,IAAA,CAAK,gBAAA,GAAqB,CACnC,CAEA,IAAI,YAAsB,CACxB,OAAO,KAAK,gBAAA,EAAoB,IAAA,CAAK,YAAA,CAAa,MAAA,CAAS,CAC7D,CAEA,IAAI,SAAA,EAAqB,CACvB,OAAO,IAAA,CAAKtK,CAAAA,CAAWqJ,EAAa,IAAA,CAAK,KAAA,CAAM,OAAQ,IAAA,CAAK,gBAAA,CAAkB,KAAK,UAAU,CAC/F,CAEA,IAAI,UAAA,EAAuC,CACzC,IAAMzI,GAAAA,CAAmC,OAAO,MAAA,CAAO,IAAI,EAC3D,IAAA,IAAW/B,CAAAA,IAAQ,KAAK,YAAA,CAAc,CACpC,IAAM0L,CAAAA,CAAOC,CAAAA,CAAU3L,EAAK,MAAA,CAAQ,IAAA,CAAK,OAAQ,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAC9D0L,CAAAA,CAAK,OAAS,CAAA,GAAG3J,GAAAA,CAAO/B,CAAAA,CAAK,EAAE,CAAA,CAAI0L,CAAAA,EACzC,CACA,OAAO3J,GACT,CAEA,IAAI,QAAA,EAA+C,CACjD,IAAM6J,CAAAA,CAAQ,KAAK,YAAA,CAAa,MAAA,CAChC,OAAO,CAAE,OAAA,CAAS,KAAK,GAAA,CAAI,IAAA,CAAK,iBAAmB,CAAA,CAAGA,CAAK,CAAA,CAAG,KAAA,CAAAA,CAAM,CACtE,CAEA,SAAA,CAAUnG,CAAAA,CAAkC,CAC1C,OAAO,IAAA,CAAK4F,EAAc,SAAA,CAAU5F,CAAQ,CAC9C,CAEA,WAAA,EAAsB,CACpB,OAAO,IAAA,CAAK4F,EAAc,WAAA,EAC5B,CAEA,cAAA,CAAehL,CAAAA,CAAaoF,CAAAA,CAAkC,CAC5D,OAAO,IAAA,CAAK4F,EAAc,cAAA,CAAehL,CAAAA,CAAKoF,CAAQ,CACxD,CAEA,iBAAiBpF,CAAAA,CAAqB,CACpC,OAAO,IAAA,CAAKgL,CAAAA,CAAc,iBAAiBhL,CAAG,CAChD,CAEA,kBAAA,CAAmBoF,CAAAA,CAAkC,CACnD,OAAO,IAAA,CAAK4F,EAAc,kBAAA,CAAmB5F,CAAQ,CACvD,CAEA,oBAAA,EAA+B,CAC7B,OAAO,IAAA,CAAK4F,EAAc,oBAAA,EAC5B,CAEA,QAAA,CAAShL,CAAAA,CAAaC,EAAsB,CAC1C,IAAMH,EAAO,IAAA,CAAKgB,CAAAA,CAAW,MAAMd,CAAG,CAAA,CAClCF,CAAAA,CAAM0L,CAAAA,CAAa,IAAA,CAAe,GAAG1L,EAAMG,CAAK,CAAA,CAC/CwL,IAAW,IAAA,CAAezL,CAAAA,CAAKC,CAAK,EAC3C,CAEA,MAAMD,CAAAA,CAA0B,CAC9B,OAAO0L,GAAAA,CAAW,IAAA,CAAe1L,CAAG,CACtC,CACA,QAAQA,CAAAA,CAAsB,CAC5B,OAAO2L,GAAAA,CAAQ,IAAA,CAAe3L,CAAG,CACnC,CACA,UAAA,CAAWA,EAAawB,CAAAA,CAAwB,CAC9C,OAAOoK,CAAAA,CAAW,IAAA,CAAe5L,EAAKwB,CAAK,CAC7C,CACA,YAAA,CAAaxB,CAAAA,CAAawB,EAAeiF,CAAAA,CAAexG,CAAAA,CAAsB,CAC5EuL,CAAAA,CAAa,IAAA,CAAexL,CAAAA,CAAKwB,CAAAA,CAAOiF,CAAAA,CAAOxG,CAAK,EACtD,CAEA,SAAA,CAAU4B,EAAsC,CAC9CI,CAAAA,CAAsB,KAAeJ,CAAAA,CAAQ,IAAI,EACnD,CAEA,eAAA,CAAgB7B,EAAa6L,CAAAA,CAAwB,CACnD,IAAMC,CAAAA,CAAW,IAAA,CAAK,MAAM,YAAA,CAAa9L,CAAG,IAAM,IAAA,CAC9C6L,CAAAA,CAAS,KAAK,KAAA,CAAM,YAAA,CAAa7L,CAAG,CAAA,CAAI,IAAA,CACvC,OAAO,IAAA,CAAK,KAAA,CAAM,aAAaA,CAAG,CAAA,CACvC,KAAKqB,CAAAA,CAAO,CAAE,UAAWyK,CAAAA,GAAaD,CAAAA,CAAU,EAAC,CAAI,CAAC7L,CAAG,CAAE,CAAC,EAC9D,CAEA,oBAAA,EAA6B,CAC3B,KAAKwC,CAAAA,EAAAA,CACL,IAAA,CAAKG,IACL,IAAA,CAAK,KAAA,CAAM,eAAiB,KAAA,CAC5B,IAAA,CAAK,MAAM,UAAA,CAAa,KAAA,CACxB,KAAKtB,CAAAA,GACP,CAEA,IAAA,EAAyB,CACvB,OAAO,IAAA,CAAK0K,CAAAA,CAAQ,MAAM,CAC5B,CACA,IAAA,EAAyB,CACvB,OAAOtI,CAAAA,CAAW,KAAe,MAAM,CACzC,CACA,IAAA,CAAKtB,CAAAA,CAA0C,CAC7C,OAAOqB,EAAAA,CAAS,KAAerB,CAAM,CACvC,CACA,MAAA,CAAO6J,CAAAA,CAA0C,CAC/C,OAAO9J,CAAAA,CAAW,IAAA,CAAe8J,CAAO,CAC1C,CACA,cAAcC,CAAAA,CAAyB,CACrC,OAAO,IAAA,CAAKjL,CAAAA,CAAQ,IAAIiL,CAAM,CAChC,CACA,QAAA,EAAmC,CACjC,OAAOlJ,CAAAA,CAAa,IAAa,CACnC,CACA,aAAA,CAAc/C,CAAAA,CAA4B,CACxC,OAAOkM,GAAAA,CAAY,KAAelM,CAAG,CACvC,CACA,eAAA,EAAoC,CAClC,OAAO4C,CAAAA,CAAgB,IAAa,CACtC,CACA,iBAAA,CAAkB5C,EAAmB,CACnC8E,EAAAA,CAAkB,KAAe9E,CAAG,EACtC,CACA,KAAA,CAAMG,CAAAA,CAAwC,CAC5CgM,CAAAA,CAAY,IAAA,CAAehM,CAAM,EACnC,CAEQ4L,CAAAA,CAAQzH,EAAkD,CAChE,OAAOb,EAAW,IAAA,CAAe,MAAA,CAAQa,CAAM,CACjD,CAEA,IAAY8G,CAAAA,EAAO,CACjB,OAAO,IAAA,CAAKtK,CAAAA,CAAW,MAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAQ,IAAA,CAAK,gBAAgB,CACvE,CAEQO,CAAAA,CAAO4E,CAAAA,CAAgC,EAAC,CAAS,CACvD,KAAKnF,CAAAA,CAAWI,CAAAA,CAAY,CAAC,CAAC+E,CAAAA,CAAQ,iBAAkB,CAAC,CAACA,EAAQ,aAAa,CAAA,CAC/E,KAAK+E,CAAAA,CAAc3J,CAAAA,CAAO4E,CAAO,EACnC,CACF","file":"chunk-QMT7RJ4T.js","sourcesContent":["export class FormLifecycleError extends Error {\n readonly committed = true;\n readonly cause: unknown;\n\n constructor(\n readonly phase: 'afterStepChange' | 'afterSubmit',\n cause: unknown,\n ) {\n super(`The action completed, but ${phase} failed: ${cause instanceof Error ? cause.message : String(cause)}`);\n this.name = 'FormLifecycleError';\n this.cause = cause;\n }\n}\n\nexport async function afterCommit(phase: 'afterStepChange' | 'afterSubmit', callback: () => void | Promise<void>): Promise<void> {\n try {\n await callback();\n } catch (error) {\n throw new FormLifecycleError(phase, error);\n }\n}\n","import { checkDefinition } from './check-definition';\n\nexport function validateDefinition(input: unknown): string[] {\n return checkDefinition(input).map((issue) => issue.message);\n}\n","import { getChangedKeys } from './engine-utils';\nimport type { EngineInternals } from './runtime-internals';\n\nfunction activePath(engine: EngineInternals): string {\n return engine.visibleSteps.map((step) => step.id).join('\\n');\n}\n\nexport function watchCheckedInputs(engine: EngineInternals, checked: Record<string, unknown>): () => boolean {\n const path = activePath(engine);\n const seen = Object.keys(checked)\n .filter((key) => checked[key] !== undefined)\n .map((key) => [key, engine.values[key]] as const);\n return () => activePath(engine) !== path || seen.some(([key, value]) => !Object.is(engine.values[key], value));\n}\n\nexport function watchValues(engine: EngineInternals, values: Record<string, unknown>): () => Set<string> {\n const seen = { ...values };\n return () => getChangedKeys(seen, engine.values);\n}\n","import type { FormStep } from '../types';\nimport { valueFields } from '../visibility/nodes';\nimport { createValues } from './engine-utils';\nimport type { EngineInternals } from './runtime-internals';\nimport { activeSteps } from './step-routes';\nimport { dropServerErrors, pruneOffPathErrors } from './validation-state';\n\nfunction resetValues(engine: EngineInternals): Record<string, unknown> {\n const fields = valueFields(engine.currentStep?.fields ?? []);\n const values = { ...engine.values };\n for (const { key } of fields) delete values[key];\n return Object.assign(values, createValues(fields));\n}\n\nexport function skipTarget(engine: EngineInternals): FormStep | undefined {\n return activeSteps(engine.definition, resetValues(engine))[engine.currentStepIndex + 1];\n}\n\nexport function skipCurrentStep(engine: EngineInternals): string[] {\n const step = engine.currentStep!;\n const fieldKeys = valueFields(step.fields).map(({ key }) => key);\n engine.state.values = resetValues(engine);\n const owned = Object.keys(engine.errors).filter((key) => fieldKeys.includes(engine.visibility.owner(key)));\n for (const key of owned) delete engine.errors[key];\n dropServerErrors(engine, fieldKeys);\n engine.skipped.set(step.id, fieldKeys);\n dropServerErrors(engine, engine.visibility.reconcileHidden(engine.values, engine.errors));\n engine.visibility.markChanged(true, true);\n const pruned = pruneOffPathErrors(engine);\n engine.notify({ fieldKeys: [...fieldKeys, ...owned, ...pruned], structureChanged: true, valuesChanged: true });\n return fieldKeys;\n}\n\nexport function includeCurrentStep(engine: EngineInternals): void {\n const step = engine.currentStep;\n if (step) engine.skipped.delete(step.id);\n}\n\nexport function skipStepAt(engine: EngineInternals, index: number): string[] {\n engine.state.currentStepIndex = index;\n engine.notify({ structureChanged: true });\n return skipCurrentStep(engine);\n}\n","import { afterCommit } from './lifecycle-error';\nimport { watchCheckedInputs } from './pending-inputs';\nimport type { SubmitHandler, SubmitResult } from './engine-options';\nimport type { EngineInternals } from './runtime-internals';\nimport { applyValidationErrors, getSubmitValues, validateForm } from './validation-state';\nimport { includeCurrentStep } from './step-skip';\n\ntype Rejection = Extract<SubmitResult, { ok: false }>;\n\nexport function isRejection(result: unknown): result is Rejection {\n return !!result && Object.getPrototypeOf(result) === Object.prototype && (result as SubmitResult).ok === false;\n}\n\nfunction applyRejection(engine: EngineInternals, result: Rejection, sent: Record<string, unknown>): void {\n const errors: Record<string, string> = {};\n const source = typeof result.errors === 'object' && result.errors ? result.errors : {};\n for (const [key, value] of Object.entries(source)) {\n const message: unknown = Array.isArray(value) ? value.join(' ') : value;\n if (typeof message === 'string' && Object.is(engine.values[engine.visibility.owner(key)], sent[engine.visibility.owner(key)]))\n errors[key] = message;\n }\n const formErrors = Array.isArray(result.formErrors) ? result.formErrors.filter((message) => typeof message === 'string') : [];\n applyValidationErrors(engine, errors, true, formErrors);\n}\n\nexport async function submitForm(engine: EngineInternals, submit: SubmitHandler, keepSkipped = false): Promise<boolean> {\n if (engine.submitting || engine.stepValidating) return false;\n if (!keepSkipped) includeCurrentStep(engine);\n const lifecycle = { ...engine.lifecycle };\n let dispatched = false;\n const epoch = engine.validationEpoch;\n const operation = (engine.latestOperation = ++engine.operationEpoch);\n let values = getSubmitValues(engine);\n const inputsChanged = watchCheckedInputs(engine, values);\n const stale = () => epoch !== engine.validationEpoch || operation !== engine.operationEpoch || inputsChanged();\n engine.state.submitting = true;\n engine.notify();\n try {\n if (stale()) return false;\n if (Object.keys(validateForm(engine, true)).length > 0 || stale()) return false;\n if (lifecycle.onBeforeSubmit) {\n const allowed = await lifecycle.onBeforeSubmit(values);\n if (stale() || allowed === false) return false;\n }\n if (stale()) return false;\n if (lifecycle.onBeforeSubmit) {\n if (Object.keys(validateForm(engine, true)).length > 0 || stale()) return false;\n values = getSubmitValues(engine);\n }\n dispatched = true;\n const skippedSteps = [...engine.skipped.keys()];\n const sent = { ...engine.values };\n const serverErrors = engine.state.serverErrors;\n const result = await submit(values, [...skippedSteps]);\n const rejected = isRejection(result);\n if (operation !== engine.operationEpoch) return !rejected;\n if (rejected) {\n applyRejection(engine, result, sent);\n return false;\n }\n if (engine.state.serverErrors === serverErrors) applyValidationErrors(engine, {}, true);\n await afterCommit('afterSubmit', () => lifecycle.onAfterSubmit?.(values, skippedSteps));\n return true;\n } catch (error) {\n if (!dispatched && stale()) return false;\n throw error;\n } finally {\n if (operation === engine.operationEpoch) {\n engine.state.submitting = false;\n engine.notify();\n }\n }\n}\n","import { getChangedKeys } from './engine-utils';\nimport { afterCommit } from './lifecycle-error';\nimport { watchCheckedInputs, watchValues } from './pending-inputs';\nimport { applyValidationErrors, dropServerErrors, fieldsErrors, getSubmitValues, pruneOffPathErrors } from './validation-state';\nimport { includeCurrentStep, skipCurrentStep, skipTarget } from './step-skip';\nimport { reconcileStepIndex } from './step-routes';\nimport { isRejection, submitForm } from './submission';\nimport type { StepChangeContext, SubmitHandler } from './engine-options';\nimport type { EngineInternals } from './runtime-internals';\n\nfunction hasStepErrors(engine: EngineInternals): boolean {\n const step = engine.currentStep;\n if (!step) return true;\n const errors = fieldsErrors(engine, step.fields);\n if (Object.keys(errors).length === 0) return false;\n const previousErrors = engine.errors;\n engine.state.errors = { ...previousErrors, ...errors };\n engine.notify({ fieldKeys: getChangedKeys(previousErrors, engine.errors) });\n return true;\n}\n\nfunction moveTo(engine: EngineInternals, index: number): void {\n engine.validationEpoch++;\n engine.state.currentStepIndex = index;\n engine.notify({ structureChanged: true });\n}\n\nexport async function skipStep(engine: EngineInternals, submit?: SubmitHandler): Promise<boolean> {\n if (!engine.isMultiStep || engine.stepValidating || engine.submitting || !engine.currentStep?.skip) return false;\n if (skipTarget(engine)) return changeStep(engine, 'next', 'skip');\n const step = engine.currentStep;\n if (!submit || !step) return false;\n const values = engine.values;\n const errors = { ...engine.errors };\n const serverErrors = { ...engine.state.serverErrors };\n let outcome: boolean | undefined;\n skipCurrentStep(engine);\n const skippedValues = engine.values;\n const edited = watchValues(engine, skippedValues);\n const submitting = submitForm(\n engine,\n async (submitted, skipped) => {\n const result = await submit(submitted, skipped);\n const rejected = isRejection(result);\n if (!rejected || operation === engine.operationEpoch) outcome = rejected;\n return result;\n },\n true,\n );\n const operation = engine.latestOperation;\n try {\n return await submitting;\n } finally {\n if (outcome !== false && operation === engine.latestOperation && engine.values === skippedValues) {\n const steps = engine.visibleSteps;\n const kept = edited();\n const current = engine.values;\n engine.state.values = { ...values };\n for (const key of kept) {\n delete engine.values[key];\n for (const record of [errors, serverErrors])\n for (const errorKey of Object.keys(record)) if (engine.visibility.owner(errorKey) === key) delete record[errorKey];\n if (key in current) engine.values[key] = current[key];\n }\n if (outcome === undefined) engine.state.serverErrors = serverErrors;\n engine.state.errors = { ...(outcome ? {} : errors), ...engine.errors };\n engine.skipped.delete(step.id);\n dropServerErrors(engine, engine.visibility.reconcileHidden(engine.values, engine.errors));\n engine.visibility.markChanged(true, true);\n engine.state.currentStepIndex = reconcileStepIndex(steps, engine.visibleSteps, engine.currentStepIndex);\n pruneOffPathErrors(engine);\n engine.notify({ fieldKeys: Object.keys({ ...values, ...current, ...errors }), structureChanged: true, valuesChanged: true });\n }\n }\n}\n\nexport async function changeStep(\n engine: EngineInternals,\n direction: 'next' | 'back',\n reason: StepChangeContext['reason'] = direction,\n): Promise<boolean> {\n const skipping = reason === 'skip';\n if (!engine.isMultiStep || engine.stepValidating || engine.submitting) return false;\n if (!skipping && (direction === 'next' ? engine.isLastStep : engine.isFirstStep)) return false;\n const step = engine.currentStep!;\n const validating = direction === 'next' && !skipping;\n if (validating) includeCurrentStep(engine);\n if (validating && hasStepErrors(engine)) return false;\n const lifecycle = { ...engine.lifecycle };\n const validate = lifecycle.onStepValidate;\n let committed = false;\n const fromIndex = engine.currentStepIndex;\n const toIndex = fromIndex + (direction === 'next' ? 1 : -1);\n const target = skipping ? skipTarget(engine) : engine.visibleSteps[toIndex];\n if (!target) return false;\n const context: StepChangeContext = { fromStepId: step.id, toStepId: target.id, reason, values: { ...getSubmitValues(engine) } };\n const epoch = engine.validationEpoch;\n const operation = (engine.latestOperation = ++engine.operationEpoch);\n const inputsChanged = watchCheckedInputs(engine, context.values);\n const stale = () =>\n epoch !== engine.validationEpoch || operation !== engine.operationEpoch || engine.currentStep?.id !== step.id || inputsChanged();\n engine.state.stepValidating = true;\n engine.notify();\n try {\n if (stale()) return false;\n if (validating && validate) {\n const result = await validate!(step.id, context.values);\n if (stale()) return false;\n if (result && Object.keys(result).length > 0) {\n applyValidationErrors(engine, result);\n return false;\n }\n }\n if (lifecycle.onBeforeStepChange) {\n const allowed = await lifecycle.onBeforeStepChange(context);\n if (stale() || allowed === false) return false;\n }\n if (stale()) return false;\n if (validating && hasStepErrors(engine)) return false;\n committed = true;\n if (skipping) skipCurrentStep(engine);\n moveTo(engine, toIndex);\n await afterCommit('afterStepChange', () => lifecycle.onAfterStepChange?.(context));\n return true;\n } catch (error) {\n if (!committed && stale()) return false;\n throw error;\n } finally {\n if (operation === engine.operationEpoch) {\n engine.state.stepValidating = false;\n engine.notify();\n }\n }\n}\n\nexport function goToStepWithField(engine: EngineInternals, fieldKey: string): void {\n if (!engine.isMultiStep) return;\n const targetIndex = engine.visibility.findStepIndex(fieldKey, engine.values, engine.currentStepIndex);\n if (targetIndex === engine.currentStepIndex) engine.notify();\n else if (targetIndex !== null) moveTo(engine, targetIndex);\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, ShowCondition } from '../types';\nimport { conditionFields } from '../visibility/nodes';\n\ntype Conditional = { show?: ShowCondition[]; showAny?: ShowCondition[] };\n\nexport function indexConditions<T extends FormField | FormStep>(\n dependent: T,\n index: Map<string, Set<T>>,\n source: Conditional = dependent,\n): void {\n for (const field of conditionFields(source)) {\n const dependents = index.get(field) ?? new Set<T>();\n dependents.add(dependent);\n index.set(field, dependents);\n }\n}\n","import { createValues, getAllFields } from './engine-utils';\nimport { indexConditions } from './visibility-index';\nimport { createActivePath } from './step-routes';\nimport type { ValidatorFn } from '../validation';\nimport { validateFields } from '../validation';\nimport type { FormDefinition, FormField, FormGroup, FormNode, FormSection, FormStep } from '../types';\nimport { isVisible } from '../visibility';\nimport {\n conditionFields,\n isEntry,\n isGroup,\n isSection,\n itemPath,\n keepId,\n itemsOf,\n itemScope,\n shownFields,\n splitPath,\n topNodes,\n valueFields,\n} from '../visibility/nodes';\n\ninterface VisibilityCache {\n visibleSteps: FormStep[];\n currentStep: FormStep | null;\n visibleFields: FormField[];\n visibleNodes: FormNode[];\n canGoNext: boolean;\n}\n\ntype Values = Record<string, unknown>;\n\nexport interface ItemField {\n group: FormGroup;\n index: number;\n field: FormField;\n}\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 const sectionOf = new Map<FormField, FormSection>();\n const groups = allFields.filter(isGroup);\n let seeds: Values = {};\n let visibilityDirty = true;\n let canGoNextDirty = true;\n const cache: VisibilityCache = { visibleSteps: [], currentStep: null, visibleFields: [], visibleNodes: [], canGoNext: false };\n\n for (const node of topNodes(definition)) if (isSection(node)) for (const field of node.fields) sectionOf.set(field, node);\n for (const field of allFields) {\n fieldsByKey.set(field.key, [...(fieldsByKey.get(field.key) ?? []), field]);\n indexConditions(field, fieldDependents);\n const section = sectionOf.get(field);\n if (section) indexConditions(field, fieldDependents, section);\n if (isGroup(field)) for (const item of field.fields) indexConditions<FormField>(field, fieldDependents, item);\n }\n for (const step of definition.steps ?? []) {\n for (const field of valueFields(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;\n const visible = (source: FormField | FormStep, values: Values) => {\n const active = path.values(values);\n const section = sectionOf.get(source as FormField);\n return (!section || isVisible(section, active)) && isVisible(source, active);\n };\n const onPath = (field: FormField, values: Values) => {\n const step = stepOfField.get(field);\n return !step || path.steps(values).includes(step);\n };\n const activeField = (key: string, values: Values) =>\n fieldsByKey.get(key)?.find((field) => onPath(field, values) && visible(field, values));\n\n const parse = (key: string) => {\n if (fieldsByKey.has(key)) return undefined;\n for (const group of groups) {\n const parts = splitPath(group.key, key);\n if (parts) return [group.key, ...parts] as const;\n }\n return undefined;\n };\n const owner = (key: string) => parse(key)?.[0] ?? key;\n\n function itemFields(group: FormGroup, item: unknown, values: Values): FormField[] {\n const scope = itemScope(group, item, path.values(values));\n return group.fields.filter((field) => isVisible(field, scope));\n }\n\n function activeItem(key: string, values: Values): ItemField | undefined {\n const parts = parse(key);\n if (!parts) return undefined;\n const [groupKey, index, fieldKey] = parts;\n const group = activeField(groupKey, values);\n const items = itemsOf(values[groupKey]);\n if (!group || !isGroup(group) || index >= items.length) return undefined;\n const field = itemFields(group, items[index], values).find((candidate) => candidate.key === fieldKey);\n return field && { group, index, field };\n }\n\n function state(values: Values, stepIndex: number): VisibilityCache {\n if (!visibilityDirty) return cache;\n visibilityDirty = false;\n const steps = (cache.visibleSteps = isMultiStep() ? path.steps(values) : []);\n const current = (cache.currentStep = isMultiStep() ? (steps[stepIndex] ?? steps[steps.length - 1] ?? null) : null);\n const source = isMultiStep() ? (current?.fields ?? []) : (definition.fields ?? []);\n const active = path.values(values);\n cache.visibleFields = shownFields(source, active);\n cache.visibleNodes = source\n .filter((node) => isVisible(node, active))\n .map((node) => (isSection(node) ? { ...node, fields: node.fields.filter((field) => isVisible(field, active)) } : node));\n return cache;\n }\n\n function reconcileItems(values: Values, errors: Record<string, string>, cleared: Set<string>): void {\n for (const group of groups) {\n if (activeField(group.key, values) !== group) continue;\n const source = itemsOf(values[group.key]);\n const items = source.map((item, index) => {\n let result = item;\n for (let round = 0; isEntry(result) && round <= group.fields.length; round++) {\n const entry: Values = result;\n const shown = itemFields(group, entry, values);\n const hidden = group.fields.filter((field) => !shown.includes(field) && entry[field.key] !== undefined);\n if (!hidden.length) break;\n result = keepId(entry, { ...entry });\n for (const { key } of hidden) {\n delete (result as Values)[key];\n cleared.add(itemPath(group.key, index, key));\n }\n }\n return result;\n });\n if (items.some((item, index) => item !== source[index])) values[group.key] = items;\n for (const key of Object.keys(errors)) {\n const [index, field] = splitPath(group.key, key) ?? [];\n if (index === undefined || (index < items.length && itemFields(group, items[index], values).some((item) => item.key === field)))\n continue;\n delete errors[key];\n cleared.add(key);\n }\n }\n path.invalidate();\n }\n\n return {\n allFields,\n groups,\n conditionValues: path.values,\n state,\n activeField,\n activeItem,\n itemFields,\n owner,\n parse,\n\n markChanged(structureChanged: boolean, valuesChanged: boolean): void {\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 ? validateFields(step.fields, 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 key = owner(fieldKey);\n const target = state(values, stepIndex).visibleSteps.findIndex((step) => valueFields(step.fields).some((field) => field.key === key));\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 seed(values: Values): void {\n seeds = { ...seeds, ...values };\n },\n\n reconcileHidden(values: Values, errors: Record<string, string>, initial = false): Set<string> {\n if (initial) seeds = { ...values };\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 mark = (key: string) => {\n path.invalidate();\n cleared.add(key);\n if (queued.has(key)) return;\n queued.add(key);\n queue.push(key);\n };\n const clear = (key: string) => {\n delete values[key];\n delete errors[key];\n for (const errorKey of Object.keys(errors)) if (owner(errorKey) === key) delete errors[errorKey];\n mark(key);\n };\n const update = (field: FormField, shown: boolean) => {\n if (!shown) {\n if (held(field.key)) clear(field.key);\n } else if (field.type === 'hidden' && !held(field.key) && seeds[field.key] !== undefined && visible(field, values)) {\n values[field.key] = seeds[field.key];\n mark(field.key);\n } else if (isGroup(field) && field.defaultItems! > 0 && !held(field.key) && visible(field, values)) {\n values[field.key] = createValues([field])[field.key];\n mark(field.key);\n }\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) ?? []) if (onPath(field, values)) update(field, visible(field, values));\n for (const step of stepDependents.get(key) ?? []) {\n for (const field of valueFields(step.fields)) update(field, visible(step, values));\n }\n }\n if (groups.length) reconcileItems(values, errors, cleared);\n return cleared;\n },\n };\n}\n","import type { ValidatorFn } from '../validation';\nimport { messageResolver, type ResolveMessage } from '../validation/default-messages';\nimport type { FormDefinition, FormField, FormNode, FormStep } from '../types';\nimport type { FormEngineOptions, SubmitHandler } from './engine-options';\nimport { createValues, initialState } from './engine-utils';\nimport { addItem, groupItems, removeItem, setItemValue, type GroupItem } from './groups';\nimport { changeStep, goToStepWithField, skipStep } from './navigation';\nimport type { EngineState, RuntimeNotifyOptions } from './runtime-internals';\nimport { createSubscriptions } from './subscriptions';\nimport { applyValidationErrors, errorKeys, getSubmitValues, resetEngine, validateForm, validateOne } from './validation-state';\nimport { submitForm } from './submission';\nimport { assertDefinition } from './warnings';\nimport { writeValue } from './write-value';\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 latestOperation = 0;\n private readonly lifecycle: FormEngineOptions;\n\n private readonly validators: Record<string, ValidatorFn>;\n private readonly messages: ResolveMessage;\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.messages = messageResolver(options?.messages, definition.messages);\n this.visibility = createVisibility(definition);\n const values = createValues(this.visibility.allFields, initialValues as Record<string, unknown> | undefined);\n this.state = initialState(values);\n this.visibility.reconcileHidden(values, this.state.errors, true);\n }\n\n get values(): Readonly<Partial<TValues>> {\n return this.state.values as Partial<TValues>;\n }\n get errors(): Readonly<Record<string, string>> {\n return this.state.errors;\n }\n get topLevelErrors(): readonly string[] {\n const { errors, topLevelErrors, values } = this.state;\n return [\n ...topLevelErrors,\n ...this.visibility.allFields.flatMap(\n (field) =>\n (field.type === 'hidden' &&\n errors[field.key] &&\n (this.visibility.activeField(field.key, values) ?? field) === field &&\n errors[field.key]) ||\n [],\n ),\n ];\n }\n get currentStepIndex(): number {\n return this.state.currentStepIndex;\n }\n get fieldLoading(): Readonly<Record<string, boolean>> {\n return this.state.fieldLoading;\n }\n get stepValidating(): boolean {\n return this.state.stepValidating;\n }\n get submitting(): boolean {\n return this.state.submitting;\n }\n\n get isMultiStep(): boolean {\n return !!this.definition.steps?.length;\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 visibleNodes(): FormNode[] {\n return this.view.visibleNodes;\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[]> = Object.create(null);\n for (const step of this.visibleSteps) {\n const keys = errorKeys(step.fields, this.errors, this.state.values);\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 path = this.visibility.parse(key);\n if (path) setItemValue(this as never, ...path, value);\n else writeValue(this as never, key, value);\n }\n\n items(key: string): GroupItem[] {\n return groupItems(this as never, key);\n }\n addItem(key: string): boolean {\n return addItem(this as never, key);\n }\n removeItem(key: string, index: number): boolean {\n return removeItem(this as never, key, index);\n }\n setItemValue(key: string, index: number, field: string, value: unknown): void {\n setItemValue(this as never, key, index, field, value);\n }\n\n setErrors(errors: Record<string, string>): void {\n applyValidationErrors(this as never, 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> {\n return this.advance('next');\n }\n back(): Promise<boolean> {\n return changeStep(this as never, 'back');\n }\n skip(submit?: SubmitHandler): Promise<boolean> {\n return skipStep(this as never, submit);\n }\n submit(handler: SubmitHandler): Promise<boolean> {\n return submitForm(this as never, handler);\n }\n isStepSkipped(stepId: string): boolean {\n return this.skipped.has(stepId);\n }\n validate(): Record<string, string> {\n return validateForm(this as never);\n }\n validateField(key: string): string | null {\n return validateOne(this as never, key);\n }\n getSubmitValues(): Partial<TValues> {\n return getSubmitValues(this as never) as Partial<TValues>;\n }\n goToStepWithField(key: string): void {\n goToStepWithField(this as never, key);\n }\n reset(values?: Record<string, unknown>): void {\n resetEngine(this as never, values);\n }\n\n private advance(reason: 'next' | 'autoAdvance'): Promise<boolean> {\n return changeStep(this as never, 'next', reason);\n }\n\n private get view() {\n return this.visibility.state(this.state.values, this.currentStepIndex);\n }\n\n private notify(options: RuntimeNotifyOptions = {}): void {\n this.visibility.markChanged(!!options.structureChanged, !!options.valuesChanged);\n this.subscriptions.notify(options);\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {r,s,q,g as g$1,f}from'./chunk-5WADJMJJ.js';var S=(e,t)=>t.type!=="hidden"&&e[t.key]!==void 0;function c(e){return r(s(e))}var k=e=>({values:e,errors:{},topLevelErrors:[],n:{},g:[],currentStepIndex:0,fieldLoading:{},stepValidating:false,submitting:false});function m(e,t){let r={};for(let n of e)n.defaultValue!==void 0?r[n.key]=n.defaultValue:q(n)&&n.defaultItems>0&&(r[n.key]=Array.from({length:n.defaultItems},()=>m(n.fields)));let i=t??{};for(let n of Object.keys(i))n!=="__proto__"&&(r[n]=i[n]);return r}function h(e,t){let r=new Set([...Object.keys(e),...Object.keys(t)]);return new Set([...r].filter(i=>!Object.is(e[i],t[i])))}var p=["referrer","page","pageTitle","language","timezone","device","country"];function g({source:e},t){if(typeof e=="object"&&e!==null)return typeof e.query=="string"?new URLSearchParams(t.search??"").get(e.query):void 0;if(e==="page"||e==="referrer"){let r=new URL((e==="page"?t.href:t.referrer)??"");return r.origin==="null"?void 0:r.origin+r.pathname}return e!==void 0&&p.includes(e)?t[e]:void 0}function y(e,t){let r;try{r=g(e,t);}catch{return}if(typeof r!="string")return;let i=e.validation?.maxLength,n=typeof i=="number"&&i>0?Math.min(i,f):g$1;return r.trim().slice(0,n).trim()||void 0}function E(e,t,r){let i={};for(let n of c(e)){let{key:o}=n;if(n.type!=="hidden"||n.source===void 0||(r?.[o]??"")!==""||Object.prototype.hasOwnProperty.call(i,o))continue;let d=y(n,t);d!==void 0&&(i[o]=d);}return i}export{S as a,c as b,k as c,m as d,h as e,p as f,E as g};//# sourceMappingURL=chunk-QVA6DLYS.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-QVA6DLYS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/engine/engine-utils.ts","../src/sources/index.ts"],"names":["shownError","errors","field","getAllFields","definition","valueFields","topNodes","initialState","values","serverErrors","serverFormErrors","createValues","fields","initialValues","isGroup","source","key","getChangedKeys","previous","next","keys","SOURCE_NAMES","read","context","url","attempt","value","limit","max","MAX_STRING_LENGTH","MAX_HIDDEN_LENGTH","resolveSources"],"mappings":"mDAIO,IAAMA,EAAa,CAACC,CAAAA,CAAgCC,IAAqBA,CAAAA,CAAM,IAAA,GAAS,UAAYD,CAAAA,CAAOC,CAAAA,CAAM,GAAG,CAAA,GAAM,OAE1H,SAASC,CAAAA,CAAaC,EAAyC,CACpE,OAAOC,EAAYC,CAAAA,CAASF,CAAU,CAAC,CACzC,CAEO,IAAMG,CAAAA,CAAgBC,IAAkD,CAC7E,MAAA,CAAAA,EACA,MAAA,CAAQ,EAAC,CACT,cAAA,CAAgB,EAAC,CACjBC,CAAAA,CAAc,EAAC,CACfC,CAAAA,CAAkB,EAAC,CACnB,gBAAA,CAAkB,CAAA,CAClB,YAAA,CAAc,EAAC,CACf,cAAA,CAAgB,MAChB,UAAA,CAAY,KACd,GAEO,SAASC,CAAAA,CAAaC,CAAAA,CAAqBC,CAAAA,CAAkE,CAClH,IAAML,CAAAA,CAAkC,EAAC,CACzC,IAAA,IAAWN,KAASU,CAAAA,CACdV,CAAAA,CAAM,YAAA,GAAiB,MAAA,CAAWM,EAAON,CAAAA,CAAM,GAAG,EAAIA,CAAAA,CAAM,YAAA,CACvDY,EAAQZ,CAAK,CAAA,EAAKA,CAAAA,CAAM,YAAA,CAAgB,IAC/CM,CAAAA,CAAON,CAAAA,CAAM,GAAG,CAAA,CAAI,KAAA,CAAM,KAAK,CAAE,MAAA,CAAQA,CAAAA,CAAM,YAAc,EAAG,IAAMS,CAAAA,CAAaT,EAAM,MAAM,CAAC,GAEpG,IAAMa,CAAAA,CAASF,CAAAA,EAAiB,GAChC,IAAA,IAAWG,CAAAA,IAAO,OAAO,IAAA,CAAKD,CAAM,EAC9BC,CAAAA,GAAQ,WAAA,GAAaR,CAAAA,CAAOQ,CAAG,EAAID,CAAAA,CAAOC,CAAG,GAEnD,OAAOR,CACT,CAEO,SAASS,CAAAA,CAAeC,CAAAA,CAAmCC,CAAAA,CAA4C,CAC5G,IAAMC,CAAAA,CAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAKF,CAAQ,CAAA,CAAG,GAAG,MAAA,CAAO,IAAA,CAAKC,CAAI,CAAC,CAAC,EACrE,OAAO,IAAI,GAAA,CAAI,CAAC,GAAGC,CAAI,CAAA,CAAE,OAAQJ,CAAAA,EAAQ,CAAC,OAAO,EAAA,CAAGE,CAAAA,CAASF,CAAG,CAAA,CAAGG,EAAKH,CAAG,CAAC,CAAC,CAAC,CAChF,CCnCO,IAAMK,CAAAA,CAA2C,CAAC,UAAA,CAAY,MAAA,CAAQ,YAAa,UAAA,CAAY,UAAA,CAAY,SAAU,SAAS,EAIrI,SAASC,CAAAA,CAAK,CAAE,MAAA,CAAAP,CAAO,EAAcQ,CAAAA,CAAiC,CACpE,GAAI,OAAOR,CAAAA,EAAW,UAAYA,CAAAA,GAAW,IAAA,CAC3C,OAAO,OAAOA,EAAO,KAAA,EAAU,QAAA,CAAW,IAAI,eAAA,CAAgBQ,CAAAA,CAAQ,QAAU,EAAE,CAAA,CAAE,GAAA,CAAIR,CAAAA,CAAO,KAAK,CAAA,CAAI,MAAA,CAE1G,GAAIA,CAAAA,GAAW,MAAA,EAAUA,IAAW,UAAA,CAAY,CAC9C,IAAMS,CAAAA,CAAM,IAAI,GAAA,CAAA,CAAKT,CAAAA,GAAW,OAASQ,CAAAA,CAAQ,IAAA,CAAOA,EAAQ,QAAA,GAAa,EAAE,CAAA,CAC/E,OAAOC,EAAI,MAAA,GAAW,MAAA,CAAS,OAAYA,CAAAA,CAAI,MAAA,CAASA,EAAI,QAC9D,CACA,OAAOT,CAAAA,GAAW,QAAaM,CAAAA,CAAa,QAAA,CAASN,CAAM,CAAA,CAAIQ,CAAAA,CAAQR,CAAM,CAAA,CAAI,MACnF,CAEA,SAASU,EAAQvB,CAAAA,CAAkBqB,CAAAA,CAA4C,CAC7E,IAAIG,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAQJ,CAAAA,CAAKpB,CAAAA,CAAOqB,CAAO,EAC7B,CAAA,KAAQ,CACN,MACF,CACA,GAAI,OAAOG,CAAAA,EAAU,QAAA,CAAU,OAC/B,IAAMC,CAAAA,CAAQzB,CAAAA,CAAM,YAAY,SAAA,CAC1B0B,CAAAA,CAAM,OAAOD,CAAAA,EAAU,QAAA,EAAYA,CAAAA,CAAQ,CAAA,CAAI,KAAK,GAAA,CAAIA,CAAAA,CAAOE,CAAiB,CAAA,CAAIC,GAAAA,CAC1F,OAAOJ,CAAAA,CAAM,IAAA,EAAK,CAAE,KAAA,CAAM,EAAGE,CAAG,CAAA,CAAE,MAAK,EAAK,MAC9C,CAEO,SAASG,CAAAA,CACd3B,CAAAA,CACAmB,CAAAA,CACAV,EACwB,CACxB,IAAML,EAAiC,EAAC,CACxC,QAAWN,CAAAA,IAASC,CAAAA,CAAaC,CAAU,CAAA,CAAG,CAC5C,GAAM,CAAE,IAAAY,CAAI,CAAA,CAAId,EAChB,GACEA,CAAAA,CAAM,IAAA,GAAS,QAAA,EACfA,EAAM,MAAA,GAAW,MAAA,EAAA,CAChBW,IAAgBG,CAAG,CAAA,EAAK,MAAQ,EAAA,EACjC,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,KAAKR,CAAAA,CAAQQ,CAAG,EAEhD,SACF,IAAMU,EAAQD,CAAAA,CAAQvB,CAAAA,CAAOqB,CAAO,CAAA,CAChCG,CAAAA,GAAU,SAAWlB,CAAAA,CAAOQ,CAAG,EAAIU,CAAAA,EACzC,CACA,OAAOlB,CACT","file":"chunk-QVA6DLYS.js","sourcesContent":["import type { FormDefinition, FormField } from '../types';\nimport type { EngineState } from './runtime-internals';\nimport { isGroup, topNodes, valueFields } from '../visibility/nodes';\n\nexport const shownError = (errors: Record<string, string>, field: FormField) => field.type !== 'hidden' && errors[field.key] !== undefined;\n\nexport function getAllFields(definition: FormDefinition): FormField[] {\n return valueFields(topNodes(definition));\n}\n\nexport const initialState = (values: Record<string, unknown>): EngineState => ({\n values,\n errors: {},\n topLevelErrors: [],\n serverErrors: {},\n serverFormErrors: [],\n currentStepIndex: 0,\n fieldLoading: {},\n stepValidating: false,\n submitting: false,\n});\n\nexport function createValues(fields: FormField[], initialValues?: Record<string, unknown>): Record<string, unknown> {\n const values: Record<string, unknown> = {};\n for (const field of fields) {\n if (field.defaultValue !== undefined) values[field.key] = field.defaultValue;\n else if (isGroup(field) && field.defaultItems! > 0)\n values[field.key] = Array.from({ length: field.defaultItems! }, () => createValues(field.fields));\n }\n const source = initialValues ?? {};\n for (const key of Object.keys(source)) {\n if (key !== '__proto__') values[key] = source[key];\n }\n return values;\n}\n\nexport function getChangedKeys(previous: Record<string, unknown>, next: Record<string, unknown>): Set<string> {\n const keys = new Set([...Object.keys(previous), ...Object.keys(next)]);\n return new Set([...keys].filter((key) => !Object.is(previous[key], next[key])));\n}\n","import { getAllFields } from '../engine/engine-utils';\nimport type { FieldSourceName, FormDefinition, FormField } from '../types';\nimport { MAX_HIDDEN_LENGTH, MAX_STRING_LENGTH } from '../validation/type-checks';\n\nexport const SOURCE_NAMES: readonly FieldSourceName[] = ['referrer', 'page', 'pageTitle', 'language', 'timezone', 'device', 'country'];\n\nexport type SourceContext = Partial<Record<Exclude<FieldSourceName, 'page'> | 'search' | 'href', string>>;\n\nfunction read({ source }: FormField, context: SourceContext): unknown {\n if (typeof source === 'object' && source !== null) {\n return typeof source.query === 'string' ? new URLSearchParams(context.search ?? '').get(source.query) : undefined;\n }\n if (source === 'page' || source === 'referrer') {\n const url = new URL((source === 'page' ? context.href : context.referrer) ?? '');\n return url.origin === 'null' ? undefined : url.origin + url.pathname;\n }\n return source !== undefined && SOURCE_NAMES.includes(source) ? context[source] : undefined;\n}\n\nfunction attempt(field: FormField, context: SourceContext): string | undefined {\n let value: unknown;\n try {\n value = read(field, context);\n } catch {\n return undefined;\n }\n if (typeof value !== 'string') return undefined;\n const limit = field.validation?.maxLength;\n const max = typeof limit === 'number' && limit > 0 ? Math.min(limit, MAX_STRING_LENGTH) : MAX_HIDDEN_LENGTH;\n return value.trim().slice(0, max).trim() || undefined;\n}\n\nexport function resolveSources(\n definition: FormDefinition,\n context: SourceContext,\n initialValues?: Record<string, unknown>,\n): Record<string, string> {\n const values: Record<string, string> = {};\n for (const field of getAllFields(definition)) {\n const { key } = field;\n if (\n field.type !== 'hidden' ||\n field.source === undefined ||\n (initialValues?.[key] ?? '') !== '' ||\n Object.prototype.hasOwnProperty.call(values, key)\n )\n continue;\n const value = attempt(field, context);\n if (value !== undefined) values[key] = value;\n }\n return values;\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var n={form:["title","description"],step:["title","description"],section:["title","description"],group:["label","helperText","itemLabel","addLabel","removeLabel"],field:["label","placeholder","helperText"],option:["label"],action:["label"],validation:["required","minLength","maxLength","min","max","pattern","matchField"]};function r(o,t){let e=o[t];return t==="required"?!!e:e!==void 0&&e!==false&&e!==""}var i=Object.freeze({continue:"Continue",back:"Back",stepOf:"Step {current} of {total}",errorSummary:"Check these answers",addItem:"Add",removeItem:"Remove",itemLabel:"{label} {index}",itemAdded:"{item} added",itemRemoved:"{item} removed",removeItemNamed:"{label} {item}",removeItemPrompt:"Remove {item}?",removeItemBody:"This removes {item} and its answers. This cannot be undone.",cancel:"Cancel"});export{n as a,r as b,i as c};//# sourceMappingURL=chunk-REIX6ART.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-REIX6ART.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n/nodes.ts"],"names":["SLOTS","hasRule","node","slot","value","DEFAULT_LABELS"],"mappings":"AAIO,IAAMA,CAAAA,CAA6C,CACxD,IAAA,CAAM,CAAC,QAAS,aAAa,CAAA,CAC7B,IAAA,CAAM,CAAC,OAAA,CAAS,aAAa,EAC7B,OAAA,CAAS,CAAC,OAAA,CAAS,aAAa,CAAA,CAChC,KAAA,CAAO,CAAC,OAAA,CAAS,YAAA,CAAc,WAAA,CAAa,UAAA,CAAY,aAAa,CAAA,CACrE,MAAO,CAAC,OAAA,CAAS,cAAe,YAAY,CAAA,CAC5C,OAAQ,CAAC,OAAO,CAAA,CAChB,MAAA,CAAQ,CAAC,OAAO,EAChB,UAAA,CAAY,CAAC,UAAA,CAAY,WAAA,CAAa,WAAA,CAAa,KAAA,CAAO,MAAO,SAAA,CAAW,YAAY,CAC1F,EAIO,SAASC,CAAAA,CAAQC,EAAaC,CAAAA,CAAuB,CAC1D,IAAMC,CAAAA,CAAQF,CAAAA,CAAKC,CAAI,CAAA,CACvB,OAAOA,CAAAA,GAAS,UAAA,CAAa,CAAC,CAACC,EAAQA,CAAAA,GAAU,MAAA,EAAaA,CAAAA,GAAU,KAAA,EAASA,CAAAA,GAAU,EAC7F,CAEO,IAAMC,CAAAA,CAAqD,MAAA,CAAO,MAAA,CAAO,CAC9E,QAAA,CAAU,WACV,IAAA,CAAM,MAAA,CACN,OAAQ,2BAAA,CACR,YAAA,CAAc,sBACd,OAAA,CAAS,KAAA,CACT,UAAA,CAAY,QAAA,CACZ,SAAA,CAAW,iBAAA,CACX,UAAW,cAAA,CACX,WAAA,CAAa,gBAAA,CACb,eAAA,CAAiB,gBAAA,CACjB,gBAAA,CAAkB,iBAClB,cAAA,CAAgB,6DAAA,CAChB,MAAA,CAAQ,QACV,CAAC","file":"chunk-REIX6ART.js","sourcesContent":["import type { LabelKey } from '../types';\n\nexport type NodeKind = 'form' | 'step' | 'section' | 'field' | 'group' | 'option' | 'action' | 'validation';\n\nexport const SLOTS: Record<NodeKind, readonly string[]> = {\n form: ['title', 'description'],\n step: ['title', 'description'],\n section: ['title', 'description'],\n group: ['label', 'helperText', 'itemLabel', 'addLabel', 'removeLabel'],\n field: ['label', 'placeholder', 'helperText'],\n option: ['label'],\n action: ['label'],\n validation: ['required', 'minLength', 'maxLength', 'min', 'max', 'pattern', 'matchField'],\n};\n\nexport type Entry = Record<string, unknown>;\n\nexport function hasRule(node: Entry, slot: string): boolean {\n const value = node[slot];\n return slot === 'required' ? !!value : value !== undefined && value !== false && value !== '';\n}\n\nexport const DEFAULT_LABELS: Readonly<Record<LabelKey, string>> = Object.freeze({\n continue: 'Continue',\n back: 'Back',\n stepOf: 'Step {current} of {total}',\n errorSummary: 'Check these answers',\n addItem: 'Add',\n removeItem: 'Remove',\n itemLabel: '{label} {index}',\n itemAdded: '{item} added',\n itemRemoved: '{item} removed',\n removeItemNamed: '{label} {item}',\n removeItemPrompt: 'Remove {item}?',\n removeItemBody: 'This removes {item} and its answers. This cannot be undone.',\n cancel: 'Cancel',\n});\n"]}
|