@formhaus/core 0.11.1 → 0.11.3

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.
@@ -1,5 +1,5 @@
1
- import { f as FormDefinition } from './definition-Bufih_Bx.js';
2
- import { D as DefinitionIssue } from './validate-field-glVVoN3E.js';
1
+ import { f as FormDefinition } from './definition-PdtKhxBh.js';
2
+ import { D as DefinitionIssue } from './validate-field-dZd5yZAp.js';
3
3
 
4
4
  interface CheckDefinitionOptions {
5
5
  validators?: Record<string, unknown>;
@@ -1,3 +1,3 @@
1
- var M="This form was updated. Please review your answers and submit again.",V="Please answer again.",c={message:"Something went wrong. Try again.",action:"retry"},v={message:"Could not send. Try again.",action:"retry"},l={message:"Could not send. Reload the page and try again.",action:"reload"},y={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},E={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 w(e,n=""){let t=y[n]??y[E[e]??""];return t||(e>=500?c:v)}var d=class extends Error{constructor(n,t,o,r,i){let s=w(n,t);super(s.message),this.name="CloudError",this.status=n,this.code=t,this.errors=o,this.version=r,this.action=s.action,this.cause=i;}get retryable(){return this.action==="retry"}};function h(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var x=new Map([["Form paused","paused"],["Form not found","not_found"],["Form expired","expired"],["internal error","internal"]]);function k(e,n="network"){return new d(0,n,void 0,void 0,e)}async function f(e){try{return await e.json()}catch(n){throw new d(e.status,"invalid_response",void 0,void 0,n)}}async function m(e){let n=await e.json().catch(()=>null);if(!h(n))return new d(e.status,"unknown");let t=h(n.errors)?n.errors:void 0,o=typeof n.version=="number"&&Number.isInteger(n.version)?n.version:void 0,r=typeof n.error=="string"?x.get(n.error)??n.error:"unknown";return new d(e.status,r,t,o)}var A=["Formhaus-Form-Version","Formhaus-Version"];function g(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function b(e){let n=Number(e);return e!==null&&e!==""&&Number.isInteger(n)&&n>0?n:void 0}function C(e){for(let n of A){let t=b(e.headers?.get(n));if(t!==void 0)return t}}function u(e){return typeof e=="string"&&e!==""?e:void 0}function F(e){if(!g(e))return {};let n=u(e.redirectUrl);return {...u(e.successMessage)&&{successMessage:u(e.successMessage)},...n&&/^https?:\/\//i.test(n)&&{redirectUrl:n},...typeof e.allowAnother=="boolean"&&{allowAnother:e.allowAnother}}}function _(e,n){if(!g(e))throw new d(n.status,"invalid_response");if(!("definition"in e))return {definition:e,version:C(n),settings:{}};if(!g(e.definition))throw new d(n.status,"invalid_response");return {definition:e.definition,version:b(e.version)??C(n),settings:F(e.settings),...u(e.renderToken)&&{renderToken:u(e.renderToken)}}}function S(){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 D="https://api.formhaus.dev",p="core=0.11.1";function R({id:e,apiBase:n=D}){return `${n.replace(/\/+$/,"")}/f/${encodeURIComponent(e)}`}var I=15e3,O=3e4;async function T(e,n,t={},o){let r=new AbortController,i=()=>r.abort(),s=setTimeout(i,n);o?.aborted&&i(),o?.addEventListener("abort",i);try{return await fetch(e,{...t,signal:r.signal})}catch(a){throw o?.aborted?a:k(a,r.signal.aborted?"timeout":"network")}finally{clearTimeout(s),o?.removeEventListener("abort",i);}}async function U(e,n,t){let o=t===void 0?p:`${p}&v=${t}`,r=await T(`${R(e)}/form?${o}`,I,{},n);if(!r.ok)throw await m(r);return _(await f(r),r)}async function H(e,n){return (await U(e,n)).definition}function z(e){let n=null;return async(t,o=[])=>{let r=JSON.stringify({...e.extraBody?.(),values:t,skippedSteps:o,version:e.version,_fh_rt:e.renderToken,...e.firstRenderToken&&{_fh_rt_first:e.firstRenderToken}});n?.body!==r&&(n={body:r,key:S()});let i=await T(`${R(e)}?${p}`,O,{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":n.key},body:r});if(!i.ok)throw await m(i);let s=await f(i);return n=null,s}}var $=new Set(["password","file"]),P=10080*60*1e3;function X(e,n){let t=[...e.fields??[],...(e.steps??[]).flatMap(r=>r.fields)],o={};for(let r of t)!$.has(r.type)&&n[r.key]!==void 0&&(o[r.key]=n[r.key]);return o}var N=()=>globalThis.sessionStorage;function Z(e=P,n=N){let t=r=>`formhaus:draft:${r}`,o=(r,i)=>{try{let s=n();return s?r(s):i}catch{return i}};return {load:(r,i)=>o(s=>{let a=JSON.parse(s.getItem(t(r))??"null");return a&&a.version===i&&Date.now()-a.savedAt<e?a.values:null},null),save:(r,i,s)=>o(a=>a.setItem(t(r),JSON.stringify({version:i,savedAt:Date.now(),values:s})),void 0),clear:r=>o(i=>i.removeItem(t(r)),void 0)}}
2
- export{M as a,V as b,w as c,d,k as e,F as f,U as g,H as h,z as i,X as j,Z as k};//# sourceMappingURL=chunk-IVSO5ANU.js.map
3
- //# sourceMappingURL=chunk-IVSO5ANU.js.map
1
+ var M="This form was updated. Please review your answers and submit again.",V="Please answer again.",c={message:"Something went wrong. Try again.",action:"retry"},v={message:"Could not send. Try again.",action:"retry"},l={message:"Could not send. Reload the page and try again.",action:"reload"},y={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},E={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 w(e,n=""){let t=y[n]??y[E[e]??""];return t||(e>=500?c:v)}var d=class extends Error{constructor(n,t,o,r,i){let s=w(n,t);super(s.message),this.name="CloudError",this.status=n,this.code=t,this.errors=o,this.version=r,this.action=s.action,this.cause=i;}get retryable(){return this.action==="retry"}};function h(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var x=new Map([["Form paused","paused"],["Form not found","not_found"],["Form expired","expired"],["internal error","internal"]]);function k(e,n="network"){return new d(0,n,void 0,void 0,e)}async function f(e){try{return await e.json()}catch(n){throw new d(e.status,"invalid_response",void 0,void 0,n)}}async function m(e){let n=await e.json().catch(()=>null);if(!h(n))return new d(e.status,"unknown");let t=h(n.errors)?n.errors:void 0,o=typeof n.version=="number"&&Number.isInteger(n.version)?n.version:void 0,r=typeof n.error=="string"?x.get(n.error)??n.error:"unknown";return new d(e.status,r,t,o)}var A=["Formhaus-Form-Version","Formhaus-Version"];function g(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function b(e){let n=Number(e);return e!==null&&e!==""&&Number.isInteger(n)&&n>0?n:void 0}function C(e){for(let n of A){let t=b(e.headers?.get(n));if(t!==void 0)return t}}function u(e){return typeof e=="string"&&e!==""?e:void 0}function F(e){if(!g(e))return {};let n=u(e.redirectUrl);return {...u(e.successMessage)&&{successMessage:u(e.successMessage)},...n&&/^https?:\/\//i.test(n)&&{redirectUrl:n},...typeof e.allowAnother=="boolean"&&{allowAnother:e.allowAnother}}}function _(e,n){if(!g(e))throw new d(n.status,"invalid_response");if(!("definition"in e))return {definition:e,version:C(n),settings:{}};if(!g(e.definition))throw new d(n.status,"invalid_response");return {definition:e.definition,version:b(e.version)??C(n),settings:F(e.settings),...u(e.renderToken)&&{renderToken:u(e.renderToken)}}}function S(){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 D="https://api.formhaus.dev",p="core=0.11.3";function R({id:e,apiBase:n=D}){return `${n.replace(/\/+$/,"")}/f/${encodeURIComponent(e)}`}var I=15e3,O=3e4;async function T(e,n,t={},o){let r=new AbortController,i=()=>r.abort(),s=setTimeout(i,n);o?.aborted&&i(),o?.addEventListener("abort",i);try{return await fetch(e,{...t,signal:r.signal})}catch(a){throw o?.aborted?a:k(a,r.signal.aborted?"timeout":"network")}finally{clearTimeout(s),o?.removeEventListener("abort",i);}}async function U(e,n,t){let o=t===void 0?p:`${p}&v=${t}`,r=await T(`${R(e)}/form?${o}`,I,{},n);if(!r.ok)throw await m(r);return _(await f(r),r)}async function H(e,n){return (await U(e,n)).definition}function z(e){let n=null;return async(t,o=[])=>{let r=JSON.stringify({...e.extraBody?.(),values:t,skippedSteps:o,version:e.version,_fh_rt:e.renderToken,...e.firstRenderToken&&{_fh_rt_first:e.firstRenderToken}});n?.body!==r&&(n={body:r,key:S()});let i=await T(`${R(e)}?${p}`,O,{method:"POST",headers:{"Content-Type":"application/json","Idempotency-Key":n.key},body:r});if(!i.ok)throw await m(i);let s=await f(i);return n=null,s}}var $=new Set(["password","file"]),P=10080*60*1e3;function X(e,n){let t=[...e.fields??[],...(e.steps??[]).flatMap(r=>r.fields)],o={};for(let r of t)!$.has(r.type)&&n[r.key]!==void 0&&(o[r.key]=n[r.key]);return o}var N=()=>globalThis.sessionStorage;function Z(e=P,n=N){let t=r=>`formhaus:draft:${r}`,o=(r,i)=>{try{let s=n();return s?r(s):i}catch{return i}};return {load:(r,i)=>o(s=>{let a=JSON.parse(s.getItem(t(r))??"null");return a&&a.version===i&&Date.now()-a.savedAt<e?a.values:null},null),save:(r,i,s)=>o(a=>a.setItem(t(r),JSON.stringify({version:i,savedAt:Date.now(),values:s})),void 0),clear:r=>o(i=>i.removeItem(t(r)),void 0)}}
2
+ export{M as a,V as b,w as c,d,k as e,F as f,U as g,H as h,z as i,X as j,Z as k};//# sourceMappingURL=chunk-HRT3TFHT.js.map
3
+ //# sourceMappingURL=chunk-HRT3TFHT.js.map
@@ -1 +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","draftValues","definition","fields","step","kept","field","sessionStorageOf","sessionDraftStore","maxAge","storageOf","key","attempt","action","fallback","storage","draft"],"mappings":"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","file":"chunk-IVSO5ANU.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.dev';\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({ ...options.extraBody?.(), values, skippedSteps, version: options.version, _fh_rt: options.renderToken, ...(options.firstRenderToken && { _fh_rt_first: options.firstRenderToken }) });\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 } from '../types';\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']);\nconst WEEK = 7 * 24 * 60 * 60 * 1000;\n\nexport function draftValues(definition: FormDefinition, values: Record<string, unknown>): Record<string, unknown> {\n const fields = [...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)];\n const kept: Record<string, unknown> = {};\n for (const field of fields) {\n if (!SENSITIVE.has(field.type) && values[field.key] !== undefined) kept[field.key] = values[field.key];\n }\n return kept;\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) => attempt((storage) => {\n const draft = JSON.parse(storage.getItem(key(id)) ?? 'null') as { version?: number; savedAt: number; values: Record<string, unknown> } | null;\n return draft && draft.version === version && Date.now() - draft.savedAt < maxAge ? draft.values : null;\n }, null),\n save: (id, version, values) => 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"]}
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","draftValues","definition","fields","step","kept","field","sessionStorageOf","sessionDraftStore","maxAge","storageOf","key","attempt","action","fallback","storage","draft"],"mappings":"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","file":"chunk-HRT3TFHT.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.dev';\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({ ...options.extraBody?.(), values, skippedSteps, version: options.version, _fh_rt: options.renderToken, ...(options.firstRenderToken && { _fh_rt_first: options.firstRenderToken }) });\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 } from '../types';\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']);\nconst WEEK = 7 * 24 * 60 * 60 * 1000;\n\nexport function draftValues(definition: FormDefinition, values: Record<string, unknown>): Record<string, unknown> {\n const fields = [...(definition.fields ?? []), ...(definition.steps ?? []).flatMap((step) => step.fields)];\n const kept: Record<string, unknown> = {};\n for (const field of fields) {\n if (!SENSITIVE.has(field.type) && values[field.key] !== undefined) kept[field.key] = values[field.key];\n }\n return kept;\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) => attempt((storage) => {\n const draft = JSON.parse(storage.getItem(key(id)) ?? 'null') as { version?: number; savedAt: number; values: Record<string, unknown> } | null;\n return draft && draft.version === version && Date.now() - draft.savedAt < maxAge ? draft.values : null;\n }, null),\n save: (id, version, values) => 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,3 @@
1
+ var j=class extends Error{constructor(e,n){super(`The action completed, but ${e} failed: ${n instanceof Error?n.message:String(n)}`);this.phase=e;this.committed=true;this.name="FormLifecycleError",this.cause=n;}};async function R(t,r){try{await r();}catch(e){throw new j(t,e)}}var d={email:"Enter a valid email",number:"Enter a number",boolean:"Must be true or false",option:"Select one of the available options",options:"Must be a list of available options",string:"Must be text",date:"Enter a valid date",datetime:"Enter a valid date and time",file:"Must be a file reference",value:"Invalid value"};function f(t,r){switch(t){case "required":return "This field is required";case "minLength":return `Must be at least ${r?.min} ${r?.unit??"characters"}`;case "maxLength":return `Must be at most ${r?.max} ${r?.unit??"characters"}`;case "min":return `Must be at least ${r?.min}`;case "max":return `Must be at most ${r?.max}`;case "pattern":return "Invalid format";case "matchField":return "Fields must match";default:return "Invalid value"}}var Ct=["eq","neq","in","notIn","notEmpty","gt","gte","lt","lte"];function E(t){return t==null||t===""||Array.isArray(t)&&!t.length}function st(t){let r=typeof t=="string"&&t.trim()!==""?Number(t):t;return typeof r=="number"&&Number.isFinite(r)?r:void 0}function C(t,r,e){let n=st(t);return n!==void 0&&e(n,r)}function k(t,r){let e=r[t.field];return t.eq!==void 0?e===t.eq:t.neq!==void 0?e!==t.neq:t.in!==void 0?t.in.includes(e):t.notIn!==void 0?!t.notIn.includes(e):t.notEmpty!==void 0?!t.notEmpty||!E(e):t.gt!==void 0?C(e,t.gt,(n,o)=>n>o):t.gte!==void 0?C(e,t.gte,(n,o)=>n>=o):t.lt!==void 0?C(e,t.lt,(n,o)=>n<o):t.lte!==void 0?C(e,t.lte,(n,o)=>n<=o):false}function p(t,r){let e=n=>k(n,r);return (t.show??[]).every(e)&&(!t.showAny?.length||t.showAny.some(e))}function it(t,r){return !!t&&!!t.disabled?.length&&t.disabled.every(e=>k(e,r))}var D=["checkbox","switch"],at=["text","email","phone","number","password","select","autocomplete","multiselect","checkbox","radio","switch","file","date","datetime","textarea"],x=1e4,ut=254,lt=1e3,q=/^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/,dt=/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/,B="\\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\\d|3[01])",ct=new RegExp(`^${B}$`),ft=new RegExp(`^${B}T(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d{1,3})?)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)?$`),pt=new Set(["text","phone","password","textarea","autocomplete"]),mt=new Map([["email",[q,d.email,ut]],["date",[ct,d.date,x]],["datetime",[ft,d.datetime,x]]]);function yt(t){let[r,e,n]=t.split(/\D/).map(Number);return n<=new Date(new Date(0).setUTCFullYear(r,e,0)).getUTCDate()}var ht=new Set(["password","number","select","radio","file"]);function m(t,r){return typeof r=="string"&&!ht.has(t.type)?r.trim():r}function Pt(t,r){let e=m(t,r);if(t.type!=="number"||typeof e!="string"||!dt.test(e))return e;let n=Number(e);return Number.isFinite(n)?n:e}var K=t=>t.optionsFrom?void 0:t.options;function Y(t,r){let e=K(t);return !e||e.some(n=>n.value===r)}function G(t,r){let e=Math.min(x,t.validation?.maxLength??x);return r.length<=e?null:t.validation?.maxLengthMessage??f("maxLength",{max:e})}function bt(t,r){return Array.isArray(r)?r.length>(K(t)?.length??lt)?d.option:r.every(n=>typeof n=="string"&&n.length<=x&&Y(t,n))?null:d.option:d.options}function V(t,r,e){return typeof r=="string"?G(t,r):e}function Ft(t,r,[e,n,o]){return typeof r!="string"?n:G(t,r)??(r.length<=o&&e.test(r)&&(e===q||yt(r))?null:n)}function St(t,r){return typeof r=="boolean"||typeof r=="number"&&Number.isFinite(r)?null:V(t,r,d.value)}function Et(t,r){return r==null||r===""||t.type==="multiselect"&&Array.isArray(r)&&!r.length}function kt(t,r){if(Et(t,r))return null;if(D.includes(t.type))return typeof r=="boolean"?null:d.boolean;if(t.type==="number")return typeof r=="number"&&Number.isFinite(r)?null:d.number;if(t.type==="multiselect")return bt(t,r);if(t.type==="file")return V(t,r,d.file);let e=mt.get(t.type);return e?Ft(t,r,e):t.type==="select"||t.type==="radio"?V(t,r,d.option)??(Y(t,r)?null:d.option):pt.has(t.type)?V(t,r,d.string):St(t,r)}function H(t,r){return t.type==="file"||!at.includes(t.type)?null:kt(t,r)}function xt(t,r){return E(t)||t===false&&D.includes(r.type)}function U(t,r,e,n){let o=e[`min${r}`],s=e[`max${r}`];if(o!==void 0&&t<o)return e[`min${r}Message`]??f(`min${r}`,{min:o,unit:n});if(s!==void 0&&t>s)return e[`max${r}Message`]??f(`max${r}`,{max:s,unit:n})}function wt(t,r){if(r.pattern!==void 0)try{return new RegExp(r.pattern).test(String(t))?void 0:r.patternMessage??f("pattern")}catch{return}}function F(t,r,e,n){let o=m(t,r),s=t.validation??{},i=s.matchFieldMessage??f("matchField");if(xt(o,t))return s.required?typeof s.required=="string"?s.required:f("required"):s.matchField!==void 0&&!E(e[s.matchField])?i:null;let a=H(t,o);if(a)return a;let l=typeof o=="string"||Array.isArray(o)?U(o.length,"Length",s,Array.isArray(o)?"items":void 0):typeof o=="number"?U(o,"",s):void 0,u=s.matchField!==void 0&&o!==e[s.matchField]?i:void 0;return (l??wt(o,s)??u??(s.validator?n?.[s.validator]?.(o,e):void 0))||null}function w(t,r,e){return M(t.fields,r,e)}function M(t,r,e){let n={};for(let o of t){if(!p(o,r))continue;let s=F(o,r[o.key],r,e);s&&(n[o.key]=s);}return n}function Jt(t){return [...t.show??[],...t.showAny??[]].map(r=>r.field)}function Qt(t){return t.steps?.length?t.steps.flatMap(r=>r.fields):t.fields??[]}function A(t,r){let e={};for(let o of t)o.defaultValue!==void 0&&(e[o.key]=o.defaultValue);let n=r??{};for(let o of Object.keys(n))o!=="__proto__"&&(e[o]=n[o]);return e}function h(t,r){let e=new Set([...Object.keys(t),...Object.keys(r)]);return new Set([...e].filter(n=>!Object.is(t[n],r[n])))}function X(t){return t.visibleSteps.map(r=>r.id).join(`
2
+ `)}function v(t,r){let e=X(t),n=Object.keys(r).filter(o=>r[o]!==void 0).map(o=>[o,t.values[o]]);return ()=>X(t)!==e||n.some(([o,s])=>!Object.is(t.values[o],s))}function z(t,r,e=false){let n=t.errors;t.state.errors={},t.state.topLevelErrors=[];for(let[s,i]of Object.entries(r))t.visibility.activeField(s,t.values)?t.errors[s]=i:t.topLevelErrors.push(i);let o=e&&W(t,r);t.notify({fieldKeys:h(n,t.errors),structureChanged:o});}function W(t,r){let e=Object.keys(r).find(o=>t.errors[o]!==void 0),n=e&&t.isMultiStep?t.visibility.findStepIndex(e,t.values,t.currentStepIndex):null;return n===null||n===t.currentStepIndex?false:(t.state.currentStepIndex=n,true)}function sr(t,r){let e=[];for(let n of t.visibility.allFields)n.validation?.matchField!==r||t.errors[n.key]===void 0||F(n,t.values[n.key],b(t),t.validators)||(delete t.errors[n.key],e.push(n.key));return e}function Z(t){let r=new Set(t.visibleSteps.flatMap(n=>n.fields.map(o=>o.key))),e=Object.keys(t.errors).filter(n=>!r.has(n));for(let n of e)delete t.errors[n];return e}function b(t){return O(t)}function vt(t,r){for(let e of [...t.skipped.values()].flat())delete r[e];return r}function _(t,r=false){let e=t.errors,n={};if(t.isMultiStep)for(let s of t.visibleSteps)t.skipped.has(s.id)||Object.assign(n,w(s,b(t),t.validators));else Object.assign(n,M(t.definition.fields??[],b(t),t.validators));t.state.errors=n;let o=r&&W(t,n);return t.notify({fieldKeys:h(e,n),structureChanged:o}),n}function ir(t,r){let e=t.visibility.activeField(r,t.values);if(!e)return null;let n=t.errors[r],o=F(e,t.values[r],b(t),t.validators);o?t.errors[r]=o:delete t.errors[r];let s=Object.is(n,t.errors[r])?[]:[r];return t.notify({fieldKeys:s}),o}function O(t){let r={...t.visibility.conditionValues(t.values)};for(let e of Object.keys(r)){let n=t.visibility.activeField(e,t.values);n&&(r[e]=m(n,r[e]));}return vt(t,r)}function ar(t,r){let e=t.values,n=t.errors,o=Object.keys(t.fieldLoading);t.validationEpoch++,t.operationEpoch++,t.state.submitting=false,t.state.values=A(t.visibility.allFields,r),t.state.errors={},t.state.topLevelErrors=[],t.state.fieldLoading={},t.state.stepValidating=false,t.state.currentStepIndex=0,t.skipped.clear(),t.visibility.reconcileHidden(t.values,t.errors);let s=h(e,t.values),i=new Set([...s,...h(n,t.errors),...o]);t.notify({fieldKeys:i,structureChanged:true,valuesChanged:s.size>0});}function $(t,r){let e=t.steps??[],n=new Map(e.map((i,a)=>[i.id,a])),o=[],s={};for(let i=0;i<e.length;){let a=e[i];if(!p(a,s)){i++;continue}o.push(a),Object.assign(s,J(a,r,s));let l=a.routes?.find(u=>p(u,s)&&(u.to===null||(n.get(u.to)??-1)>i&&p(e[n.get(u.to)],s)));if(l?.to===null)break;i=l?n.get(l.to):i+1;}return o}function cr(t,r,e){let n=t[e]??t[t.length-1],o=r.findIndex(i=>i.id===n?.id);if(o!==-1)return o;let s=new Map(r.map((i,a)=>[i.id,a]));for(let i=Math.min(e-1,t.length-1);i>=0;i--){let a=s.get(t[i].id);if(a!==void 0)return a}return 0}function J(t,r,e){let n={...e};for(let s of t.fields)n[s.key]=m(s,r[s.key]);let o={};for(let s of t.fields)p(s,n)&&r[s.key]!==void 0&&(o[s.key]=m(s,r[s.key]));return o}function fr(t){let r=null,e=[],n={},o=s=>{if(r===s)return;r=s,e=$(t,s);let i={},a=t.steps?.length?e:[{fields:t.fields??[]}];for(let l of a)Object.assign(i,J(l,s,i));n=i;};return {invalidate(){r=null;},steps(s){return o(s),e},values(s){return o(s),n}}}function Q(t){let r=t.currentStep?.fields??[],e={...t.values};for(let{key:n}of r)delete e[n];return Object.assign(e,A(r))}function P(t){return $(t.definition,Q(t))[t.currentStepIndex+1]}function T(t){let r=t.currentStep,e=r.fields.map(({key:o})=>o);t.state.values=Q(t);for(let o of e)delete t.errors[o];t.skipped.set(r.id,e),t.visibility.reconcileHidden(t.values,t.errors),t.visibility.markChanged(true,true);let n=Z(t);return t.notify({fieldKeys:[...e,...n],structureChanged:true,valuesChanged:true}),e}function L(t){let r=t.currentStep;r&&t.skipped.delete(r.id);}function br(t,r){return t.state.currentStepIndex=r,t.notify({structureChanged:true}),T(t)}async function tt(t,r,e=false){if(t.submitting||t.stepValidating)return false;e||L(t);let n={...t.lifecycle},o=false,s=t.validationEpoch,i=++t.operationEpoch,a=O(t),l=v(t,a),u=()=>s!==t.validationEpoch||i!==t.operationEpoch||l();t.state.submitting=true,t.notify();try{if(u()||Object.keys(_(t,!0)).length>0||u())return !1;if(n.onBeforeSubmit){let g=await n.onBeforeSubmit(a);if(u()||g===!1)return !1}if(u())return !1;if(n.onBeforeSubmit){if(Object.keys(_(t,!0)).length>0||u())return !1;a=O(t);}o=!0;let c=[...t.skipped.keys()];return await r(a,[...c]),i!==t.operationEpoch||await R("afterSubmit",()=>n.onAfterSubmit?.(a,c)),!0}catch(c){if(!o&&u())return false;throw c}finally{i===t.operationEpoch&&(t.state.submitting=false,t.notify());}}function rt(t){let r=t.currentStep;if(!r)return true;let e=w(r,b(t),t.validators);if(Object.keys(e).length===0)return false;let n={...t.errors};return Object.assign(t.errors,e),t.notify({fieldKeys:h(n,t.errors)}),true}function et(t,r){t.validationEpoch++,t.state.currentStepIndex=r,t.notify({structureChanged:true});}async function Ar(t,r){if(!t.isMultiStep||t.stepValidating||t.submitting||!t.currentStep?.skip)return false;if(P(t))return gt(t,"next","skip");let e=t.currentStep;if(!r||!e)return false;let n=t.values,o={...t.errors},s=false,i=T(t),a=t.values,l=v(t,{...a});try{return await tt(t,async(u,c)=>{await r(u,c),s=!0;},!0)}finally{!s&&t.values===a&&!l()&&(t.state.values=n,t.state.errors={...o,...t.errors},t.skipped.delete(e.id),t.notify({fieldKeys:i,structureChanged:true,valuesChanged:true}));}}async function gt(t,r,e=r){let n=e==="skip";if(!t.isMultiStep||t.stepValidating||t.submitting||!n&&(r==="next"?t.isLastStep:t.isFirstStep))return false;let o=t.currentStep,s=r==="next"&&!n;if(s&&L(t),s&&rt(t))return false;let i={...t.lifecycle},a=t.onStepValidate,l=false,c=t.currentStepIndex+(r==="next"?1:-1),g=n?P(t):t.visibleSteps[c];if(!g)return false;let I={fromStepId:o.id,toStepId:g.id,reason:e,values:{...b(t)}},nt=t.validationEpoch,N=++t.operationEpoch,ot=v(t,I.values),S=()=>nt!==t.validationEpoch||N!==t.operationEpoch||t.currentStep?.id!==o.id||ot();t.state.stepValidating=true,t.notify();try{if(S())return !1;if(s&&a){let y=await a(o.id,I.values);if(S())return !1;if(y&&Object.keys(y).length>0)return z(t,y),!1}if(i.onBeforeStepChange){let y=await i.onBeforeStepChange(I);if(S()||y===!1)return !1}return S()||s&&rt(t)?!1:(l=!0,n&&T(t),et(t,c),await R("afterStepChange",()=>i.onAfterStepChange?.(I)),!0)}catch(y){if(!l&&S())return false;throw y}finally{N===t.operationEpoch&&(t.state.stepValidating=false,t.notify());}}function Or(t,r){if(!t.isMultiStep)return;let e=t.visibility.findStepIndex(r,t.values,t.currentStepIndex);e===t.currentStepIndex?t.notify():e!==null&&et(t,e);}export{tt as A,Ar as B,gt as C,Or as D,Jt as a,Qt as b,A as c,j as d,f as e,Ct as f,k as g,p as h,it as i,D as j,at as k,Pt as l,kt as m,F as n,w as o,M as p,z as q,sr as r,Z as s,_ as t,ir as u,O as v,ar as w,cr as x,fr as y,br as z};//# sourceMappingURL=chunk-LK2GLVPK.js.map
3
+ //# sourceMappingURL=chunk-LK2GLVPK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/lifecycle-error.ts","../src/validation/default-messages.ts","../src/visibility/evaluate-condition.ts","../src/visibility/is-visible.ts","../src/visibility/is-action-disabled.ts","../src/validation/type-checks.ts","../src/validation/validate-field.ts","../src/validation/validate-step.ts","../src/engine/engine-utils.ts","../src/engine/pending-inputs.ts","../src/engine/validation-state.ts","../src/engine/step-routes.ts","../src/engine/step-skip.ts","../src/engine/submission.ts","../src/engine/navigation.ts"],"names":["FormLifecycleError","phase","cause","afterCommit","callback","error","TYPE_MESSAGES","getDefaultMessage","rule","params","CONDITION_OPERATORS","isBlank","value","toNumber","number","compare","operand","test","evaluateCondition","condition","values","a","b","isVisible","field","matches","isActionDisabled","action","BOOLEAN_TYPES","BUILT_IN_TYPES","MAX_STRING_LENGTH","MAX_EMAIL_LENGTH","MAX_ITEMS","EMAIL","DECIMAL","DATE","DATE_ONLY","DATE_TIME","TEXT_TYPES","FORMATS","isCalendarDate","year","month","day","UNTRIMMED_TYPES","trimValue","normalizeValue","input","parsed","staticOptions","isOption","options","option","lengthError","max","multiselectError","item","stringError","message","formatError","format","primitiveError","typeError","clientTypeError","isEmpty","boundError","size","rules","unit","min","patternError","validateFieldValue","allValues","validators","matchMessage","typeIssue","sizeError","matchError","validateStep","step","validateFields","fields","errors","conditionFields","source","getAllFields","definition","createValues","initialValues","key","getChangedKeys","previous","next","keys","activePath","engine","watchCheckedInputs","checked","path","seen","applyValidationErrors","navigate","previousErrors","structureChanged","moveToFirstError","firstErrorKey","targetIndex","clearResolvedMatchErrors","cleared","getValidationValues","pruneOffPathErrors","pathFields","pruned","getSubmitValues","withoutSkipped","validateForm","validateOne","previousError","fieldKeys","resetEngine","previousValues","loadingFields","changedValues","changedFields","activeSteps","steps","indexes","index","result","available","stepValues","route","reconcileStepIndex","previousStep","preserved","nextIds","before","predecessor","candidates","createActivePath","active","refresh","groups","resetValues","skipTarget","skipCurrentStep","includeCurrentStep","skipStepAt","submitForm","submit","keepSkipped","lifecycle","dispatched","epoch","operation","inputsChanged","stale","allowed","skippedSteps","hasStepErrors","moveTo","skipStep","changeStep","committed","skippedValues","edited","submitted","skipped","direction","reason","skipping","validating","validate","toIndex","target","context","goToStepWithField","fieldKey"],"mappings":"AAAO,IAAMA,EAAN,cAAiC,KAAM,CAI5C,WAAA,CAAqBC,EAA0CC,CAAAA,CAAgB,CAC7E,KAAA,CAAM,CAAA,0BAAA,EAA6BD,CAAK,CAAA,SAAA,EAAYC,CAAAA,YAAiB,KAAA,CAAQA,CAAAA,CAAM,QAAU,MAAA,CAAOA,CAAK,CAAC,CAAA,CAAE,EADzF,IAAA,CAAA,KAAA,CAAAD,CAAAA,CAHrB,IAAA,CAAS,SAAA,CAAY,KAKnB,IAAA,CAAK,IAAA,CAAO,oBAAA,CACZ,IAAA,CAAK,MAAQC,EACf,CACF,EAEA,eAAsBC,CAAAA,CAAYF,EAA0CG,CAAAA,CAAqD,CAC/H,GAAI,CAAE,MAAMA,CAAAA,GAAY,CAAA,MACjBC,CAAAA,CAAO,CAAE,MAAM,IAAIL,CAAAA,CAAmBC,CAAAA,CAAOI,CAAK,CAAG,CAC9D,CCdO,IAAMC,CAAAA,CAAgB,CAC3B,KAAA,CAAO,qBAAA,CACP,MAAA,CAAQ,gBAAA,CACR,QAAS,uBAAA,CACT,MAAA,CAAQ,qCAAA,CACR,OAAA,CAAS,sCACT,MAAA,CAAQ,cAAA,CACR,IAAA,CAAM,oBAAA,CACN,SAAU,6BAAA,CACV,IAAA,CAAM,2BACN,KAAA,CAAO,eACT,EAIO,SAASC,CAAAA,CAAkBC,CAAAA,CAAsBC,CAAAA,CAA0C,CAChG,OAAQD,CAAAA,EACN,KAAK,WACH,OAAO,wBAAA,CACT,KAAK,WAAA,CACH,OAAO,CAAA,iBAAA,EAAoBC,CAAAA,EAAQ,GAAG,CAAA,CAAA,EAAIA,CAAAA,EAAQ,MAAQ,YAAY,CAAA,CAAA,CACxE,KAAK,WAAA,CACH,OAAO,CAAA,gBAAA,EAAmBA,CAAAA,EAAQ,GAAG,CAAA,CAAA,EAAIA,GAAQ,IAAA,EAAQ,YAAY,CAAA,CAAA,CACvE,KAAK,MACH,OAAO,CAAA,iBAAA,EAAoBA,GAAQ,GAAG,CAAA,CAAA,CACxC,KAAK,KAAA,CACH,OAAO,CAAA,gBAAA,EAAmBA,CAAAA,EAAQ,GAAG,CAAA,CAAA,CACvC,KAAK,SAAA,CACH,OAAO,iBACT,KAAK,YAAA,CACH,OAAO,mBAAA,CACT,QACE,OAAO,eACX,CACF,CChCO,IAAMC,GAAsB,CAAC,IAAA,CAAM,KAAA,CAAO,IAAA,CAAM,QAAS,UAAA,CAAY,IAAA,CAAM,KAAA,CAAO,IAAA,CAAM,KAAK,EAE7F,SAASC,CAAAA,CAAQC,CAAAA,CAAyB,CAC/C,OAAOA,CAAAA,EAAS,MAAQA,CAAAA,GAAU,EAAA,EAAO,MAAM,OAAA,CAAQA,CAAK,CAAA,EAAK,CAACA,EAAM,MAC1E,CAEA,SAASC,EAAAA,CAASD,EAAoC,CACpD,IAAME,CAAAA,CAAS,OAAOF,GAAU,QAAA,EAAYA,CAAAA,CAAM,IAAA,EAAK,GAAM,GAAK,MAAA,CAAOA,CAAK,CAAA,CAAIA,CAAAA,CAClF,OAAO,OAAOE,CAAAA,EAAW,QAAA,EAAY,MAAA,CAAO,SAASA,CAAM,CAAA,CAAIA,CAAAA,CAAS,MAC1E,CAEA,SAASC,CAAAA,CAAQH,EAAgBI,CAAAA,CAAiBC,CAAAA,CAA4D,CAC5G,IAAMH,CAAAA,CAASD,EAAAA,CAASD,CAAK,EAC7B,OAAOE,CAAAA,GAAW,MAAA,EAAaG,CAAAA,CAAKH,EAAQE,CAAO,CACrD,CAEO,SAASE,EACdC,CAAAA,CACAC,CAAAA,CACS,CACT,IAAMR,CAAAA,CAAQQ,EAAOD,CAAAA,CAAU,KAAK,CAAA,CACpC,OAAIA,EAAU,EAAA,GAAO,MAAA,CAAkBP,CAAAA,GAAUO,CAAAA,CAAU,GACvDA,CAAAA,CAAU,GAAA,GAAQ,MAAA,CAAkBP,CAAAA,GAAUO,EAAU,GAAA,CACxDA,CAAAA,CAAU,KAAO,MAAA,CAAkBA,CAAAA,CAAU,GAAG,QAAA,CAASP,CAAwB,CAAA,CACjFO,CAAAA,CAAU,QAAU,MAAA,CAAkB,CAACA,CAAAA,CAAU,KAAA,CAAM,SAASP,CAAwB,CAAA,CACxFO,CAAAA,CAAU,QAAA,GAAa,OAAkB,CAACA,CAAAA,CAAU,UAAY,CAACR,CAAAA,CAAQC,CAAK,CAAA,CAC9EO,CAAAA,CAAU,EAAA,GAAO,MAAA,CAAkBJ,EAAQH,CAAAA,CAAOO,CAAAA,CAAU,EAAA,CAAI,CAACE,EAAGC,CAAAA,GAAMD,CAAAA,CAAIC,CAAC,CAAA,CAC/EH,EAAU,GAAA,GAAQ,MAAA,CAAkBJ,EAAQH,CAAAA,CAAOO,CAAAA,CAAU,IAAK,CAACE,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,EAAKC,CAAC,CAAA,CAClFH,CAAAA,CAAU,EAAA,GAAO,MAAA,CAAkBJ,EAAQH,CAAAA,CAAOO,CAAAA,CAAU,EAAA,CAAI,CAACE,EAAGC,CAAAA,GAAMD,CAAAA,CAAIC,CAAC,CAAA,CAC/EH,CAAAA,CAAU,MAAQ,MAAA,CAAkBJ,CAAAA,CAAQH,CAAAA,CAAOO,CAAAA,CAAU,IAAK,CAACE,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,EAAKC,CAAC,CAAA,CAC/E,KACT,CC9BO,SAASC,EACdC,CAAAA,CACAJ,CAAAA,CACS,CACT,IAAMK,CAAAA,CAAWN,GAA6BD,CAAAA,CAAkBC,CAAAA,CAAWC,CAAM,CAAA,CACjF,QAAQI,CAAAA,CAAM,IAAA,EAAQ,EAAC,EAAG,MAAMC,CAAO,CAAA,GAAM,CAACD,CAAAA,CAAM,SAAS,MAAA,EAAUA,CAAAA,CAAM,OAAA,CAAQ,IAAA,CAAKC,CAAO,CAAA,CACnG,CCNO,SAASC,EAAAA,CAAiBC,EAAwCP,CAAAA,CAA0C,CACjH,OAAO,CAAC,CAACO,CAAAA,EAAU,CAAC,CAACA,CAAAA,CAAO,UAAU,MAAA,EAAUA,CAAAA,CAAO,SAAS,KAAA,CAAOR,CAAAA,EAAcD,EAAkBC,CAAAA,CAAWC,CAAM,CAAC,CAC3H,CCFO,IAAMQ,CAAAA,CAAgB,CAAC,UAAA,CAAY,QAAQ,CAAA,CACrCC,EAAAA,CAAiB,CAAC,MAAA,CAAQ,QAAS,OAAA,CAAS,QAAA,CAAU,WAAY,QAAA,CAAU,cAAA,CAAgB,cAAe,UAAA,CAAY,OAAA,CAAS,QAAA,CAAU,MAAA,CAAQ,OAAQ,UAAA,CAAY,UAAU,CAAA,CAEhLC,CAAAA,CAAoB,IAC3BC,EAAAA,CAAmB,GAAA,CACnBC,EAAAA,CAAY,GAAA,CACZC,EAAQ,mCAAA,CACRC,EAAAA,CAAU,kDACVC,CAAAA,CAAO,mDAAA,CACPC,GAAY,IAAI,MAAA,CAAO,CAAA,CAAA,EAAID,CAAI,GAAG,CAAA,CAClCE,EAAAA,CAAY,IAAI,MAAA,CAAO,IAAIF,CAAI,CAAA,iGAAA,CAAmG,CAAA,CAClIG,EAAAA,CAAa,IAAI,GAAA,CAAI,CAAC,OAAQ,OAAA,CAAS,UAAA,CAAY,WAAY,cAAc,CAAC,CAAA,CAC9EC,EAAAA,CAAU,IAAI,GAAA,CAAsC,CACxD,CAAC,OAAA,CAAS,CAACN,CAAAA,CAAO3B,CAAAA,CAAc,KAAA,CAAOyB,EAAgB,CAAC,CAAA,CACxD,CAAC,OAAQ,CAACK,EAAAA,CAAW9B,EAAc,IAAA,CAAMwB,CAAiB,CAAC,CAAA,CAC3D,CAAC,UAAA,CAAY,CAACO,EAAAA,CAAW/B,CAAAA,CAAc,SAAUwB,CAAiB,CAAC,CACrE,CAAC,EAED,SAASU,EAAAA,CAAe5B,EAAwB,CAC9C,GAAM,CAAC6B,CAAAA,CAAMC,CAAAA,CAAOC,CAAG,CAAA,CAAI/B,EAAM,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,MAAM,CAAA,CACvD,OAAO+B,CAAAA,EAAO,IAAI,KAAK,IAAI,IAAA,CAAK,CAAC,CAAA,CAAE,cAAA,CAAeF,EAAMC,CAAAA,CAAO,CAAC,CAAC,CAAA,CAAE,YACrE,CAEA,IAAME,EAAAA,CAAkB,IAAI,GAAA,CAAI,CAAC,UAAA,CAAY,QAAA,CAAU,SAAU,OAAA,CAAS,MAAM,CAAC,CAAA,CAE1E,SAASC,EAAUrB,CAAAA,CAAkBZ,CAAAA,CAAyB,CACnE,OAAO,OAAOA,CAAAA,EAAU,QAAA,EAAY,CAACgC,EAAAA,CAAgB,IAAIpB,CAAAA,CAAM,IAAI,CAAA,CAAIZ,CAAAA,CAAM,MAAK,CAAIA,CACxF,CAEO,SAASkC,EAAAA,CAAetB,EAAkBuB,CAAAA,CAAyB,CACxE,IAAMnC,CAAAA,CAAQiC,EAAUrB,CAAAA,CAAOuB,CAAK,CAAA,CACpC,GAAIvB,EAAM,IAAA,GAAS,QAAA,EAAY,OAAOZ,CAAAA,EAAU,UAAY,CAACsB,EAAAA,CAAQ,KAAKtB,CAAK,CAAA,CAAG,OAAOA,CAAAA,CACzF,IAAMoC,CAAAA,CAAS,MAAA,CAAOpC,CAAK,CAAA,CAC3B,OAAO,MAAA,CAAO,QAAA,CAASoC,CAAM,CAAA,CAAIA,CAAAA,CAASpC,CAC5C,CAEA,IAAMqC,CAAAA,CAAiBzB,CAAAA,EAAsBA,EAAM,WAAA,CAAc,MAAA,CAAYA,EAAM,OAAA,CAEnF,SAAS0B,CAAAA,CAAS1B,CAAAA,CAAkBZ,EAAyB,CAC3D,IAAMuC,CAAAA,CAAUF,CAAAA,CAAczB,CAAK,CAAA,CACnC,OAAO,CAAC2B,CAAAA,EAAWA,EAAQ,IAAA,CAAMC,CAAAA,EAAWA,EAAO,KAAA,GAAUxC,CAAK,CACpE,CAEA,SAASyC,CAAAA,CAAY7B,CAAAA,CAAkBZ,EAA8B,CACnE,IAAM0C,CAAAA,CAAM,IAAA,CAAK,IAAIxB,CAAAA,CAAmBN,CAAAA,CAAM,UAAA,EAAY,SAAA,EAAaM,CAAiB,CAAA,CACxF,OAAIlB,EAAM,MAAA,EAAU0C,CAAAA,CAAY,KACzB9B,CAAAA,CAAM,UAAA,EAAY,gBAAA,EAAoBjB,CAAAA,CAAkB,YAAa,CAAE,GAAA,CAAA+C,CAAI,CAAC,CACrF,CAEA,SAASC,EAAAA,CAAiB/B,CAAAA,CAAkBZ,EAA+B,CACzE,OAAK,MAAM,OAAA,CAAQA,CAAK,EACpBA,CAAAA,CAAM,MAAA,EAAUqC,CAAAA,CAAczB,CAAK,GAAG,MAAA,EAAUQ,EAAAA,CAAAA,CAAmB1B,CAAAA,CAAc,MAAA,CACvEM,EAAM,KAAA,CAAO4C,CAAAA,EAAS,OAAOA,CAAAA,EAAS,UAAYA,CAAAA,CAAK,MAAA,EAAU1B,GAAqBoB,CAAAA,CAAS1B,CAAAA,CAAOgC,CAAI,CAAC,CAAA,CAC1G,IAAA,CAAOlD,CAAAA,CAAc,OAHFA,CAAAA,CAAc,OAIlD,CAEA,SAASmD,EAAYjC,CAAAA,CAAkBZ,CAAAA,CAAgB8C,CAAAA,CAAgC,CACrF,OAAO,OAAO9C,CAAAA,EAAU,QAAA,CAAWyC,CAAAA,CAAY7B,EAAOZ,CAAK,CAAA,CAAI8C,CACjE,CAEA,SAASC,EAAAA,CAAYnC,CAAAA,CAAkBZ,CAAAA,CAAgB,CAACgD,EAAQF,CAAAA,CAASJ,CAAG,CAAA,CAA4C,CACtH,OAAI,OAAO1C,CAAAA,EAAU,SAAiB8C,CAAAA,CAC/BL,CAAAA,CAAY7B,EAAOZ,CAAK,CAAA,GAAMA,CAAAA,CAAM,MAAA,EAAU0C,GAAOM,CAAAA,CAAO,IAAA,CAAKhD,CAAK,CAAA,GAAMgD,IAAW3B,CAAAA,EAASO,EAAAA,CAAe5B,CAAK,CAAA,CAAA,CAAK,KAAO8C,CAAAA,CACzI,CAEA,SAASG,EAAAA,CAAerC,CAAAA,CAAkBZ,EAA+B,CACvE,OAAI,OAAOA,CAAAA,EAAU,WAAc,OAAOA,CAAAA,EAAU,QAAA,EAAY,MAAA,CAAO,SAASA,CAAK,CAAA,CAAW,IAAA,CACzF6C,CAAAA,CAAYjC,EAAOZ,CAAAA,CAAON,CAAAA,CAAc,KAAK,CACtD,CAEA,SAASK,EAAAA,CAAQa,CAAAA,CAAkBZ,CAAAA,CAAyB,CAC1D,OAAOA,CAAAA,EAAS,IAAA,EAAQA,CAAAA,GAAU,EAAA,EAAOY,EAAM,IAAA,GAAS,aAAA,EAAiB,KAAA,CAAM,OAAA,CAAQZ,CAAK,CAAA,EAAK,CAACA,EAAM,MAC1G,CAEO,SAASkD,EAAAA,CAAUtC,CAAAA,CAAkBZ,CAAAA,CAA+B,CACzE,GAAID,EAAAA,CAAQa,CAAAA,CAAOZ,CAAK,CAAA,CAAG,OAAO,IAAA,CAClC,GAAIgB,CAAAA,CAAc,QAAA,CAASJ,EAAM,IAAI,CAAA,CAAG,OAAO,OAAOZ,CAAAA,EAAU,UAAY,IAAA,CAAON,CAAAA,CAAc,OAAA,CACjG,GAAIkB,EAAM,IAAA,GAAS,QAAA,CAAU,OAAO,OAAOZ,GAAU,QAAA,EAAY,MAAA,CAAO,QAAA,CAASA,CAAK,EAAI,IAAA,CAAON,CAAAA,CAAc,OAC/G,GAAIkB,CAAAA,CAAM,OAAS,aAAA,CAAe,OAAO+B,EAAAA,CAAiB/B,CAAAA,CAAOZ,CAAK,CAAA,CACtE,GAAIY,CAAAA,CAAM,IAAA,GAAS,OAAQ,OAAOiC,CAAAA,CAAYjC,CAAAA,CAAOZ,CAAAA,CAAON,EAAc,IAAI,CAAA,CAC9E,IAAMsD,CAAAA,CAASrB,EAAAA,CAAQ,IAAIf,CAAAA,CAAM,IAAI,CAAA,CACrC,OAAIoC,EAAeD,EAAAA,CAAYnC,CAAAA,CAAOZ,CAAAA,CAAOgD,CAAM,EAC/CpC,CAAAA,CAAM,IAAA,GAAS,QAAA,EAAYA,CAAAA,CAAM,OAAS,OAAA,CAAgBiC,CAAAA,CAAYjC,CAAAA,CAAOZ,CAAAA,CAAON,EAAc,MAAM,CAAA,GAAM4C,CAAAA,CAAS1B,CAAAA,CAAOZ,CAAK,CAAA,CAAI,IAAA,CAAON,CAAAA,CAAc,MAAA,CAAA,CACzJgC,GAAW,GAAA,CAAId,CAAAA,CAAM,IAAI,CAAA,CAAIiC,EAAYjC,CAAAA,CAAOZ,CAAAA,CAAON,EAAc,MAAM,CAAA,CAAIuD,GAAerC,CAAAA,CAAOZ,CAAK,CACnH,CAEO,SAASmD,CAAAA,CAAgBvC,CAAAA,CAAkBZ,CAAAA,CAA+B,CAC/E,OAAIY,CAAAA,CAAM,IAAA,GAAS,MAAA,EAAU,CAACK,GAAe,QAAA,CAASL,CAAAA,CAAM,IAAI,CAAA,CAAU,IAAA,CACnEsC,GAAUtC,CAAAA,CAAOZ,CAAK,CAC/B,CCjFA,SAASoD,EAAAA,CAAQpD,CAAAA,CAAgBY,CAAAA,CAA2B,CAC1D,OAAOb,CAAAA,CAAQC,CAAK,CAAA,EAAMA,CAAAA,GAAU,OAASgB,CAAAA,CAAc,QAAA,CAASJ,EAAM,IAAI,CAChF,CAEA,SAASyC,CAAAA,CACPC,CAAAA,CACA1D,CAAAA,CACA2D,EACAC,CAAAA,CACoB,CACpB,IAAMC,CAAAA,CAAMF,EAAM,CAAA,GAAA,EAAM3D,CAAI,CAAA,CAAE,CAAA,CACxB8C,EAAMa,CAAAA,CAAM,CAAA,GAAA,EAAM3D,CAAI,CAAA,CAAE,CAAA,CAC9B,GAAI6D,CAAAA,GAAQ,MAAA,EAAaH,CAAAA,CAAOG,CAAAA,CAAK,OAAOF,CAAAA,CAAM,CAAA,GAAA,EAAM3D,CAAI,CAAA,OAAA,CAAS,GAAKD,CAAAA,CAAkB,CAAA,GAAA,EAAMC,CAAI,CAAA,CAAA,CAAI,CAAE,GAAA,CAAA6D,CAAAA,CAAK,KAAAD,CAAK,CAAC,EACvH,GAAId,CAAAA,GAAQ,MAAA,EAAaY,CAAAA,CAAOZ,EAAK,OAAOa,CAAAA,CAAM,CAAA,GAAA,EAAM3D,CAAI,SAAS,CAAA,EAAKD,CAAAA,CAAkB,CAAA,GAAA,EAAMC,CAAI,GAAI,CAAE,GAAA,CAAA8C,EAAK,IAAA,CAAAc,CAAK,CAAC,CAEzH,CAEA,SAASE,EAAAA,CAAa1D,EAAgBuD,CAAAA,CAA4C,CAChF,GAAIA,CAAAA,CAAM,UAAY,MAAA,CACtB,GAAI,CACF,OAAO,IAAI,MAAA,CAAOA,CAAAA,CAAM,OAAO,CAAA,CAAE,IAAA,CAAK,OAAOvD,CAAK,CAAC,CAAA,CAAI,KAAA,CAAA,CAAYuD,EAAM,cAAA,EAAkB5D,CAAAA,CAAkB,SAAS,CACxH,MAAQ,CACN,MACF,CACF,CAEO,SAASgE,CAAAA,CACd/C,CAAAA,CACAuB,CAAAA,CACAyB,CAAAA,CACAC,EACe,CACf,IAAM7D,CAAAA,CAAQiC,CAAAA,CAAUrB,EAAOuB,CAAK,CAAA,CAC9BoB,CAAAA,CAAQ3C,CAAAA,CAAM,YAAc,EAAC,CAC7BkD,CAAAA,CAAeP,CAAAA,CAAM,mBAAqB5D,CAAAA,CAAkB,YAAY,EAC9E,GAAIyD,EAAAA,CAAQpD,EAAOY,CAAK,CAAA,CACtB,OAAI2C,CAAAA,CAAM,SAAiB,OAAOA,CAAAA,CAAM,QAAA,EAAa,QAAA,CAAWA,EAAM,QAAA,CAAW5D,CAAAA,CAAkB,UAAU,CAAA,CACtG4D,EAAM,UAAA,GAAe,MAAA,EAAa,CAACxD,CAAAA,CAAQ6D,CAAAA,CAAUL,EAAM,UAAU,CAAC,CAAA,CAAIO,CAAAA,CAAe,KAElG,IAAMC,CAAAA,CAAYZ,CAAAA,CAAgBvC,CAAAA,CAAOZ,CAAK,CAAA,CAC9C,GAAI+D,CAAAA,CAAW,OAAOA,EACtB,IAAMC,CAAAA,CAAY,OAAOhE,CAAAA,EAAU,QAAA,EAAY,MAAM,OAAA,CAAQA,CAAK,CAAA,CAC9DqD,CAAAA,CAAWrD,EAAM,MAAA,CAAQ,QAAA,CAAUuD,CAAAA,CAAO,KAAA,CAAM,QAAQvD,CAAK,CAAA,CAAI,OAAA,CAAU,MAAS,EACpF,OAAOA,CAAAA,EAAU,SAAWqD,CAAAA,CAAWrD,CAAAA,CAAO,GAAIuD,CAAK,CAAA,CAAI,MAAA,CACzDU,CAAAA,CAAaV,EAAM,UAAA,GAAe,MAAA,EAAavD,CAAAA,GAAU4D,CAAAA,CAAUL,EAAM,UAAU,CAAA,CAAIO,CAAAA,CAAe,MAAA,CAC5G,QAAQE,CAAAA,EACHN,EAAAA,CAAa1D,EAAOuD,CAAK,CAAA,EACzBU,IACCV,CAAAA,CAAM,SAAA,CAAYM,CAAAA,GAAaN,CAAAA,CAAM,SAAS,CAAA,GAAIvD,CAAAA,CAAO4D,CAAS,CAAA,CAAI,UAAe,IAC7F,CCxDO,SAASM,CAAAA,CACdC,EACA3D,CAAAA,CACAqD,CAAAA,CACwB,CACxB,OAAOO,CAAAA,CAAeD,EAAK,MAAA,CAAQ3D,CAAAA,CAAQqD,CAAU,CACvD,CAEO,SAASO,CAAAA,CACdC,CAAAA,CACA7D,CAAAA,CACAqD,EACwB,CACxB,IAAMS,CAAAA,CAAiC,GAEvC,IAAA,IAAW1D,CAAAA,IAASyD,EAAQ,CAC1B,GAAI,CAAC1D,CAAAA,CAAUC,CAAAA,CAAOJ,CAAM,CAAA,CAAG,SAE/B,IAAMf,CAAAA,CAAQkE,CAAAA,CAAmB/C,CAAAA,CAAOJ,EAAOI,CAAAA,CAAM,GAAG,CAAA,CAAGJ,CAAAA,CAAQqD,CAAU,CAAA,CACzEpE,CAAAA,GACF6E,EAAO1D,CAAAA,CAAM,GAAG,EAAInB,CAAAA,EAExB,CAEA,OAAO6E,CACT,CC3BO,SAASC,EAAAA,CAAgBC,CAAAA,CAAuD,CACrF,OAAO,CAAC,GAAIA,CAAAA,CAAO,IAAA,EAAQ,EAAC,CAAI,GAAIA,EAAO,OAAA,EAAW,EAAG,CAAA,CAAE,GAAA,CAAKjE,CAAAA,EAAcA,CAAAA,CAAU,KAAK,CAC/F,CAEO,SAASkE,EAAAA,CAAaC,EAAyC,CACpE,OAAOA,CAAAA,CAAW,KAAA,EAAO,OAASA,CAAAA,CAAW,KAAA,CAAM,QAASP,CAAAA,EAASA,CAAAA,CAAK,MAAM,CAAA,CAAIO,CAAAA,CAAW,MAAA,EAAU,EAC3G,CAEO,SAASC,CAAAA,CACdN,CAAAA,CACAO,EACyB,CACzB,IAAMpE,CAAAA,CAAkC,GACxC,IAAA,IAAWI,CAAAA,IAASyD,EACdzD,CAAAA,CAAM,YAAA,GAAiB,SAAWJ,CAAAA,CAAOI,CAAAA,CAAM,GAAG,CAAA,CAAIA,EAAM,YAAA,CAAA,CAElE,IAAM4D,CAAAA,CAASI,CAAAA,EAAiB,EAAC,CACjC,IAAA,IAAWC,CAAAA,IAAO,MAAA,CAAO,KAAKL,CAAM,CAAA,CAC9BK,IAAQ,WAAA,GAAarE,CAAAA,CAAOqE,CAAG,CAAA,CAAIL,CAAAA,CAAOK,CAAG,CAAA,CAAA,CAEnD,OAAOrE,CACT,CAEO,SAASsE,CAAAA,CACdC,EACAC,CAAAA,CACa,CACb,IAAMC,CAAAA,CAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAKF,CAAQ,CAAA,CAAG,GAAG,MAAA,CAAO,IAAA,CAAKC,CAAI,CAAC,CAAC,CAAA,CACrE,OAAO,IAAI,GAAA,CAAI,CAAC,GAAGC,CAAI,EAAE,MAAA,CAAQJ,CAAAA,EAAQ,CAAC,MAAA,CAAO,EAAA,CAAGE,EAASF,CAAG,CAAA,CAAGG,CAAAA,CAAKH,CAAG,CAAC,CAAC,CAAC,CAChF,CC7BA,SAASK,CAAAA,CAAWC,CAAAA,CAAiC,CACnD,OAAOA,EAAO,YAAA,CAAa,GAAA,CAAKhB,GAASA,CAAAA,CAAK,EAAE,EAAE,IAAA,CAAK;AAAA,CAAI,CAC7D,CAEO,SAASiB,CAAAA,CAAmBD,CAAAA,CAAyBE,EAAiD,CAC3G,IAAMC,CAAAA,CAAOJ,CAAAA,CAAWC,CAAM,CAAA,CACxBI,EAAO,MAAA,CAAO,IAAA,CAAKF,CAAO,CAAA,CAAE,MAAA,CAAQR,CAAAA,EAAQQ,EAAQR,CAAG,CAAA,GAAM,MAAS,CAAA,CAAE,GAAA,CAAKA,CAAAA,EAAQ,CAACA,CAAAA,CAAKM,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAC,CAAU,EAC7H,OAAO,IAAMK,CAAAA,CAAWC,CAAM,CAAA,GAAMG,CAAAA,EAAQC,EAAK,IAAA,CAAK,CAAC,CAACV,CAAAA,CAAK7E,CAAK,CAAA,GAAM,CAAC,MAAA,CAAO,EAAA,CAAGmF,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,CAAG7E,CAAK,CAAC,CAC/G,CCLO,SAASwF,CAAAA,CAAsBL,CAAAA,CAAyBb,EAAgCmB,CAAAA,CAAW,KAAA,CAAa,CACrH,IAAMC,CAAAA,CAAiBP,CAAAA,CAAO,OAC9BA,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAS,EAAC,CACvBA,CAAAA,CAAO,MAAM,cAAA,CAAiB,EAAC,CAC/B,IAAA,GAAW,CAACN,CAAAA,CAAK/B,CAAO,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQwB,CAAM,CAAA,CAC5Ca,CAAAA,CAAO,WAAW,WAAA,CAAYN,CAAAA,CAAKM,CAAAA,CAAO,MAAM,CAAA,CAAGA,CAAAA,CAAO,OAAON,CAAG,CAAA,CAAI/B,CAAAA,CACvEqC,CAAAA,CAAO,cAAA,CAAe,IAAA,CAAKrC,CAAO,CAAA,CAEzC,IAAM6C,CAAAA,CAAmBF,CAAAA,EAAYG,CAAAA,CAAiBT,CAAAA,CAAQb,CAAM,CAAA,CACpEa,CAAAA,CAAO,MAAA,CAAO,CAAE,SAAA,CAAWL,CAAAA,CAAeY,EAAgBP,CAAAA,CAAO,MAAM,CAAA,CAAG,gBAAA,CAAAQ,CAAiB,CAAC,EAC9F,CAEA,SAASC,CAAAA,CAAiBT,CAAAA,CAAyBb,CAAAA,CAAyC,CAC1F,IAAMuB,CAAAA,CAAgB,MAAA,CAAO,IAAA,CAAKvB,CAAM,CAAA,CAAE,IAAA,CAAMO,GAAQM,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,GAAM,MAAS,CAAA,CAClFiB,EAAcD,CAAAA,EAAiBV,CAAAA,CAAO,WAAA,CACxCA,CAAAA,CAAO,UAAA,CAAW,aAAA,CAAcU,EAAeV,CAAAA,CAAO,MAAA,CAAQA,CAAAA,CAAO,gBAAgB,CAAA,CACrF,IAAA,CACJ,OAAIW,CAAAA,GAAgB,IAAA,EAAQA,CAAAA,GAAgBX,CAAAA,CAAO,gBAAA,CAAyB,KAAA,EAC5EA,EAAO,KAAA,CAAM,gBAAA,CAAmBW,CAAAA,CACzB,IAAA,CACT,CAEO,SAASC,GAAyBZ,CAAAA,CAAyBN,CAAAA,CAAuB,CACvF,IAAMmB,CAAAA,CAAoB,GAC1B,IAAA,IAAWpF,CAAAA,IAASuE,CAAAA,CAAO,UAAA,CAAW,SAAA,CAChCvE,CAAAA,CAAM,YAAY,UAAA,GAAeiE,CAAAA,EAAOM,CAAAA,CAAO,MAAA,CAAOvE,CAAAA,CAAM,GAAG,IAAM,MAAA,EACrE+C,CAAAA,CAAmB/C,CAAAA,CAAOuE,CAAAA,CAAO,MAAA,CAAOvE,CAAAA,CAAM,GAAG,CAAA,CAAGqF,CAAAA,CAAoBd,CAAM,CAAA,CAAGA,CAAAA,CAAO,UAAU,IACtG,OAAOA,CAAAA,CAAO,MAAA,CAAOvE,CAAAA,CAAM,GAAG,CAAA,CAC9BoF,EAAQ,IAAA,CAAKpF,CAAAA,CAAM,GAAG,CAAA,CAAA,CAExB,OAAOoF,CACT,CAEO,SAASE,CAAAA,CAAmBf,CAAAA,CAAmC,CACpE,IAAMgB,CAAAA,CAAa,IAAI,GAAA,CAAIhB,CAAAA,CAAO,YAAA,CAAa,OAAA,CAAShB,CAAAA,EAASA,CAAAA,CAAK,OAAO,GAAA,CAAKvD,CAAAA,EAAUA,CAAAA,CAAM,GAAG,CAAC,CAAC,EACjGwF,CAAAA,CAAS,MAAA,CAAO,IAAA,CAAKjB,CAAAA,CAAO,MAAM,CAAA,CAAE,OAAQN,CAAAA,EAAQ,CAACsB,CAAAA,CAAW,GAAA,CAAItB,CAAG,CAAC,EAC9E,IAAA,IAAWA,CAAAA,IAAOuB,CAAAA,CAAQ,OAAOjB,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,CAClD,OAAOuB,CACT,CAEO,SAASH,CAAAA,CAAoBd,EAAkD,CACpF,OAAOkB,CAAAA,CAAgBlB,CAAM,CAC/B,CAEA,SAASmB,EAAAA,CAAenB,CAAAA,CAAyB3E,CAAAA,CAA0D,CACzG,IAAA,IAAWqE,CAAAA,IAAO,CAAC,GAAGM,CAAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,CAAA,CAAE,MAAK,CAAG,OAAO3E,CAAAA,CAAOqE,CAAG,CAAA,CACxE,OAAOrE,CACT,CAEO,SAAS+F,CAAAA,CAAapB,CAAAA,CAAyBM,CAAAA,CAAW,KAAA,CAA+B,CAC9F,IAAMC,CAAAA,CAAiBP,CAAAA,CAAO,MAAA,CACxBb,CAAAA,CAAiC,GACvC,GAAIa,CAAAA,CAAO,WAAA,CACT,IAAA,IAAWhB,CAAAA,IAAQgB,CAAAA,CAAO,aACpBA,CAAAA,CAAO,OAAA,CAAQ,GAAA,CAAIhB,CAAAA,CAAK,EAAE,CAAA,EAC9B,OAAO,MAAA,CAAOG,CAAAA,CAAQJ,CAAAA,CAAaC,CAAAA,CAAM8B,CAAAA,CAAoBd,CAAM,EAAGA,CAAAA,CAAO,UAAU,CAAC,CAAA,CAAA,KAG1F,MAAA,CAAO,MAAA,CACLb,EACAF,CAAAA,CAAee,CAAAA,CAAO,UAAA,CAAW,MAAA,EAAU,EAAC,CAAGc,EAAoBd,CAAM,CAAA,CAAGA,CAAAA,CAAO,UAAU,CAC/F,CAAA,CAEFA,EAAO,KAAA,CAAM,MAAA,CAASb,CAAAA,CACtB,IAAMqB,CAAAA,CAAmBF,CAAAA,EAAYG,EAAiBT,CAAAA,CAAQb,CAAM,CAAA,CACpE,OAAAa,CAAAA,CAAO,MAAA,CAAO,CAAE,SAAA,CAAWL,CAAAA,CAAeY,CAAAA,CAAgBpB,CAAM,CAAA,CAAG,gBAAA,CAAAqB,CAAiB,CAAC,CAAA,CAC9ErB,CACT,CAEO,SAASkC,EAAAA,CAAYrB,EAAyBN,CAAAA,CAA4B,CAC/E,IAAMjE,CAAAA,CAAQuE,CAAAA,CAAO,UAAA,CAAW,YAAYN,CAAAA,CAAKM,CAAAA,CAAO,MAAM,CAAA,CAC9D,GAAI,CAACvE,EAAO,OAAO,IAAA,CACnB,IAAM6F,CAAAA,CAAgBtB,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,CACjCpF,CAAAA,CAAQkE,CAAAA,CAAmB/C,CAAAA,CAAOuE,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,CAAGoB,CAAAA,CAAoBd,CAAM,CAAA,CAAGA,CAAAA,CAAO,UAAU,EACtG1F,CAAAA,CAAO0F,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,CAAIpF,CAAAA,CAC3B,OAAO0F,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,CAC7B,IAAM6B,CAAAA,CAAY,OAAO,EAAA,CAAGD,CAAAA,CAAetB,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAC,EAAI,EAAC,CAAI,CAACA,CAAG,CAAA,CAC1E,OAAAM,EAAO,MAAA,CAAO,CAAE,SAAA,CAAAuB,CAAU,CAAC,CAAA,CACpBjH,CACT,CAEO,SAAS4G,CAAAA,CAAgBlB,CAAAA,CAAkD,CAChF,IAAM3E,EAAS,CAAE,GAAG2E,CAAAA,CAAO,UAAA,CAAW,eAAA,CAAgBA,CAAAA,CAAO,MAAM,CAAE,CAAA,CACrE,IAAA,IAAWN,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKrE,CAAM,CAAA,CAAG,CACrC,IAAMI,CAAAA,CAAQuE,CAAAA,CAAO,UAAA,CAAW,YAAYN,CAAAA,CAAKM,CAAAA,CAAO,MAAM,CAAA,CAC1DvE,CAAAA,GAAOJ,CAAAA,CAAOqE,CAAG,CAAA,CAAI5C,CAAAA,CAAUrB,CAAAA,CAAOJ,CAAAA,CAAOqE,CAAG,CAAC,GACvD,CACA,OAAOyB,EAAAA,CAAenB,CAAAA,CAAQ3E,CAAM,CACtC,CAEO,SAASmG,EAAAA,CAAYxB,CAAAA,CAAyB3E,CAAAA,CAAwC,CAC3F,IAAMoG,EAAiBzB,CAAAA,CAAO,MAAA,CACxBO,CAAAA,CAAiBP,CAAAA,CAAO,MAAA,CACxB0B,CAAAA,CAAgB,OAAO,IAAA,CAAK1B,CAAAA,CAAO,YAAY,CAAA,CACrDA,CAAAA,CAAO,eAAA,EAAA,CACPA,EAAO,cAAA,EAAA,CACPA,CAAAA,CAAO,KAAA,CAAM,UAAA,CAAa,KAAA,CAC1BA,CAAAA,CAAO,MAAM,MAAA,CAASR,CAAAA,CAAaQ,CAAAA,CAAO,UAAA,CAAW,SAAA,CAAW3E,CAAM,EACtE2E,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAS,EAAC,CACvBA,CAAAA,CAAO,MAAM,cAAA,CAAiB,EAAC,CAC/BA,CAAAA,CAAO,KAAA,CAAM,YAAA,CAAe,EAAC,CAC7BA,CAAAA,CAAO,KAAA,CAAM,cAAA,CAAiB,KAAA,CAC9BA,CAAAA,CAAO,MAAM,gBAAA,CAAmB,CAAA,CAChCA,CAAAA,CAAO,OAAA,CAAQ,KAAA,EAAM,CACrBA,EAAO,UAAA,CAAW,eAAA,CAAgBA,CAAAA,CAAO,MAAA,CAAQA,CAAAA,CAAO,MAAM,EAC9D,IAAM2B,CAAAA,CAAgBhC,CAAAA,CAAe8B,CAAAA,CAAgBzB,CAAAA,CAAO,MAAM,EAC5D4B,CAAAA,CAAgB,IAAI,GAAA,CAAI,CAC5B,GAAGD,CAAAA,CACH,GAAGhC,CAAAA,CAAeY,CAAAA,CAAgBP,CAAAA,CAAO,MAAM,CAAA,CAC/C,GAAG0B,CACL,CAAC,CAAA,CACD1B,CAAAA,CAAO,MAAA,CAAO,CACZ,SAAA,CAAW4B,EACX,gBAAA,CAAkB,IAAA,CAClB,aAAA,CAAeD,CAAAA,CAAc,IAAA,CAAO,CACtC,CAAC,EACH,CCrHO,SAASE,CAAAA,CAAYtC,CAAAA,CAA4BlE,CAAAA,CAA6C,CACnG,IAAMyG,CAAAA,CAAQvC,CAAAA,CAAW,KAAA,EAAS,EAAC,CAC7BwC,EAAU,IAAI,GAAA,CAAID,CAAAA,CAAM,GAAA,CAAI,CAAC9C,CAAAA,CAAMgD,IAAU,CAAChD,CAAAA,CAAK,EAAA,CAAIgD,CAAK,CAAC,CAAC,EAC9DC,CAAAA,CAAqB,EAAC,CACtBC,CAAAA,CAAqC,EAAC,CAC5C,QAASF,CAAAA,CAAQ,CAAA,CAAGA,CAAAA,CAAQF,CAAAA,CAAM,MAAA,EAAS,CACzC,IAAM9C,CAAAA,CAAO8C,CAAAA,CAAME,CAAK,CAAA,CACxB,GAAI,CAACxG,EAAUwD,CAAAA,CAAMkD,CAAS,CAAA,CAAG,CAAEF,CAAAA,EAAAA,CAAS,QAAU,CACtDC,CAAAA,CAAO,IAAA,CAAKjD,CAAI,CAAA,CAChB,MAAA,CAAO,MAAA,CAAOkD,EAAWC,CAAAA,CAAWnD,CAAAA,CAAM3D,CAAAA,CAAQ6G,CAAS,CAAC,CAAA,CAC5D,IAAME,CAAAA,CAAQpD,CAAAA,CAAK,MAAA,EAAQ,IAAA,CAAMoD,CAAAA,EAC/B5G,CAAAA,CAAU4G,EAAOF,CAAS,CAAA,GAAME,CAAAA,CAAM,EAAA,GAAO,IAAA,EAAA,CAAUL,CAAAA,CAAQ,IAAIK,CAAAA,CAAM,EAAE,CAAA,EAAK,EAAA,EAAMJ,CAAAA,EACjFxG,CAAAA,CAAUsG,EAAMC,CAAAA,CAAQ,GAAA,CAAIK,CAAAA,CAAM,EAAE,CAAE,CAAA,CAAGF,CAAS,CAAA,CACxD,CAAA,CACD,GAAIE,CAAAA,EAAO,EAAA,GAAO,IAAA,CAAM,MACxBJ,CAAAA,CAAQI,CAAAA,CAAQL,CAAAA,CAAQ,GAAA,CAAIK,CAAAA,CAAM,EAAE,EAAKJ,CAAAA,CAAQ,EACnD,CACA,OAAOC,CACT,CAEO,SAASI,EAAAA,CAAmBzC,CAAAA,CAAsBC,CAAAA,CAAkBmC,CAAAA,CAAuB,CAChG,IAAMM,EAAe1C,CAAAA,CAASoC,CAAK,CAAA,EAAKpC,CAAAA,CAASA,CAAAA,CAAS,MAAA,CAAS,CAAC,CAAA,CAC9D2C,CAAAA,CAAY1C,CAAAA,CAAK,SAAA,CAAWb,CAAAA,EAASA,CAAAA,CAAK,KAAOsD,CAAAA,EAAc,EAAE,CAAA,CACvE,GAAIC,CAAAA,GAAc,EAAA,CAAI,OAAOA,CAAAA,CAC7B,IAAMC,CAAAA,CAAU,IAAI,GAAA,CAAI3C,CAAAA,CAAK,IAAI,CAACb,CAAAA,CAAMgD,CAAAA,GAAU,CAAChD,CAAAA,CAAK,EAAA,CAAIgD,CAAK,CAAC,CAAC,CAAA,CACnE,IAAA,IAASS,CAAAA,CAAS,IAAA,CAAK,IAAIT,CAAAA,CAAQ,CAAA,CAAGpC,CAAAA,CAAS,MAAA,CAAS,CAAC,CAAA,CAAG6C,GAAU,CAAA,CAAGA,CAAAA,EAAAA,CAAU,CACjF,IAAMC,CAAAA,CAAcF,CAAAA,CAAQ,IAAI5C,CAAAA,CAAS6C,CAAM,CAAA,CAAE,EAAE,CAAA,CACnD,GAAIC,IAAgB,MAAA,CAAW,OAAOA,CACxC,CACA,OAAO,CACT,CAEA,SAASP,CAAAA,CAAWnD,CAAAA,CAA+B3D,CAAAA,CAAiCuE,CAAAA,CAAmC,CACrH,IAAM+C,CAAAA,CAAa,CAAE,GAAG/C,CAAS,CAAA,CACjC,IAAA,IAAWnE,KAASuD,CAAAA,CAAK,MAAA,CAAQ2D,CAAAA,CAAWlH,CAAAA,CAAM,GAAG,CAAA,CAAIqB,EAAUrB,CAAAA,CAAOJ,CAAAA,CAAOI,CAAAA,CAAM,GAAG,CAAC,CAAA,CAC3F,IAAMwG,CAAAA,CAAkC,EAAC,CACzC,IAAA,IAAWxG,CAAAA,IAASuD,CAAAA,CAAK,OACnBxD,CAAAA,CAAUC,CAAAA,CAAOkH,CAAU,CAAA,EAAKtH,CAAAA,CAAOI,CAAAA,CAAM,GAAG,CAAA,GAAM,MAAA,GAAWwG,CAAAA,CAAOxG,CAAAA,CAAM,GAAG,CAAA,CAAIqB,EAAUrB,CAAAA,CAAOJ,CAAAA,CAAOI,CAAAA,CAAM,GAAG,CAAC,CAAA,CAAA,CAE7H,OAAOwG,CACT,CAEO,SAASW,EAAAA,CAAiBrD,CAAAA,CAA4B,CAC3D,IAAIF,CAAAA,CAAyC,IAAA,CACzCyC,CAAAA,CAAoB,EAAC,CACrBe,CAAAA,CAAkC,EAAC,CACjCC,CAAAA,CAAWzH,CAAAA,EAAoC,CACnD,GAAIgE,CAAAA,GAAWhE,EAAQ,OACvBgE,CAAAA,CAAShE,CAAAA,CACTyG,CAAAA,CAAQD,CAAAA,CAAYtC,CAAAA,CAAYlE,CAAM,CAAA,CACtC,IAAM4G,CAAAA,CAAkC,EAAC,CACnCc,CAAAA,CAASxD,CAAAA,CAAW,OAAO,MAAA,CAASuC,CAAAA,CAAQ,CAAC,CAAE,MAAA,CAAQvC,CAAAA,CAAW,QAAU,EAAG,CAAC,CAAA,CACtF,IAAA,IAAWP,CAAAA,IAAQ+D,EAAQ,MAAA,CAAO,MAAA,CAAOd,CAAAA,CAAQE,CAAAA,CAAWnD,CAAAA,CAAM3D,CAAAA,CAAQ4G,CAAM,CAAC,CAAA,CACjFY,CAAAA,CAASZ,EACX,CAAA,CACA,OAAO,CACL,UAAA,EAAmB,CAAE5C,CAAAA,CAAS,KAAM,CAAA,CACpC,KAAA,CAAMhE,EAA6C,CAAE,OAAAyH,CAAAA,CAAQzH,CAAM,CAAA,CAAUyG,CAAO,EACpF,MAAA,CAAOzG,CAAAA,CAA0D,CAAE,OAAAyH,CAAAA,CAAQzH,CAAM,EAAUwH,CAAQ,CACrG,CACF,CC1DA,SAASG,CAAAA,CAAYhD,EAAkD,CACrE,IAAMd,CAAAA,CAASc,CAAAA,CAAO,WAAA,EAAa,MAAA,EAAU,EAAC,CACxC3E,CAAAA,CAAS,CAAE,GAAG2E,CAAAA,CAAO,MAAO,EAClC,IAAA,GAAW,CAAE,GAAA,CAAAN,CAAI,CAAA,GAAKR,CAAAA,CAAQ,OAAO7D,CAAAA,CAAOqE,CAAG,CAAA,CAC/C,OAAO,MAAA,CAAO,MAAA,CAAOrE,EAAQmE,CAAAA,CAAaN,CAAM,CAAC,CACnD,CAEO,SAAS+D,EAAWjD,CAAAA,CAA+C,CACxE,OAAO6B,CAAAA,CAAY7B,CAAAA,CAAO,UAAA,CAAYgD,EAAYhD,CAAM,CAAC,CAAA,CAAEA,CAAAA,CAAO,gBAAA,CAAmB,CAAC,CACxF,CAEO,SAASkD,CAAAA,CAAgBlD,CAAAA,CAAmC,CACjE,IAAMhB,EAAOgB,CAAAA,CAAO,WAAA,CACduB,CAAAA,CAAYvC,CAAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAE,GAAA,CAAAU,CAAI,CAAA,GAAMA,CAAG,CAAA,CAClDM,EAAO,KAAA,CAAM,MAAA,CAASgD,CAAAA,CAAYhD,CAAM,CAAA,CACxC,IAAA,IAAWN,KAAO6B,CAAAA,CAAW,OAAOvB,CAAAA,CAAO,MAAA,CAAON,CAAG,CAAA,CACrDM,EAAO,OAAA,CAAQ,GAAA,CAAIhB,CAAAA,CAAK,EAAA,CAAIuC,CAAS,CAAA,CACrCvB,EAAO,UAAA,CAAW,eAAA,CAAgBA,CAAAA,CAAO,MAAA,CAAQA,CAAAA,CAAO,MAAM,EAC9DA,CAAAA,CAAO,UAAA,CAAW,WAAA,CAAY,IAAA,CAAM,IAAI,CAAA,CACxC,IAAMiB,CAAAA,CAASF,CAAAA,CAAmBf,CAAM,CAAA,CACxC,OAAAA,CAAAA,CAAO,OAAO,CAAE,SAAA,CAAW,CAAC,GAAGuB,CAAAA,CAAW,GAAGN,CAAM,CAAA,CAAG,gBAAA,CAAkB,IAAA,CAAM,aAAA,CAAe,IAAK,CAAC,EAC5FM,CACT,CAEO,SAAS4B,CAAAA,CAAmBnD,CAAAA,CAA+B,CAChE,IAAMhB,CAAAA,CAAOgB,CAAAA,CAAO,WAAA,CAChBhB,CAAAA,EAAMgB,CAAAA,CAAO,OAAA,CAAQ,OAAOhB,CAAAA,CAAK,EAAE,EACzC,CAEO,SAASoE,EAAAA,CAAWpD,EAAyBgC,CAAAA,CAAyB,CAC3E,OAAAhC,CAAAA,CAAO,KAAA,CAAM,gBAAA,CAAmBgC,EAChChC,CAAAA,CAAO,MAAA,CAAO,CAAE,gBAAA,CAAkB,IAAK,CAAC,EACjCkD,CAAAA,CAAgBlD,CAAM,CAC/B,CChCA,eAAsBqD,EAAAA,CAAWrD,EAAyBsD,CAAAA,CAAkBC,CAAAA,CAAc,KAAA,CAAyB,CACjH,GAAIvD,CAAAA,CAAO,YAAcA,CAAAA,CAAO,cAAA,CAAgB,OAAO,MAAA,CAClDuD,CAAAA,EAAaJ,CAAAA,CAAmBnD,CAAM,CAAA,CAC3C,IAAMwD,CAAAA,CAAY,CAAE,GAAGxD,CAAAA,CAAO,SAAU,CAAA,CACpCyD,CAAAA,CAAa,KAAA,CACXC,CAAAA,CAAQ1D,CAAAA,CAAO,eAAA,CACf2D,EAAY,EAAE3D,CAAAA,CAAO,cAAA,CACvB3E,CAAAA,CAAS6F,CAAAA,CAAgBlB,CAAM,EAC7B4D,CAAAA,CAAgB3D,CAAAA,CAAmBD,CAAAA,CAAQ3E,CAAM,CAAA,CACjDwI,CAAAA,CAAQ,IAAMH,CAAAA,GAAU1D,CAAAA,CAAO,eAAA,EAAmB2D,CAAAA,GAAc3D,CAAAA,CAAO,cAAA,EAAkB4D,GAAc,CAC7G5D,CAAAA,CAAO,KAAA,CAAM,UAAA,CAAa,IAAA,CAC1BA,CAAAA,CAAO,QAAO,CACd,GAAI,CAEF,GADI6D,CAAAA,EAAM,EACN,OAAO,IAAA,CAAKzC,CAAAA,CAAapB,CAAAA,CAAQ,CAAA,CAAI,CAAC,CAAA,CAAE,OAAS,CAAA,EAAK6D,CAAAA,EAAM,CAAG,OAAO,CAAA,CAAA,CAC1E,GAAIL,EAAU,cAAA,CAAgB,CAC5B,IAAMM,CAAAA,CAAU,MAAMN,CAAAA,CAAU,eAAenI,CAAM,CAAA,CACrD,GAAIwI,CAAAA,EAAM,EAAKC,CAAAA,GAAY,GAAO,OAAO,CAAA,CAC3C,CACA,GAAID,CAAAA,EAAM,CAAG,OAAO,CAAA,CAAA,CACpB,GAAIL,CAAAA,CAAU,cAAA,CAAgB,CAC5B,GAAI,OAAO,IAAA,CAAKpC,CAAAA,CAAapB,CAAAA,CAAQ,CAAA,CAAI,CAAC,CAAA,CAAE,OAAS,CAAA,EAAK6D,CAAAA,EAAM,CAAG,OAAO,CAAA,CAAA,CAC1ExI,CAAAA,CAAS6F,EAAgBlB,CAAM,EACjC,CACAyD,CAAAA,CAAa,CAAA,CAAA,CACb,IAAMM,EAAe,CAAC,GAAG/D,CAAAA,CAAO,OAAA,CAAQ,IAAA,EAAM,EAE9C,OADA,MAAMsD,CAAAA,CAAOjI,CAAAA,CAAQ,CAAC,GAAG0I,CAAY,CAAC,CAAA,CAClCJ,CAAAA,GAAc3D,CAAAA,CAAO,cAAA,EACzB,MAAM5F,EAAY,aAAA,CAAe,IAAMoJ,CAAAA,CAAU,aAAA,GAAgBnI,CAAAA,CAAQ0I,CAAY,CAAC,CAAA,CAC/E,CAAA,CACT,CAAA,MAASzJ,CAAAA,CAAO,CACd,GAAI,CAACmJ,CAAAA,EAAcI,CAAAA,EAAM,CAAG,OAAO,MAAA,CACnC,MAAMvJ,CACR,CAAA,OAAE,CACIqJ,CAAAA,GAAc3D,CAAAA,CAAO,cAAA,GACvBA,CAAAA,CAAO,MAAM,UAAA,CAAa,KAAA,CAC1BA,CAAAA,CAAO,MAAA,EAAO,EAElB,CACF,CCpCA,SAASgE,EAAAA,CAAchE,CAAAA,CAAkC,CACvD,IAAMhB,CAAAA,CAAOgB,EAAO,WAAA,CACpB,GAAI,CAAChB,CAAAA,CAAM,OAAO,KAAA,CAClB,IAAMG,CAAAA,CAASJ,CAAAA,CAAaC,CAAAA,CAAM8B,CAAAA,CAAoBd,CAAM,CAAA,CAAGA,EAAO,UAAU,CAAA,CAChF,GAAI,MAAA,CAAO,IAAA,CAAKb,CAAM,EAAE,MAAA,GAAW,CAAA,CAAG,OAAO,MAAA,CAC7C,IAAMoB,CAAAA,CAAiB,CAAE,GAAGP,CAAAA,CAAO,MAAO,CAAA,CAC1C,OAAA,MAAA,CAAO,MAAA,CAAOA,EAAO,MAAA,CAAQb,CAAM,CAAA,CACnCa,CAAAA,CAAO,MAAA,CAAO,CAAE,UAAWL,CAAAA,CAAeY,CAAAA,CAAgBP,CAAAA,CAAO,MAAM,CAAE,CAAC,EACnE,IACT,CAEA,SAASiE,EAAAA,CAAOjE,CAAAA,CAAyBgC,CAAAA,CAAqB,CAC5DhC,CAAAA,CAAO,eAAA,EAAA,CACPA,CAAAA,CAAO,KAAA,CAAM,gBAAA,CAAmBgC,CAAAA,CAChChC,EAAO,MAAA,CAAO,CAAE,gBAAA,CAAkB,IAAK,CAAC,EAC1C,CAEA,eAAsBkE,EAAAA,CAASlE,CAAAA,CAAyBsD,CAAAA,CAAqC,CAC3F,GAAI,CAACtD,CAAAA,CAAO,WAAA,EAAeA,CAAAA,CAAO,cAAA,EAAkBA,CAAAA,CAAO,UAAA,EAAc,CAACA,CAAAA,CAAO,WAAA,EAAa,IAAA,CAAM,OAAO,MAAA,CAC3G,GAAIiD,EAAWjD,CAAM,CAAA,CAAG,OAAOmE,EAAAA,CAAWnE,CAAAA,CAAQ,MAAA,CAAQ,MAAM,CAAA,CAChE,IAAMhB,CAAAA,CAAOgB,CAAAA,CAAO,WAAA,CACpB,GAAI,CAACsD,CAAAA,EAAU,CAACtE,CAAAA,CAAM,OAAO,MAAA,CAC7B,IAAM3D,EAAS2E,CAAAA,CAAO,MAAA,CAChBb,CAAAA,CAAS,CAAE,GAAGa,CAAAA,CAAO,MAAO,CAAA,CAC9BoE,CAAAA,CAAY,KAAA,CACV7C,CAAAA,CAAY2B,CAAAA,CAAgBlD,CAAM,EAClCqE,CAAAA,CAAgBrE,CAAAA,CAAO,MAAA,CACvBsE,CAAAA,CAASrE,CAAAA,CAAmBD,CAAAA,CAAQ,CAAE,GAAGqE,CAAc,CAAC,CAAA,CAC9D,GAAI,CACF,OAAO,MAAMhB,EAAAA,CAAWrD,CAAAA,CAAQ,MAAOuE,CAAAA,CAAWC,CAAAA,GAAY,CAC5D,MAAMlB,CAAAA,CAAOiB,CAAAA,CAAWC,CAAO,CAAA,CAC/BJ,CAAAA,CAAY,GACd,CAAA,CAAG,CAAA,CAAI,CACT,CAAA,OAAE,CACI,CAACA,GAAapE,CAAAA,CAAO,MAAA,GAAWqE,CAAAA,EAAiB,CAACC,CAAAA,EAAO,GAC3DtE,EAAO,KAAA,CAAM,MAAA,CAAS3E,CAAAA,CACtB2E,CAAAA,CAAO,KAAA,CAAM,MAAA,CAAS,CAAE,GAAGb,CAAAA,CAAQ,GAAGa,CAAAA,CAAO,MAAO,CAAA,CACpDA,EAAO,OAAA,CAAQ,MAAA,CAAOhB,CAAAA,CAAK,EAAE,CAAA,CAC7BgB,CAAAA,CAAO,OAAO,CAAE,SAAA,CAAAuB,CAAAA,CAAW,gBAAA,CAAkB,IAAA,CAAM,aAAA,CAAe,IAAK,CAAC,CAAA,EAE5E,CACF,CAEA,eAAsB4C,EAAAA,CAAWnE,EAAyByE,CAAAA,CAA4BC,CAAAA,CAAsCD,CAAAA,CAA6B,CACvJ,IAAME,CAAAA,CAAWD,IAAW,MAAA,CAE5B,GADI,CAAC1E,CAAAA,CAAO,WAAA,EAAeA,CAAAA,CAAO,gBAAkBA,CAAAA,CAAO,UAAA,EACvD,CAAC2E,CAAAA,GAAaF,CAAAA,GAAc,MAAA,CAASzE,EAAO,UAAA,CAAaA,CAAAA,CAAO,WAAA,CAAA,CAAc,OAAO,MAAA,CACzF,IAAMhB,EAAOgB,CAAAA,CAAO,WAAA,CACd4E,CAAAA,CAAaH,CAAAA,GAAc,MAAA,EAAU,CAACE,EAE5C,GADIC,CAAAA,EAAYzB,CAAAA,CAAmBnD,CAAM,CAAA,CACrC4E,CAAAA,EAAcZ,GAAchE,CAAM,CAAA,CAAG,OAAO,MAAA,CAChD,IAAMwD,CAAAA,CAAY,CAAE,GAAGxD,CAAAA,CAAO,SAAU,CAAA,CAClC6E,CAAAA,CAAW7E,CAAAA,CAAO,eACpBoE,CAAAA,CAAY,KAAA,CAEVU,CAAAA,CADY9E,CAAAA,CAAO,gBAAA,EACIyE,CAAAA,GAAc,OAAS,CAAA,CAAI,EAAA,CAAA,CAClDM,CAAAA,CAASJ,CAAAA,CAAW1B,CAAAA,CAAWjD,CAAM,EAAIA,CAAAA,CAAO,YAAA,CAAa8E,CAAO,CAAA,CAC1E,GAAI,CAACC,EAAQ,OAAO,MAAA,CACpB,IAAMC,CAAAA,CAA6B,CAAE,UAAA,CAAYhG,EAAK,EAAA,CAAI,QAAA,CAAU+F,CAAAA,CAAO,EAAA,CAAI,MAAA,CAAAL,CAAAA,CAAQ,OAAQ,CAAE,GAAG5D,CAAAA,CAAoBd,CAAM,CAAE,CAAE,EAC5H0D,EAAAA,CAAQ1D,CAAAA,CAAO,eAAA,CACf2D,CAAAA,CAAY,EAAE3D,CAAAA,CAAO,eACrB4D,EAAAA,CAAgB3D,CAAAA,CAAmBD,CAAAA,CAAQgF,CAAAA,CAAQ,MAAM,CAAA,CACzDnB,EAAQ,IAAMH,EAAAA,GAAU1D,CAAAA,CAAO,eAAA,EAAmB2D,CAAAA,GAAc3D,CAAAA,CAAO,gBACxEA,CAAAA,CAAO,WAAA,EAAa,EAAA,GAAOhB,CAAAA,CAAK,EAAA,EAAM4E,EAAAA,GAC3C5D,CAAAA,CAAO,KAAA,CAAM,cAAA,CAAiB,IAAA,CAC9BA,CAAAA,CAAO,MAAA,GACP,GAAI,CACF,GAAI6D,CAAAA,EAAM,CAAG,OAAO,GACpB,GAAIe,CAAAA,EAAcC,CAAAA,CAAU,CAC1B,IAAM5C,CAAAA,CAAS,MAAM4C,CAAAA,CAAU7F,CAAAA,CAAK,EAAA,CAAIgG,CAAAA,CAAQ,MAAM,CAAA,CACtD,GAAInB,CAAAA,EAAM,CAAG,OAAO,CAAA,CAAA,CACpB,GAAI5B,CAAAA,EAAU,OAAO,IAAA,CAAKA,CAAM,CAAA,CAAE,MAAA,CAAS,CAAA,CACzC,OAAA5B,EAAsBL,CAAAA,CAAQiC,CAAM,CAAA,CAC7B,CAAA,CAEX,CACA,GAAIuB,EAAU,kBAAA,CAAoB,CAChC,IAAMM,CAAAA,CAAU,MAAMN,CAAAA,CAAU,mBAAmBwB,CAAO,CAAA,CAC1D,GAAInB,CAAAA,EAAM,EAAKC,CAAAA,GAAY,GAAO,OAAO,CAAA,CAC3C,CAEA,OADID,CAAAA,EAAM,EACNe,GAAcZ,EAAAA,CAAchE,CAAM,CAAA,CAAU,CAAA,CAAA,EAChDoE,CAAAA,CAAY,CAAA,CAAA,CACRO,GAAUzB,CAAAA,CAAgBlD,CAAM,CAAA,CACpCiE,EAAAA,CAAOjE,CAAAA,CAAQ8E,CAAO,EACtB,MAAM1K,CAAAA,CAAY,iBAAA,CAAmB,IAAMoJ,CAAAA,CAAU,iBAAA,GAAoBwB,CAAO,CAAC,CAAA,CAC1E,CAAA,CAAA,CACT,CAAA,MAAS1K,CAAAA,CAAO,CACd,GAAI,CAAC8J,CAAAA,EAAaP,CAAAA,EAAM,CAAG,OAAO,MAAA,CAClC,MAAMvJ,CACR,CAAA,OAAE,CACIqJ,CAAAA,GAAc3D,CAAAA,CAAO,cAAA,GACvBA,EAAO,KAAA,CAAM,cAAA,CAAiB,KAAA,CAC9BA,CAAAA,CAAO,MAAA,EAAO,EAElB,CACF,CAEO,SAASiF,EAAAA,CAAkBjF,CAAAA,CAAyBkF,CAAAA,CAAwB,CACjF,GAAI,CAAClF,CAAAA,CAAO,WAAA,CAAa,OACzB,IAAMW,CAAAA,CAAcX,EAAO,UAAA,CAAW,aAAA,CACpCkF,CAAAA,CACAlF,CAAAA,CAAO,MAAA,CACPA,CAAAA,CAAO,gBACT,CAAA,CACIW,CAAAA,GAAgBX,CAAAA,CAAO,gBAAA,CAAkBA,CAAAA,CAAO,MAAA,EAAO,CAClDW,CAAAA,GAAgB,IAAA,EAAMsD,EAAAA,CAAOjE,CAAAA,CAAQW,CAAW,EAC3D","file":"chunk-LK2GLVPK.js","sourcesContent":["export class FormLifecycleError extends Error {\n readonly committed = true;\n readonly cause: unknown;\n\n constructor(readonly phase: 'afterStepChange' | 'afterSubmit', cause: unknown) {\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 { await callback(); }\n catch (error) { throw new FormLifecycleError(phase, error); }\n}\n","export const TYPE_MESSAGES = {\n email: 'Enter a valid email',\n number: 'Enter a number',\n boolean: 'Must be true or false',\n option: 'Select one of the available options',\n options: 'Must be a list of available options',\n string: 'Must be text',\n date: 'Enter a valid date',\n datetime: 'Enter a valid date and time',\n file: 'Must be a file reference',\n value: 'Invalid value',\n};\n\nexport type ValidationRule = 'required' | 'minLength' | 'maxLength' | 'min' | 'max' | 'pattern' | 'matchField';\n\nexport function getDefaultMessage(rule: ValidationRule, params?: Record<string, unknown>): string {\n switch (rule) {\n case 'required':\n return 'This field is required';\n case 'minLength':\n return `Must be at least ${params?.min} ${params?.unit ?? 'characters'}`;\n case 'maxLength':\n return `Must be at most ${params?.max} ${params?.unit ?? 'characters'}`;\n case 'min':\n return `Must be at least ${params?.min}`;\n case 'max':\n return `Must be at most ${params?.max}`;\n case 'pattern':\n return 'Invalid format';\n case 'matchField':\n return 'Fields must match';\n default:\n return 'Invalid value';\n }\n}\n","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\nfunction compare(value: unknown, operand: number, test: (value: number, operand: number) => boolean): boolean {\n const number = toNumber(value);\n return number !== undefined && test(number, operand);\n}\n\nexport function evaluateCondition(\n condition: ShowCondition,\n values: Record<string, unknown>,\n): boolean {\n const value = values[condition.field];\n if (condition.eq !== undefined) return value === condition.eq;\n if (condition.neq !== undefined) return value !== condition.neq;\n if (condition.in !== undefined) return condition.in.includes(value as string | number);\n if (condition.notIn !== undefined) return !condition.notIn.includes(value as string | number);\n if (condition.notEmpty !== undefined) return !condition.notEmpty || !isBlank(value);\n if (condition.gt !== undefined) return compare(value, condition.gt, (a, b) => a > b);\n if (condition.gte !== undefined) return compare(value, condition.gte, (a, b) => a >= b);\n if (condition.lt !== undefined) return compare(value, condition.lt, (a, b) => a < b);\n if (condition.lte !== undefined) return compare(value, condition.lte, (a, b) => a <= b);\n return false;\n}\n","import type { FormField, ShowCondition } from '../types';\nimport { evaluateCondition } from './evaluate-condition';\n\nexport function isVisible(\n field: Pick<FormField, 'show' | 'showAny'>,\n values: Record<string, unknown>,\n): 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 { 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 { FormField } from '../types';\nimport { getDefaultMessage, TYPE_MESSAGES } from './default-messages';\n\nexport const BOOLEAN_TYPES = ['checkbox', 'switch'];\nexport const BUILT_IN_TYPES = ['text', 'email', 'phone', 'number', 'password', 'select', 'autocomplete', 'multiselect', 'checkbox', 'radio', 'switch', 'file', 'date', 'datetime', 'textarea'];\n\nexport const MAX_STRING_LENGTH = 10000;\nconst MAX_EMAIL_LENGTH = 254;\nconst MAX_ITEMS = 1000;\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 DATE_TIME = new RegExp(`^${DATE}T(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d{1,3})?)?(?:Z|[+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)?$`);\nconst TEXT_TYPES = new Set(['text', 'phone', 'password', 'textarea', 'autocomplete']);\nconst FORMATS = new Map<string, [RegExp, string, number]>([\n ['email', [EMAIL, TYPE_MESSAGES.email, MAX_EMAIL_LENGTH]],\n ['date', [DATE_ONLY, TYPE_MESSAGES.date, MAX_STRING_LENGTH]],\n ['datetime', [DATE_TIME, TYPE_MESSAGES.datetime, MAX_STRING_LENGTH]],\n]);\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 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\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): string | null {\n const max = Math.min(MAX_STRING_LENGTH, field.validation?.maxLength ?? MAX_STRING_LENGTH);\n if (value.length <= max) return null;\n return field.validation?.maxLengthMessage ?? getDefaultMessage('maxLength', { max });\n}\n\nfunction multiselectError(field: FormField, value: unknown): string | null {\n if (!Array.isArray(value)) return TYPE_MESSAGES.options;\n if (value.length > (staticOptions(field)?.length ?? MAX_ITEMS)) return TYPE_MESSAGES.option;\n const valid = value.every((item) => typeof item === 'string' && item.length <= MAX_STRING_LENGTH && isOption(field, item));\n return valid ? null : TYPE_MESSAGES.option;\n}\n\nfunction stringError(field: FormField, value: unknown, message: string): string | null {\n return typeof value === 'string' ? lengthError(field, value) : message;\n}\n\nfunction formatError(field: FormField, value: unknown, [format, message, max]: [RegExp, string, number]): string | null {\n if (typeof value !== 'string') return message;\n return lengthError(field, value) ?? (value.length <= max && format.test(value) && (format === EMAIL || isCalendarDate(value)) ? null : message);\n}\n\nfunction primitiveError(field: FormField, value: unknown): string | null {\n if (typeof value === 'boolean' || (typeof value === 'number' && Number.isFinite(value))) return null;\n return stringError(field, value, TYPE_MESSAGES.value);\n}\n\nfunction isBlank(field: FormField, value: unknown): boolean {\n return value == null || value === '' || (field.type === 'multiselect' && Array.isArray(value) && !value.length);\n}\n\nexport function typeError(field: FormField, value: unknown): string | null {\n if (isBlank(field, value)) return null;\n if (BOOLEAN_TYPES.includes(field.type)) return typeof value === 'boolean' ? null : TYPE_MESSAGES.boolean;\n if (field.type === 'number') return typeof value === 'number' && Number.isFinite(value) ? null : TYPE_MESSAGES.number;\n if (field.type === 'multiselect') return multiselectError(field, value);\n if (field.type === 'file') return stringError(field, value, TYPE_MESSAGES.file);\n const format = FORMATS.get(field.type);\n if (format) return formatError(field, value, format);\n if (field.type === 'select' || field.type === 'radio') return stringError(field, value, TYPE_MESSAGES.option) ?? (isOption(field, value) ? null : TYPE_MESSAGES.option);\n return TEXT_TYPES.has(field.type) ? stringError(field, value, TYPE_MESSAGES.string) : primitiveError(field, value);\n}\n\nexport function clientTypeError(field: FormField, value: unknown): string | null {\n if (field.type === 'file' || !BUILT_IN_TYPES.includes(field.type)) return null;\n return typeError(field, value);\n}\n","import type { FieldValidation, FormField } from '../types';\nimport { isBlank } from '../visibility';\nimport { getDefaultMessage } from './default-messages';\nimport { BOOLEAN_TYPES, clientTypeError, trimValue } from './type-checks';\n\nexport type ValidatorFn = (\n value: unknown,\n allValues: Record<string, unknown>,\n) => string | null;\n\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 unit?: 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`] ?? getDefaultMessage(`min${rule}`, { min, unit });\n if (max !== undefined && size > max) return rules[`max${rule}Message`] ?? getDefaultMessage(`max${rule}`, { max, unit });\n return undefined;\n}\n\nfunction patternError(value: unknown, rules: FieldValidation): string | undefined {\n if (rules.pattern === undefined) return undefined;\n try {\n return new RegExp(rules.pattern).test(String(value)) ? undefined : rules.patternMessage ?? getDefaultMessage('pattern');\n } catch {\n return undefined;\n }\n}\n\nexport function validateFieldValue(\n field: FormField,\n input: unknown,\n allValues: Record<string, unknown>,\n validators?: Record<string, ValidatorFn>,\n): string | null {\n const value = trimValue(field, input);\n const rules = field.validation ?? {};\n const matchMessage = rules.matchFieldMessage ?? getDefaultMessage('matchField');\n if (isEmpty(value, field)) {\n if (rules.required) return typeof rules.required === 'string' ? rules.required : getDefaultMessage('required');\n return rules.matchField !== undefined && !isBlank(allValues[rules.matchField]) ? matchMessage : null;\n }\n const typeIssue = clientTypeError(field, value);\n if (typeIssue) return typeIssue;\n const sizeError = typeof value === 'string' || Array.isArray(value)\n ? boundError(value.length, 'Length', rules, Array.isArray(value) ? 'items' : undefined)\n : typeof value === 'number' ? boundError(value, '', rules) : undefined;\n const matchError = rules.matchField !== undefined && value !== allValues[rules.matchField] ? matchMessage : undefined;\n return (sizeError\n ?? patternError(value, rules)\n ?? matchError\n ?? (rules.validator ? validators?.[rules.validator]?.(value, allValues) : undefined)) || null;\n}\n","import type { FormField, FormStep } from '../types';\nimport { isVisible } from '../visibility';\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): Record<string, string> {\n return validateFields(step.fields, values, validators);\n}\n\nexport function validateFields(\n fields: FormField[],\n values: Record<string, unknown>,\n validators?: Record<string, ValidatorFn>,\n): Record<string, string> {\n const errors: Record<string, string> = {};\n\n for (const field of fields) {\n if (!isVisible(field, values)) continue;\n\n const error = validateFieldValue(field, values[field.key], values, validators);\n if (error) {\n errors[field.key] = error;\n }\n }\n\n return errors;\n}\n","import type { FormDefinition, FormField } from '../types';\n\nexport function conditionFields(source: Pick<FormField, 'show' | 'showAny'>): string[] {\n return [...(source.show ?? []), ...(source.showAny ?? [])].map((condition) => condition.field);\n}\n\nexport function getAllFields(definition: FormDefinition): FormField[] {\n return definition.steps?.length ? definition.steps.flatMap((step) => step.fields) : definition.fields ?? [];\n}\n\nexport function createValues(\n fields: FormField[],\n initialValues?: Record<string, unknown>,\n): 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 }\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(\n previous: Record<string, unknown>,\n next: Record<string, unknown>,\n): 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 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).filter((key) => checked[key] !== undefined).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","import { validateFieldValue, validateFields, validateStep } from '../validation';\nimport { createValues, getChangedKeys } from './engine-utils';\nimport { trimValue } from '../validation/type-checks';\nimport type { EngineInternals } from './runtime-internals';\n\nexport function applyValidationErrors(engine: EngineInternals, errors: Record<string, string>, navigate = false): void {\n const previousErrors = engine.errors;\n engine.state.errors = {};\n engine.state.topLevelErrors = [];\n for (const [key, message] of Object.entries(errors)) {\n if (engine.visibility.activeField(key, engine.values)) engine.errors[key] = message;\n else engine.topLevelErrors.push(message);\n }\n const structureChanged = navigate && moveToFirstError(engine, errors);\n engine.notify({ fieldKeys: getChangedKeys(previousErrors, engine.errors), structureChanged });\n}\n\nfunction moveToFirstError(engine: EngineInternals, errors: Record<string, string>): boolean {\n const firstErrorKey = Object.keys(errors).find((key) => engine.errors[key] !== undefined);\n const targetIndex = firstErrorKey && engine.isMultiStep\n ? engine.visibility.findStepIndex(firstErrorKey, engine.values, engine.currentStepIndex)\n : null;\n if (targetIndex === null || targetIndex === engine.currentStepIndex) return false;\n engine.state.currentStepIndex = targetIndex;\n return true;\n}\n\nexport function clearResolvedMatchErrors(engine: EngineInternals, key: string): string[] {\n const cleared: string[] = [];\n for (const field of engine.visibility.allFields) {\n if (field.validation?.matchField !== key || engine.errors[field.key] === undefined) continue;\n if (validateFieldValue(field, engine.values[field.key], getValidationValues(engine), engine.validators)) continue;\n delete engine.errors[field.key];\n cleared.push(field.key);\n }\n return cleared;\n}\n\nexport function pruneOffPathErrors(engine: EngineInternals): string[] {\n const pathFields = new Set(engine.visibleSteps.flatMap((step) => step.fields.map((field) => field.key)));\n const pruned = Object.keys(engine.errors).filter((key) => !pathFields.has(key));\n for (const key of pruned) delete engine.errors[key];\n return pruned;\n}\n\nexport function getValidationValues(engine: EngineInternals): Record<string, unknown> {\n return getSubmitValues(engine);\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) {\n if (engine.skipped.has(step.id)) continue;\n Object.assign(errors, validateStep(step, getValidationValues(engine), engine.validators));\n }\n } else {\n Object.assign(\n errors,\n validateFields(engine.definition.fields ?? [], getValidationValues(engine), engine.validators),\n );\n }\n engine.state.errors = 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 if (!field) return null;\n const previousError = engine.errors[key];\n const error = validateFieldValue(field, engine.values[key], getValidationValues(engine), engine.validators);\n if (error) engine.errors[key] = error;\n else delete engine.errors[key];\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 const values = { ...engine.visibility.conditionValues(engine.values) };\n for (const key of Object.keys(values)) {\n const field = engine.visibility.activeField(key, engine.values);\n if (field) values[key] = trimValue(field, values[key]);\n }\n return withoutSkipped(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 engine.state.submitting = false;\n engine.state.values = createValues(engine.visibility.allFields, values);\n engine.state.errors = {};\n engine.state.topLevelErrors = [];\n engine.state.fieldLoading = {};\n engine.state.stepValidating = false;\n engine.state.currentStepIndex = 0;\n engine.skipped.clear();\n engine.visibility.reconcileHidden(engine.values, engine.errors);\n const changedValues = getChangedKeys(previousValues, engine.values);\n const changedFields = new Set([\n ...changedValues,\n ...getChangedKeys(previousErrors, engine.errors),\n ...loadingFields,\n ]);\n engine.notify({\n fieldKeys: changedFields,\n structureChanged: true,\n valuesChanged: changedValues.size > 0,\n });\n}\n","import type { FormDefinition, FormField, FormStep } from '../types';\nimport { isVisible } from '../visibility';\nimport { trimValue } from '../validation/type-checks';\n\nexport function activeSteps(definition: FormDefinition, values: Record<string, unknown>): FormStep[] {\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 for (let index = 0; index < steps.length;) {\n const step = steps[index];\n if (!isVisible(step, available)) { index++; continue; }\n result.push(step);\n Object.assign(available, stepValues(step, values, available));\n const route = step.routes?.find((route) => (\n isVisible(route, available) && (route.to === null || ((indexes.get(route.to) ?? -1) > index\n && 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 result;\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 stepValues(step: { fields: FormField[] }, values: Record<string, unknown>, previous: Record<string, unknown>) {\n const candidates = { ...previous };\n for (const field of step.fields) candidates[field.key] = trimValue(field, values[field.key]);\n const result: Record<string, unknown> = {};\n for (const field of step.fields) {\n if (isVisible(field, candidates) && values[field.key] !== undefined) result[field.key] = trimValue(field, values[field.key]);\n }\n return result;\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 = activeSteps(definition, values);\n const result: Record<string, unknown> = {};\n const groups = definition.steps?.length ? steps : [{ fields: definition.fields ?? [] }];\n for (const step of groups) Object.assign(result, stepValues(step, values, result));\n active = result;\n };\n return {\n invalidate(): void { source = null; },\n steps(values: Record<string, unknown>): FormStep[] { refresh(values); return steps; },\n values(values: Record<string, unknown>): Record<string, unknown> { refresh(values); return active; },\n };\n}\n","import type { FormStep } from '../types';\nimport { createValues } from './engine-utils';\nimport type { EngineInternals } from './runtime-internals';\nimport { activeSteps } from './step-routes';\nimport { pruneOffPathErrors } from './validation-state';\n\nfunction resetValues(engine: EngineInternals): Record<string, unknown> {\n const fields = 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 = step.fields.map(({ key }) => key);\n engine.state.values = resetValues(engine);\n for (const key of fieldKeys) delete engine.errors[key];\n engine.skipped.set(step.id, fieldKeys);\n engine.visibility.reconcileHidden(engine.values, engine.errors);\n engine.visibility.markChanged(true, true);\n const pruned = pruneOffPathErrors(engine);\n engine.notify({ fieldKeys: [...fieldKeys, ...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 { SubmitFn } from './engine-options';\nimport type { EngineInternals } from './runtime-internals';\nimport { getSubmitValues, validateForm } from './validation-state';\nimport { includeCurrentStep } from './step-skip';\n\nexport async function submitForm(engine: EngineInternals, submit: SubmitFn, 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.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 await submit(values, [...skippedSteps]);\n if (operation !== engine.operationEpoch) return 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 } from './pending-inputs';\nimport { validateStep } from '../validation';\nimport { applyValidationErrors, getValidationValues } from './validation-state';\nimport { includeCurrentStep, skipCurrentStep, skipTarget } from './step-skip';\nimport { submitForm } from './submission';\nimport type { StepChangeContext, SubmitFn } 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 = validateStep(step, getValidationValues(engine), engine.validators);\n if (Object.keys(errors).length === 0) return false;\n const previousErrors = { ...engine.errors };\n Object.assign(engine.errors, 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?: SubmitFn): 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 let committed = false;\n const fieldKeys = skipCurrentStep(engine);\n const skippedValues = engine.values;\n const edited = watchCheckedInputs(engine, { ...skippedValues });\n try {\n return await submitForm(engine, async (submitted, skipped) => {\n await submit(submitted, skipped);\n committed = true;\n }, true);\n } finally {\n if (!committed && engine.values === skippedValues && !edited()) {\n engine.state.values = values;\n engine.state.errors = { ...errors, ...engine.errors };\n engine.skipped.delete(step.id);\n engine.notify({ fieldKeys, structureChanged: true, valuesChanged: true });\n }\n }\n}\n\nexport async function changeStep(engine: EngineInternals, direction: 'next' | 'back', reason: StepChangeContext['reason'] = direction): 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 = engine.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: { ...getValidationValues(engine) } };\n const epoch = engine.validationEpoch;\n const operation = ++engine.operationEpoch;\n const inputsChanged = watchCheckedInputs(engine, context.values);\n const stale = () => epoch !== engine.validationEpoch || operation !== engine.operationEpoch\n || 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(\n fieldKey,\n engine.values,\n engine.currentStepIndex,\n );\n if (targetIndex === engine.currentStepIndex) engine.notify();\n else if (targetIndex !== null) moveTo(engine, targetIndex);\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import {b,y,a,o,c,r,x as x$1,s,q as q$1,C,B as B$1,A,t,u,v,D as D$1,w as w$1,h,f,k as k$1,j}from'./chunk-LK2GLVPK.js';var w=class extends Error{constructor(t){super(`Invalid form definition:
2
+ ${t.map(n=>n.message).join(`
3
+ `)}`),this.name="FormDefinitionError",this.issues=t;}};function he(e){return (t,n,i,s)=>({code:t,severity:e,path:n,message:`${n||"/"}: ${i}.${s?` ${s}.`:""}`,...s&&{hint:`${s}.`}})}var d=he("error"),k=he("warning");function N(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function ye(e){return e.severity==="error"}function I(e){if(e.length===1)return `Use ${JSON.stringify(e[0])}`;let t=e.slice(0,10).map(n=>JSON.stringify(n)).join(", ");return e.length>10?`Use one of: ${t}, ...`:`Use one of: ${t}`}function Te(e,t){let n=Array.from({length:t.length+1},(i,s)=>s);for(let i=1;i<=e.length;i++){let s=[i];for(let r=1;r<=t.length;r++)s[r]=Math.min(n[r]+1,s[r-1]+1,n[r-1]+(e[i-1]===t[r-1]?0:1));n=s;}return n[t.length]}function G(e,t){let n=e.toLowerCase();return t.find(i=>i!==e&&Te(n,i.toLowerCase())<=(i.length>4?2:1))}function D(e,t){let n=G(e,t);return n!==void 0?`Use ${JSON.stringify(n)}`:t.length?I(t):void 0}var _="1.0";function be({formatVersion:e}){if(e===void 0)return [];let t=typeof e=="string"&&/^[1-9]\d*(\.\d+)?$/.test(e);return t&&parseInt(e)<=parseInt(_)?[]:[t?d("unsupported-format-version","/formatVersion",`format ${e} is not supported`,"Upgrade @formhaus/core"):d("invalid-type","/formatVersion","must be a version string",`Use "${_}"`)]}var E=f;function je({suggest:e},t,n){let i=Object.keys(t).filter(a=>a!=="field"),s=i.filter(a=>!E.includes(a)),r=s.map(a=>d("unknown-operator",`${n}/${N(a)}`,`"${a}" is not a condition operator`,e(a,[...E]))),o=i.length-s.length;if(o!==1&&!(o===0&&s.length)){let a=o?`the condition has ${o} operators`:"the condition has no operator";r.push(d("condition-operator-count",n,a,`Use exactly one of: ${E.join(", ")}`));}return r}function Pe(e,{condition:t,path:n,owner:i,step:s,key:r}){let o=e.keys.get(t.field);if(!o){let f=e.keyList.filter(l=>l!==r);return [d("unknown-field",`${n}/field`,`"${t.field}" is not a field key`,e.suggest(t.field,f))]}if(s<0||i==="action")return [];let a=i==="step"?"this or a later step":"a later step";if(o.step<s||i!=="step"&&o.step===s)return [];let u=i==="step"?"earlier steps":"this or an earlier step";return [d("forward-reference",`${n}/field`,`"${t.field}" belongs to ${a}`,`${i==="route"?"Route":i==="step"?"Step":"Field"} conditions can use fields of ${u}`)]}function q(e,t){let{condition:n,path:i}=t;return typeof n.field!="string"?[d("missing-property",`${i}/field`,'the condition has no "field"',"Add the key of the field to test")]:[...je(e,n,i),...Pe(e,t)]}function ke(e){return e.conditions.flatMap(t=>q(e,t))}function K(e,t,n,i,s,r){for(let o of ["show","showAny"])(t[o]??[]).forEach((a,u)=>e.push({condition:a,path:`${n}/${o}/${u}`,owner:i,step:s,key:r}));}function W(e,t,n,i){(t?t.disabled??[]:[]).forEach((s,r)=>e.push({condition:s,path:`${n}/disabled/${r}`,owner:"action",step:i}));}function Se(e,t,n=()=>{}){let i=e.steps??[],s=i.length?i.flatMap((a,u)=>a.fields.map((f,l)=>({field:f,path:`/steps/${u}/fields/${l}`,step:u}))):(e.fields??[]).map((a,u)=>({field:a,path:`/fields/${u}`,step:-1})),r=new Map;for(let a of s)r.has(a.field.key)||r.set(a.field.key,a);let o=[];for(let a of s)K(o,a.field,a.path,"field",a.step,a.field.key);return i.forEach((a,u)=>{K(o,a,`/steps/${u}`,"step",u),(a.routes??[]).forEach((f,l)=>K(o,f,`/steps/${u}/routes/${l}`,"route",u));for(let f of ["next","back","skip"])W(o,a[f],`/steps/${u}/${f}`,u);}),W(o,e.submit,"/submit",-1),W(o,e.cancel,"/cancel",-1),{definition:e,entries:s,keys:r,keyList:[...r.keys()],conditions:o,validators:t,suggest:n}}function ve(e,t,n,i){let s=e[n],r=e[i];return s===void 0||r===void 0||s<=r?[]:[d("invalid-range",`${t}/validation/${n}`,`${n} (${s}) is greater than ${i} (${r})`,`Lower ${n} or raise ${i}`)]}function Ue(e,t){if(e===void 0)return [];try{return new RegExp(e),[]}catch{return [d("invalid-pattern",`${t}/validation/pattern`,`${JSON.stringify(e)} is not a valid regular expression`,"Fix the pattern or escape special characters with a backslash")]}}function Ge(e,{field:t,path:n}){let i=t.validation;if(!i)return [];let s=i.matchField;return [...ve(i,n,"minLength","maxLength"),...ve(i,n,"min","max"),...Ue(i.pattern,n),...s===void 0||e.keys.has(s)?[]:[d("unknown-field",`${n}/validation/matchField`,`"${s}" is not a field key`,e.suggest(s,e.keyList))]]}function Fe(e){return e.entries.flatMap(t=>Ge(e,t))}function _e({definition:e,entries:t,keys:n}){let i=new Map,s=(o,a)=>{let u=a.filter(f=>n.has(f));if(u.length)for(let f of o)i.set(f,[...i.get(f)??[],...u]);},r=o=>[...o.show??[],...o.showAny??[]].map(a=>a.field);for(let{field:o}of t)s([o.key],r(o));for(let o of e.steps??[])s(o.fields.map(a=>a.key),r(o));return i}function qe(e){let t=new Map,n=[];for(let i of e.keys()){if(t.has(i))continue;t.set(i,true);let s=[[i,0]];for(;s.length>0;){let r=s[s.length-1],o=e.get(r[0])?.[r[1]++];if(o===void 0)t.set(r[0],false),s.pop();else if(t.get(o)){let a=s.map(([u])=>u);n.push([...a.slice(a.indexOf(o)),o]);}else t.has(o)||(t.set(o,true),s.push([o,0]));}}return n}function Ke(e){return qe(_e(e)).map(t=>d("condition-cycle",e.keys.get(t[0]).path,`show conditions form a cycle: ${t.join(" -> ")}`,"Remove one of the conditions in the cycle"))}function $e(e){return Ke(e)}var V=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),We={string:[e=>typeof e=="string","a string"],number:[e=>typeof e=="number"&&Number.isFinite(e),"a number"],boolean:[e=>typeof e=="boolean","true or false"],requirement:[e=>["boolean","string"].includes(typeof e),"true, false or a message string"],scalar:[e=>["string","number","boolean"].includes(typeof e),"a string, number or boolean"],list:[e=>Array.isArray(e)&&e.every(t=>["string","number"].includes(typeof t)),"an array of strings or numbers"]};function x(e,t,n){return Object.entries(t).flatMap(([i,s])=>{let[r,o]=We[s];return e[i]===void 0||r(e[i])?[]:[d("invalid-type",`${n}/${N(i)}`,`"${i}" must be ${o}`)]})}function F(e,t,n,i,s=false){return e==null&&!s?[]:Array.isArray(e)?e.flatMap((r,o)=>V(r)?i(r,`${t}/${o}`):[d("invalid-type",`${t}/${o}`,`must be ${n}`)]):[d("invalid-type",t,"must be an array",s?"Use [] when there is nothing to list":void 0)]}function O(e,t,n){return typeof e[t]=="string"?[]:[d("missing-property",`${n}/${t}`,`"${t}" must be a string`)]}var J=(e,t)=>x(e,{field:"string",eq:"scalar",neq:"scalar",in:"list",notIn:"list",notEmpty:"boolean",gt:"number",gte:"number",lt:"number",lte:"number"},t);function B(e,t){return [...F(e.show,`${t}/show`,"a condition object",J),...F(e.showAny,`${t}/showAny`,"a condition object",J)]}function z(e,t){return V(e)?[...x(e,{label:"string"},t),...F(e.disabled,`${t}/disabled`,"a condition object",J)]:[]}var Je=(e,t)=>[...O(e,"value",t),...x(e,{label:"string"},t)],ze={required:"requirement",minLength:"number",maxLength:"number",min:"number",max:"number",pattern:"string",matchField:"string",validator:"string",minLengthMessage:"string",maxLengthMessage:"string",minMessage:"string",maxMessage:"string",patternMessage:"string",matchFieldMessage:"string"};function Be(e,t){return e===void 0?[]:V(e)?x(e,ze,t):[d("invalid-type",t,"must be an object of validation rules")]}function He(e,t){return e===void 0||Array.isArray(e)&&e.every(i=>typeof i=="string")?[]:[d("invalid-type",t,"must be an array of field keys")]}var we=(e,t)=>[...O(e,"key",t),...O(e,"type",t),...x(e,{label:"string",placeholder:"string",helperText:"string"},t),...B(e,t),...F(e.options,`${t}/options`,"an option object",Je),...Be(e.validation,`${t}/validation`),...He(e.optionsDependsOn,`${t}/optionsDependsOn`)],Ye=(e,t)=>[...e.to===null||typeof e.to=="string"?[]:[d("missing-property",`${t}/to`,'"to" must be a step id or null')],...B(e,t)],Qe=(e,t)=>[...O(e,"id",t),...x(e,{title:"string",description:"string"},t),...F(e.fields,`${t}/fields`,"a field object",we,true),...B(e,t),...F(e.routes,`${t}/routes`,"a route object",Ye),...["next","back","skip"].flatMap(n=>z(e[n],`${t}/${n}`))];function Ie(e){if(!V(e))return [d("invalid-type","","the form definition must be an object")];let t=be(e);return t.length?t:[...F(e.fields,"/fields","a field object",we),...F(e.steps,"/steps","a step object",Qe),...z(e.submit,"/submit"),...z(e.cancel,"/cancel")]}function xe(e){return [...O(e,"id",""),...V(e.submit)?[]:[d("missing-property","/submit","the submit action is missing",'Add "submit": { "label": "Submit" }')]]}var T=e=>!!(e.show?.length||e.showAny?.length);function Ce(e,t,n){let i=[];for(let s of e[n].routes??[]){let r=s.to===null?null:t.get(s.to);if(r===null&&!T(s))return i;if(!(r==null||r<=n)&&(i.push(r),!T(s)&&!T(e[r])))return i}return n+1<e.length?[...i,n+1]:i}function De(e){let t=new Map(e.map((n,i)=>[n.id,i]));return e.map((n,i)=>{let s=new Set,r=Ce(e,t,i);for(;r.length;){let o=r.pop();s.has(o)||(s.add(o),r.push(...Ce(e,t,o)),T(e[o])&&o+1<e.length&&r.push(o+1));}return s})}var Xe=new Set([...Object.getOwnPropertyNames(Object.prototype),"prototype"]);function Ze({definition:e}){let t=[],n=e.steps??[],i=new Map;return n.forEach((s,r)=>{let o=i.get(s.id);o===void 0?i.set(s.id,r):t.push(d("duplicate-step-id",`/steps/${r}/id`,`step id "${s.id}" is already used by /steps/${o}`,"Give each step a unique id"));}),n.forEach((s,r)=>(s.routes??[]).forEach((o,a)=>{if(o.to===null)return;let u=i.get(o.to);if(u!==void 0&&u>r)return;let f=n.slice(r+1).map(y=>y.id),l=u===void 0?`"${o.to}" is not a step id`:`"${o.to}" is not a later step`,m=f.length?`${I(f)}, or null to end the form here`:"Use null to end the form here";t.push(d("route-target",`/steps/${r}/routes/${a}/to`,l,m));})),t}function et({definition:e,entries:t}){let n=[],i=De(e.steps??[]),s=(r,o)=>r.step!==o.step&&!i[r.step]?.has(o.step);return t.forEach((r,o)=>{let{field:a,path:u}=r,f=t.slice(0,o).find(l=>l.field.key===a.key&&!s(l,r));Xe.has(a.key)?n.push(d("reserved-key",`${u}/key`,`"${a.key}" is a built-in object property name`,"Rename the field key")):f&&n.push(d("duplicate-key",`${u}/key`,`key "${a.key}" is already used by ${f.path} on the same path`,"Rename one of the fields, or move them to route branches that never meet"));}),n}function Ee(e){let{definition:t}=e;return [...!!t.fields?.length&&!!t.steps?.length?[d("fields-and-steps","",'the definition has both "fields" and "steps"','Move the top-level fields into a step, or remove "steps"')]:[],...Ze(e),...et(e)]}var tt=["in","notIn"],nt=["gt","gte","lt","lte"],it=["text","email","phone","password","textarea","date","datetime","select","radio","autocomplete"];function st(e){return e.type==="number"?"number":j.includes(e.type)?"boolean":it.includes(e.type)?"string":void 0}function ot(e,t,n,i){let s=(l,m)=>[k("condition-value-mismatch",i,l,m)];if(t==="notEmpty")return [];if(nt.includes(t))return e.type!=="multiselect"&&!j.includes(e.type)?[]:s(`"${e.key}" is a ${e.type} field, so "${t}" never matches it`,"Compare a number, text, radio or select field");if(e.type==="multiselect"){let l=t==="neq"||t==="notIn"?"always":"never";return s(`"${e.key}" holds a list of values, so "${t}" ${l} matches it`,"Use notEmpty, or a select or radio field")}let r=tt.includes(t)&&Array.isArray(n)?n:[n],o=st(e),a=o&&r.find(l=>typeof l!==o);if(o&&a!==void 0)return s(`${JSON.stringify(a)} is a ${typeof a}, but "${e.key}" holds a ${o}`,`Use a ${o} value`);let u=o==="string"&&!e.optionsFrom&&e.options?.length?e.options.map(l=>l.value):null,f=u&&r.find(l=>!u.includes(l));return u&&f!==void 0?s(`${JSON.stringify(f)} is not an option of "${e.key}"`,I(u)):[]}function rt(e,t){let{condition:n,path:i}=t;if(q(e,t).length)return [];let s=E.find(r=>r in n);return ot(e.keys.get(n.field).field,s,n[s],`${i}/${s}`)}function at({field:e,path:t}){if(!["select","radio","multiselect"].includes(e.type))return [];if(!Array.isArray(e.options))return e.optionsFrom?[]:[k("missing-options",`${t}/options`,`the ${e.type} field "${e.key}" has no options`,'Add "options" or "optionsFrom"')];let n=e.options.map(r=>r.value),i=e.type==="multiselect"&&Array.isArray(e.defaultValue)?e.defaultValue:[e.defaultValue],s=e.defaultValue===void 0||!n.length||e.optionsFrom?void 0:i.find(r=>!n.includes(r));return s===void 0?[]:[k("default-not-in-options",`${t}/defaultValue`,`${JSON.stringify(s)} is not an option of "${e.key}"`,I(n))]}function ut(e,{field:t,path:n}){let i=t.validation??{},s=(m,y,v)=>k("rule-not-applicable",`${n}/validation/${m}`,y,v),r=k$1.includes(t.type),o=t.type==="number",a=r&&!o?["min","max"].filter(m=>i[m]!==void 0):[],u=r&&["number","checkbox","switch"].includes(t.type)?["minLength","maxLength"].filter(m=>i[m]!==void 0):[],f=[...a.map(m=>s(m,`"${m}" applies to number fields only`,`Use ${m}Length to limit text length`)),...u.map(m=>s(m,`"${m}" does not apply to ${t.type} fields`,o?"Use min and max for numbers":`Remove ${m}`))],{validators:l}=e;return i.validator!==void 0&&l&&!Object.prototype.hasOwnProperty.call(l,i.validator)&&f.push(k("unknown-validator",`${n}/validation/validator`,`the validator "${i.validator}" is not registered`,'Pass it in the "validators" option')),f}function lt(e,t){let{field:n,path:i}=t,s=k$1.includes(n.type)?void 0:G(n.type,k$1);return [...s===void 0?[]:[k("unknown-field-type",`${i}/type`,`"${n.type}" is not a built-in field type`,`Use "${s}", or register a component for "${n.type}"`)],...at(t),...ut(e,t),...(n.optionsDependsOn??[]).flatMap((r,o)=>e.keys.has(r)?[]:[k("unknown-field",`${i}/optionsDependsOn/${o}`,`"${r}" is not a field key`,D(r,e.keyList))])]}function ct({definition:e}){let t=e.steps??[];return t.flatMap((n,i)=>{let s=[],r=new Set((n.routes??[]).map(o=>o.to).filter(o=>o!==null));for(let o of r){let a=t.findIndex(l=>l.id===o),u=t[a+1],f=t[a]?.routes?.some(l=>!l.show?.length&&!l.showAny?.length);!u||!r.has(u.id)||f||s.push(k("route-fallthrough",`/steps/${a}`,`branch "${o}" from "${n.id}" continues into the sibling branch "${u.id}"`,`Add an unconditional route on "${o}" to the step where the branches meet`));}return n.skip&&(n.next===false||!t[1])&&s.push(k("skip-unreachable",`/steps/${i}/skip`,`step "${n.id}" has "skip" but no Continue button or later step`,'Remove "skip", or remove "next": false')),s})}function Oe(e){return [...typeof e.definition.title=="string"?[]:[k("missing-property","/title",'"title" must be a string',"Add a title for host UI and editors")],...e.conditions.flatMap(t=>rt(e,t)),...e.entries.flatMap(t=>lt(e,t)),...ct(e)]}function H(e,{validators:t,suggest:n,warnings:i}={}){let s=Ie(e);if(s.length)return s;let r=Se(e,t,n);return [...xe(e),...Ee(r),...ke(r),...Fe(r),...$e(r),...i?i(r):[]]}function Ve(e){return H(e)}function R(e,t={}){return H(e,{validators:t.validators,suggest:D,warnings:Oe})}function ft(e,t){let n=H(e,{suggest:D});if(n.length)throw new w(n);return e}function dt(e){return R(e).map(t=>t.message)}function Re(e,t){return e.add(t),()=>e.delete(t)}function Le(){let e=0,t=0,n=new Set,i=new Set,s=new Map,r=new Map;return {subscribe:o=>Re(n,o),getSnapshot:()=>e,subscribeStructure:o=>Re(i,o),getStructureSnapshot:()=>t,getFieldSnapshot:o=>s.get(o)??0,subscribeField(o,a){let u=r.get(o)??new Set;return u.add(a),r.set(o,u),()=>{u.delete(a),u.size===0&&r.delete(o);}},notify({fieldKeys:o=[],structureChanged:a=false}={}){for(let u of new Set(o)){s.set(u,(s.get(u)??0)+1);for(let f of r.get(u)??[])f();}if(a){t++;for(let u of i)u();}e++;for(let u of n)u();}}}function pt(e,t){try{if(process.env.NODE_ENV!=="production")return R(e,{validators:t})}catch(n){if(!(n instanceof ReferenceError))throw n}}function Ae(e,t,n){let i=pt(e,n)??Ve(e),s=i.filter(ye);if(s.length)throw new w(s);let r=t.onWarning??(o=>console.warn(`[formhaus] ${o.message}`));for(let o of i)r(o);}function Y(e,t){for(let n of a(e)){let i=t.get(n)??new Set;i.add(e),t.set(n,i);}}function Me(e){let t=b(e),n=new Map,i=new Set,s=y(e),r=new Map,o$1=new Map,a$1=new Map,u=true,f=true,l={visibleSteps:[],currentStep:null,visibleFields:[],canGoNext:false};for(let c of t)n.set(c.key,[...n.get(c.key)??[],c]),Y(c,r);for(let c of e.steps??[]){for(let p of c.fields)a$1.set(p,c);Y(c,o$1);for(let p of c.routes??[])for(let g of a(p))i.add(g);}let m=()=>(e.steps??[]).length>0,y$1=(c,p)=>h(c,s.values(p)),v=(c,p)=>{let g=a$1.get(c);return !g||s.steps(p).includes(g)};function C(c,p){if(!u)return l;if(u=false,!m())return l.visibleSteps=[],l.currentStep=null,l.visibleFields=(e.fields??[]).filter(S=>y$1(S,c)),l;let g=l.visibleSteps=s.steps(c),b=l.currentStep=g[p]??g[g.length-1]??null;return l.visibleFields=b?b.fields.filter(S=>y$1(S,c)):[],l}return {allFields:t,conditionValues:s.values,state:C,markChanged(c,p){(c||p)&&s.invalidate(),c&&(u=true),(c||p)&&(f=true);},getCanGoNext(c,p,g){let b=C(c,p).currentStep;if(!f)return l.canGoNext;f=false;let S=b?o(b,s.values(c),g):{};return l.canGoNext=m()&&Object.keys(S).length===0},findStepIndex(c,p,g){let b=C(p,g).visibleSteps.findIndex(S=>S.fields.some(L=>L.key===c));return b===-1?null:b},affectsStructure(c,p){return i.has(c)||r.has(c)||o$1.has(c)||p.size>0},activeField(c,p){return n.get(c)?.find(g=>v(g,p)&&y$1(g,p))},reconcileHidden(c,p){s.invalidate();let g=[...new Set([...r.keys(),...o$1.keys()])],b=new Set(g),S=new Set,L=h=>c[h]!==void 0||p[h]!==void 0,Q=h=>{delete c[h],delete p[h],s.invalidate(),S.add(h),!b.has(h)&&(b.add(h),g.push(h));};for(let h=0;h<g.length;h++){let j=g[h];b.delete(j);for(let $ of r.get(j)??[])v($,c)&&!y$1($,c)&&L($.key)&&Q($.key);for(let $ of o$1.get(j)??[])if(!y$1($,c))for(let X of $.fields)L(X.key)&&Q(X.key);}return S}}}var Ne=class{constructor(t,n,i){this.definition=t;this.skipped=new Map;this.validationEpoch=0;this.operationEpoch=0;this.subscriptions=Le();this.lifecycle=i??{},this.validators=i?.validators??{},Ae(t,this.lifecycle,this.validators),this.visibility=Me(t);let s=c(this.visibility.allFields,n);this.state={values:s,errors:{},topLevelErrors:[],currentStepIndex:0,fieldLoading:{},stepValidating:false,submitting:false},this.visibility.reconcileHidden(s,this.state.errors);}get onStepValidate(){return this.lifecycle.onStepValidate}get values(){return this.state.values}get errors(){return this.state.errors}get topLevelErrors(){return this.state.topLevelErrors}get currentStepIndex(){return this.state.currentStepIndex}get fieldLoading(){return this.state.fieldLoading}get stepValidating(){return this.state.stepValidating}get submitting(){return this.state.submitting}get isMultiStep(){return (this.definition.steps??[]).length>0}get visibleSteps(){return this.view.visibleSteps}get currentStep(){return this.view.currentStep}get visibleFields(){return this.view.visibleFields}get isFirstStep(){return this.currentStepIndex===0}get isLastStep(){return this.currentStepIndex>=this.visibleSteps.length-1}get canGoNext(){return this.visibility.getCanGoNext(this.state.values,this.currentStepIndex,this.validators)}get progress(){let t=this.visibleSteps.length;return {current:Math.min(this.currentStepIndex+1,t),total:t}}subscribe(t){return this.subscriptions.subscribe(t)}getSnapshot(){return this.subscriptions.getSnapshot()}subscribeField(t,n){return this.subscriptions.subscribeField(t,n)}getFieldSnapshot(t){return this.subscriptions.getFieldSnapshot(t)}subscribeStructure(t){return this.subscriptions.subscribeStructure(t)}getStructureSnapshot(){return this.subscriptions.getStructureSnapshot()}setValue(t,n){let{values:i,errors:s$1}=this.state,r$1=this.isMultiStep?this.visibleSteps:null,o=!Object.is(i[t],n),a=s$1[t]!==void 0;i[t]=n,delete s$1[t];for(let[v,C]of this.skipped)o&&C.includes(t)&&this.skipped.delete(v);let u=this.visibility.reconcileHidden(i,s$1),f=r(this.internals,t),l=new Set([...u,...f]);(o||a)&&l.add(t);let m=o||u.size>0,y=m&&this.visibility.affectsStructure(t,u);if(r$1&&y){this.visibility.markChanged(true,true),this.state.currentStepIndex=x$1(r$1,this.visibleSteps,this.currentStepIndex);for(let v of s(this.internals))l.add(v);}this.notify({fieldKeys:l,structureChanged:y,valuesChanged:m});}setErrors(t){q$1(this.internals,t,true);}setFieldLoading(t,n){let i=this.state.fieldLoading[t]===true;n?this.state.fieldLoading[t]=true:delete this.state.fieldLoading[t],this.notify({fieldKeys:i===n?[]:[t]});}cancelPendingActions(){this.validationEpoch++,this.operationEpoch++,this.state.stepValidating=false,this.state.submitting=false,this.notify();}next(){return C(this.internals,"next")}back(){return C(this.internals,"back")}skip(t){return B$1(this.internals,t)}submit(t){return A(this.internals,t)}isStepSkipped(t){return this.skipped.has(t)}validate(){return t(this.internals)}validateField(t){return u(this.internals,t)}getSubmitValues(){return v(this.internals)}goToStepWithField(t){D$1(this.internals,t);}reset(t){w$1(this.internals,t);}get view(){return this.visibility.state(this.state.values,this.currentStepIndex)}get internals(){return this}notify(t={}){this.visibility.markChanged(!!t.structureChanged,!!t.valuesChanged),this.subscriptions.notify(t);}};
4
+ export{w as a,_ as b,R as c,ft as d,dt as e,Me as f,Ne as g};//# sourceMappingURL=chunk-PNVVU36P.js.map
5
+ //# sourceMappingURL=chunk-PNVVU36P.js.map