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

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,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;
22
+ onInputChange: TStepNumber extends TSteps ? UpdateFn.stepSpecific<TResolvedStep, TSteps, ValidStepKey<TStepNumber>> : never;
25
23
  Field: Field.component<TResolvedStep, TSteps, 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>> ? {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jfdevelops/react-multi-step-form",
3
- "version": "1.0.0-alpha.2",
3
+ "version": "1.0.0-alpha.4",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -24,20 +24,24 @@
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
32
  "vite-plugin-dts": "^4.5.4",
31
- "vitest": "^4.0.8"
33
+ "vitest": "^4.0.8",
34
+ "vitest-browser-react": "^2.0.2"
32
35
  },
33
36
  "dependencies": {
34
37
  "use-sync-external-store": "^1.6.0",
35
- "@jfdevelops/multi-step-form": "1.0.0-alpha.2"
38
+ "@jfdevelops/multi-step-form": "1.0.0-alpha.4"
36
39
  },
37
40
  "scripts": {
38
41
  "dev": "vite",
39
42
  "build": "vite build",
40
43
  "watch": "vite build --watch",
41
- "test": "vitest"
44
+ "test": "vitest",
45
+ "test:browser": "vitest --config=vite.config.ts"
42
46
  }
43
47
  }