remix-validated-form 5.1.5 → 5.1.6

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.
Files changed (75) hide show
  1. package/.turbo/turbo-build.log +18 -18
  2. package/dist/index.cjs.js +3 -0
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.esm.js +3 -0
  5. package/dist/index.esm.js.map +1 -1
  6. package/package.json +1 -1
  7. package/.turbo/turbo-dev.log +0 -0
  8. package/.turbo/turbo-typecheck.log +0 -1
  9. package/browser/ValidatedForm.d.ts +0 -50
  10. package/browser/ValidatedForm.js +0 -210
  11. package/browser/hooks.d.ts +0 -67
  12. package/browser/hooks.js +0 -84
  13. package/browser/index.d.ts +0 -7
  14. package/browser/index.js +0 -7
  15. package/browser/internal/MultiValueMap.d.ts +0 -11
  16. package/browser/internal/MultiValueMap.js +0 -43
  17. package/browser/internal/constants.d.ts +0 -3
  18. package/browser/internal/constants.js +0 -3
  19. package/browser/internal/flatten.d.ts +0 -1
  20. package/browser/internal/flatten.js +0 -7
  21. package/browser/internal/formContext.d.ts +0 -12
  22. package/browser/internal/formContext.js +0 -2
  23. package/browser/internal/getInputProps.d.ts +0 -29
  24. package/browser/internal/getInputProps.js +0 -51
  25. package/browser/internal/hooks.d.ts +0 -35
  26. package/browser/internal/hooks.js +0 -118
  27. package/browser/internal/hydratable.d.ts +0 -14
  28. package/browser/internal/hydratable.js +0 -14
  29. package/browser/internal/logic/getCheckboxChecked.d.ts +0 -1
  30. package/browser/internal/logic/getCheckboxChecked.js +0 -9
  31. package/browser/internal/logic/getRadioChecked.d.ts +0 -1
  32. package/browser/internal/logic/getRadioChecked.js +0 -15
  33. package/browser/internal/logic/nestedObjectToPathObject.d.ts +0 -1
  34. package/browser/internal/logic/nestedObjectToPathObject.js +0 -47
  35. package/browser/internal/logic/requestSubmit.d.ts +0 -5
  36. package/browser/internal/logic/requestSubmit.js +0 -66
  37. package/browser/internal/reset.d.ts +0 -28
  38. package/browser/internal/reset.js +0 -13
  39. package/browser/internal/state/arrayUtil.d.ts +0 -12
  40. package/browser/internal/state/arrayUtil.js +0 -350
  41. package/browser/internal/state/atomUtils.d.ts +0 -38
  42. package/browser/internal/state/atomUtils.js +0 -5
  43. package/browser/internal/state/cleanup.d.ts +0 -2
  44. package/browser/internal/state/cleanup.js +0 -6
  45. package/browser/internal/state/controlledFieldStore.d.ts +0 -26
  46. package/browser/internal/state/controlledFieldStore.js +0 -70
  47. package/browser/internal/state/controlledFields.d.ts +0 -7
  48. package/browser/internal/state/controlledFields.js +0 -36
  49. package/browser/internal/state/createFormStore.d.ts +0 -79
  50. package/browser/internal/state/createFormStore.js +0 -306
  51. package/browser/internal/state/fieldArray.d.ts +0 -28
  52. package/browser/internal/state/fieldArray.js +0 -74
  53. package/browser/internal/state/storeFamily.d.ts +0 -9
  54. package/browser/internal/state/storeFamily.js +0 -18
  55. package/browser/internal/state/storeHooks.d.ts +0 -3
  56. package/browser/internal/state/storeHooks.js +0 -4
  57. package/browser/internal/state/types.d.ts +0 -1
  58. package/browser/internal/state/types.js +0 -1
  59. package/browser/internal/state.d.ts +0 -343
  60. package/browser/internal/state.js +0 -64
  61. package/browser/internal/submissionCallbacks.d.ts +0 -1
  62. package/browser/internal/submissionCallbacks.js +0 -13
  63. package/browser/internal/util.d.ts +0 -5
  64. package/browser/internal/util.js +0 -32
  65. package/browser/server.d.ts +0 -21
  66. package/browser/server.js +0 -27
  67. package/browser/unreleased/formStateHooks.d.ts +0 -64
  68. package/browser/unreleased/formStateHooks.js +0 -76
  69. package/browser/userFacingFormContext.d.ts +0 -85
  70. package/browser/userFacingFormContext.js +0 -41
  71. package/browser/validation/createValidator.d.ts +0 -7
  72. package/browser/validation/createValidator.js +0 -43
  73. package/browser/validation/types.d.ts +0 -58
  74. package/browser/validation/types.js +0 -1
  75. package/stats.html +0 -4044
