@jfdevelops/react-multi-step-form 1.0.0-alpha.21 → 1.0.0-alpha.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/field.cjs CHANGED
@@ -1,13 +1,21 @@
1
+ let react = require("react");
1
2
 
2
3
  //#region src/field.tsx
3
4
  let field;
4
5
  (function(_field) {
5
- function create(propsCreator) {
6
- const Field = (props) => {
6
+ function create(propsCreator, subscribe, getValue) {
7
+ return (0, react.memo)((props) => {
7
8
  const { children, name } = props;
8
- return children(propsCreator(name));
9
- };
10
- return Field;
9
+ const subscribeFn = subscribe || (() => () => {});
10
+ const getValueFn = getValue || (() => void 0);
11
+ const currentValue = (0, react.useSyncExternalStore)(subscribeFn, () => getValueFn(name), () => getValueFn(name));
12
+ let createdProps = propsCreator(name);
13
+ if (getValue) createdProps = {
14
+ ...createdProps,
15
+ defaultValue: currentValue
16
+ };
17
+ return children(createdProps);
18
+ }, (prevProps, nextProps) => prevProps.name === nextProps.name);
11
19
  }
12
20
  _field.create = create;
13
21
  })(field || (field = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"field.cjs","names":["Field: field.component<TResolvedStep, TTargetStep>"],"sources":["../src/field.tsx"],"sourcesContent":["import type {\n AnyResolvedStep,\n fields,\n Override,\n Updater,\n} from '@jfdevelops/multi-step-form-core';\nimport type { ReactNode } from 'react';\n\nexport namespace field {\n type sharedProps<TField extends string> = {\n /**\n * The name of the field.\n */\n name: TField;\n };\n\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>,\n TValue extends fields.resolveDeepPath<\n TResolvedStep,\n TTargetStep,\n TField\n > = fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n > = sharedProps<TField> &\n Override<\n fields.get<TResolvedStep, TTargetStep>[fields.parentOf<TField>],\n 'defaultValue',\n TValue\n > & {\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<TValue>) => void;\n /**\n * Resets the field's value to the original value that was\n * defined in the config.\n */\n reset: () => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>\n > = sharedProps<TField> & {\n children: (\n props: childrenProps<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n > = <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n props: props<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n\n /**\n * Create a field.\n * @param propsCreator\n * @returns\n */\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n >(\n propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => field.childrenProps<TResolvedStep, TTargetStep, TField>\n ) {\n const Field: field.component<TResolvedStep, TTargetStep> = (props) => {\n const { children, name } = props;\n const createdProps = propsCreator(name);\n\n return children(createdProps);\n };\n\n return Field;\n }\n}\n"],"mappings":";;;;CA+DS,SAAS,OAId,cAGA;EACA,MAAMA,SAAsD,UAAU;GACpE,MAAM,EAAE,UAAU,SAAS;AAG3B,UAAO,SAFc,aAAa,KAAK,CAEV;;AAG/B,SAAO"}
1
+ {"version":3,"file":"field.cjs","names":[],"sources":["../src/field.tsx"],"sourcesContent":["import type {\n AnyResolvedStep,\n fields,\n Override,\n Updater,\n} from '@jfdevelops/multi-step-form-core';\nimport type { ReactNode } from 'react';\nimport { memo, useSyncExternalStore } from 'react';\n\nexport namespace field {\n type sharedProps<TField extends string> = {\n /**\n * The name of the field.\n */\n name: TField;\n };\n\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>,\n TValue extends fields.resolveDeepPath<\n TResolvedStep,\n TTargetStep,\n TField\n > = fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n > = sharedProps<TField> &\n Override<\n fields.get<TResolvedStep, TTargetStep>[fields.parentOf<TField>],\n 'defaultValue',\n TValue\n > & {\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<TValue>) => void;\n /**\n * Resets the field's value to the original value that was\n * defined in the config.\n */\n reset: () => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>\n > = sharedProps<TField> & {\n children: (\n props: childrenProps<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n > = <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n props: props<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n\n /**\n * Create a field.\n * @param propsCreator\n * @param subscribe - Optional subscription function for reactivity\n * @param getValue - Optional function to get the current field value reactively\n * @returns\n */\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n >(\n propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => field.childrenProps<TResolvedStep, TTargetStep, TField>,\n subscribe?: (listener: () => void) => () => void,\n getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n ) {\n const Field: field.component<TResolvedStep, TTargetStep> = memo(\n (props) => {\n const { children, name } = props;\n\n // Always call the hook, but use no-op functions if subscribe/getValue aren't provided\n const subscribeFn = subscribe || (() => () => {});\n const getValueFn = getValue || (() => undefined);\n\n // Subscribe to changes to trigger rerenders\n const currentValue = useSyncExternalStore(\n subscribeFn,\n () => getValueFn(name),\n () => getValueFn(name)\n );\n\n let createdProps = propsCreator(name);\n\n // If getValue is provided, override defaultValue with the reactive value\n if (getValue) {\n createdProps = {\n ...createdProps,\n defaultValue: currentValue,\n } as typeof createdProps;\n }\n\n return children(createdProps);\n },\n // Custom comparison: only compare the `name` prop\n // The `children` function will always be a new reference, but that's okay\n // because we only re-render when the field value changes (via useSyncExternalStore)\n // or when the `name` prop changes\n (prevProps, nextProps) => prevProps.name === nextProps.name\n );\n\n return Field;\n }\n}\n"],"mappings":";;;;;CAkES,SAAS,OAId,cAGA,WACA,UAGA;AAmCA,0BAjCG,UAAU;GACT,MAAM,EAAE,UAAU,SAAS;GAG3B,MAAM,cAAc,0BAA0B;GAC9C,MAAM,aAAa,mBAAmB;GAGtC,MAAM,+CACJ,mBACM,WAAW,KAAK,QAChB,WAAW,KAAK,CACvB;GAED,IAAI,eAAe,aAAa,KAAK;AAGrC,OAAI,SACF,gBAAe;IACb,GAAG;IACH,cAAc;IACf;AAGH,UAAO,SAAS,aAAa;MAM9B,WAAW,cAAc,UAAU,SAAS,UAAU,KACxD"}
package/dist/field.d.cts CHANGED
@@ -28,9 +28,11 @@ declare namespace field {
28
28
  /**
29
29
  * Create a field.
30
30
  * @param propsCreator
31
+ * @param subscribe - Optional subscription function for reactivity
32
+ * @param getValue - Optional function to get the current field value reactively
31
33
  * @returns
32
34
  */
33
- export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
35
+ export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>, subscribe?: (listener: () => void) => () => void, getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
34
36
  export {};
35
37
  }
36
38
  //#endregion
package/dist/field.d.mts CHANGED
@@ -28,9 +28,11 @@ declare namespace field {
28
28
  /**
29
29
  * Create a field.
30
30
  * @param propsCreator
31
+ * @param subscribe - Optional subscription function for reactivity
32
+ * @param getValue - Optional function to get the current field value reactively
31
33
  * @returns
32
34
  */
33
- export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
35
+ export function create<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => field.childrenProps<TResolvedStep, TTargetStep, TField>, subscribe?: (listener: () => void) => () => void, getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>): component<TResolvedStep, TTargetStep>;
34
36
  export {};
35
37
  }
36
38
  //#endregion
package/dist/field.mjs CHANGED
@@ -1,12 +1,21 @@
1
+ import { memo, useSyncExternalStore } from "react";
2
+
1
3
  //#region src/field.tsx
2
4
  let field;
3
5
  (function(_field) {
4
- function create(propsCreator) {
5
- const Field = (props) => {
6
+ function create(propsCreator, subscribe, getValue) {
7
+ return memo((props) => {
6
8
  const { children, name } = props;
7
- return children(propsCreator(name));
8
- };
9
- return Field;
9
+ const subscribeFn = subscribe || (() => () => {});
10
+ const getValueFn = getValue || (() => void 0);
11
+ const currentValue = useSyncExternalStore(subscribeFn, () => getValueFn(name), () => getValueFn(name));
12
+ let createdProps = propsCreator(name);
13
+ if (getValue) createdProps = {
14
+ ...createdProps,
15
+ defaultValue: currentValue
16
+ };
17
+ return children(createdProps);
18
+ }, (prevProps, nextProps) => prevProps.name === nextProps.name);
10
19
  }
11
20
  _field.create = create;
12
21
  })(field || (field = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"field.mjs","names":["Field: field.component<TResolvedStep, TTargetStep>"],"sources":["../src/field.tsx"],"sourcesContent":["import type {\n AnyResolvedStep,\n fields,\n Override,\n Updater,\n} from '@jfdevelops/multi-step-form-core';\nimport type { ReactNode } from 'react';\n\nexport namespace field {\n type sharedProps<TField extends string> = {\n /**\n * The name of the field.\n */\n name: TField;\n };\n\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>,\n TValue extends fields.resolveDeepPath<\n TResolvedStep,\n TTargetStep,\n TField\n > = fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n > = sharedProps<TField> &\n Override<\n fields.get<TResolvedStep, TTargetStep>[fields.parentOf<TField>],\n 'defaultValue',\n TValue\n > & {\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<TValue>) => void;\n /**\n * Resets the field's value to the original value that was\n * defined in the config.\n */\n reset: () => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>\n > = sharedProps<TField> & {\n children: (\n props: childrenProps<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n > = <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n props: props<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n\n /**\n * Create a field.\n * @param propsCreator\n * @returns\n */\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n >(\n propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => field.childrenProps<TResolvedStep, TTargetStep, TField>\n ) {\n const Field: field.component<TResolvedStep, TTargetStep> = (props) => {\n const { children, name } = props;\n const createdProps = propsCreator(name);\n\n return children(createdProps);\n };\n\n return Field;\n }\n}\n"],"mappings":";;;CA+DS,SAAS,OAId,cAGA;EACA,MAAMA,SAAsD,UAAU;GACpE,MAAM,EAAE,UAAU,SAAS;AAG3B,UAAO,SAFc,aAAa,KAAK,CAEV;;AAG/B,SAAO"}
1
+ {"version":3,"file":"field.mjs","names":[],"sources":["../src/field.tsx"],"sourcesContent":["import type {\n AnyResolvedStep,\n fields,\n Override,\n Updater,\n} from '@jfdevelops/multi-step-form-core';\nimport type { ReactNode } from 'react';\nimport { memo, useSyncExternalStore } from 'react';\n\nexport namespace field {\n type sharedProps<TField extends string> = {\n /**\n * The name of the field.\n */\n name: TField;\n };\n\n export type childrenProps<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>,\n TValue extends fields.resolveDeepPath<\n TResolvedStep,\n TTargetStep,\n TField\n > = fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n > = sharedProps<TField> &\n Override<\n fields.get<TResolvedStep, TTargetStep>[fields.parentOf<TField>],\n 'defaultValue',\n TValue\n > & {\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<TValue>) => void;\n /**\n * Resets the field's value to the original value that was\n * defined in the config.\n */\n reset: () => void;\n };\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends fields.getDeep<TResolvedStep, TTargetStep>\n > = sharedProps<TField> & {\n children: (\n props: childrenProps<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n > = <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n props: props<TResolvedStep, TTargetStep, TField>\n ) => ReactNode;\n\n /**\n * Create a field.\n * @param propsCreator\n * @param subscribe - Optional subscription function for reactivity\n * @param getValue - Optional function to get the current field value reactively\n * @returns\n */\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep\n >(\n propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => field.childrenProps<TResolvedStep, TTargetStep, TField>,\n subscribe?: (listener: () => void) => () => void,\n getValue?: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(\n name: TField\n ) => fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>\n ) {\n const Field: field.component<TResolvedStep, TTargetStep> = memo(\n (props) => {\n const { children, name } = props;\n\n // Always call the hook, but use no-op functions if subscribe/getValue aren't provided\n const subscribeFn = subscribe || (() => () => {});\n const getValueFn = getValue || (() => undefined);\n\n // Subscribe to changes to trigger rerenders\n const currentValue = useSyncExternalStore(\n subscribeFn,\n () => getValueFn(name),\n () => getValueFn(name)\n );\n\n let createdProps = propsCreator(name);\n\n // If getValue is provided, override defaultValue with the reactive value\n if (getValue) {\n createdProps = {\n ...createdProps,\n defaultValue: currentValue,\n } as typeof createdProps;\n }\n\n return children(createdProps);\n },\n // Custom comparison: only compare the `name` prop\n // The `children` function will always be a new reference, but that's okay\n // because we only re-render when the field value changes (via useSyncExternalStore)\n // or when the `name` prop changes\n (prevProps, nextProps) => prevProps.name === nextProps.name\n );\n\n return Field;\n }\n}\n"],"mappings":";;;;;CAkES,SAAS,OAId,cAGA,WACA,UAGA;AAmCA,SAlC2D,MACxD,UAAU;GACT,MAAM,EAAE,UAAU,SAAS;GAG3B,MAAM,cAAc,0BAA0B;GAC9C,MAAM,aAAa,mBAAmB;GAGtC,MAAM,eAAe,qBACnB,mBACM,WAAW,KAAK,QAChB,WAAW,KAAK,CACvB;GAED,IAAI,eAAe,aAAa,KAAK;AAGrC,OAAI,SACF,gBAAe;IACb,GAAG;IACH,cAAc;IACf;AAGH,UAAO,SAAS,aAAa;MAM9B,WAAW,cAAc,UAAU,SAAS,UAAU,KACxD"}
@@ -1,7 +1,7 @@
1
1
  import { AnyResolvedStep as AnyResolvedStep$1, CreatedMultiStepFormComponent } from "./step-schema.mjs";
2
2
  import { Expand, HelperFnChosenSteps, StepNumbers, ValidStepKey } from "@jfdevelops/multi-step-form-core";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
3
  import { ComponentPropsWithRef, JSX } from "react";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
5
 
6
6
  //#region src/form-config.d.ts
7
7
  declare namespace MultiStepFormSchemaConfig {
@@ -0,0 +1,16 @@
1
+ let react = require("react");
2
+
3
+ //#region src/hooks/use-selector.ts
4
+ function createUseSelector(createCtx, subscribe) {
5
+ return (selector) => {
6
+ return (0, react.useSyncExternalStore)(subscribe, () => {
7
+ return selector(createCtx());
8
+ }, () => {
9
+ return selector(createCtx());
10
+ });
11
+ };
12
+ }
13
+
14
+ //#endregion
15
+ exports.createUseSelector = createUseSelector;
16
+ //# sourceMappingURL=use-selector.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-selector.cjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n return useSyncExternalStore(\n subscribe,\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n },\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n }\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;AACH,yCACE,iBACM;AAEJ,UAAO,SADY,WAAW,CACH;WAEvB;AAEJ,UAAO,SADY,WAAW,CACH;IAE9B"}
@@ -0,0 +1,9 @@
1
+ import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
2
+
3
+ //#region src/hooks/use-selector.d.ts
4
+ type UseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;
5
+ type SelectorFn<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = (ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>) => TSelected;
6
+ declare function createUseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): <selected>(selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>) => selected;
7
+ //#endregion
8
+ export { SelectorFn, UseSelector };
9
+ //# sourceMappingURL=use-selector.d.cts.map
@@ -0,0 +1,9 @@
1
+ import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
2
+
3
+ //#region src/hooks/use-selector.d.ts
4
+ type UseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;
5
+ type SelectorFn<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = (ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>) => TSelected;
6
+ declare function createUseSelector<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): <selected>(selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>) => selected;
7
+ //#endregion
8
+ export { SelectorFn, UseSelector };
9
+ //# sourceMappingURL=use-selector.d.mts.map
@@ -0,0 +1,16 @@
1
+ import { useSyncExternalStore } from "react";
2
+
3
+ //#region src/hooks/use-selector.ts
4
+ function createUseSelector(createCtx, subscribe) {
5
+ return (selector) => {
6
+ return useSyncExternalStore(subscribe, () => {
7
+ return selector(createCtx());
8
+ }, () => {
9
+ return selector(createCtx());
10
+ });
11
+ };
12
+ }
13
+
14
+ //#endregion
15
+ export { createUseSelector };
16
+ //# sourceMappingURL=use-selector.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-selector.mjs","names":[],"sources":["../../src/hooks/use-selector.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { useSyncExternalStore } from 'react';\n\nexport type UseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n> = ReturnType<typeof createUseSelector<TResolvedStep, TSteps, TChosenSteps>>;\nexport type SelectorFn<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n> = (\n ctx: Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>\n) => TSelected;\n\nexport function createUseSelector<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n>(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n) {\n return <selected>(\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, selected>\n ) => {\n return useSyncExternalStore(\n subscribe,\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n },\n () => {\n const currentCtx = createCtx();\n return selector(currentCtx);\n }\n );\n };\n}\n"],"mappings":";;;AAuBA,SAAgB,kBAKd,WACA,WACA;AACA,SACE,aACG;AACH,SAAO,qBACL,iBACM;AAEJ,UAAO,SADY,WAAW,CACH;WAEvB;AAEJ,UAAO,SADY,WAAW,CACH;IAE9B"}
@@ -0,0 +1,27 @@
1
+ const require_use_selector = require('./hooks/use-selector.cjs');
2
+ let react = require("react");
3
+ let react_jsx_runtime = require("react/jsx-runtime");
4
+
5
+ //#region src/selector.tsx
6
+ let selector;
7
+ (function(_selector) {
8
+ function create(createCtx, subscribe) {
9
+ const useSelector = require_use_selector.createUseSelector(createCtx, subscribe);
10
+ const Selector = ({ selector: selector$1, children }) => {
11
+ const selected = useSelector(selector$1);
12
+ if (children) return (0, react.createElement)(react_jsx_runtime.Fragment, null, children(selected));
13
+ return (0, react.createElement)(react_jsx_runtime.Fragment, null, String(selected ?? ""));
14
+ };
15
+ return (0, react.memo)(Selector, () => false);
16
+ }
17
+ _selector.create = create;
18
+ })(selector || (selector = {}));
19
+
20
+ //#endregion
21
+ Object.defineProperty(exports, 'selector', {
22
+ enumerable: true,
23
+ get: function () {
24
+ return selector;
25
+ }
26
+ });
27
+ //# sourceMappingURL=selector.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.cjs","names":["createUseSelector","Selector: component<TResolvedStep, TSteps, TChosenSteps>","selector","Fragment"],"sources":["../src/selector.tsx"],"sourcesContent":["import {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { createUseSelector, SelectorFn } from './hooks/use-selector';\nimport { Fragment } from 'react/jsx-runtime';\nimport { createElement, memo } from 'react';\n\nexport namespace selector {\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n > = {\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;\n children?: (selected: TSelected) => React.ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n > =\n /**\n * A component for reactively displaying a value from the form context.\n * Unlike `useSelector`, this component only re-renders itself, not the parent component.\n * Use this when you want to display a reactive value without causing parent re-renders.\n *\n * @param selector - A function that receives the current step's context and returns the selected value\n * @param children - Optional render prop that receives the selected value\n *\n * @example\n * <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>\n * {(value) => <p>First name: {value}</p>}\n * </Selector>\n */\n <TSelected>(\n props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>\n ) => React.ReactNode;\n\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n >(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n ) {\n const useSelector = createUseSelector(createCtx, subscribe);\n const Selector: component<TResolvedStep, TSteps, TChosenSteps> = ({\n selector,\n children,\n }) => {\n const selected = useSelector(selector);\n\n if (children) {\n return createElement(Fragment, null, children(selected));\n }\n return createElement(Fragment, null, String(selected ?? ''));\n };\n\n return memo(\n Selector,\n // Always return false to allow re-renders when the selected value changes\n // The memoization is just to prevent re-renders when parent re-renders\n () => false\n );\n }\n}\n"],"mappings":";;;;;;;CA2CS,SAAS,OAKd,WACA,WACA;EACA,MAAM,cAAcA,uCAAkB,WAAW,UAAU;EAC3D,MAAMC,YAA4D,EAChE,sBACA,eACI;GACJ,MAAM,WAAW,YAAYC,WAAS;AAEtC,OAAI,SACF,iCAAqBC,4BAAU,MAAM,SAAS,SAAS,CAAC;AAE1D,mCAAqBA,4BAAU,MAAM,OAAO,YAAY,GAAG,CAAC;;AAG9D,yBACE,gBAGM,MACP"}
@@ -0,0 +1,30 @@
1
+ import { SelectorFn } from "./hooks/use-selector.cjs";
2
+ import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
3
+ import * as react0 from "react";
4
+
5
+ //#region src/selector.d.ts
6
+ declare namespace selector {
7
+ type props<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = {
8
+ selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;
9
+ children?: (selected: TSelected) => React.ReactNode;
10
+ };
11
+ type component<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> =
12
+ /**
13
+ * A component for reactively displaying a value from the form context.
14
+ * Unlike `useSelector`, this component only re-renders itself, not the parent component.
15
+ * Use this when you want to display a reactive value without causing parent re-renders.
16
+ *
17
+ * @param selector - A function that receives the current step's context and returns the selected value
18
+ * @param children - Optional render prop that receives the selected value
19
+ *
20
+ * @example
21
+ * <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>
22
+ * {(value) => <p>First name: {value}</p>}
23
+ * </Selector>
24
+ */
25
+ <TSelected>(props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>) => React.ReactNode;
26
+ function create<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): react0.MemoExoticComponent<component<TResolvedStep, TSteps, TChosenSteps>>;
27
+ }
28
+ //#endregion
29
+ export { selector };
30
+ //# sourceMappingURL=selector.d.cts.map
@@ -0,0 +1,30 @@
1
+ import { SelectorFn } from "./hooks/use-selector.mjs";
2
+ import { AnyResolvedStep, Expand, HelperFnChosenSteps, HelperFnCtx, StepNumbers } from "@jfdevelops/multi-step-form-core";
3
+ import * as react0 from "react";
4
+
5
+ //#region src/selector.d.ts
6
+ declare namespace selector {
7
+ type props<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TSelected> = {
8
+ selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;
9
+ children?: (selected: TSelected) => React.ReactNode;
10
+ };
11
+ type component<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> =
12
+ /**
13
+ * A component for reactively displaying a value from the form context.
14
+ * Unlike `useSelector`, this component only re-renders itself, not the parent component.
15
+ * Use this when you want to display a reactive value without causing parent re-renders.
16
+ *
17
+ * @param selector - A function that receives the current step's context and returns the selected value
18
+ * @param children - Optional render prop that receives the selected value
19
+ *
20
+ * @example
21
+ * <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>
22
+ * {(value) => <p>First name: {value}</p>}
23
+ * </Selector>
24
+ */
25
+ <TSelected>(props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>) => React.ReactNode;
26
+ function create<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>>(createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>, subscribe: (listener: () => void) => () => void): react0.MemoExoticComponent<component<TResolvedStep, TSteps, TChosenSteps>>;
27
+ }
28
+ //#endregion
29
+ export { selector };
30
+ //# sourceMappingURL=selector.d.mts.map
@@ -0,0 +1,22 @@
1
+ import { createUseSelector } from "./hooks/use-selector.mjs";
2
+ import { createElement, memo } from "react";
3
+ import { Fragment } from "react/jsx-runtime";
4
+
5
+ //#region src/selector.tsx
6
+ let selector;
7
+ (function(_selector) {
8
+ function create(createCtx, subscribe) {
9
+ const useSelector = createUseSelector(createCtx, subscribe);
10
+ const Selector = ({ selector: selector$1, children }) => {
11
+ const selected = useSelector(selector$1);
12
+ if (children) return createElement(Fragment, null, children(selected));
13
+ return createElement(Fragment, null, String(selected ?? ""));
14
+ };
15
+ return memo(Selector, () => false);
16
+ }
17
+ _selector.create = create;
18
+ })(selector || (selector = {}));
19
+
20
+ //#endregion
21
+ export { selector };
22
+ //# sourceMappingURL=selector.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.mjs","names":["Selector: component<TResolvedStep, TSteps, TChosenSteps>","selector"],"sources":["../src/selector.tsx"],"sourcesContent":["import {\n AnyResolvedStep,\n StepNumbers,\n HelperFnChosenSteps,\n Expand,\n HelperFnCtx,\n} from '@jfdevelops/multi-step-form-core';\nimport { createUseSelector, SelectorFn } from './hooks/use-selector';\nimport { Fragment } from 'react/jsx-runtime';\nimport { createElement, memo } from 'react';\n\nexport namespace selector {\n export type props<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>,\n TSelected\n > = {\n selector: SelectorFn<TResolvedStep, TSteps, TChosenSteps, TSelected>;\n children?: (selected: TSelected) => React.ReactNode;\n };\n export type component<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n > =\n /**\n * A component for reactively displaying a value from the form context.\n * Unlike `useSelector`, this component only re-renders itself, not the parent component.\n * Use this when you want to display a reactive value without causing parent re-renders.\n *\n * @param selector - A function that receives the current step's context and returns the selected value\n * @param children - Optional render prop that receives the selected value\n *\n * @example\n * <Selector selector={(ctx) => ctx.step1.fields.firstName.defaultValue}>\n * {(value) => <p>First name: {value}</p>}\n * </Selector>\n */\n <TSelected>(\n props: props<TResolvedStep, TSteps, TChosenSteps, TSelected>\n ) => React.ReactNode;\n\n export function create<\n TResolvedStep extends AnyResolvedStep,\n TSteps extends StepNumbers<TResolvedStep>,\n TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>\n >(\n createCtx: () => Expand<HelperFnCtx<TResolvedStep, TSteps, TChosenSteps>>,\n subscribe: (listener: () => void) => () => void\n ) {\n const useSelector = createUseSelector(createCtx, subscribe);\n const Selector: component<TResolvedStep, TSteps, TChosenSteps> = ({\n selector,\n children,\n }) => {\n const selected = useSelector(selector);\n\n if (children) {\n return createElement(Fragment, null, children(selected));\n }\n return createElement(Fragment, null, String(selected ?? ''));\n };\n\n return memo(\n Selector,\n // Always return false to allow re-renders when the selected value changes\n // The memoization is just to prevent re-renders when parent re-renders\n () => false\n );\n }\n}\n"],"mappings":";;;;;;;CA2CS,SAAS,OAKd,WACA,WACA;EACA,MAAM,cAAc,kBAAkB,WAAW,UAAU;EAC3D,MAAMA,YAA4D,EAChE,sBACA,eACI;GACJ,MAAM,WAAW,YAAYC,WAAS;AAEtC,OAAI,SACF,QAAO,cAAc,UAAU,MAAM,SAAS,SAAS,CAAC;AAE1D,UAAO,cAAc,UAAU,MAAM,OAAO,YAAY,GAAG,CAAC;;AAG9D,SAAO,KACL,gBAGM,MACP"}
@@ -1,5 +1,7 @@
1
1
  const require_field = require('./field.cjs');
2
2
  const require_form_config = require('./form-config.cjs');
3
+ const require_use_selector = require('./hooks/use-selector.cjs');
4
+ const require_selector = require('./selector.cjs');
3
5
  const require_utils = require('./utils.cjs');
4
6
  let __jfdevelops_multi_step_form_core = require("@jfdevelops/multi-step-form-core");
5
7
  let __jfdevelops_multi_step_form_core__internals = require("@jfdevelops/multi-step-form-core/_internals");
@@ -43,12 +45,11 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
43
45
  const key = `step${step}`;
44
46
  const stepData = [key];
45
47
  const id = form?.id ?? key;
46
- const ctx = (0, __jfdevelops_multi_step_form_core.createCtx)(this.value, stepData);
47
48
  return { createComponent: this.createStepSpecificComponentFactory(stepData, {
48
49
  isStepSpecific: true,
49
50
  defaultId: id,
50
51
  form
51
- }, ctx) };
52
+ }) };
52
53
  });
