@conform-to/react 1.18.0 → 1.19.1
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/README.md +1 -1
- package/dist/future/dom.js +6 -2
- package/dist/future/dom.mjs +6 -2
- package/dist/future/forms.d.ts +1157 -26
- package/dist/future/forms.js +152 -23
- package/dist/future/forms.mjs +150 -26
- package/dist/future/hooks.d.ts +25 -164
- package/dist/future/hooks.js +49 -372
- package/dist/future/hooks.mjs +54 -369
- package/dist/future/index.d.ts +3 -3
- package/dist/future/index.js +5 -6
- package/dist/future/index.mjs +2 -2
- package/dist/future/intent.js +24 -12
- package/dist/future/intent.mjs +24 -12
- package/dist/future/memoize.d.ts +1 -1
- package/dist/future/memoize.js +1 -1
- package/dist/future/memoize.mjs +1 -1
- package/dist/future/state.d.ts +8 -12
- package/dist/future/state.js +24 -27
- package/dist/future/state.mjs +25 -28
- package/dist/future/types.d.ts +66 -111
- package/dist/future/util.d.ts +6 -10
- package/dist/future/util.js +17 -20
- package/dist/future/util.mjs +16 -19
- package/dist/helpers.d.ts +14 -10
- package/dist/helpers.js +14 -10
- package/dist/helpers.mjs +14 -10
- package/dist/integrations.js +8 -10
- package/dist/integrations.mjs +8 -10
- package/package.json +2 -2
package/dist/future/hooks.d.ts
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type FormValue, type Serialize, type SubmissionResult } from '@conform-to/dom/future';
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
|
-
import type { FormContext,
|
|
4
|
-
import { StandardSchemaV1 } from './standard-schema';
|
|
3
|
+
import type { FormContext, Control, Selector, UseFormDataOptions, ValidateHandler, ErrorHandler, SubmitHandler, FormState, FormRef, BaseControlProps, StandardControlOptions, DefaultControlValue, CheckedControlOptions, CustomControlOptions } from './types';
|
|
5
4
|
export declare const INITIAL_KEY = "INITIAL_KEY";
|
|
6
|
-
export declare const
|
|
7
|
-
|
|
5
|
+
export declare const GlobalFormsObserverContext: import("react").Context<{
|
|
6
|
+
onFieldUpdate(callback: (event: {
|
|
7
|
+
type: "input" | "reset" | "mutation";
|
|
8
|
+
target: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;
|
|
9
|
+
}) => void): () => void;
|
|
10
|
+
onFormUpdate(callback: (event: {
|
|
11
|
+
type: "submit" | "input" | "reset" | "mutation";
|
|
12
|
+
target: HTMLFormElement;
|
|
13
|
+
submitter?: HTMLInputElement | HTMLButtonElement | null;
|
|
14
|
+
}) => void): () => void;
|
|
15
|
+
onInternalUpdate(callback: (event: {
|
|
16
|
+
target: HTMLFormElement;
|
|
17
|
+
}) => void): () => void;
|
|
18
|
+
dispose(): void;
|
|
8
19
|
}>;
|
|
9
|
-
export declare const FormContextContext: import("react").Context<FormContext<
|
|
10
|
-
/**
|
|
11
|
-
* Provides form context to child components.
|
|
12
|
-
* Stacks contexts to support nested forms, with latest context taking priority.
|
|
13
|
-
*/
|
|
14
|
-
export declare function FormProvider(props: {
|
|
15
|
-
context: FormContext;
|
|
16
|
-
children: React.ReactNode;
|
|
17
|
-
}): React.ReactElement;
|
|
20
|
+
export declare const FormContextContext: import("react").Context<FormContext<any>[]>;
|
|
18
21
|
/**
|
|
19
22
|
* Preserves form field values when its contents are unmounted.
|
|
20
23
|
* Useful for multi-step forms and virtualized lists.
|
|
21
24
|
*
|
|
22
|
-
*
|
|
25
|
+
* See https://conform.guide/api/react/future/PreserveBoundary
|
|
23
26
|
*/
|
|
24
27
|
export declare function PreserveBoundary(props: {
|
|
25
28
|
/**
|
|
@@ -34,170 +37,27 @@ export declare function PreserveBoundary(props: {
|
|
|
34
37
|
form?: string;
|
|
35
38
|
children: React.ReactNode;
|
|
36
39
|
}): React.ReactElement;
|
|
37
|
-
/**
|
|
38
|
-
* @deprecated Replaced by the `configureForms` factory API. This will be removed in the next minor version. If you are not ready to migrate, please pin to `v1.16.0`.
|
|
39
|
-
*/
|
|
40
|
-
export declare function FormOptionsProvider(props: Partial<GlobalFormOptions> & {
|
|
41
|
-
children: React.ReactNode;
|
|
42
|
-
}): React.ReactElement;
|
|
43
40
|
export declare function useFormContext(formId?: string): FormContext;
|
|
44
41
|
/**
|
|
45
42
|
* Core form hook that manages form state, validation, and submission.
|
|
46
43
|
* Handles both sync and async validation, intent dispatching, and DOM updates.
|
|
47
44
|
*/
|
|
48
|
-
export declare function useConform<FormShape extends Record<string, any>, ErrorShape, Value = undefined, SchemaValue = undefined>(formRef: FormRef, options: {
|
|
45
|
+
export declare function useConform<FormShape extends Record<string, any>, ErrorShape, Value = undefined, SchemaValue = undefined, SchemaErrorShape = unknown>(formRef: FormRef, options: {
|
|
49
46
|
key?: string | undefined;
|
|
50
47
|
defaultValue?: Record<string, FormValue> | null | undefined;
|
|
51
48
|
serialize: Serialize;
|
|
52
49
|
intentName: string;
|
|
53
50
|
lastResult?: SubmissionResult<NoInfer<ErrorShape>> | null | undefined;
|
|
54
|
-
onValidate?: ValidateHandler<ErrorShape, Value, SchemaValue> | undefined;
|
|
51
|
+
onValidate?: ValidateHandler<ErrorShape, Value, SchemaValue, SchemaErrorShape> | undefined;
|
|
55
52
|
onError?: ErrorHandler<ErrorShape> | undefined;
|
|
56
53
|
onSubmit?: SubmitHandler<FormShape, NoInfer<ErrorShape>, NoInfer<Value>> | undefined;
|
|
57
54
|
}): [FormState<ErrorShape>, (event: React.FormEvent<HTMLFormElement>) => void];
|
|
58
|
-
/**
|
|
59
|
-
* The main React hook for form management. Handles form state, validation, and submission
|
|
60
|
-
* while providing access to form metadata, field objects, and form actions.
|
|
61
|
-
*
|
|
62
|
-
* It can be called in two ways:
|
|
63
|
-
* - **Schema first**: Pass a schema as the first argument for automatic validation with type inference
|
|
64
|
-
* - **Manual configuration**: Pass options with custom `onValidate` handler for manual validation
|
|
65
|
-
*
|
|
66
|
-
* @see https://conform.guide/api/react/future/useForm
|
|
67
|
-
* @example Schema first setup with zod:
|
|
68
|
-
*
|
|
69
|
-
* ```tsx
|
|
70
|
-
* const { form, fields } = useForm(zodSchema, {
|
|
71
|
-
* lastResult,
|
|
72
|
-
* shouldValidate: 'onBlur',
|
|
73
|
-
* });
|
|
74
|
-
*
|
|
75
|
-
* return (
|
|
76
|
-
* <form {...form.props}>
|
|
77
|
-
* <input name={fields.email.name} defaultValue={fields.email.defaultValue} />
|
|
78
|
-
* <div>{fields.email.errors}</div>
|
|
79
|
-
* </form>
|
|
80
|
-
* );
|
|
81
|
-
* ```
|
|
82
|
-
*
|
|
83
|
-
* @example Manual configuration setup with custom validation:
|
|
84
|
-
*
|
|
85
|
-
* ```tsx
|
|
86
|
-
* const { form, fields } = useForm({
|
|
87
|
-
* onValidate({ payload, error }) {
|
|
88
|
-
* if (!payload.email) {
|
|
89
|
-
* error.fieldErrors.email = ['Required'];
|
|
90
|
-
* }
|
|
91
|
-
* return error;
|
|
92
|
-
* }
|
|
93
|
-
* });
|
|
94
|
-
*
|
|
95
|
-
* return (
|
|
96
|
-
* <form {...form.props}>
|
|
97
|
-
* <input name={fields.email.name} defaultValue={fields.email.defaultValue} />
|
|
98
|
-
* <div>{fields.email.errors}</div>
|
|
99
|
-
* </form>
|
|
100
|
-
* );
|
|
101
|
-
* ```
|
|
102
|
-
*/
|
|
103
|
-
export declare function useForm<Schema extends BaseSchemaType, ErrorShape extends BaseErrorShape = DefaultErrorShape, Value = InferOutput<Schema>>(schema: Schema, options: FormOptions<InferInput<Schema>, ErrorShape, Value, Schema, string extends ErrorShape ? never : 'onValidate'>): {
|
|
104
|
-
form: FormMetadata<ErrorShape>;
|
|
105
|
-
fields: Fieldset<InferInput<Schema>, ErrorShape>;
|
|
106
|
-
intent: IntentDispatcher<InferInput<Schema>>;
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* @deprecated Use `useForm(schema, options)` instead for better type inference.
|
|
110
|
-
*/
|
|
111
|
-
export declare function useForm<FormShape extends Record<string, any> = Record<string, any>, ErrorShape extends BaseErrorShape = DefaultErrorShape, Value = undefined>(options: FormOptions<FormShape, ErrorShape, Value, undefined, undefined extends Value ? 'onValidate' : never> & {
|
|
112
|
-
/**
|
|
113
|
-
* @deprecated Use `useForm(schema, options)` instead for better type inference.
|
|
114
|
-
*
|
|
115
|
-
* Optional standard schema for validation (e.g., Zod, Valibot, Yup).
|
|
116
|
-
* Removes the need for manual onValidate setup.
|
|
117
|
-
*
|
|
118
|
-
*/
|
|
119
|
-
schema: StandardSchemaV1<FormShape, Value>;
|
|
120
|
-
}): {
|
|
121
|
-
form: FormMetadata<ErrorShape>;
|
|
122
|
-
fields: Fieldset<FormShape, ErrorShape>;
|
|
123
|
-
intent: IntentDispatcher<FormShape>;
|
|
124
|
-
};
|
|
125
|
-
export declare function useForm<FormShape extends Record<string, any> = Record<string, any>, ErrorShape extends BaseErrorShape = DefaultErrorShape, Value = undefined>(options: FormOptions<FormShape, ErrorShape, Value, undefined, 'onValidate'>): {
|
|
126
|
-
form: FormMetadata<ErrorShape>;
|
|
127
|
-
fields: Fieldset<FormShape, ErrorShape>;
|
|
128
|
-
intent: IntentDispatcher<FormShape>;
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* A React hook that provides access to form-level metadata and state.
|
|
132
|
-
* Requires `FormProvider` context when used in child components.
|
|
133
|
-
*
|
|
134
|
-
* @see https://conform.guide/api/react/future/useFormMetadata
|
|
135
|
-
* @example
|
|
136
|
-
* ```tsx
|
|
137
|
-
* function ErrorSummary() {
|
|
138
|
-
* const form = useFormMetadata();
|
|
139
|
-
*
|
|
140
|
-
* if (form.valid) return null;
|
|
141
|
-
*
|
|
142
|
-
* return (
|
|
143
|
-
* <div>Please fix {Object.keys(form.fieldErrors).length} errors</div>
|
|
144
|
-
* );
|
|
145
|
-
* }
|
|
146
|
-
* ```
|
|
147
|
-
*/
|
|
148
|
-
export declare function useFormMetadata(options?: {
|
|
149
|
-
formId?: string;
|
|
150
|
-
}): FormMetadata;
|
|
151
|
-
/**
|
|
152
|
-
* A React hook that provides access to a specific field's metadata and state.
|
|
153
|
-
* Requires `FormProvider` context when used in child components.
|
|
154
|
-
*
|
|
155
|
-
* @see https://conform.guide/api/react/future/useField
|
|
156
|
-
* @example
|
|
157
|
-
* ```tsx
|
|
158
|
-
* function FormField({ name, label }) {
|
|
159
|
-
* const field = useField(name);
|
|
160
|
-
*
|
|
161
|
-
* return (
|
|
162
|
-
* <div>
|
|
163
|
-
* <label htmlFor={field.id}>{label}</label>
|
|
164
|
-
* <input id={field.id} name={field.name} defaultValue={field.defaultValue} />
|
|
165
|
-
* {field.errors && <div>{field.errors.join(', ')}</div>}
|
|
166
|
-
* </div>
|
|
167
|
-
* );
|
|
168
|
-
* }
|
|
169
|
-
* ```
|
|
170
|
-
*/
|
|
171
|
-
export declare function useField<FieldShape = any>(name: FieldName<FieldShape>, options?: {
|
|
172
|
-
formId?: string;
|
|
173
|
-
}): FieldMetadata<FieldShape>;
|
|
174
|
-
/**
|
|
175
|
-
* A React hook that provides an intent dispatcher for programmatic form actions.
|
|
176
|
-
* Intent dispatchers allow you to trigger form operations like validation, field updates,
|
|
177
|
-
* and array manipulations without manual form submission.
|
|
178
|
-
*
|
|
179
|
-
* @see https://conform.guide/api/react/future/useIntent
|
|
180
|
-
* @example
|
|
181
|
-
* ```tsx
|
|
182
|
-
* function ResetButton() {
|
|
183
|
-
* const buttonRef = useRef<HTMLButtonElement>(null);
|
|
184
|
-
* const intent = useIntent(buttonRef);
|
|
185
|
-
*
|
|
186
|
-
* return (
|
|
187
|
-
* <button type="button" ref={buttonRef} onClick={() => intent.reset()}>
|
|
188
|
-
* Reset Form
|
|
189
|
-
* </button>
|
|
190
|
-
* );
|
|
191
|
-
* }
|
|
192
|
-
* ```
|
|
193
|
-
*/
|
|
194
|
-
export declare function useIntent<FormShape extends Record<string, any>>(formRef: FormRef): IntentDispatcher<FormShape>;
|
|
195
55
|
/**
|
|
196
56
|
* A React hook that lets you sync the state of an input and dispatch native form events from it.
|
|
197
57
|
* This is useful when emulating native input behavior — typically by rendering a hidden base control
|
|
198
58
|
* and syncing it with a custom input.
|
|
199
59
|
*
|
|
200
|
-
*
|
|
60
|
+
* **Example:**
|
|
201
61
|
* ```ts
|
|
202
62
|
* const control = useControl(options);
|
|
203
63
|
* ```
|
|
@@ -212,8 +72,9 @@ export declare function useControl(options: CheckedControlOptions): Control<bool
|
|
|
212
72
|
* Returns `undefined` when the form element is not available (e.g., on SSR or initial client render),
|
|
213
73
|
* unless a `fallback` is provided.
|
|
214
74
|
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
75
|
+
* See https://conform.guide/api/react/future/useFormData
|
|
76
|
+
*
|
|
77
|
+
* **Example:**
|
|
217
78
|
* ```ts
|
|
218
79
|
* const value = useFormData(
|
|
219
80
|
* formRef,
|
|
@@ -253,7 +114,7 @@ export declare function useLatest<Value>(value: Value): import("react").MutableR
|
|
|
253
114
|
* A component that renders hidden base control(s) based on the shape of defaultValue.
|
|
254
115
|
* Used with useControl to sync complex values with form data.
|
|
255
116
|
*
|
|
256
|
-
*
|
|
117
|
+
* **Example:**
|
|
257
118
|
* ```tsx
|
|
258
119
|
* const control = useControl<{ street: string; city: string }>({
|
|
259
120
|
* defaultValue: { street: '123 Main St', city: 'Anytown' },
|