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

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,22 +1,23 @@
1
- import { AnyResolvedStep, StepNumbers, Updater, ValidStepKey } from '@jfdevelops/multi-step-form';
1
+ import { AnyResolvedStep, fields, Override, Updater } from '@jfdevelops/multi-step-form';
2
2
  import { ReactNode } from 'react';
3
3
  export declare namespace Field {
4
- type getFields<TResolvedStep extends AnyResolvedStep, TTargetStep extends StepNumbers<TResolvedStep>> = TResolvedStep[ValidStepKey<TTargetStep>]['fields'];
5
- type childrenProps<TResolvedStep extends AnyResolvedStep, TStepNumbers extends StepNumbers<TResolvedStep>, TTargetStep extends TStepNumbers, TFields extends getFields<TResolvedStep, TTargetStep>, TField extends keyof TFields> = getFields<TResolvedStep, TTargetStep>[TField] & {
4
+ type sharedProps<TField extends string> = {
6
5
  /**
7
6
  * The name of the field.
8
7
  */
9
8
  name: TField;
9
+ };
10
+ export type childrenProps<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep, TField extends fields.getDeep<TResolvedStep, TTargetStep>, TValue extends fields.resolveDeepPath<TResolvedStep, TTargetStep, TField> = fields.resolveDeepPath<TResolvedStep, TTargetStep, TField>> = sharedProps<TField> & Override<fields.get<TResolvedStep, TTargetStep>[fields.parentOf<TField>], 'defaultValue', TValue> & {
10
11
  /**
11
12
  * A useful wrapper around `update` to update the specific field.
12
13
  * @param value The new value for the field.
13
14
  */
14
- onInputChange: (value: Updater<TFields[TField]['defaultValue']>) => void;
15
+ onInputChange: (value: Updater<TValue>) => void;
15
16
  };
16
- type props<TResolvedStep extends AnyResolvedStep, TStepNumbers extends StepNumbers<TResolvedStep>, TTargetStep extends TStepNumbers, TFields extends getFields<TResolvedStep, TTargetStep>, TField extends keyof TFields> = {
17
- name: TField;
18
- children: (props: childrenProps<TResolvedStep, TStepNumbers, TTargetStep, TFields, TField>) => ReactNode;
17
+ export type props<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep, TField extends fields.getDeep<TResolvedStep, TTargetStep>> = sharedProps<TField> & {
18
+ children: (props: childrenProps<TResolvedStep, TTargetStep, TField>) => ReactNode;
19
19
  };
20
- type component<TResolvedStep extends AnyResolvedStep, TStepNumbers extends StepNumbers<TResolvedStep>, TTargetStep extends TStepNumbers> = <TFields extends getFields<TResolvedStep, TTargetStep>, TField extends keyof TFields>(props: props<TResolvedStep, TStepNumbers, TTargetStep, TFields, TField>) => ReactNode;
20
+ export type component<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep> = <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(props: props<TResolvedStep, TTargetStep, TField>) => ReactNode;
21
+ export {};
21
22
  }
22
- export declare function createField<TResolvedStep extends AnyResolvedStep, TStepNumbers extends StepNumbers<TResolvedStep>, TTargetStep extends TStepNumbers>(propsCreator: <TFields extends Field.getFields<TResolvedStep, TTargetStep>, TField extends keyof TFields>(name: TField) => Field.childrenProps<TResolvedStep, TStepNumbers, TTargetStep, TFields, TField>): <TFields extends Field.getFields<TResolvedStep, TTargetStep>, TField extends keyof TFields>(props: Field.props<TResolvedStep, TStepNumbers, TTargetStep, TFields, TField>) => ReactNode;
23
+ export declare function createField<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep>(propsCreator: <TField extends fields.getDeep<TResolvedStep, TTargetStep>>(name: TField) => Field.childrenProps<TResolvedStep, TTargetStep, TField>): Field.component<TResolvedStep, TTargetStep>;
@@ -22,6 +22,7 @@ export declare namespace MultiStepFormSchema {
22
22
  export interface MultiStepFormSchemaOptions<TStep extends Step<TCasing>, TCasing extends CasingType, TStorageKey extends string, TFormAlias extends string, TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>, TFormProps extends object, TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<TStep, TCasing>> extends MultiStepFormSchemaBaseOptions<TStep, TCasing, TStorageKey>, MultiStepFormSchemaConfig.Form<TResolvedStep, TFormAlias, TFormEnabledFor, TFormProps> {
23
23
  }
24
24
  export declare class MultiStepFormSchema<step extends Step<casing>, casing extends CasingType = DefaultCasing, storageKey extends string = DefaultStorageKey, formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias, formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor, formProps extends object = ComponentPropsWithRef<'form'>, resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>, stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>> extends MultiStepFormSchemaCore<step, casing, ResolvedStepCore<step, casing>, StepNumbers<ResolvedStepCore<step, casing>>, storageKey> implements HelperFunctions<resolvedStep, stepNumbers> {
25
+ #private;
25
26
  stepSchema: MultiStepFormStepSchema<step, casing, storageKey, formAlias, formEnabledFor, formProps>;
26
27
  constructor(config: MultiStepFormSchemaOptions<step, Constrain<casing, CasingType>, storageKey, formAlias, formEnabledFor, formProps>);
27
28
  createComponent<chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>, props = undefined>(options: CreateHelperFunctionOptionsBase<resolvedStep, stepNumbers, chosenSteps>, fn: CreateComponentCallback<resolvedStep, stepNumbers, chosenSteps, props>): CreatedMultiStepFormComponent<props>;
@@ -1,4 +1,4 @@
1
- import { CasingType, Constrain, CreateHelperFunctionOptionsBase, DefaultCasing, DefaultStorageKey, Expand, GetCurrentStep, GetFieldsForStep, HelperFnChosenSteps, HelperFnInputBase, MultiStepFormSchemaStepConfig as MultiStepFormSchemaStepBaseConfig, MultiStepFormStepSchema as MultiStepFormStepSchemaBase, Relaxed, ResolvedStep as ResolvedCoreStep, Step, StepNumbers, StrippedResolvedStep, Updater, ValidStepKey } from '@jfdevelops/multi-step-form';
1
+ import { CasingType, Constrain, CreateHelperFunctionOptionsBase, DefaultCasing, DefaultStorageKey, Expand, GetCurrentStep, GetFieldsForStep, HelperFnChosenSteps, HelperFnInputBase, MultiStepFormSchemaStepConfig as MultiStepFormSchemaStepBaseConfig, MultiStepFormStepSchema as MultiStepFormStepSchemaBase, Relaxed, ResolvedStep as ResolvedCoreStep, Step, StepNumbers, StrippedResolvedStep, UpdateFn, Updater, ValidStepKey } from '@jfdevelops/multi-step-form';
2
2
  import { ComponentPropsWithRef, ReactNode } from 'react';
3
3
  import { Field } from './field';
4
4
  import { MultiStepFormSchemaConfig } from './form-config';
@@ -15,16 +15,14 @@ export type CreateComponentFn<TResolvedStep extends AnyResolvedStep, TStepNumber
15
15
  export declare namespace StepSpecificComponent {
16
16
  type formComponent<TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TFormAlias extends string, TFormProps extends object, TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>> = TFormEnabledFor extends MultiStepFormSchemaConfig.defaultEnabledFor ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps> : TFormEnabledFor extends HelperFnChosenSteps.tupleNotation<ValidStepKey<TSteps>> ? TFormEnabledFor[number] extends keyof TResolvedStep ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<ValidStepKey<TSteps>> ? TChosenSteps[number] extends keyof TResolvedStep ? TChosenSteps[number] extends TFormEnabledFor[number] ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps> : {} : {} : {} : {} : keyof TFormEnabledFor extends keyof TResolvedStep ? TChosenSteps extends HelperFnChosenSteps.tupleNotation<ValidStepKey<TSteps>> ? TChosenSteps[number] extends keyof TResolvedStep ? TChosenSteps[number] extends keyof TFormEnabledFor ? MultiStepFormSchemaConfig.formCtx<TFormAlias, TFormProps> : {} : {} : {} : {};
17
17
  type onInputChange<TResolvedStep extends AnyResolvedStep, TStepNumbers extends StepNumbers<TResolvedStep>, TTargetStep extends TStepNumbers> = <CurrentStepData extends GetCurrentStep<TResolvedStep, TTargetStep>, Field extends keyof CurrentStepData>(field: Field, updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>) => void;
18
- interface Input<TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>> extends HelperFnInputBase<TResolvedStep, TSteps, TChosenSteps> {
18
+ interface Input<TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TAdditionalCtx extends Record<string, unknown>, TStepNumber extends HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps> = HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps>> extends HelperFnInputBase<TResolvedStep, TSteps, TChosenSteps, never, TAdditionalCtx> {
19
19
  /**
20
20
  * A useful wrapper around `update` to update the specific field.
21
- * @param field The field to update.
22
- * @param updater The new value for the specified field.
23
21
  */
24
- onInputChange: <CurrentStepData extends GetCurrentStep<TResolvedStep, HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps>>, Field extends keyof CurrentStepData>(field: Field, updater: Updater<CurrentStepData[Field], Relaxed<CurrentStepData[Field]>>) => void;
25
- Field: Field.component<TResolvedStep, TSteps, HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps>>;
22
+ onInputChange: TStepNumber extends TSteps ? UpdateFn.stepSpecific<TResolvedStep, TSteps, ValidStepKey<TStepNumber>> : never;
23
+ Field: Field.component<TResolvedStep, ValidStepKey<HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TChosenSteps>>>;
26
24
  }
27
- type callback<TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TProps, TFormAlias extends string, TFormProps extends object, TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>, TAdditionalInput extends object = {}> = CreateComponent<Input<TResolvedStep, TSteps, TChosenSteps> & formComponent<TResolvedStep, TSteps, TChosenSteps, TFormAlias, TFormProps, TFormEnabledFor> & TAdditionalInput, TProps>;
25
+ type callback<TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TProps, TFormAlias extends string, TFormProps extends object, TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>, TAdditionalInput extends object, TAdditionalCtx extends Record<string, unknown>> = CreateComponent<Expand<Input<TResolvedStep, TSteps, TChosenSteps, TAdditionalCtx> & formComponent<TResolvedStep, TSteps, TChosenSteps, TFormAlias, TFormProps, TFormEnabledFor> & TAdditionalInput>, TProps>;
28
26
  const DEFAULT_FORM_INSTANCE_ALIAS = "form";
29
27
  type defaultFormInstanceAlias = typeof DEFAULT_FORM_INSTANCE_ALIAS;
30
28
  type formInstanceOptions<TAlias extends string, TRenderInput, TReturn> = {
@@ -57,16 +55,26 @@ export declare namespace StepSpecificComponent {
57
55
  */
58
56
  render: CreateFunction<[input: TRenderInput], TReturn>;
59
57
  };
60
- type options<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>, TFormInstanceAlias extends string, TFormInstance> = {
58
+ type options<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>, TFormInstanceAlias extends string, TFormInstance, TCtx> = {
59
+ /**
60
+ * If set to `true`, you'll be able to open the {@linkcode console} to view logs.
61
+ */
62
+ debug?: boolean;
61
63
  useFormInstance?: formInstanceOptions<TFormInstanceAlias, HelperFnInputBase<TResolvedStep, TSteps, TTargetStep> & {
62
64
  /**
63
65
  * An object containing all the default values for the current step.
64
66
  */
65
67
  defaultValues: Expand<ExtractedDefaultValues<TResolvedStep, TSteps, TTargetStep>>;
66
68
  }, TFormInstance>;
69
+ /**
70
+ * A function to select the data that will be available in the `fn`'s ctx.
71
+ * @param input The available input to create the context with.
72
+ * @returns The created ctx.
73
+ */
74
+ ctxData?: (input: HelperFnInputBase<TResolvedStep, TSteps, 'all', HelperFnChosenSteps.resolve<TResolvedStep, TSteps, TTargetStep>>) => TCtx;
67
75
  };
68
76
  }
69
- export type CreateStepSpecificComponentCallback<TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TProps, TFormAlias extends string, TFormProps extends object, TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>, TAdditionalInput extends object = {}> = StepSpecificComponent.callback<TResolvedStep, TSteps, TChosenSteps, TProps, TFormAlias, TFormProps, TFormEnabledFor, TAdditionalInput>;
77
+ export type CreateStepSpecificComponentCallback<TResolvedStep extends StrippedResolvedStep<AnyResolvedStep>, TSteps extends StepNumbers<TResolvedStep>, TChosenSteps extends HelperFnChosenSteps<TResolvedStep, TSteps>, TProps, TFormAlias extends string, TFormProps extends object, TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep>, TAdditionalInput extends object = {}, TAdditionalCtx extends Record<string, unknown> = {}> = StepSpecificComponent.callback<TResolvedStep, TSteps, TChosenSteps, TProps, TFormAlias, TFormProps, TFormEnabledFor, TAdditionalInput, TAdditionalCtx>;
70
78
  export type ExtractedDefaultValues<TResolvedStep extends AnyResolvedStep, TSteps extends StepNumbers<TResolvedStep>, TTargetStep extends HelperFnChosenSteps<TResolvedStep, TSteps>, TExtractedStepNumber extends number = HelperFnChosenSteps.extractStepNumber<TResolvedStep, TSteps, TTargetStep>, TFields extends GetFieldsForStep<TResolvedStep, ValidStepKey<TExtractedStepNumber>> = GetFieldsForStep<TResolvedStep, ValidStepKey<TExtractedStepNumber>>> = {
71
79
  [field in keyof TFields]: TFields[field]['defaultValue'];
72
80
  };
@@ -82,9 +90,9 @@ export interface StepSpecificCreateComponentFn<TResolvedStep extends AnyResolved
82
90
  * @param fn The callback function where the component is defined.
83
91
  * @returns The created component.
84
92
  */
85
- <formInstance, formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias, props = undefined>(options: StepSpecificComponent.options<TResolvedStep, TSteps, TTargetStep, formInstanceAlias, formInstance>, fn: CreateStepSpecificComponentCallback<TResolvedStep, TSteps, TTargetStep, props, TFormAlias, TFormProps, TFormEnabledFor, {
93
+ <formInstance, additionalCtx extends Record<string, unknown> = {}, formInstanceAlias extends string = StepSpecificComponent.defaultFormInstanceAlias, props = undefined>(options: StepSpecificComponent.options<TResolvedStep, TSteps, TTargetStep, formInstanceAlias, formInstance, additionalCtx>, fn: CreateStepSpecificComponentCallback<TResolvedStep, TSteps, TTargetStep, props, TFormAlias, TFormProps, TFormEnabledFor, {
86
94
  [_ in formInstanceAlias]: formInstance;
87
- }>): CreatedMultiStepFormComponent<props>;
95
+ }, additionalCtx>): CreatedMultiStepFormComponent<props>;
88
96
  }
89
97
  export type ResolvedStep<TStep extends Step<TDefaultCasing>, TDefaultCasing extends CasingType = DefaultCasing, TResolvedStep extends ResolvedCoreStep<TStep, TDefaultCasing> = ResolvedCoreStep<TStep, TDefaultCasing>, TFormAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias, TFormEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<TResolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor, TFormProps extends object = ComponentPropsWithRef<'form'>> = {
90
98
  [stepKey in keyof TResolvedStep]: TResolvedStep[stepKey] & (stepKey extends ValidStepKey<StepNumbers<TResolvedStep>> ? {
@@ -105,13 +113,12 @@ export interface HelperFunctions<TResolvedStep extends AnyResolvedStep, TStepNum
105
113
  */
106
114
  export declare function createDefaultValues<resolvedStep extends AnyResolvedStep, stepNumbers extends StepNumbers<resolvedStep>, targetStep extends ValidStepKey<stepNumbers>>(steps: resolvedStep, targetStep: targetStep): Expand<ExtractedDefaultValues<resolvedStep, stepNumbers, [targetStep]>>;
107
115
  export declare class MultiStepFormStepSchema<step extends Step<casing>, casing extends CasingType = DefaultCasing, storageKey extends string = DefaultStorageKey, formAlias extends string = MultiStepFormSchemaConfig.defaultFormAlias, formEnabledFor extends MultiStepFormSchemaConfig.formEnabledFor<resolvedStep> = MultiStepFormSchemaConfig.defaultEnabledFor, formProps extends object = ComponentPropsWithRef<'form'>, core extends ResolvedCoreStep<step, casing> = ResolvedCoreStep<step, casing>, resolvedStep extends ResolvedStep<step, casing, core, formAlias, formEnabledFor, formProps> = ResolvedStep<step, casing, core, formAlias, formEnabledFor, formProps>, stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>> extends MultiStepFormStepSchemaBase<step, casing> implements HelperFunctions<resolvedStep, stepNumbers> {
116
+ #private;
108
117
  value: resolvedStep;
109
118
  constructor(config: MultiStepFormSchemaStepConfig<step, Constrain<casing, CasingType>, storageKey, formAlias, formEnabledFor, formProps>);
110
119
  private createFormComponent;
111
120
  private createStepSpecificComponentImpl;
112
121
  private createStepSpecificComponentFactory;
113
- private createComponentImpl;
114
- private createComponentForStep;
115
122
  /**
116
123
  * A helper function to create a component for a specific step.
117
124
  * @param options The options for creating the step specific component.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jfdevelops/react-multi-step-form",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -18,25 +18,30 @@
18
18
  ],
19
19
  "keywords": [],
20
20
  "author": "Joey Finkel",
21
- "license": "ISC",
21
+ "license": "MIT",
22
22
  "devDependencies": {
23
23
  "@types/react": "^19.1.13",
24
24
  "@types/react-dom": "^19.1.9",
25
25
  "@types/use-sync-external-store": "^1.5.0",
26
26
  "@vitejs/plugin-react": "^5.0.4",
27
+ "@vitest/browser-playwright": "^4.0.8",
28
+ "playwright": "^1.56.1",
27
29
  "react": "^19.1.1",
28
30
  "tw-animate-css": "^1.4.0",
29
31
  "vite": "^7.1.5",
30
- "vite-plugin-dts": "^4.5.4"
32
+ "vite-plugin-dts": "^4.5.4",
33
+ "vitest": "^4.0.8",
34
+ "vitest-browser-react": "^2.0.2"
31
35
  },
32
36
  "dependencies": {
33
37
  "use-sync-external-store": "^1.6.0",
34
- "@jfdevelops/multi-step-form": "1.0.0-alpha.1"
38
+ "@jfdevelops/multi-step-form": "1.0.0-alpha.10"
35
39
  },
36
40
  "scripts": {
37
41
  "dev": "vite",
38
42
  "build": "vite build",
39
43
  "watch": "vite build --watch",
40
- "test": "vitest"
44
+ "test": "vitest",
45
+ "test:browser": "vitest --config=vite.config.ts"
41
46
  }
42
47
  }