@jfdevelops/react-multi-step-form 1.0.0-alpha.4 → 1.0.0-alpha.6

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 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../core/dist/index.mjs","../src/field.tsx","../src/form-config.tsx","../src/step-schema.ts","../src/schema.ts","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/shim/index.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/shim/with-selector.js","../src/hooks/use-multi-step-form-data.ts","../src/create-context.tsx"],"sourcesContent":["function ee(n, ...e) {\n return () => String.raw({ raw: n }, ...e);\n}\nfunction d(n, e, t = Error) {\n if (!n) {\n const r = typeof e == \"function\" ? e() : ee`${e}`();\n throw new t(r);\n }\n}\nconst K = \"MultiStepFormSchema\";\nclass te {\n debug;\n prefix = K;\n includeTimestamp = !1;\n throwOnError = !1;\n constructor(e) {\n if (this.debug = e?.debug ?? !1, this.debug && e?.debug) {\n const {\n includeTimestamp: t = !1,\n prefix: r = K,\n throwOnError: i = !1\n } = e;\n this.includeTimestamp = t, this.prefix = typeof r == \"string\" ? r : r(K), this.throwOnError = i;\n }\n }\n wrapValue(e, t) {\n if (e === \"[]\")\n return `[${t}]`;\n if (e === \"{}\")\n return `{${t}}`;\n if (e === \"none\")\n return t;\n throw new Error(\n `The first argument ${e} is not valid. Valid options include: \"[]\", \"{}\", and \"none\"`\n );\n }\n formatPrefix(e) {\n if (!e)\n return this.prefix;\n const { action: t, value: r, wrapWith: i } = e;\n if (t === \"replace\")\n return this.wrapValue(i ?? \"[]\", r);\n const { delimiter: s } = e;\n return t === \"append\" ? `${this.wrapValue(\n i?.originalPrefix ?? \"[]\",\n this.prefix\n )}${s}${this.wrapValue(\n i?.addedPrefix ?? \"[]\",\n r\n )}`.trim() : t === \"prepend\" ? `${this.wrapValue(\n i?.addedPrefix ?? \"[]\",\n r\n )}${s}${this.wrapValue(\n i?.originalPrefix ?? \"[]\",\n this.prefix\n )}`.trim() : this.prefix;\n }\n formatMessage(e, t, r) {\n const {\n includeTimestamp: i = this.includeTimestamp,\n prefix: s,\n logLevelOptions: a\n } = r ?? {}, p = this.formatPrefix(s), j = this.wrapValue(\n a?.wrapWith ?? \"[]\",\n (a?.level ?? e).toUpperCase()\n ), y = `${p} ${j} ${t}`;\n return i ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ${y}` : y;\n }\n info(e, t) {\n this.debug && console.info(this.formatMessage(\"info\", e, t));\n }\n warn(e, t) {\n this.debug && console.warn(this.formatMessage(\"warn\", e, t));\n }\n error(e, t) {\n if (!this.debug)\n return;\n const r = this.formatMessage(\"error\", e, t);\n if (console.error(r), t?.throw ?? this.throwOnError)\n throw new Error(r);\n }\n}\nconst H = '\"window\" in undefined. No storage is available', D = \"MultiStepForm\";\nclass q {\n key;\n store;\n data;\n log;\n isWindowUndefined;\n constructor(e) {\n const { key: t, data: r, store: i } = e;\n this.log = new te({\n prefix: D\n }), this.key = t, this.data = r, i ? (this.store = i, this.isWindowUndefined = !1) : typeof window < \"u\" ? (this.store = window.localStorage, this.isWindowUndefined = !1) : (this.isWindowUndefined = !0, this.log.warn(H));\n }\n throwOnEmptyStore() {\n d(this.store, () => this.isWindowUndefined ? H : \"No storage available\");\n }\n resolveValue(e) {\n if (typeof e == \"object\")\n return e;\n if (typeof e == \"function\")\n return e(this.data);\n this.log.error(\n `The updater value must be a function or object. Was a ${typeof e}`,\n { throw: !0 }\n );\n }\n hasKey() {\n return this.store.getItem(this.key) !== null;\n }\n get() {\n this.throwOnEmptyStore();\n const e = this.store.getItem(this.key);\n if (e)\n return JSON.parse(e);\n }\n remove() {\n this.throwOnEmptyStore(), this.store.removeItem(this.key);\n }\n add(e) {\n this.throwOnEmptyStore();\n const t = JSON.stringify(this.resolveValue(e));\n this.store.setItem(this.key, t);\n }\n}\nconst re = [\n \"sentence\",\n \"title\",\n \"camel\",\n \"lower\",\n \"upper\",\n \"pascal\",\n \"snake\",\n \"screaming-snake\",\n \"flat\",\n \"kebab\"\n], Q = \"title\";\nfunction se(n, e) {\n const t = n.replace(/([a-z])([A-Z])/g, \"$1 $2\").replace(/[-_]+/g, \" \").trim().split(/\\s+/).map((r) => r.toLowerCase());\n switch (e) {\n case \"sentence\":\n return t[0].charAt(0).toUpperCase() + t[0].slice(1) + (t.length > 1 ? \" \" + t.slice(1).join(\" \") : \"\");\n case \"title\":\n return t.map((r) => r.charAt(0).toUpperCase() + r.slice(1)).join(\" \");\n case \"camel\":\n return t[0] + t.slice(1).map((r) => r.charAt(0).toUpperCase() + r.slice(1)).join(\"\");\n case \"pascal\":\n return t.map((r) => r.charAt(0).toUpperCase() + r.slice(1)).join(\"\");\n case \"lower\":\n return t.join(\" \");\n case \"upper\":\n return t.join(\" \").toUpperCase();\n case \"snake\":\n return t.join(\"_\");\n case \"screaming-snake\":\n return t.join(\"_\").toUpperCase();\n case \"kebab\":\n return t.join(\"-\");\n case \"flat\":\n return t.join(\"\");\n default:\n return n;\n }\n}\nfunction he(n, e = '\"') {\n const t = n.startsWith(e), r = n.endsWith(e);\n if (t && r)\n return n;\n const i = n.replace(/^['\"]|['\"]$/g, \"\");\n return `${e}${i}${e}`;\n}\nfunction P(n) {\n return typeof n != \"string\" ? !1 : re.includes(n);\n}\nfunction X(n, e = Q) {\n return P(n) ? n : e;\n}\nconst ne = [\n \"string\",\n \"string.phone\",\n \"string.email\",\n \"string.time\",\n \"number\",\n \"number.counter\",\n \"date\",\n \"dateTime\",\n \"boolean.switch\"\n], R = \"string\";\nfunction ie(n) {\n return typeof n == \"string\" && ne.includes(n);\n}\nfunction U(n, e, t) {\n const r = [], i = new Set(n), s = t ? t.format(n.map((p) => `${p}`)) : `[${n.join(\", \")}]`;\n for (let p = 0; p < e.length; p++) {\n const j = e[p];\n i.has(j) || r.push(\n `Extra element at index ${p}: \"${j}\" is not in ${s}`\n );\n }\n return e.some((p) => i.has(p)) || r.push(\n `Array must contain at least one valid element from ${s}`\n ), r.length > 0 ? { status: \"error\", errors: r } : { status: \"success\" };\n}\nfunction N(n, e) {\n const t = (r, i) => `❌ ${i + 1}. ${r}`;\n return n.map((r, i) => t(r, i)).join(`\n`);\n}\nfunction G(n) {\n return Object.keys(n);\n}\nvar w;\n((n) => {\n function e(o, u) {\n return u.split(\".\").reduce((f, c) => f?.[c], o);\n }\n function t(o, u, f) {\n const c = u.split(\".\");\n let l = o;\n for (let h = 0; h < c.length; h++) {\n const m = c[h];\n h === c.length - 1 ? l[m] !== void 0 && typeof l[m] == \"object\" && typeof f == \"object\" && f !== null ? Object.assign(l[m], f) : l[m] = f : ((typeof l[m] != \"object\" || l[m] === null) && (l[m] = {}), l = l[m]);\n }\n return l;\n }\n n.setBy = t;\n function r(o) {\n return o.filter((u) => !o.some((f) => f !== u && u.startsWith(f + \".\")));\n }\n function i(o, ...u) {\n const f = r(u);\n if (f.length === 1)\n return e(o, f[0]);\n const c = {};\n for (const l of f) {\n const h = e(o, l);\n t(c, l, h);\n }\n return c;\n }\n n.pickBy = i;\n function s(o) {\n const u = [];\n function f(c, l = \"\") {\n if (c == null || typeof c != \"object\" || Array.isArray(c))\n return;\n const h = Object.keys(c);\n for (const m of h) {\n const b = l ? `${l}.${m}` : m;\n u.push(b);\n const S = c[m];\n S != null && typeof S == \"object\" && !Array.isArray(S) && f(S, b);\n }\n }\n return f(o), u;\n }\n n.createDeep = s;\n function a(o) {\n if (o === null) return \"null\";\n if (Array.isArray(o)) return \"Array\";\n const u = typeof o;\n if (u !== \"object\") return u;\n const f = o?.constructor?.name;\n return f && f !== \"Object\" ? f : \"object\";\n }\n function p(o) {\n if (!o) return [];\n const u = [], f = /[^.[\\]]+|\\[(\\d+)\\]/g;\n let c;\n for (; c = f.exec(o); )\n u.push(c[1] ?? c[0]);\n return u;\n }\n function j(o, u) {\n if (!o) return;\n if (typeof o == \"function\")\n return o;\n const f = p(u);\n let c = o, l;\n for (const h of f) {\n if (!c) break;\n if (typeof c == \"function\") {\n l = c;\n break;\n }\n if (c = c[h], typeof c == \"function\") {\n l = c;\n break;\n }\n }\n return l;\n }\n function y(o, u, f) {\n const c = j(f, u);\n return c ? c(o, u) : a(o);\n }\n function k(o) {\n return typeof o == \"object\" && o !== null;\n }\n function g(o, u, f, c, l) {\n if (o === u)\n return c;\n if (o === null || u === null || typeof o != \"object\" || typeof u != \"object\") {\n const m = f || \"(root)\";\n return typeof o != typeof u ? (c.push({\n path: m,\n expected: y(o, m, l.transformExpected),\n actual: u,\n reason: \"type-mismatch\"\n }), c) : (l.includeValueMismatch && c.push({\n path: m,\n expected: y(o, m, l.transformExpected),\n actual: u,\n reason: \"value-mismatch\"\n }), c);\n }\n if (Array.isArray(o) || Array.isArray(u)) {\n if (!Array.isArray(o) || !Array.isArray(u)) {\n const b = f || \"(root)\";\n return c.push({\n path: b,\n expected: y(o, b, l.transformExpected),\n actual: u,\n reason: \"type-mismatch\"\n }), c;\n }\n const m = o.length;\n for (let b = 0; b < m; b++) {\n const S = o[b], E = u[b], A = f === \"\" ? `[${b}]` : `${f}[${b}]`;\n if (b >= u.length) {\n c.push({\n path: A,\n expected: y(S, A, l.transformExpected),\n actual: void 0,\n reason: \"missing-key\"\n });\n continue;\n }\n g(S, E, A, c, l);\n }\n if (u.length > o.length)\n for (let b = o.length; b < u.length; b++) {\n const S = f === \"\" ? `[${b}]` : `${f}[${b}]`;\n c.push({\n path: S,\n expected: void 0,\n actual: u[b],\n reason: \"extra-key\"\n });\n }\n return c;\n }\n if (k(o) && k(u)) {\n const m = Object.keys(o), b = Object.keys(u);\n for (const S of m) {\n const E = o[S], A = u[S], F = f ? `${f}.${S}` : S;\n if (!(S in u)) {\n c.push({\n path: F,\n expected: y(E, F, l.transformExpected),\n actual: void 0,\n reason: \"missing-key\"\n });\n continue;\n }\n g(E, A, F, c, l);\n }\n for (const S of b)\n if (!(S in o)) {\n const E = f ? `${f}.${S}` : S;\n c.push({\n path: E,\n expected: void 0,\n actual: u[S],\n reason: \"extra-key\"\n });\n }\n return c;\n }\n const h = f || \"(root)\";\n return typeof o != typeof u ? c.push({\n path: h,\n expected: y(o, h, l.transformExpected),\n actual: u,\n reason: \"type-mismatch\"\n }) : l.includeValueMismatch && c.push({\n path: h,\n expected: y(o, h, l.transformExpected),\n actual: u,\n reason: \"value-mismatch\"\n }), c;\n }\n function $(o, u, f, c) {\n const l = i(o, ...u), h = [], m = u.length === 1 ? u[0] : \"\";\n return g(l, f, m, h, {\n transformExpected: c?.transformExpected\n }), {\n ok: h.length === 0,\n mismatches: h\n };\n }\n n.equalsAtPaths = $;\n function T(o) {\n if (o === void 0) return \"undefined\";\n if (typeof o == \"string\") return JSON.stringify(o);\n try {\n return JSON.stringify(o, null, 2);\n } catch {\n return String(o);\n }\n }\n function v(o) {\n switch (o.reason) {\n case \"missing-key\":\n return \"Missing key\";\n case \"extra-key\":\n return \"Extra key\";\n case \"type-mismatch\":\n return \"Type mismatch\";\n case \"value-mismatch\":\n return \"Value mismatch\";\n default:\n return o.reason;\n }\n }\n function O(o) {\n if (o.ok || o.mismatches.length === 0)\n return \"No mismatches.\";\n const u = [];\n for (const f of o.mismatches)\n u.push(\n `\n● ${v(f)} at \"${f.path}\":`,\n ` expected: ${T(f.expected)}`,\n ` actual: ${T(f.actual)}`,\n \"\"\n // blank line between entries\n );\n return u.at(-1) === \"\" && u.pop(), u.join(`\n`);\n }\n n.formatMismatches = O;\n function V(o) {\n const u = O(o);\n u !== \"No mismatches.\" && console.error(u);\n }\n n.printMismatches = V;\n function I(o, u, f) {\n const c = u.split(\".\");\n function l(h, m) {\n const b = c[m], S = Array.isArray(h) ? [...h] : { ...h };\n if (m === c.length - 1) {\n let _ = h && typeof h == \"object\" ? S : {};\n return _ = {\n ..._,\n [b]: f\n }, _;\n }\n const E = h && typeof h == \"object\" ? h[b] : void 0, A = l(E ?? {}, m + 1);\n let F = h && typeof h == \"object\" ? S : {};\n return F = {\n ...F,\n [b]: A\n }, F;\n }\n return l(o, 0);\n }\n function L(o, u, f) {\n const c = r(u);\n if (c.length === 0) return o;\n let l = o;\n if (c.length === 1) {\n const h = c[0];\n return l = I(l, h, f), l;\n }\n for (const h of c) {\n const m = e(f, h);\n l = I(l, h, m);\n }\n return l;\n }\n n.updateAt = L;\n})(w || (w = {}));\nfunction Z(n, e) {\n const t = n[\"~standard\"].validate(e);\n if (t instanceof Promise)\n throw new TypeError(\"Schema validation must be synchronous\", {\n cause: n\n });\n if (t.issues)\n throw new Error(JSON.stringify(t.issues, null, 2));\n return t.value;\n}\nclass W {\n listeners = /* @__PURE__ */ new Set();\n constructor() {\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(e) {\n return this.listeners.add(e), this.onSubscribe(), () => {\n this.listeners.delete(e), this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n}\nvar x;\n((n) => {\n n.CATCH_ALL_MESSAGE = 'The chosen steps must either be set to on of the following: \"all\", an array of steps ([\"step1\", \"step2\", ...]), or an object containing the steps to chose ({ step1: true, step2: true, ...})';\n function e(i) {\n return !!(i && typeof i == \"string\" && i === \"all\");\n }\n n.isAll = e;\n function t(i, s) {\n return Array.isArray(i) ? s ? i.every((a) => s.includes(a)) : !0 : !1;\n }\n n.isTuple = t;\n function r(i, s) {\n if (!i)\n return !1;\n const a = Object.keys(i);\n return a.length === 0 || s && !a.every((p) => s.includes(p)) ? !1 : Object.entries(i).every(([p, j]) => j === !0);\n }\n n.isObject = r;\n})(x || (x = {}));\nfunction C(n) {\n d(n.includes(\"step\"), \"Can't extract a valid step number since\");\n const e = n.replace(\"step\", \"\");\n return d(/^\\d+$/.test(e), `Invalid step format: \"${n}\"`), Number.parseInt(e, 10);\n}\nfunction M(n) {\n return function(e) {\n const { step: t } = e, r = `step${t}`, i = n[r];\n return { step: t, data: i };\n };\n}\nfunction B(n, e) {\n return e.reduce((t, r) => {\n const i = C(r), { data: s } = M(n)({\n step: i\n });\n for (const [a, p] of Object.entries(s))\n typeof p == \"function\" && a !== \"update\" || (s[a] = p);\n return t[r] = s, t;\n }, {});\n}\nfunction J(n, e) {\n const t = new Intl.ListFormat(\"en\", {\n style: \"long\",\n type: \"disjunction\"\n }), r = Object.keys(n), i = () => `\"stepData\" must be set to an array of available steps (${t.format(\n r\n )})`;\n if (e === \"all\") {\n let s = {};\n for (const a of r)\n s = {\n ...s,\n [a]: M(n)({\n step: C(a)\n })\n };\n return Object.fromEntries(\n r.map((a) => [\n a,\n M(n)({\n step: C(a)\n })\n ])\n );\n }\n if (Array.isArray(e))\n return d(\n e.every((s) => r.includes(s)),\n () => {\n const s = U(\n e,\n r.map((a) => C(a)),\n t\n );\n return s.status === \"error\" ? `${i()}. See errors:\n ${N(\n s.errors\n )}` : i();\n }\n ), B(\n n,\n e\n );\n if (typeof e == \"object\") {\n const s = Object.keys(e);\n return d(\n s.every((a) => r.includes(a)),\n () => {\n const a = U(\n s,\n r,\n t\n );\n return a.status === \"error\" ? `${i()}. See errors:\n ${N(\n a.errors\n )}` : i();\n }\n ), B(\n n,\n s\n );\n }\n throw new Error(`${i()} OR to \"all\"`);\n}\nfunction oe(n, e) {\n return typeof n == \"function\" ? n(e) : n;\n}\nconst ae = [\n \"string\",\n \"number\",\n \"array.string\",\n \"array.string.untyped\"\n], ue = /^step\\d+$/i;\nfunction Y(n, e) {\n if (typeof n != \"object\" || n === null) return !1;\n for (const t of Object.keys(e)) {\n if (!(t in n)) return !1;\n const r = e[t], i = n[t];\n if (!r(i)) return !1;\n }\n return !0;\n}\nfunction z(n, e, t) {\n return n ?? se(e, t);\n}\nfunction ce(n) {\n const e = {}, { fields: t, defaultCasing: r, validateFields: i } = n;\n for (const [s, a] of Object.entries(t)) {\n d(\n typeof s == \"string\",\n `Each key for the \"fields\" option must be a string. Key ${s} was a ${typeof s}`\n ), d(\n typeof a == \"object\",\n `The value for key ${s} must be an object. Was ${typeof a}`\n );\n const {\n defaultValue: p,\n label: j,\n nameTransformCasing: y,\n type: k = R\n } = a;\n if (i)\n e[s] = p;\n else {\n const g = y ?? r;\n e[s] = {\n ...e[s],\n nameTransformCasing: g,\n type: k,\n defaultValue: p,\n label: z(j, s, g)\n // TODO add more fields here\n };\n }\n }\n if (i) {\n const s = Z(\n i,\n e\n );\n d(\n typeof s == \"object\",\n `The result of the validated fields must be an object, was (${typeof s}). This is probably an internal error, so open up an issue about it`\n ), d(\n !!s,\n \"The result of the validated fields must be defined. This is probably an internal error, so open up an issue about it\"\n );\n for (const [a, p] of Object.entries(s)) {\n const j = t[a];\n d(\n j,\n `No field found in the fields config for \"${a}\"`\n );\n const {\n label: y,\n type: k = R,\n nameTransformCasing: g\n } = j, $ = g ?? r;\n e[a] = {\n ...e[a],\n nameTransformCasing: $,\n type: k,\n defaultValue: p,\n label: z(y, a, $)\n };\n }\n }\n return e;\n}\nfunction fe(n) {\n const e = {};\n d(!!n, \"The steps config must be defined\", TypeError), d(\n typeof n == \"object\",\n `The steps config must be an object, was (${typeof n})`,\n TypeError\n );\n for (const [t, r] of Object.entries(n)) {\n d(\n typeof t == \"string\",\n `Each key for the step config must be a string. Key \"${t}\" was ${typeof t} `,\n TypeError\n ), d(\n ue.test(t),\n `The key \"${t}\" isn't formatted properly. Each key in the step config must be the following format: \"step{number}\"`\n );\n const i = t, {\n fields: s,\n title: a,\n nameTransformCasing: p = Q,\n description: j,\n validateFields: y\n } = r, k = i.toString().replace(\"step\", \"\");\n d(\n s,\n `Missing fields for step ${k} (${String(i)})`,\n TypeError\n ), d(\n typeof s == \"object\",\n \"Fields must be an object\",\n TypeError\n ), d(\n Object.keys(s).length > 0,\n `The fields config for step ${k} (${String(\n i\n )}) is empty. Please add a field`\n ), d(\n typeof s == \"object\",\n `The \"fields\" property must be an object. Was ${typeof s}`\n );\n const g = ce({\n defaultCasing: p,\n fields: s,\n validateFields: y\n });\n e[i] = {\n ...e[i],\n title: a,\n nameTransformCasing: p,\n // Only add the description if it's defined\n ...typeof j == \"string\" ? { description: j } : {},\n fields: g\n };\n }\n return e;\n}\nclass le extends W {\n /**\n * The original config before any validation or transformations have been applied.\n */\n original;\n /**\n * The resolved step values.\n */\n value;\n steps;\n defaultNameTransformationCasing;\n //@ts-ignore\n firstStep;\n lastStep;\n stepNumbers;\n storage;\n constructor(e) {\n super();\n const { steps: t, nameTransformCasing: r, storage: i } = e;\n this.defaultNameTransformationCasing = X(\n r\n ), this.original = t, this.value = this.enrichValues(fe(this.original)), this.stepNumbers = Object.keys(this.value).map(\n (s) => Number.parseInt(s.replace(\"step\", \"\"))\n ), this.storage = new q({\n data: this.value,\n key: i?.key ?? D,\n store: i?.store\n }), this.firstStep = this.first(), this.lastStep = this.last(), this.steps = {\n first: this.firstStep.step,\n last: this.lastStep.step,\n value: this.stepNumbers,\n as: (s) => {\n if (d(\n typeof s == \"string\",\n `The type of the target transformation type must be a string, was ${typeof s}`\n ), s === \"string\")\n return this.stepNumbers.map((a) => `'${a}'`).join(\" | \");\n if (s === \"number\")\n return this.stepNumbers.join(\" | \");\n if (s.includes(\"array.string\"))\n return this.stepNumbers.map((a) => `${a}`);\n throw new Error(\n `Transformation type \"${s}\" is not supported. Available transformations include: ${ae.map(\n (a) => `\"${a}\"`\n ).join(\", \")}`\n );\n },\n isValidStepNumber: (s) => this.stepNumbers.includes(s),\n isValidStepKey: (s) => Object.keys(this.value).includes(s)\n };\n }\n getSnapshot() {\n return this;\n }\n notify() {\n for (const e of this.listeners)\n e({\n defaultNameTransformationCasing: this.defaultNameTransformationCasing,\n original: this.original,\n steps: this.steps,\n value: this.value\n });\n }\n enrichValues(e, t) {\n for (const [r, i] of Object.entries(e)) {\n const s = Number.parseInt(r.replace(\"step\", \"\"));\n e = {\n ...e,\n [r]: {\n ...i,\n update: this.createStepUpdaterFn(r),\n createHelperFn: this.createStepHelperFn(s),\n ...t?.(s)\n }\n };\n }\n return e;\n }\n /**\n * Gets the data for a specific step.\n * @param options The options for getting the step data.\n * @returns The step data for the target step.\n */\n get(e) {\n return M(this.value)(e);\n }\n /**\n * Gets the data for the first step.\n * @returns The data for the first step.\n */\n first() {\n const e = Math.min(...this.stepNumbers);\n return this.get({ step: e });\n }\n /**\n * Gets the data for the last step.\n * @returns The data for the last step.\n */\n last() {\n const e = Math.max(...this.stepNumbers);\n return this.get({ step: e });\n }\n handlePostUpdate() {\n this.storage.add(this.value), this.notify();\n }\n createHelperFnInputUpdate(e) {\n if (x.isAll(e)) {\n const r = G(this.value).reduce((s, a) => (s[a] = this.createStepUpdaterFn(a), s), {});\n return Object.assign(\n this.update,\n r\n );\n }\n const t = Object.keys(this.value);\n if (x.isTuple(e, t)) {\n const r = e.reduce((s, a) => (s[a] = this.createStepUpdaterFn(a), s), {});\n return Object.assign(\n this.update,\n r\n );\n }\n if (x.isObject(e, t)) {\n const r = G(e).reduce((s, a) => (s[a] = this.createStepUpdaterFn(a), s), {});\n return Object.assign(\n this.update,\n r\n );\n }\n throw new TypeError(`[update]: ${x.CATCH_ALL_MESSAGE}`);\n }\n createStepUpdaterFnImpl(e) {\n const { targetStep: t, updater: r, ctxData: i, fields: s = \"all\" } = e;\n d(\n this.steps.isValidStepKey(t),\n `[update]: The target step ${t} isn't a valid step. Please select a valid step`\n );\n const { [t]: a, ...p } = this.value;\n let j = J(this.value, [t]);\n if (i) {\n d(\n typeof i == \"function\",\n '[update]: \"ctxData\" must be a function'\n );\n const g = i({ ctx: p });\n d(\n typeof g == \"object\" && Object.keys(g).length > 0,\n '[update]: \"ctxData\" must return an object with keys'\n ), j = {\n ...j,\n ...g\n };\n }\n const y = oe(r, {\n ctx: j,\n update: this.createHelperFnInputUpdate([t])\n });\n if (!s) {\n d(\n typeof y == \"object\",\n '[update]: \"updater\" must be an object or a function that returns an object'\n );\n const g = Object.keys(this.value), $ = Object.keys(y);\n d($.length === g.length, () => {\n const V = g.filter(\n (L) => !$.includes(L)\n );\n return `[update]: \"updater\" is missing keys ${new Intl.ListFormat(\"en\", {\n style: \"long\",\n type: \"conjunction\"\n }).format(\n V\n )}`;\n });\n const T = w.createDeep(this.value), { mismatches: v, ok: O } = w.equalsAtPaths(\n this.value,\n T,\n y\n );\n d(\n O && v.length === 0,\n `[update]: found value mismatches in ${w.printMismatches({\n mismatches: v,\n ok: O\n })}`\n ), this.value = {\n ...this.value,\n [t]: w.updateAt(this.value, T, y)\n }, this.handlePostUpdate();\n return;\n }\n const k = w.createDeep(a);\n if (Array.isArray(s)) {\n const g = U(k, s);\n d(\n g.status === \"success\",\n `[update]: Found errors with the provided fields\n${g.status === \"error\" ? N(g.errors) : \"\"}`\n );\n const { mismatches: $, ok: T } = w.equalsAtPaths(\n a,\n s,\n y\n );\n d(\n T && $.length === 0,\n `[update]: found value mismatches in ${w.printMismatches({\n ok: T,\n mismatches: $\n })}`\n ), this.value = {\n ...this.value,\n [t]: w.updateAt(a, s, y)\n }, this.handlePostUpdate();\n return;\n }\n if (typeof s == \"object\" && Object.keys(s).length > 0) {\n const g = w.createDeep(s), $ = U(\n k,\n g\n );\n d(\n $.status === \"success\",\n `[update]: Found errors with the provided fields\n${$.status === \"error\" ? N($.errors) : \"\"}`\n );\n const { mismatches: T, ok: v } = w.equalsAtPaths(\n a,\n g,\n y\n );\n d(\n v && T.length === 0,\n `[update]: found value mismatches in ${w.printMismatches({\n ok: v,\n mismatches: T\n })}`\n ), this.value = {\n ...this.value,\n [t]: w.updateAt(\n a,\n g,\n y\n )\n }, this.handlePostUpdate();\n return;\n }\n throw new TypeError(\n `[update]: property \"fields\" must be set to one of the following: \"all\", an array of deep paths to update, or an object of paths. Was ${typeof r}`,\n { cause: r }\n );\n }\n createStepUpdaterFn(e) {\n return (t) => {\n this.createStepUpdaterFnImpl({ targetStep: e, ...t });\n };\n }\n update(e) {\n this.createStepUpdaterFnImpl(e);\n }\n createStepHelperFnImpl(e) {\n return (t, r) => {\n const i = J(\n this.value,\n e\n );\n if (typeof t == \"function\")\n return () => t({\n ctx: i,\n update: this.createHelperFnInputUpdate(e)\n });\n if (typeof t == \"object\")\n return (s) => {\n if (\"validator\" in t) {\n d(\n typeof s == \"object\",\n \"An input is expected since you provided a validator\"\n ), Z(\n t.validator,\n s.data\n );\n let a = i;\n if (t.ctxData) {\n const p = e[0], { [p]: j, ...y } = this.value;\n a = {\n ...a,\n ...t.ctxData({ ctx: y })\n };\n }\n return r({\n ctx: a,\n update: this.createHelperFnInputUpdate(e),\n ...s\n });\n }\n return r({ ctx: i, update: this.createHelperFnInputUpdate(e) });\n };\n throw new Error(\n `The first argument must be a function or an object, (was ${typeof t})`\n );\n };\n }\n createStepHelperFn(e) {\n return this.createStepHelperFnImpl([`step${e}`]);\n }\n // Implementation\n createHelperFn(e, t) {\n const { stepData: r, ...i } = e;\n return this.createStepHelperFnImpl(r)(i, t);\n }\n /**\n * Validates that a given object is the proper shape for step data.\n * @param value\n */\n static hasData(e, t) {\n return e === null || typeof e != \"object\" ? !1 : Y(e, {\n title: (r) => typeof r == \"string\",\n fields: (r) => {\n if (r === null || typeof r != \"object\")\n return !1;\n for (const i of Object.keys(r)) {\n if (typeof i != \"string\" || !(i in r))\n return !1;\n const s = r[i];\n if (s === null || typeof s != \"object\" || !Y(s, {\n defaultValue: (p) => p !== \"undefined\" && p !== null,\n label: (p) => typeof p == \"string\" || typeof p == \"boolean\" && !p,\n nameTransformCasing: P,\n type: ie\n }))\n return !1;\n }\n return !0;\n },\n createHelperFn: (r) => typeof r == \"function\",\n // update: (v): v is GetCurrentStep<resolvedStep, stepNumbers>['update'] =>\n // typeof v === 'function',\n nameTransformCasing: P,\n ...t?.optionalKeysToCheck\n });\n }\n}\nclass pe extends W {\n defaultNameTransformationCasing;\n stepSchema;\n storage;\n mountCount = 0;\n constructor(e) {\n super();\n const { steps: t, nameTransformCasing: r, storage: i } = e;\n this.defaultNameTransformationCasing = X(\n r\n ), this.stepSchema = new le({\n steps: t,\n nameTransformCasing: this.defaultNameTransformationCasing\n }), this.storage = new q({\n key: i?.key ?? D,\n data: this.stepSchema.value,\n store: i?.store\n }), this.stepSchema.subscribe(() => {\n this.notify();\n });\n }\n getSnapshot() {\n return this;\n }\n mount() {\n return this.mountCount++, this.mountCount === 1 && this.onMount(), () => {\n this.unmount();\n };\n }\n unmount() {\n this.mountCount = Math.max(0, this.mountCount - 1), this.mountCount === 0 && this.onUnmount();\n }\n isMounted() {\n return this.mountCount > 0;\n }\n onMount() {\n }\n onUnmount() {\n }\n notify() {\n for (const e of this.listeners)\n e({\n nameTransformCasing: this.defaultNameTransformationCasing,\n storage: {\n key: this.storage.key,\n store: this.storage.store\n },\n steps: this.stepSchema.original\n });\n }\n}\nfunction de(n) {\n return new pe(n);\n}\nclass me extends W {\n schema;\n unsubscribeFromSchema;\n constructor(e) {\n super(), this.schema = e.schema, this.subscribeToSchema();\n }\n subscribeToSchema() {\n this.unsubscribeFromSchema = this.schema.subscribe(() => {\n this.notify();\n });\n }\n getSnapshot() {\n return this;\n }\n getResult() {\n return this.schema;\n }\n setOptions(e) {\n e.schema && e.schema !== this.schema && (this.unsubscribeFromSchema?.(), this.schema = e.schema, this.subscribeToSchema(), this.notify());\n }\n notify() {\n for (const e of this.listeners)\n e(this.schema);\n }\n destroy() {\n this.unsubscribeFromSchema?.(), this.listeners.clear();\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n}\nexport {\n re as CASING_TYPES,\n Q as DEFAULT_CASING,\n R as DEFAULT_FIELD_TYPE,\n K as DEFAULT_LOGGER_PREFIX,\n D as DEFAULT_STORAGE_KEY,\n ne as FIELD_TYPES,\n x as HelperFnChosenSteps,\n te as MultiStepFormLogger,\n me as MultiStepFormObserver,\n pe as MultiStepFormSchema,\n le as MultiStepFormStepSchema,\n q as MultiStepFormStorage,\n ue as VALIDATED_STEP_REGEX,\n se as changeCasing,\n J as createCtx,\n de as createMultiStepFormSchema,\n fe as createStep,\n d as invariant,\n P as isCasingValid,\n ie as isFieldType,\n he as quote,\n X as setCasingType\n};\n//# sourceMappingURL=index.mjs.map\n","import type {\n AnyResolvedStep,\n StepNumbers,\n Updater,\n ValidStepKey,\n} from '@jfdevelops/multi-step-form';\nimport type { ReactNode } from 'react';\n\nexport namespace Field {\n export type getFields<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends StepNumbers<TResolvedStep>\n > = TResolvedStep[ValidStepKey<TTargetStep>]['fields'];\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers,\n TFields extends getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n > = getFields<TResolvedStep, TTargetStep>[TField] & {\n /**\n * The name of the field.\n */\n name: TField;\n /**\n * A useful wrapper around `update` to update the specific field.\n * @param value The new value for the field.\n */\n onInputChange: (value: Updater<TFields[TField]['defaultValue']>) => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers,\n TFields extends getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n > = {\n name: TField;\n children: (\n props: childrenProps<\n TResolvedStep,\n TStepNumbers,\n TTargetStep,\n TFields,\n TField\n >\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers\n > = <\n TFields extends getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n >(\n props: props<TResolvedStep, TStepNumbers, TTargetStep, TFields, TField>\n ) => ReactNode;\n}\n\nexport function createField<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers\n>(\n propsCreator: <\n TFields extends Field.getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n >(\n name: TField\n ) => Field.childrenProps<\n TResolvedStep,\n TStepNumbers,\n TTargetStep,\n TFields,\n TField\n >\n) {\n function Field<\n TFields extends Field.getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n >(\n props: Field.props<\n TResolvedStep,\n TStepNumbers,\n TTargetStep,\n TFields,\n TField\n >\n ) {\n const { children, name } = props;\n\n return children(propsCreator(name));\n }\n\n return Field;\n}\n","import type {\n Expand,\n HelperFnChosenSteps,\n StepNumbers,\n ValidStepKey,\n} from '@jfdevelops/multi-step-form';\nimport type { ComponentPropsWithRef, JSX } from 'react';\nimport type {\n AnyResolvedStep,\n CreatedMultiStepFormComponent,\n} from './step-schema';\n\nexport namespace MultiStepFormSchemaConfig {\n export const DEFAULT_FORM_ALIAS = 'Form';\n export type defaultEnabledFor = HelperFnChosenSteps.defaultStringOption;\n export type defaultFormAlias = typeof DEFAULT_FORM_ALIAS;\n export type formEnabledFor<TResolvedStep extends AnyResolvedStep> =\n HelperFnChosenSteps<TResolvedStep, StepNumbers<TResolvedStep>>;\n type strippedResolvedSteps<T extends AnyResolvedStep> = {\n [_ in keyof T]: Expand<Omit<T[_], 'createComponent' | 'createHelperFn'>>;\n };\n export type AvailableStepForForm<\n TResolvedStep extends AnyResolvedStep,\n TEnabledFor extends formEnabledFor<TResolvedStep>\n > = TEnabledFor extends defaultEnabledFor\n ? strippedResolvedSteps<TResolvedStep>\n : TEnabledFor extends [\n ValidStepKey<StepNumbers<TResolvedStep>>,\n ...ValidStepKey<StepNumbers<TResolvedStep>>[]\n ]\n ? TEnabledFor[number] extends keyof TResolvedStep\n ? Pick<strippedResolvedSteps<TResolvedStep>, TEnabledFor[number]>\n : never\n : keyof TEnabledFor extends keyof TResolvedStep\n ? Expand<\n Pick<\n strippedResolvedSteps<TResolvedStep>,\n Extract<keyof TResolvedStep, keyof TEnabledFor>\n >\n >\n : never;\n export type formCtx<TAlias extends string, TProps> = {\n [_ in TAlias]: CreatedMultiStepFormComponent<TProps>;\n };\n export type renderFnData<\n TResolvedStep extends AnyResolvedStep,\n TEnabledFor extends formEnabledFor<TResolvedStep>\n > = {\n /**\n * The id for the form, either a custom one or the default one.\n */\n id: string;\n /**\n * The chosen steps that are available.\n */\n steps: Expand<AvailableStepForForm<TResolvedStep, TEnabledFor>>;\n };\n\n /**\n * The configuration options for the `form` option.\n */\n export interface FormConfig<\n TResolvedStep extends AnyResolvedStep,\n TAlias extends string,\n TFormEnabledFor extends formEnabledFor<TResolvedStep>,\n TCustomFormProps extends object\n > {\n /**\n * The `id` for the form component.\n *\n * If there is no value provided, the default id will the **current step key**.\n *\n * @default `${currentStep}`\n */\n id?: string;\n /**\n * The \"name\" of the form component.\n * @default 'Form'\n * @example\n * ```tsx\n * const schema = createMultiStepFormSchema({\n * steps: {\n * step1: {\n * title: 'Step 1',\n * fields: {\n * firstName: {\n * defaultValue: ''\n * }\n * }\n * },\n * form: {\n * alias: 'MyCustomForm',\n * render() {\n * // return custom form component here\n * }\n * }\n * }\n * })\n *\n * const Step1 = schema.stepSchema.step1.createComponent(\n * ({ ctx, MyCustomForm }, props: { children: ReactNode }) =>\n * // Notice how the form is available with its alias\n * <MyCustomFormName>{children}</MyCustomFormName>\n * )\n * ```\n */\n alias?: TAlias;\n /**\n * If the form component should be accessible for each step when calling `createComponent`.\n *\n * If no value is given, the form will be accessible for all the steps.\n */\n enabledForSteps?: TFormEnabledFor;\n /**\n *\n * @param data The data that is available for creating the custom form.\n * @param props Props that can be used for the custom form.\n * @returns An {@see JSX.Element} that is the custom form.\n * @example\n * ### With custom props\n * ```tsx\n * type CustomProps = {\n * title: string;\n * description?: string;\n * children: ReactNode;\n * };\n *\n * const schema = createMultiStepFormSchema({\n * steps: {\n * step1: {\n * title: 'Step 1',\n * fields: {\n * firstName: {\n * defaultValue: ''\n * }\n * }\n * },\n * form: {\n * alias: 'MyCustomForm',\n * render(data, props: CustomProps) {\n * return (\n * <div>\n * <h1>{props.title}</h1>\n * <p>{props.description}</p>\n * <form>{props.children}</form>\n * </div>\n * );\n * }\n * }\n * }\n * })\n * ```\n * ### Without custom props\n * ```tsx\n * const schema = createMultiStepFormSchema({\n * steps: {\n * step1: {\n * title: 'Step 1',\n * fields: {\n * firstName: {\n * defaultValue: ''\n * }\n * }\n * },\n * form: {\n * alias: 'MyCustomForm',\n * render(data, props) {\n * // The default type for `props` will be `ComponentPropsWithRef<'form'>`\n * // return custom form component here\n * }\n * }\n * }\n * })\n * ```\n */\n render: (\n data: renderFnData<TResolvedStep, TFormEnabledFor>,\n props: TCustomFormProps\n ) => JSX.Element;\n }\n\n export interface Form<\n TResolvedStep extends AnyResolvedStep,\n TAlias extends string,\n TFormEnabledFor extends formEnabledFor<TResolvedStep>,\n TCustomFormProps extends object\n > {\n form?: FormConfig<TResolvedStep, TAlias, TFormEnabledFor, TCustomFormProps>;\n }\n\n /**\n * Compares {@linkcode enabledFor} to the {@linkcode target} to determine if the form\n * should be available.\n * @param target The target steps the form _should_ be available for.\n * @param enabledFor The steps that the form _is_ enabled for.\n * @returns A boolean representing if the form should be available.\n */\n // Note: the implementation is specific to `MultiStepFormStepSchema.createComponentForStep`\n // because the `target` will always be an `Array` in `MultiStepFormStepSchema.createComponentForStep`.\n // TODO add validation to keys\n export function isFormAvailable<\n TResolvedStep extends AnyResolvedStep,\n TTarget extends HelperFnChosenSteps<\n TResolvedStep,\n StepNumbers<TResolvedStep>\n >,\n TEnabledFor extends formEnabledFor<TResolvedStep>\n >(target: TTarget, enabledFor: TEnabledFor) {\n if (Array.isArray(target)) {\n if (enabledFor === 'all') {\n return true;\n }\n\n if (typeof enabledFor === 'object' && !Array.isArray(enabledFor)) {\n return Object.keys(enabledFor).some((key) =>\n target.includes(key as `step${StepNumbers<TResolvedStep>}`)\n );\n }\n\n if (Array.isArray(enabledFor)) {\n return enabledFor.some((key) => target.includes(key));\n }\n }\n\n return false;\n }\n\n /**\n * Creates a form component with a default id.\n * @param id The default id for the form.\n * @returns A form component with a default {@linkcode id}.\n */\n export function createDefaultForm(id: string) {\n return (props: Omit<ComponentPropsWithRef<'form'>, 'id'>) => (\n <form id={id} {...props} />\n );\n }\n}\n","import {\n type AnyStepField,\n type CasingType,\n type Constrain,\n createCtx,\n type CreateHelperFunctionOptionsBase,\n createStep,\n type DefaultCasing,\n type DefaultStorageKey,\n type Expand,\n type GetCurrentStep,\n type GetFieldsForStep,\n type HelperFnChosenSteps,\n type HelperFnCtx,\n type HelperFnInputBase,\n invariant,\n MultiStepFormLogger,\n type MultiStepFormSchemaStepConfig as MultiStepFormSchemaStepBaseConfig,\n MultiStepFormStepSchema as MultiStepFormStepSchemaBase,\n type Relaxed,\n type ResolvedStep as ResolvedCoreStep,\n type Step,\n type StepNumbers,\n type StrippedResolvedStep,\n type UpdateFn,\n type Updater,\n type ValidStepKey,\n} from '@jfdevelops/multi-step-form';\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { createField, type Field } from './field';\nimport { MultiStepFormSchemaConfig } from './form-config';\n\nexport interface MultiStepFormSchemaStepConfig<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object,\n TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<\n TStep,\n TCasing\n >\n> extends MultiStepFormSchemaStepBaseConfig<TStep, TCasing, TStorageKey>,\n MultiStepFormSchemaConfig.Form<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n > {}\n\nexport type CreateFunction<TArgs extends any[], TReturn = void> = (\n ...args: TArgs\n) => TReturn;\nexport type CreateComponent<TInput, TProps> = CreateFunction<\n [input: TInput, props: TProps],\n ReactNode\n>;\n\nexport type CreateComponentCallback<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TProps\n> = CreateComponent<\n HelperFnInputBase<TResolvedStep, TSteps, TChosenSteps>,\n TProps\n>;\nexport type CreatedMultiStepFormComponent<TProps> = TProps extends undefined\n ? () => ReactNode\n : (props: TProps) => ReactNode;\nexport type CreateComponentFn<\n TResolvedStep extends AnyResolvedStep,\n // This is needed to make TS happy with all types\n TStepNumbers extends StepNumbers<TResolvedStep>\n> = <\n chosenSteps extends HelperFnChosenSteps<TResolvedStep, TStepNumbers>,\n props = undefined\n>(\n options: CreateHelperFunctionOptionsBase<\n TResolvedStep,\n TStepNumbers,\n chosenSteps\n >,\n fn: CreateComponentCallback<TResolvedStep, TStepNumbers, chosenSteps, props>\n) => CreatedMultiStepFormComponent<props>;\n\nexport namespace StepSpecificComponent {\n // The logic for getting the formCtx only works for step specific `createComponent`\n // (i.e: step1.createComponent(...)) as of now. Reason is because I can't think of a good API for integrating the form\n // ctx into the main `createComponent` since multiple steps can be chosen. In that case\n // how would the logic work for when the form component should be defined in the callback?\n // Ideas:\n // - Make the main `createComponent` return a function that accepts the current step\n export type formComponent<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>\n > = TFormEnabledFor extends MultiStepFormSchemaConfig.defaultEnabledFor\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\n : TFormEnabledFor extends HelperFnChosenSteps.tupleNotation<\n ValidStepKey<TSteps>\n >\n ? TFormEnabledFor[number] extends keyof TResolvedStep\n ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<\n ValidStepKey<TSteps>\n >\n ? TChosenSteps[number] extends keyof TResolvedStep\n ? TChosenSteps[number] extends TFormEnabledFor[number]\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\n : {}\n : {}\n : {}\n : {}\n : keyof TFormEnabledFor extends keyof TResolvedStep\n ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<\n ValidStepKey<TSteps>\n >\n ? TChosenSteps[number] extends keyof TResolvedStep\n ? TChosenSteps[number] extends keyof TFormEnabledFor\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\n : {}\n : {}\n : {}\n : {};\n export type onInputChange<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers\n > = <\n CurrentStepData extends GetCurrentStep<TResolvedStep, TTargetStep>,\n Field extends keyof CurrentStepData\n >(\n field: Field,\n updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>\n ) => void;\n export interface Input<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TAdditionalCtx extends Record<string, unknown>,\n TStepNumber extends HelperFnChosenSteps.extractStepNumber<\n TResolvedStep,\n TSteps,\n TChosenSteps\n > = HelperFnChosenSteps.extractStepNumber<\n TResolvedStep,\n TSteps,\n TChosenSteps\n >\n > extends HelperFnInputBase<\n TResolvedStep,\n TSteps,\n TChosenSteps,\n never,\n TAdditionalCtx\n > {\n /**\n * A useful wrapper around `update` to update the specific field.\n */\n onInputChange: TStepNumber extends TSteps\n ? UpdateFn.stepSpecific<TResolvedStep, TSteps, ValidStepKey<TStepNumber>>\n : never;\n // onInputChange: <\n // CurrentStepData extends GetCurrentStep<\n // TResolvedStep,\n // // @ts-ignore Type checking works properly, type doesn't match\n // HelperFnChosenSteps.extractStepNumber<\n // TResolvedStep,\n // TSteps,\n // TChosenSteps\n // >\n // >,\n // Field extends keyof CurrentStepData\n // >(\n // field: Field,\n // updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>\n // ) => void;\n Field: Field.component<\n TResolvedStep,\n TSteps,\n // @ts-ignore Type checking works properly, type doesn't match\n HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps>\n >;\n }\n\n export type callback<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TProps,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TAdditionalInput extends object,\n TAdditionalCtx extends Record<string, unknown>\n > = CreateComponent<\n Expand<\n Input<TResolvedStep, TSteps, TChosenSteps, TAdditionalCtx> &\n formComponent<\n TResolvedStep,\n TSteps,\n TChosenSteps,\n TFormAlias,\n TFormProps,\n TFormEnabledFor\n > &\n TAdditionalInput\n >,\n TProps\n >;\n export const DEFAULT_FORM_INSTANCE_ALIAS = 'form';\n export type defaultFormInstanceAlias = typeof DEFAULT_FORM_INSTANCE_ALIAS;\n export type formInstanceOptions<\n TAlias extends string,\n TRenderInput,\n TReturn\n > = {\n /**\n * The name of the return value of the `render` method.\n */\n alias?: TAlias;\n /**\n * A function that renders/creates the form instance. This function will be called\n * at the top level of the component, ensuring hooks are called in a valid React context.\n *\n * @param input - The input object containing context and default values\n * @returns The form instance (typically from a hook like `useForm`)\n *\n * @example\n * ```tsx\n * useFormInstance: {\n * render({ defaultValues }) {\n * return useForm({\n * defaultValues,\n * });\n * },\n * }\n * ```\n *\n * **Verification**: The hook call is automatically verified:\n * - Errors are caught and reported with helpful messages\n * - In development, hook calls are logged to console.debug\n * - The hook must be called at the component top level (enforced by the framework)\n */\n render: CreateFunction<[input: TRenderInput], TReturn>;\n };\n export type options<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TFormInstanceAlias extends string,\n TFormInstance,\n TCtx\n > = {\n /**\n * If set to `true`, you'll be able to open the {@linkcode console} to view logs.\n */\n debug?: boolean;\n useFormInstance?: formInstanceOptions<\n TFormInstanceAlias,\n HelperFnInputBase<TResolvedStep, TSteps, TTargetStep> & {\n /**\n * An object containing all the default values for the current step.\n */\n defaultValues: Expand<\n ExtractedDefaultValues<TResolvedStep, TSteps, TTargetStep>\n >;\n },\n TFormInstance\n >;\n /**\n * A function to select the data that will be available in the `fn`'s ctx.\n * @param input The available input to create the context with.\n * @returns The created ctx.\n */\n ctxData?: (\n input: HelperFnInputBase<\n TResolvedStep,\n TSteps,\n 'all',\n HelperFnChosenSteps.resolve<TResolvedStep, TSteps, TTargetStep>\n >\n ) => TCtx;\n };\n}\n\nexport type CreateStepSpecificComponentCallback<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TProps,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TAdditionalInput extends object = {},\n TAdditionalCtx extends Record<string, unknown> = {}\n> = StepSpecificComponent.callback<\n TResolvedStep,\n TSteps,\n TChosenSteps,\n TProps,\n TFormAlias,\n TFormProps,\n TFormEnabledFor,\n TAdditionalInput,\n TAdditionalCtx\n>;\n\nexport type ExtractedDefaultValues<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TExtractedStepNumber extends number = HelperFnChosenSteps.extractStepNumber<\n TResolvedStep,\n TSteps,\n TTargetStep\n >,\n TFields extends GetFieldsForStep<\n TResolvedStep,\n ValidStepKey<TExtractedStepNumber>\n > = GetFieldsForStep<TResolvedStep, ValidStepKey<TExtractedStepNumber>>\n> = { [field in keyof TFields]: TFields[field]['defaultValue'] };\nexport interface StepSpecificCreateComponentFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>\n> {\n /**\n * A utility function to easily create a component for the current step.\n * @param fn The callback function where the component is defined.\n */\n <props = undefined>(\n fn: CreateStepSpecificComponentCallback<\n TResolvedStep,\n TSteps,\n TTargetStep,\n props,\n TFormAlias,\n TFormProps,\n TFormEnabledFor\n >\n ): CreatedMultiStepFormComponent<props>;\n /**\n * A utility function to easily create a component for the current step.\n * @param options Specific config options for creating a component for the current step.\n * @param fn The callback function where the component is defined.\n * @returns The created component.\n */\n <\n formInstance,\n additionalCtx extends Record<string, unknown> = {},\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\n props = undefined\n >(\n options: StepSpecificComponent.options<\n TResolvedStep,\n TSteps,\n TTargetStep,\n formInstanceAlias,\n formInstance,\n additionalCtx\n >,\n fn: CreateStepSpecificComponentCallback<\n TResolvedStep,\n TSteps,\n TTargetStep,\n props,\n TFormAlias,\n TFormProps,\n TFormEnabledFor,\n { [_ in formInstanceAlias]: formInstance },\n additionalCtx\n >\n ): CreatedMultiStepFormComponent<props>;\n}\n\nexport type ResolvedStep<\n TStep extends Step<TDefaultCasing>,\n TDefaultCasing extends CasingType = DefaultCasing,\n TResolvedStep extends ResolvedCoreStep<\n TStep,\n TDefaultCasing\n > = ResolvedCoreStep<TStep, TDefaultCasing>,\n TFormAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n TFormProps extends object = ComponentPropsWithRef<'form'>\n> = {\n [stepKey in keyof TResolvedStep]: TResolvedStep[stepKey] &\n (stepKey extends ValidStepKey<StepNumbers<TResolvedStep>>\n ? {\n createComponent: StepSpecificCreateComponentFn<\n TResolvedStep,\n StepNumbers<TResolvedStep>,\n [stepKey],\n TFormAlias,\n TFormProps,\n TFormEnabledFor\n >;\n }\n : {});\n};\n\nexport type AnyResolvedStep = ResolvedStep<any, any, any>;\nexport interface HelperFunctions<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>\n> {\n createComponent: CreateComponentFn<TResolvedStep, TStepNumbers>;\n}\nnamespace CreateComponentImplConfig {\n export type stepSpecificConfig<\n TResolvedStep extends AnyResolvedStep,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object\n > = {\n isStepSpecific: true;\n defaultId: string;\n form?: MultiStepFormSchemaConfig.FormConfig<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n >;\n };\n\n export type nonStepSpecific = {\n isStepSpecific: false;\n };\n\n export type config<\n TResolvedStep extends AnyResolvedStep,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object\n > =\n | nonStepSpecific\n | stepSpecificConfig<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n >;\n}\n\n/**\n * Creates a default values object for the target step.\n * @param steps The steps schema.\n * @param targetStep The step to create the default values for.\n * @returns An object containing the field names and their default values.\n */\nexport function createDefaultValues<\n resolvedStep extends AnyResolvedStep,\n stepNumbers extends StepNumbers<resolvedStep>,\n targetStep extends ValidStepKey<stepNumbers>\n>(steps: resolvedStep, targetStep: targetStep) {\n invariant(\n targetStep in steps,\n `The target step ${targetStep} is not a valid step key`\n );\n\n const current = steps[targetStep as unknown as keyof resolvedStep];\n\n invariant('fields' in current, `No \"fields\" were found for ${targetStep}`);\n\n let defaultValues = {};\n\n for (const [fieldName, fieldValues] of Object.entries(\n current.fields as Record<string, Record<string, unknown>>\n )) {\n defaultValues = {\n ...defaultValues,\n [fieldName]: fieldValues.defaultValue,\n };\n }\n\n return defaultValues as Expand<\n ExtractedDefaultValues<resolvedStep, stepNumbers, [targetStep]>\n >;\n}\nexport class MultiStepFormStepSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n storageKey extends string = DefaultStorageKey,\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n formProps extends object = ComponentPropsWithRef<'form'>,\n core extends ResolvedCoreStep<step, casing> = ResolvedCoreStep<\n step,\n casing\n >,\n resolvedStep extends ResolvedStep<\n step,\n casing,\n core,\n formAlias,\n formEnabledFor,\n formProps\n > = ResolvedStep<step, casing, core, formAlias, formEnabledFor, formProps>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n >\n extends MultiStepFormStepSchemaBase<step, casing>\n implements HelperFunctions<resolvedStep, stepNumbers>\n{\n // @ts-ignore type doesn't match `MultiStepFormSchemaBase.value`\n value: resolvedStep;\n\n constructor(\n config: MultiStepFormSchemaStepConfig<\n step,\n Constrain<casing, CasingType>,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >\n ) {\n const { form, ...rest } = config;\n\n super(rest as never);\n\n this.value = this.enrichValues(createStep(this.original));\n this.value = this.enrichValues(this.value, (step) => {\n const key = `step${step as stepNumbers}`;\n const id = form?.id ?? key;\n\n return {\n createComponent: this.createComponentForStep(\n [`step${step as stepNumbers}`],\n {\n isStepSpecific: true,\n defaultId: id,\n form: form as never,\n }\n ),\n };\n });\n }\n\n private createFormComponent(\n form: Omit<\n MultiStepFormSchemaConfig.FormConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >,\n 'alias'\n >,\n defaultId: string\n ) {\n const { render, enabledForSteps = 'all', id = defaultId } = form;\n\n const ctx = {\n id,\n steps: createCtx(this.value, enabledForSteps as never),\n };\n\n return (props: formProps) => render(ctx, props);\n }\n\n private createStepSpecificComponentImpl<\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\n >(\n stepData: chosenStep,\n config: CreateComponentImplConfig.stepSpecificConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >,\n input: HelperFnInputBase<resolvedStep, stepNumbers, chosenStep>,\n extraInput = {}\n ) {\n return <props>(fn: Function) =>\n ((props: props) => {\n // Call hook functions from extraInput at the top level of the component\n // This ensures hooks are called in a valid React context (before any conditionals)\n const hookResults: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(extraInput)) {\n if (typeof value === 'function') {\n try {\n const result = value();\n // Verify the hook was actually called and returned a value\n // (hooks should always return something, even if it's undefined)\n hookResults[key] = result;\n\n // In development, we can add additional verification here\n // Log hook calls for debugging (can be disabled in production by removing console.debug)\n if (typeof console !== 'undefined' && console.debug) {\n console.debug(\n `[multi-step-form] Hook \"${key}\" called successfully`,\n { result: result !== undefined ? 'defined' : 'undefined' }\n );\n }\n } catch (error) {\n // Provide helpful error message if hook throws\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n throw new Error(\n `[multi-step-form] Error calling hook \"${key}\" in useFormInstance.render: ${errorMessage}\\n\\n` +\n `This usually means:\\n` +\n `1. The hook is being called outside of a React component\\n` +\n `2. The hook has invalid dependencies or configuration\\n` +\n `3. There's an error in your hook implementation\\n\\n` +\n `Original error: ${errorMessage}`,\n { cause: error }\n );\n }\n } else {\n hookResults[key] = value;\n }\n }\n\n const { defaultId, form } = config;\n const { ctx } = input;\n\n // Safe cast here since the step specific `createComponent` will always have\n // `stepData` as a tuple\n const [step] =\n stepData as HelperFnChosenSteps.tupleNotation<`step${stepNumbers}`>;\n\n invariant(\n this.steps.isValidStepKey(step),\n `[createComponent]: the target step ${step} is invalid. Note, this error shouldn't appear as the target step should always be valid. If you see this error, please open an issue.`\n );\n\n const stepNumber = Number.parseInt(step.replace('step', ''));\n\n invariant(\n !Number.isNaN(stepNumber),\n `[${step}:\"createComponent\"]: an error occurred while extracting the number`\n );\n const current = this.value[step as keyof resolvedStep];\n\n // These checks are mostly for type safety. `current` should _always_ be in the proper format.\n // On the off chance that it's not, we have the checks here to help, but these checks are basically\n // just for type safety.\n invariant(\n 'fields' in current,\n `[${step}:createComponent]: unable to find the \"fields\" for the current step`\n );\n invariant(\n typeof current.fields === 'object',\n `[${step}:createComponent]: the \"fields\" property must be an object, was ${typeof current.fields}`\n );\n\n const Field = createField((name) => {\n invariant(typeof name === 'string', () => {\n const formatter = new Intl.ListFormat('en', {\n style: 'long',\n type: 'disjunction',\n });\n\n return `[${step}:Field]: the \"name\" prop must be a string and a valid field for ${step}. Available fields include ${formatter.format(\n Object.keys(current.fields as Record<string, unknown>)\n )}`;\n });\n invariant(\n name in (current.fields as object),\n `[${step}:Field]: the field \"${name}\" doesn't exist for the current step`\n );\n\n invariant(\n 'update' in current,\n `[${step}:Field]: No \"update\" function was found`\n );\n\n const { fields, update } = current;\n const { defaultValue, label, nameTransformCasing, type } = (\n fields as AnyStepField\n )[name];\n\n return {\n defaultValue,\n label,\n nameTransformCasing,\n type,\n name,\n onInputChange: (value: unknown) =>\n // TODO remove type assertions\n (\n update as UpdateFn.stepSpecific<\n resolvedStep,\n stepNumbers,\n ValidStepKey<stepNumbers>\n >\n )({\n fields: [`fields.${name}.defaultValue`] as never,\n updater: value as never,\n }),\n };\n });\n\n let fnInput = {\n ctx,\n onInputChange: this.createStepUpdaterFn(step),\n Field,\n ...hookResults,\n };\n\n if (form) {\n const {\n alias = MultiStepFormSchemaConfig.DEFAULT_FORM_ALIAS,\n ...rest\n } = form;\n const enabledFor = rest.enabledForSteps ?? 'all';\n\n if (\n MultiStepFormSchemaConfig.isFormAvailable(\n stepData as never,\n enabledFor as never\n )\n ) {\n fnInput = {\n ...fnInput,\n [alias]: this.createFormComponent(rest, defaultId),\n };\n }\n\n return fn(fnInput, props);\n }\n\n return fn(\n {\n ...fnInput,\n [MultiStepFormSchemaConfig.DEFAULT_FORM_ALIAS]:\n MultiStepFormSchemaConfig.createDefaultForm(defaultId),\n },\n props\n );\n }) as CreatedMultiStepFormComponent<props>;\n }\n\n private createStepSpecificComponentFactory<\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\n >(\n stepData: chosenStep,\n config: CreateComponentImplConfig.stepSpecificConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >,\n ctx: HelperFnCtx<resolvedStep, stepNumbers, chosenStep>\n ): StepSpecificCreateComponentFn<\n resolvedStep,\n stepNumbers,\n chosenStep,\n formAlias,\n formProps,\n formEnabledFor\n > {\n const createStepSpecificComponentImpl =\n this.createStepSpecificComponentImpl.bind(this);\n const createDefaultValues = this.createDefaultValues.bind(this);\n const resolvedValues = this.value;\n\n function impl<props = undefined>(\n fn: CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor\n >\n ): CreatedMultiStepFormComponent<props>;\n function impl<\n formInstance,\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\n props = undefined,\n additionalCtx = {}\n >(\n options: StepSpecificComponent.options<\n resolvedStep,\n stepNumbers,\n chosenStep,\n formInstanceAlias,\n formInstance,\n additionalCtx\n >,\n fn: CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor,\n { [_ in formInstanceAlias]: formInstance }\n >\n ): CreatedMultiStepFormComponent<props>;\n function impl<\n formInstance,\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\n props = undefined,\n additionalCtx = {}\n >(\n optionsOrFn:\n | StepSpecificComponent.options<\n resolvedStep,\n stepNumbers,\n chosenStep,\n formInstanceAlias,\n formInstance,\n additionalCtx\n >\n | CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor\n >,\n fn?: CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor,\n { [_ in formInstanceAlias]: formInstance }\n >\n ) {\n function createResolvedCtx(additionalCtx: unknown) {\n return (\n additionalCtx ? { ctx: { ...ctx, ...additionalCtx } } : { ctx }\n ) as HelperFnInputBase<resolvedStep, stepNumbers, chosenStep>;\n }\n\n function createStepSpecificComponent() {\n invariant(\n typeof optionsOrFn === 'function',\n 'The first argument must be a function'\n );\n\n return createStepSpecificComponentImpl(\n stepData,\n config,\n createResolvedCtx(undefined)\n )(optionsOrFn);\n }\n\n if (typeof optionsOrFn === 'object') {\n const { useFormInstance, ctxData, debug } = optionsOrFn;\n const currentStepKey = (\n stepData as HelperFnChosenSteps.tupleNotation<\n ValidStepKey<stepNumbers>\n >\n )[0] as keyof resolvedStep;\n const logger = new MultiStepFormLogger({\n debug,\n prefix(prefix) {\n return `${prefix}-${String(currentStepKey)}-createComponent`;\n },\n });\n\n logger.info('First argument is an object');\n\n const { [currentStepKey]: _, ...values } = resolvedValues;\n\n invariant(\n typeof fn === 'function',\n 'The second argument must be a function'\n );\n\n if (useFormInstance) {\n const {\n render,\n alias = StepSpecificComponent.DEFAULT_FORM_INSTANCE_ALIAS,\n } = useFormInstance;\n\n // Safe cast here since the step specific `createComponent` will always have\n // `stepData` as a tuple\n const [step] =\n stepData as HelperFnChosenSteps.tupleNotation<`step${stepNumbers}`>;\n\n // Store the render function and inputs to call it at component level\n // This ensures hooks are called in a valid React context\n const defaultValues = createDefaultValues(step) as never;\n const resolvedCtx = ctxData\n ? {\n ...ctx,\n ...ctxData({ ctx: values } as never),\n }\n : ctx;\n const renderInput = { ctx: resolvedCtx, defaultValues };\n\n return createStepSpecificComponentImpl(\n stepData,\n config,\n resolvedCtx as never,\n {\n [alias]: () => render(renderInput as never),\n }\n )(fn);\n }\n\n if (ctxData) {\n logger.info('Option \"ctxData\" is defined');\n invariant(\n typeof ctxData === 'function',\n 'Option \"ctxData\" must be a function'\n );\n\n const additionalCtx = ctxData({ ctx: values } as never);\n\n logger.info(\n `Addition context is: ${JSON.stringify(additionalCtx, null, 2)}`\n );\n\n const resolvedCtx = {\n ...ctx,\n ...additionalCtx,\n };\n\n logger.info(\n `Resolved context is: ${JSON.stringify(resolvedCtx, null, 2)}`\n );\n\n return createStepSpecificComponentImpl(stepData, config, {\n ctx: resolvedCtx as never,\n })(fn);\n }\n\n // Empty options object. Can throw here 🤷‍♂️\n // Maybe add \"global\" - top level config - option to tune fine grained errors.\n return createStepSpecificComponent();\n }\n\n return createStepSpecificComponent();\n }\n\n return impl;\n }\n\n private createComponentImpl<\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\n >(\n stepData: chosenStep,\n config: CreateComponentImplConfig.config<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >\n ) {\n const ctx = createCtx<resolvedStep, stepNumbers, chosenStep>(\n this.value,\n stepData\n );\n\n if (config.isStepSpecific) {\n return this.createStepSpecificComponentFactory(stepData, config, ctx);\n }\n\n return <props>(fn: Function) =>\n ((props?: props) =>\n fn(ctx, props as any)) as CreatedMultiStepFormComponent<props>;\n }\n\n private createComponentForStep<\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\n >(\n stepData: chosenStep,\n config: CreateComponentImplConfig.stepSpecificConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >\n ) {\n return this.createComponentImpl(stepData, config);\n }\n\n /**\n * A helper function to create a component for a specific step.\n * @param options The options for creating the step specific component.\n * @param fn A callback that is used for accessing the target step's data and defining\n * any props that the component should have. This function must return a valid `JSX` element.\n * @returns The created component for the step.\n */\n createComponent<\n chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\n props = undefined\n >(\n options: CreateHelperFunctionOptionsBase<\n resolvedStep,\n stepNumbers,\n chosenSteps\n >,\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenSteps, props>\n ) {\n return (\n this.createComponentImpl(options.stepData, {\n isStepSpecific: false,\n }) as <props>(\n fn: CreateComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n props\n >\n ) => CreatedMultiStepFormComponent<props>\n )<props>(fn);\n }\n\n createDefaultValues<targetStep extends ValidStepKey<stepNumbers>>(\n targetStep: targetStep\n ) {\n return createDefaultValues(this.value, targetStep);\n }\n}\n","import {\n type CasingType,\n type Constrain,\n createCtx,\n type CreateHelperFunctionOptionsBase,\n DEFAULT_CASING,\n type DefaultCasing,\n type DefaultStorageKey,\n type HelperFnChosenSteps,\n type MultiStepFormSchemaOptions as MultiStepFormSchemaBaseOptions,\n MultiStepFormSchema as MultiStepFormSchemaCore,\n type ResolvedStep as ResolvedStepCore,\n type Step,\n type StepNumbers\n} from '@jfdevelops/multi-step-form';\nimport type { ComponentPropsWithRef } from 'react';\nimport { MultiStepFormSchemaConfig } from './form-config';\nimport {\n type CreateComponentCallback,\n type CreatedMultiStepFormComponent,\n type HelperFunctions,\n MultiStepFormStepSchema,\n type ResolvedStep,\n} from './step-schema';\n\n// export type AnyMultiStepFormSchema = MultiStepFormSchema<any, any, any>;\nexport type AnyMultiStepFormSchema = { [x: string]: any };\n\n// Helper inference types for `AnyMultiStepFormSchema`\nexport namespace MultiStepFormSchema {\n /**\n * Infer the resolved step from a {@linkcode MultiStepFormSchema}.\n */\n export type resolvedStep<T extends AnyMultiStepFormSchema> =\n T['stepSchema']['value'];\n /**\n * Infer the {@linkcode MultiStepFormSchema}'s step numbers.\n */\n export type stepNumbers<T extends AnyMultiStepFormSchema> = StepNumbers<\n resolvedStep<T>\n >;\n /**\n * Get the data for a specific step from a {@linkcode MultiStepFormSchema}.\n */\n export type getData<\n T extends AnyMultiStepFormSchema,\n TTarget extends keyof resolvedStep<T>\n > = resolvedStep<T>[TTarget];\n}\n\nexport interface MultiStepFormSchemaOptions<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object,\n TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<\n TStep,\n TCasing\n >\n> extends MultiStepFormSchemaBaseOptions<TStep, TCasing, TStorageKey>,\n MultiStepFormSchemaConfig.Form<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n > {}\n\nexport class MultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n storageKey extends string = DefaultStorageKey,\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n formProps extends object = ComponentPropsWithRef<'form'>,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<\n step,\n casing\n >,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n >\n extends MultiStepFormSchemaCore<\n step,\n casing,\n ResolvedStepCore<step, casing>,\n StepNumbers<ResolvedStepCore<step, casing>>,\n storageKey\n >\n implements HelperFunctions<resolvedStep, stepNumbers>\n{\n stepSchema: MultiStepFormStepSchema<\n step,\n casing,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >;\n\n constructor(\n config: MultiStepFormSchemaOptions<\n step,\n Constrain<casing, CasingType>,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >\n ) {\n const { nameTransformCasing = DEFAULT_CASING, storage, ...rest } = config;\n\n super({\n nameTransformCasing,\n storage,\n ...rest,\n });\n\n this.stepSchema = new MultiStepFormStepSchema<\n step,\n casing,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >({\n nameTransformCasing,\n ...rest,\n });\n }\n\n createComponent<\n chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\n props = undefined\n >(\n options: CreateHelperFunctionOptionsBase<\n resolvedStep,\n stepNumbers,\n chosenSteps\n >,\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenSteps, props>\n ): CreatedMultiStepFormComponent<props> {\n const { stepData } = options;\n const ctx = createCtx<resolvedStep, stepNumbers, chosenSteps>(\n this.stepSchema.value as never,\n stepData\n ) as never;\n\n return ((props?: props) => fn({ ctx }, props as any)) as any;\n }\n}\n\nexport function createMultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n storageKey extends string = DefaultStorageKey,\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n formProps extends object = ComponentPropsWithRef<'form'>,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n>(\n options: MultiStepFormSchemaOptions<\n step,\n Constrain<casing, CasingType>,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >\n) {\n return new MultiStepFormSchema<\n step,\n casing,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps,\n resolvedStep,\n stepNumbers\n >(options);\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import type { AnyMultiStepFormSchema, MultiStepFormSchema } from '@/schema';\nimport { invariant, VALIDATED_STEP_REGEX } from '@jfdevelops/multi-step-form';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\n\nexport type UseMultiStepFormDataOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTarget extends keyof MultiStepFormSchema.resolvedStep<TSchema> = keyof MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n targetStep: TTarget;\n};\nexport type UseMultiStepFormData<\n // step extends Step<casing>,\n // casing extends CasingType,\n // storageKey extends string,\n // resolvedStep extends ResolvedStep<step, casing>,\n // schema extends MultiStepFormSchema<\n // step,\n // casing,\n // storageKey\n // > = MultiStepFormSchema<step, casing, storageKey>,\n TSchema extends AnyMultiStepFormSchema,\n TResolvedStep extends MultiStepFormSchema.resolvedStep<TSchema> = MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n /**\n * Returns the entire {@linkcode MultiStepFormSchema instance}.\n */\n (): TSchema;\n /**\n * Returns the data for the target step.\n * @param stepNumber The step number to return.\n * @throws {TypeError} If `options.stepNumber` is invalid.\n */\n <targetStep extends keyof TResolvedStep>(\n options: UseMultiStepFormDataOptions<TSchema, targetStep>\n ): MultiStepFormSchema.getData<TSchema, targetStep>;\n /**\n * Returns the specified data from the {@linkcode MultiStepFormSchema} instance via the callback's return.\n */\n <data>(selector: (schema: TSchema) => data): data;\n};\n\nexport function throwIfInvalidStepNumber<\n // step extends Step<casing>,\n // casing extends CasingType = DefaultCasing,\n // storageKey extends string = DefaultStorageKey,\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n schema extends AnyMultiStepFormSchema\n>(schema: schema, targetStep: unknown) {\n invariant(\n typeof targetStep === 'string',\n `The target step must be a string, was ${typeof targetStep}`\n );\n\n const { as, isValidStepNumber } = schema.stepSchema.steps;\n const formatter = new Intl.ListFormat('en', {\n type: 'disjunction',\n style: 'long',\n });\n const formattedStepNumbersList = formatter.format(as('array.string.untyped'));\n\n invariant(\n VALIDATED_STEP_REGEX.test(targetStep),\n `The target step must match the following format: \"step{number}\". Available steps are ${formattedStepNumbersList}`\n );\n\n const stepNumber = Number.parseInt(targetStep.replace('step', ''));\n\n invariant(\n isValidStepNumber(stepNumber),\n `The step number \"${stepNumber}\" is not a valid step number. Valid step numbers include ${formattedStepNumbersList}`,\n TypeError\n );\n\n return stepNumber as MultiStepFormSchema.stepNumbers<schema>;\n}\n\nexport function createMultiStepFormDataHook<\n // step extends Step<casing>,\n // casing extends CasingType = DefaultCasing,\n // storageKey extends string = DefaultStorageKey,\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n schema extends AnyMultiStepFormSchema\n>(schema: schema): UseMultiStepFormData<schema> {\n function useMultiStepFormData(\n optionsOrSelector?:\n | UseMultiStepFormDataOptions<schema>\n | ((data: schema) => unknown)\n ) {\n return useSyncExternalStoreWithSelector(\n schema.subscribe,\n () => schema.getSnapshot(),\n () => schema.getSnapshot(),\n (snapshot) => {\n if (typeof optionsOrSelector === 'object') {\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\n const stepNumber = throwIfInvalidStepNumber(\n snapshot,\n optionsOrSelector.targetStep\n );\n\n return snapshot.stepSchema.get({ step: stepNumber as never }).data;\n }\n\n if (typeof optionsOrSelector === 'function') {\n return optionsOrSelector(snapshot);\n }\n\n return snapshot;\n }\n );\n }\n\n return useMultiStepFormData as any;\n}\n\nfunction useMultiStepFormData<schema extends AnyMultiStepFormSchema>(\n schema: schema\n): schema;\nfunction useMultiStepFormData<\n schema extends AnyMultiStepFormSchema,\n targetStep extends keyof MultiStepFormSchema.resolvedStep<schema>\n>(\n schema: schema,\n options: UseMultiStepFormDataOptions<schema, targetStep>\n): MultiStepFormSchema.getData<schema, targetStep>;\nfunction useMultiStepFormData<schema extends AnyMultiStepFormSchema, data>(\n schema: schema,\n selector: (schema: schema) => data\n): data;\nfunction useMultiStepFormData<\n // step extends Step<casing>,\n // casing extends CasingType = DefaultCasing,\n // storageKey extends string = DefaultStorageKey,\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n schema extends AnyMultiStepFormSchema\n>(\n schema: schema,\n optionsOrSelector?:\n | UseMultiStepFormDataOptions<schema>\n | ((data: schema) => unknown)\n) {\n const hook = createMultiStepFormDataHook(schema);\n\n if (typeof optionsOrSelector === 'object') {\n return hook(optionsOrSelector);\n }\n\n if (typeof optionsOrSelector === 'function') {\n return hook(optionsOrSelector);\n }\n\n return hook();\n}\n\nexport { useMultiStepFormData };\n","import { MultiStepFormStepSchema } from '@jfdevelops/multi-step-form';\nimport { type ComponentProps, type ReactNode } from 'react';\nimport {\n createMultiStepFormDataHook,\n throwIfInvalidStepNumber,\n UseMultiStepFormData,\n} from './hooks/use-multi-step-form-data';\nimport { MultiStepFormSchema, type AnyMultiStepFormSchema } from './schema';\nimport type {\n CreatedMultiStepFormComponent,\n CreateFunction,\n} from './step-schema';\n\ntype BaseOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n /**\n * The step to return data from.\n */\n targetStep: TTargetStep;\n};\nexport type UseCurrentStepOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\n props,\n isDataGuaranteed extends boolean = false\n> = BaseOptions<TSchema, TTargetStep> & {\n /**\n * Determines if the result should follow \"strictness\".\n * The result will change based on the value for this option.\n *\n * - `true`: `data` is **defined** and `hasData` isn't available.\n * - `false`: `data` _can be_ `undefined`, but the `hasData` property is available\n * to help with type narrowing.\n *\n * @default false\n * @example\n * ### `true`\n * ```tsx\n * function MyComponent() {\n * const { data, NoCurrentData } = useCurrentStep({\n * stepNumber: 1,\n * isDataGuaranteed: true,\n * })\n *\n * // Notice how `NoCurrentData` is still available\n * // Do things with `data` here\n * }\n * ```\n *\n * ### `false` - The default\n * ```tsx\n * function MyComponent() {\n * const { data, NoCurrentData, hasData } = useCurrentStep({\n * stepNumber: 1,\n * })\n *\n * if (!hasData) {\n * return <NoCurrentData />\n * }\n *\n * // Do things with `data` here\n * }\n * ```\n */\n isDataGuaranteed?: isDataGuaranteed;\n /**\n * An optional transformation function to provide a custom not found message.\n */\n notFoundMessage?: CreateFunction<\n [ctx: BaseOptions<TSchema, TTargetStep>, props: props],\n ReactNode\n >;\n};\nexport interface UseCurrentStepBaseResult<TData = unknown, TProps = undefined> {\n /**\n * The current step's data.\n */\n data: TData | undefined;\n /**\n * Boolean indicating if the current step has data.\n */\n hasData: boolean;\n /**\n * Component to render some sort of error if `data` isn't defined.\n */\n NoCurrentData: CreatedMultiStepFormComponent<\n TProps extends undefined ? Omit<ComponentProps<'div'>, 'children'> : TProps\n >;\n}\nexport interface UseCurrentStepErrorResult<TData = unknown, TProps = undefined>\n extends UseCurrentStepBaseResult<TData, TProps> {\n data: undefined;\n hasData: false;\n}\nexport interface UseCurrentStepSuccessResult<\n TData = unknown,\n TProps = undefined\n> extends UseCurrentStepBaseResult<TData, TProps> {\n data: TData;\n hasData: true;\n}\nexport type UseCurrentStepResult<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\n props,\n isDataGuaranteed extends boolean = false\n> = isDataGuaranteed extends true\n ? Omit<\n UseCurrentStepSuccessResult<\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\n props\n >,\n 'hasData'\n >\n :\n | UseCurrentStepErrorResult<\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\n props\n >\n | UseCurrentStepSuccessResult<\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\n props\n >;\nexport type UseProgressBaseOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>\n> = BaseOptions<TSchema, TTargetStep> & {\n /**\n * The total amount of steps that are in the form.\n *\n * @default schema.stepData.steps.value.length\n */\n totalSteps?: number;\n /**\n * The highest value the progress indicator should go.\n *\n * @default 100\n */\n maxProgressValue?: number;\n};\nexport type UseProgressOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\n props\n> = UseProgressBaseOptions<TSchema, TTargetStep> & {\n /**\n * An optional transformation function to provide a custom progress text.\n */\n progressTextTransformer?: CreateFunction<\n [ctx: Required<UseProgressBaseOptions<TSchema, TTargetStep>>, props],\n ReactNode\n >;\n};\nexport type UseProgressResult<props> = {\n /**\n * The value of the progress indicator.\n */\n value: number;\n /**\n * The highest value the progress indicator can be.\n *\n * @default 100\n */\n maxProgressValue: number;\n ProgressText: CreatedMultiStepFormComponent<\n props extends undefined ? Omit<ComponentProps<'div'>, 'children'> : props\n >;\n};\nexport type CreateHOC<TContext, TProps> = (\n ctx: TContext,\n props: TProps\n) => CreatedMultiStepFormComponent<TProps>;\n\nexport type MultiStepFormContextResult<\n TSchema extends AnyMultiStepFormSchema,\n TResolvedStep extends MultiStepFormSchema.resolvedStep<TSchema> = MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n // MultiStepFormContext: schema;\n // MultiStepFormProvider: (props: { children: ReactNode }) => JSX.Element;\n // useMultiStepFormSchema: schema;\n useMultiStepFormData: UseMultiStepFormData<TSchema>;\n /**\n * Gets the data for the specified step.\n *\n * @returns The data for the given step number.\n */\n useCurrentStepData: <\n targetStep extends keyof TResolvedStep,\n props = undefined,\n isDataGuaranteed extends boolean = false\n >(\n options: UseCurrentStepOptions<TSchema, targetStep, props, isDataGuaranteed>\n ) => UseCurrentStepResult<TSchema, targetStep, props, isDataGuaranteed>;\n useProgress: <targetStep extends keyof TResolvedStep, props = undefined>(\n options: UseProgressOptions<TSchema, targetStep, props>\n ) => UseProgressResult<props>;\n /**\n * A hook that can be used to check if the form can be restarted. If no {@linkcode cb}\n * is provided, the return value will be dictated by if there is an object stored in\n * {@link MultiStepFormSchema#storage}.\n * @param cb A callback function to provide custom logic for if the form can restart.\n * @returns A boolean indicating if the form can restart.\n */\n useCanRestartForm: (cb?: (canRestart: boolean) => boolean) => boolean;\n /**\n * A HOC for creating a custom progress text for `useProgress`.\n * @param options Options for creating the HOC.\n * @param cb The callback function for creating the HOC.\n * @returns A HOC for the `progressTextTransformer` option of the `useProgress` hook.\n */\n withProgressText: <targetStep extends keyof TResolvedStep, props = undefined>(\n options: UseProgressBaseOptions<TSchema, targetStep>,\n cb: (\n ctx: Required<UseProgressBaseOptions<TSchema, targetStep>>,\n props: props\n ) => ReactNode\n ) => CreatedMultiStepFormComponent<props>;\n /**\n * A HOC for creating a custom not found component for when a step's data is `undefined`.\n * @param options Options for creating the HOC.\n * @param cb The callback function for creating the HOC.\n * @returns A HOC for the `notFoundMessage` option of the `useCurrentStep` hook.\n */\n withNoStepDataFound: <\n targetStep extends keyof TResolvedStep,\n props = undefined\n >(\n options: BaseOptions<TSchema, targetStep>,\n cb: (ctx: BaseOptions<TSchema, targetStep>, props: props) => ReactNode\n ) => CreatedMultiStepFormComponent<props>;\n};\n\nfunction createComponent<ctx>(ctx: ctx) {\n return function <props>(fn: CreateFunction<[ctx, props], ReactNode>) {\n return ((props: props) =>\n fn(ctx, props)) as CreatedMultiStepFormComponent<props>;\n };\n}\n\n/**\n * Create multi step form context with a {@linkcode MultiStepFormSchema} instance.\n * @param schema The {@linkcode MultiStepFormSchema} instance.\n */\n// export function createMultiStepFormContext<\n// schema extends AnyMultiStepFormSchema\n// >(schema: schema): MultiStepFormContextResult<schema>;\n// /**\n// * Create multi step form context without a {@linkcode MultiStepFormSchema} instance.\n// *\n// * The {@linkcode MultiStepFormSchema} instance is returned.\n// * @param options Options to create a new instance of {@linkcode MultiStepFormSchema}.\n// */\n// export function createMultiStepFormContext<\n// step extends Step<casing>,\n// casing extends CasingType = DefaultCasing,\n// storageKey extends string = DefaultStorageKey,\n// resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n// stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\n// schema extends MultiStepFormSchema<\n// step,\n// casing,\n// storageKey,\n// resolvedStep,\n// stepNumbers\n// > = MultiStepFormSchema<step, casing, storageKey, resolvedStep, stepNumbers>\n// >(\n// options: MultiStepFormSchemaConfig<\n// step,\n// Constrain<casing, CasingType>,\n// storageKey\n// >\n// ): MultiStepFormContextResult<schema> & {\n// schema: MultiStepFormSchema<step, casing, storageKey>;\n// };\nexport function createMultiStepFormContext<\n schema extends AnyMultiStepFormSchema,\n resolvedStep extends MultiStepFormSchema.resolvedStep<schema> = MultiStepFormSchema.resolvedStep<schema>\n>(schema: schema): MultiStepFormContextResult<schema> {\n // const isInstance = schemaOrOptions instanceof MultiStepFormSchema;\n // const schema: schema = isInstance\n // ? schemaOrOptions\n // : createMultiStepFormSchema(schemaOrOptions);\n // const Context = createContext(schema);\n\n // function Provider({ children }: { children: ReactNode }) {\n // const [observer] = useState(() => new MultiStepFormObserver({ schema }));\n\n // useEffect(() => {\n // const unmount = schema.mount();\n\n // return () => {\n // unmount();\n // observer.destroy();\n // };\n // }, [observer]);\n\n // return <Context.Provider value={observer}>{children}</Context.Provider>;\n // }\n\n // function throwIfInvalidStepNumber(\n // schema: MultiStepFormSchema<step, casing, storageKey>,\n // stepNumber: number\n // ) {\n // const formatter = new Intl.ListFormat('en', {\n // type: 'disjunction',\n // style: 'long',\n // });\n // const { as, isValidStepNumber } = schema.stepSchema.steps;\n\n // invariant(\n // isValidStepNumber(stepNumber),\n // `The step number \"${stepNumber}\" is not a valid step number. Valid step numbers include ${formatter.format(\n // as('array.string.untyped')\n // )}`,\n // TypeError\n // );\n // }\n\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\n const useMultiStepFormData = createMultiStepFormDataHook(schema);\n\n function useCurrentStepData<\n targetStep extends keyof resolvedStep,\n props = undefined,\n isDataGuaranteed extends boolean = false\n >(\n options: UseCurrentStepOptions<schema, targetStep, props, isDataGuaranteed>\n ): UseCurrentStepResult<schema, targetStep, props, isDataGuaranteed> {\n const { targetStep, notFoundMessage, isDataGuaranteed } = options;\n const data = useMultiStepFormData({\n targetStep,\n });\n const NoDataFoundComponent = notFoundMessage\n ? withNoStepDataFound({ targetStep }, notFoundMessage)\n : (props: Omit<ComponentProps<'div'>, 'children'>) => (\n <div {...props}>No data found for step {String(targetStep)}</div>\n );\n\n if (isDataGuaranteed) {\n return {\n data,\n NoCurrentData: NoDataFoundComponent as never,\n } as never;\n }\n\n if (MultiStepFormStepSchema.hasData(data)) {\n return {\n data,\n hasData: true,\n NoCurrentData: NoDataFoundComponent as never,\n } as never;\n }\n\n return {\n data: undefined,\n hasData: false,\n NoCurrentData: NoDataFoundComponent as never,\n } as never;\n }\n\n function useProgress<\n targetStep extends keyof resolvedStep,\n props = undefined\n >(\n options: UseProgressOptions<schema, targetStep, props>\n ): UseProgressResult<props> {\n const steps = useMultiStepFormData(\n (data) => data.stepSchema.steps.value.length\n );\n const {\n targetStep,\n maxProgressValue = 100,\n totalSteps = steps,\n progressTextTransformer,\n } = options;\n const currentStep = throwIfInvalidStepNumber(schema, targetStep);\n const value = (currentStep / totalSteps) * maxProgressValue;\n const ProgressText = progressTextTransformer\n ? withProgressText(\n { targetStep, maxProgressValue, totalSteps },\n progressTextTransformer\n )\n : (props: Omit<ComponentProps<'div'>, 'children'>) => (\n <div {...props}>\n Step {currentStep}/{totalSteps}\n </div>\n );\n\n return {\n value,\n maxProgressValue,\n ProgressText: ProgressText as never,\n };\n }\n\n function useCanRestartForm(cb?: CreateFunction<[boolean], boolean>) {\n const storage = useMultiStepFormData((data) => data.storage);\n const value = storage.get();\n const canRestart = Boolean(\n value && typeof value === 'object' && Object.keys(value).length > 0\n );\n\n if (cb) {\n return cb(canRestart);\n }\n\n return canRestart;\n }\n\n function withProgressText<\n targetStep extends keyof resolvedStep,\n props = undefined\n >(\n options: UseProgressBaseOptions<schema, targetStep>,\n cb: (\n ctx: Required<UseProgressBaseOptions<schema, targetStep>>,\n props: props\n ) => ReactNode\n ) {\n const steps = schema.getSnapshot().stepSchema.steps.value.length;\n const { targetStep, maxProgressValue = 100, totalSteps = steps } = options;\n\n return createComponent({ targetStep, maxProgressValue, totalSteps })(cb);\n }\n\n function withNoStepDataFound<\n targetStep extends keyof resolvedStep,\n props = undefined\n >(\n options: BaseOptions<schema, targetStep>,\n cb: (ctx: BaseOptions<schema, targetStep>, props: props) => ReactNode\n ) {\n throwIfInvalidStepNumber(schema, options.targetStep);\n\n return createComponent(options)(cb);\n }\n\n return {\n // MultiStepFormContext: Context,\n useMultiStepFormData,\n useCurrentStepData,\n useProgress,\n useCanRestartForm,\n withProgressText,\n withNoStepDataFound,\n };\n}\n"],"names":["ee","n","d","K","te","i","a","p","j","y","H","D","q","re","Q","se","P","X","ne","R","ie","N","G","w","o","u","f","c","l","h","m","b","S","k","g","E","A","$","T","O","V","I","_","L","Z","W","x","C","M","B","J","oe","ae","ue","Y","z","ce","fe","le","s","pe","createField","propsCreator","Field","props","children","name","MultiStepFormSchemaConfig","isFormAvailable","target","enabledFor","key","createDefaultForm","id","jsx","StepSpecificComponent","createDefaultValues","steps","targetStep","invariant","current","defaultValues","fieldName","fieldValues","MultiStepFormStepSchema","MultiStepFormStepSchemaBase","config","form","rest","createStep","step","defaultId","render","enabledForSteps","ctx","createCtx","stepData","input","extraInput","fn","hookResults","value","result","error","errorMessage","stepNumber","formatter","fields","update","defaultValue","label","nameTransformCasing","type","fnInput","alias","createStepSpecificComponentImpl","resolvedValues","impl","optionsOrFn","createResolvedCtx","additionalCtx","createStepSpecificComponent","useFormInstance","ctxData","debug","currentStepKey","logger","MultiStepFormLogger","prefix","values","resolvedCtx","renderInput","options","MultiStepFormSchema","MultiStepFormSchemaCore","DEFAULT_CASING","storage","createMultiStepFormSchema","React","require$$0","is","objectIs","useState","useEffect","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","require$$1","useSyncExternalStore","useRef","useMemo","withSelector_production","getServerSnapshot","selector","isEqual","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelector_development","withSelectorModule","throwIfInvalidStepNumber","schema","as","isValidStepNumber","formattedStepNumbersList","VALIDATED_STEP_REGEX","createMultiStepFormDataHook","useMultiStepFormData","optionsOrSelector","useSyncExternalStoreWithSelector","snapshot","hook","createComponent","createMultiStepFormContext","useCurrentStepData","notFoundMessage","isDataGuaranteed","data","NoDataFoundComponent","withNoStepDataFound","jsxs","useProgress","maxProgressValue","totalSteps","progressTextTransformer","currentStep","ProgressText","withProgressText","useCanRestartForm","cb","canRestart"],"mappings":"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","x_google_ignoreList":[5,6,7,8,9,10]}
1
+ {"version":3,"file":"index.mjs","sources":["../../core/dist/index-D3RfNrOH.js","../../core/dist/index.mjs","../src/field.tsx","../src/form-config.tsx","../src/step-schema.ts","../src/schema.ts","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/shim/index.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.0/node_modules/use-sync-external-store/shim/with-selector.js","../src/hooks/use-multi-step-form-data.ts","../src/create-context.tsx"],"sourcesContent":["function comparePartialArray(compareArray, actualArray, formatter) {\n const errors = [];\n const compareSet = new Set(compareArray);\n const printedArray = formatter ? formatter.format(compareArray.map((value) => `${value}`)) : `[${compareArray.join(\", \")}]`;\n for (let i = 0; i < actualArray.length; i++) {\n const value = actualArray[i];\n if (!compareSet.has(value)) {\n errors.push(\n `Extra element at index ${i}: \"${value}\" is not in ${printedArray}`\n );\n }\n }\n const hasAtLeastOne = actualArray.some((v) => compareSet.has(v));\n if (!hasAtLeastOne) {\n errors.push(\n `Array must contain at least one valid element from ${printedArray}`\n );\n }\n if (errors.length > 0) {\n return { status: \"error\", errors };\n }\n return { status: \"success\" };\n}\nfunction printErrors(errors, mapper) {\n const defaultMapper = (e, i) => `❌ ${i + 1}. ${e}`;\n return errors.map((e, i) => defaultMapper(e, i)).join(\"\\n\");\n}\nfunction typedObjectKeys(value) {\n return Object.keys(value);\n}\nfunction lazy(strings, ...values) {\n return () => String.raw({ raw: strings }, ...values);\n}\nfunction invariant(condition, message, error = Error) {\n if (!condition) {\n const resolvedMessage = typeof message === \"function\" ? message() : lazy`${message}`();\n throw new error(resolvedMessage);\n }\n}\nfunction extractNumber(input) {\n invariant(input.includes(\"step\"), \"Can't extract a valid step number since\");\n const extracted = input.replace(\"step\", \"\");\n invariant(/^\\d+$/.test(extracted), `Invalid step format: \"${input}\"`);\n return Number.parseInt(extracted, 10);\n}\nfunction getStep(resolvedStepValues) {\n return function(options) {\n const { step } = options;\n const stepKey = `step${step}`;\n const data = resolvedStepValues[stepKey];\n return { step, data };\n };\n}\nfunction createCtxHelper(values, data) {\n return data.reduce((acc, curr) => {\n const stepNumber = extractNumber(curr);\n const { data: data2 } = getStep(values)({\n step: stepNumber\n });\n for (const [key, value] of Object.entries(data2)) {\n if (typeof value === \"function\" && key !== \"update\") {\n continue;\n }\n data2[key] = value;\n }\n acc[curr] = data2;\n return acc;\n }, {});\n}\nfunction createCtx(values, stepData) {\n const formatter = new Intl.ListFormat(\"en\", {\n style: \"long\",\n type: \"disjunction\"\n });\n const validStepKeys = Object.keys(values);\n const baseErrorMessage = () => {\n return `\"stepData\" must be set to an array of available steps (${formatter.format(\n validStepKeys\n )})`;\n };\n if (stepData === \"all\") {\n let ctx = {};\n for (const key of validStepKeys) {\n ctx = {\n ...ctx,\n [key]: getStep(values)({\n step: extractNumber(key)\n })\n };\n }\n return Object.fromEntries(\n validStepKeys.map((key) => [\n key,\n getStep(values)({\n step: extractNumber(key)\n })\n ])\n );\n }\n if (Array.isArray(stepData)) {\n invariant(\n stepData.every((step) => validStepKeys.includes(step)),\n () => {\n const comparedResults = comparePartialArray(\n stepData,\n validStepKeys.map((key) => extractNumber(key)),\n formatter\n );\n if (comparedResults.status === \"error\") {\n return `${baseErrorMessage()}. See errors:\n ${printErrors(\n comparedResults.errors\n )}`;\n }\n return baseErrorMessage();\n }\n );\n return createCtxHelper(\n values,\n stepData\n );\n }\n if (typeof stepData === \"object\") {\n const keys = Object.keys(stepData);\n invariant(\n keys.every((key) => validStepKeys.includes(key)),\n () => {\n const comparedResults = comparePartialArray(\n keys,\n validStepKeys,\n formatter\n );\n if (comparedResults.status === \"error\") {\n return `${baseErrorMessage()}. See errors:\n ${printErrors(\n comparedResults.errors\n )}`;\n }\n return baseErrorMessage();\n }\n );\n return createCtxHelper(\n values,\n keys\n );\n }\n throw new Error(`${baseErrorMessage()} OR to \"all\"`);\n}\nfunction functionalUpdate(updater, input) {\n if (typeof updater === \"function\") {\n return updater(input);\n }\n return updater;\n}\nconst DEFAULT_LOGGER_PREFIX = \"MultiStepFormSchema\";\nclass MultiStepFormLogger {\n debug;\n prefix = DEFAULT_LOGGER_PREFIX;\n includeTimestamp = false;\n throwOnError = false;\n constructor(options) {\n this.debug = options?.debug ?? false;\n if (this.debug && options?.debug) {\n const {\n includeTimestamp = false,\n prefix = DEFAULT_LOGGER_PREFIX,\n throwOnError = false\n } = options;\n this.includeTimestamp = includeTimestamp;\n this.prefix = typeof prefix === \"string\" ? prefix : prefix(DEFAULT_LOGGER_PREFIX);\n this.throwOnError = throwOnError;\n }\n }\n wrapValue(wrapWith, value) {\n if (wrapWith === \"[]\") {\n return `[${value}]`;\n }\n if (wrapWith === \"{}\") {\n return `{${value}}`;\n }\n if (wrapWith === \"none\") {\n return value;\n }\n throw new Error(\n `The first argument ${wrapWith} is not valid. Valid options include: \"[]\", \"{}\", and \"none\"`\n );\n }\n formatPrefix(options) {\n if (!options) {\n return this.prefix;\n }\n const { action, value, wrapWith } = options;\n if (action === \"replace\") {\n return this.wrapValue(wrapWith ?? \"[]\", value);\n }\n const { delimiter } = options;\n if (action === \"append\") {\n return `${this.wrapValue(\n wrapWith?.originalPrefix ?? \"[]\",\n this.prefix\n )}${delimiter}${this.wrapValue(\n wrapWith?.addedPrefix ?? \"[]\",\n value\n )}`.trim();\n }\n if (action === \"prepend\") {\n return `${this.wrapValue(\n wrapWith?.addedPrefix ?? \"[]\",\n value\n )}${delimiter}${this.wrapValue(\n wrapWith?.originalPrefix ?? \"[]\",\n this.prefix\n )}`.trim();\n }\n return this.prefix;\n }\n formatMessage(level, message, options) {\n const {\n includeTimestamp = this.includeTimestamp,\n prefix,\n logLevelOptions\n } = options ?? {};\n const formattedPrefix = this.formatPrefix(prefix);\n const formattedLogLevel = this.wrapValue(\n logLevelOptions?.wrapWith ?? \"[]\",\n (logLevelOptions?.level ?? level).toUpperCase()\n );\n const formattedMessage = `${formattedPrefix} ${formattedLogLevel} ${message}`;\n if (includeTimestamp) {\n const timestamp = (/* @__PURE__ */ new Date()).toISOString();\n return `[${timestamp}] ${formattedMessage}`;\n }\n return formattedMessage;\n }\n info(message, options) {\n if (!this.debug) {\n return;\n }\n console.info(this.formatMessage(\"info\", message, options));\n }\n warn(message, options) {\n if (!this.debug) {\n return;\n }\n console.warn(this.formatMessage(\"warn\", message, options));\n }\n error(message, options) {\n if (!this.debug) {\n return;\n }\n const formatted = this.formatMessage(\"error\", message, options);\n console.error(formatted);\n const throwOnError = options?.throw ?? this.throwOnError;\n if (throwOnError) {\n throw new Error(formatted);\n }\n }\n}\nvar path;\n((path2) => {\n function getBy(obj, path3) {\n return path3.split(\".\").reduce((acc, key) => acc == null ? void 0 : acc[key], obj);\n }\n function setBy(target, path3, value) {\n const keys = path3.split(\".\");\n let current = target;\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (i === keys.length - 1) {\n if (current[k] !== void 0 && typeof current[k] === \"object\" && typeof value === \"object\" && value !== null) {\n Object.assign(current[k], value);\n } else {\n current[k] = value;\n }\n } else {\n if (typeof current[k] !== \"object\" || current[k] === null) {\n current[k] = {};\n }\n current = current[k];\n }\n }\n return current;\n }\n path2.setBy = setBy;\n function normalizePaths(paths) {\n return paths.filter((p) => {\n return !paths.some((q) => q !== p && p.startsWith(q + \".\"));\n });\n }\n function pickBy(obj, ...paths) {\n const norm = normalizePaths(paths);\n if (norm.length === 1) {\n return getBy(obj, norm[0]);\n }\n const result = {};\n for (const p of norm) {\n const value = getBy(obj, p);\n setBy(result, p, value);\n }\n return result;\n }\n path2.pickBy = pickBy;\n function createDeep(obj) {\n const paths = [];\n function traverse(current, prefix = \"\") {\n if (current === null || current === void 0) {\n return;\n }\n if (typeof current !== \"object\" || Array.isArray(current)) {\n return;\n }\n const keys = Object.keys(current);\n for (const key of keys) {\n const path3 = prefix ? `${prefix}.${key}` : key;\n paths.push(path3);\n const value = current[key];\n if (value !== null && value !== void 0 && typeof value === \"object\" && !Array.isArray(value)) {\n traverse(value, path3);\n }\n }\n }\n traverse(obj);\n return paths;\n }\n path2.createDeep = createDeep;\n function defaultExpectedFormat(value) {\n if (value === null) return \"null\";\n if (Array.isArray(value)) return \"Array\";\n const t = typeof value;\n if (t !== \"object\") return t;\n const ctor = value?.constructor?.name;\n return ctor && ctor !== \"Object\" ? ctor : \"object\";\n }\n function splitPath(path3) {\n if (!path3) return [];\n const parts = [];\n const regex = /[^.[\\]]+|\\[(\\d+)\\]/g;\n let m;\n while (m = regex.exec(path3)) {\n parts.push(m[1] ?? m[0]);\n }\n return parts;\n }\n function getTransformFunction(root, path3) {\n if (!root) return void 0;\n if (typeof root === \"function\") {\n return root;\n }\n const segments = splitPath(path3);\n let node = root;\n let lastFn;\n for (const seg of segments) {\n if (!node) break;\n if (typeof node === \"function\") {\n lastFn = node;\n break;\n }\n node = node[seg];\n if (typeof node === \"function\") {\n lastFn = node;\n break;\n }\n }\n return lastFn;\n }\n function formatExpected(rawExpected, path3, cfg) {\n const fn = getTransformFunction(cfg, path3);\n if (fn) return fn(rawExpected, path3);\n return defaultExpectedFormat(rawExpected);\n }\n function isObjectLike(v) {\n return typeof v === \"object\" && v !== null;\n }\n function deepCompare(expected, actual, basePath, mismatches, options) {\n if (expected === actual) {\n return mismatches;\n }\n if (expected === null || actual === null || typeof expected !== \"object\" || typeof actual !== \"object\") {\n const path4 = basePath || \"(root)\";\n if (typeof expected !== typeof actual) {\n mismatches.push({\n path: path4,\n expected: formatExpected(expected, path4, options.transformExpected),\n actual,\n reason: \"type-mismatch\"\n });\n return mismatches;\n }\n if (options.includeValueMismatch) {\n mismatches.push({\n path: path4,\n expected: formatExpected(expected, path4, options.transformExpected),\n actual,\n reason: \"value-mismatch\"\n });\n }\n return mismatches;\n }\n if (Array.isArray(expected) || Array.isArray(actual)) {\n if (!Array.isArray(expected) || !Array.isArray(actual)) {\n const path4 = basePath || \"(root)\";\n mismatches.push({\n path: path4,\n expected: formatExpected(expected, path4, options.transformExpected),\n actual,\n reason: \"type-mismatch\"\n });\n return mismatches;\n }\n const maxLen = expected.length;\n for (let i = 0; i < maxLen; i++) {\n const expVal = expected[i];\n const actVal = actual[i];\n const path4 = basePath === \"\" ? `[${i}]` : `${basePath}[${i}]`;\n if (i >= actual.length) {\n mismatches.push({\n path: path4,\n expected: formatExpected(expVal, path4, options.transformExpected),\n actual: void 0,\n reason: \"missing-key\"\n });\n continue;\n }\n deepCompare(expVal, actVal, path4, mismatches, options);\n }\n if (actual.length > expected.length) {\n for (let i = expected.length; i < actual.length; i++) {\n const path4 = basePath === \"\" ? `[${i}]` : `${basePath}[${i}]`;\n mismatches.push({\n path: path4,\n expected: void 0,\n actual: actual[i],\n reason: \"extra-key\"\n });\n }\n }\n return mismatches;\n }\n if (isObjectLike(expected) && isObjectLike(actual)) {\n const expKeys = Object.keys(expected);\n const actKeys = Object.keys(actual);\n for (const key of expKeys) {\n const expVal = expected[key];\n const actVal = actual[key];\n const path4 = basePath ? `${basePath}.${key}` : key;\n if (!(key in actual)) {\n mismatches.push({\n path: path4,\n expected: formatExpected(expVal, path4, options.transformExpected),\n actual: void 0,\n reason: \"missing-key\"\n });\n continue;\n }\n deepCompare(expVal, actVal, path4, mismatches, options);\n }\n for (const key of actKeys) {\n if (!(key in expected)) {\n const path4 = basePath ? `${basePath}.${key}` : key;\n mismatches.push({\n path: path4,\n expected: void 0,\n actual: actual[key],\n reason: \"extra-key\"\n });\n }\n }\n return mismatches;\n }\n const path3 = basePath || \"(root)\";\n if (typeof expected !== typeof actual) {\n mismatches.push({\n path: path3,\n expected: formatExpected(expected, path3, options.transformExpected),\n actual,\n reason: \"type-mismatch\"\n });\n } else if (options.includeValueMismatch) {\n mismatches.push({\n path: path3,\n expected: formatExpected(expected, path3, options.transformExpected),\n actual,\n reason: \"value-mismatch\"\n });\n }\n return mismatches;\n }\n function equalsAtPaths(obj, paths, actual, options) {\n const expected = pickBy(obj, ...paths);\n const mismatches = [];\n const basePath = paths.length === 1 ? paths[0] : \"\";\n deepCompare(expected, actual, basePath, mismatches, {\n transformExpected: options?.transformExpected\n });\n return {\n ok: mismatches.length === 0,\n mismatches\n };\n }\n path2.equalsAtPaths = equalsAtPaths;\n function formatValue(v) {\n if (v === void 0) return \"undefined\";\n if (typeof v === \"string\") return JSON.stringify(v);\n try {\n return JSON.stringify(v, null, 2);\n } catch {\n return String(v);\n }\n }\n function formatReason(m) {\n switch (m.reason) {\n case \"missing-key\":\n return \"Missing key\";\n case \"extra-key\":\n return \"Extra key\";\n case \"type-mismatch\":\n return \"Type mismatch\";\n case \"value-mismatch\":\n return \"Value mismatch\";\n default:\n return m.reason;\n }\n }\n function formatMismatches(result) {\n if (result.ok || result.mismatches.length === 0) {\n return \"No mismatches.\";\n }\n const lines = [];\n for (const m of result.mismatches) {\n lines.push(\n `\n● ${formatReason(m)} at \"${m.path}\":`,\n ` expected: ${formatValue(m.expected)}`,\n ` actual: ${formatValue(m.actual)}`,\n \"\"\n // blank line between entries\n );\n }\n if (lines.at(-1) === \"\") {\n lines.pop();\n }\n return lines.join(\"\\n\");\n }\n path2.formatMismatches = formatMismatches;\n function printMismatches(result) {\n const msg = formatMismatches(result);\n if (msg !== \"No mismatches.\") {\n console.error(msg);\n }\n }\n path2.printMismatches = printMismatches;\n function setAtImmutable(root, path3, value) {\n const keys = path3.split(\".\");\n function helper(current, idx) {\n const key = keys[idx];\n const resolvedCurrent = Array.isArray(current) ? [...current] : { ...current };\n if (idx === keys.length - 1) {\n let clone2 = current && typeof current === \"object\" ? resolvedCurrent : {};\n clone2 = {\n ...clone2,\n [key]: value\n };\n return clone2;\n }\n const next = current && typeof current === \"object\" ? current[key] : void 0;\n const updatedChild = helper(next ?? {}, idx + 1);\n let clone = current && typeof current === \"object\" ? resolvedCurrent : {};\n clone = {\n ...clone,\n [key]: updatedChild\n };\n return clone;\n }\n return helper(root, 0);\n }\n function updateAt(obj, paths, value) {\n const norm = normalizePaths(paths);\n if (norm.length === 0) return obj;\n let result = obj;\n if (norm.length === 1) {\n const path3 = norm[0];\n result = setAtImmutable(result, path3, value);\n return result;\n }\n for (const path3 of norm) {\n const sub = getBy(value, path3);\n result = setAtImmutable(result, path3, sub);\n }\n return result;\n }\n path2.updateAt = updateAt;\n})(path || (path = {}));\nfunction runStandardValidation(schema, input) {\n const result = schema[\"~standard\"].validate(input);\n if (result instanceof Promise) {\n throw new TypeError(\"Schema validation must be synchronous\", {\n cause: schema\n });\n }\n if (result.issues) {\n throw new Error(JSON.stringify(result.issues, null, 2));\n }\n return result.value;\n}\nfunction isValidStepKey(steps, stepKey) {\n return Object.keys(steps).includes(stepKey);\n}\nclass MultiStepFormStepSchemaInternal {\n #getValue;\n #setValue;\n get value() {\n return this.#getValue();\n }\n constructor(options) {\n const { getValue, setValue } = options;\n this.#getValue = getValue;\n this.#setValue = setValue;\n }\n handlePostUpdate(value) {\n this.#setValue(this.enrichValues(value));\n }\n createStepUpdaterFnImpl(options) {\n const { targetStep, updater, ctxData, fields = \"all\", debug } = options;\n const logger = new MultiStepFormLogger({\n debug,\n prefix: (value) => `${value}:update${targetStep}`\n });\n logger.info(`${targetStep} will be updated`);\n invariant(\n isValidStepKey(this.value, targetStep),\n `[update]: The target step ${targetStep} isn't a valid step. Please select a valid step`\n );\n const { [targetStep]: currentStep, ...values } = this.value;\n let updatedValue = { ...this.value };\n let ctx = createCtx(updatedValue, [targetStep]);\n if (ctxData) {\n invariant(\n typeof ctxData === \"function\",\n '[update]: \"ctxData\" must be a function'\n );\n logger.info('Custom \"ctx\" will be used');\n const additionalCtx = ctxData({ ctx: values });\n invariant(\n typeof additionalCtx === \"object\" && Object.keys(additionalCtx).length > 0,\n '[update]: \"ctxData\" must return an object with keys'\n );\n logger.info(\n `Custom \"ctx\" consists of the following keys: ${new Intl.ListFormat(\n \"en\",\n {\n style: \"long\",\n type: \"conjunction\"\n }\n ).format(Object.keys(additionalCtx))}`\n );\n ctx = {\n ...ctx,\n ...additionalCtx\n };\n }\n const updated = functionalUpdate(updater, {\n ctx,\n update: this.createHelperFnInputUpdate([targetStep])\n });\n logger.info(`The updated data is ${JSON.stringify(updated, null, 2)}`);\n if (!fields) {\n invariant(\n typeof updated === \"object\",\n '[update]: \"updater\" must be an object or a function that returns an object'\n );\n const stepKeys = Object.keys(this.value);\n const updaterResultKeys = Object.keys(updated);\n invariant(updaterResultKeys.length === stepKeys.length, () => {\n const missingKeys = stepKeys.filter(\n (key) => !updaterResultKeys.includes(key)\n );\n const formatter = new Intl.ListFormat(\"en\", {\n style: \"long\",\n type: \"conjunction\"\n });\n return `[update]: \"updater\" is missing keys ${formatter.format(\n missingKeys\n )}`;\n });\n const paths = path.createDeep(this.value);\n const { mismatches, ok } = path.equalsAtPaths(\n this.value,\n paths,\n updated\n );\n invariant(\n ok && mismatches.length === 0,\n `[update]: found value mismatches in ${path.printMismatches({\n mismatches,\n ok\n })}`\n );\n logger.info(\"The entire step will be updated\");\n updatedValue = {\n ...updatedValue,\n [targetStep]: path.updateAt(updatedValue, paths, updated)\n };\n this.handlePostUpdate(updatedValue);\n logger.info(`The new value is: ${JSON.stringify(updatedValue, null, 2)}`);\n return;\n }\n const currentStepDeepKeys = path.createDeep(currentStep);\n if (Array.isArray(fields)) {\n const compareResult = comparePartialArray(currentStepDeepKeys, fields);\n invariant(\n compareResult.status === \"success\",\n `[update]: Found errors with the provided fields\n${compareResult.status === \"error\" ? printErrors(compareResult.errors) : \"\"}`\n );\n const { mismatches, ok } = path.equalsAtPaths(\n currentStep,\n fields,\n updated\n );\n invariant(\n ok && mismatches.length === 0,\n `[update]: found value mismatches in ${path.printMismatches({\n ok,\n mismatches\n })}`\n );\n logger.info(\n `The following fields will be updated: ${new Intl.ListFormat(\"en\", {\n type: \"conjunction\",\n style: \"long\"\n }).format(fields)}`\n );\n updatedValue = {\n ...updatedValue,\n [targetStep]: path.updateAt(currentStep, fields, updated)\n };\n this.handlePostUpdate(updatedValue);\n logger.info(`The new value is: ${JSON.stringify(updatedValue, null, 2)}`);\n return;\n }\n if (typeof fields === \"object\" && Object.keys(fields).length > 0) {\n const keys = path.createDeep(fields);\n const compareResult = comparePartialArray(\n currentStepDeepKeys,\n keys\n );\n invariant(\n compareResult.status === \"success\",\n `[update]: Found errors with the provided fields\n${compareResult.status === \"error\" ? printErrors(compareResult.errors) : \"\"}`\n );\n const { mismatches, ok } = path.equalsAtPaths(\n currentStep,\n keys,\n updated\n );\n invariant(\n ok && mismatches.length === 0,\n `[update]: found value mismatches in ${path.printMismatches({\n ok,\n mismatches\n })}`\n );\n updatedValue = {\n ...updatedValue,\n [targetStep]: path.updateAt(\n currentStep,\n keys,\n updated\n )\n };\n logger.info(\n `The following fields will be updated: ${new Intl.ListFormat(\"en\", {\n type: \"conjunction\",\n style: \"long\"\n }).format(Object.keys(fields))}`\n );\n this.handlePostUpdate(updatedValue);\n logger.info(`The new value is: ${JSON.stringify(updatedValue, null, 2)}`);\n return;\n }\n logger.error('Unsupported value for the \"fields\" option');\n throw new TypeError(\n `[update]: property \"fields\" must be set to one of the following: \"all\", an array of deep paths to update, or an object of paths. Was ${typeof updater}`,\n { cause: updater }\n );\n }\n createStepUpdaterFn(targetStep) {\n return (options) => {\n this.createStepUpdaterFnImpl({ targetStep, ...options });\n };\n }\n update(options) {\n return this.createStepUpdaterFnImpl(options);\n }\n createHelperFnInputUpdate(chosenSteps) {\n if (HelperFnChosenSteps.isAll(chosenSteps)) {\n const stepSpecificUpdateFn = typedObjectKeys(this.value).reduce((acc, key) => {\n acc[key] = this.createStepUpdaterFn(key);\n return acc;\n }, {});\n const update = Object.assign(\n this.update,\n stepSpecificUpdateFn\n );\n return update;\n }\n const validKeys = Object.keys(this.value);\n if (HelperFnChosenSteps.isTuple(chosenSteps, validKeys)) {\n const stepSpecificUpdateFn = chosenSteps.reduce((acc, step) => {\n acc[step] = this.createStepUpdaterFn(step);\n return acc;\n }, {});\n const update = Object.assign(\n this.update,\n stepSpecificUpdateFn\n );\n return update;\n }\n if (HelperFnChosenSteps.isObject(chosenSteps, validKeys)) {\n const stepSpecificUpdateFn = typedObjectKeys(chosenSteps).reduce((acc, key) => {\n acc[key] = this.createStepUpdaterFn(key);\n return acc;\n }, {});\n const update = Object.assign(\n this.update,\n stepSpecificUpdateFn\n );\n return update;\n }\n throw new TypeError(`[update]: ${HelperFnChosenSteps.CATCH_ALL_MESSAGE}`);\n }\n createStepHelperFn(stepData) {\n return (optionsOrFunction, fn) => {\n const ctx = createCtx(\n this.value,\n stepData\n );\n const createInputUpdateFn = this.createHelperFnInputUpdate(\n stepData\n );\n if (typeof optionsOrFunction === \"function\") {\n return () => optionsOrFunction({\n ctx,\n update: createInputUpdateFn\n });\n }\n if (typeof optionsOrFunction === \"object\") {\n return (input) => {\n if (\"validator\" in optionsOrFunction) {\n invariant(\n typeof input === \"object\",\n \"An input is expected since you provided a validator\"\n );\n runStandardValidation(\n optionsOrFunction.validator,\n input.data\n );\n let resolvedCtx = ctx;\n if (optionsOrFunction.ctxData) {\n const currentStepKey = stepData[0];\n const { [currentStepKey]: _, ...values } = this.value;\n resolvedCtx = {\n ...resolvedCtx,\n ...optionsOrFunction.ctxData({ ctx: values })\n };\n }\n return fn({\n ctx: resolvedCtx,\n update: createInputUpdateFn,\n ...input\n });\n }\n return fn({\n ctx,\n update: createInputUpdateFn\n });\n };\n }\n throw new Error(\n `The first argument must be a function or an object, (was ${typeof optionsOrFunction})`\n );\n };\n }\n enrichValues(values, additionalProps) {\n let enriched = { ...values };\n for (const [key, stepValue] of Object.entries(enriched)) {\n const [targetStep] = [key];\n const step = Number.parseInt(\n targetStep.replace(\"step\", \"\")\n );\n enriched[targetStep] = {\n ...stepValue,\n update: this.createStepUpdaterFn(targetStep),\n createHelperFn: this.createStepHelperFn([targetStep]),\n ...additionalProps?.(step)\n };\n }\n return enriched;\n }\n}\nvar HelperFnChosenSteps;\n((HelperFnChosenSteps2) => {\n HelperFnChosenSteps2.CATCH_ALL_MESSAGE = 'The chosen steps must either be set to on of the following: \"all\", an array of steps ([\"step1\", \"step2\", ...]), or an object containing the steps to chose ({ step1: true, step2: true, ...})';\n function isAll(value) {\n return Boolean(value && typeof value === \"string\" && value === \"all\");\n }\n HelperFnChosenSteps2.isAll = isAll;\n function isTuple(value, validValues) {\n if (!Array.isArray(value)) {\n return false;\n }\n if (validValues) {\n return value.every((key) => validValues.includes(key));\n }\n return true;\n }\n HelperFnChosenSteps2.isTuple = isTuple;\n function isObject(value, validKeys) {\n if (!value) {\n return false;\n }\n const keys = Object.keys(value);\n if (keys.length === 0) {\n return false;\n }\n if (validKeys && !keys.every((key) => validKeys.includes(key))) {\n return false;\n }\n return Object.entries(value).every(([_, v]) => v === true);\n }\n HelperFnChosenSteps2.isObject = isObject;\n})(HelperFnChosenSteps || (HelperFnChosenSteps = {}));\nexport {\n DEFAULT_LOGGER_PREFIX as D,\n HelperFnChosenSteps as H,\n MultiStepFormLogger as M,\n MultiStepFormStepSchemaInternal as a,\n isValidStepKey as b,\n createCtx as c,\n getStep as g,\n invariant as i,\n runStandardValidation as r\n};\n//# sourceMappingURL=index-D3RfNrOH.js.map\n","import { M as MultiStepFormLogger, i as invariant, a as MultiStepFormStepSchemaInternal, b as isValidStepKey, g as getStep, r as runStandardValidation } from \"./index-D3RfNrOH.js\";\nimport { D, H, c } from \"./index-D3RfNrOH.js\";\nconst CASING_TYPES = [\n \"sentence\",\n \"title\",\n \"camel\",\n \"lower\",\n \"upper\",\n \"pascal\",\n \"snake\",\n \"screaming-snake\",\n \"flat\",\n \"kebab\"\n];\nconst DEFAULT_CASING = \"title\";\nfunction changeCasing(input, type) {\n const words = input.replace(/([a-z])([A-Z])/g, \"$1 $2\").replace(/[-_]+/g, \" \").trim().split(/\\s+/).map((w) => w.toLowerCase());\n switch (type) {\n case \"sentence\":\n return words[0].charAt(0).toUpperCase() + words[0].slice(1) + (words.length > 1 ? \" \" + words.slice(1).join(\" \") : \"\");\n case \"title\":\n return words.map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(\" \");\n case \"camel\":\n return words[0] + words.slice(1).map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(\"\");\n case \"pascal\":\n return words.map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(\"\");\n case \"lower\":\n return words.join(\" \");\n case \"upper\":\n return words.join(\" \").toUpperCase();\n case \"snake\":\n return words.join(\"_\");\n case \"screaming-snake\":\n return words.join(\"_\").toUpperCase();\n case \"kebab\":\n return words.join(\"-\");\n case \"flat\":\n return words.join(\"\");\n default:\n return input;\n }\n}\nfunction quote(str, quoteChar = '\"') {\n const startsWithQuote = str.startsWith(quoteChar);\n const endsWithQuote = str.endsWith(quoteChar);\n if (startsWithQuote && endsWithQuote) {\n return str;\n }\n const trimmed = str.replace(/^['\"]|['\"]$/g, \"\");\n return `${quoteChar}${trimmed}${quoteChar}`;\n}\nfunction isCasingValid(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n const isValid = CASING_TYPES.includes(value);\n return isValid;\n}\nfunction setCasingType(input, fallback = DEFAULT_CASING) {\n if (isCasingValid(input)) {\n return input;\n }\n return fallback;\n}\nconst FIELD_TYPES = [\n \"string\",\n \"string.phone\",\n \"string.email\",\n \"string.time\",\n \"number\",\n \"number.counter\",\n \"date\",\n \"dateTime\",\n \"boolean.switch\"\n];\nconst DEFAULT_FIELD_TYPE = \"string\";\nfunction isFieldType(value) {\n return typeof value === \"string\" && FIELD_TYPES.includes(value);\n}\nconst WINDOW_UNDEFINED_MESSAGE = '\"window\" in undefined. No storage is available';\nconst DEFAULT_STORAGE_KEY = \"MultiStepForm\";\nclass MultiStepFormStorage {\n key;\n store;\n data;\n log;\n isWindowUndefined;\n throwWhenUndefined;\n constructor(config) {\n const { key, data, store, throwWhenUndefined = false } = config;\n this.log = new MultiStepFormLogger({\n prefix: DEFAULT_STORAGE_KEY\n });\n this.key = key;\n this.data = data;\n this.throwWhenUndefined = throwWhenUndefined;\n if (store) {\n this.store = store;\n this.isWindowUndefined = false;\n } else if (typeof window !== \"undefined\") {\n this.store = window.localStorage;\n this.isWindowUndefined = false;\n } else {\n this.isWindowUndefined = true;\n this.log.warn(WINDOW_UNDEFINED_MESSAGE);\n }\n }\n throwOnEmptyStore() {\n if (this.throwWhenUndefined) {\n invariant(this.store, () => {\n if (this.isWindowUndefined) {\n return WINDOW_UNDEFINED_MESSAGE;\n }\n return \"No storage available\";\n });\n }\n }\n resolveValue(value) {\n if (typeof value === \"object\") {\n return value;\n }\n if (typeof value === \"function\") {\n return value(this.data);\n }\n this.log.error(\n `The updater value must be a function or object. Was a ${typeof value}`,\n { throw: true }\n );\n }\n hasKey() {\n return this.store.getItem(this.key) !== null;\n }\n get() {\n this.throwOnEmptyStore();\n const item = this.store.getItem(this.key);\n if (item) {\n const parsed = JSON.parse(item);\n return parsed;\n }\n }\n remove() {\n this.throwOnEmptyStore();\n this.store.removeItem(this.key);\n }\n add(value) {\n this.throwOnEmptyStore();\n const resolvedValue = JSON.stringify(this.resolveValue(value));\n this.store.setItem(this.key, resolvedValue);\n }\n}\nclass Subscribable {\n listeners = /* @__PURE__ */ new Set();\n constructor() {\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n}\nconst AS_TYPES = [\n \"string\",\n \"number\",\n \"array.string\",\n \"array.string.untyped\"\n];\nconst VALIDATED_STEP_REGEX = /^step\\d+$/i;\nfunction assertObjectFields(obj, checks) {\n if (typeof obj !== \"object\" || obj === null) return false;\n for (const key of Object.keys(checks)) {\n if (!(key in obj)) return false;\n const checkFn = checks[key];\n const value = obj[key];\n if (!checkFn(value)) return false;\n }\n return true;\n}\nfunction createFieldLabel(label, fieldName, casingType) {\n return label ?? changeCasing(fieldName, casingType);\n}\nfunction createStepFields(options) {\n const resolvedFields = {};\n const { fields, defaultCasing, validateFields } = options;\n for (const [name, values] of Object.entries(fields)) {\n invariant(\n typeof name === \"string\",\n `Each key for the \"fields\" option must be a string. Key ${name} was a ${typeof name}`\n );\n invariant(\n typeof values === \"object\",\n `The value for key ${name} must be an object. Was ${typeof values}`\n );\n const {\n defaultValue,\n label,\n nameTransformCasing,\n type = DEFAULT_FIELD_TYPE\n } = values;\n if (validateFields) {\n resolvedFields[name] = defaultValue;\n } else {\n const casing = nameTransformCasing ?? defaultCasing;\n resolvedFields[name] = {\n ...resolvedFields[name],\n nameTransformCasing: casing,\n type,\n defaultValue,\n label: createFieldLabel(label, name, casing)\n // TODO add more fields here\n };\n }\n }\n if (validateFields) {\n const validatedFields = runStandardValidation(\n validateFields,\n resolvedFields\n );\n invariant(\n typeof validatedFields === \"object\",\n `The result of the validated fields must be an object, was (${typeof validatedFields}). This is probably an internal error, so open up an issue about it`\n );\n invariant(\n !!validatedFields,\n \"The result of the validated fields must be defined. This is probably an internal error, so open up an issue about it\"\n );\n for (const [name, defaultValue] of Object.entries(validatedFields)) {\n const currentField = fields[name];\n invariant(\n currentField,\n `No field found in the fields config for \"${name}\"`\n );\n const {\n label,\n type = DEFAULT_FIELD_TYPE,\n nameTransformCasing\n } = currentField;\n const casing = nameTransformCasing ?? defaultCasing;\n resolvedFields[name] = {\n ...resolvedFields[name],\n nameTransformCasing: casing,\n type,\n defaultValue,\n label: createFieldLabel(label, name, casing)\n };\n }\n }\n return resolvedFields;\n}\nfunction createStep(stepsConfig) {\n const resolvedSteps = {};\n invariant(!!stepsConfig, \"The steps config must be defined\", TypeError);\n invariant(\n typeof stepsConfig === \"object\",\n `The steps config must be an object, was (${typeof stepsConfig})`,\n TypeError\n );\n for (const [stepKey, stepValue] of Object.entries(stepsConfig)) {\n invariant(\n typeof stepKey === \"string\",\n `Each key for the step config must be a string. Key \"${stepKey}\" was ${typeof stepKey} `,\n TypeError\n );\n invariant(\n VALIDATED_STEP_REGEX.test(stepKey),\n `The key \"${stepKey}\" isn't formatted properly. Each key in the step config must be the following format: \"step{number}\"`\n );\n const validStepKey = stepKey;\n const {\n fields,\n title,\n nameTransformCasing: defaultCasing = DEFAULT_CASING,\n description,\n validateFields\n } = stepValue;\n const currentStep = validStepKey.toString().replace(\"step\", \"\");\n invariant(\n fields,\n `Missing fields for step ${currentStep} (${String(validStepKey)})`,\n TypeError\n );\n invariant(\n typeof fields === \"object\",\n \"Fields must be an object\",\n TypeError\n );\n invariant(\n Object.keys(fields).length > 0,\n `The fields config for step ${currentStep} (${String(\n validStepKey\n )}) is empty. Please add a field`\n );\n invariant(\n typeof fields === \"object\",\n `The \"fields\" property must be an object. Was ${typeof fields}`\n );\n const resolvedFields = createStepFields({\n defaultCasing,\n fields,\n validateFields\n });\n resolvedSteps[validStepKey] = {\n ...resolvedSteps[validStepKey],\n title,\n nameTransformCasing: defaultCasing,\n // Only add the description if it's defined\n ...typeof description === \"string\" ? { description } : {},\n fields: resolvedFields\n };\n }\n return resolvedSteps;\n}\nclass MultiStepFormStepSchema extends Subscribable {\n /**\n * The original config before any validation or transformations have been applied.\n */\n original;\n /**\n * The resolved step values.\n */\n value;\n steps;\n defaultNameTransformationCasing;\n //@ts-ignore\n firstStep;\n lastStep;\n stepNumbers;\n storage;\n #internal;\n constructor(config) {\n super();\n const { steps, nameTransformCasing, storage } = config;\n this.defaultNameTransformationCasing = setCasingType(\n nameTransformCasing\n );\n this.original = steps;\n this.value = createStep(this.original);\n this.storage = new MultiStepFormStorage({\n data: this.value,\n key: storage?.key ?? DEFAULT_STORAGE_KEY,\n store: storage?.store,\n throwWhenUndefined: storage?.throwWhenUndefined ?? false\n });\n this.#internal = new MultiStepFormStepSchemaInternal({\n getValue: () => this.value,\n setValue: (next) => this.handlePostUpdate(next)\n });\n this.value = this.#internal.enrichValues(this.value);\n this.stepNumbers = Object.keys(this.value).map(\n (key) => Number.parseInt(key.replace(\"step\", \"\"))\n );\n this.firstStep = this.first();\n this.lastStep = this.last();\n this.steps = {\n first: this.firstStep.step,\n last: this.lastStep.step,\n value: this.stepNumbers,\n as: (asType) => {\n invariant(\n typeof asType === \"string\",\n `The type of the target transformation type must be a string, was ${typeof asType}`\n );\n if (asType === \"string\") {\n return this.stepNumbers.map((value) => `'${value}'`).join(\" | \");\n }\n if (asType === \"number\") {\n return this.stepNumbers.join(\" | \");\n }\n if (asType.includes(\"array.string\")) {\n return this.stepNumbers.map((value) => `${value}`);\n }\n throw new Error(\n `Transformation type \"${asType}\" is not supported. Available transformations include: ${AS_TYPES.map(\n (value) => `\"${value}\"`\n ).join(\", \")}`\n );\n },\n isValidStepNumber: (stepNumber) => this.stepNumbers.includes(stepNumber),\n isValidStepKey: (value) => isValidStepKey(this.value, value)\n };\n this.sync();\n }\n getSnapshot() {\n return this;\n }\n /**\n * Syncs the values from storage to {@linkcode value}.\n */\n sync() {\n const storageValues = this.storage.get();\n if (storageValues) {\n const enrichedValues = this.#internal.enrichValues(storageValues);\n this.value = { ...enrichedValues };\n }\n }\n notify() {\n for (const listener of this.listeners) {\n listener({\n defaultNameTransformationCasing: this.defaultNameTransformationCasing,\n original: this.original,\n steps: this.steps,\n value: this.value\n });\n }\n }\n /**\n * Gets the data for a specific step.\n * @param options The options for getting the step data.\n * @returns The step data for the target step.\n */\n get(options) {\n return getStep(this.value)(options);\n }\n /**\n * Gets the data for the first step.\n * @returns The data for the first step.\n */\n first() {\n const firstStep = Math.min(...this.stepNumbers);\n return this.get({ step: firstStep });\n }\n /**\n * Gets the data for the last step.\n * @returns The data for the last step.\n */\n last() {\n const lastStep = Math.max(...this.stepNumbers);\n return this.get({ step: lastStep });\n }\n handlePostUpdate(next) {\n this.value = { ...next };\n this.storage.add(this.value);\n this.sync();\n this.notify();\n }\n update(options) {\n this.#internal.update(options);\n }\n // Implementation\n createHelperFn(options, fn) {\n const { stepData, ...rest } = options;\n return this.#internal.createStepHelperFn(stepData)(rest, fn);\n }\n /**\n * Validates that a given object is the proper shape for step data.\n * @param value\n */\n static hasData(value, options) {\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n return assertObjectFields(value, {\n title: (v) => typeof v === \"string\",\n fields: (v) => {\n if (v === null || typeof v !== \"object\") {\n return false;\n }\n for (const key of Object.keys(v)) {\n if (typeof key !== \"string\" || !(key in v)) {\n return false;\n }\n const current = v[key];\n if (current === null || typeof current !== \"object\") {\n return false;\n }\n const hasField = assertObjectFields(current, {\n defaultValue: (v2) => v2 !== \"undefined\" && v2 !== null,\n label: (v2) => typeof v2 === \"string\" || typeof v2 === \"boolean\" && !v2,\n nameTransformCasing: isCasingValid,\n type: isFieldType\n });\n if (!hasField) {\n return false;\n }\n }\n return true;\n },\n createHelperFn: (v) => typeof v === \"function\",\n // update: (v): v is GetCurrentStep<resolvedStep, stepNumbers>['update'] =>\n // typeof v === 'function',\n nameTransformCasing: isCasingValid,\n ...options?.optionalKeysToCheck\n });\n }\n}\nclass MultiStepFormSchema extends Subscribable {\n defaultNameTransformationCasing;\n stepSchema;\n storage;\n mountCount = 0;\n constructor(options) {\n super();\n const { steps, nameTransformCasing, storage } = options;\n this.defaultNameTransformationCasing = setCasingType(\n nameTransformCasing\n );\n this.stepSchema = new MultiStepFormStepSchema({\n steps,\n nameTransformCasing: this.defaultNameTransformationCasing\n });\n this.storage = new MultiStepFormStorage({\n key: storage?.key ?? DEFAULT_STORAGE_KEY,\n data: this.stepSchema.value,\n store: storage?.store,\n throwWhenUndefined: storage?.throwWhenUndefined ?? false\n });\n this.stepSchema.subscribe(() => {\n this.notify();\n });\n }\n getSnapshot() {\n return this;\n }\n mount() {\n this.mountCount++;\n if (this.mountCount === 1) {\n this.onMount();\n }\n return () => {\n this.unmount();\n };\n }\n unmount() {\n this.mountCount = Math.max(0, this.mountCount - 1);\n if (this.mountCount === 0) {\n this.onUnmount();\n }\n }\n isMounted() {\n return this.mountCount > 0;\n }\n onMount() {\n }\n onUnmount() {\n }\n notify() {\n for (const listener of this.listeners) {\n listener({\n nameTransformCasing: this.defaultNameTransformationCasing,\n storage: {\n key: this.storage.key,\n store: this.storage.store\n },\n steps: this.stepSchema.original\n });\n }\n }\n}\nfunction createMultiStepFormSchema(options) {\n return new MultiStepFormSchema(options);\n}\nclass MultiStepFormObserver extends Subscribable {\n schema;\n unsubscribeFromSchema;\n constructor(options) {\n super();\n this.schema = options.schema;\n this.subscribeToSchema();\n }\n subscribeToSchema() {\n this.unsubscribeFromSchema = this.schema.subscribe(() => {\n this.notify();\n });\n }\n getSnapshot() {\n return this;\n }\n getResult() {\n return this.schema;\n }\n setOptions(options) {\n if (options.schema && options.schema !== this.schema) {\n this.unsubscribeFromSchema?.();\n this.schema = options.schema;\n this.subscribeToSchema();\n this.notify();\n }\n }\n notify() {\n for (const listener of this.listeners) {\n listener(this.schema);\n }\n }\n destroy() {\n this.unsubscribeFromSchema?.();\n this.listeners.clear();\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n}\nexport {\n CASING_TYPES,\n DEFAULT_CASING,\n DEFAULT_FIELD_TYPE,\n D as DEFAULT_LOGGER_PREFIX,\n DEFAULT_STORAGE_KEY,\n FIELD_TYPES,\n H as HelperFnChosenSteps,\n MultiStepFormLogger,\n MultiStepFormObserver,\n MultiStepFormSchema,\n MultiStepFormStepSchema,\n MultiStepFormStorage,\n VALIDATED_STEP_REGEX,\n changeCasing,\n c as createCtx,\n createMultiStepFormSchema,\n createStep,\n invariant,\n isCasingValid,\n isFieldType,\n quote,\n setCasingType\n};\n//# sourceMappingURL=index.mjs.map\n","import type {\n AnyResolvedStep,\n StepNumbers,\n Updater,\n ValidStepKey,\n} from '@jfdevelops/multi-step-form';\nimport type { ReactNode } from 'react';\n\nexport namespace Field {\n export type getFields<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends StepNumbers<TResolvedStep>\n > = TResolvedStep[ValidStepKey<TTargetStep>]['fields'];\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers,\n TFields extends getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n > = getFields<TResolvedStep, TTargetStep>[TField] & {\n /**\n * The name of the field.\n */\n name: TField;\n /**\n * A useful wrapper around `update` to update the specific field.\n * @param value The new value for the field.\n */\n onInputChange: (value: Updater<TFields[TField]['defaultValue']>) => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers,\n TFields extends getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n > = {\n name: TField;\n children: (\n props: childrenProps<\n TResolvedStep,\n TStepNumbers,\n TTargetStep,\n TFields,\n TField\n >\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers\n > = <\n TFields extends getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n >(\n props: props<TResolvedStep, TStepNumbers, TTargetStep, TFields, TField>\n ) => ReactNode;\n}\n\nexport function createField<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers\n>(\n propsCreator: <\n TFields extends Field.getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n >(\n name: TField\n ) => Field.childrenProps<\n TResolvedStep,\n TStepNumbers,\n TTargetStep,\n TFields,\n TField\n >\n) {\n function Field<\n TFields extends Field.getFields<TResolvedStep, TTargetStep>,\n TField extends keyof TFields\n >(\n props: Field.props<\n TResolvedStep,\n TStepNumbers,\n TTargetStep,\n TFields,\n TField\n >\n ) {\n const { children, name } = props;\n\n return children(propsCreator(name));\n }\n\n return Field;\n}\n","import type {\n Expand,\n HelperFnChosenSteps,\n StepNumbers,\n ValidStepKey,\n} from '@jfdevelops/multi-step-form';\nimport type { ComponentPropsWithRef, JSX } from 'react';\nimport type {\n AnyResolvedStep,\n CreatedMultiStepFormComponent,\n} from './step-schema';\n\nexport namespace MultiStepFormSchemaConfig {\n export const DEFAULT_FORM_ALIAS = 'Form';\n export type defaultEnabledFor = HelperFnChosenSteps.defaultStringOption;\n export type defaultFormAlias = typeof DEFAULT_FORM_ALIAS;\n export type formEnabledFor<TResolvedStep extends AnyResolvedStep> =\n HelperFnChosenSteps<TResolvedStep, StepNumbers<TResolvedStep>>;\n type strippedResolvedSteps<T extends AnyResolvedStep> = {\n [_ in keyof T]: Expand<Omit<T[_], 'createComponent' | 'createHelperFn'>>;\n };\n export type AvailableStepForForm<\n TResolvedStep extends AnyResolvedStep,\n TEnabledFor extends formEnabledFor<TResolvedStep>\n > = TEnabledFor extends defaultEnabledFor\n ? strippedResolvedSteps<TResolvedStep>\n : TEnabledFor extends [\n ValidStepKey<StepNumbers<TResolvedStep>>,\n ...ValidStepKey<StepNumbers<TResolvedStep>>[]\n ]\n ? TEnabledFor[number] extends keyof TResolvedStep\n ? Pick<strippedResolvedSteps<TResolvedStep>, TEnabledFor[number]>\n : never\n : keyof TEnabledFor extends keyof TResolvedStep\n ? Expand<\n Pick<\n strippedResolvedSteps<TResolvedStep>,\n Extract<keyof TResolvedStep, keyof TEnabledFor>\n >\n >\n : never;\n export type formCtx<TAlias extends string, TProps> = {\n [_ in TAlias]: CreatedMultiStepFormComponent<TProps>;\n };\n export type renderFnData<\n TResolvedStep extends AnyResolvedStep,\n TEnabledFor extends formEnabledFor<TResolvedStep>\n > = {\n /**\n * The id for the form, either a custom one or the default one.\n */\n id: string;\n /**\n * The chosen steps that are available.\n */\n steps: Expand<AvailableStepForForm<TResolvedStep, TEnabledFor>>;\n };\n\n /**\n * The configuration options for the `form` option.\n */\n export interface FormConfig<\n TResolvedStep extends AnyResolvedStep,\n TAlias extends string,\n TFormEnabledFor extends formEnabledFor<TResolvedStep>,\n TCustomFormProps extends object\n > {\n /**\n * The `id` for the form component.\n *\n * If there is no value provided, the default id will the **current step key**.\n *\n * @default `${currentStep}`\n */\n id?: string;\n /**\n * The \"name\" of the form component.\n * @default 'Form'\n * @example\n * ```tsx\n * const schema = createMultiStepFormSchema({\n * steps: {\n * step1: {\n * title: 'Step 1',\n * fields: {\n * firstName: {\n * defaultValue: ''\n * }\n * }\n * },\n * form: {\n * alias: 'MyCustomForm',\n * render() {\n * // return custom form component here\n * }\n * }\n * }\n * })\n *\n * const Step1 = schema.stepSchema.step1.createComponent(\n * ({ ctx, MyCustomForm }, props: { children: ReactNode }) =>\n * // Notice how the form is available with its alias\n * <MyCustomFormName>{children}</MyCustomFormName>\n * )\n * ```\n */\n alias?: TAlias;\n /**\n * If the form component should be accessible for each step when calling `createComponent`.\n *\n * If no value is given, the form will be accessible for all the steps.\n */\n enabledForSteps?: TFormEnabledFor;\n /**\n *\n * @param data The data that is available for creating the custom form.\n * @param props Props that can be used for the custom form.\n * @returns An {@see JSX.Element} that is the custom form.\n * @example\n * ### With custom props\n * ```tsx\n * type CustomProps = {\n * title: string;\n * description?: string;\n * children: ReactNode;\n * };\n *\n * const schema = createMultiStepFormSchema({\n * steps: {\n * step1: {\n * title: 'Step 1',\n * fields: {\n * firstName: {\n * defaultValue: ''\n * }\n * }\n * },\n * form: {\n * alias: 'MyCustomForm',\n * render(data, props: CustomProps) {\n * return (\n * <div>\n * <h1>{props.title}</h1>\n * <p>{props.description}</p>\n * <form>{props.children}</form>\n * </div>\n * );\n * }\n * }\n * }\n * })\n * ```\n * ### Without custom props\n * ```tsx\n * const schema = createMultiStepFormSchema({\n * steps: {\n * step1: {\n * title: 'Step 1',\n * fields: {\n * firstName: {\n * defaultValue: ''\n * }\n * }\n * },\n * form: {\n * alias: 'MyCustomForm',\n * render(data, props) {\n * // The default type for `props` will be `ComponentPropsWithRef<'form'>`\n * // return custom form component here\n * }\n * }\n * }\n * })\n * ```\n */\n render: (\n data: renderFnData<TResolvedStep, TFormEnabledFor>,\n props: TCustomFormProps\n ) => JSX.Element;\n }\n\n export interface Form<\n TResolvedStep extends AnyResolvedStep,\n TAlias extends string,\n TFormEnabledFor extends formEnabledFor<TResolvedStep>,\n TCustomFormProps extends object\n > {\n form?: FormConfig<TResolvedStep, TAlias, TFormEnabledFor, TCustomFormProps>;\n }\n\n /**\n * Compares {@linkcode enabledFor} to the {@linkcode target} to determine if the form\n * should be available.\n * @param target The target steps the form _should_ be available for.\n * @param enabledFor The steps that the form _is_ enabled for.\n * @returns A boolean representing if the form should be available.\n */\n // Note: the implementation is specific to `MultiStepFormStepSchema.createComponentForStep`\n // because the `target` will always be an `Array` in `MultiStepFormStepSchema.createComponentForStep`.\n // TODO add validation to keys\n export function isFormAvailable<\n TResolvedStep extends AnyResolvedStep,\n TTarget extends HelperFnChosenSteps<\n TResolvedStep,\n StepNumbers<TResolvedStep>\n >,\n TEnabledFor extends formEnabledFor<TResolvedStep>\n >(target: TTarget, enabledFor: TEnabledFor) {\n if (Array.isArray(target)) {\n if (enabledFor === 'all') {\n return true;\n }\n\n if (typeof enabledFor === 'object' && !Array.isArray(enabledFor)) {\n return Object.keys(enabledFor).some((key) =>\n target.includes(key as `step${StepNumbers<TResolvedStep>}`)\n );\n }\n\n if (Array.isArray(enabledFor)) {\n return enabledFor.some((key) => target.includes(key));\n }\n }\n\n return false;\n }\n\n /**\n * Creates a form component with a default id.\n * @param id The default id for the form.\n * @returns A form component with a default {@linkcode id}.\n */\n export function createDefaultForm(id: string) {\n return (props: Omit<ComponentPropsWithRef<'form'>, 'id'>) => (\n <form id={id} {...props} />\n );\n }\n}\n","import {\n type AnyStepField,\n type CasingType,\n type Constrain,\n createCtx,\n type CreateHelperFunctionOptionsBase,\n createStep,\n type DefaultCasing,\n type DefaultStorageKey,\n type Expand,\n type GetCurrentStep,\n type GetFieldsForStep,\n type HelperFnChosenSteps,\n type HelperFnCtx,\n type HelperFnInputBase,\n invariant,\n MultiStepFormLogger,\n type MultiStepFormSchemaStepConfig as MultiStepFormSchemaStepBaseConfig,\n MultiStepFormStepSchema as MultiStepFormStepSchemaBase,\n type Relaxed,\n type ResolvedStep as ResolvedCoreStep,\n type Step,\n type StepNumbers,\n type StrippedResolvedStep,\n type UpdateFn,\n type Updater,\n type ValidStepKey,\n} from '@jfdevelops/multi-step-form';\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\nimport { createField, type Field } from './field';\nimport { MultiStepFormSchemaConfig } from './form-config';\nimport { MultiStepFormStepSchemaInternal } from '@jfdevelops/multi-step-form/_internal';\n\nexport interface MultiStepFormSchemaStepConfig<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object,\n TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<\n TStep,\n TCasing\n >\n> extends MultiStepFormSchemaStepBaseConfig<TStep, TCasing, TStorageKey>,\n MultiStepFormSchemaConfig.Form<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n > {}\n\nexport type CreateFunction<TArgs extends any[], TReturn = void> = (\n ...args: TArgs\n) => TReturn;\nexport type CreateComponent<TInput, TProps> = CreateFunction<\n [input: TInput, props: TProps],\n ReactNode\n>;\n\nexport type CreateComponentCallback<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TProps\n> = CreateComponent<\n HelperFnInputBase<TResolvedStep, TSteps, TChosenSteps>,\n TProps\n>;\nexport type CreatedMultiStepFormComponent<TProps> = TProps extends undefined\n ? () => ReactNode\n : (props: TProps) => ReactNode;\nexport type CreateComponentFn<\n TResolvedStep extends AnyResolvedStep,\n // This is needed to make TS happy with all types\n TStepNumbers extends StepNumbers<TResolvedStep>\n> = <\n chosenSteps extends HelperFnChosenSteps<TResolvedStep, TStepNumbers>,\n props = undefined\n>(\n options: CreateHelperFunctionOptionsBase<\n TResolvedStep,\n TStepNumbers,\n chosenSteps\n >,\n fn: CreateComponentCallback<TResolvedStep, TStepNumbers, chosenSteps, props>\n) => CreatedMultiStepFormComponent<props>;\n\nexport namespace StepSpecificComponent {\n // The logic for getting the formCtx only works for step specific `createComponent`\n // (i.e: step1.createComponent(...)) as of now. Reason is because I can't think of a good API for integrating the form\n // ctx into the main `createComponent` since multiple steps can be chosen. In that case\n // how would the logic work for when the form component should be defined in the callback?\n // Ideas:\n // - Make the main `createComponent` return a function that accepts the current step\n export type formComponent<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>\n > = TFormEnabledFor extends MultiStepFormSchemaConfig.defaultEnabledFor\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\n : TFormEnabledFor extends HelperFnChosenSteps.tupleNotation<\n ValidStepKey<TSteps>\n >\n ? TFormEnabledFor[number] extends keyof TResolvedStep\n ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<\n ValidStepKey<TSteps>\n >\n ? TChosenSteps[number] extends keyof TResolvedStep\n ? TChosenSteps[number] extends TFormEnabledFor[number]\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\n : {}\n : {}\n : {}\n : {}\n : keyof TFormEnabledFor extends keyof TResolvedStep\n ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<\n ValidStepKey<TSteps>\n >\n ? TChosenSteps[number] extends keyof TResolvedStep\n ? TChosenSteps[number] extends keyof TFormEnabledFor\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\n : {}\n : {}\n : {}\n : {};\n export type onInputChange<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TTargetStep extends TStepNumbers\n > = <\n CurrentStepData extends GetCurrentStep<TResolvedStep, TTargetStep>,\n Field extends keyof CurrentStepData\n >(\n field: Field,\n updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>\n ) => void;\n export interface Input<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TAdditionalCtx extends Record<string, unknown>,\n TStepNumber extends HelperFnChosenSteps.extractStepNumber<\n TResolvedStep,\n TSteps,\n TChosenSteps\n > = HelperFnChosenSteps.extractStepNumber<\n TResolvedStep,\n TSteps,\n TChosenSteps\n >\n > extends HelperFnInputBase<\n TResolvedStep,\n TSteps,\n TChosenSteps,\n never,\n TAdditionalCtx\n > {\n /**\n * A useful wrapper around `update` to update the specific field.\n */\n onInputChange: TStepNumber extends TSteps\n ? UpdateFn.stepSpecific<TResolvedStep, TSteps, ValidStepKey<TStepNumber>>\n : never;\n // onInputChange: <\n // CurrentStepData extends GetCurrentStep<\n // TResolvedStep,\n // // @ts-ignore Type checking works properly, type doesn't match\n // HelperFnChosenSteps.extractStepNumber<\n // TResolvedStep,\n // TSteps,\n // TChosenSteps\n // >\n // >,\n // Field extends keyof CurrentStepData\n // >(\n // field: Field,\n // updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>\n // ) => void;\n Field: Field.component<\n TResolvedStep,\n TSteps,\n // @ts-ignore Type checking works properly, type doesn't match\n HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps>\n >;\n }\n\n export type callback<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TProps,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TAdditionalInput extends object,\n TAdditionalCtx extends Record<string, unknown>\n > = CreateComponent<\n Expand<\n Input<TResolvedStep, TSteps, TChosenSteps, TAdditionalCtx> &\n formComponent<\n TResolvedStep,\n TSteps,\n TChosenSteps,\n TFormAlias,\n TFormProps,\n TFormEnabledFor\n > &\n TAdditionalInput\n >,\n TProps\n >;\n export const DEFAULT_FORM_INSTANCE_ALIAS = 'form';\n export type defaultFormInstanceAlias = typeof DEFAULT_FORM_INSTANCE_ALIAS;\n export type formInstanceOptions<\n TAlias extends string,\n TRenderInput,\n TReturn\n > = {\n /**\n * The name of the return value of the `render` method.\n */\n alias?: TAlias;\n /**\n * A function that renders/creates the form instance. This function will be called\n * at the top level of the component, ensuring hooks are called in a valid React context.\n *\n * @param input - The input object containing context and default values\n * @returns The form instance (typically from a hook like `useForm`)\n *\n * @example\n * ```tsx\n * useFormInstance: {\n * render({ defaultValues }) {\n * return useForm({\n * defaultValues,\n * });\n * },\n * }\n * ```\n *\n * **Verification**: The hook call is automatically verified:\n * - Errors are caught and reported with helpful messages\n * - In development, hook calls are logged to console.debug\n * - The hook must be called at the component top level (enforced by the framework)\n */\n render: CreateFunction<[input: TRenderInput], TReturn>;\n };\n export type options<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TFormInstanceAlias extends string,\n TFormInstance,\n TCtx\n > = {\n /**\n * If set to `true`, you'll be able to open the {@linkcode console} to view logs.\n */\n debug?: boolean;\n useFormInstance?: formInstanceOptions<\n TFormInstanceAlias,\n HelperFnInputBase<TResolvedStep, TSteps, TTargetStep> & {\n /**\n * An object containing all the default values for the current step.\n */\n defaultValues: Expand<\n ExtractedDefaultValues<TResolvedStep, TSteps, TTargetStep>\n >;\n },\n TFormInstance\n >;\n /**\n * A function to select the data that will be available in the `fn`'s ctx.\n * @param input The available input to create the context with.\n * @returns The created ctx.\n */\n ctxData?: (\n input: HelperFnInputBase<\n TResolvedStep,\n TSteps,\n 'all',\n HelperFnChosenSteps.resolve<TResolvedStep, TSteps, TTargetStep>\n >\n ) => TCtx;\n };\n}\n\nexport type CreateStepSpecificComponentCallback<\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TProps,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TAdditionalInput extends object = {},\n TAdditionalCtx extends Record<string, unknown> = {}\n> = StepSpecificComponent.callback<\n TResolvedStep,\n TSteps,\n TChosenSteps,\n TProps,\n TFormAlias,\n TFormProps,\n TFormEnabledFor,\n TAdditionalInput,\n TAdditionalCtx\n>;\n\nexport type ExtractedDefaultValues<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TExtractedStepNumber extends number = HelperFnChosenSteps.extractStepNumber<\n TResolvedStep,\n TSteps,\n TTargetStep\n >,\n TFields extends GetFieldsForStep<\n TResolvedStep,\n ValidStepKey<TExtractedStepNumber>\n > = GetFieldsForStep<TResolvedStep, ValidStepKey<TExtractedStepNumber>>\n> = { [field in keyof TFields]: TFields[field]['defaultValue'] };\nexport interface StepSpecificCreateComponentFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TFormAlias extends string,\n TFormProps extends object,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>\n> {\n /**\n * A utility function to easily create a component for the current step.\n * @param fn The callback function where the component is defined.\n */\n <props = undefined>(\n fn: CreateStepSpecificComponentCallback<\n TResolvedStep,\n TSteps,\n TTargetStep,\n props,\n TFormAlias,\n TFormProps,\n TFormEnabledFor\n >\n ): CreatedMultiStepFormComponent<props>;\n /**\n * A utility function to easily create a component for the current step.\n * @param options Specific config options for creating a component for the current step.\n * @param fn The callback function where the component is defined.\n * @returns The created component.\n */\n <\n formInstance,\n additionalCtx extends Record<string, unknown> = {},\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\n props = undefined\n >(\n options: StepSpecificComponent.options<\n TResolvedStep,\n TSteps,\n TTargetStep,\n formInstanceAlias,\n formInstance,\n additionalCtx\n >,\n fn: CreateStepSpecificComponentCallback<\n TResolvedStep,\n TSteps,\n TTargetStep,\n props,\n TFormAlias,\n TFormProps,\n TFormEnabledFor,\n { [_ in formInstanceAlias]: formInstance },\n additionalCtx\n >\n ): CreatedMultiStepFormComponent<props>;\n}\n\nexport type ResolvedStep<\n TStep extends Step<TDefaultCasing>,\n TDefaultCasing extends CasingType = DefaultCasing,\n TResolvedStep extends ResolvedCoreStep<\n TStep,\n TDefaultCasing\n > = ResolvedCoreStep<TStep, TDefaultCasing>,\n TFormAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n TFormProps extends object = ComponentPropsWithRef<'form'>\n> = {\n [stepKey in keyof TResolvedStep]: TResolvedStep[stepKey] &\n (stepKey extends ValidStepKey<StepNumbers<TResolvedStep>>\n ? {\n createComponent: StepSpecificCreateComponentFn<\n TResolvedStep,\n StepNumbers<TResolvedStep>,\n [stepKey],\n TFormAlias,\n TFormProps,\n TFormEnabledFor\n >;\n }\n : {});\n};\n\nexport type AnyResolvedStep = ResolvedStep<any, any, any>;\nexport interface HelperFunctions<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>\n> {\n createComponent: CreateComponentFn<TResolvedStep, TStepNumbers>;\n}\nnamespace CreateComponentImplConfig {\n export type stepSpecificConfig<\n TResolvedStep extends AnyResolvedStep,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object\n > = {\n isStepSpecific: true;\n defaultId: string;\n form?: MultiStepFormSchemaConfig.FormConfig<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n >;\n };\n\n export type nonStepSpecific = {\n isStepSpecific: false;\n };\n\n export type config<\n TResolvedStep extends AnyResolvedStep,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object\n > =\n | nonStepSpecific\n | stepSpecificConfig<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n >;\n}\n\n/**\n * Creates a default values object for the target step.\n * @param steps The steps schema.\n * @param targetStep The step to create the default values for.\n * @returns An object containing the field names and their default values.\n */\nexport function createDefaultValues<\n resolvedStep extends AnyResolvedStep,\n stepNumbers extends StepNumbers<resolvedStep>,\n targetStep extends ValidStepKey<stepNumbers>\n>(steps: resolvedStep, targetStep: targetStep) {\n invariant(\n targetStep in steps,\n `The target step ${targetStep} is not a valid step key`\n );\n\n const current = steps[targetStep as unknown as keyof resolvedStep];\n\n invariant('fields' in current, `No \"fields\" were found for ${targetStep}`);\n\n let defaultValues = {};\n\n for (const [fieldName, fieldValues] of Object.entries(\n current.fields as Record<string, Record<string, unknown>>\n )) {\n defaultValues = {\n ...defaultValues,\n [fieldName]: fieldValues.defaultValue,\n };\n }\n\n return defaultValues as Expand<\n ExtractedDefaultValues<resolvedStep, stepNumbers, [targetStep]>\n >;\n}\nexport class MultiStepFormStepSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n storageKey extends string = DefaultStorageKey,\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n formProps extends object = ComponentPropsWithRef<'form'>,\n core extends ResolvedCoreStep<step, casing> = ResolvedCoreStep<\n step,\n casing\n >,\n resolvedStep extends ResolvedStep<\n step,\n casing,\n core,\n formAlias,\n formEnabledFor,\n formProps\n > = ResolvedStep<step, casing, core, formAlias, formEnabledFor, formProps>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n >\n extends MultiStepFormStepSchemaBase<step, casing>\n implements HelperFunctions<resolvedStep, stepNumbers>\n{\n // @ts-ignore type doesn't match `MultiStepFormSchemaBase.value`\n value: resolvedStep;\n readonly #internal: MultiStepFormStepSchemaInternal<\n resolvedStep,\n stepNumbers\n >;\n\n constructor(\n config: MultiStepFormSchemaStepConfig<\n step,\n Constrain<casing, CasingType>,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >\n ) {\n const { form, ...rest } = config;\n\n super(rest as never);\n\n this.value = createStep(this.original);\n\n this.#internal = new MultiStepFormStepSchemaInternal<\n resolvedStep,\n stepNumbers\n >({\n getValue: () => this.value,\n setValue: (next) => this.handlePostUpdate(next as never)\n });\n\n // this.value = this.#internal.enrichValues(resolvedValues);\n this.sync()\n this.value = this.#internal.enrichValues(this.value, (step) => {\n const key = `step${step as stepNumbers}`;\n const stepData = [key] as HelperFnChosenSteps.tupleNotation<\n ValidStepKey<stepNumbers>\n >;\n const id = form?.id ?? key;\n const ctx = createCtx<\n resolvedStep,\n stepNumbers,\n HelperFnChosenSteps.tupleNotation<ValidStepKey<stepNumbers>>\n >(this.value, stepData);\n\n return {\n createComponent: this.createStepSpecificComponentFactory(\n stepData,\n {\n isStepSpecific: true,\n defaultId: id,\n form: form as never,\n },\n ctx\n ),\n };\n });\n }\n\n private createFormComponent(\n form: Omit<\n MultiStepFormSchemaConfig.FormConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >,\n 'alias'\n >,\n defaultId: string\n ) {\n const { render, enabledForSteps = 'all', id = defaultId } = form;\n\n const ctx = {\n id,\n steps: createCtx(this.value, enabledForSteps as never),\n };\n\n return (props: formProps) => render(ctx, props);\n }\n\n private createStepSpecificComponentImpl<\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\n >(\n stepData: chosenStep,\n config: CreateComponentImplConfig.stepSpecificConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >,\n input: HelperFnInputBase<resolvedStep, stepNumbers, chosenStep>,\n extraInput = {}\n ) {\n return <props>(fn: Function) =>\n ((props: props) => {\n // Call hook functions from extraInput at the top level of the component\n // This ensures hooks are called in a valid React context (before any conditionals)\n const hookResults: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(extraInput)) {\n if (typeof value === 'function') {\n try {\n const result = value();\n // Verify the hook was actually called and returned a value\n // (hooks should always return something, even if it's undefined)\n hookResults[key] = result;\n\n // In development, we can add additional verification here\n // Log hook calls for debugging (can be disabled in production by removing console.debug)\n if (typeof console !== 'undefined' && console.debug) {\n console.debug(\n `[multi-step-form] Hook \"${key}\" called successfully`,\n { result: result === undefined ? 'defined' : 'undefined' }\n );\n }\n } catch (error) {\n // Provide helpful error message if hook throws\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n\n throw new Error(\n `[multi-step-form] Error calling hook \"${key}\" in useFormInstance.render: ${errorMessage}\\n\\n` +\n `This usually means:\\n` +\n `1. The hook is being called outside of a React component\\n` +\n `2. The hook has invalid dependencies or configuration\\n` +\n `3. There's an error in your hook implementation\\n\\n` +\n `Original error: ${errorMessage}`,\n { cause: error }\n );\n }\n } else {\n hookResults[key] = value;\n }\n }\n\n const { defaultId, form } = config;\n const { ctx } = input;\n\n // Safe cast here since the step specific `createComponent` will always have\n // `stepData` as a tuple\n const [step] =\n stepData as HelperFnChosenSteps.tupleNotation<`step${stepNumbers}`>;\n\n invariant(\n this.steps.isValidStepKey(step),\n `[createComponent]: the target step ${step} is invalid. Note, this error shouldn't appear as the target step should always be valid. If you see this error, please open an issue.`\n );\n\n const stepNumber = Number.parseInt(step.replace('step', ''));\n\n invariant(\n !Number.isNaN(stepNumber),\n `[${step}:\"createComponent\"]: an error occurred while extracting the number`\n );\n const current = this.value[step as keyof resolvedStep];\n\n // These checks are mostly for type safety. `current` should _always_ be in the proper format.\n // On the off chance that it's not, we have the checks here to help, but these checks are basically\n // just for type safety.\n invariant(\n 'fields' in current,\n `[${step}:createComponent]: unable to find the \"fields\" for the current step`\n );\n invariant(\n typeof current.fields === 'object',\n `[${step}:createComponent]: the \"fields\" property must be an object, was ${typeof current.fields}`\n );\n\n const Field = createField((name) => {\n invariant(typeof name === 'string', () => {\n const formatter = new Intl.ListFormat('en', {\n style: 'long',\n type: 'disjunction',\n });\n\n return `[${step}:Field]: the \"name\" prop must be a string and a valid field for ${step}. Available fields include ${formatter.format(\n Object.keys(current.fields as Record<string, unknown>)\n )}`;\n });\n invariant(\n name in (current.fields as object),\n `[${step}:Field]: the field \"${name}\" doesn't exist for the current step`\n );\n\n invariant(\n 'update' in current,\n `[${step}:Field]: No \"update\" function was found`\n );\n\n const { fields, update } = current;\n const { defaultValue, label, nameTransformCasing, type } = (\n fields as AnyStepField\n )[name];\n\n return {\n defaultValue,\n label,\n nameTransformCasing,\n type,\n name,\n onInputChange: (value: unknown) =>\n // TODO remove type assertions\n (\n update as UpdateFn.stepSpecific<\n resolvedStep,\n stepNumbers,\n ValidStepKey<stepNumbers>\n >\n )({\n fields: [`fields.${name}.defaultValue`] as never,\n updater: value as never,\n }),\n };\n });\n\n let fnInput = {\n ctx,\n onInputChange: this.#internal.createStepUpdaterFn(step),\n Field,\n ...hookResults,\n };\n\n if (form) {\n const {\n alias = MultiStepFormSchemaConfig.DEFAULT_FORM_ALIAS,\n ...rest\n } = form;\n const enabledFor = rest.enabledForSteps ?? 'all';\n\n if (\n MultiStepFormSchemaConfig.isFormAvailable(\n stepData as never,\n enabledFor as never\n )\n ) {\n fnInput = {\n ...fnInput,\n [alias]: this.createFormComponent(rest, defaultId),\n };\n }\n\n return fn(fnInput, props);\n }\n\n return fn(\n {\n ...fnInput,\n [MultiStepFormSchemaConfig.DEFAULT_FORM_ALIAS]:\n MultiStepFormSchemaConfig.createDefaultForm(defaultId),\n },\n props\n );\n }) as CreatedMultiStepFormComponent<props>;\n }\n\n private createStepSpecificComponentFactory<\n chosenStep extends HelperFnChosenSteps.tupleNotation<\n ValidStepKey<stepNumbers>\n >\n >(\n stepData: chosenStep,\n config: CreateComponentImplConfig.stepSpecificConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >,\n ctx: HelperFnCtx<resolvedStep, stepNumbers, chosenStep>\n ): StepSpecificCreateComponentFn<\n resolvedStep,\n stepNumbers,\n chosenStep,\n formAlias,\n formProps,\n formEnabledFor\n > {\n const createStepSpecificComponentImpl =\n this.createStepSpecificComponentImpl.bind(this);\n const createDefaultValues = this.createDefaultValues.bind(this);\n debugger;\n // Not exactly sure why `this.value` could be undefined, but it can be so\n // we fallback to the internal value\n const resolvedValues = this.value;\n const targetStep = stepData[0];\n const update = this.#internal\n .createStepUpdaterFn(targetStep)\n .bind(this.#internal) as never;\n\n function impl<props = undefined>(\n fn: CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor\n >\n ): CreatedMultiStepFormComponent<props>;\n function impl<\n formInstance,\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\n props = undefined,\n additionalCtx = {}\n >(\n options: StepSpecificComponent.options<\n resolvedStep,\n stepNumbers,\n chosenStep,\n formInstanceAlias,\n formInstance,\n additionalCtx\n >,\n fn: CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor,\n { [_ in formInstanceAlias]: formInstance }\n >\n ): CreatedMultiStepFormComponent<props>;\n function impl<\n formInstance,\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\n props = undefined,\n additionalCtx = {}\n >(\n optionsOrFn:\n | StepSpecificComponent.options<\n resolvedStep,\n stepNumbers,\n chosenStep,\n formInstanceAlias,\n formInstance,\n additionalCtx\n >\n | CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor\n >,\n fn?: CreateStepSpecificComponentCallback<\n resolvedStep,\n stepNumbers,\n chosenStep,\n props,\n formAlias,\n formProps,\n formEnabledFor,\n { [_ in formInstanceAlias]: formInstance }\n >\n ) {\n function createResolvedCtx(additionalCtx: unknown) {\n return (\n additionalCtx ? { ctx: { ...ctx, ...additionalCtx } } : { ctx }\n ) as HelperFnInputBase<resolvedStep, stepNumbers, chosenStep>;\n }\n\n function createStepSpecificComponent() {\n invariant(\n typeof optionsOrFn === 'function',\n 'The first argument must be a function'\n );\n\n return createStepSpecificComponentImpl(\n stepData,\n config,\n createResolvedCtx(undefined)\n )(optionsOrFn);\n }\n\n if (typeof optionsOrFn === 'object') {\n const { useFormInstance, ctxData, debug } = optionsOrFn;\n const logger = new MultiStepFormLogger({\n debug,\n prefix(prefix) {\n return `${prefix}-${targetStep}-createComponent`;\n },\n });\n\n logger.info('First argument is an object');\n\n const { [targetStep]: _, ...values } = resolvedValues;\n\n invariant(\n typeof fn === 'function',\n 'The second argument must be a function'\n );\n\n if (useFormInstance) {\n const {\n render,\n alias = StepSpecificComponent.DEFAULT_FORM_INSTANCE_ALIAS,\n } = useFormInstance;\n\n // Safe cast here since the step specific `createComponent` will always have\n // `stepData` as a tuple\n const [step] =\n stepData as HelperFnChosenSteps.tupleNotation<`step${stepNumbers}`>;\n\n // Store the render function and inputs to call it at component level\n // This ensures hooks are called in a valid React context\n const defaultValues = createDefaultValues(step) as never;\n const resolvedCtx = ctxData\n ? {\n ...ctx,\n ...ctxData({ ctx: values } as never),\n }\n : ctx;\n const renderInput = { ctx: resolvedCtx, defaultValues };\n\n return createStepSpecificComponentImpl(\n stepData,\n config,\n resolvedCtx as never,\n {\n [alias]: () => render(renderInput as never),\n }\n )(fn);\n }\n\n if (ctxData) {\n logger.info('Option \"ctxData\" is defined');\n invariant(\n typeof ctxData === 'function',\n 'Option \"ctxData\" must be a function'\n );\n\n const additionalCtx = ctxData({ ctx: values } as never);\n\n logger.info(\n `Addition context is: ${JSON.stringify(additionalCtx, null, 2)}`\n );\n\n const resolvedCtx = {\n ...ctx,\n ...additionalCtx,\n };\n\n logger.info(\n `Resolved context is: ${JSON.stringify(resolvedCtx, null, 2)}`\n );\n\n return createStepSpecificComponentImpl(stepData, config, {\n ctx: resolvedCtx as never,\n update,\n })(fn);\n }\n\n // Empty options object. Can throw here 🤷‍♂️\n // Maybe add \"global\" - top level config - option to tune fine grained errors.\n return createStepSpecificComponent();\n }\n\n return createStepSpecificComponent();\n }\n\n return impl;\n }\n\n /**\n * A helper function to create a component for a specific step.\n * @param options The options for creating the step specific component.\n * @param fn A callback that is used for accessing the target step's data and defining\n * any props that the component should have. This function must return a valid `JSX` element.\n * @returns The created component for the step.\n */\n createComponent<\n chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\n props = undefined\n >(\n options: CreateHelperFunctionOptionsBase<\n resolvedStep,\n stepNumbers,\n chosenSteps\n >,\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenSteps, props>\n ) {\n const { stepData } = options;\n const ctx = createCtx<resolvedStep, stepNumbers, chosenSteps>(\n this.value,\n stepData\n ) as never;\n\n return ((props?: props) =>\n fn(ctx, props as any)) as CreatedMultiStepFormComponent<props>;\n }\n\n createDefaultValues<targetStep extends ValidStepKey<stepNumbers>>(\n targetStep: targetStep\n ) {\n return createDefaultValues(this.value, targetStep);\n }\n}\n","import {\n type CasingType,\n type Constrain,\n createCtx,\n type CreateHelperFunctionOptionsBase,\n DEFAULT_CASING,\n type DefaultCasing,\n type DefaultStorageKey,\n type HelperFnChosenSteps,\n type MultiStepFormSchemaOptions as MultiStepFormSchemaBaseOptions,\n MultiStepFormSchema as MultiStepFormSchemaCore,\n type ResolvedStep as ResolvedStepCore,\n type Step,\n type StepNumbers,\n} from '@jfdevelops/multi-step-form';\nimport type { ComponentPropsWithRef } from 'react';\nimport { MultiStepFormSchemaConfig } from './form-config';\nimport {\n type CreateComponentCallback,\n type CreatedMultiStepFormComponent,\n type HelperFunctions,\n MultiStepFormStepSchema,\n type ResolvedStep,\n} from './step-schema';\nimport { MultiStepFormStepSchemaInternal } from '@jfdevelops/multi-step-form/_internal';\n\n// export type AnyMultiStepFormSchema = MultiStepFormSchema<any, any, any>;\nexport type AnyMultiStepFormSchema = { [x: string]: any };\n\n// Helper inference types for `AnyMultiStepFormSchema`\nexport namespace MultiStepFormSchema {\n /**\n * Infer the resolved step from a {@linkcode MultiStepFormSchema}.\n */\n export type resolvedStep<T extends AnyMultiStepFormSchema> =\n T['stepSchema']['value'];\n /**\n * Infer the {@linkcode MultiStepFormSchema}'s step numbers.\n */\n export type stepNumbers<T extends AnyMultiStepFormSchema> = StepNumbers<\n resolvedStep<T>\n >;\n /**\n * Get the data for a specific step from a {@linkcode MultiStepFormSchema}.\n */\n export type getData<\n T extends AnyMultiStepFormSchema,\n TTarget extends keyof resolvedStep<T>\n > = resolvedStep<T>[TTarget];\n}\n\nexport interface MultiStepFormSchemaOptions<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string,\n TFormAlias extends string,\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\n TFormProps extends object,\n TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<\n TStep,\n TCasing\n >\n> extends MultiStepFormSchemaBaseOptions<TStep, TCasing, TStorageKey>,\n MultiStepFormSchemaConfig.Form<\n TResolvedStep,\n TFormAlias,\n TFormEnabledFor,\n TFormProps\n > {}\n\nexport class MultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n storageKey extends string = DefaultStorageKey,\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n formProps extends object = ComponentPropsWithRef<'form'>,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<\n step,\n casing\n >,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n >\n extends MultiStepFormSchemaCore<\n step,\n casing,\n ResolvedStepCore<step, casing>,\n StepNumbers<ResolvedStepCore<step, casing>>,\n storageKey\n >\n implements HelperFunctions<resolvedStep, stepNumbers>\n{\n stepSchema: MultiStepFormStepSchema<\n step,\n casing,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >;\n readonly #internal: MultiStepFormStepSchemaInternal<\n resolvedStep,\n stepNumbers\n >;\n\n constructor(\n config: MultiStepFormSchemaOptions<\n step,\n Constrain<casing, CasingType>,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >\n ) {\n const { nameTransformCasing = DEFAULT_CASING, storage, ...rest } = config;\n\n super({\n nameTransformCasing,\n storage,\n ...rest,\n });\n\n this.stepSchema = new MultiStepFormStepSchema<\n step,\n casing,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >({\n nameTransformCasing,\n ...rest,\n });\n this.#internal = new MultiStepFormStepSchemaInternal<\n resolvedStep,\n stepNumbers\n >({\n getValue: () => this.stepSchema.value as never,\n setValue: (value) => {\n this.stepSchema.value = { ...value } as never;\n this.storage.add(value);\n this.notify();\n },\n });\n }\n\n createComponent<\n chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\n props = undefined\n >(\n options: CreateHelperFunctionOptionsBase<\n resolvedStep,\n stepNumbers,\n chosenSteps\n >,\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenSteps, props>\n ): CreatedMultiStepFormComponent<props> {\n const { stepData } = options;\n const ctx = createCtx<resolvedStep, stepNumbers, chosenSteps>(\n this.stepSchema.value as never,\n stepData\n ) as never;\n\n return ((props?: props) =>\n fn(\n {\n ctx,\n update: this.#internal.createHelperFnInputUpdate(stepData),\n },\n props as any\n )) as any;\n }\n}\n\nexport function createMultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n storageKey extends string = DefaultStorageKey,\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\n formProps extends object = ComponentPropsWithRef<'form'>,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n>(\n options: MultiStepFormSchemaOptions<\n step,\n Constrain<casing, CasingType>,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps\n >\n) {\n return new MultiStepFormSchema<\n step,\n casing,\n storageKey,\n formAlias,\n formEnabledFor,\n formProps,\n resolvedStep,\n stepNumbers\n >(options);\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import type { AnyMultiStepFormSchema, MultiStepFormSchema } from '@/schema';\nimport { invariant, VALIDATED_STEP_REGEX } from '@jfdevelops/multi-step-form';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\n\nexport type UseMultiStepFormDataOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTarget extends keyof MultiStepFormSchema.resolvedStep<TSchema> = keyof MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n targetStep: TTarget;\n};\nexport type UseMultiStepFormData<\n // step extends Step<casing>,\n // casing extends CasingType,\n // storageKey extends string,\n // resolvedStep extends ResolvedStep<step, casing>,\n // schema extends MultiStepFormSchema<\n // step,\n // casing,\n // storageKey\n // > = MultiStepFormSchema<step, casing, storageKey>,\n TSchema extends AnyMultiStepFormSchema,\n TResolvedStep extends MultiStepFormSchema.resolvedStep<TSchema> = MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n /**\n * Returns the entire {@linkcode MultiStepFormSchema instance}.\n */\n (): TSchema;\n /**\n * Returns the data for the target step.\n * @param stepNumber The step number to return.\n * @throws {TypeError} If `options.stepNumber` is invalid.\n */\n <targetStep extends keyof TResolvedStep>(\n options: UseMultiStepFormDataOptions<TSchema, targetStep>\n ): MultiStepFormSchema.getData<TSchema, targetStep>;\n /**\n * Returns the specified data from the {@linkcode MultiStepFormSchema} instance via the callback's return.\n */\n <data>(selector: (schema: TSchema) => data): data;\n};\n\nexport function throwIfInvalidStepNumber<\n // step extends Step<casing>,\n // casing extends CasingType = DefaultCasing,\n // storageKey extends string = DefaultStorageKey,\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n schema extends AnyMultiStepFormSchema\n>(schema: schema, targetStep: unknown) {\n invariant(\n typeof targetStep === 'string',\n `The target step must be a string, was ${typeof targetStep}`\n );\n\n const { as, isValidStepNumber } = schema.stepSchema.steps;\n const formatter = new Intl.ListFormat('en', {\n type: 'disjunction',\n style: 'long',\n });\n const formattedStepNumbersList = formatter.format(as('array.string.untyped'));\n\n invariant(\n VALIDATED_STEP_REGEX.test(targetStep),\n `The target step must match the following format: \"step{number}\". Available steps are ${formattedStepNumbersList}`\n );\n\n const stepNumber = Number.parseInt(targetStep.replace('step', ''));\n\n invariant(\n isValidStepNumber(stepNumber),\n `The step number \"${stepNumber}\" is not a valid step number. Valid step numbers include ${formattedStepNumbersList}`,\n TypeError\n );\n\n return stepNumber as MultiStepFormSchema.stepNumbers<schema>;\n}\n\nexport function createMultiStepFormDataHook<\n // step extends Step<casing>,\n // casing extends CasingType = DefaultCasing,\n // storageKey extends string = DefaultStorageKey,\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n schema extends AnyMultiStepFormSchema\n>(schema: schema): UseMultiStepFormData<schema> {\n function useMultiStepFormData(\n optionsOrSelector?:\n | UseMultiStepFormDataOptions<schema>\n | ((data: schema) => unknown)\n ) {\n return useSyncExternalStoreWithSelector(\n schema.subscribe,\n () => schema.getSnapshot(),\n () => schema.getSnapshot(),\n (snapshot) => {\n if (typeof optionsOrSelector === 'object') {\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\n const stepNumber = throwIfInvalidStepNumber(\n snapshot,\n optionsOrSelector.targetStep\n );\n\n return snapshot.stepSchema.get({ step: stepNumber as never }).data;\n }\n\n if (typeof optionsOrSelector === 'function') {\n return optionsOrSelector(snapshot);\n }\n\n return snapshot;\n }\n );\n }\n\n return useMultiStepFormData as any;\n}\n\nfunction useMultiStepFormData<schema extends AnyMultiStepFormSchema>(\n schema: schema\n): schema;\nfunction useMultiStepFormData<\n schema extends AnyMultiStepFormSchema,\n targetStep extends keyof MultiStepFormSchema.resolvedStep<schema>\n>(\n schema: schema,\n options: UseMultiStepFormDataOptions<schema, targetStep>\n): MultiStepFormSchema.getData<schema, targetStep>;\nfunction useMultiStepFormData<schema extends AnyMultiStepFormSchema, data>(\n schema: schema,\n selector: (schema: schema) => data\n): data;\nfunction useMultiStepFormData<\n // step extends Step<casing>,\n // casing extends CasingType = DefaultCasing,\n // storageKey extends string = DefaultStorageKey,\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\n schema extends AnyMultiStepFormSchema\n>(\n schema: schema,\n optionsOrSelector?:\n | UseMultiStepFormDataOptions<schema>\n | ((data: schema) => unknown)\n) {\n const hook = createMultiStepFormDataHook(schema);\n\n if (typeof optionsOrSelector === 'object') {\n return hook(optionsOrSelector);\n }\n\n if (typeof optionsOrSelector === 'function') {\n return hook(optionsOrSelector);\n }\n\n return hook();\n}\n\nexport { useMultiStepFormData };\n","import { MultiStepFormStepSchema } from '@jfdevelops/multi-step-form';\nimport { type ComponentProps, type ReactNode } from 'react';\nimport {\n createMultiStepFormDataHook,\n throwIfInvalidStepNumber,\n UseMultiStepFormData,\n} from './hooks/use-multi-step-form-data';\nimport { MultiStepFormSchema, type AnyMultiStepFormSchema } from './schema';\nimport type {\n CreatedMultiStepFormComponent,\n CreateFunction,\n} from './step-schema';\n\ntype BaseOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n /**\n * The step to return data from.\n */\n targetStep: TTargetStep;\n};\nexport type UseCurrentStepOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\n props,\n isDataGuaranteed extends boolean = false\n> = BaseOptions<TSchema, TTargetStep> & {\n /**\n * Determines if the result should follow \"strictness\".\n * The result will change based on the value for this option.\n *\n * - `true`: `data` is **defined** and `hasData` isn't available.\n * - `false`: `data` _can be_ `undefined`, but the `hasData` property is available\n * to help with type narrowing.\n *\n * @default false\n * @example\n * ### `true`\n * ```tsx\n * function MyComponent() {\n * const { data, NoCurrentData } = useCurrentStep({\n * stepNumber: 1,\n * isDataGuaranteed: true,\n * })\n *\n * // Notice how `NoCurrentData` is still available\n * // Do things with `data` here\n * }\n * ```\n *\n * ### `false` - The default\n * ```tsx\n * function MyComponent() {\n * const { data, NoCurrentData, hasData } = useCurrentStep({\n * stepNumber: 1,\n * })\n *\n * if (!hasData) {\n * return <NoCurrentData />\n * }\n *\n * // Do things with `data` here\n * }\n * ```\n */\n isDataGuaranteed?: isDataGuaranteed;\n /**\n * An optional transformation function to provide a custom not found message.\n */\n notFoundMessage?: CreateFunction<\n [ctx: BaseOptions<TSchema, TTargetStep>, props: props],\n ReactNode\n >;\n};\nexport interface UseCurrentStepBaseResult<TData = unknown, TProps = undefined> {\n /**\n * The current step's data.\n */\n data: TData | undefined;\n /**\n * Boolean indicating if the current step has data.\n */\n hasData: boolean;\n /**\n * Component to render some sort of error if `data` isn't defined.\n */\n NoCurrentData: CreatedMultiStepFormComponent<\n TProps extends undefined ? Omit<ComponentProps<'div'>, 'children'> : TProps\n >;\n}\nexport interface UseCurrentStepErrorResult<TData = unknown, TProps = undefined>\n extends UseCurrentStepBaseResult<TData, TProps> {\n data: undefined;\n hasData: false;\n}\nexport interface UseCurrentStepSuccessResult<\n TData = unknown,\n TProps = undefined\n> extends UseCurrentStepBaseResult<TData, TProps> {\n data: TData;\n hasData: true;\n}\nexport type UseCurrentStepResult<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\n props,\n isDataGuaranteed extends boolean = false\n> = isDataGuaranteed extends true\n ? Omit<\n UseCurrentStepSuccessResult<\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\n props\n >,\n 'hasData'\n >\n :\n | UseCurrentStepErrorResult<\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\n props\n >\n | UseCurrentStepSuccessResult<\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\n props\n >;\nexport type UseProgressBaseOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>\n> = BaseOptions<TSchema, TTargetStep> & {\n /**\n * The total amount of steps that are in the form.\n *\n * @default schema.stepData.steps.value.length\n */\n totalSteps?: number;\n /**\n * The highest value the progress indicator should go.\n *\n * @default 100\n */\n maxProgressValue?: number;\n};\nexport type UseProgressOptions<\n TSchema extends AnyMultiStepFormSchema,\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\n props\n> = UseProgressBaseOptions<TSchema, TTargetStep> & {\n /**\n * An optional transformation function to provide a custom progress text.\n */\n progressTextTransformer?: CreateFunction<\n [ctx: Required<UseProgressBaseOptions<TSchema, TTargetStep>>, props],\n ReactNode\n >;\n};\nexport type UseProgressResult<props> = {\n /**\n * The value of the progress indicator.\n */\n value: number;\n /**\n * The highest value the progress indicator can be.\n *\n * @default 100\n */\n maxProgressValue: number;\n ProgressText: CreatedMultiStepFormComponent<\n props extends undefined ? Omit<ComponentProps<'div'>, 'children'> : props\n >;\n};\nexport type CreateHOC<TContext, TProps> = (\n ctx: TContext,\n props: TProps\n) => CreatedMultiStepFormComponent<TProps>;\n\nexport type MultiStepFormContextResult<\n TSchema extends AnyMultiStepFormSchema,\n TResolvedStep extends MultiStepFormSchema.resolvedStep<TSchema> = MultiStepFormSchema.resolvedStep<TSchema>\n> = {\n // MultiStepFormContext: schema;\n // MultiStepFormProvider: (props: { children: ReactNode }) => JSX.Element;\n // useMultiStepFormSchema: schema;\n useMultiStepFormData: UseMultiStepFormData<TSchema>;\n /**\n * Gets the data for the specified step.\n *\n * @returns The data for the given step number.\n */\n useCurrentStepData: <\n targetStep extends keyof TResolvedStep,\n props = undefined,\n isDataGuaranteed extends boolean = false\n >(\n options: UseCurrentStepOptions<TSchema, targetStep, props, isDataGuaranteed>\n ) => UseCurrentStepResult<TSchema, targetStep, props, isDataGuaranteed>;\n useProgress: <targetStep extends keyof TResolvedStep, props = undefined>(\n options: UseProgressOptions<TSchema, targetStep, props>\n ) => UseProgressResult<props>;\n /**\n * A hook that can be used to check if the form can be restarted. If no {@linkcode cb}\n * is provided, the return value will be dictated by if there is an object stored in\n * {@link MultiStepFormSchema#storage}.\n * @param cb A callback function to provide custom logic for if the form can restart.\n * @returns A boolean indicating if the form can restart.\n */\n useCanRestartForm: (cb?: (canRestart: boolean) => boolean) => boolean;\n /**\n * A HOC for creating a custom progress text for `useProgress`.\n * @param options Options for creating the HOC.\n * @param cb The callback function for creating the HOC.\n * @returns A HOC for the `progressTextTransformer` option of the `useProgress` hook.\n */\n withProgressText: <targetStep extends keyof TResolvedStep, props = undefined>(\n options: UseProgressBaseOptions<TSchema, targetStep>,\n cb: (\n ctx: Required<UseProgressBaseOptions<TSchema, targetStep>>,\n props: props\n ) => ReactNode\n ) => CreatedMultiStepFormComponent<props>;\n /**\n * A HOC for creating a custom not found component for when a step's data is `undefined`.\n * @param options Options for creating the HOC.\n * @param cb The callback function for creating the HOC.\n * @returns A HOC for the `notFoundMessage` option of the `useCurrentStep` hook.\n */\n withNoStepDataFound: <\n targetStep extends keyof TResolvedStep,\n props = undefined\n >(\n options: BaseOptions<TSchema, targetStep>,\n cb: (ctx: BaseOptions<TSchema, targetStep>, props: props) => ReactNode\n ) => CreatedMultiStepFormComponent<props>;\n};\n\nfunction createComponent<ctx>(ctx: ctx) {\n return function <props>(fn: CreateFunction<[ctx, props], ReactNode>) {\n return ((props: props) =>\n fn(ctx, props)) as CreatedMultiStepFormComponent<props>;\n };\n}\n\n/**\n * Create multi step form context with a {@linkcode MultiStepFormSchema} instance.\n * @param schema The {@linkcode MultiStepFormSchema} instance.\n */\n// export function createMultiStepFormContext<\n// schema extends AnyMultiStepFormSchema\n// >(schema: schema): MultiStepFormContextResult<schema>;\n// /**\n// * Create multi step form context without a {@linkcode MultiStepFormSchema} instance.\n// *\n// * The {@linkcode MultiStepFormSchema} instance is returned.\n// * @param options Options to create a new instance of {@linkcode MultiStepFormSchema}.\n// */\n// export function createMultiStepFormContext<\n// step extends Step<casing>,\n// casing extends CasingType = DefaultCasing,\n// storageKey extends string = DefaultStorageKey,\n// resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n// stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\n// schema extends MultiStepFormSchema<\n// step,\n// casing,\n// storageKey,\n// resolvedStep,\n// stepNumbers\n// > = MultiStepFormSchema<step, casing, storageKey, resolvedStep, stepNumbers>\n// >(\n// options: MultiStepFormSchemaConfig<\n// step,\n// Constrain<casing, CasingType>,\n// storageKey\n// >\n// ): MultiStepFormContextResult<schema> & {\n// schema: MultiStepFormSchema<step, casing, storageKey>;\n// };\nexport function createMultiStepFormContext<\n schema extends AnyMultiStepFormSchema,\n resolvedStep extends MultiStepFormSchema.resolvedStep<schema> = MultiStepFormSchema.resolvedStep<schema>\n>(schema: schema): MultiStepFormContextResult<schema> {\n // const isInstance = schemaOrOptions instanceof MultiStepFormSchema;\n // const schema: schema = isInstance\n // ? schemaOrOptions\n // : createMultiStepFormSchema(schemaOrOptions);\n // const Context = createContext(schema);\n\n // function Provider({ children }: { children: ReactNode }) {\n // const [observer] = useState(() => new MultiStepFormObserver({ schema }));\n\n // useEffect(() => {\n // const unmount = schema.mount();\n\n // return () => {\n // unmount();\n // observer.destroy();\n // };\n // }, [observer]);\n\n // return <Context.Provider value={observer}>{children}</Context.Provider>;\n // }\n\n // function throwIfInvalidStepNumber(\n // schema: MultiStepFormSchema<step, casing, storageKey>,\n // stepNumber: number\n // ) {\n // const formatter = new Intl.ListFormat('en', {\n // type: 'disjunction',\n // style: 'long',\n // });\n // const { as, isValidStepNumber } = schema.stepSchema.steps;\n\n // invariant(\n // isValidStepNumber(stepNumber),\n // `The step number \"${stepNumber}\" is not a valid step number. Valid step numbers include ${formatter.format(\n // as('array.string.untyped')\n // )}`,\n // TypeError\n // );\n // }\n\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\n const useMultiStepFormData = createMultiStepFormDataHook(schema);\n\n function useCurrentStepData<\n targetStep extends keyof resolvedStep,\n props = undefined,\n isDataGuaranteed extends boolean = false\n >(\n options: UseCurrentStepOptions<schema, targetStep, props, isDataGuaranteed>\n ): UseCurrentStepResult<schema, targetStep, props, isDataGuaranteed> {\n const { targetStep, notFoundMessage, isDataGuaranteed } = options;\n const data = useMultiStepFormData({\n targetStep,\n });\n const NoDataFoundComponent = notFoundMessage\n ? withNoStepDataFound({ targetStep }, notFoundMessage)\n : (props: Omit<ComponentProps<'div'>, 'children'>) => (\n <div {...props}>No data found for step {String(targetStep)}</div>\n );\n\n if (isDataGuaranteed) {\n return {\n data,\n NoCurrentData: NoDataFoundComponent as never,\n } as never;\n }\n\n if (MultiStepFormStepSchema.hasData(data)) {\n return {\n data,\n hasData: true,\n NoCurrentData: NoDataFoundComponent as never,\n } as never;\n }\n\n return {\n data: undefined,\n hasData: false,\n NoCurrentData: NoDataFoundComponent as never,\n } as never;\n }\n\n function useProgress<\n targetStep extends keyof resolvedStep,\n props = undefined\n >(\n options: UseProgressOptions<schema, targetStep, props>\n ): UseProgressResult<props> {\n const steps = useMultiStepFormData(\n (data) => data.stepSchema.steps.value.length\n );\n const {\n targetStep,\n maxProgressValue = 100,\n totalSteps = steps,\n progressTextTransformer,\n } = options;\n const currentStep = throwIfInvalidStepNumber(schema, targetStep);\n const value = (currentStep / totalSteps) * maxProgressValue;\n const ProgressText = progressTextTransformer\n ? withProgressText(\n { targetStep, maxProgressValue, totalSteps },\n progressTextTransformer\n )\n : (props: Omit<ComponentProps<'div'>, 'children'>) => (\n <div {...props}>\n Step {currentStep}/{totalSteps}\n </div>\n );\n\n return {\n value,\n maxProgressValue,\n ProgressText: ProgressText as never,\n };\n }\n\n function useCanRestartForm(cb?: CreateFunction<[boolean], boolean>) {\n const storage = useMultiStepFormData((data) => data.storage);\n const value = storage.get();\n const canRestart = Boolean(\n value && typeof value === 'object' && Object.keys(value).length > 0\n );\n\n if (cb) {\n return cb(canRestart);\n }\n\n return canRestart;\n }\n\n function withProgressText<\n targetStep extends keyof resolvedStep,\n props = undefined\n >(\n options: UseProgressBaseOptions<schema, targetStep>,\n cb: (\n ctx: Required<UseProgressBaseOptions<schema, targetStep>>,\n props: props\n ) => ReactNode\n ) {\n const steps = schema.getSnapshot().stepSchema.steps.value.length;\n const { targetStep, maxProgressValue = 100, totalSteps = steps } = options;\n\n return createComponent({ targetStep, maxProgressValue, totalSteps })(cb);\n }\n\n function withNoStepDataFound<\n targetStep extends keyof resolvedStep,\n props = undefined\n >(\n options: BaseOptions<schema, targetStep>,\n cb: (ctx: BaseOptions<schema, targetStep>, props: props) => ReactNode\n ) {\n throwIfInvalidStepNumber(schema, options.targetStep);\n\n return createComponent(options)(cb);\n }\n\n return {\n // MultiStepFormContext: Context,\n useMultiStepFormData,\n useCurrentStepData,\n useProgress,\n useCanRestartForm,\n withProgressText,\n withNoStepDataFound,\n };\n}\n"],"names":["comparePartialArray","compareArray","actualArray","formatter","errors","compareSet","printedArray","value","i","v","printErrors","mapper","defaultMapper","e","typedObjectKeys","lazy","strings","values","invariant","condition","message","error","resolvedMessage","extractNumber","input","extracted","getStep","resolvedStepValues","options","step","stepKey","data","createCtxHelper","acc","curr","stepNumber","data2","key","createCtx","stepData","validStepKeys","baseErrorMessage","ctx","comparedResults","keys","functionalUpdate","updater","DEFAULT_LOGGER_PREFIX","MultiStepFormLogger","includeTimestamp","prefix","throwOnError","wrapWith","action","delimiter","level","logLevelOptions","formattedPrefix","formattedLogLevel","formattedMessage","formatted","path","path2","getBy","obj","path3","setBy","target","current","k","normalizePaths","paths","p","q","pickBy","norm","result","createDeep","traverse","defaultExpectedFormat","t","ctor","splitPath","parts","regex","m","getTransformFunction","root","segments","node","lastFn","seg","formatExpected","rawExpected","cfg","fn","isObjectLike","deepCompare","expected","actual","basePath","mismatches","path4","maxLen","expVal","actVal","expKeys","actKeys","equalsAtPaths","formatValue","formatReason","formatMismatches","lines","printMismatches","msg","setAtImmutable","helper","idx","resolvedCurrent","clone2","next","updatedChild","clone","updateAt","sub","runStandardValidation","schema","isValidStepKey","steps","MultiStepFormStepSchemaInternal","#getValue","#setValue","getValue","setValue","targetStep","ctxData","fields","debug","logger","currentStep","updatedValue","additionalCtx","updated","stepKeys","updaterResultKeys","missingKeys","ok","currentStepDeepKeys","compareResult","chosenSteps","HelperFnChosenSteps","stepSpecificUpdateFn","validKeys","optionsOrFunction","createInputUpdateFn","resolvedCtx","currentStepKey","_","additionalProps","enriched","stepValue","HelperFnChosenSteps2","isAll","isTuple","validValues","isObject","CASING_TYPES","DEFAULT_CASING","changeCasing","type","words","w","isCasingValid","setCasingType","fallback","FIELD_TYPES","DEFAULT_FIELD_TYPE","isFieldType","WINDOW_UNDEFINED_MESSAGE","DEFAULT_STORAGE_KEY","MultiStepFormStorage","config","store","throwWhenUndefined","item","resolvedValue","Subscribable","listener","AS_TYPES","VALIDATED_STEP_REGEX","assertObjectFields","checks","checkFn","createFieldLabel","label","fieldName","casingType","createStepFields","resolvedFields","defaultCasing","validateFields","name","defaultValue","nameTransformCasing","casing","validatedFields","currentField","createStep","stepsConfig","resolvedSteps","validStepKey","title","description","#internal","storage","asType","storageValues","enrichedValues","firstStep","lastStep","rest","v2","MultiStepFormStepSchema","createField","propsCreator","Field","props","children","MultiStepFormSchemaConfig","isFormAvailable","enabledFor","createDefaultForm","id","jsx","StepSpecificComponent","createDefaultValues","defaultValues","fieldValues","MultiStepFormStepSchemaBase","form","defaultId","render","enabledForSteps","extraInput","hookResults","errorMessage","update","fnInput","alias","createStepSpecificComponentImpl","resolvedValues","impl","optionsOrFn","createResolvedCtx","createStepSpecificComponent","useFormInstance","renderInput","MultiStepFormSchema","MultiStepFormSchemaCore","createMultiStepFormSchema","React","require$$0","is","x","y","objectIs","useState","useEffect","useLayoutEffect","useDebugValue","useSyncExternalStore$2","subscribe","getSnapshot","_useState","inst","forceUpdate","checkIfSnapshotChanged","latestGetSnapshot","nextValue","useSyncExternalStore$1","shim","useSyncExternalStoreShim_production","didWarnOld18Alpha","didWarnUncachedGetSnapshot","cachedValue","useSyncExternalStoreShim_development","shimModule","require$$1","useSyncExternalStore","useRef","useMemo","withSelector_production","getServerSnapshot","selector","isEqual","instRef","memoizedSelector","nextSnapshot","hasMemo","memoizedSnapshot","currentSelection","memoizedSelection","nextSelection","maybeGetServerSnapshot","withSelector_development","withSelectorModule","throwIfInvalidStepNumber","as","isValidStepNumber","formattedStepNumbersList","createMultiStepFormDataHook","useMultiStepFormData","optionsOrSelector","useSyncExternalStoreWithSelector","snapshot","hook","createComponent","createMultiStepFormContext","useCurrentStepData","notFoundMessage","isDataGuaranteed","NoDataFoundComponent","withNoStepDataFound","jsxs","useProgress","maxProgressValue","totalSteps","progressTextTransformer","ProgressText","withProgressText","useCanRestartForm","cb","canRestart"],"mappings":"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","x_google_ignoreList":[6,7,8,9,10,11]}