53
54
  }
54
55
  createFormComponent(form, defaultId) {
@@ -59,18 +60,30 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
59
60
  };
60
61
  return (props) => render(ctx, props);
61
62
  }
62
- createStepSpecificComponentImpl(stepData, config, input, extraInput = {}) {
63
+ createResolvedCtx(options) {
64
+ const { logger, stepData, ctxData } = options;
65
+ let resolvedCtx = (0, __jfdevelops_multi_step_form_core.createCtx)(this.value, stepData);
66
+ if (ctxData) {
67
+ const [targetStep] = stepData;
68
+ const { [targetStep]: _, ...values } = this.value;
69
+ resolvedCtx = require_utils.resolvedCtxCreator(logger, values)({
70
+ ctx: resolvedCtx,
71
+ ctxData
72
+ });
73
+ }
74
+ return resolvedCtx;
75
+ }
76
+ createStepSpecificComponentImpl(stepData, config, extraConfig) {
63
77
  return (fn) => ((props) => {
64
- const hookResults = {};
65
- for (const [key, value] of Object.entries(extraInput)) if (typeof value === "function") try {
66
- hookResults[key] = value();
67
- } catch (error) {
68
- const errorMessage = error instanceof Error ? error.message : String(error);
69
- throw new Error(`[multi-step-form] Error calling hook "${key}" in useFormInstance.render: ${errorMessage}\n\nThis usually means:\n1. The hook is being called outside of a React component\n2. The hook has invalid dependencies or configuration\n3. There's an error in your hook implementation\n\nOriginal error: ${errorMessage}`, { cause: error });
70
- }
71
- else hookResults[key] = value;
78
+ const ctxData = extraConfig?.ctxData;
79
+ const logger = extraConfig?.logger ?? new __jfdevelops_multi_step_form_core.MultiStepFormLogger();
80
+ const resolvedCtx = this.createResolvedCtx({
81
+ stepData,
82
+ ctxData,
83
+ logger
84
+ });
85
+ const hookResults = require_utils.getValidatedCustomInputHooks(extraConfig?.input?.(resolvedCtx) ?? {});
72
86
  const { defaultId, form } = config;
73
- const { ctx } = input;
74
87
  const [step] = stepData;
75
88
  (0, __jfdevelops_multi_step_form_core.invariant)(this.steps.isValidStepKey(step), `[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.`);
76
89
  const stepNumber = Number.parseInt(step.replace("step", ""));
@@ -78,14 +91,14 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
78
91
  const current = this.value[step];
79
92
  (0, __jfdevelops_multi_step_form_core.invariant)("fields" in current, `[${step}:createComponent]: unable to find the "fields" for the current step`);
80
93
  (0, __jfdevelops_multi_step_form_core.invariant)(typeof current.fields === "object", `[${step}:createComponent]: the "fields" property must be an object, was ${typeof current.fields}`);
81
- const stepUpdater = this.#internal.createStepUpdaterFn(step);
82
94
  const Field = require_field.field.create((name) => {
83
- const currentFields = Object.keys(current.fields);
95
+ const currentStep = this.value[step];
96
+ const currentFields = Object.keys(currentStep.fields);
84
97
  (0, __jfdevelops_multi_step_form_core.invariant)(typeof name === "string", (formatter) => `[${step}:Field]: the "name" prop must be a string and a valid field for ${step}. Available fields include: "${formatter.format(currentFields)}"`);
85
- (0, __jfdevelops_multi_step_form_core.invariant)(name in current.fields, (formatter) => `[${step}:Field]: the field "${name}" doesn't exist for the current step. Available fields include: "${formatter.format(currentFields)}".`);
86
- (0, __jfdevelops_multi_step_form_core.invariant)("update" in current, `[${step}:Field]: No "update" function was found`);
98
+ (0, __jfdevelops_multi_step_form_core.invariant)(name in currentStep.fields, (formatter) => `[${step}:Field]: the field "${name}" doesn't exist for the current step. Available fields include: "${formatter.format(currentFields)}".`);
99
+ (0, __jfdevelops_multi_step_form_core.invariant)("update" in currentStep, `[${step}:Field]: No "update" function was found`);
87
100
  const defaultValue = this.getValue(step, name);
88
- const { label, nameTransformCasing, type } = current.fields[name];
101
+ const { label, nameTransformCasing, type } = currentStep.fields[name];
89
102
  const targetFields = `fields.${name}.defaultValue`;
90
103
  return {
91
104
  defaultValue,
@@ -108,12 +121,24 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
108
121
  targetStep: step
109
122
  })
110
123
  };
111
- });
124
+ }, this.subscribe, (name) => this.getValue(step, name));
125
+ const useSelector = require_use_selector.createUseSelector(() => this.createResolvedCtx({
126
+ stepData,
127
+ ctxData,
128
+ logger
129
+ }), this.subscribe);
130
+ const Selector = require_selector.selector.create(() => this.createResolvedCtx({
131
+ stepData,
132
+ ctxData,
133
+ logger
134
+ }), this.subscribe);
112
135
  let fnInput = {
113
- ctx,
114
- onInputChange: stepUpdater,
136
+ ctx: resolvedCtx,
137
+ onInputChange: this.#internal.createStepUpdaterFn(step),
115
138
  reset: this.#internal.createStepResetterFn(step),
116
139
  Field,
140
+ useSelector,
141
+ Selector,
117
142
  ...hookResults
118
143
  };
