@jfdevelops/react-multi-step-form 1.0.0-alpha.1 → 1.0.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +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 d(i, e, t) {\n const r = [], n = new Set(i), s = t ? t.format(i.map((a) => `${a}`)) : `[${i.join(\", \")}]`;\n for (let a = 0; a < e.length; a++) {\n const c = e[a];\n n.has(c) || r.push(\n `Extra element at index ${a}: \"${c}\" is not in ${s}`\n );\n }\n return e.some((a) => n.has(a)) || 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 b(i) {\n return i.map((e, t) => `❌ ${t + 1}. ${e}`).join(`\n`);\n}\nfunction V(i, ...e) {\n return () => String.raw({ raw: i }, ...e);\n}\nfunction u(i, e, t = Error) {\n if (!i) {\n const r = typeof e == \"function\" ? e() : V`${e}`();\n throw new t(r);\n }\n}\nfunction g(i, e) {\n const t = i[\"~standard\"].validate(e);\n if (t instanceof Promise)\n throw new TypeError(\"Schema validation must be synchronous\", {\n cause: i\n });\n if (t.issues)\n throw new Error(JSON.stringify(t.issues, null, 2));\n return t.value;\n}\nfunction m(i) {\n u(i.includes(\"step\"), \"Can't extract a valid step number since\");\n const e = i.replace(\"step\", \"\");\n return u(/^\\d+$/.test(e), `Invalid step format: \"${i}\"`), Number.parseInt(e, 10);\n}\nfunction h(i) {\n return function(e) {\n const { step: t } = e, r = `step${t}`, n = i[r];\n return { step: t, data: n };\n };\n}\nfunction T(i, e) {\n return e.reduce((t, r) => {\n const n = m(r), { data: s } = h(i)({\n step: n\n });\n for (const [o, a] of Object.entries(s))\n typeof a == \"function\" && o !== \"update\" || (s[o] = a);\n return t[r] = s, t;\n }, {});\n}\nfunction I(i, e) {\n const t = new Intl.ListFormat(\"en\", {\n style: \"long\",\n type: \"disjunction\"\n }), r = Object.keys(i), n = () => `\"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 o of r)\n s = {\n ...s,\n [o]: h(i)({\n step: m(o)\n })\n };\n return Object.fromEntries(\n r.map((o) => [\n o,\n h(i)({\n step: m(o)\n })\n ])\n );\n }\n if (Array.isArray(e))\n return u(\n e.every((s) => r.includes(s)),\n () => {\n const s = d(\n e,\n r.map((o) => m(o)),\n t\n );\n return s.status === \"error\" ? `${n()}. See errors:\n ${b(\n s.errors\n )}` : n();\n }\n ), T(\n i,\n e\n );\n if (typeof e == \"object\") {\n const s = Object.keys(e);\n return u(\n s.every((o) => r.includes(o)),\n () => {\n const o = d(\n s,\n r,\n t\n );\n return o.status === \"error\" ? `${n()}. See errors:\n ${b(\n o.errors\n )}` : n();\n }\n ), T(\n i,\n s\n );\n }\n throw new Error(`${n()} OR to \"all\"`);\n}\nfunction j(i, e) {\n return typeof i == \"function\" ? i(e) : i;\n}\nclass M {\n values;\n stepNumbers;\n constructor(e, t) {\n this.stepNumbers = t, this.values = e;\n }\n createCtxHelper(e) {\n return e.reduce((t, r) => {\n const n = m(r), { data: s } = h(this.values)({\n step: n\n });\n for (const [o, a] of Object.entries(s))\n typeof a == \"function\" && o !== \"update\" || (s[o] = a);\n return t[r] = s, t;\n }, {});\n }\n createCtx(e) {\n const t = new Intl.ListFormat(\"en\", {\n style: \"long\",\n type: \"disjunction\"\n }), r = this.stepNumbers.map(\n (s) => `step${s}`\n ), n = () => `\"stepData\" must be set to an array of available steps (${t.format(\n r\n )})`;\n if (e === \"all\")\n return this.stepNumbers.reduce((s, o) => {\n const a = `step${o}`;\n return s[a] = h(this.values)({\n step: o\n }).data, s;\n }, {});\n if (Array.isArray(e))\n return u(\n e.every(\n (s) => r.includes(s)\n ),\n () => {\n const s = d(\n e,\n this.stepNumbers,\n t\n );\n return s.status === \"error\" ? `${n()}. See errors:\n ${b(\n s.errors\n )}` : n();\n }\n ), this.createCtxHelper(e);\n if (typeof e == \"object\") {\n const s = Object.keys(e);\n return u(\n s.every((o) => r.includes(o)),\n () => {\n const o = d(\n s,\n r,\n t\n );\n return o.status === \"error\" ? `${n()}. See errors:\n ${b(\n o.errors\n )}` : n();\n }\n ), this.createCtxHelper(s);\n }\n throw new Error(`${n()} OR to \"all\"`);\n }\n createStepHelperFnImpl(e) {\n return (t, r) => {\n const n = this.createCtx(e);\n if (typeof t == \"function\")\n return () => t({ ctx: n });\n if (typeof t == \"object\")\n return (s) => \"validator\" in t ? (u(\n typeof s == \"object\",\n \"An input is expected since you provided a validator\"\n ), g(\n t.validator,\n s.data\n ), r({ ctx: n, ...s })) : r({ ctx: n });\n throw new Error(\n `The first argument must be a function or an object, (was ${typeof t})`\n );\n };\n }\n}\nclass A {\n prefix;\n includeTimestamp;\n throwOnError;\n constructor(e) {\n const { includeTimestamp: t, prefix: r, throwOnError: n } = e ?? {};\n this.prefix = r ?? \"MultiStepFormSchema\", this.includeTimestamp = t ?? !1, this.throwOnError = n ?? !1;\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: n } = e;\n if (t === \"replace\")\n return this.wrapValue(n ?? \"[]\", r);\n const { delimiter: s } = e;\n return t === \"append\" ? `${this.wrapValue(\n n?.originalPrefix ?? \"[]\",\n this.prefix\n )}${s}${this.wrapValue(\n n?.addedPrefix ?? \"[]\",\n r\n )}`.trim() : t === \"prepend\" ? `${this.wrapValue(\n n?.addedPrefix ?? \"[]\",\n r\n )}${s}${this.wrapValue(\n n?.originalPrefix ?? \"[]\",\n this.prefix\n )}`.trim() : this.prefix;\n }\n formatMessage(e, t, r) {\n const {\n includeTimestamp: n = this.includeTimestamp,\n prefix: s,\n logLevelOptions: o\n } = r ?? {}, a = this.formatPrefix(s), c = this.wrapValue(\n o?.wrapWith ?? \"[]\",\n (o?.level ?? e).toUpperCase()\n ), l = `${a} ${c} ${t}`;\n return n ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ${l}` : l;\n }\n info(e, t) {\n console.info(this.formatMessage(\"info\", e, t));\n }\n warn(e, t) {\n console.warn(this.formatMessage(\"warn\", e, t));\n }\n error(e, t) {\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 v = '\"window\" in undefined. No storage is available', S = \"MultiStepForm\";\nclass k {\n key;\n store;\n data;\n log;\n isWindowUndefined;\n constructor(e) {\n const { key: t, data: r, store: n } = e;\n this.log = new A({\n prefix: S\n }), this.key = t, this.data = r, n ? (this.store = n, this.isWindowUndefined = !1) : typeof window < \"u\" ? (this.store = window.localStorage, this.isWindowUndefined = !1) : (this.isWindowUndefined = !0, this.log.warn(v));\n }\n throwOnEmptyStore() {\n u(this.store, () => this.isWindowUndefined ? v : \"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 U = [\n \"sentence\",\n \"title\",\n \"camel\",\n \"lower\",\n \"upper\",\n \"pascal\",\n \"snake\",\n \"screaming-snake\",\n \"flat\",\n \"kebab\"\n], x = \"title\";\nfunction O(i, e) {\n const t = i.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 i;\n }\n}\nfunction Y(i, e = '\"') {\n const t = i.startsWith(e), r = i.endsWith(e);\n if (t && r)\n return i;\n const n = i.replace(/^['\"]|['\"]$/g, \"\");\n return `${e}${n}${e}`;\n}\nfunction y(i) {\n return typeof i != \"string\" ? !1 : U.includes(i);\n}\nfunction F(i, e = x) {\n return y(i) ? i : e;\n}\nconst P = [\n \"string\",\n \"string.phone\",\n \"string.email\",\n \"string.time\",\n \"number\",\n \"number.counter\",\n \"date\",\n \"dateTime\",\n \"boolean.switch\"\n], E = \"string\";\nfunction L(i) {\n return typeof i == \"string\" && P.includes(i);\n}\nclass $ {\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}\nconst H = [\n \"string\",\n \"number\",\n \"array.string\",\n \"array.string.untyped\"\n], _ = /^step\\d+$/i;\nfunction C(i, e) {\n if (typeof i != \"object\" || i === null) return !1;\n for (const t of Object.keys(e)) {\n if (!(t in i)) return !1;\n const r = e[t], n = i[t];\n if (!r(n)) return !1;\n }\n return !0;\n}\nfunction N(i, e, t) {\n return i ?? O(e, t);\n}\nfunction K(i) {\n const e = {}, { fields: t, defaultCasing: r, validateFields: n } = i;\n for (const [s, o] of Object.entries(t)) {\n u(\n typeof s == \"string\",\n `Each key for the \"fields\" option must be a string. Key ${s} was a ${typeof s}`\n ), u(\n typeof o == \"object\",\n `The value for key ${s} must be an object. Was ${typeof o}`\n );\n const {\n defaultValue: a,\n label: c,\n nameTransformCasing: l,\n type: f = E\n } = o;\n if (n)\n e[s] = a;\n else {\n const p = l ?? r;\n e[s] = {\n ...e[s],\n nameTransformCasing: p,\n type: f,\n defaultValue: a,\n label: N(c, s, p)\n // TODO add more fields here\n };\n }\n }\n if (n) {\n const s = g(\n n,\n e\n );\n u(\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 ), u(\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 [o, a] of Object.entries(s)) {\n const c = t[o];\n u(\n c,\n `No field found in the fields config for \"${o}\"`\n );\n const {\n label: l,\n type: f = E,\n nameTransformCasing: p\n } = c, w = p ?? r;\n e[o] = {\n ...e[o],\n nameTransformCasing: w,\n type: f,\n defaultValue: a,\n label: N(l, o, w)\n };\n }\n }\n return e;\n}\nfunction W(i) {\n const e = {};\n u(!!i, \"The steps config must be defined\", TypeError), u(\n typeof i == \"object\",\n `The steps config must be an object, was (${typeof i})`,\n TypeError\n );\n for (const [t, r] of Object.entries(i)) {\n u(\n typeof t == \"string\",\n `Each key for the step config must be a string. Key \"${t}\" was ${typeof t} `,\n TypeError\n ), u(\n _.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 n = t, {\n fields: s,\n title: o,\n nameTransformCasing: a = x,\n description: c,\n validateFields: l\n } = r, f = n.toString().replace(\"step\", \"\");\n u(\n s,\n `Missing fields for step ${f} (${String(n)})`,\n TypeError\n ), u(\n typeof s == \"object\",\n \"Fields must be an object\",\n TypeError\n ), u(\n Object.keys(s).length > 0,\n `The fields config for step ${f} (${String(\n n\n )}) is empty. Please add a field`\n ), u(\n typeof s == \"object\",\n `The \"fields\" property must be an object. Was ${typeof s}`\n );\n const p = K({\n defaultCasing: a,\n fields: s,\n validateFields: l\n });\n e[n] = {\n ...e[n],\n title: o,\n nameTransformCasing: a,\n // Only add the description if it's defined\n ...typeof c == \"string\" ? { description: c } : {},\n fields: p\n };\n }\n return e;\n}\nclass R extends $ {\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: n } = e;\n this.defaultNameTransformationCasing = F(\n r\n ), this.original = t, this.value = this.enrichValues(W(this.original)), this.stepNumbers = Object.keys(this.value).map(\n (s) => Number.parseInt(s.replace(\"step\", \"\"))\n ), this.storage = new k({\n data: this.value,\n key: n?.key ?? S,\n store: n?.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 (u(\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((o) => `'${o}'`).join(\" | \");\n if (s === \"number\")\n return this.stepNumbers.join(\" | \");\n if (s.includes(\"array.string\"))\n return this.stepNumbers.map((o) => `${o}`);\n throw new Error(\n `Transformation type \"${s}\" is not supported. Available transformations include: ${H.map(\n (o) => `\"${o}\"`\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, n] of Object.entries(e)) {\n const s = Number.parseInt(r.replace(\"step\", \"\"));\n e = {\n ...e,\n [r]: {\n ...n,\n update: this.createStepUpdaterFn(s),\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 h(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 createStepUpdaterFnImpl(e, t, r) {\n const n = this.stepNumbers;\n u(\n typeof e == \"number\",\n `Type of step must be a number, was ${typeof e}`,\n TypeError\n ), u(\n n.includes(e),\n `The target step ${e} is not valid. Valid steps include \"${n.join(\n \", \"\n )}\"`\n );\n const s = `step${e}`;\n if (typeof t == \"string\") {\n u(this.value[s], `No data found for step ${e}`), u(\n typeof this.value[s] == \"object\",\n `The values for step ${e} is not an object, was ${typeof this.value[s]}`\n ), u(\n t in this.value[s],\n `The field ${t} is not a valid field. Valid fields include ${Object.keys(\n this.value[s]\n ).join(\", \")}`\n ), u(\n typeof r == \"object\" || typeof r == \"function\",\n () => {\n let o = \"\";\n return typeof r != \"object\" && (o = \"an object\"), typeof r != \"function\" && (o = \"a function\"), `[${String(\n s\n )}-${t}]: The updater must be ${o}, was \"${typeof r}\"`;\n },\n TypeError\n ), this.value = {\n ...this.value,\n [s]: {\n ...this.value[s],\n [t]: j(\n r,\n this.value[s][t]\n )\n }\n }, this.handlePostUpdate();\n return;\n }\n if (typeof t == \"object\" || typeof t == \"function\") {\n const o = j(\n t,\n this.value[s]\n );\n u(\n typeof o == \"object\",\n `The updated data must be an object, was ${typeof o}`\n ), this.value = {\n ...this.value,\n [s]: {\n ...this.value[s],\n ...o\n }\n }, this.handlePostUpdate();\n return;\n }\n throw new TypeError(\n `The second parameter must be one of the following: a specific field to update (string), an object with the updated data, or a function that returns the updated data. It was ${typeof t}`,\n { cause: t }\n );\n }\n createStepUpdaterFn(e) {\n return (t, r) => {\n this.createStepUpdaterFnImpl(\n e,\n t,\n r\n );\n };\n }\n update(e, t, r) {\n this.createStepUpdaterFnImpl(e, t, r);\n }\n createStepHelperFnImpl(e) {\n return (t, r) => {\n const n = I(\n this.value,\n e\n );\n if (typeof t == \"function\")\n return () => t({ ctx: n });\n if (typeof t == \"object\")\n return (s) => \"validator\" in t ? (u(\n typeof s == \"object\",\n \"An input is expected since you provided a validator\"\n ), g(\n t.validator,\n s.data\n ), r({ ctx: n, ...s })) : r({ ctx: 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, ...n } = e;\n return this.createStepHelperFnImpl(r)(n, 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 : C(e, {\n title: (r) => typeof r == \"string\",\n fields: (r) => {\n if (r === null || typeof r != \"object\")\n return !1;\n for (const n of Object.keys(r)) {\n if (typeof n != \"string\" || !(n in r))\n return !1;\n const s = r[n];\n if (s === null || typeof s != \"object\" || !C(s, {\n defaultValue: (a) => a !== \"undefined\" && a !== null,\n label: (a) => typeof a == \"string\" || typeof a == \"boolean\" && !a,\n nameTransformCasing: y,\n type: L\n }))\n return !1;\n }\n return !0;\n },\n createHelperFn: (r) => typeof r == \"function\",\n update: (r) => typeof r == \"function\",\n nameTransformCasing: y,\n ...t?.optionalKeysToCheck\n });\n }\n}\nclass G extends $ {\n stepHelper;\n defaultNameTransformationCasing;\n stepSchema;\n storage;\n mountCount = 0;\n constructor(e) {\n super();\n const { steps: t, nameTransformCasing: r, storage: n } = e;\n this.defaultNameTransformationCasing = F(\n r\n ), this.stepSchema = new R({\n steps: t,\n nameTransformCasing: this.defaultNameTransformationCasing\n }), this.stepHelper = new M(\n this.stepSchema.value,\n this.stepSchema.steps.value\n ), this.storage = new k({\n key: n?.key ?? S,\n data: this.stepSchema.value,\n store: n?.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 D(i) {\n return new G(i);\n}\nclass z extends $ {\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 U as CASING_TYPES,\n x as DEFAULT_CASING,\n E as DEFAULT_FIELD_TYPE,\n S as DEFAULT_STORAGE_KEY,\n P as FIELD_TYPES,\n z as MultiStepFormObserver,\n G as MultiStepFormSchema,\n M as MultiStepFormStepHelper,\n R as MultiStepFormStepSchema,\n k as MultiStepFormStorage,\n _ as VALIDATED_STEP_REGEX,\n O as changeCasing,\n I as createCtx,\n D as createMultiStepFormSchema,\n W as createStep,\n u as invariant,\n y as isCasingValid,\n L as isFieldType,\n Y as quote,\n F as setCasingType\n};\n//# sourceMappingURL=index.mjs.map\n","import type {\r\n AnyResolvedStep,\r\n StepNumbers,\r\n Updater,\r\n ValidStepKey,\r\n} from '@jfdevelops/multi-step-form';\r\nimport type { ReactNode } from 'react';\r\n\r\nexport namespace Field {\r\n export type getFields<\r\n TResolvedStep extends AnyResolvedStep,\r\n TTargetStep extends StepNumbers<TResolvedStep>\r\n > = TResolvedStep[ValidStepKey<TTargetStep>]['fields'];\r\n export type childrenProps<\r\n TResolvedStep extends AnyResolvedStep,\r\n TStepNumbers extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends TStepNumbers,\r\n TFields extends getFields<TResolvedStep, TTargetStep>,\r\n TField extends keyof TFields\r\n > = getFields<TResolvedStep, TTargetStep>[TField] & {\r\n /**\r\n * The name of the field.\r\n */\r\n name: TField;\r\n /**\r\n * A useful wrapper around `update` to update the specific field.\r\n * @param value The new value for the field.\r\n */\r\n onInputChange: (value: Updater<TFields[TField]['defaultValue']>) => void;\r\n };\r\n export type props<\r\n TResolvedStep extends AnyResolvedStep,\r\n TStepNumbers extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends TStepNumbers,\r\n TFields extends getFields<TResolvedStep, TTargetStep>,\r\n TField extends keyof TFields\r\n > = {\r\n name: TField;\r\n children: (\r\n props: childrenProps<\r\n TResolvedStep,\r\n TStepNumbers,\r\n TTargetStep,\r\n TFields,\r\n TField\r\n >\r\n ) => ReactNode;\r\n };\r\n export type component<\r\n TResolvedStep extends AnyResolvedStep,\r\n TStepNumbers extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends TStepNumbers\r\n > = <\r\n TFields extends getFields<TResolvedStep, TTargetStep>,\r\n TField extends keyof TFields\r\n >(\r\n props: props<TResolvedStep, TStepNumbers, TTargetStep, TFields, TField>\r\n ) => ReactNode;\r\n}\r\n\r\nexport function createField<\r\n TResolvedStep extends AnyResolvedStep,\r\n TStepNumbers extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends TStepNumbers\r\n>(\r\n propsCreator: <\r\n TFields extends Field.getFields<TResolvedStep, TTargetStep>,\r\n TField extends keyof TFields\r\n >(\r\n name: TField\r\n ) => Field.childrenProps<\r\n TResolvedStep,\r\n TStepNumbers,\r\n TTargetStep,\r\n TFields,\r\n TField\r\n >\r\n) {\r\n function Field<\r\n TFields extends Field.getFields<TResolvedStep, TTargetStep>,\r\n TField extends keyof TFields\r\n >(\r\n props: Field.props<\r\n TResolvedStep,\r\n TStepNumbers,\r\n TTargetStep,\r\n TFields,\r\n TField\r\n >\r\n ) {\r\n const { children, name } = props;\r\n\r\n return children(propsCreator(name));\r\n }\r\n\r\n return Field;\r\n}\r\n","import type {\r\n Expand,\r\n HelperFnChosenSteps,\r\n StepNumbers,\r\n ValidStepKey,\r\n} from '@jfdevelops/multi-step-form';\r\nimport type { ComponentPropsWithRef, JSX } from 'react';\r\nimport type {\r\n AnyResolvedStep,\r\n CreatedMultiStepFormComponent,\r\n} from './step-schema';\r\n\r\nexport namespace MultiStepFormSchemaConfig {\r\n export const DEFAULT_FORM_ALIAS = 'Form';\r\n export type defaultEnabledFor = HelperFnChosenSteps.defaultStringOption;\r\n export type defaultFormAlias = typeof DEFAULT_FORM_ALIAS;\r\n export type formEnabledFor<TResolvedStep extends AnyResolvedStep> =\r\n HelperFnChosenSteps<TResolvedStep, StepNumbers<TResolvedStep>>;\r\n type strippedResolvedSteps<T extends AnyResolvedStep> = {\r\n [_ in keyof T]: Expand<Omit<T[_], 'createComponent' | 'createHelperFn'>>;\r\n };\r\n export type AvailableStepForForm<\r\n TResolvedStep extends AnyResolvedStep,\r\n TEnabledFor extends formEnabledFor<TResolvedStep>\r\n > = TEnabledFor extends defaultEnabledFor\r\n ? strippedResolvedSteps<TResolvedStep>\r\n : TEnabledFor extends [\r\n ValidStepKey<StepNumbers<TResolvedStep>>,\r\n ...ValidStepKey<StepNumbers<TResolvedStep>>[]\r\n ]\r\n ? TEnabledFor[number] extends keyof TResolvedStep\r\n ? Pick<strippedResolvedSteps<TResolvedStep>, TEnabledFor[number]>\r\n : never\r\n : keyof TEnabledFor extends keyof TResolvedStep\r\n ? Expand<\r\n Pick<\r\n strippedResolvedSteps<TResolvedStep>,\r\n Extract<keyof TResolvedStep, keyof TEnabledFor>\r\n >\r\n >\r\n : never;\r\n export type formCtx<TAlias extends string, TProps> = {\r\n [_ in TAlias]: CreatedMultiStepFormComponent<TProps>;\r\n };\r\n export type renderFnData<\r\n TResolvedStep extends AnyResolvedStep,\r\n TEnabledFor extends formEnabledFor<TResolvedStep>\r\n > = {\r\n /**\r\n * The id for the form, either a custom one or the default one.\r\n */\r\n id: string;\r\n /**\r\n * The chosen steps that are available.\r\n */\r\n steps: Expand<AvailableStepForForm<TResolvedStep, TEnabledFor>>;\r\n };\r\n\r\n /**\r\n * The configuration options for the `form` option.\r\n */\r\n export interface FormConfig<\r\n TResolvedStep extends AnyResolvedStep,\r\n TAlias extends string,\r\n TFormEnabledFor extends formEnabledFor<TResolvedStep>,\r\n TCustomFormProps extends object\r\n > {\r\n /**\r\n * The `id` for the form component.\r\n *\r\n * If there is no value provided, the default id will the **current step key**.\r\n *\r\n * @default `${currentStep}`\r\n */\r\n id?: string;\r\n /**\r\n * The \"name\" of the form component.\r\n * @default 'Form'\r\n * @example\r\n * ```tsx\r\n * const schema = createMultiStepFormSchema({\r\n * steps: {\r\n * step1: {\r\n * title: 'Step 1',\r\n * fields: {\r\n * firstName: {\r\n * defaultValue: ''\r\n * }\r\n * }\r\n * },\r\n * form: {\r\n * alias: 'MyCustomForm',\r\n * render() {\r\n * // return custom form component here\r\n * }\r\n * }\r\n * }\r\n * })\r\n *\r\n * const Step1 = schema.stepSchema.step1.createComponent(\r\n * ({ ctx, MyCustomForm }, props: { children: ReactNode }) =>\r\n * // Notice how the form is available with its alias\r\n * <MyCustomFormName>{children}</MyCustomFormName>\r\n * )\r\n * ```\r\n */\r\n alias?: TAlias;\r\n /**\r\n * If the form component should be accessible for each step when calling `createComponent`.\r\n *\r\n * If no value is given, the form will be accessible for all the steps.\r\n */\r\n enabledForSteps?: TFormEnabledFor;\r\n /**\r\n *\r\n * @param data The data that is available for creating the custom form.\r\n * @param props Props that can be used for the custom form.\r\n * @returns An {@see JSX.Element} that is the custom form.\r\n * @example\r\n * ### With custom props\r\n * ```tsx\r\n * type CustomProps = {\r\n * title: string;\r\n * description?: string;\r\n * children: ReactNode;\r\n * };\r\n *\r\n * const schema = createMultiStepFormSchema({\r\n * steps: {\r\n * step1: {\r\n * title: 'Step 1',\r\n * fields: {\r\n * firstName: {\r\n * defaultValue: ''\r\n * }\r\n * }\r\n * },\r\n * form: {\r\n * alias: 'MyCustomForm',\r\n * render(data, props: CustomProps) {\r\n * return (\r\n * <div>\r\n * <h1>{props.title}</h1>\r\n * <p>{props.description}</p>\r\n * <form>{props.children}</form>\r\n * </div>\r\n * );\r\n * }\r\n * }\r\n * }\r\n * })\r\n * ```\r\n * ### Without custom props\r\n * ```tsx\r\n * const schema = createMultiStepFormSchema({\r\n * steps: {\r\n * step1: {\r\n * title: 'Step 1',\r\n * fields: {\r\n * firstName: {\r\n * defaultValue: ''\r\n * }\r\n * }\r\n * },\r\n * form: {\r\n * alias: 'MyCustomForm',\r\n * render(data, props) {\r\n * // The default type for `props` will be `ComponentPropsWithRef<'form'>`\r\n * // return custom form component here\r\n * }\r\n * }\r\n * }\r\n * })\r\n * ```\r\n */\r\n render: (\r\n data: renderFnData<TResolvedStep, TFormEnabledFor>,\r\n props: TCustomFormProps\r\n ) => JSX.Element;\r\n }\r\n\r\n export interface Form<\r\n TResolvedStep extends AnyResolvedStep,\r\n TAlias extends string,\r\n TFormEnabledFor extends formEnabledFor<TResolvedStep>,\r\n TCustomFormProps extends object\r\n > {\r\n form?: FormConfig<TResolvedStep, TAlias, TFormEnabledFor, TCustomFormProps>;\r\n }\r\n\r\n /**\r\n * Compares {@linkcode enabledFor} to the {@linkcode target} to determine if the form\r\n * should be available.\r\n * @param target The target steps the form _should_ be available for.\r\n * @param enabledFor The steps that the form _is_ enabled for.\r\n * @returns A boolean representing if the form should be available.\r\n */\r\n // Note: the implementation is specific to `MultiStepFormStepSchema.createComponentForStep`\r\n // because the `target` will always be an `Array` in `MultiStepFormStepSchema.createComponentForStep`.\r\n // TODO add validation to keys\r\n export function isFormAvailable<\r\n TResolvedStep extends AnyResolvedStep,\r\n TTarget extends HelperFnChosenSteps<\r\n TResolvedStep,\r\n StepNumbers<TResolvedStep>\r\n >,\r\n TEnabledFor extends formEnabledFor<TResolvedStep>\r\n >(target: TTarget, enabledFor: TEnabledFor) {\r\n if (Array.isArray(target)) {\r\n if (enabledFor === 'all') {\r\n return true;\r\n }\r\n\r\n if (typeof enabledFor === 'object' && !Array.isArray(enabledFor)) {\r\n return Object.keys(enabledFor).some((key) =>\r\n target.includes(key as `step${StepNumbers<TResolvedStep>}`)\r\n );\r\n }\r\n\r\n if (Array.isArray(enabledFor)) {\r\n return enabledFor.some((key) => target.includes(key));\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Creates a form component with a default id.\r\n * @param id The default id for the form.\r\n * @returns A form component with a default {@linkcode id}.\r\n */\r\n export function createDefaultForm(id: string) {\r\n return (props: Omit<ComponentPropsWithRef<'form'>, 'id'>) => (\r\n <form id={id} {...props} />\r\n );\r\n }\r\n}\r\n","import {\r\n type AnyStepField,\r\n type CasingType,\r\n type Constrain,\r\n createCtx,\r\n type CreateHelperFunctionOptionsBase,\r\n createStep,\r\n type DefaultCasing,\r\n type DefaultStorageKey,\r\n type Expand,\r\n type GetCurrentStep,\r\n type GetFieldsForStep,\r\n type HelperFnChosenSteps,\r\n type HelperFnCtx,\r\n type HelperFnInputBase,\r\n invariant,\r\n type MultiStepFormSchemaStepConfig as MultiStepFormSchemaStepBaseConfig,\r\n MultiStepFormStepSchema as MultiStepFormStepSchemaBase,\r\n type Relaxed,\r\n type ResolvedStep as ResolvedCoreStep,\r\n type Step,\r\n type StepNumbers,\r\n type StrippedResolvedStep,\r\n type Updater,\r\n type ValidStepKey,\r\n} from '@jfdevelops/multi-step-form';\r\nimport type { ComponentPropsWithRef, ReactNode } from 'react';\r\nimport { createField, type Field } from './field';\r\nimport { MultiStepFormSchemaConfig } from './form-config';\r\n\r\nexport interface MultiStepFormSchemaStepConfig<\r\n TStep extends Step<TCasing>,\r\n TCasing extends CasingType,\r\n TStorageKey extends string,\r\n TFormAlias extends string,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\r\n TFormProps extends object,\r\n TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<\r\n TStep,\r\n TCasing\r\n >\r\n> extends MultiStepFormSchemaStepBaseConfig<TStep, TCasing, TStorageKey>,\r\n MultiStepFormSchemaConfig.Form<\r\n TResolvedStep,\r\n TFormAlias,\r\n TFormEnabledFor,\r\n TFormProps\r\n > {}\r\n\r\nexport type CreateFunction<TArgs extends any[], TReturn = void> = (\r\n ...args: TArgs\r\n) => TReturn;\r\nexport type CreateComponent<TInput, TProps> = CreateFunction<\r\n [input: TInput, props: TProps],\r\n ReactNode\r\n>;\r\n\r\nexport type CreateComponentCallback<\r\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\r\n TProps\r\n> = CreateComponent<\r\n HelperFnInputBase<TResolvedStep, TSteps, TChosenSteps>,\r\n TProps\r\n>;\r\nexport type CreatedMultiStepFormComponent<TProps> = TProps extends undefined\r\n ? () => ReactNode\r\n : (props: TProps) => ReactNode;\r\nexport type CreateComponentFn<\r\n TResolvedStep extends AnyResolvedStep,\r\n // This is needed to make TS happy with all types\r\n TStepNumbers extends StepNumbers<TResolvedStep>\r\n> = <\r\n chosenSteps extends HelperFnChosenSteps<TResolvedStep, TStepNumbers>,\r\n props = undefined\r\n>(\r\n options: CreateHelperFunctionOptionsBase<\r\n TResolvedStep,\r\n TStepNumbers,\r\n chosenSteps\r\n >,\r\n fn: CreateComponentCallback<TResolvedStep, TStepNumbers, chosenSteps, props>\r\n) => CreatedMultiStepFormComponent<props>;\r\n\r\nexport namespace StepSpecificComponent {\r\n // The logic for getting the formCtx only works for step specific `createComponent`\r\n // (i.e: step1.createComponent(...)) as of now. Reason is because I can't think of a good API for integrating the form\r\n // ctx into the main `createComponent` since multiple steps can be chosen. In that case\r\n // how would the logic work for when the form component should be defined in the callback?\r\n // Ideas:\r\n // - Make the main `createComponent` return a function that accepts the current step\r\n export type formComponent<\r\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\r\n TFormAlias extends string,\r\n TFormProps extends object,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>\r\n > = TFormEnabledFor extends MultiStepFormSchemaConfig.defaultEnabledFor\r\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\r\n : TFormEnabledFor extends HelperFnChosenSteps.tupleNotation<\r\n ValidStepKey<TSteps>\r\n >\r\n ? TFormEnabledFor[number] extends keyof TResolvedStep\r\n ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<\r\n ValidStepKey<TSteps>\r\n >\r\n ? TChosenSteps[number] extends keyof TResolvedStep\r\n ? TChosenSteps[number] extends TFormEnabledFor[number]\r\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\r\n : {}\r\n : {}\r\n : {}\r\n : {}\r\n : keyof TFormEnabledFor extends keyof TResolvedStep\r\n ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<\r\n ValidStepKey<TSteps>\r\n >\r\n ? TChosenSteps[number] extends keyof TResolvedStep\r\n ? TChosenSteps[number] extends keyof TFormEnabledFor\r\n ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps>\r\n : {}\r\n : {}\r\n : {}\r\n : {};\r\n export type onInputChange<\r\n TResolvedStep extends AnyResolvedStep,\r\n TStepNumbers extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends TStepNumbers\r\n > = <\r\n CurrentStepData extends GetCurrentStep<TResolvedStep, TTargetStep>,\r\n Field extends keyof CurrentStepData\r\n >(\r\n field: Field,\r\n updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>\r\n ) => void;\r\n export interface Input<\r\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\r\n > extends HelperFnInputBase<TResolvedStep, TSteps, TChosenSteps> {\r\n /**\r\n * A useful wrapper around `update` to update the specific field.\r\n * @param field The field to update.\r\n * @param updater The new value for the specified field.\r\n */\r\n onInputChange: <\r\n CurrentStepData extends GetCurrentStep<\r\n TResolvedStep,\r\n // @ts-ignore Type checking works properly, type doesn't match\r\n HelperFnChosenSteps.extractStepNumber<\r\n TResolvedStep,\r\n TSteps,\r\n TChosenSteps\r\n >\r\n >,\r\n Field extends keyof CurrentStepData\r\n >(\r\n field: Field,\r\n updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>\r\n ) => void;\r\n Field: Field.component<\r\n TResolvedStep,\r\n TSteps,\r\n // @ts-ignore Type checking works properly, type doesn't match\r\n HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps>\r\n >;\r\n }\r\n\r\n export type callback<\r\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\r\n TProps,\r\n TFormAlias extends string,\r\n TFormProps extends object,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\r\n TAdditionalInput extends object = {}\r\n > = CreateComponent<\r\n Input<TResolvedStep, TSteps, TChosenSteps> &\r\n formComponent<\r\n TResolvedStep,\r\n TSteps,\r\n TChosenSteps,\r\n TFormAlias,\r\n TFormProps,\r\n TFormEnabledFor\r\n > &\r\n TAdditionalInput,\r\n TProps\r\n >;\r\n export const DEFAULT_FORM_INSTANCE_ALIAS = 'form';\r\n export type defaultFormInstanceAlias = typeof DEFAULT_FORM_INSTANCE_ALIAS;\r\n export type formInstanceOptions<\r\n TAlias extends string,\r\n TRenderInput,\r\n TReturn\r\n > = {\r\n /**\r\n * The name of the return value of the `render` method.\r\n */\r\n alias?: TAlias;\r\n /**\r\n * A function that renders/creates the form instance. This function will be called\r\n * at the top level of the component, ensuring hooks are called in a valid React context.\r\n *\r\n * @param input - The input object containing context and default values\r\n * @returns The form instance (typically from a hook like `useForm`)\r\n *\r\n * @example\r\n * ```tsx\r\n * useFormInstance: {\r\n * render({ defaultValues }) {\r\n * return useForm({\r\n * defaultValues,\r\n * });\r\n * },\r\n * }\r\n * ```\r\n *\r\n * **Verification**: The hook call is automatically verified:\r\n * - Errors are caught and reported with helpful messages\r\n * - In development, hook calls are logged to console.debug\r\n * - The hook must be called at the component top level (enforced by the framework)\r\n */\r\n render: CreateFunction<[input: TRenderInput], TReturn>;\r\n };\r\n export type options<\r\n TResolvedStep extends AnyResolvedStep,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\r\n TFormInstanceAlias extends string,\r\n TFormInstance\r\n > = {\r\n useFormInstance?: formInstanceOptions<\r\n TFormInstanceAlias,\r\n HelperFnInputBase<TResolvedStep, TSteps, TTargetStep> & {\r\n /**\r\n * An object containing all the default values for the current step.\r\n */\r\n defaultValues: Expand<\r\n ExtractedDefaultValues<TResolvedStep, TSteps, TTargetStep>\r\n >;\r\n },\r\n TFormInstance\r\n >;\r\n };\r\n}\r\n\r\nexport type CreateStepSpecificComponentCallback<\r\n TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\r\n TProps,\r\n TFormAlias extends string,\r\n TFormProps extends object,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\r\n TAdditionalInput extends object = {}\r\n> = StepSpecificComponent.callback<\r\n TResolvedStep,\r\n TSteps,\r\n TChosenSteps,\r\n TProps,\r\n TFormAlias,\r\n TFormProps,\r\n TFormEnabledFor,\r\n TAdditionalInput\r\n>;\r\n\r\nexport type ExtractedDefaultValues<\r\n TResolvedStep extends AnyResolvedStep,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\r\n TExtractedStepNumber extends number = HelperFnChosenSteps.extractStepNumber<\r\n TResolvedStep,\r\n TSteps,\r\n TTargetStep\r\n >,\r\n TFields extends GetFieldsForStep<\r\n TResolvedStep,\r\n ValidStepKey<TExtractedStepNumber>\r\n > = GetFieldsForStep<TResolvedStep, ValidStepKey<TExtractedStepNumber>>\r\n> = { [field in keyof TFields]: TFields[field]['defaultValue'] };\r\nexport interface StepSpecificCreateComponentFn<\r\n TResolvedStep extends AnyResolvedStep,\r\n TSteps extends StepNumbers<TResolvedStep>,\r\n TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>,\r\n TFormAlias extends string,\r\n TFormProps extends object,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>\r\n> {\r\n /**\r\n * A utility function to easily create a component for the current step.\r\n * @param fn The callback function where the component is defined.\r\n */\r\n <props = undefined>(\r\n fn: CreateStepSpecificComponentCallback<\r\n TResolvedStep,\r\n TSteps,\r\n TTargetStep,\r\n props,\r\n TFormAlias,\r\n TFormProps,\r\n TFormEnabledFor\r\n >\r\n ): CreatedMultiStepFormComponent<props>;\r\n /**\r\n * A utility function to easily create a component for the current step.\r\n * @param options Specific config options for creating a component for the current step.\r\n * @param fn The callback function where the component is defined.\r\n * @returns The created component.\r\n */\r\n <\r\n formInstance,\r\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\r\n props = undefined\r\n >(\r\n options: StepSpecificComponent.options<\r\n TResolvedStep,\r\n TSteps,\r\n TTargetStep,\r\n formInstanceAlias,\r\n formInstance\r\n >,\r\n fn: CreateStepSpecificComponentCallback<\r\n TResolvedStep,\r\n TSteps,\r\n TTargetStep,\r\n props,\r\n TFormAlias,\r\n TFormProps,\r\n TFormEnabledFor,\r\n { [_ in formInstanceAlias]: formInstance }\r\n >\r\n ): CreatedMultiStepFormComponent<props>;\r\n}\r\n\r\nexport type ResolvedStep<\r\n TStep extends Step<TDefaultCasing>,\r\n TDefaultCasing extends CasingType = DefaultCasing,\r\n TResolvedStep extends ResolvedCoreStep<\r\n TStep,\r\n TDefaultCasing\r\n > = ResolvedCoreStep<TStep, TDefaultCasing>,\r\n TFormAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\r\n TFormProps extends object = ComponentPropsWithRef<'form'>\r\n> = {\r\n [stepKey in keyof TResolvedStep]: TResolvedStep[stepKey] &\r\n (stepKey extends ValidStepKey<StepNumbers<TResolvedStep>>\r\n ? {\r\n createComponent: StepSpecificCreateComponentFn<\r\n TResolvedStep,\r\n StepNumbers<TResolvedStep>,\r\n [stepKey],\r\n TFormAlias,\r\n TFormProps,\r\n TFormEnabledFor\r\n >;\r\n }\r\n : {});\r\n};\r\n\r\nexport type AnyResolvedStep = ResolvedStep<any, any, any>;\r\nexport interface HelperFunctions<\r\n TResolvedStep extends AnyResolvedStep,\r\n TStepNumbers extends StepNumbers<TResolvedStep>\r\n> {\r\n createComponent: CreateComponentFn<TResolvedStep, TStepNumbers>;\r\n}\r\nnamespace CreateComponentImplConfig {\r\n export type stepSpecificConfig<\r\n TResolvedStep extends AnyResolvedStep,\r\n TFormAlias extends string,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\r\n TFormProps extends object\r\n > = {\r\n isStepSpecific: true;\r\n defaultId: string;\r\n form?: MultiStepFormSchemaConfig.FormConfig<\r\n TResolvedStep,\r\n TFormAlias,\r\n TFormEnabledFor,\r\n TFormProps\r\n >;\r\n };\r\n\r\n export type nonStepSpecific = {\r\n isStepSpecific: false;\r\n };\r\n\r\n export type config<\r\n TResolvedStep extends AnyResolvedStep,\r\n TFormAlias extends string,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\r\n TFormProps extends object\r\n > =\r\n | nonStepSpecific\r\n | stepSpecificConfig<\r\n TResolvedStep,\r\n TFormAlias,\r\n TFormEnabledFor,\r\n TFormProps\r\n >;\r\n}\r\n\r\n/**\r\n * Creates a default values object for the target step.\r\n * @param steps The steps schema.\r\n * @param targetStep The step to create the default values for.\r\n * @returns An object containing the field names and their default values.\r\n */\r\nexport function createDefaultValues<\r\n resolvedStep extends AnyResolvedStep,\r\n stepNumbers extends StepNumbers<resolvedStep>,\r\n targetStep extends ValidStepKey<stepNumbers>\r\n>(steps: resolvedStep, targetStep: targetStep) {\r\n invariant(\r\n targetStep in steps,\r\n `The target step ${targetStep} is not a valid step key`\r\n );\r\n\r\n const current = steps[targetStep as unknown as keyof resolvedStep];\r\n\r\n invariant('fields' in current, `No \"fields\" were found for ${targetStep}`);\r\n\r\n let defaultValues = {};\r\n\r\n for (const [fieldName, fieldValues] of Object.entries(\r\n current.fields as Record<string, Record<string, unknown>>\r\n )) {\r\n defaultValues = {\r\n ...defaultValues,\r\n [fieldName]: fieldValues.defaultValue,\r\n };\r\n }\r\n\r\n return defaultValues as Expand<\r\n ExtractedDefaultValues<resolvedStep, stepNumbers, [targetStep]>\r\n >;\r\n}\r\nexport class MultiStepFormStepSchema<\r\n step extends Step<casing>,\r\n casing extends CasingType = DefaultCasing,\r\n storageKey extends string = DefaultStorageKey,\r\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\r\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\r\n formProps extends object = ComponentPropsWithRef<'form'>,\r\n core extends ResolvedCoreStep<step, casing> = ResolvedCoreStep<\r\n step,\r\n casing\r\n >,\r\n resolvedStep extends ResolvedStep<\r\n step,\r\n casing,\r\n core,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n > = ResolvedStep<step, casing, core, formAlias, formEnabledFor, formProps>,\r\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\r\n >\r\n extends MultiStepFormStepSchemaBase<step, casing>\r\n implements HelperFunctions<resolvedStep, stepNumbers>\r\n{\r\n // @ts-ignore type doesn't match `MultiStepFormSchemaBase.value`\r\n value: resolvedStep;\r\n\r\n constructor(\r\n config: MultiStepFormSchemaStepConfig<\r\n step,\r\n Constrain<casing, CasingType>,\r\n storageKey,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >\r\n ) {\r\n const { form, ...rest } = config;\r\n\r\n super(rest as never);\r\n\r\n this.value = this.enrichValues(createStep(this.original));\r\n this.value = this.enrichValues(this.value, (step) => {\r\n const key = `step${step as stepNumbers}`;\r\n const id = form?.id ?? key;\r\n\r\n return {\r\n createComponent: this.createComponentForStep(\r\n [`step${step as stepNumbers}`],\r\n {\r\n isStepSpecific: true,\r\n defaultId: id,\r\n form: form as never,\r\n }\r\n ),\r\n };\r\n });\r\n }\r\n\r\n private createFormComponent(\r\n form: Omit<\r\n MultiStepFormSchemaConfig.FormConfig<\r\n resolvedStep,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >,\r\n 'alias'\r\n >,\r\n defaultId: string\r\n ) {\r\n const { render, enabledForSteps = 'all', id = defaultId } = form;\r\n\r\n const ctx = {\r\n id,\r\n steps: createCtx(this.value, enabledForSteps as never),\r\n };\r\n\r\n return (props: formProps) => render(ctx, props);\r\n }\r\n\r\n private createStepSpecificComponentImpl<\r\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\r\n >(\r\n stepData: chosenStep,\r\n config: CreateComponentImplConfig.stepSpecificConfig<\r\n resolvedStep,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >,\r\n ctx: HelperFnCtx<resolvedStep, stepNumbers, chosenStep>,\r\n extraInput = {}\r\n ) {\r\n return <props>(fn: Function) =>\r\n ((props: props) => {\r\n // Call hook functions from extraInput at the top level of the component\r\n // This ensures hooks are called in a valid React context (before any conditionals)\r\n const hookResults: Record<string, unknown> = {};\r\n for (const [key, value] of Object.entries(extraInput)) {\r\n if (typeof value === 'function') {\r\n try {\r\n const result = value();\r\n // Verify the hook was actually called and returned a value\r\n // (hooks should always return something, even if it's undefined)\r\n hookResults[key] = result;\r\n\r\n // In development, we can add additional verification here\r\n // Log hook calls for debugging (can be disabled in production by removing console.debug)\r\n if (typeof console !== 'undefined' && console.debug) {\r\n console.debug(\r\n `[multi-step-form] Hook \"${key}\" called successfully`,\r\n { result: result !== undefined ? 'defined' : 'undefined' }\r\n );\r\n }\r\n } catch (error) {\r\n // Provide helpful error message if hook throws\r\n const errorMessage =\r\n error instanceof Error ? error.message : String(error);\r\n\r\n throw new Error(\r\n `[multi-step-form] Error calling hook \"${key}\" in useFormInstance.render: ${errorMessage}\\n\\n` +\r\n `This usually means:\\n` +\r\n `1. The hook is being called outside of a React component\\n` +\r\n `2. The hook has invalid dependencies or configuration\\n` +\r\n `3. There's an error in your hook implementation\\n\\n` +\r\n `Original error: ${errorMessage}`,\r\n { cause: error }\r\n );\r\n }\r\n } else {\r\n hookResults[key] = value;\r\n }\r\n }\r\n\r\n const { defaultId, form } = config;\r\n\r\n if (form) {\r\n const {\r\n alias = MultiStepFormSchemaConfig.DEFAULT_FORM_ALIAS,\r\n ...rest\r\n } = form;\r\n const enabledFor = rest.enabledForSteps ?? 'all';\r\n\r\n // Safe cast here since the step specific `createComponent` will always have\r\n // `stepData` as a tuple\r\n const [step] =\r\n stepData as HelperFnChosenSteps.tupleNotation<`step${stepNumbers}`>;\r\n\r\n invariant(\r\n this.steps.isValidStepKey(step),\r\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.`\r\n );\r\n\r\n const stepNumber = Number.parseInt(step.replace('step', ''));\r\n\r\n invariant(\r\n !Number.isNaN(stepNumber),\r\n `[${step}:\"createComponent\"]: an error occurred while extracting the number`\r\n );\r\n const current = this.value[step as keyof resolvedStep];\r\n\r\n // These checks are mostly for type safety. `current` should _always_ be in the proper format.\r\n // On the off chance that it's not, we have the checks here to help, but these checks are basically\r\n // just for type safety.\r\n invariant(\r\n 'fields' in current,\r\n `[${step}:createComponent]: unable to find the \"fields\" for the current step`\r\n );\r\n invariant(\r\n typeof current.fields === 'object',\r\n `[${step}:createComponent]: the \"fields\" property must be an object, was ${typeof current.fields}`\r\n );\r\n\r\n const Field = createField((name) => {\r\n invariant(typeof name === 'string', () => {\r\n const formatter = new Intl.ListFormat('en', {\r\n style: 'long',\r\n type: 'disjunction',\r\n });\r\n\r\n return `[${step}:Field]: the \"name\" prop must be a string and a valid field for ${step}. Available fields include ${formatter.format(\r\n Object.keys(current.fields as Record<string, unknown>)\r\n )}`;\r\n });\r\n invariant(\r\n name in (current.fields as object),\r\n `[${step}:Field]: the field \"${name}\" doesn't exist for the current step`\r\n );\r\n const { fields, update } = current;\r\n const { defaultValue, label, nameTransformCasing, type } = (\r\n fields as AnyStepField\r\n )[name];\r\n\r\n return {\r\n defaultValue,\r\n label,\r\n nameTransformCasing,\r\n type,\r\n name,\r\n onInputChange: (value: unknown) =>\r\n // TODO remove type assertions\r\n update(\r\n 'fields' as never,\r\n (prev) =>\r\n ({\r\n ...(prev as Record<string, unknown>),\r\n [name]: {\r\n ...((prev as Record<string, unknown>)[name] as Record<\r\n string,\r\n unknown\r\n >),\r\n defaultValue: value,\r\n },\r\n } as never)\r\n ),\r\n };\r\n });\r\n\r\n let input = {\r\n ctx,\r\n onInputChange: this.createStepUpdaterFn(stepNumber as stepNumbers),\r\n Field,\r\n ...hookResults,\r\n };\r\n\r\n if (\r\n MultiStepFormSchemaConfig.isFormAvailable(\r\n stepData as never,\r\n enabledFor as never\r\n )\r\n ) {\r\n input = {\r\n ...input,\r\n [alias]: this.createFormComponent(rest, defaultId),\r\n };\r\n }\r\n\r\n return fn(input, props);\r\n }\r\n\r\n return fn(\r\n {\r\n ctx,\r\n [MultiStepFormSchemaConfig.DEFAULT_FORM_ALIAS]:\r\n MultiStepFormSchemaConfig.createDefaultForm(defaultId),\r\n },\r\n props\r\n );\r\n }) as CreatedMultiStepFormComponent<props>;\r\n }\r\n\r\n private createStepSpecificComponentFactory<\r\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\r\n >(\r\n stepData: chosenStep,\r\n config: CreateComponentImplConfig.stepSpecificConfig<\r\n resolvedStep,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >,\r\n ctx: HelperFnCtx<resolvedStep, stepNumbers, chosenStep>\r\n ): StepSpecificCreateComponentFn<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n formAlias,\r\n formProps,\r\n formEnabledFor\r\n > {\r\n const createStepSpecificComponentImpl =\r\n this.createStepSpecificComponentImpl.bind(this);\r\n const createDefaultValues = this.createDefaultValues.bind(this);\r\n\r\n function impl<props = undefined>(\r\n fn: CreateStepSpecificComponentCallback<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n props,\r\n formAlias,\r\n formProps,\r\n formEnabledFor\r\n >\r\n ): CreatedMultiStepFormComponent<props>;\r\n function impl<\r\n formInstance,\r\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\r\n props = undefined\r\n >(\r\n options: StepSpecificComponent.options<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n formInstanceAlias,\r\n formInstance\r\n >,\r\n fn: CreateStepSpecificComponentCallback<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n props,\r\n formAlias,\r\n formProps,\r\n formEnabledFor,\r\n { [_ in formInstanceAlias]: formInstance }\r\n >\r\n ): CreatedMultiStepFormComponent<props>;\r\n function impl<\r\n formInstance,\r\n formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias,\r\n props = undefined\r\n >(\r\n optionsOrFn:\r\n | StepSpecificComponent.options<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n formInstanceAlias,\r\n formInstance\r\n >\r\n | CreateStepSpecificComponentCallback<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n props,\r\n formAlias,\r\n formProps,\r\n formEnabledFor\r\n >,\r\n fn?: CreateStepSpecificComponentCallback<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n props,\r\n formAlias,\r\n formProps,\r\n formEnabledFor,\r\n { [_ in formInstanceAlias]: formInstance }\r\n >\r\n ) {\r\n function createStepSpecificComponent() {\r\n invariant(\r\n typeof optionsOrFn === 'function',\r\n 'The first argument must be a function'\r\n );\r\n\r\n return createStepSpecificComponentImpl(\r\n stepData,\r\n config,\r\n ctx\r\n )(optionsOrFn);\r\n }\r\n\r\n if (typeof optionsOrFn === 'object') {\r\n const { useFormInstance } = optionsOrFn;\r\n\r\n if (useFormInstance) {\r\n const {\r\n render,\r\n alias = StepSpecificComponent.DEFAULT_FORM_INSTANCE_ALIAS,\r\n } = useFormInstance;\r\n\r\n invariant(\r\n typeof fn === 'function',\r\n 'The second argument must be a function'\r\n );\r\n\r\n // Safe cast here since the step specific `createComponent` will always have\r\n // `stepData` as a tuple\r\n const [step] =\r\n stepData as HelperFnChosenSteps.tupleNotation<`step${stepNumbers}`>;\r\n\r\n // Store the render function and inputs to call it at component level\r\n // This ensures hooks are called in a valid React context\r\n const defaultValues = createDefaultValues(step) as never;\r\n const renderInput = { ctx, defaultValues };\r\n\r\n return createStepSpecificComponentImpl(stepData, config, ctx, {\r\n [alias]: () => render(renderInput),\r\n })(fn);\r\n }\r\n\r\n return createStepSpecificComponent();\r\n }\r\n\r\n return createStepSpecificComponent();\r\n }\r\n\r\n return impl;\r\n }\r\n\r\n private createComponentImpl<\r\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\r\n >(\r\n stepData: chosenStep,\r\n config: CreateComponentImplConfig.nonStepSpecific\r\n ): <props>(\r\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenStep, props>\r\n ) => CreatedMultiStepFormComponent<props>;\r\n private createComponentImpl<\r\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\r\n >(\r\n stepData: chosenStep,\r\n config: CreateComponentImplConfig.stepSpecificConfig<\r\n resolvedStep,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >\r\n ): StepSpecificCreateComponentFn<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenStep,\r\n formAlias,\r\n formProps,\r\n formEnabledFor\r\n >;\r\n private createComponentImpl<\r\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\r\n >(\r\n stepData: chosenStep,\r\n config: CreateComponentImplConfig.config<\r\n resolvedStep,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >\r\n ) {\r\n const ctx = createCtx<resolvedStep, stepNumbers, chosenStep>(\r\n this.value,\r\n stepData\r\n );\r\n\r\n if (config.isStepSpecific) {\r\n return this.createStepSpecificComponentFactory(stepData, config, ctx);\r\n }\r\n\r\n return <props>(fn: Function) =>\r\n ((props?: props) =>\r\n fn(\r\n { ctx } as any,\r\n props as any\r\n )) as CreatedMultiStepFormComponent<props>;\r\n }\r\n\r\n private createComponentForStep<\r\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\r\n >(\r\n stepData: chosenStep,\r\n config: CreateComponentImplConfig.stepSpecificConfig<\r\n resolvedStep,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >\r\n ) {\r\n return this.createComponentImpl(stepData, config);\r\n }\r\n\r\n /**\r\n * A helper function to create a component for a specific step.\r\n * @param options The options for creating the step specific component.\r\n * @param fn A callback that is used for accessing the target step's data and defining\r\n * any props that the component should have. This function must return a valid `JSX` element.\r\n * @returns The created component for the step.\r\n */\r\n createComponent<\r\n chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\r\n props = undefined\r\n >(\r\n options: CreateHelperFunctionOptionsBase<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenSteps\r\n >,\r\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenSteps, props>\r\n ) {\r\n return this.createComponentImpl(options.stepData, {\r\n isStepSpecific: false,\r\n })<props>(fn);\r\n }\r\n\r\n createDefaultValues<targetStep extends ValidStepKey<stepNumbers>>(\r\n targetStep: targetStep\r\n ) {\r\n return createDefaultValues(this.value, targetStep);\r\n }\r\n}\r\n","import {\r\n type CasingType,\r\n type Constrain,\r\n type CreateHelperFunctionOptionsBase,\r\n DEFAULT_CASING,\r\n type DefaultCasing,\r\n type DefaultStorageKey,\r\n type HelperFnChosenSteps,\r\n type HelperFnCtx,\r\n type MultiStepFormSchemaOptions as MultiStepFormSchemaBaseOptions,\r\n MultiStepFormSchema as MultiStepFormSchemaCore,\r\n type ResolvedStep as ResolvedStepCore,\r\n type Step,\r\n type StepNumbers,\r\n} from '@jfdevelops/multi-step-form';\r\nimport type { ComponentPropsWithRef } from 'react';\r\nimport { MultiStepFormSchemaConfig } from './form-config';\r\nimport {\r\n type CreateComponentCallback,\r\n type CreatedMultiStepFormComponent,\r\n type HelperFunctions,\r\n MultiStepFormStepSchema,\r\n type ResolvedStep,\r\n} from './step-schema';\r\n\r\n// export type AnyMultiStepFormSchema = MultiStepFormSchema<any, any, any>;\r\nexport type AnyMultiStepFormSchema = { [x: string]: any };\r\n\r\n// Helper inference types for `AnyMultiStepFormSchema`\r\nexport namespace MultiStepFormSchema {\r\n /**\r\n * Infer the resolved step from a {@linkcode MultiStepFormSchema}.\r\n */\r\n export type resolvedStep<T extends AnyMultiStepFormSchema> =\r\n T['stepSchema']['value'];\r\n /**\r\n * Infer the {@linkcode MultiStepFormSchema}'s step numbers.\r\n */\r\n export type stepNumbers<T extends AnyMultiStepFormSchema> = StepNumbers<\r\n resolvedStep<T>\r\n >;\r\n /**\r\n * Get the data for a specific step from a {@linkcode MultiStepFormSchema}.\r\n */\r\n export type getData<\r\n T extends AnyMultiStepFormSchema,\r\n TTarget extends keyof resolvedStep<T>\r\n > = resolvedStep<T>[TTarget];\r\n}\r\n\r\nexport interface MultiStepFormSchemaOptions<\r\n TStep extends Step<TCasing>,\r\n TCasing extends CasingType,\r\n TStorageKey extends string,\r\n TFormAlias extends string,\r\n TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>,\r\n TFormProps extends object,\r\n TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<\r\n TStep,\r\n TCasing\r\n >\r\n> extends MultiStepFormSchemaBaseOptions<TStep, TCasing, TStorageKey>,\r\n MultiStepFormSchemaConfig.Form<\r\n TResolvedStep,\r\n TFormAlias,\r\n TFormEnabledFor,\r\n TFormProps\r\n > {}\r\n\r\nexport class MultiStepFormSchema<\r\n step extends Step<casing>,\r\n casing extends CasingType = DefaultCasing,\r\n storageKey extends string = DefaultStorageKey,\r\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\r\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\r\n formProps extends object = ComponentPropsWithRef<'form'>,\r\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<\r\n step,\r\n casing\r\n >,\r\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\r\n >\r\n extends MultiStepFormSchemaCore<\r\n step,\r\n casing,\r\n ResolvedStepCore<step, casing>,\r\n StepNumbers<ResolvedStepCore<step, casing>>,\r\n storageKey\r\n >\r\n implements HelperFunctions<resolvedStep, stepNumbers>\r\n{\r\n stepSchema: MultiStepFormStepSchema<\r\n step,\r\n casing,\r\n storageKey,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >;\r\n\r\n constructor(\r\n config: MultiStepFormSchemaOptions<\r\n step,\r\n Constrain<casing, CasingType>,\r\n storageKey,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >\r\n ) {\r\n const { nameTransformCasing = DEFAULT_CASING, storage, ...rest } = config;\r\n\r\n super({\r\n nameTransformCasing,\r\n storage,\r\n ...rest,\r\n });\r\n\r\n this.stepSchema = new MultiStepFormStepSchema<\r\n step,\r\n casing,\r\n storageKey,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >({\r\n nameTransformCasing,\r\n ...rest,\r\n });\r\n }\r\n\r\n createComponent<\r\n chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\r\n props = undefined\r\n >(\r\n options: CreateHelperFunctionOptionsBase<\r\n resolvedStep,\r\n stepNumbers,\r\n chosenSteps\r\n >,\r\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenSteps, props>\r\n ): CreatedMultiStepFormComponent<props> {\r\n const { stepData } = options;\r\n const ctx = this.stepHelper.createCtx(\r\n stepData as HelperFnChosenSteps<\r\n ResolvedStepCore<step, casing>,\r\n StepNumbers<ResolvedStepCore<step, casing>>\r\n >\r\n ) as HelperFnCtx<resolvedStep, stepNumbers, chosenSteps>;\r\n\r\n return ((props?: props) => fn({ ctx }, props as any)) as any;\r\n }\r\n}\r\n\r\nexport function createMultiStepFormSchema<\r\n step extends Step<casing>,\r\n casing extends CasingType = DefaultCasing,\r\n storageKey extends string = DefaultStorageKey,\r\n formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias,\r\n formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor,\r\n formProps extends object = ComponentPropsWithRef<'form'>,\r\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\r\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\r\n>(\r\n options: MultiStepFormSchemaOptions<\r\n step,\r\n Constrain<casing, CasingType>,\r\n storageKey,\r\n formAlias,\r\n formEnabledFor,\r\n formProps\r\n >\r\n) {\r\n return new MultiStepFormSchema<\r\n step,\r\n casing,\r\n storageKey,\r\n formAlias,\r\n formEnabledFor,\r\n formProps,\r\n resolvedStep,\r\n stepNumbers\r\n >(options);\r\n}\r\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';\r\nimport { invariant, VALIDATED_STEP_REGEX } from '@jfdevelops/multi-step-form';\r\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\r\n\r\nexport type UseMultiStepFormDataOptions<\r\n TSchema extends AnyMultiStepFormSchema,\r\n TTarget extends keyof MultiStepFormSchema.resolvedStep<TSchema> = keyof MultiStepFormSchema.resolvedStep<TSchema>\r\n> = {\r\n targetStep: TTarget;\r\n};\r\nexport type UseMultiStepFormData<\r\n // step extends Step<casing>,\r\n // casing extends CasingType,\r\n // storageKey extends string,\r\n // resolvedStep extends ResolvedStep<step, casing>,\r\n // schema extends MultiStepFormSchema<\r\n // step,\r\n // casing,\r\n // storageKey\r\n // > = MultiStepFormSchema<step, casing, storageKey>,\r\n TSchema extends AnyMultiStepFormSchema,\r\n TResolvedStep extends MultiStepFormSchema.resolvedStep<TSchema> = MultiStepFormSchema.resolvedStep<TSchema>\r\n> = {\r\n /**\r\n * Returns the entire {@linkcode MultiStepFormSchema instance}.\r\n */\r\n (): TSchema;\r\n /**\r\n * Returns the data for the target step.\r\n * @param stepNumber The step number to return.\r\n * @throws {TypeError} If `options.stepNumber` is invalid.\r\n */\r\n <targetStep extends keyof TResolvedStep>(\r\n options: UseMultiStepFormDataOptions<TSchema, targetStep>\r\n ): MultiStepFormSchema.getData<TSchema, targetStep>;\r\n /**\r\n * Returns the specified data from the {@linkcode MultiStepFormSchema} instance via the callback's return.\r\n */\r\n <data>(selector: (schema: TSchema) => data): data;\r\n};\r\n\r\nexport function throwIfInvalidStepNumber<\r\n // step extends Step<casing>,\r\n // casing extends CasingType = DefaultCasing,\r\n // storageKey extends string = DefaultStorageKey,\r\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\r\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\r\n schema extends AnyMultiStepFormSchema\r\n>(schema: schema, targetStep: unknown) {\r\n invariant(\r\n typeof targetStep === 'string',\r\n `The target step must be a string, was ${typeof targetStep}`\r\n );\r\n\r\n const { as, isValidStepNumber } = schema.stepSchema.steps;\r\n const formatter = new Intl.ListFormat('en', {\r\n type: 'disjunction',\r\n style: 'long',\r\n });\r\n const formattedStepNumbersList = formatter.format(as('array.string.untyped'));\r\n\r\n invariant(\r\n VALIDATED_STEP_REGEX.test(targetStep),\r\n `The target step must match the following format: \"step{number}\". Available steps are ${formattedStepNumbersList}`\r\n );\r\n\r\n const stepNumber = Number.parseInt(targetStep.replace('step', ''));\r\n\r\n invariant(\r\n isValidStepNumber(stepNumber),\r\n `The step number \"${stepNumber}\" is not a valid step number. Valid step numbers include ${formattedStepNumbersList}`,\r\n TypeError\r\n );\r\n\r\n return stepNumber as MultiStepFormSchema.stepNumbers<schema>;\r\n}\r\n\r\nexport function createMultiStepFormDataHook<\r\n // step extends Step<casing>,\r\n // casing extends CasingType = DefaultCasing,\r\n // storageKey extends string = DefaultStorageKey,\r\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\r\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\r\n schema extends AnyMultiStepFormSchema\r\n>(schema: schema): UseMultiStepFormData<schema> {\r\n function useMultiStepFormData(\r\n optionsOrSelector?:\r\n | UseMultiStepFormDataOptions<schema>\r\n | ((data: schema) => unknown)\r\n ) {\r\n return useSyncExternalStoreWithSelector(\r\n schema.subscribe,\r\n () => schema.getSnapshot(),\r\n () => schema.getSnapshot(),\r\n (snapshot) => {\r\n if (typeof optionsOrSelector === 'object') {\r\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\r\n const stepNumber = throwIfInvalidStepNumber(\r\n snapshot,\r\n optionsOrSelector.targetStep\r\n );\r\n\r\n return snapshot.stepSchema.get({ step: stepNumber as never }).data;\r\n }\r\n\r\n if (typeof optionsOrSelector === 'function') {\r\n return optionsOrSelector(snapshot);\r\n }\r\n\r\n return snapshot;\r\n }\r\n );\r\n }\r\n\r\n return useMultiStepFormData as any;\r\n}\r\n\r\nfunction useMultiStepFormData<schema extends AnyMultiStepFormSchema>(\r\n schema: schema\r\n): schema;\r\nfunction useMultiStepFormData<\r\n schema extends AnyMultiStepFormSchema,\r\n targetStep extends keyof MultiStepFormSchema.resolvedStep<schema>\r\n>(\r\n schema: schema,\r\n options: UseMultiStepFormDataOptions<schema, targetStep>\r\n): MultiStepFormSchema.getData<schema, targetStep>;\r\nfunction useMultiStepFormData<schema extends AnyMultiStepFormSchema, data>(\r\n schema: schema,\r\n selector: (schema: schema) => data\r\n): data;\r\nfunction useMultiStepFormData<\r\n // step extends Step<casing>,\r\n // casing extends CasingType = DefaultCasing,\r\n // storageKey extends string = DefaultStorageKey,\r\n // resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\r\n // stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>\r\n schema extends AnyMultiStepFormSchema\r\n>(\r\n schema: schema,\r\n optionsOrSelector?:\r\n | UseMultiStepFormDataOptions<schema>\r\n | ((data: schema) => unknown)\r\n) {\r\n const hook = createMultiStepFormDataHook(schema);\r\n\r\n if (typeof optionsOrSelector === 'object') {\r\n return hook(optionsOrSelector);\r\n }\r\n\r\n if (typeof optionsOrSelector === 'function') {\r\n return hook(optionsOrSelector);\r\n }\r\n\r\n return hook();\r\n}\r\n\r\nexport { useMultiStepFormData };\r\n","import { MultiStepFormStepSchema } from '@jfdevelops/multi-step-form';\r\nimport { type ComponentProps, type ReactNode } from 'react';\r\nimport {\r\n createMultiStepFormDataHook,\r\n throwIfInvalidStepNumber,\r\n UseMultiStepFormData,\r\n} from './hooks/use-multi-step-form-data';\r\nimport { MultiStepFormSchema, type AnyMultiStepFormSchema } from './schema';\r\nimport type {\r\n CreatedMultiStepFormComponent,\r\n CreateFunction,\r\n} from './step-schema';\r\n\r\ntype BaseOptions<\r\n TSchema extends AnyMultiStepFormSchema,\r\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>\r\n> = {\r\n /**\r\n * The step to return data from.\r\n */\r\n targetStep: TTargetStep;\r\n};\r\nexport type UseCurrentStepOptions<\r\n TSchema extends AnyMultiStepFormSchema,\r\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\r\n props,\r\n isDataGuaranteed extends boolean = false\r\n> = BaseOptions<TSchema, TTargetStep> & {\r\n /**\r\n * Determines if the result should follow \"strictness\".\r\n * The result will change based on the value for this option.\r\n *\r\n * - `true`: `data` is **defined** and `hasData` isn't available.\r\n * - `false`: `data` _can be_ `undefined`, but the `hasData` property is available\r\n * to help with type narrowing.\r\n *\r\n * @default false\r\n * @example\r\n * ### `true`\r\n * ```tsx\r\n * function MyComponent() {\r\n * const { data, NoCurrentData } = useCurrentStep({\r\n * stepNumber: 1,\r\n * isDataGuaranteed: true,\r\n * })\r\n *\r\n * // Notice how `NoCurrentData` is still available\r\n * // Do things with `data` here\r\n * }\r\n * ```\r\n *\r\n * ### `false` - The default\r\n * ```tsx\r\n * function MyComponent() {\r\n * const { data, NoCurrentData, hasData } = useCurrentStep({\r\n * stepNumber: 1,\r\n * })\r\n *\r\n * if (!hasData) {\r\n * return <NoCurrentData />\r\n * }\r\n *\r\n * // Do things with `data` here\r\n * }\r\n * ```\r\n */\r\n isDataGuaranteed?: isDataGuaranteed;\r\n /**\r\n * An optional transformation function to provide a custom not found message.\r\n */\r\n notFoundMessage?: CreateFunction<\r\n [ctx: BaseOptions<TSchema, TTargetStep>, props: props],\r\n ReactNode\r\n >;\r\n};\r\nexport interface UseCurrentStepBaseResult<TData = unknown, TProps = undefined> {\r\n /**\r\n * The current step's data.\r\n */\r\n data: TData | undefined;\r\n /**\r\n * Boolean indicating if the current step has data.\r\n */\r\n hasData: boolean;\r\n /**\r\n * Component to render some sort of error if `data` isn't defined.\r\n */\r\n NoCurrentData: CreatedMultiStepFormComponent<\r\n TProps extends undefined ? Omit<ComponentProps<'div'>, 'children'> : TProps\r\n >;\r\n}\r\nexport interface UseCurrentStepErrorResult<TData = unknown, TProps = undefined>\r\n extends UseCurrentStepBaseResult<TData, TProps> {\r\n data: undefined;\r\n hasData: false;\r\n}\r\nexport interface UseCurrentStepSuccessResult<\r\n TData = unknown,\r\n TProps = undefined\r\n> extends UseCurrentStepBaseResult<TData, TProps> {\r\n data: TData;\r\n hasData: true;\r\n}\r\nexport type UseCurrentStepResult<\r\n TSchema extends AnyMultiStepFormSchema,\r\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\r\n props,\r\n isDataGuaranteed extends boolean = false\r\n> = isDataGuaranteed extends true\r\n ? Omit<\r\n UseCurrentStepSuccessResult<\r\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\r\n props\r\n >,\r\n 'hasData'\r\n >\r\n :\r\n | UseCurrentStepErrorResult<\r\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\r\n props\r\n >\r\n | UseCurrentStepSuccessResult<\r\n MultiStepFormSchema.getData<TSchema, TTargetStep>,\r\n props\r\n >;\r\nexport type UseProgressBaseOptions<\r\n TSchema extends AnyMultiStepFormSchema,\r\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>\r\n> = BaseOptions<TSchema, TTargetStep> & {\r\n /**\r\n * The total amount of steps that are in the form.\r\n *\r\n * @default schema.stepData.steps.value.length\r\n */\r\n totalSteps?: number;\r\n /**\r\n * The highest value the progress indicator should go.\r\n *\r\n * @default 100\r\n */\r\n maxProgressValue?: number;\r\n};\r\nexport type UseProgressOptions<\r\n TSchema extends AnyMultiStepFormSchema,\r\n TTargetStep extends keyof MultiStepFormSchema.resolvedStep<TSchema>,\r\n props\r\n> = UseProgressBaseOptions<TSchema, TTargetStep> & {\r\n /**\r\n * An optional transformation function to provide a custom progress text.\r\n */\r\n progressTextTransformer?: CreateFunction<\r\n [ctx: Required<UseProgressBaseOptions<TSchema, TTargetStep>>, props],\r\n ReactNode\r\n >;\r\n};\r\nexport type UseProgressResult<props> = {\r\n /**\r\n * The value of the progress indicator.\r\n */\r\n value: number;\r\n /**\r\n * The highest value the progress indicator can be.\r\n *\r\n * @default 100\r\n */\r\n maxProgressValue: number;\r\n ProgressText: CreatedMultiStepFormComponent<\r\n props extends undefined ? Omit<ComponentProps<'div'>, 'children'> : props\r\n >;\r\n};\r\nexport type CreateHOC<TContext, TProps> = (\r\n ctx: TContext,\r\n props: TProps\r\n) => CreatedMultiStepFormComponent<TProps>;\r\n\r\nexport type MultiStepFormContextResult<\r\n TSchema extends AnyMultiStepFormSchema,\r\n TResolvedStep extends MultiStepFormSchema.resolvedStep<TSchema> = MultiStepFormSchema.resolvedStep<TSchema>\r\n> = {\r\n // MultiStepFormContext: schema;\r\n // MultiStepFormProvider: (props: { children: ReactNode }) => JSX.Element;\r\n // useMultiStepFormSchema: schema;\r\n useMultiStepFormData: UseMultiStepFormData<TSchema>;\r\n /**\r\n * Gets the data for the specified step.\r\n *\r\n * @returns The data for the given step number.\r\n */\r\n useCurrentStepData: <\r\n targetStep extends keyof TResolvedStep,\r\n props = undefined,\r\n isDataGuaranteed extends boolean = false\r\n >(\r\n options: UseCurrentStepOptions<TSchema, targetStep, props, isDataGuaranteed>\r\n ) => UseCurrentStepResult<TSchema, targetStep, props, isDataGuaranteed>;\r\n useProgress: <targetStep extends keyof TResolvedStep, props = undefined>(\r\n options: UseProgressOptions<TSchema, targetStep, props>\r\n ) => UseProgressResult<props>;\r\n /**\r\n * A hook that can be used to check if the form can be restarted. If no {@linkcode cb}\r\n * is provided, the return value will be dictated by if there is an object stored in\r\n * {@link MultiStepFormSchema#storage}.\r\n * @param cb A callback function to provide custom logic for if the form can restart.\r\n * @returns A boolean indicating if the form can restart.\r\n */\r\n useCanRestartForm: (cb?: (canRestart: boolean) => boolean) => boolean;\r\n /**\r\n * A HOC for creating a custom progress text for `useProgress`.\r\n * @param options Options for creating the HOC.\r\n * @param cb The callback function for creating the HOC.\r\n * @returns A HOC for the `progressTextTransformer` option of the `useProgress` hook.\r\n */\r\n withProgressText: <targetStep extends keyof TResolvedStep, props = undefined>(\r\n options: UseProgressBaseOptions<TSchema, targetStep>,\r\n cb: (\r\n ctx: Required<UseProgressBaseOptions<TSchema, targetStep>>,\r\n props: props\r\n ) => ReactNode\r\n ) => CreatedMultiStepFormComponent<props>;\r\n /**\r\n * A HOC for creating a custom not found component for when a step's data is `undefined`.\r\n * @param options Options for creating the HOC.\r\n * @param cb The callback function for creating the HOC.\r\n * @returns A HOC for the `notFoundMessage` option of the `useCurrentStep` hook.\r\n */\r\n withNoStepDataFound: <\r\n targetStep extends keyof TResolvedStep,\r\n props = undefined\r\n >(\r\n options: BaseOptions<TSchema, targetStep>,\r\n cb: (ctx: BaseOptions<TSchema, targetStep>, props: props) => ReactNode\r\n ) => CreatedMultiStepFormComponent<props>;\r\n};\r\n\r\nfunction createComponent<ctx>(ctx: ctx) {\r\n return function <props>(fn: CreateFunction<[ctx, props], ReactNode>) {\r\n return ((props: props) =>\r\n fn(ctx, props)) as CreatedMultiStepFormComponent<props>;\r\n };\r\n}\r\n\r\n/**\r\n * Create multi step form context with a {@linkcode MultiStepFormSchema} instance.\r\n * @param schema The {@linkcode MultiStepFormSchema} instance.\r\n */\r\n// export function createMultiStepFormContext<\r\n// schema extends AnyMultiStepFormSchema\r\n// >(schema: schema): MultiStepFormContextResult<schema>;\r\n// /**\r\n// * Create multi step form context without a {@linkcode MultiStepFormSchema} instance.\r\n// *\r\n// * The {@linkcode MultiStepFormSchema} instance is returned.\r\n// * @param options Options to create a new instance of {@linkcode MultiStepFormSchema}.\r\n// */\r\n// export function createMultiStepFormContext<\r\n// step extends Step<casing>,\r\n// casing extends CasingType = DefaultCasing,\r\n// storageKey extends string = DefaultStorageKey,\r\n// resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\r\n// stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\r\n// schema extends MultiStepFormSchema<\r\n// step,\r\n// casing,\r\n// storageKey,\r\n// resolvedStep,\r\n// stepNumbers\r\n// > = MultiStepFormSchema<step, casing, storageKey, resolvedStep, stepNumbers>\r\n// >(\r\n// options: MultiStepFormSchemaConfig<\r\n// step,\r\n// Constrain<casing, CasingType>,\r\n// storageKey\r\n// >\r\n// ): MultiStepFormContextResult<schema> & {\r\n// schema: MultiStepFormSchema<step, casing, storageKey>;\r\n// };\r\nexport function createMultiStepFormContext<\r\n schema extends AnyMultiStepFormSchema,\r\n resolvedStep extends MultiStepFormSchema.resolvedStep<schema> = MultiStepFormSchema.resolvedStep<schema>\r\n>(schema: schema): MultiStepFormContextResult<schema> {\r\n // const isInstance = schemaOrOptions instanceof MultiStepFormSchema;\r\n // const schema: schema = isInstance\r\n // ? schemaOrOptions\r\n // : createMultiStepFormSchema(schemaOrOptions);\r\n // const Context = createContext(schema);\r\n\r\n // function Provider({ children }: { children: ReactNode }) {\r\n // const [observer] = useState(() => new MultiStepFormObserver({ schema }));\r\n\r\n // useEffect(() => {\r\n // const unmount = schema.mount();\r\n\r\n // return () => {\r\n // unmount();\r\n // observer.destroy();\r\n // };\r\n // }, [observer]);\r\n\r\n // return <Context.Provider value={observer}>{children}</Context.Provider>;\r\n // }\r\n\r\n // function throwIfInvalidStepNumber(\r\n // schema: MultiStepFormSchema<step, casing, storageKey>,\r\n // stepNumber: number\r\n // ) {\r\n // const formatter = new Intl.ListFormat('en', {\r\n // type: 'disjunction',\r\n // style: 'long',\r\n // });\r\n // const { as, isValidStepNumber } = schema.stepSchema.steps;\r\n\r\n // invariant(\r\n // isValidStepNumber(stepNumber),\r\n // `The step number \"${stepNumber}\" is not a valid step number. Valid step numbers include ${formatter.format(\r\n // as('array.string.untyped')\r\n // )}`,\r\n // TypeError\r\n // );\r\n // }\r\n\r\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\r\n const useMultiStepFormData = createMultiStepFormDataHook(schema);\r\n\r\n function useCurrentStepData<\r\n targetStep extends keyof resolvedStep,\r\n props = undefined,\r\n isDataGuaranteed extends boolean = false\r\n >(\r\n options: UseCurrentStepOptions<schema, targetStep, props, isDataGuaranteed>\r\n ): UseCurrentStepResult<schema, targetStep, props, isDataGuaranteed> {\r\n const { targetStep, notFoundMessage, isDataGuaranteed } = options;\r\n const data = useMultiStepFormData({\r\n targetStep,\r\n });\r\n const NoDataFoundComponent = notFoundMessage\r\n ? withNoStepDataFound({ targetStep }, notFoundMessage)\r\n : (props: Omit<ComponentProps<'div'>, 'children'>) => (\r\n <div {...props}>No data found for step {String(targetStep)}</div>\r\n );\r\n\r\n if (isDataGuaranteed) {\r\n return {\r\n data,\r\n NoCurrentData: NoDataFoundComponent as never,\r\n } as never;\r\n }\r\n\r\n if (MultiStepFormStepSchema.hasData(data)) {\r\n return {\r\n data,\r\n hasData: true,\r\n NoCurrentData: NoDataFoundComponent as never,\r\n } as never;\r\n }\r\n\r\n return {\r\n data: undefined,\r\n hasData: false,\r\n NoCurrentData: NoDataFoundComponent as never,\r\n } as never;\r\n }\r\n\r\n function useProgress<\r\n targetStep extends keyof resolvedStep,\r\n props = undefined\r\n >(\r\n options: UseProgressOptions<schema, targetStep, props>\r\n ): UseProgressResult<props> {\r\n const steps = useMultiStepFormData(\r\n (data) => data.stepSchema.steps.value.length\r\n );\r\n const {\r\n targetStep,\r\n maxProgressValue = 100,\r\n totalSteps = steps,\r\n progressTextTransformer,\r\n } = options;\r\n const currentStep = throwIfInvalidStepNumber(schema, targetStep);\r\n const value = (currentStep / totalSteps) * maxProgressValue;\r\n const ProgressText = progressTextTransformer\r\n ? withProgressText(\r\n { targetStep, maxProgressValue, totalSteps },\r\n progressTextTransformer\r\n )\r\n : (props: Omit<ComponentProps<'div'>, 'children'>) => (\r\n <div {...props}>\r\n Step {currentStep}/{totalSteps}\r\n </div>\r\n );\r\n\r\n return {\r\n value,\r\n maxProgressValue,\r\n ProgressText: ProgressText as never,\r\n };\r\n }\r\n\r\n function useCanRestartForm(cb?: CreateFunction<[boolean], boolean>) {\r\n const storage = useMultiStepFormData((data) => data.storage);\r\n const value = storage.get();\r\n const canRestart = Boolean(\r\n value && typeof value === 'object' && Object.keys(value).length > 0\r\n );\r\n\r\n if (cb) {\r\n return cb(canRestart);\r\n }\r\n\r\n return canRestart;\r\n }\r\n\r\n function withProgressText<\r\n targetStep extends keyof resolvedStep,\r\n props = undefined\r\n >(\r\n options: UseProgressBaseOptions<schema, targetStep>,\r\n cb: (\r\n ctx: Required<UseProgressBaseOptions<schema, targetStep>>,\r\n props: props\r\n ) => ReactNode\r\n ) {\r\n const steps = schema.getSnapshot().stepSchema.steps.value.length;\r\n const { targetStep, maxProgressValue = 100, totalSteps = steps } = options;\r\n\r\n return createComponent({ targetStep, maxProgressValue, totalSteps })(cb);\r\n }\r\n\r\n function withNoStepDataFound<\r\n targetStep extends keyof resolvedStep,\r\n props = undefined\r\n >(\r\n options: BaseOptions<schema, targetStep>,\r\n cb: (ctx: BaseOptions<schema, targetStep>, props: props) => ReactNode\r\n ) {\r\n throwIfInvalidStepNumber(schema, options.targetStep);\r\n\r\n return createComponent(options)(cb);\r\n }\r\n\r\n return {\r\n // MultiStepFormContext: Context,\r\n useMultiStepFormData,\r\n useCurrentStepData,\r\n useProgress,\r\n useCanRestartForm,\r\n withProgressText,\r\n withNoStepDataFound,\r\n };\r\n}\r\n"],"names":["d","i","n","s","b","V","u","g","m","h","T","o","a","I","j","M","A","c","l","v","S","k","U","x","O","y","F","P","E","L","$","H","_","C","N","K","f","p","w","W","R","G","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","extraInput","fn","hookResults","value","result","error","errorMessage","alias","stepNumber","formatter","fields","update","defaultValue","label","nameTransformCasing","type","prev","input","createStepSpecificComponentImpl","impl","optionsOrFn","createStepSpecificComponent","useFormInstance","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.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 I(n, ...e) {\n return () => String.raw({ raw: n }, ...e);\n}\nfunction u(n, e, t = Error) {\n if (!n) {\n const s = typeof e == \"function\" ? e() : I`${e}`();\n throw new t(s);\n }\n}\nconst d = \"MultiStepFormSchema\";\nclass O {\n debug;\n prefix = d;\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: s = d,\n throwOnError: i = !1\n } = e;\n this.includeTimestamp = t, this.prefix = typeof s == \"string\" ? s : s(d), 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: s, wrapWith: i } = e;\n if (t === \"replace\")\n return this.wrapValue(i ?? \"[]\", s);\n const { delimiter: r } = e;\n return t === \"append\" ? `${this.wrapValue(\n i?.originalPrefix ?? \"[]\",\n this.prefix\n )}${r}${this.wrapValue(\n i?.addedPrefix ?? \"[]\",\n s\n )}`.trim() : t === \"prepend\" ? `${this.wrapValue(\n i?.addedPrefix ?? \"[]\",\n s\n )}${r}${this.wrapValue(\n i?.originalPrefix ?? \"[]\",\n this.prefix\n )}`.trim() : this.prefix;\n }\n formatMessage(e, t, s) {\n const {\n includeTimestamp: i = this.includeTimestamp,\n prefix: r,\n logLevelOptions: o\n } = s ?? {}, a = this.formatPrefix(r), c = this.wrapValue(\n o?.wrapWith ?? \"[]\",\n (o?.level ?? e).toUpperCase()\n ), l = `${a} ${c} ${t}`;\n return i ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ${l}` : l;\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 s = this.formatMessage(\"error\", e, t);\n if (console.error(s), t?.throw ?? this.throwOnError)\n throw new Error(s);\n }\n}\nconst w = '\"window\" in undefined. No storage is available', y = \"MultiStepForm\";\nclass k {\n key;\n store;\n data;\n log;\n isWindowUndefined;\n constructor(e) {\n const { key: t, data: s, store: i } = e;\n this.log = new O({\n prefix: y\n }), this.key = t, this.data = s, i ? (this.store = i, this.isWindowUndefined = !1) : typeof window < \"u\" ? (this.store = window.localStorage, this.isWindowUndefined = !1) : (this.isWindowUndefined = !0, this.log.warn(w));\n }\n throwOnEmptyStore() {\n u(this.store, () => this.isWindowUndefined ? w : \"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 M = [\n \"sentence\",\n \"title\",\n \"camel\",\n \"lower\",\n \"upper\",\n \"pascal\",\n \"snake\",\n \"screaming-snake\",\n \"flat\",\n \"kebab\"\n], N = \"title\";\nfunction U(n, e) {\n const t = n.replace(/([a-z])([A-Z])/g, \"$1 $2\").replace(/[-_]+/g, \" \").trim().split(/\\s+/).map((s) => s.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((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(\" \");\n case \"camel\":\n return t[0] + t.slice(1).map((s) => s.charAt(0).toUpperCase() + s.slice(1)).join(\"\");\n case \"pascal\":\n return t.map((s) => s.charAt(0).toUpperCase() + s.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 G(n, e = '\"') {\n const t = n.startsWith(e), s = n.endsWith(e);\n if (t && s)\n return n;\n const i = n.replace(/^['\"]|['\"]$/g, \"\");\n return `${e}${i}${e}`;\n}\nfunction b(n) {\n return typeof n != \"string\" ? !1 : M.includes(n);\n}\nfunction x(n, e = N) {\n return b(n) ? n : e;\n}\nconst A = [\n \"string\",\n \"string.phone\",\n \"string.email\",\n \"string.time\",\n \"number\",\n \"number.counter\",\n \"date\",\n \"dateTime\",\n \"boolean.switch\"\n], $ = \"string\";\nfunction P(n) {\n return typeof n == \"string\" && A.includes(n);\n}\nfunction V(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 g {\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}\nfunction T(n, e, t) {\n const s = [], i = new Set(n), r = t ? t.format(n.map((a) => `${a}`)) : `[${n.join(\", \")}]`;\n for (let a = 0; a < e.length; a++) {\n const c = e[a];\n i.has(c) || s.push(\n `Extra element at index ${a}: \"${c}\" is not in ${r}`\n );\n }\n return e.some((a) => i.has(a)) || s.push(\n `Array must contain at least one valid element from ${r}`\n ), s.length > 0 ? { status: \"error\", errors: s } : { status: \"success\" };\n}\nfunction j(n) {\n return n.map((e, t) => `❌ ${t + 1}. ${e}`).join(`\n`);\n}\nfunction p(n) {\n u(n.includes(\"step\"), \"Can't extract a valid step number since\");\n const e = n.replace(\"step\", \"\");\n return u(/^\\d+$/.test(e), `Invalid step format: \"${n}\"`), Number.parseInt(e, 10);\n}\nfunction m(n) {\n return function(e) {\n const { step: t } = e, s = `step${t}`, i = n[s];\n return { step: t, data: i };\n };\n}\nfunction E(n, e) {\n return e.reduce((t, s) => {\n const i = p(s), { data: r } = m(n)({\n step: i\n });\n for (const [o, a] of Object.entries(r))\n typeof a == \"function\" && o !== \"update\" || (r[o] = a);\n return t[s] = r, t;\n }, {});\n}\nfunction L(n, e) {\n const t = new Intl.ListFormat(\"en\", {\n style: \"long\",\n type: \"disjunction\"\n }), s = Object.keys(n), i = () => `\"stepData\" must be set to an array of available steps (${t.format(\n s\n )})`;\n if (e === \"all\") {\n let r = {};\n for (const o of s)\n r = {\n ...r,\n [o]: m(n)({\n step: p(o)\n })\n };\n return Object.fromEntries(\n s.map((o) => [\n o,\n m(n)({\n step: p(o)\n })\n ])\n );\n }\n if (Array.isArray(e))\n return u(\n e.every((r) => s.includes(r)),\n () => {\n const r = T(\n e,\n s.map((o) => p(o)),\n t\n );\n return r.status === \"error\" ? `${i()}. See errors:\n ${j(\n r.errors\n )}` : i();\n }\n ), E(\n n,\n e\n );\n if (typeof e == \"object\") {\n const r = Object.keys(e);\n return u(\n r.every((o) => s.includes(o)),\n () => {\n const o = T(\n r,\n s,\n t\n );\n return o.status === \"error\" ? `${i()}. See errors:\n ${j(\n o.errors\n )}` : i();\n }\n ), E(\n n,\n r\n );\n }\n throw new Error(`${i()} OR to \"all\"`);\n}\nfunction v(n, e) {\n return typeof n == \"function\" ? n(e) : n;\n}\nconst _ = [\n \"string\",\n \"number\",\n \"array.string\",\n \"array.string.untyped\"\n], W = /^step\\d+$/i;\nfunction F(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 s = e[t], i = n[t];\n if (!s(i)) return !1;\n }\n return !0;\n}\nfunction C(n, e, t) {\n return n ?? U(e, t);\n}\nfunction K(n) {\n const e = {}, { fields: t, defaultCasing: s, validateFields: i } = n;\n for (const [r, o] of Object.entries(t)) {\n u(\n typeof r == \"string\",\n `Each key for the \"fields\" option must be a string. Key ${r} was a ${typeof r}`\n ), u(\n typeof o == \"object\",\n `The value for key ${r} must be an object. Was ${typeof o}`\n );\n const {\n defaultValue: a,\n label: c,\n nameTransformCasing: l,\n type: f = $\n } = o;\n if (i)\n e[r] = a;\n else {\n const h = l ?? s;\n e[r] = {\n ...e[r],\n nameTransformCasing: h,\n type: f,\n defaultValue: a,\n label: C(c, r, h)\n // TODO add more fields here\n };\n }\n }\n if (i) {\n const r = V(\n i,\n e\n );\n u(\n typeof r == \"object\",\n `The result of the validated fields must be an object, was (${typeof r}). This is probably an internal error, so open up an issue about it`\n ), u(\n !!r,\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 [o, a] of Object.entries(r)) {\n const c = t[o];\n u(\n c,\n `No field found in the fields config for \"${o}\"`\n );\n const {\n label: l,\n type: f = $,\n nameTransformCasing: h\n } = c, S = h ?? s;\n e[o] = {\n ...e[o],\n nameTransformCasing: S,\n type: f,\n defaultValue: a,\n label: C(l, o, S)\n };\n }\n }\n return e;\n}\nfunction D(n) {\n const e = {};\n u(!!n, \"The steps config must be defined\", TypeError), u(\n typeof n == \"object\",\n `The steps config must be an object, was (${typeof n})`,\n TypeError\n );\n for (const [t, s] of Object.entries(n)) {\n u(\n typeof t == \"string\",\n `Each key for the step config must be a string. Key \"${t}\" was ${typeof t} `,\n TypeError\n ), u(\n W.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: r,\n title: o,\n nameTransformCasing: a = N,\n description: c,\n validateFields: l\n } = s, f = i.toString().replace(\"step\", \"\");\n u(\n r,\n `Missing fields for step ${f} (${String(i)})`,\n TypeError\n ), u(\n typeof r == \"object\",\n \"Fields must be an object\",\n TypeError\n ), u(\n Object.keys(r).length > 0,\n `The fields config for step ${f} (${String(\n i\n )}) is empty. Please add a field`\n ), u(\n typeof r == \"object\",\n `The \"fields\" property must be an object. Was ${typeof r}`\n );\n const h = K({\n defaultCasing: a,\n fields: r,\n validateFields: l\n });\n e[i] = {\n ...e[i],\n title: o,\n nameTransformCasing: a,\n // Only add the description if it's defined\n ...typeof c == \"string\" ? { description: c } : {},\n fields: h\n };\n }\n return e;\n}\nclass H extends g {\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: s, storage: i } = e;\n this.defaultNameTransformationCasing = x(\n s\n ), this.original = t, this.value = this.enrichValues(D(this.original)), this.stepNumbers = Object.keys(this.value).map(\n (r) => Number.parseInt(r.replace(\"step\", \"\"))\n ), this.storage = new k({\n data: this.value,\n key: i?.key ?? y,\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: (r) => {\n if (u(\n typeof r == \"string\",\n `The type of the target transformation type must be a string, was ${typeof r}`\n ), r === \"string\")\n return this.stepNumbers.map((o) => `'${o}'`).join(\" | \");\n if (r === \"number\")\n return this.stepNumbers.join(\" | \");\n if (r.includes(\"array.string\"))\n return this.stepNumbers.map((o) => `${o}`);\n throw new Error(\n `Transformation type \"${r}\" is not supported. Available transformations include: ${_.map(\n (o) => `\"${o}\"`\n ).join(\", \")}`\n );\n },\n isValidStepNumber: (r) => this.stepNumbers.includes(r),\n isValidStepKey: (r) => Object.keys(this.value).includes(r)\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 [s, i] of Object.entries(e)) {\n const r = Number.parseInt(s.replace(\"step\", \"\"));\n e = {\n ...e,\n [s]: {\n ...i,\n update: this.createStepUpdaterFn(r),\n createHelperFn: this.createStepHelperFn(r),\n ...t?.(r)\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 createStepUpdaterFnImpl(e, t, s) {\n const i = this.stepNumbers;\n u(\n typeof e == \"number\",\n `Type of step must be a number, was ${typeof e}`,\n TypeError\n ), u(\n i.includes(e),\n `The target step ${e} is not valid. Valid steps include \"${i.join(\n \", \"\n )}\"`\n );\n const r = `step${e}`;\n if (typeof t == \"string\") {\n u(this.value[r], `No data found for step ${e}`), u(\n typeof this.value[r] == \"object\",\n `The values for step ${e} is not an object, was ${typeof this.value[r]}`\n ), u(\n t in this.value[r],\n `The field ${t} is not a valid field. Valid fields include ${Object.keys(\n this.value[r]\n ).join(\", \")}`\n ), this.value = {\n ...this.value,\n [r]: {\n ...this.value[r],\n [t]: v(\n s,\n this.value[r][t]\n )\n }\n }, this.handlePostUpdate();\n return;\n }\n if (typeof t == \"object\" || typeof t == \"function\") {\n const o = v(\n t,\n this.value[r]\n );\n u(\n typeof o == \"object\",\n `The updated data must be an object, was ${typeof o}`\n ), this.value = {\n ...this.value,\n [r]: {\n ...this.value[r],\n ...o\n }\n }, this.handlePostUpdate();\n return;\n }\n throw new TypeError(\n `The second parameter must be one of the following: a specific field to update (string), an object with the updated data, or a function that returns the updated data. It was ${typeof t}`,\n { cause: t }\n );\n }\n createStepUpdaterFn(e) {\n return (t, s) => {\n this.createStepUpdaterFnImpl(\n e,\n t,\n s\n );\n };\n }\n update(e, t, s) {\n this.createStepUpdaterFnImpl(e, t, s);\n }\n createStepHelperFnImpl(e) {\n return (t, s) => {\n const i = L(\n this.value,\n e\n );\n if (typeof t == \"function\")\n return () => t({ ctx: i });\n if (typeof t == \"object\")\n return (r) => \"validator\" in t ? (u(\n typeof r == \"object\",\n \"An input is expected since you provided a validator\"\n ), V(\n t.validator,\n r.data\n ), s({ ctx: i, ...r })) : s({ ctx: i });\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: s, ...i } = e;\n return this.createStepHelperFnImpl(s)(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 : F(e, {\n title: (s) => typeof s == \"string\",\n fields: (s) => {\n if (s === null || typeof s != \"object\")\n return !1;\n for (const i of Object.keys(s)) {\n if (typeof i != \"string\" || !(i in s))\n return !1;\n const r = s[i];\n if (r === null || typeof r != \"object\" || !F(r, {\n defaultValue: (a) => a !== \"undefined\" && a !== null,\n label: (a) => typeof a == \"string\" || typeof a == \"boolean\" && !a,\n nameTransformCasing: b,\n type: P\n }))\n return !1;\n }\n return !0;\n },\n createHelperFn: (s) => typeof s == \"function\",\n update: (s) => typeof s == \"function\",\n nameTransformCasing: b,\n ...t?.optionalKeysToCheck\n });\n }\n}\nclass R extends g {\n defaultNameTransformationCasing;\n stepSchema;\n storage;\n mountCount = 0;\n constructor(e) {\n super();\n const { steps: t, nameTransformCasing: s, storage: i } = e;\n this.defaultNameTransformationCasing = x(\n s\n ), this.stepSchema = new H({\n steps: t,\n nameTransformCasing: this.defaultNameTransformationCasing\n }), this.storage = new k({\n key: i?.key ?? y,\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 Y(n) {\n return new R(n);\n}\nclass z extends g {\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 M as CASING_TYPES,\n N as DEFAULT_CASING,\n $ as DEFAULT_FIELD_TYPE,\n d as DEFAULT_LOGGER_PREFIX,\n y as DEFAULT_STORAGE_KEY,\n A as FIELD_TYPES,\n O as MultiStepFormLogger,\n z as MultiStepFormObserver,\n R as MultiStepFormSchema,\n H as MultiStepFormStepSchema,\n k as MultiStepFormStorage,\n W as VALIDATED_STEP_REGEX,\n U as changeCasing,\n L as createCtx,\n Y as createMultiStepFormSchema,\n D as createStep,\n u as invariant,\n b as isCasingValid,\n P as isFieldType,\n G 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 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\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 * @param field The field to update.\n * @param updater The new value for the specified field.\n */\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\n > = CreateComponent<\n Input<TResolvedStep, TSteps, TChosenSteps, TAdditionalCtx> &\n formComponent<\n TResolvedStep,\n TSteps,\n TChosenSteps,\n TFormAlias,\n TFormProps,\n TFormEnabledFor\n > &\n TAdditionalInput,\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 = {}\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,\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 if (form) {\n const {\n alias = MultiStepFormSchemaConfig.DEFAULT_FORM_ALIAS,\n ...rest\n } = form;\n const enabledFor = rest.enabledForSteps ?? 'all';\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 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 update(\n 'fields' as never,\n (prev) =>\n ({\n ...(prev as Record<string, unknown>),\n [name]: {\n ...((prev as Record<string, unknown>)[name] as Record<\n string,\n unknown\n >),\n defaultValue: value,\n },\n } as never)\n ),\n };\n });\n\n let input = {\n ctx,\n onInputChange: this.createStepUpdaterFn(stepNumber as stepNumbers),\n Field,\n ...hookResults,\n };\n\n if (\n MultiStepFormSchemaConfig.isFormAvailable(\n stepData as never,\n enabledFor as never\n )\n ) {\n input = {\n ...input,\n [alias]: this.createFormComponent(rest, defaultId),\n };\n }\n\n return fn(input, props);\n }\n\n return fn(\n {\n ctx,\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.nonStepSpecific\n ): <props>(\n fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenStep, props>\n ) => CreatedMultiStepFormComponent<props>;\n private createComponentImpl<\n chosenStep extends HelperFnChosenSteps<resolvedStep, stepNumbers>\n >(\n stepData: chosenStep,\n config: CreateComponentImplConfig.stepSpecificConfig<\n resolvedStep,\n formAlias,\n formEnabledFor,\n formProps\n >\n ): StepSpecificCreateComponentFn<\n resolvedStep,\n stepNumbers,\n chosenStep,\n formAlias,\n formProps,\n formEnabledFor\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 this.createComponentImpl(options.stepData, {\n isStepSpecific: false,\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":["I","n","u","s","d","O","i","r","o","a","c","l","w","y","k","M","N","U","b","x","A","$","P","V","g","T","j","p","m","E","L","v","_","W","F","C","K","f","h","S","D","H","R","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","alias","stepNumber","formatter","fields","update","defaultValue","label","nameTransformCasing","type","prev","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]}