@@ -1,343 +0,0 @@
1
- import { FieldErrors, TouchedFields } from "../validation/types";
2
- import { InternalFormId } from "./state/atomUtils";
3
- export declare const ATOM_SCOPE: unique symbol;
4
- export declare type SyncedFormProps = {
5
- formId?: string;
6
- action?: string;
7
- subaction?: string;
8
- defaultValues: {
9
- [fieldName: string]: any;
10
- };
11
- validateField: (fieldName: string) => Promise<string | null>;
12
- registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;
13
- };
14
- export declare const isHydratedAtom: {
15
- (param: InternalFormId): import("jotai").Atom<boolean> & {
16
- write: (get: {
17
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
18
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
19
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
20
- } & {
21
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
22
- unstable_promise: true;
23
- }): Value_3 | Promise<Value_3>;
24
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
25
- unstable_promise: true;
26
- }): Value_4 | Promise<Value_4>;
27
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
28
- unstable_promise: true;
29
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
30
- }, set: {
31
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
32
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
33
- }, update: boolean | ((prev: boolean) => boolean)) => void;
34
- onMount?: (<S extends (update: boolean | ((prev: boolean) => boolean)) => void>(setAtom: S) => void | (() => void)) | undefined;
35
- } & {
36
- init: boolean;
37
- };
38
- remove(param: InternalFormId): void;
39
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
40
- };
41
- export declare const isSubmittingAtom: {
42
- (param: InternalFormId): import("jotai").Atom<boolean> & {
43
- write: (get: {
44
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
45
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
46
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
47
- } & {
48
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
49
- unstable_promise: true;
50
- }): Value_3 | Promise<Value_3>;
51
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
52
- unstable_promise: true;
53
- }): Value_4 | Promise<Value_4>;
54
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
55
- unstable_promise: true;
56
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
57
- }, set: {
58
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
59
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
60
- }, update: boolean | ((prev: boolean) => boolean)) => void;
61
- onMount?: (<S extends (update: boolean | ((prev: boolean) => boolean)) => void>(setAtom: S) => void | (() => void)) | undefined;
62
- } & {
63
- init: boolean;
64
- };
65
- remove(param: InternalFormId): void;
66
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
67
- };
68
- export declare const hasBeenSubmittedAtom: {
69
- (param: InternalFormId): import("jotai").Atom<boolean> & {
70
- write: (get: {
71
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
72
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
73
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
74
- } & {
75
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
76
- unstable_promise: true;
77
- }): Value_3 | Promise<Value_3>;
78
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
79
- unstable_promise: true;
80
- }): Value_4 | Promise<Value_4>;
81
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
82
- unstable_promise: true;
83
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
84
- }, set: {
85
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
86
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
87
- }, update: boolean | ((prev: boolean) => boolean)) => void;
88
- onMount?: (<S extends (update: boolean | ((prev: boolean) => boolean)) => void>(setAtom: S) => void | (() => void)) | undefined;
89
- } & {
90
- init: boolean;
91
- };
92
- remove(param: InternalFormId): void;
93
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
94
- };
95
- export declare const fieldErrorsAtom: {
96
- (param: InternalFormId): import("jotai").Atom<FieldErrors> & {
97
- write: (get: {
98
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
99
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
100
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
101
- } & {
102
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
103
- unstable_promise: true;
104
- }): Value_3 | Promise<Value_3>;
105
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
106
- unstable_promise: true;
107
- }): Value_4 | Promise<Value_4>;
108
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
109
- unstable_promise: true;
110
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
111
- }, set: {
112
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
113
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
114
- }, update: FieldErrors | ((prev: FieldErrors) => FieldErrors)) => void;
115
- onMount?: (<S extends (update: FieldErrors | ((prev: FieldErrors) => FieldErrors)) => void>(setAtom: S) => void | (() => void)) | undefined;
116
- } & {
117
- init: FieldErrors;
118
- };
119
- remove(param: InternalFormId): void;
120
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
121
- };
122
- export declare const touchedFieldsAtom: {
123
- (param: InternalFormId): import("jotai").Atom<TouchedFields> & {
124
- write: (get: {
125
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
126
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
127
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
128
- } & {
129
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
130
- unstable_promise: true;
131
- }): Value_3 | Promise<Value_3>;
132
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
133
- unstable_promise: true;
134
- }): Value_4 | Promise<Value_4>;
135
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
136
- unstable_promise: true;
137
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
138
- }, set: {
139
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
140
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
141
- }, update: TouchedFields | ((prev: TouchedFields) => TouchedFields)) => void;
142
- onMount?: (<S extends (update: TouchedFields | ((prev: TouchedFields) => TouchedFields)) => void>(setAtom: S) => void | (() => void)) | undefined;
143
- } & {
144
- init: TouchedFields;
145
- };
146
- remove(param: InternalFormId): void;
147
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
148
- };
149
- export declare const formPropsAtom: {
150
- (param: InternalFormId): import("jotai").Atom<SyncedFormProps> & {
151
- write: (get: {
152
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
153
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
154
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
155
- } & {
156
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
157
- unstable_promise: true;
158
- }): Value_3 | Promise<Value_3>;
159
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
160
- unstable_promise: true;
161
- }): Value_4 | Promise<Value_4>;
162
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
163
- unstable_promise: true;
164
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
165
- }, set: {
166
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
167
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
168
- }, update: SyncedFormProps | ((prev: SyncedFormProps) => SyncedFormProps)) => void;
169
- onMount?: (<S extends (update: SyncedFormProps | ((prev: SyncedFormProps) => SyncedFormProps)) => void>(setAtom: S) => void | (() => void)) | undefined;
170
- } & {
171
- init: SyncedFormProps;
172
- };
173
- remove(param: InternalFormId): void;
174
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
175
- };
176
- export declare const formElementAtom: {
177
- (param: InternalFormId): import("jotai").Atom<HTMLFormElement | null> & {
178
- write: (get: {
179
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
180
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
181
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
182
- } & {
183
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
184
- unstable_promise: true;
185
- }): Value_3 | Promise<Value_3>;
186
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
187
- unstable_promise: true;
188
- }): Value_4 | Promise<Value_4>;
189
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
190
- unstable_promise: true;
191
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
192
- }, set: {
193
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
194
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
195
- }, update: HTMLFormElement | ((prev: HTMLFormElement | null) => HTMLFormElement | null) | null) => void;
196
- onMount?: (<S extends (update: HTMLFormElement | ((prev: HTMLFormElement | null) => HTMLFormElement | null) | null) => void>(setAtom: S) => void | (() => void)) | undefined;
197
- } & {
198
- init: HTMLFormElement | null;
199
- };
200
- remove(param: InternalFormId): void;
201
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
202
- };
203
- export declare const cleanupFormState: (formId: InternalFormId) => void;
204
- export declare const isValidAtom: {
205
- (param: InternalFormId): import("jotai").Atom<boolean>;
206
- remove(param: InternalFormId): void;
207
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
208
- };
209
- export declare const startSubmitAtom: {
210
- (param: InternalFormId): import("jotai").Atom<null> & {
211
- write: (get: {
212
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
213
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
214
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
215
- } & {
216
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
217
- unstable_promise: true;
218
- }): Value_3 | Promise<Value_3>;
219
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
220
- unstable_promise: true;
221
- }): Value_4 | Promise<Value_4>;
222
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
223
- unstable_promise: true;
224
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
225
- }, set: {
226
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
227
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
228
- }, update: unknown) => void;
229
- onMount?: (<S extends (update?: unknown) => void>(setAtom: S) => void | (() => void)) | undefined;
230
- } & {
231
- init: null;
232
- };
233
- remove(param: InternalFormId): void;
234
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
235
- };
236
- export declare const endSubmitAtom: {
237
- (param: InternalFormId): import("jotai").Atom<null> & {
238
- write: (get: {
239
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
240
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
241
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
242
- } & {
243
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
244
- unstable_promise: true;
245
- }): Value_3 | Promise<Value_3>;
246
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
247
- unstable_promise: true;
248
- }): Value_4 | Promise<Value_4>;
249
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
250
- unstable_promise: true;
251
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
252
- }, set: {
253
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
254
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
255
- }, update: unknown) => void;
256
- onMount?: (<S extends (update?: unknown) => void>(setAtom: S) => void | (() => void)) | undefined;
257
- } & {
258
- init: null;
259
- };
260
- remove(param: InternalFormId): void;
261
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
262
- };
263
- export declare const setTouchedAtom: {
264
- (param: InternalFormId): import("jotai").Atom<null> & {
265
- write: (get: {
266
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
267
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
268
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
269
- } & {
270
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
271
- unstable_promise: true;
272
- }): Value_3 | Promise<Value_3>;
273
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
274
- unstable_promise: true;
275
- }): Value_4 | Promise<Value_4>;
276
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
277
- unstable_promise: true;
278
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
279
- }, set: {
280
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
281
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
282
- }, update: {
283
- field: string;
284
- touched: boolean;
285
- }) => void;
286
- onMount?: (<S extends (update: {
287
- field: string;
288
- touched: boolean;
289
- }) => void>(setAtom: S) => void | (() => void)) | undefined;
290
- } & {
291
- init: null;
292
- };
293
- remove(param: InternalFormId): void;
294
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
295
- };
296
- export declare const setFieldErrorAtom: {
297
- (param: InternalFormId): import("jotai").Atom<null> & {
298
- write: (get: {
299
- <Value>(atom: import("jotai").Atom<Value | Promise<Value>>): Value;
300
- <Value_1>(atom: import("jotai").Atom<Promise<Value_1>>): Value_1;
301
- <Value_2>(atom: import("jotai").Atom<Value_2>): Value_2 extends Promise<infer V> ? V : Value_2;
302
- } & {
303
- <Value_3>(atom: import("jotai").Atom<Value_3 | Promise<Value_3>>, options: {
304
- unstable_promise: true;
305
- }): Value_3 | Promise<Value_3>;
306
- <Value_4>(atom: import("jotai").Atom<Promise<Value_4>>, options: {
307
- unstable_promise: true;
308
- }): Value_4 | Promise<Value_4>;
309
- <Value_5>(atom: import("jotai").Atom<Value_5>, options: {
310
- unstable_promise: true;
311
- }): (Value_5 extends Promise<infer V> ? V : Value_5) | Promise<Value_5 extends Promise<infer V> ? V : Value_5>;
312
- }, set: {
313
- <Value_6, Result extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_6, undefined, Result>): Result;
314
- <Value_7, Update, Result_1 extends void | Promise<void>>(atom: import("jotai").WritableAtom<Value_7, Update, Result_1>, update: Update): Result_1;
315
- }, update: {
316
- field: string;
317
- error: string | undefined;
318
- }) => void;
319
- onMount?: (<S extends (update: {
320
- field: string;
321
- error: string | undefined;
322
- }) => void>(setAtom: S) => void | (() => void)) | undefined;
323
- } & {
324
- init: null;
325
- };
326
- remove(param: InternalFormId): void;
327
- setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
328
- };
329
- export declare const fieldTouchedAtom: {
330
- (param: import("./state/atomUtils").FieldAtomKey): import("jotai").WritableAtom<boolean, boolean, void>;
331
- remove(param: import("./state/atomUtils").FieldAtomKey): void;
332
- setShouldRemove(shouldRemove: ((createdAt: number, param: import("./state/atomUtils").FieldAtomKey) => boolean) | null): void;
333
- };
334
- export declare const fieldErrorAtom: {
335
- (param: import("./state/atomUtils").FieldAtomKey): import("jotai").WritableAtom<string, string | undefined, void>;
336
- remove(param: import("./state/atomUtils").FieldAtomKey): void;
337
- setShouldRemove(shouldRemove: ((createdAt: number, param: import("./state/atomUtils").FieldAtomKey) => boolean) | null): void;
338
- };
339
- export declare const fieldDefaultValueAtom: {
340
- (param: import("./state/atomUtils").FieldAtomKey): import("jotai").Atom<any>;
341
- remove(param: import("./state/atomUtils").FieldAtomKey): void;
342
- setShouldRemove(shouldRemove: ((createdAt: number, param: import("./state/atomUtils").FieldAtomKey) => boolean) | null): void;
343
- };
@@ -1,64 +0,0 @@
1
- import { atom } from "jotai";
2
- import { atomFamily, selectAtom } from "jotai/utils";
3
- import omit from "lodash/omit";
4
- import { fieldAtomFamily, formAtomFamily, } from "./state/atomUtils";
5
- export const ATOM_SCOPE = Symbol("remix-validated-form-scope");
6
- export const isHydratedAtom = formAtomFamily(false);
7
- export const isSubmittingAtom = formAtomFamily(false);
8
- export const hasBeenSubmittedAtom = formAtomFamily(false);
9
- export const fieldErrorsAtom = formAtomFamily({});
10
- export const touchedFieldsAtom = formAtomFamily({});
11
- export const formPropsAtom = formAtomFamily({
12
- validateField: () => Promise.resolve(null),
13
- registerReceiveFocus: () => () => { },
14
- defaultValues: {},
15
- });
16
- export const formElementAtom = formAtomFamily(null);
17
- //// Everything below is derived from the above
18
- export const cleanupFormState = (formId) => {
19
- [
20
- isHydratedAtom,
21
- isSubmittingAtom,
22
- hasBeenSubmittedAtom,
23
- fieldErrorsAtom,
24
- touchedFieldsAtom,
25
- formPropsAtom,
26
- ].forEach((formAtom) => formAtom.remove(formId));
27
- };
28
- export const isValidAtom = atomFamily((formId) => atom((get) => Object.keys(get(fieldErrorsAtom(formId))).length === 0));
29
- export const startSubmitAtom = atomFamily((formId) => atom(null, (_get, set) => {
30
- set(isSubmittingAtom(formId), true);
31
- set(hasBeenSubmittedAtom(formId), true);
32
- }));
33
- export const endSubmitAtom = atomFamily((formId) => atom(null, (_get, set) => {
34
- set(isSubmittingAtom(formId), false);
35
- }));
36
- export const setTouchedAtom = atomFamily((formId) => atom(null, (get, set, { field, touched }) => {
37
- const prev = get(touchedFieldsAtom(formId));
38
- if (prev[field] !== touched) {
39
- set(touchedFieldsAtom(formId), {
40
- ...prev,
41
- [field]: touched,
42
- });
43
- }
44
- }));
45
- export const setFieldErrorAtom = atomFamily((formId) => atom(null, (get, set, { field, error }) => {
46
- const prev = get(fieldErrorsAtom(formId));
47
- if (error === undefined && field in prev) {
48
- set(fieldErrorsAtom(formId), omit(prev, field));
49
- }
50
- if (error !== undefined && prev[field] !== error) {
51
- set(fieldErrorsAtom(formId), {
52
- ...get(fieldErrorsAtom(formId)),
53
- [field]: error,
54
- });
55
- }
56
- }));
57
- //// Field specific
58
- export const fieldTouchedAtom = fieldAtomFamily(({ formId, field }) => atom((get) => get(touchedFieldsAtom(formId))[field], (_get, set, touched) => {
59
- set(setTouchedAtom(formId), { field, touched });
60
- }));
61
- export const fieldErrorAtom = fieldAtomFamily(({ formId, field }) => atom((get) => get(fieldErrorsAtom(formId))[field], (_get, set, error) => {
62
- set(setFieldErrorAtom(formId), { field, error });
63
- }));
64
- export const fieldDefaultValueAtom = fieldAtomFamily(({ formId, field }) => selectAtom(formPropsAtom(formId), (state) => state.defaultValues[field]));
@@ -1 +0,0 @@
1
- export declare function useSubmitComplete(isSubmitting: boolean, callback: () => void): void;
@@ -1,13 +0,0 @@
1
- import { useEffect, useRef } from "react";
2
- export function useSubmitComplete(isSubmitting, callback) {
3
- const isPending = useRef(false);
4
- useEffect(() => {
5
- if (isSubmitting) {
6
- isPending.current = true;
7
- }
8
- if (!isSubmitting && isPending.current) {
9
- isPending.current = false;
10
- callback();
11
- }
12
- });
13
- }
@@ -1,5 +0,0 @@
1
- import type React from "react";
2
- export declare const omit: (obj: any, ...keys: string[]) => any;
3
- export declare const mergeRefs: <T = any>(refs: (React.MutableRefObject<T> | React.LegacyRef<T> | undefined)[]) => (instance: T | null) => void;
4
- export declare const useIsomorphicLayoutEffect: typeof React.useEffect;
5
- export declare const useDeepEqualsMemo: <T>(item: T) => T;
@@ -1,32 +0,0 @@
1
- import { useEffect, useLayoutEffect, useRef } from "react";
2
- import * as R from "remeda";
3
- export const omit = (obj, ...keys) => {
4
- const result = { ...obj };
5
- for (const key of keys) {
6
- delete result[key];
7
- }
8
- return result;
9
- };
10
- export const mergeRefs = (refs) => {
11
- return (value) => {
12
- refs.filter(Boolean).forEach((ref) => {
13
- if (typeof ref === "function") {
14
- ref(value);
15
- }
16
- else if (ref != null) {
17
- ref.current = value;
18
- }
19
- });
20
- };
21
- };
22
- export const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
23
- export const useDeepEqualsMemo = (item) => {
24
- const ref = useRef(item);
25
- const areEqual = ref.current === item || R.equals(ref.current, item);
26
- useEffect(() => {
27
- if (!areEqual) {
28
- ref.current = item;
29
- }
30
- });
31
- return areEqual ? ref.current : item;
32
- };
@@ -1,21 +0,0 @@
1
- import { FORM_DEFAULTS_FIELD } from "./internal/constants";
2
- import { ValidatorError, ValidationErrorResponseData } from "./validation/types";
3
- /**
4
- * Takes the errors from a `Validator` and returns a `Response`.
5
- * When you return this from your action, `ValidatedForm` on the frontend will automatically
6
- * display the errors on the correct fields on the correct form.
7
- *
8
- * You can also provide a second argument to `validationError`
9
- * to specify how to repopulate the form when JS is disabled.
10
- *
11
- * @example
12
- * ```ts
13
- * const result = validator.validate(await request.formData());
14
- * if (result.error) return validationError(result.error, result.submittedData);
15
- * ```
16
- */
17
- export declare function validationError(error: ValidatorError, repopulateFields?: unknown, init?: ResponseInit): import("@remix-run/server-runtime").TypedResponse<ValidationErrorResponseData>;
18
- export type FormDefaults = {
19
- [formDefaultsKey: `${typeof FORM_DEFAULTS_FIELD}_${string}`]: any;
20
- };
21
- export declare const setFormDefaults: <DataType = any>(formId: string, defaultValues: Partial<DataType>) => FormDefaults;
package/browser/server.js DELETED
@@ -1,27 +0,0 @@
1
- import { json } from "remix";
2
- import { formDefaultValuesKey, } from "./internal/constants";
3
- /**
4
- * Takes the errors from a `Validator` and returns a `Response`.
5
- * When you return this from your action, `ValidatedForm` on the frontend will automatically
6
- * display the errors on the correct fields on the correct form.
7
- *
8
- * You can also provide a second argument to `validationError`
9
- * to specify how to repopulate the form when JS is disabled.
10
- *
11
- * @example
12
- * ```ts
13
- * const result = validator.validate(await request.formData());
14
- * if (result.error) return validationError(result.error, result.submittedData);
15
- * ```
16
- */
17
- export function validationError(error, repopulateFields, init) {
18
- return json({
19
- fieldErrors: error.fieldErrors,
20
- subaction: error.subaction,
21
- repopulateFields,
22
- formId: error.formId,
23
- }, { status: 422, ...init });
24
- }
25
- export const setFormDefaults = (formId, defaultValues) => ({
26
- [formDefaultValuesKey(formId)]: defaultValues,
27
- });
@@ -1,64 +0,0 @@
1
- import { FieldErrors, TouchedFields, ValidationResult } from "../validation/types";
2
- export type FormState = {
3
- fieldErrors: FieldErrors;
4
- isSubmitting: boolean;
5
- hasBeenSubmitted: boolean;
6
- touchedFields: TouchedFields;
7
- defaultValues: {
8
- [fieldName: string]: any;
9
- };
10
- action?: string;
11
- subaction?: string;
12
- isValid: boolean;
13
- };
14
- /**
15
- * Returns information about the form.
16
- *
17
- * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.
18
- */
19
- export declare const useFormState: (formId?: string) => FormState;
20
- export type FormHelpers = {
21
- /**
22
- * Clear the error of the specified field.
23
- */
24
- clearError: (fieldName: string) => void;
25
- /**
26
- * Validate the specified field.
27
- */
28
- validateField: (fieldName: string) => Promise<string | null>;
29
- /**
30
- * Change the touched state of the specified field.
31
- */
32
- setTouched: (fieldName: string, touched: boolean) => void;
33
- /**
34
- * Validate the whole form and populate any errors.
35
- */
36
- validate: () => Promise<ValidationResult<unknown>>;
37
- /**
38
- * Clears all errors on the form.
39
- */
40
- clearAllErrors: () => void;
41
- /**
42
- * Resets the form.
43
- *
44
- * _Note_: The equivalent behavior can be achieved by calling formElement.reset()
45
- * or clicking a button element with `type="reset"`.
46
- */
47
- reset: () => void;
48
- /**
49
- * Submits the form, running all validations first.
50
- *
51
- * _Note_: This is equivalent to clicking a button element with `type="submit"` or calling formElement.submit().
52
- */
53
- submit: () => void;
54
- /**
55
- * Returns the current form values as FormData
56
- */
57
- getValues: () => FormData;
58
- };
59
- /**
60
- * Returns helpers that can be used to update the form state.
61
- *
62
- * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.
63
- */
64
- export declare const useFormHelpers: (formId?: string) => FormHelpers;
@@ -1,76 +0,0 @@
1
- import { useMemo } from "react";
2
- import { useInternalFormContext, useClearError, useSetTouched, useDefaultValuesForForm, useFieldErrorsForForm, useInternalIsSubmitting, useInternalHasBeenSubmitted, useTouchedFields, useInternalIsValid, useFieldErrors, useValidateField, useValidate, useSetFieldErrors, useResetFormElement, useSyncedDefaultValues, useFormActionProp, useFormSubactionProp, useSubmitForm, useFormValues, } from "../internal/hooks";
3
- /**
4
- * Returns information about the form.
5
- *
6
- * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.
7
- */
8
- export const useFormState = (formId) => {
9
- const formContext = useInternalFormContext(formId, "useFormState");
10
- const isSubmitting = useInternalIsSubmitting(formContext.formId);
11
- const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);
12
- const touchedFields = useTouchedFields(formContext.formId);
13
- const isValid = useInternalIsValid(formContext.formId);
14
- const action = useFormActionProp(formContext.formId);
15
- const subaction = useFormSubactionProp(formContext.formId);
16
- const syncedDefaultValues = useSyncedDefaultValues(formContext.formId);
17
- const defaultValuesToUse = useDefaultValuesForForm(formContext);
18
- const hydratedDefaultValues = defaultValuesToUse.hydrateTo(syncedDefaultValues);
19
- const fieldErrorsFromState = useFieldErrors(formContext.formId);
20
- const fieldErrorsToUse = useFieldErrorsForForm(formContext);
21
- const hydratedFieldErrors = fieldErrorsToUse.hydrateTo(fieldErrorsFromState);
22
- return useMemo(() => ({
23
- action,
24
- subaction,
25
- defaultValues: hydratedDefaultValues,
26
- fieldErrors: hydratedFieldErrors !== null && hydratedFieldErrors !== void 0 ? hydratedFieldErrors : {},
27
- hasBeenSubmitted,
28
- isSubmitting,
29
- touchedFields,
30
- isValid,
31
- }), [
32
- action,
33
- hasBeenSubmitted,
34
- hydratedDefaultValues,
35
- hydratedFieldErrors,
36
- isSubmitting,
37
- isValid,
38
- subaction,
39
- touchedFields,
40
- ]);
41
- };
42
- /**
43
- * Returns helpers that can be used to update the form state.
44
- *
45
- * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.
46
- */
47
- export const useFormHelpers = (formId) => {
48
- const formContext = useInternalFormContext(formId, "useFormHelpers");
49
- const setTouched = useSetTouched(formContext);
50
- const validateField = useValidateField(formContext.formId);
51
- const validate = useValidate(formContext.formId);
52
- const clearError = useClearError(formContext);
53
- const setFieldErrors = useSetFieldErrors(formContext.formId);
54
- const reset = useResetFormElement(formContext.formId);
55
- const submit = useSubmitForm(formContext.formId);
56
- const getValues = useFormValues(formContext.formId);
57
- return useMemo(() => ({
58
- setTouched,
59
- validateField,
60
- clearError,
61
- validate,
62
- clearAllErrors: () => setFieldErrors({}),
63
- reset,
64
- submit,
65
- getValues,
66
- }), [
67
- clearError,
68
- reset,
69
- setFieldErrors,
70
- setTouched,
71
- submit,
72
- validate,
73
- validateField,
74
- getValues,
75
- ]);
76
- };