119
144
  if (form) {
@@ -131,23 +156,14 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
131
156
  }, props);
132
157
  });
133
158
  }
134
- createStepSpecificComponentFactory(stepData, config, ctx) {
159
+ createStepSpecificComponentFactory(stepData, config) {
135
160
  const createStepSpecificComponentImpl = this.createStepSpecificComponentImpl.bind(this);
136
161
  const createDefaultValues$1 = this.createDefaultValues.bind(this);
137
- const resolvedValues = this.value;
138
162
  const [targetStep] = stepData;
139
- const update = this.#internal.createStepUpdaterFn(targetStep).bind(this.#internal);
140
- const reset = this.#internal.createStepResetterFn(targetStep).bind(this.#internal);
141
163
  function impl(optionsOrFn, fn) {
142
- function createResolvedCtx(additionalCtx) {
143
- return additionalCtx ? { ctx: {
144
- ...ctx,
145
- ...additionalCtx
146
- } } : { ctx };
147
- }
148
164
  function createStepSpecificComponent() {
149
165
  (0, __jfdevelops_multi_step_form_core.invariant)(typeof optionsOrFn === "function", "The first argument must be a function");
150
- return createStepSpecificComponentImpl(stepData, config, createResolvedCtx(void 0))(optionsOrFn);
166
+ return createStepSpecificComponentImpl(stepData, config)(optionsOrFn);
151
167
  }
152
168
  if (typeof optionsOrFn === "object") {
153
169
  const { useFormInstance, ctxData, debug } = optionsOrFn;
@@ -158,34 +174,25 @@ var MultiStepFormStepSchema = class extends __jfdevelops_multi_step_form_core.Mu
158
174
  }
159
175
  });
160
176
  logger.info("First argument is an object");
161
- const { [targetStep]: _, ...values } = resolvedValues;
162
177
  (0, __jfdevelops_multi_step_form_core.invariant)(typeof fn === "function", "The second argument must be a function");
163
- const createdCtx = require_utils.resolvedCtxCreator(logger, values);
164
178
  if (useFormInstance) {
165
179
  const { render, alias = StepSpecificComponent.DEFAULT_FORM_INSTANCE_ALIAS } = useFormInstance;
166
180
  const [step] = stepData;
167
- const defaultValues = createDefaultValues$1(step);
168
- const resolvedCtx = ctxData ? createdCtx({
169
- ctx,
170
- ctxData
171
- }) : ctx;
172
- const renderInput = {
173
- ctx: resolvedCtx,
174
- defaultValues
175
- };
176
181
  return createStepSpecificComponentImpl(stepData, config, {
177
- ctx: resolvedCtx,
178
- update,
179
- reset
180
- }, { [alias]: () => render(renderInput) })(fn);
182
+ logger,
183
+ ctxData,
184
+ input: (ctx) => {
185
+ const defaultValues = createDefaultValues$1(step);
186
+ return { [alias]: () => render({
187
+ ctx,
188
+ defaultValues
189
+ }) };
190
+ }
191
+ })(fn);
181
192
  }
182
193
  if (ctxData) return createStepSpecificComponentImpl(stepData, config, {
183
- ctx: createdCtx({
184
- ctx,
185
- ctxData
186
- }),
187
- update,
188
- reset
194
+ logger,
195
+ ctxData
189
196
  })(fn);
190
197
  return createStepSpecificComponent();
191
198
  }