remix-validated-form 4.6.5 → 4.6.7

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 (43) hide show
  1. package/README.md +10 -9
  2. package/dist/index.cjs.js +1930 -0
  3. package/dist/index.cjs.js.map +1 -0
  4. package/dist/index.d.ts +337 -0
  5. package/dist/{remix-validated-form.es.js → index.esm.js} +603 -905
  6. package/dist/index.esm.js.map +1 -0
  7. package/package.json +14 -10
  8. package/src/ValidatedForm.tsx +17 -5
  9. package/src/hooks.ts +1 -1
  10. package/src/server.ts +1 -1
  11. package/tsup.config.ts +3 -0
  12. package/dist/remix-validated-form.cjs.js +0 -27
  13. package/dist/remix-validated-form.cjs.js.map +0 -1
  14. package/dist/remix-validated-form.es.js.map +0 -1
  15. package/dist/remix-validated-form.umd.js +0 -27
  16. package/dist/remix-validated-form.umd.js.map +0 -1
  17. package/dist/types/ValidatedForm.d.ts +0 -50
  18. package/dist/types/hooks.d.ts +0 -67
  19. package/dist/types/index.d.ts +0 -7
  20. package/dist/types/internal/MultiValueMap.d.ts +0 -11
  21. package/dist/types/internal/constants.d.ts +0 -3
  22. package/dist/types/internal/flatten.d.ts +0 -1
  23. package/dist/types/internal/formContext.d.ts +0 -12
  24. package/dist/types/internal/getInputProps.d.ts +0 -29
  25. package/dist/types/internal/hooks.d.ts +0 -35
  26. package/dist/types/internal/hydratable.d.ts +0 -14
  27. package/dist/types/internal/logic/getCheckboxChecked.d.ts +0 -1
  28. package/dist/types/internal/logic/getRadioChecked.d.ts +0 -1
  29. package/dist/types/internal/logic/requestSubmit.d.ts +0 -5
  30. package/dist/types/internal/state/arrayUtil.d.ts +0 -12
  31. package/dist/types/internal/state/controlledFields.d.ts +0 -7
  32. package/dist/types/internal/state/createFormStore.d.ts +0 -79
  33. package/dist/types/internal/state/fieldArray.d.ts +0 -28
  34. package/dist/types/internal/state/storeHooks.d.ts +0 -3
  35. package/dist/types/internal/state/types.d.ts +0 -1
  36. package/dist/types/internal/submissionCallbacks.d.ts +0 -1
  37. package/dist/types/internal/util.d.ts +0 -5
  38. package/dist/types/server.d.ts +0 -21
  39. package/dist/types/unreleased/formStateHooks.d.ts +0 -64
  40. package/dist/types/userFacingFormContext.d.ts +0 -85
  41. package/dist/types/validation/createValidator.d.ts +0 -7
  42. package/dist/types/validation/types.d.ts +0 -58
  43. package/vite.config.ts +0 -7
@@ -1,177 +1,11 @@
1
- import React, { createContext, useDebugValue, useContext, useCallback, useEffect, useMemo, useRef, useLayoutEffect, useState } from "react";
2
- import { useActionData, useMatches, useTransition, Form, useSubmit } from "@remix-run/react";
3
- var __spreadArray = globalThis && globalThis.__spreadArray || function(to, from2, pack) {
4
- if (pack || arguments.length === 2)
5
- for (var i2 = 0, l2 = from2.length, ar; i2 < l2; i2++) {
6
- if (ar || !(i2 in from2)) {
7
- if (!ar)
8
- ar = Array.prototype.slice.call(from2, 0, i2);
9
- ar[i2] = from2[i2];
10
- }
11
- }
12
- return to.concat(ar || Array.prototype.slice.call(from2));
13
- };
14
- function purry(fn2, args, lazy) {
15
- var diff = fn2.length - args.length;
16
- var arrayArgs = Array.from(args);
17
- if (diff === 0) {
18
- return fn2.apply(void 0, arrayArgs);
19
- }
20
- if (diff === 1) {
21
- var ret = function(data) {
22
- return fn2.apply(void 0, __spreadArray([data], arrayArgs, false));
23
- };
24
- if (lazy || fn2.lazy) {
25
- ret.lazy = lazy || fn2.lazy;
26
- ret.lazyArgs = args;
27
- }
28
- return ret;
29
- }
30
- throw new Error("Wrong number of arguments");
31
- }
32
- function _reduceLazy(array, lazy, indexed) {
33
- return array.reduce(function(acc, item, index) {
34
- var result = indexed ? lazy(item, index, array) : lazy(item);
35
- if (result.hasMany === true) {
36
- acc.push.apply(acc, result.next);
37
- } else if (result.hasNext === true) {
38
- acc.push(result.next);
39
- }
40
- return acc;
41
- }, []);
42
- }
43
- var isArray = Array.isArray;
44
- var keyList = Object.keys;
45
- var hasProp = Object.prototype.hasOwnProperty;
46
- function equals() {
47
- return purry(_equals, arguments);
48
- }
49
- function _equals(a2, b2) {
50
- if (a2 === b2) {
51
- return true;
52
- }
53
- if (a2 && b2 && typeof a2 === "object" && typeof b2 === "object") {
54
- var arrA = isArray(a2);
55
- var arrB = isArray(b2);
56
- var i2 = void 0;
57
- var length = void 0;
58
- var key = void 0;
59
- if (arrA && arrB) {
60
- length = a2.length;
61
- if (length !== b2.length) {
62
- return false;
63
- }
64
- for (i2 = length; i2-- !== 0; ) {
65
- if (!equals(a2[i2], b2[i2])) {
66
- return false;
67
- }
68
- }
69
- return true;
70
- }
71
- if (arrA !== arrB) {
72
- return false;
73
- }
74
- var dateA = a2 instanceof Date;
75
- var dateB = b2 instanceof Date;
76
- if (dateA !== dateB) {
77
- return false;
78
- }
79
- if (dateA && dateB) {
80
- return a2.getTime() === b2.getTime();
81
- }
82
- var regexpA = a2 instanceof RegExp;
83
- var regexpB = b2 instanceof RegExp;
84
- if (regexpA !== regexpB) {
85
- return false;
86
- }
87
- if (regexpA && regexpB) {
88
- return a2.toString() === b2.toString();
89
- }
90
- var keys = keyList(a2);
91
- length = keys.length;
92
- if (length !== keyList(b2).length) {
93
- return false;
94
- }
95
- for (i2 = length; i2-- !== 0; ) {
96
- if (!hasProp.call(b2, keys[i2])) {
97
- return false;
98
- }
99
- }
100
- for (i2 = length; i2-- !== 0; ) {
101
- key = keys[i2];
102
- if (!equals(a2[key], b2[key])) {
103
- return false;
104
- }
105
- }
106
- return true;
107
- }
108
- return a2 !== a2 && b2 !== b2;
109
- }
110
- function omit() {
111
- return purry(_omit, arguments);
112
- }
113
- function _omit(object, names) {
114
- var set = new Set(names);
115
- return Object.entries(object).reduce(function(acc, _a) {
116
- var name = _a[0], value = _a[1];
117
- if (!set.has(name)) {
118
- acc[name] = value;
119
- }
120
- return acc;
121
- }, {});
122
- }
123
- function omitBy() {
124
- return purry(_omitBy, arguments);
125
- }
126
- function _omitBy(object, fn2) {
127
- return Object.keys(object).reduce(function(acc, key) {
128
- if (!fn2(object[key], key)) {
129
- acc[key] = object[key];
130
- }
131
- return acc;
132
- }, {});
133
- }
134
- function pathOr() {
135
- return purry(_pathOr, arguments);
136
- }
137
- function _pathOr(object, path, defaultValue) {
138
- var current = object;
139
- for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {
140
- var prop = path_1[_i];
141
- if (current == null || current[prop] == null) {
142
- return defaultValue;
143
- }
144
- current = current[prop];
145
- }
146
- return current;
147
- }
148
- function uniq() {
149
- return purry(_uniq, arguments, uniq.lazy);
150
- }
151
- function _uniq(array) {
152
- return _reduceLazy(array, uniq.lazy());
153
- }
154
- (function(uniq2) {
155
- function lazy() {
156
- var set = /* @__PURE__ */ new Set();
157
- return function(value) {
158
- if (set.has(value)) {
159
- return {
160
- done: false,
161
- hasNext: false
162
- };
163
- }
164
- set.add(value);
165
- return {
166
- done: false,
167
- hasNext: true,
168
- next: value
169
- };
170
- };
171
- }
172
- uniq2.lazy = lazy;
173
- })(uniq || (uniq = {}));
174
- const getCheckboxChecked = (checkboxValue = "on", newValue) => {
1
+ // src/hooks.ts
2
+ import { useEffect as useEffect2, useMemo } from "react";
3
+
4
+ // src/internal/getInputProps.ts
5
+ import * as R from "remeda";
6
+
7
+ // src/internal/logic/getCheckboxChecked.ts
8
+ var getCheckboxChecked = (checkboxValue = "on", newValue) => {
175
9
  if (Array.isArray(newValue))
176
10
  return newValue.some((val) => val === true || val === checkboxValue);
177
11
  if (typeof newValue === "boolean")
@@ -180,17 +14,31 @@ const getCheckboxChecked = (checkboxValue = "on", newValue) => {
180
14
  return newValue === checkboxValue;
181
15
  return void 0;
182
16
  };
183
- const getRadioChecked = (radioValue = "on", newValue) => {
17
+
18
+ // src/internal/logic/getRadioChecked.ts
19
+ var getRadioChecked = (radioValue = "on", newValue) => {
184
20
  if (typeof newValue === "string")
185
21
  return newValue === radioValue;
186
22
  return void 0;
187
23
  };
188
- const defaultValidationBehavior = {
24
+ if (void 0) {
25
+ const { it, expect } = void 0;
26
+ it("getRadioChecked", () => {
27
+ expect(getRadioChecked("on", "on")).toBe(true);
28
+ expect(getRadioChecked("on", void 0)).toBe(void 0);
29
+ expect(getRadioChecked("trueValue", void 0)).toBe(void 0);
30
+ expect(getRadioChecked("trueValue", "bob")).toBe(false);
31
+ expect(getRadioChecked("trueValue", "trueValue")).toBe(true);
32
+ });
33
+ }
34
+
35
+ // src/internal/getInputProps.ts
36
+ var defaultValidationBehavior = {
189
37
  initial: "onBlur",
190
38
  whenTouched: "onChange",
191
39
  whenSubmitted: "onChange"
192
40
  };
193
- const createGetInputProps = ({
41
+ var createGetInputProps = ({
194
42
  clearError,
195
43
  validate,
196
44
  defaultValue,
@@ -232,19 +80,27 @@ const createGetInputProps = ({
232
80
  } else if (props.value === void 0) {
233
81
  inputProps.defaultValue = defaultValue;
234
82
  }
235
- return omitBy(inputProps, (value) => value === void 0);
83
+ return R.omitBy(inputProps, (value) => value === void 0);
236
84
  };
237
85
  };
238
- const stringToPathArray = (path) => {
86
+
87
+ // src/internal/hooks.ts
88
+ import { useActionData, useMatches, useTransition } from "@remix-run/react";
89
+ import { useCallback, useContext } from "react";
90
+
91
+ // ../set-get/src/stringToPathArray.ts
92
+ var stringToPathArray = (path) => {
239
93
  if (path.length === 0)
240
94
  return [];
241
95
  const match = path.match(/^\[(.+?)\](.*)$/) || path.match(/^\.?([^\.\[\]]+)(.*)$/);
242
96
  if (match) {
243
- const [_2, key, rest] = match;
97
+ const [_, key, rest] = match;
244
98
  return [/^\d+$/.test(key) ? Number(key) : key, ...stringToPathArray(rest)];
245
99
  }
246
100
  return [path];
247
101
  };
102
+
103
+ // ../set-get/src/setPath.ts
248
104
  function setPath(object, path, defaultValue) {
249
105
  return _setPathNormalized(object, stringToPathArray(path), defaultValue);
250
106
  }
@@ -253,10 +109,10 @@ function _setPathNormalized(object, path, value) {
253
109
  const leadingSegments = path.slice(0, -1);
254
110
  const lastSegment = path[path.length - 1];
255
111
  let obj = object;
256
- for (let i2 = 0; i2 < leadingSegments.length; i2++) {
257
- const segment = leadingSegments[i2];
112
+ for (let i = 0; i < leadingSegments.length; i++) {
113
+ const segment = leadingSegments[i];
258
114
  if (obj[segment] === void 0) {
259
- const nextSegment = (_a = leadingSegments[i2 + 1]) != null ? _a : lastSegment;
115
+ const nextSegment = (_a = leadingSegments[i + 1]) != null ? _a : lastSegment;
260
116
  obj[segment] = typeof nextSegment === "number" ? [] : {};
261
117
  }
262
118
  obj = obj[segment];
@@ -264,546 +120,48 @@ function _setPathNormalized(object, path, value) {
264
120
  obj[lastSegment] = value;
265
121
  return object;
266
122
  }
267
- const getPath = (object, path) => pathOr(object, stringToPathArray(path), void 0);
268
- var isProduction = true;
269
- var prefix = "Invariant failed";
270
- function invariant(condition, message) {
271
- if (condition) {
272
- return;
273
- }
274
- if (isProduction) {
275
- throw new Error(prefix);
276
- }
277
- var provided = typeof message === "function" ? message() : message;
278
- var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
279
- throw new Error(value);
280
- }
281
- const FORM_ID_FIELD = "__rvfInternalFormId";
282
- const FORM_DEFAULTS_FIELD = "__rvfInternalFormDefaults";
283
- const formDefaultValuesKey = (formId) => `${FORM_DEFAULTS_FIELD}_${formId}`;
284
- const InternalFormContext = createContext(null);
285
- const serverData = (data) => ({
123
+
124
+ // ../set-get/src/getPath.ts
125
+ import get from "lodash.get";
126
+ var getPath = (object, path) => {
127
+ return get(object, path);
128
+ };
129
+
130
+ // src/internal/hooks.ts
131
+ import invariant3 from "tiny-invariant";
132
+
133
+ // src/internal/constants.ts
134
+ var FORM_ID_FIELD = "__rvfInternalFormId";
135
+ var FORM_DEFAULTS_FIELD = "__rvfInternalFormDefaults";
136
+ var formDefaultValuesKey = (formId) => `${FORM_DEFAULTS_FIELD}_${formId}`;
137
+
138
+ // src/internal/formContext.ts
139
+ import { createContext } from "react";
140
+ var InternalFormContext = createContext(null);
141
+
142
+ // src/internal/hydratable.ts
143
+ var serverData = (data) => ({
286
144
  hydrateTo: () => data,
287
- map: (fn2) => serverData(fn2(data))
145
+ map: (fn) => serverData(fn(data))
288
146
  });
289
- const hydratedData = () => ({
147
+ var hydratedData = () => ({
290
148
  hydrateTo: (hydratedData2) => hydratedData2,
291
149
  map: () => hydratedData()
292
150
  });
293
- const from = (data, hydrated) => hydrated ? hydratedData() : serverData(data);
294
- const hydratable = {
151
+ var from = (data, hydrated) => hydrated ? hydratedData() : serverData(data);
152
+ var hydratable = {
295
153
  serverData,
296
154
  hydratedData,
297
155
  from
298
156
  };
299
- const createStoreImpl = (createState) => {
300
- let state;
301
- const listeners = /* @__PURE__ */ new Set();
302
- const setState = (partial, replace2) => {
303
- const nextState = typeof partial === "function" ? partial(state) : partial;
304
- if (!Object.is(nextState, state)) {
305
- const previousState = state;
306
- state = (replace2 != null ? replace2 : typeof nextState !== "object") ? nextState : Object.assign({}, state, nextState);
307
- listeners.forEach((listener) => listener(state, previousState));
308
- }
309
- };
310
- const getState = () => state;
311
- const subscribe = (listener) => {
312
- listeners.add(listener);
313
- return () => listeners.delete(listener);
314
- };
315
- const destroy = () => listeners.clear();
316
- const api = { setState, getState, subscribe, destroy };
317
- state = createState(setState, getState, api);
318
- return api;
319
- };
320
- const createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;
321
- var withSelector = { exports: {} };
322
- var withSelector_production_min = {};
323
- var shim = { exports: {} };
324
- var useSyncExternalStoreShim_production_min = {};
325
- /**
326
- * @license React
327
- * use-sync-external-store-shim.production.min.js
328
- *
329
- * Copyright (c) Facebook, Inc. and its affiliates.
330
- *
331
- * This source code is licensed under the MIT license found in the
332
- * LICENSE file in the root directory of this source tree.
333
- */
334
- var e = React;
335
- function h$2(a2, b2) {
336
- return a2 === b2 && (0 !== a2 || 1 / a2 === 1 / b2) || a2 !== a2 && b2 !== b2;
337
- }
338
- var k$1 = "function" === typeof Object.is ? Object.is : h$2, l$1 = e.useState, m = e.useEffect, n$2 = e.useLayoutEffect, p$2 = e.useDebugValue;
339
- function q$2(a2, b2) {
340
- var d2 = b2(), f2 = l$1({ inst: { value: d2, getSnapshot: b2 } }), c2 = f2[0].inst, g2 = f2[1];
341
- n$2(function() {
342
- c2.value = d2;
343
- c2.getSnapshot = b2;
344
- r$2(c2) && g2({ inst: c2 });
345
- }, [a2, d2, b2]);
346
- m(function() {
347
- r$2(c2) && g2({ inst: c2 });
348
- return a2(function() {
349
- r$2(c2) && g2({ inst: c2 });
350
- });
351
- }, [a2]);
352
- p$2(d2);
353
- return d2;
354
- }
355
- function r$2(a2) {
356
- var b2 = a2.getSnapshot;
357
- a2 = a2.value;
358
- try {
359
- var d2 = b2();
360
- return !k$1(a2, d2);
361
- } catch (f2) {
362
- return true;
363
- }
364
- }
365
- function t$2(a2, b2) {
366
- return b2();
367
- }
368
- var u$2 = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? t$2 : q$2;
369
- useSyncExternalStoreShim_production_min.useSyncExternalStore = void 0 !== e.useSyncExternalStore ? e.useSyncExternalStore : u$2;
370
- {
371
- shim.exports = useSyncExternalStoreShim_production_min;
372
- }
373
- /**
374
- * @license React
375
- * use-sync-external-store-shim/with-selector.production.min.js
376
- *
377
- * Copyright (c) Facebook, Inc. and its affiliates.
378
- *
379
- * This source code is licensed under the MIT license found in the
380
- * LICENSE file in the root directory of this source tree.
381
- */
382
- var h$1 = React, n$1 = shim.exports;
383
- function p$1(a2, b2) {
384
- return a2 === b2 && (0 !== a2 || 1 / a2 === 1 / b2) || a2 !== a2 && b2 !== b2;
385
- }
386
- var q$1 = "function" === typeof Object.is ? Object.is : p$1, r$1 = n$1.useSyncExternalStore, t$1 = h$1.useRef, u$1 = h$1.useEffect, v$1 = h$1.useMemo, w$1 = h$1.useDebugValue;
387
- withSelector_production_min.useSyncExternalStoreWithSelector = function(a2, b2, e2, l2, g2) {
388
- var c2 = t$1(null);
389
- if (null === c2.current) {
390
- var f2 = { hasValue: false, value: null };
391
- c2.current = f2;
392
- } else
393
- f2 = c2.current;
394
- c2 = v$1(function() {
395
- function a3(a4) {
396
- if (!c3) {
397
- c3 = true;
398
- d3 = a4;
399
- a4 = l2(a4);
400
- if (void 0 !== g2 && f2.hasValue) {
401
- var b3 = f2.value;
402
- if (g2(b3, a4))
403
- return k2 = b3;
404
- }
405
- return k2 = a4;
406
- }
407
- b3 = k2;
408
- if (q$1(d3, a4))
409
- return b3;
410
- var e3 = l2(a4);
411
- if (void 0 !== g2 && g2(b3, e3))
412
- return b3;
413
- d3 = a4;
414
- return k2 = e3;
415
- }
416
- var c3 = false, d3, k2, m2 = void 0 === e2 ? null : e2;
417
- return [function() {
418
- return a3(b2());
419
- }, null === m2 ? void 0 : function() {
420
- return a3(m2());
421
- }];
422
- }, [b2, e2, l2, g2]);
423
- var d2 = r$1(a2, c2[0], c2[1]);
424
- u$1(function() {
425
- f2.hasValue = true;
426
- f2.value = d2;
427
- }, [d2]);
428
- w$1(d2);
429
- return d2;
430
- };
431
- {
432
- withSelector.exports = withSelector_production_min;
433
- }
434
- var useSyncExternalStoreExports = withSelector.exports;
435
- const { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;
436
- function useStore(api, selector = api.getState, equalityFn) {
437
- const slice = useSyncExternalStoreWithSelector(
438
- api.subscribe,
439
- api.getState,
440
- api.getServerState || api.getState,
441
- selector,
442
- equalityFn
443
- );
444
- useDebugValue(slice);
445
- return slice;
446
- }
447
- const createImpl = (createState) => {
448
- const api = typeof createState === "function" ? createStore(createState) : createState;
449
- const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);
450
- Object.assign(useBoundStore, api);
451
- return useBoundStore;
452
- };
453
- const create = (createState) => createState ? createImpl(createState) : createImpl;
454
- function n(n2) {
455
- for (var r2 = arguments.length, t2 = Array(r2 > 1 ? r2 - 1 : 0), e2 = 1; e2 < r2; e2++)
456
- t2[e2 - 1] = arguments[e2];
457
- throw Error("[Immer] minified error nr: " + n2 + (t2.length ? " " + t2.map(function(n3) {
458
- return "'" + n3 + "'";
459
- }).join(",") : "") + ". Find the full error at: https://bit.ly/3cXEKWf");
460
- }
461
- function r(n2) {
462
- return !!n2 && !!n2[Q];
463
- }
464
- function t(n2) {
465
- var r2;
466
- return !!n2 && (function(n3) {
467
- if (!n3 || "object" != typeof n3)
468
- return false;
469
- var r3 = Object.getPrototypeOf(n3);
470
- if (null === r3)
471
- return true;
472
- var t2 = Object.hasOwnProperty.call(r3, "constructor") && r3.constructor;
473
- return t2 === Object || "function" == typeof t2 && Function.toString.call(t2) === Z;
474
- }(n2) || Array.isArray(n2) || !!n2[L] || !!(null === (r2 = n2.constructor) || void 0 === r2 ? void 0 : r2[L]) || s(n2) || v(n2));
475
- }
476
- function i(n2, r2, t2) {
477
- void 0 === t2 && (t2 = false), 0 === o(n2) ? (t2 ? Object.keys : nn)(n2).forEach(function(e2) {
478
- t2 && "symbol" == typeof e2 || r2(e2, n2[e2], n2);
479
- }) : n2.forEach(function(t3, e2) {
480
- return r2(e2, t3, n2);
481
- });
482
- }
483
- function o(n2) {
484
- var r2 = n2[Q];
485
- return r2 ? r2.i > 3 ? r2.i - 4 : r2.i : Array.isArray(n2) ? 1 : s(n2) ? 2 : v(n2) ? 3 : 0;
486
- }
487
- function u(n2, r2) {
488
- return 2 === o(n2) ? n2.has(r2) : Object.prototype.hasOwnProperty.call(n2, r2);
489
- }
490
- function a(n2, r2) {
491
- return 2 === o(n2) ? n2.get(r2) : n2[r2];
492
- }
493
- function f(n2, r2, t2) {
494
- var e2 = o(n2);
495
- 2 === e2 ? n2.set(r2, t2) : 3 === e2 ? (n2.delete(r2), n2.add(t2)) : n2[r2] = t2;
496
- }
497
- function c(n2, r2) {
498
- return n2 === r2 ? 0 !== n2 || 1 / n2 == 1 / r2 : n2 != n2 && r2 != r2;
499
- }
500
- function s(n2) {
501
- return X && n2 instanceof Map;
502
- }
503
- function v(n2) {
504
- return q && n2 instanceof Set;
505
- }
506
- function p(n2) {
507
- return n2.o || n2.t;
508
- }
509
- function l(n2) {
510
- if (Array.isArray(n2))
511
- return Array.prototype.slice.call(n2);
512
- var r2 = rn(n2);
513
- delete r2[Q];
514
- for (var t2 = nn(r2), e2 = 0; e2 < t2.length; e2++) {
515
- var i2 = t2[e2], o2 = r2[i2];
516
- false === o2.writable && (o2.writable = true, o2.configurable = true), (o2.get || o2.set) && (r2[i2] = { configurable: true, writable: true, enumerable: o2.enumerable, value: n2[i2] });
517
- }
518
- return Object.create(Object.getPrototypeOf(n2), r2);
519
- }
520
- function d(n2, e2) {
521
- return void 0 === e2 && (e2 = false), y(n2) || r(n2) || !t(n2) ? n2 : (o(n2) > 1 && (n2.set = n2.add = n2.clear = n2.delete = h), Object.freeze(n2), e2 && i(n2, function(n3, r2) {
522
- return d(r2, true);
523
- }, true), n2);
524
- }
525
- function h() {
526
- n(2);
527
- }
528
- function y(n2) {
529
- return null == n2 || "object" != typeof n2 || Object.isFrozen(n2);
530
- }
531
- function b(r2) {
532
- var t2 = tn[r2];
533
- return t2 || n(18, r2), t2;
534
- }
535
- function _() {
536
- return U;
537
- }
538
- function j(n2, r2) {
539
- r2 && (b("Patches"), n2.u = [], n2.s = [], n2.v = r2);
540
- }
541
- function O(n2) {
542
- g(n2), n2.p.forEach(S), n2.p = null;
543
- }
544
- function g(n2) {
545
- n2 === U && (U = n2.l);
546
- }
547
- function w(n2) {
548
- return U = { p: [], l: U, h: n2, m: true, _: 0 };
549
- }
550
- function S(n2) {
551
- var r2 = n2[Q];
552
- 0 === r2.i || 1 === r2.i ? r2.j() : r2.O = true;
553
- }
554
- function P(r2, e2) {
555
- e2._ = e2.p.length;
556
- var i2 = e2.p[0], o2 = void 0 !== r2 && r2 !== i2;
557
- return e2.h.g || b("ES5").S(e2, r2, o2), o2 ? (i2[Q].P && (O(e2), n(4)), t(r2) && (r2 = M(e2, r2), e2.l || x(e2, r2)), e2.u && b("Patches").M(i2[Q].t, r2, e2.u, e2.s)) : r2 = M(e2, i2, []), O(e2), e2.u && e2.v(e2.u, e2.s), r2 !== H ? r2 : void 0;
558
- }
559
- function M(n2, r2, t2) {
560
- if (y(r2))
561
- return r2;
562
- var e2 = r2[Q];
563
- if (!e2)
564
- return i(r2, function(i2, o3) {
565
- return A(n2, e2, r2, i2, o3, t2);
566
- }, true), r2;
567
- if (e2.A !== n2)
568
- return r2;
569
- if (!e2.P)
570
- return x(n2, e2.t, true), e2.t;
571
- if (!e2.I) {
572
- e2.I = true, e2.A._--;
573
- var o2 = 4 === e2.i || 5 === e2.i ? e2.o = l(e2.k) : e2.o;
574
- i(3 === e2.i ? new Set(o2) : o2, function(r3, i2) {
575
- return A(n2, e2, o2, r3, i2, t2);
576
- }), x(n2, o2, false), t2 && n2.u && b("Patches").R(e2, t2, n2.u, n2.s);
577
- }
578
- return e2.o;
579
- }
580
- function A(e2, i2, o2, a2, c2, s2) {
581
- if (r(c2)) {
582
- var v2 = M(e2, c2, s2 && i2 && 3 !== i2.i && !u(i2.D, a2) ? s2.concat(a2) : void 0);
583
- if (f(o2, a2, v2), !r(v2))
584
- return;
585
- e2.m = false;
586
- }
587
- if (t(c2) && !y(c2)) {
588
- if (!e2.h.F && e2._ < 1)
589
- return;
590
- M(e2, c2), i2 && i2.A.l || x(e2, c2);
591
- }
592
- }
593
- function x(n2, r2, t2) {
594
- void 0 === t2 && (t2 = false), n2.h.F && n2.m && d(r2, t2);
595
- }
596
- function z(n2, r2) {
597
- var t2 = n2[Q];
598
- return (t2 ? p(t2) : n2)[r2];
599
- }
600
- function I(n2, r2) {
601
- if (r2 in n2)
602
- for (var t2 = Object.getPrototypeOf(n2); t2; ) {
603
- var e2 = Object.getOwnPropertyDescriptor(t2, r2);
604
- if (e2)
605
- return e2;
606
- t2 = Object.getPrototypeOf(t2);
607
- }
608
- }
609
- function k(n2) {
610
- n2.P || (n2.P = true, n2.l && k(n2.l));
611
- }
612
- function E(n2) {
613
- n2.o || (n2.o = l(n2.t));
614
- }
615
- function R(n2, r2, t2) {
616
- var e2 = s(r2) ? b("MapSet").N(r2, t2) : v(r2) ? b("MapSet").T(r2, t2) : n2.g ? function(n3, r3) {
617
- var t3 = Array.isArray(n3), e3 = { i: t3 ? 1 : 0, A: r3 ? r3.A : _(), P: false, I: false, D: {}, l: r3, t: n3, k: null, o: null, j: null, C: false }, i2 = e3, o2 = en;
618
- t3 && (i2 = [e3], o2 = on);
619
- var u2 = Proxy.revocable(i2, o2), a2 = u2.revoke, f2 = u2.proxy;
620
- return e3.k = f2, e3.j = a2, f2;
621
- }(r2, t2) : b("ES5").J(r2, t2);
622
- return (t2 ? t2.A : _()).p.push(e2), e2;
623
- }
624
- function D(e2) {
625
- return r(e2) || n(22, e2), function n2(r2) {
626
- if (!t(r2))
627
- return r2;
628
- var e3, u2 = r2[Q], c2 = o(r2);
629
- if (u2) {
630
- if (!u2.P && (u2.i < 4 || !b("ES5").K(u2)))
631
- return u2.t;
632
- u2.I = true, e3 = F(r2, c2), u2.I = false;
633
- } else
634
- e3 = F(r2, c2);
635
- return i(e3, function(r3, t2) {
636
- u2 && a(u2.t, r3) === t2 || f(e3, r3, n2(t2));
637
- }), 3 === c2 ? new Set(e3) : e3;
638
- }(e2);
639
- }
640
- function F(n2, r2) {
641
- switch (r2) {
642
- case 2:
643
- return new Map(n2);
644
- case 3:
645
- return Array.from(n2);
646
- }
647
- return l(n2);
648
- }
649
- var G, U, W = "undefined" != typeof Symbol && "symbol" == typeof Symbol("x"), X = "undefined" != typeof Map, q = "undefined" != typeof Set, B = "undefined" != typeof Proxy && void 0 !== Proxy.revocable && "undefined" != typeof Reflect, H = W ? Symbol.for("immer-nothing") : ((G = {})["immer-nothing"] = true, G), L = W ? Symbol.for("immer-draftable") : "__$immer_draftable", Q = W ? Symbol.for("immer-state") : "__$immer_state", Z = "" + Object.prototype.constructor, nn = "undefined" != typeof Reflect && Reflect.ownKeys ? Reflect.ownKeys : void 0 !== Object.getOwnPropertySymbols ? function(n2) {
650
- return Object.getOwnPropertyNames(n2).concat(Object.getOwnPropertySymbols(n2));
651
- } : Object.getOwnPropertyNames, rn = Object.getOwnPropertyDescriptors || function(n2) {
652
- var r2 = {};
653
- return nn(n2).forEach(function(t2) {
654
- r2[t2] = Object.getOwnPropertyDescriptor(n2, t2);
655
- }), r2;
656
- }, tn = {}, en = { get: function(n2, r2) {
657
- if (r2 === Q)
658
- return n2;
659
- var e2 = p(n2);
660
- if (!u(e2, r2))
661
- return function(n3, r3, t2) {
662
- var e3, i3 = I(r3, t2);
663
- return i3 ? "value" in i3 ? i3.value : null === (e3 = i3.get) || void 0 === e3 ? void 0 : e3.call(n3.k) : void 0;
664
- }(n2, e2, r2);
665
- var i2 = e2[r2];
666
- return n2.I || !t(i2) ? i2 : i2 === z(n2.t, r2) ? (E(n2), n2.o[r2] = R(n2.A.h, i2, n2)) : i2;
667
- }, has: function(n2, r2) {
668
- return r2 in p(n2);
669
- }, ownKeys: function(n2) {
670
- return Reflect.ownKeys(p(n2));
671
- }, set: function(n2, r2, t2) {
672
- var e2 = I(p(n2), r2);
673
- if (null == e2 ? void 0 : e2.set)
674
- return e2.set.call(n2.k, t2), true;
675
- if (!n2.P) {
676
- var i2 = z(p(n2), r2), o2 = null == i2 ? void 0 : i2[Q];
677
- if (o2 && o2.t === t2)
678
- return n2.o[r2] = t2, n2.D[r2] = false, true;
679
- if (c(t2, i2) && (void 0 !== t2 || u(n2.t, r2)))
680
- return true;
681
- E(n2), k(n2);
682
- }
683
- return n2.o[r2] === t2 && "number" != typeof t2 && (void 0 !== t2 || r2 in n2.o) || (n2.o[r2] = t2, n2.D[r2] = true, true);
684
- }, deleteProperty: function(n2, r2) {
685
- return void 0 !== z(n2.t, r2) || r2 in n2.t ? (n2.D[r2] = false, E(n2), k(n2)) : delete n2.D[r2], n2.o && delete n2.o[r2], true;
686
- }, getOwnPropertyDescriptor: function(n2, r2) {
687
- var t2 = p(n2), e2 = Reflect.getOwnPropertyDescriptor(t2, r2);
688
- return e2 ? { writable: true, configurable: 1 !== n2.i || "length" !== r2, enumerable: e2.enumerable, value: t2[r2] } : e2;
689
- }, defineProperty: function() {
690
- n(11);
691
- }, getPrototypeOf: function(n2) {
692
- return Object.getPrototypeOf(n2.t);
693
- }, setPrototypeOf: function() {
694
- n(12);
695
- } }, on = {};
696
- i(en, function(n2, r2) {
697
- on[n2] = function() {
698
- return arguments[0] = arguments[0][0], r2.apply(this, arguments);
699
- };
700
- }), on.deleteProperty = function(r2, t2) {
701
- return on.set.call(this, r2, t2, void 0);
702
- }, on.set = function(r2, t2, e2) {
703
- return en.set.call(this, r2[0], t2, e2, r2[0]);
704
- };
705
- var un = function() {
706
- function e2(r2) {
707
- var e3 = this;
708
- this.g = B, this.F = true, this.produce = function(r3, i3, o2) {
709
- if ("function" == typeof r3 && "function" != typeof i3) {
710
- var u2 = i3;
711
- i3 = r3;
712
- var a2 = e3;
713
- return function(n2) {
714
- var r4 = this;
715
- void 0 === n2 && (n2 = u2);
716
- for (var t2 = arguments.length, e4 = Array(t2 > 1 ? t2 - 1 : 0), o3 = 1; o3 < t2; o3++)
717
- e4[o3 - 1] = arguments[o3];
718
- return a2.produce(n2, function(n3) {
719
- var t3;
720
- return (t3 = i3).call.apply(t3, [r4, n3].concat(e4));
721
- });
722
- };
723
- }
724
- var f2;
725
- if ("function" != typeof i3 && n(6), void 0 !== o2 && "function" != typeof o2 && n(7), t(r3)) {
726
- var c2 = w(e3), s2 = R(e3, r3, void 0), v2 = true;
727
- try {
728
- f2 = i3(s2), v2 = false;
729
- } finally {
730
- v2 ? O(c2) : g(c2);
731
- }
732
- return "undefined" != typeof Promise && f2 instanceof Promise ? f2.then(function(n2) {
733
- return j(c2, o2), P(n2, c2);
734
- }, function(n2) {
735
- throw O(c2), n2;
736
- }) : (j(c2, o2), P(f2, c2));
737
- }
738
- if (!r3 || "object" != typeof r3) {
739
- if (void 0 === (f2 = i3(r3)) && (f2 = r3), f2 === H && (f2 = void 0), e3.F && d(f2, true), o2) {
740
- var p2 = [], l2 = [];
741
- b("Patches").M(r3, f2, p2, l2), o2(p2, l2);
742
- }
743
- return f2;
744
- }
745
- n(21, r3);
746
- }, this.produceWithPatches = function(n2, r3) {
747
- if ("function" == typeof n2)
748
- return function(r4) {
749
- for (var t3 = arguments.length, i4 = Array(t3 > 1 ? t3 - 1 : 0), o3 = 1; o3 < t3; o3++)
750
- i4[o3 - 1] = arguments[o3];
751
- return e3.produceWithPatches(r4, function(r5) {
752
- return n2.apply(void 0, [r5].concat(i4));
753
- });
754
- };
755
- var t2, i3, o2 = e3.produce(n2, r3, function(n3, r4) {
756
- t2 = n3, i3 = r4;
757
- });
758
- return "undefined" != typeof Promise && o2 instanceof Promise ? o2.then(function(n3) {
759
- return [n3, t2, i3];
760
- }) : [o2, t2, i3];
761
- }, "boolean" == typeof (null == r2 ? void 0 : r2.useProxies) && this.setUseProxies(r2.useProxies), "boolean" == typeof (null == r2 ? void 0 : r2.autoFreeze) && this.setAutoFreeze(r2.autoFreeze);
762
- }
763
- var i2 = e2.prototype;
764
- return i2.createDraft = function(e3) {
765
- t(e3) || n(8), r(e3) && (e3 = D(e3));
766
- var i3 = w(this), o2 = R(this, e3, void 0);
767
- return o2[Q].C = true, g(i3), o2;
768
- }, i2.finishDraft = function(r2, t2) {
769
- var e3 = r2 && r2[Q];
770
- var i3 = e3.A;
771
- return j(i3, t2), P(void 0, i3);
772
- }, i2.setAutoFreeze = function(n2) {
773
- this.F = n2;
774
- }, i2.setUseProxies = function(r2) {
775
- r2 && !B && n(20), this.g = r2;
776
- }, i2.applyPatches = function(n2, t2) {
777
- var e3;
778
- for (e3 = t2.length - 1; e3 >= 0; e3--) {
779
- var i3 = t2[e3];
780
- if (0 === i3.path.length && "replace" === i3.op) {
781
- n2 = i3.value;
782
- break;
783
- }
784
- }
785
- e3 > -1 && (t2 = t2.slice(e3 + 1));
786
- var o2 = b("Patches").$;
787
- return r(n2) ? o2(n2, t2) : this.produce(n2, function(n3) {
788
- return o2(n3, t2);
789
- });
790
- }, e2;
791
- }(), an = new un(), fn = an.produce;
792
- an.produceWithPatches.bind(an);
793
- an.setAutoFreeze.bind(an);
794
- an.setUseProxies.bind(an);
795
- an.applyPatches.bind(an);
796
- an.createDraft.bind(an);
797
- an.finishDraft.bind(an);
798
- const immerImpl = (initializer) => (set, get, store) => {
799
- store.setState = (updater, replace2, ...a2) => {
800
- const nextState = typeof updater === "function" ? fn(updater) : updater;
801
- return set(nextState, replace2, ...a2);
802
- };
803
- return initializer(store.setState, get, store);
804
- };
805
- const immer = immerImpl;
806
- const requestSubmit = (element, submitter) => {
157
+
158
+ // src/internal/state/createFormStore.ts
159
+ import invariant2 from "tiny-invariant";
160
+ import create from "zustand";
161
+ import { immer } from "zustand/middleware/immer";
162
+
163
+ // src/internal/logic/requestSubmit.ts
164
+ var requestSubmit = (element, submitter) => {
807
165
  if (typeof Object.getPrototypeOf(element).requestSubmit === "function" && true) {
808
166
  element.requestSubmit(submitter);
809
167
  return;
@@ -842,7 +200,38 @@ function raise(errorConstructor, message, name) {
842
200
  name
843
201
  );
844
202
  }
845
- const getArray = (values, field) => {
203
+ if (void 0) {
204
+ const { it, expect } = void 0;
205
+ it("should validate the submitter", () => {
206
+ const form = document.createElement("form");
207
+ document.body.appendChild(form);
208
+ const submitter = document.createElement("input");
209
+ expect(() => validateSubmitter(null, null)).toThrow();
210
+ expect(() => validateSubmitter(form, null)).toThrow();
211
+ expect(() => validateSubmitter(form, submitter)).toThrow();
212
+ expect(
213
+ () => validateSubmitter(form, document.createElement("div"))
214
+ ).toThrow();
215
+ submitter.type = "submit";
216
+ expect(() => validateSubmitter(form, submitter)).toThrow();
217
+ form.appendChild(submitter);
218
+ expect(() => validateSubmitter(form, submitter)).not.toThrow();
219
+ form.removeChild(submitter);
220
+ expect(() => validateSubmitter(form, submitter)).toThrow();
221
+ document.body.appendChild(submitter);
222
+ form.id = "test-form";
223
+ submitter.setAttribute("form", "test-form");
224
+ expect(() => validateSubmitter(form, submitter)).not.toThrow();
225
+ const button = document.createElement("button");
226
+ button.type = "submit";
227
+ form.appendChild(button);
228
+ expect(() => validateSubmitter(form, button)).not.toThrow();
229
+ });
230
+ }
231
+
232
+ // src/internal/state/arrayUtil.ts
233
+ import invariant from "tiny-invariant";
234
+ var getArray = (values, field) => {
846
235
  const value = getPath(values, field);
847
236
  if (value === void 0 || value === null) {
848
237
  const newValue = [];
@@ -855,7 +244,7 @@ const getArray = (values, field) => {
855
244
  );
856
245
  return value;
857
246
  };
858
- const swap = (array, indexA, indexB) => {
247
+ var swap = (array, indexA, indexB) => {
859
248
  const itemA = array[indexA];
860
249
  const itemB = array[indexB];
861
250
  const hasItemA = indexA in array;
@@ -879,20 +268,20 @@ function sparseSplice(array, start, deleteCount, item) {
879
268
  return array.splice(start, deleteCount, item);
880
269
  return array.splice(start, deleteCount);
881
270
  }
882
- const move = (array, from2, to) => {
271
+ var move = (array, from2, to) => {
883
272
  const [item] = sparseSplice(array, from2, 1);
884
273
  sparseSplice(array, to, 0, item);
885
274
  };
886
- const insert = (array, index, value) => {
275
+ var insert = (array, index, value) => {
887
276
  sparseSplice(array, index, 0, value);
888
277
  };
889
- const remove = (array, index) => {
278
+ var remove = (array, index) => {
890
279
  sparseSplice(array, index, 1);
891
280
  };
892
- const replace = (array, index, value) => {
281
+ var replace = (array, index, value) => {
893
282
  sparseSplice(array, index, 1, value);
894
283
  };
895
- const mutateAsArray = (field, obj, mutate) => {
284
+ var mutateAsArray = (field, obj, mutate) => {
896
285
  const beforeKeys = /* @__PURE__ */ new Set();
897
286
  const arr = [];
898
287
  for (const [key, value] of Object.entries(obj)) {
@@ -913,7 +302,7 @@ const mutateAsArray = (field, obj, mutate) => {
913
302
  }
914
303
  }
915
304
  };
916
- const getDeepArrayPaths = (obj, basePath = "") => {
305
+ var getDeepArrayPaths = (obj, basePath = "") => {
917
306
  if (Array.isArray(obj)) {
918
307
  return obj.flatMap(
919
308
  (item, index) => getDeepArrayPaths(item, `${basePath}[${index}]`)
@@ -926,9 +315,259 @@ const getDeepArrayPaths = (obj, basePath = "") => {
926
315
  }
927
316
  return [basePath];
928
317
  };
929
- const noOp = () => {
318
+ if (void 0) {
319
+ const { describe, expect, it } = void 0;
320
+ const countArrayItems = (arr) => {
321
+ let count = 0;
322
+ arr.forEach(() => count++);
323
+ return count;
324
+ };
325
+ describe("getArray", () => {
326
+ it("shoud get a deeply nested array that can be mutated to update the nested value", () => {
327
+ const values = {
328
+ d: [
329
+ { foo: "bar", baz: [true, false] },
330
+ { e: true, f: "hi" }
331
+ ]
332
+ };
333
+ const result = getArray(values, "d[0].baz");
334
+ const finalValues = {
335
+ d: [
336
+ { foo: "bar", baz: [true, false, true] },
337
+ { e: true, f: "hi" }
338
+ ]
339
+ };
340
+ expect(result).toEqual([true, false]);
341
+ result.push(true);
342
+ expect(values).toEqual(finalValues);
343
+ });
344
+ it("should return an empty array that can be mutated if result is null or undefined", () => {
345
+ const values = {};
346
+ const result = getArray(values, "a.foo[0].bar");
347
+ const finalValues = {
348
+ a: { foo: [{ bar: ["Bob ross"] }] }
349
+ };
350
+ expect(result).toEqual([]);
351
+ result.push("Bob ross");
352
+ expect(values).toEqual(finalValues);
353
+ });
354
+ it("should throw if the value is defined and not an array", () => {
355
+ const values = { foo: "foo" };
356
+ expect(() => getArray(values, "foo")).toThrow();
357
+ });
358
+ });
359
+ describe("swap", () => {
360
+ it("should swap two items", () => {
361
+ const array = [1, 2, 3];
362
+ swap(array, 0, 1);
363
+ expect(array).toEqual([2, 1, 3]);
364
+ });
365
+ it("should work for sparse arrays", () => {
366
+ const arr = [];
367
+ arr[0] = true;
368
+ swap(arr, 0, 2);
369
+ expect(countArrayItems(arr)).toEqual(1);
370
+ expect(0 in arr).toBe(false);
371
+ expect(2 in arr).toBe(true);
372
+ expect(arr[2]).toEqual(true);
373
+ });
374
+ });
375
+ describe("move", () => {
376
+ it("should move an item to a new index", () => {
377
+ const array = [1, 2, 3];
378
+ move(array, 0, 1);
379
+ expect(array).toEqual([2, 1, 3]);
380
+ });
381
+ it("should work with sparse arrays", () => {
382
+ const array = [1];
383
+ move(array, 0, 2);
384
+ expect(countArrayItems(array)).toEqual(1);
385
+ expect(array).toEqual([void 0, void 0, 1]);
386
+ });
387
+ });
388
+ describe("insert", () => {
389
+ it("should insert an item at a new index", () => {
390
+ const array = [1, 2, 3];
391
+ insert(array, 1, 4);
392
+ expect(array).toEqual([1, 4, 2, 3]);
393
+ });
394
+ it("should be able to insert falsey values", () => {
395
+ const array = [1, 2, 3];
396
+ insert(array, 1, null);
397
+ expect(array).toEqual([1, null, 2, 3]);
398
+ });
399
+ it("should handle sparse arrays", () => {
400
+ const array = [];
401
+ array[2] = true;
402
+ insert(array, 0, true);
403
+ expect(countArrayItems(array)).toEqual(2);
404
+ expect(array).toEqual([true, void 0, void 0, true]);
405
+ });
406
+ });
407
+ describe("remove", () => {
408
+ it("should remove an item at a given index", () => {
409
+ const array = [1, 2, 3];
410
+ remove(array, 1);
411
+ expect(array).toEqual([1, 3]);
412
+ });
413
+ it("should handle sparse arrays", () => {
414
+ const array = [];
415
+ array[2] = true;
416
+ remove(array, 0);
417
+ expect(countArrayItems(array)).toEqual(1);
418
+ expect(array).toEqual([void 0, true]);
419
+ });
420
+ });
421
+ describe("replace", () => {
422
+ it("should replace an item at a given index", () => {
423
+ const array = [1, 2, 3];
424
+ replace(array, 1, 4);
425
+ expect(array).toEqual([1, 4, 3]);
426
+ });
427
+ it("should handle sparse arrays", () => {
428
+ const array = [];
429
+ array[2] = true;
430
+ replace(array, 0, true);
431
+ expect(countArrayItems(array)).toEqual(2);
432
+ expect(array).toEqual([true, void 0, true]);
433
+ });
434
+ });
435
+ describe("mutateAsArray", () => {
436
+ it("should handle swap", () => {
437
+ const values = {
438
+ myField: "something",
439
+ "myField[0]": "foo",
440
+ "myField[2]": "bar",
441
+ otherField: "baz",
442
+ "otherField[0]": "something else"
443
+ };
444
+ mutateAsArray("myField", values, (arr) => {
445
+ swap(arr, 0, 2);
446
+ });
447
+ expect(values).toEqual({
448
+ myField: "something",
449
+ "myField[0]": "bar",
450
+ "myField[2]": "foo",
451
+ otherField: "baz",
452
+ "otherField[0]": "something else"
453
+ });
454
+ });
455
+ it("should swap sparse arrays", () => {
456
+ const values = {
457
+ myField: "something",
458
+ "myField[0]": "foo",
459
+ otherField: "baz",
460
+ "otherField[0]": "something else"
461
+ };
462
+ mutateAsArray("myField", values, (arr) => {
463
+ swap(arr, 0, 2);
464
+ });
465
+ expect(values).toEqual({
466
+ myField: "something",
467
+ "myField[2]": "foo",
468
+ otherField: "baz",
469
+ "otherField[0]": "something else"
470
+ });
471
+ });
472
+ it("should handle arrays with nested values", () => {
473
+ const values = {
474
+ myField: "something",
475
+ "myField[0].title": "foo",
476
+ "myField[0].note": "bar",
477
+ "myField[2].title": "other",
478
+ "myField[2].note": "other",
479
+ otherField: "baz",
480
+ "otherField[0]": "something else"
481
+ };
482
+ mutateAsArray("myField", values, (arr) => {
483
+ swap(arr, 0, 2);
484
+ });
485
+ expect(values).toEqual({
486
+ myField: "something",
487
+ "myField[0].title": "other",
488
+ "myField[0].note": "other",
489
+ "myField[2].title": "foo",
490
+ "myField[2].note": "bar",
491
+ otherField: "baz",
492
+ "otherField[0]": "something else"
493
+ });
494
+ });
495
+ it("should handle move", () => {
496
+ const values = {
497
+ myField: "something",
498
+ "myField[0]": "foo",
499
+ "myField[1]": "bar",
500
+ "myField[2]": "baz",
501
+ "otherField[0]": "something else"
502
+ };
503
+ mutateAsArray("myField", values, (arr) => {
504
+ move(arr, 0, 2);
505
+ });
506
+ expect(values).toEqual({
507
+ myField: "something",
508
+ "myField[0]": "bar",
509
+ "myField[1]": "baz",
510
+ "myField[2]": "foo",
511
+ "otherField[0]": "something else"
512
+ });
513
+ });
514
+ it("should not create keys for `undefined`", () => {
515
+ const values = {
516
+ "myField[0]": "foo"
517
+ };
518
+ mutateAsArray("myField", values, (arr) => {
519
+ arr.unshift(void 0);
520
+ });
521
+ expect(Object.keys(values)).toHaveLength(1);
522
+ expect(values).toEqual({
523
+ "myField[1]": "foo"
524
+ });
525
+ });
526
+ it("should handle remove", () => {
527
+ const values = {
528
+ myField: "something",
529
+ "myField[0]": "foo",
530
+ "myField[1]": "bar",
531
+ "myField[2]": "baz",
532
+ "otherField[0]": "something else"
533
+ };
534
+ mutateAsArray("myField", values, (arr) => {
535
+ remove(arr, 1);
536
+ });
537
+ expect(values).toEqual({
538
+ myField: "something",
539
+ "myField[0]": "foo",
540
+ "myField[1]": "baz",
541
+ "otherField[0]": "something else"
542
+ });
543
+ expect("myField[2]" in values).toBe(false);
544
+ });
545
+ });
546
+ describe("getDeepArrayPaths", () => {
547
+ it("should return all paths recursively", () => {
548
+ const obj = [
549
+ true,
550
+ true,
551
+ [true, true],
552
+ { foo: true, bar: { baz: true, test: [true] } }
553
+ ];
554
+ expect(getDeepArrayPaths(obj, "myField")).toEqual([
555
+ "myField[0]",
556
+ "myField[1]",
557
+ "myField[2][0]",
558
+ "myField[2][1]",
559
+ "myField[3].foo",
560
+ "myField[3].bar.baz",
561
+ "myField[3].bar.test[0]"
562
+ ]);
563
+ });
564
+ });
565
+ }
566
+
567
+ // src/internal/state/createFormStore.ts
568
+ var noOp = () => {
930
569
  };
931
- const defaultFormState = {
570
+ var defaultFormState = {
932
571
  isHydrated: false,
933
572
  isSubmitting: false,
934
573
  hasBeenSubmitted: false,
@@ -980,7 +619,7 @@ const defaultFormState = {
980
619
  }
981
620
  }
982
621
  };
983
- const createFormState = (set, get) => ({
622
+ var createFormState = (set, get2) => ({
984
623
  isHydrated: false,
985
624
  isSubmitting: false,
986
625
  hasBeenSubmitted: false,
@@ -988,7 +627,7 @@ const createFormState = (set, get) => ({
988
627
  fieldErrors: {},
989
628
  formElement: null,
990
629
  currentDefaultValues: {},
991
- isValid: () => Object.keys(get().fieldErrors).length === 0,
630
+ isValid: () => Object.keys(get2().fieldErrors).length === 0,
992
631
  startSubmit: () => set((state) => {
993
632
  state.isSubmitting = true;
994
633
  state.hasBeenSubmitted = true;
@@ -1026,7 +665,7 @@ const createFormState = (set, get) => ({
1026
665
  state.isHydrated = true;
1027
666
  }),
1028
667
  setFormElement: (formElement) => {
1029
- if (get().formElement === formElement)
668
+ if (get2().formElement === formElement)
1030
669
  return;
1031
670
  set((state) => {
1032
671
  state.formElement = formElement;
@@ -1034,49 +673,49 @@ const createFormState = (set, get) => ({
1034
673
  },
1035
674
  validateField: async (field) => {
1036
675
  var _a, _b, _c;
1037
- const formElement = get().formElement;
1038
- invariant(
676
+ const formElement = get2().formElement;
677
+ invariant2(
1039
678
  formElement,
1040
679
  "Cannot find reference to form. This is probably a bug in remix-validated-form."
1041
680
  );
1042
- const validator = (_a = get().formProps) == null ? void 0 : _a.validator;
1043
- invariant(
681
+ const validator = (_a = get2().formProps) == null ? void 0 : _a.validator;
682
+ invariant2(
1044
683
  validator,
1045
684
  "Cannot validator. This is probably a bug in remix-validated-form."
1046
685
  );
1047
- await ((_c = (_b = get().controlledFields).awaitValueUpdate) == null ? void 0 : _c.call(_b, field));
686
+ await ((_c = (_b = get2().controlledFields).awaitValueUpdate) == null ? void 0 : _c.call(_b, field));
1048
687
  const { error } = await validator.validateField(
1049
688
  new FormData(formElement),
1050
689
  field
1051
690
  );
1052
691
  if (error) {
1053
- get().setFieldError(field, error);
692
+ get2().setFieldError(field, error);
1054
693
  return error;
1055
694
  } else {
1056
- get().clearFieldError(field);
695
+ get2().clearFieldError(field);
1057
696
  return null;
1058
697
  }
1059
698
  },
1060
699
  validate: async () => {
1061
700
  var _a;
1062
- const formElement = get().formElement;
1063
- invariant(
701
+ const formElement = get2().formElement;
702
+ invariant2(
1064
703
  formElement,
1065
704
  "Cannot find reference to form. This is probably a bug in remix-validated-form."
1066
705
  );
1067
- const validator = (_a = get().formProps) == null ? void 0 : _a.validator;
1068
- invariant(
706
+ const validator = (_a = get2().formProps) == null ? void 0 : _a.validator;
707
+ invariant2(
1069
708
  validator,
1070
709
  "Cannot validator. This is probably a bug in remix-validated-form."
1071
710
  );
1072
711
  const result = await validator.validate(new FormData(formElement));
1073
712
  if (result.error)
1074
- get().setFieldErrors(result.error.fieldErrors);
713
+ get2().setFieldErrors(result.error.fieldErrors);
1075
714
  return result;
1076
715
  },
1077
716
  submit: () => {
1078
- const formElement = get().formElement;
1079
- invariant(
717
+ const formElement = get2().formElement;
718
+ invariant2(
1080
719
  formElement,
1081
720
  "Cannot find reference to form. This is probably a bug in remix-validated-form."
1082
721
  );
@@ -1084,11 +723,11 @@ const createFormState = (set, get) => ({
1084
723
  },
1085
724
  getValues: () => {
1086
725
  var _a;
1087
- return new FormData((_a = get().formElement) != null ? _a : void 0);
726
+ return new FormData((_a = get2().formElement) != null ? _a : void 0);
1088
727
  },
1089
728
  resetFormElement: () => {
1090
729
  var _a;
1091
- return (_a = get().formElement) == null ? void 0 : _a.reset();
730
+ return (_a = get2().formElement) == null ? void 0 : _a.reset();
1092
731
  },
1093
732
  controlledFields: {
1094
733
  values: {},
@@ -1103,7 +742,7 @@ const createFormState = (set, get) => ({
1103
742
  });
1104
743
  },
1105
744
  unregister: (fieldName) => {
1106
- if (get() === null || get() === void 0)
745
+ if (get2() === null || get2() === void 0)
1107
746
  return;
1108
747
  set((state) => {
1109
748
  var _a, _b, _c;
@@ -1130,12 +769,12 @@ const createFormState = (set, get) => ({
1130
769
  delete state.controlledFields.refCounts[fieldName];
1131
770
  });
1132
771
  },
1133
- getValue: (fieldName) => getPath(get().controlledFields.values, fieldName),
772
+ getValue: (fieldName) => getPath(get2().controlledFields.values, fieldName),
1134
773
  setValue: (fieldName, value) => {
1135
774
  set((state) => {
1136
775
  setPath(state.controlledFields.values, fieldName, value);
1137
776
  });
1138
- get().controlledFields.kickoffValueUpdate(fieldName);
777
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1139
778
  },
1140
779
  kickoffValueUpdate: (fieldName) => {
1141
780
  const clear = () => set((state) => {
@@ -1150,7 +789,7 @@ const createFormState = (set, get) => ({
1150
789
  });
1151
790
  },
1152
791
  awaitValueUpdate: async (fieldName) => {
1153
- await get().controlledFields.valueUpdatePromises[fieldName];
792
+ await get2().controlledFields.valueUpdatePromises[fieldName];
1154
793
  },
1155
794
  array: {
1156
795
  push: (fieldName, item) => {
@@ -1158,7 +797,7 @@ const createFormState = (set, get) => ({
1158
797
  getArray(state.controlledFields.values, fieldName).push(item);
1159
798
  getArray(state.currentDefaultValues, fieldName).push(item);
1160
799
  });
1161
- get().controlledFields.kickoffValueUpdate(fieldName);
800
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1162
801
  },
1163
802
  swap: (fieldName, indexA, indexB) => {
1164
803
  set((state) => {
@@ -1183,7 +822,7 @@ const createFormState = (set, get) => ({
1183
822
  (array) => swap(array, indexA, indexB)
1184
823
  );
1185
824
  });
1186
- get().controlledFields.kickoffValueUpdate(fieldName);
825
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1187
826
  },
1188
827
  move: (fieldName, from2, to) => {
1189
828
  set((state) => {
@@ -1208,7 +847,7 @@ const createFormState = (set, get) => ({
1208
847
  (array) => move(array, from2, to)
1209
848
  );
1210
849
  });
1211
- get().controlledFields.kickoffValueUpdate(fieldName);
850
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1212
851
  },
1213
852
  insert: (fieldName, index, item) => {
1214
853
  set((state) => {
@@ -1233,7 +872,7 @@ const createFormState = (set, get) => ({
1233
872
  (array) => insert(array, index, void 0)
1234
873
  );
1235
874
  });
1236
- get().controlledFields.kickoffValueUpdate(fieldName);
875
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1237
876
  },
1238
877
  remove: (fieldName, index) => {
1239
878
  set((state) => {
@@ -1256,7 +895,7 @@ const createFormState = (set, get) => ({
1256
895
  (array) => remove(array, index)
1257
896
  );
1258
897
  });
1259
- get().controlledFields.kickoffValueUpdate(fieldName);
898
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1260
899
  },
1261
900
  pop: (fieldName) => {
1262
901
  set((state) => {
@@ -1273,7 +912,7 @@ const createFormState = (set, get) => ({
1273
912
  (array) => array.pop()
1274
913
  );
1275
914
  });
1276
- get().controlledFields.kickoffValueUpdate(fieldName);
915
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1277
916
  },
1278
917
  unshift: (fieldName, value) => {
1279
918
  set((state) => {
@@ -1314,17 +953,17 @@ const createFormState = (set, get) => ({
1314
953
  (array) => replace(array, index, item)
1315
954
  );
1316
955
  });
1317
- get().controlledFields.kickoffValueUpdate(fieldName);
956
+ get2().controlledFields.kickoffValueUpdate(fieldName);
1318
957
  }
1319
958
  }
1320
959
  }
1321
960
  });
1322
- const useRootFormStore = create()(
1323
- immer((set, get) => ({
961
+ var useRootFormStore = create()(
962
+ immer((set, get2) => ({
1324
963
  forms: {},
1325
964
  form: (formId) => {
1326
965
  var _a;
1327
- return (_a = get().forms[formId]) != null ? _a : defaultFormState;
966
+ return (_a = get2().forms[formId]) != null ? _a : defaultFormState;
1328
967
  },
1329
968
  cleanupForm: (formId) => {
1330
969
  set((state) => {
@@ -1332,21 +971,25 @@ const useRootFormStore = create()(
1332
971
  });
1333
972
  },
1334
973
  registerForm: (formId) => {
1335
- if (get().forms[formId])
974
+ if (get2().forms[formId])
1336
975
  return;
1337
976
  set((state) => {
1338
977
  state.forms[formId] = createFormState(
1339
978
  (setter) => set((state2) => setter(state2.forms[formId])),
1340
- () => get().forms[formId]
979
+ () => get2().forms[formId]
1341
980
  );
1342
981
  });
1343
982
  }
1344
983
  }))
1345
984
  );
1346
- const useFormStore = (formId, selector) => {
985
+
986
+ // src/internal/state/storeHooks.ts
987
+ var useFormStore = (formId, selector) => {
1347
988
  return useRootFormStore((state) => selector(state.form(formId)));
1348
989
  };
1349
- const useInternalFormContext = (formId, hookName) => {
990
+
991
+ // src/internal/hooks.ts
992
+ var useInternalFormContext = (formId, hookName) => {
1350
993
  const formContext = useContext(InternalFormContext);
1351
994
  if (formId)
1352
995
  return { formId };
@@ -1376,12 +1019,12 @@ function useErrorResponseForForm({
1376
1019
  return actionData;
1377
1020
  return null;
1378
1021
  }
1379
- const useFieldErrorsForForm = (context) => {
1022
+ var useFieldErrorsForForm = (context) => {
1380
1023
  const response = useErrorResponseForForm(context);
1381
1024
  const hydrated = useFormStore(context.formId, (state) => state.isHydrated);
1382
1025
  return hydratable.from(response == null ? void 0 : response.fieldErrors, hydrated);
1383
1026
  };
1384
- const useDefaultValuesFromLoader = ({
1027
+ var useDefaultValuesFromLoader = ({
1385
1028
  formId
1386
1029
  }) => {
1387
1030
  const matches = useMatches();
@@ -1392,7 +1035,7 @@ const useDefaultValuesFromLoader = ({
1392
1035
  }
1393
1036
  return null;
1394
1037
  };
1395
- const useDefaultValuesForForm = (context) => {
1038
+ var useDefaultValuesForForm = (context) => {
1396
1039
  const { formId, defaultValuesProp } = context;
1397
1040
  const hydrated = useFormStore(formId, (state) => state.isHydrated);
1398
1041
  const errorResponse = useErrorResponseForForm(context);
@@ -1400,7 +1043,7 @@ const useDefaultValuesForForm = (context) => {
1400
1043
  if (hydrated)
1401
1044
  return hydratable.hydratedData();
1402
1045
  if (errorResponse == null ? void 0 : errorResponse.repopulateFields) {
1403
- invariant(
1046
+ invariant3(
1404
1047
  typeof errorResponse.repopulateFields === "object",
1405
1048
  "repopulateFields returned something other than an object"
1406
1049
  );
@@ -1410,14 +1053,14 @@ const useDefaultValuesForForm = (context) => {
1410
1053
  return hydratable.serverData(defaultValuesProp);
1411
1054
  return hydratable.serverData(defaultValuesFromLoader);
1412
1055
  };
1413
- const useHasActiveFormSubmit = ({
1056
+ var useHasActiveFormSubmit = ({
1414
1057
  fetcher
1415
1058
  }) => {
1416
1059
  const transition = useTransition();
1417
1060
  const hasActiveSubmission = fetcher ? fetcher.state === "submitting" : !!transition.submission;
1418
1061
  return hasActiveSubmission;
1419
1062
  };
1420
- const useFieldTouched = (field, { formId }) => {
1063
+ var useFieldTouched = (field, { formId }) => {
1421
1064
  const touched = useFormStore(formId, (state) => state.touchedFields[field]);
1422
1065
  const setFieldTouched = useFormStore(formId, (state) => state.setTouched);
1423
1066
  const setTouched = useCallback(
@@ -1426,7 +1069,7 @@ const useFieldTouched = (field, { formId }) => {
1426
1069
  );
1427
1070
  return [touched, setTouched];
1428
1071
  };
1429
- const useFieldError = (name, context) => {
1072
+ var useFieldError = (name, context) => {
1430
1073
  const fieldErrors = useFieldErrorsForForm(context);
1431
1074
  const state = useFormStore(
1432
1075
  context.formId,
@@ -1434,54 +1077,57 @@ const useFieldError = (name, context) => {
1434
1077
  );
1435
1078
  return fieldErrors.map((fieldErrors2) => fieldErrors2 == null ? void 0 : fieldErrors2[name]).hydrateTo(state);
1436
1079
  };
1437
- const useClearError = (context) => {
1080
+ var useClearError = (context) => {
1438
1081
  const { formId } = context;
1439
1082
  return useFormStore(formId, (state) => state.clearFieldError);
1440
1083
  };
1441
- const useCurrentDefaultValueForField = (formId, field) => useFormStore(formId, (state) => getPath(state.currentDefaultValues, field));
1442
- const useFieldDefaultValue = (name, context) => {
1084
+ var useCurrentDefaultValueForField = (formId, field) => useFormStore(formId, (state) => getPath(state.currentDefaultValues, field));
1085
+ var useFieldDefaultValue = (name, context) => {
1443
1086
  const defaultValues = useDefaultValuesForForm(context);
1444
1087
  const state = useCurrentDefaultValueForField(context.formId, name);
1445
1088
  return defaultValues.map((val) => getPath(val, name)).hydrateTo(state);
1446
1089
  };
1447
- const useInternalIsSubmitting = (formId) => useFormStore(formId, (state) => state.isSubmitting);
1448
- const useInternalIsValid = (formId) => useFormStore(formId, (state) => state.isValid());
1449
- const useInternalHasBeenSubmitted = (formId) => useFormStore(formId, (state) => state.hasBeenSubmitted);
1450
- const useValidateField = (formId) => useFormStore(formId, (state) => state.validateField);
1451
- const useValidate = (formId) => useFormStore(formId, (state) => state.validate);
1452
- const noOpReceiver = () => () => {
1090
+ var useInternalIsSubmitting = (formId) => useFormStore(formId, (state) => state.isSubmitting);
1091
+ var useInternalIsValid = (formId) => useFormStore(formId, (state) => state.isValid());
1092
+ var useInternalHasBeenSubmitted = (formId) => useFormStore(formId, (state) => state.hasBeenSubmitted);
1093
+ var useValidateField = (formId) => useFormStore(formId, (state) => state.validateField);
1094
+ var useValidate = (formId) => useFormStore(formId, (state) => state.validate);
1095
+ var noOpReceiver = () => () => {
1453
1096
  };
1454
- const useRegisterReceiveFocus = (formId) => useFormStore(
1097
+ var useRegisterReceiveFocus = (formId) => useFormStore(
1455
1098
  formId,
1456
1099
  (state) => {
1457
1100
  var _a, _b;
1458
1101
  return (_b = (_a = state.formProps) == null ? void 0 : _a.registerReceiveFocus) != null ? _b : noOpReceiver;
1459
1102
  }
1460
1103
  );
1461
- const defaultDefaultValues = {};
1462
- const useSyncedDefaultValues = (formId) => useFormStore(
1104
+ var defaultDefaultValues = {};
1105
+ var useSyncedDefaultValues = (formId) => useFormStore(
1463
1106
  formId,
1464
1107
  (state) => {
1465
1108
  var _a, _b;
1466
1109
  return (_b = (_a = state.formProps) == null ? void 0 : _a.defaultValues) != null ? _b : defaultDefaultValues;
1467
1110
  }
1468
1111
  );
1469
- const useSetTouched = ({ formId }) => useFormStore(formId, (state) => state.setTouched);
1470
- const useTouchedFields = (formId) => useFormStore(formId, (state) => state.touchedFields);
1471
- const useFieldErrors = (formId) => useFormStore(formId, (state) => state.fieldErrors);
1472
- const useSetFieldErrors = (formId) => useFormStore(formId, (state) => state.setFieldErrors);
1473
- const useResetFormElement = (formId) => useFormStore(formId, (state) => state.resetFormElement);
1474
- const useSubmitForm = (formId) => useFormStore(formId, (state) => state.submit);
1475
- const useFormActionProp = (formId) => useFormStore(formId, (state) => {
1112
+ var useSetTouched = ({ formId }) => useFormStore(formId, (state) => state.setTouched);
1113
+ var useTouchedFields = (formId) => useFormStore(formId, (state) => state.touchedFields);
1114
+ var useFieldErrors = (formId) => useFormStore(formId, (state) => state.fieldErrors);
1115
+ var useSetFieldErrors = (formId) => useFormStore(formId, (state) => state.setFieldErrors);
1116
+ var useResetFormElement = (formId) => useFormStore(formId, (state) => state.resetFormElement);
1117
+ var useSubmitForm = (formId) => useFormStore(formId, (state) => state.submit);
1118
+ var useFormActionProp = (formId) => useFormStore(formId, (state) => {
1476
1119
  var _a;
1477
1120
  return (_a = state.formProps) == null ? void 0 : _a.action;
1478
1121
  });
1479
- const useFormSubactionProp = (formId) => useFormStore(formId, (state) => {
1122
+ var useFormSubactionProp = (formId) => useFormStore(formId, (state) => {
1480
1123
  var _a;
1481
1124
  return (_a = state.formProps) == null ? void 0 : _a.subaction;
1482
1125
  });
1483
- const useFormValues = (formId) => useFormStore(formId, (state) => state.getValues);
1484
- const useControlledFieldValue = (context, field) => {
1126
+ var useFormValues = (formId) => useFormStore(formId, (state) => state.getValues);
1127
+
1128
+ // src/internal/state/controlledFields.ts
1129
+ import { useCallback as useCallback2, useEffect } from "react";
1130
+ var useControlledFieldValue = (context, field) => {
1485
1131
  const value = useFormStore(
1486
1132
  context.formId,
1487
1133
  (state) => state.controlledFields.getValue(field)
@@ -1493,7 +1139,7 @@ const useControlledFieldValue = (context, field) => {
1493
1139
  const defaultValue = useFieldDefaultValue(field, context);
1494
1140
  return isFormHydrated ? value : defaultValue;
1495
1141
  };
1496
- const useRegisterControlledField = (context, field) => {
1142
+ var useRegisterControlledField = (context, field) => {
1497
1143
  const resolveUpdate = useFormStore(
1498
1144
  context.formId,
1499
1145
  (state) => state.controlledFields.valueUpdateResolvers[field]
@@ -1514,38 +1160,40 @@ const useRegisterControlledField = (context, field) => {
1514
1160
  return () => unregister(field);
1515
1161
  }, [context.formId, field, register, unregister]);
1516
1162
  };
1517
- const useControllableValue = (context, field) => {
1163
+ var useControllableValue = (context, field) => {
1518
1164
  useRegisterControlledField(context, field);
1519
1165
  const setControlledFieldValue = useFormStore(
1520
1166
  context.formId,
1521
1167
  (state) => state.controlledFields.setValue
1522
1168
  );
1523
- const setValue = useCallback(
1169
+ const setValue = useCallback2(
1524
1170
  (value2) => setControlledFieldValue(field, value2),
1525
1171
  [field, setControlledFieldValue]
1526
1172
  );
1527
1173
  const value = useControlledFieldValue(context, field);
1528
1174
  return [value, setValue];
1529
1175
  };
1530
- const useUpdateControllableValue = (formId) => {
1176
+ var useUpdateControllableValue = (formId) => {
1531
1177
  const setValue = useFormStore(
1532
1178
  formId,
1533
1179
  (state) => state.controlledFields.setValue
1534
1180
  );
1535
- return useCallback(
1181
+ return useCallback2(
1536
1182
  (field, value) => setValue(field, value),
1537
1183
  [setValue]
1538
1184
  );
1539
1185
  };
1540
- const useIsSubmitting = (formId) => {
1186
+
1187
+ // src/hooks.ts
1188
+ var useIsSubmitting = (formId) => {
1541
1189
  const formContext = useInternalFormContext(formId, "useIsSubmitting");
1542
1190
  return useInternalIsSubmitting(formContext.formId);
1543
1191
  };
1544
- const useIsValid = (formId) => {
1192
+ var useIsValid = (formId) => {
1545
1193
  const formContext = useInternalFormContext(formId, "useIsValid");
1546
1194
  return useInternalIsValid(formContext.formId);
1547
1195
  };
1548
- const useField = (name, options) => {
1196
+ var useField = (name, options) => {
1549
1197
  const { formId: providedFormId, handleReceiveFocus } = options != null ? options : {};
1550
1198
  const formContext = useInternalFormContext(providedFormId, "useField");
1551
1199
  const defaultValue = useFieldDefaultValue(name, formContext);
@@ -1555,7 +1203,7 @@ const useField = (name, options) => {
1555
1203
  const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);
1556
1204
  const validateField = useValidateField(formContext.formId);
1557
1205
  const registerReceiveFocus = useRegisterReceiveFocus(formContext.formId);
1558
- useEffect(() => {
1206
+ useEffect2(() => {
1559
1207
  if (handleReceiveFocus)
1560
1208
  return registerReceiveFocus(name, handleReceiveFocus);
1561
1209
  }, [handleReceiveFocus, name, registerReceiveFocus]);
@@ -1593,38 +1241,18 @@ const useField = (name, options) => {
1593
1241
  ]);
1594
1242
  return field;
1595
1243
  };
1596
- const useControlField = (name, formId) => {
1244
+ var useControlField = (name, formId) => {
1597
1245
  const context = useInternalFormContext(formId, "useControlField");
1598
1246
  const [value, setValue] = useControllableValue(context, name);
1599
1247
  return [value, setValue];
1600
1248
  };
1601
- const useUpdateControlledField = (formId) => {
1249
+ var useUpdateControlledField = (formId) => {
1602
1250
  const context = useInternalFormContext(formId, "useControlField");
1603
1251
  return useUpdateControllableValue(context.formId);
1604
1252
  };
1605
- /**
1606
- * @remix-run/server-runtime v1.7.6
1607
- *
1608
- * Copyright (c) Remix Software Inc.
1609
- *
1610
- * This source code is licensed under the MIT license found in the
1611
- * LICENSE.md file in the root directory of this source tree.
1612
- *
1613
- * @license MIT
1614
- */
1615
- const json = (data, init = {}) => {
1616
- let responseInit = typeof init === "number" ? {
1617
- status: init
1618
- } : init;
1619
- let headers = new Headers(responseInit.headers);
1620
- if (!headers.has("Content-Type")) {
1621
- headers.set("Content-Type", "application/json; charset=utf-8");
1622
- }
1623
- return new Response(JSON.stringify(data), {
1624
- ...responseInit,
1625
- headers
1626
- });
1627
- };
1253
+
1254
+ // src/server.ts
1255
+ import { json } from "@remix-run/server-runtime";
1628
1256
  function validationError(error, repopulateFields, init) {
1629
1257
  return json(
1630
1258
  {
@@ -1636,10 +1264,27 @@ function validationError(error, repopulateFields, init) {
1636
1264
  { status: 422, ...init }
1637
1265
  );
1638
1266
  }
1639
- const setFormDefaults = (formId, defaultValues) => ({
1267
+ var setFormDefaults = (formId, defaultValues) => ({
1640
1268
  [formDefaultValuesKey(formId)]: defaultValues
1641
1269
  });
1642
- class MultiValueMap {
1270
+
1271
+ // src/ValidatedForm.tsx
1272
+ import {
1273
+ Form as RemixForm,
1274
+ useSubmit
1275
+ } from "@remix-run/react";
1276
+ import {
1277
+ useCallback as useCallback4,
1278
+ useEffect as useEffect5,
1279
+ useMemo as useMemo2,
1280
+ useRef as useRef4,
1281
+ useState
1282
+ } from "react";
1283
+ import * as R3 from "remeda";
1284
+
1285
+ // src/internal/MultiValueMap.ts
1286
+ import { useCallback as useCallback3, useRef } from "react";
1287
+ var MultiValueMap = class {
1643
1288
  constructor() {
1644
1289
  this.dict = /* @__PURE__ */ new Map();
1645
1290
  this.add = (key, value) => {
@@ -1670,19 +1315,22 @@ class MultiValueMap {
1670
1315
  this.values = () => this.dict.values();
1671
1316
  this.has = (key) => this.dict.has(key);
1672
1317
  }
1673
- }
1674
- const useMultiValueMap = () => {
1318
+ };
1319
+ var useMultiValueMap = () => {
1675
1320
  const ref = useRef(null);
1676
- return useCallback(() => {
1321
+ return useCallback3(() => {
1677
1322
  if (ref.current)
1678
1323
  return ref.current;
1679
1324
  ref.current = new MultiValueMap();
1680
1325
  return ref.current;
1681
1326
  }, []);
1682
1327
  };
1328
+
1329
+ // src/internal/submissionCallbacks.ts
1330
+ import { useEffect as useEffect3, useRef as useRef2 } from "react";
1683
1331
  function useSubmitComplete(isSubmitting, callback) {
1684
- const isPending = useRef(false);
1685
- useEffect(() => {
1332
+ const isPending = useRef2(false);
1333
+ useEffect3(() => {
1686
1334
  if (isSubmitting) {
1687
1335
  isPending.current = true;
1688
1336
  }
@@ -1692,7 +1340,11 @@ function useSubmitComplete(isSubmitting, callback) {
1692
1340
  }
1693
1341
  });
1694
1342
  }
1695
- const mergeRefs = (refs) => {
1343
+
1344
+ // src/internal/util.ts
1345
+ import { useEffect as useEffect4, useLayoutEffect, useRef as useRef3 } from "react";
1346
+ import * as R2 from "remeda";
1347
+ var mergeRefs = (refs) => {
1696
1348
  return (value) => {
1697
1349
  refs.filter(Boolean).forEach((ref) => {
1698
1350
  if (typeof ref === "function") {
@@ -1703,22 +1355,25 @@ const mergeRefs = (refs) => {
1703
1355
  });
1704
1356
  };
1705
1357
  };
1706
- const useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect;
1707
- const useDeepEqualsMemo = (item) => {
1708
- const ref = useRef(item);
1709
- const areEqual = ref.current === item || equals(ref.current, item);
1710
- useEffect(() => {
1358
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect4;
1359
+ var useDeepEqualsMemo = (item) => {
1360
+ const ref = useRef3(item);
1361
+ const areEqual = ref.current === item || R2.equals(ref.current, item);
1362
+ useEffect4(() => {
1711
1363
  if (!areEqual) {
1712
1364
  ref.current = item;
1713
1365
  }
1714
1366
  });
1715
1367
  return areEqual ? ref.current : item;
1716
1368
  };
1717
- const getDataFromForm = (el) => new FormData(el);
1369
+
1370
+ // src/ValidatedForm.tsx
1371
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
1372
+ var getDataFromForm = (el) => new FormData(el);
1718
1373
  function nonNull(value) {
1719
1374
  return value !== null;
1720
1375
  }
1721
- const focusFirstInvalidInput = (fieldErrors, customFocusHandlers, formElement) => {
1376
+ var focusFirstInvalidInput = (fieldErrors, customFocusHandlers, formElement) => {
1722
1377
  var _a;
1723
1378
  const namesInOrder = [...formElement.elements].map((el) => {
1724
1379
  const input = el instanceof RadioNodeList ? el[0] : el;
@@ -1726,7 +1381,7 @@ const focusFirstInvalidInput = (fieldErrors, customFocusHandlers, formElement) =
1726
1381
  return input.name;
1727
1382
  return null;
1728
1383
  }).filter(nonNull).filter((name) => name in fieldErrors);
1729
- const uniqueNamesInOrder = uniq(namesInOrder);
1384
+ const uniqueNamesInOrder = R3.uniq(namesInOrder);
1730
1385
  for (const fieldName of uniqueNamesInOrder) {
1731
1386
  if (customFocusHandlers.has(fieldName)) {
1732
1387
  customFocusHandlers.getAll(fieldName).forEach((handler) => {
@@ -1755,11 +1410,11 @@ const focusFirstInvalidInput = (fieldErrors, customFocusHandlers, formElement) =
1755
1410
  }
1756
1411
  }
1757
1412
  };
1758
- const useFormId = (providedId) => {
1413
+ var useFormId = (providedId) => {
1759
1414
  const [symbolId] = useState(() => Symbol("remix-validated-form-id"));
1760
1415
  return providedId != null ? providedId : symbolId;
1761
1416
  };
1762
- const FormResetter = ({
1417
+ var FormResetter = ({
1763
1418
  resetAfterSubmit,
1764
1419
  formRef
1765
1420
  }) => {
@@ -1809,7 +1464,7 @@ function ValidatedForm({
1809
1464
  var _a;
1810
1465
  const formId = useFormId(id);
1811
1466
  const providedDefaultValues = useDeepEqualsMemo(unMemoizedDefaults);
1812
- const contextValue = useMemo(
1467
+ const contextValue = useMemo2(
1813
1468
  () => ({
1814
1469
  formId,
1815
1470
  action,
@@ -1822,8 +1477,8 @@ function ValidatedForm({
1822
1477
  const backendError = useErrorResponseForForm(contextValue);
1823
1478
  const backendDefaultValues = useDefaultValuesFromLoader(contextValue);
1824
1479
  const hasActiveSubmission = useHasActiveFormSubmit(contextValue);
1825
- const formRef = useRef(null);
1826
- const Form$1 = (_a = fetcher == null ? void 0 : fetcher.Form) != null ? _a : Form;
1480
+ const formRef = useRef4(null);
1481
+ const Form = (_a = fetcher == null ? void 0 : fetcher.Form) != null ? _a : RemixForm;
1827
1482
  const submit = useSubmit();
1828
1483
  const setFieldErrors = useSetFieldErrors(formId);
1829
1484
  const setFieldError = useFormStore(formId, (state) => state.setFieldError);
@@ -1838,7 +1493,7 @@ function ValidatedForm({
1838
1493
  const cleanupForm = useRootFormStore((state) => state.cleanupForm);
1839
1494
  const registerForm = useRootFormStore((state) => state.registerForm);
1840
1495
  const customFocusHandlers = useMultiValueMap();
1841
- const registerReceiveFocus = useCallback(
1496
+ const registerReceiveFocus = useCallback4(
1842
1497
  (fieldName, handler) => {
1843
1498
  customFocusHandlers().add(fieldName, handler);
1844
1499
  return () => {
@@ -1872,17 +1527,30 @@ function ValidatedForm({
1872
1527
  useIsomorphicLayoutEffect(() => {
1873
1528
  setFormElementInState(formRef.current);
1874
1529
  }, [setFormElementInState]);
1875
- useEffect(() => {
1530
+ useEffect5(() => {
1876
1531
  var _a2;
1877
1532
  setFieldErrors((_a2 = backendError == null ? void 0 : backendError.fieldErrors) != null ? _a2 : {});
1878
- }, [backendError == null ? void 0 : backendError.fieldErrors, setFieldErrors, setFieldError]);
1533
+ if (!disableFocusOnError && (backendError == null ? void 0 : backendError.fieldErrors)) {
1534
+ focusFirstInvalidInput(
1535
+ backendError.fieldErrors,
1536
+ customFocusHandlers(),
1537
+ formRef.current
1538
+ );
1539
+ }
1540
+ }, [
1541
+ backendError == null ? void 0 : backendError.fieldErrors,
1542
+ customFocusHandlers,
1543
+ disableFocusOnError,
1544
+ setFieldErrors,
1545
+ setFieldError
1546
+ ]);
1879
1547
  useSubmitComplete(hasActiveSubmission, () => {
1880
1548
  endSubmit();
1881
1549
  });
1882
- const handleSubmit = async (e2, target, nativeEvent) => {
1550
+ const handleSubmit = async (e, target, nativeEvent) => {
1883
1551
  startSubmit();
1884
1552
  const submitter = nativeEvent.submitter;
1885
- const formDataToValidate = getDataFromForm(e2.currentTarget);
1553
+ const formDataToValidate = getDataFromForm(e.currentTarget);
1886
1554
  if (submitter == null ? void 0 : submitter.name) {
1887
1555
  formDataToValidate.append(submitter.name, submitter.value);
1888
1556
  }
@@ -1899,14 +1567,14 @@ function ValidatedForm({
1899
1567
  }
1900
1568
  } else {
1901
1569
  setFieldErrors({});
1902
- const eventProxy = formEventProxy(e2);
1570
+ const eventProxy = formEventProxy(e);
1903
1571
  await (onSubmit == null ? void 0 : onSubmit(result.data, eventProxy));
1904
1572
  if (eventProxy.defaultPrevented) {
1905
1573
  endSubmit();
1906
1574
  return;
1907
1575
  }
1908
1576
  if (fetcher)
1909
- fetcher.submit(submitter || e2.currentTarget);
1577
+ fetcher.submit(submitter || e.currentTarget);
1910
1578
  else
1911
1579
  submit(submitter || target, {
1912
1580
  replace: replace2,
@@ -1914,43 +1582,44 @@ function ValidatedForm({
1914
1582
  });
1915
1583
  }
1916
1584
  };
1917
- return /* @__PURE__ */ React.createElement(Form$1, {
1918
- ref: mergeRefs([formRef, formRefProp]),
1919
- ...rest,
1920
- id,
1921
- action,
1922
- method,
1923
- replace: replace2,
1924
- onSubmit: (e2) => {
1925
- e2.preventDefault();
1926
- handleSubmit(
1927
- e2,
1928
- e2.currentTarget,
1929
- e2.nativeEvent
1930
- );
1931
- },
1932
- onReset: (event) => {
1933
- onReset == null ? void 0 : onReset(event);
1934
- if (event.defaultPrevented)
1935
- return;
1936
- reset();
1585
+ return /* @__PURE__ */ jsx(
1586
+ Form,
1587
+ {
1588
+ ref: mergeRefs([formRef, formRefProp]),
1589
+ ...rest,
1590
+ id,
1591
+ action,
1592
+ method,
1593
+ replace: replace2,
1594
+ onSubmit: (e) => {
1595
+ e.preventDefault();
1596
+ handleSubmit(
1597
+ e,
1598
+ e.currentTarget,
1599
+ e.nativeEvent
1600
+ );
1601
+ },
1602
+ onReset: (event) => {
1603
+ onReset == null ? void 0 : onReset(event);
1604
+ if (event.defaultPrevented)
1605
+ return;
1606
+ reset();
1607
+ },
1608
+ children: /* @__PURE__ */ jsx(InternalFormContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs(Fragment, { children: [
1609
+ /* @__PURE__ */ jsx(FormResetter, { formRef, resetAfterSubmit }),
1610
+ subaction && /* @__PURE__ */ jsx("input", { type: "hidden", value: subaction, name: "subaction" }),
1611
+ id && /* @__PURE__ */ jsx("input", { type: "hidden", value: id, name: FORM_ID_FIELD }),
1612
+ children
1613
+ ] }) })
1937
1614
  }
1938
- }, /* @__PURE__ */ React.createElement(InternalFormContext.Provider, {
1939
- value: contextValue
1940
- }, /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(FormResetter, {
1941
- formRef,
1942
- resetAfterSubmit
1943
- }), subaction && /* @__PURE__ */ React.createElement("input", {
1944
- type: "hidden",
1945
- value: subaction,
1946
- name: "subaction"
1947
- }), id && /* @__PURE__ */ React.createElement("input", {
1948
- type: "hidden",
1949
- value: id,
1950
- name: FORM_ID_FIELD
1951
- }), children)));
1615
+ );
1952
1616
  }
1953
- const objectFromPathEntries = (entries) => {
1617
+
1618
+ // src/validation/createValidator.ts
1619
+ import * as R4 from "remeda";
1620
+
1621
+ // src/internal/flatten.ts
1622
+ var objectFromPathEntries = (entries) => {
1954
1623
  const map = new MultiValueMap();
1955
1624
  entries.forEach(([key, value]) => map.add(key, value));
1956
1625
  return [...map.entries()].reduce(
@@ -1958,12 +1627,14 @@ const objectFromPathEntries = (entries) => {
1958
1627
  {}
1959
1628
  );
1960
1629
  };
1961
- const preprocessFormData = (data) => {
1630
+
1631
+ // src/validation/createValidator.ts
1632
+ var preprocessFormData = (data) => {
1962
1633
  if ("entries" in data && typeof data.entries === "function")
1963
1634
  return objectFromPathEntries([...data.entries()]);
1964
1635
  return objectFromPathEntries(Object.entries(data));
1965
1636
  };
1966
- const omitInternalFields = (data) => omit(data, [FORM_ID_FIELD]);
1637
+ var omitInternalFields = (data) => R4.omit(data, [FORM_ID_FIELD]);
1967
1638
  function createValidator(validator) {
1968
1639
  return {
1969
1640
  validate: async (value) => {
@@ -1991,7 +1662,13 @@ function createValidator(validator) {
1991
1662
  validateField: (data, field) => validator.validateField(preprocessFormData(data), field)
1992
1663
  };
1993
1664
  }
1994
- const useFormState = (formId) => {
1665
+
1666
+ // src/userFacingFormContext.ts
1667
+ import { useCallback as useCallback5, useMemo as useMemo4 } from "react";
1668
+
1669
+ // src/unreleased/formStateHooks.ts
1670
+ import { useMemo as useMemo3 } from "react";
1671
+ var useFormState = (formId) => {
1995
1672
  const formContext = useInternalFormContext(formId, "useFormState");
1996
1673
  const isSubmitting = useInternalIsSubmitting(formContext.formId);
1997
1674
  const hasBeenSubmitted = useInternalHasBeenSubmitted(formContext.formId);
@@ -2005,7 +1682,7 @@ const useFormState = (formId) => {
2005
1682
  const fieldErrorsFromState = useFieldErrors(formContext.formId);
2006
1683
  const fieldErrorsToUse = useFieldErrorsForForm(formContext);
2007
1684
  const hydratedFieldErrors = fieldErrorsToUse.hydrateTo(fieldErrorsFromState);
2008
- return useMemo(
1685
+ return useMemo3(
2009
1686
  () => ({
2010
1687
  action,
2011
1688
  subaction,
@@ -2028,7 +1705,7 @@ const useFormState = (formId) => {
2028
1705
  ]
2029
1706
  );
2030
1707
  };
2031
- const useFormHelpers = (formId) => {
1708
+ var useFormHelpers = (formId) => {
2032
1709
  const formContext = useInternalFormContext(formId, "useFormHelpers");
2033
1710
  const setTouched = useSetTouched(formContext);
2034
1711
  const validateField = useValidateField(formContext.formId);
@@ -2038,7 +1715,7 @@ const useFormHelpers = (formId) => {
2038
1715
  const reset = useResetFormElement(formContext.formId);
2039
1716
  const submit = useSubmitForm(formContext.formId);
2040
1717
  const getValues = useFormValues(formContext.formId);
2041
- return useMemo(
1718
+ return useMemo3(
2042
1719
  () => ({
2043
1720
  setTouched,
2044
1721
  validateField,
@@ -2061,7 +1738,9 @@ const useFormHelpers = (formId) => {
2061
1738
  ]
2062
1739
  );
2063
1740
  };
2064
- const useFormContext = (formId) => {
1741
+
1742
+ // src/userFacingFormContext.ts
1743
+ var useFormContext = (formId) => {
2065
1744
  const context = useInternalFormContext(formId, "useFormContext");
2066
1745
  const state = useFormState(formId);
2067
1746
  const {
@@ -2075,7 +1754,7 @@ const useFormContext = (formId) => {
2075
1754
  getValues
2076
1755
  } = useFormHelpers(formId);
2077
1756
  const registerReceiveFocus = useRegisterReceiveFocus(context.formId);
2078
- const clearError = useCallback(
1757
+ const clearError = useCallback5(
2079
1758
  (...names) => {
2080
1759
  names.forEach((name) => {
2081
1760
  internalClearError(name);
@@ -2083,7 +1762,7 @@ const useFormContext = (formId) => {
2083
1762
  },
2084
1763
  [internalClearError]
2085
1764
  );
2086
- return useMemo(
1765
+ return useMemo4(
2087
1766
  () => ({
2088
1767
  ...state,
2089
1768
  setFieldTouched: setTouched,
@@ -2110,7 +1789,13 @@ const useFormContext = (formId) => {
2110
1789
  ]
2111
1790
  );
2112
1791
  };
2113
- const useInternalFieldArray = (context, field, validationBehavior) => {
1792
+
1793
+ // src/internal/state/fieldArray.tsx
1794
+ import { useMemo as useMemo5 } from "react";
1795
+ import { useCallback as useCallback6 } from "react";
1796
+ import invariant4 from "tiny-invariant";
1797
+ import { Fragment as Fragment2, jsx as jsx2 } from "react/jsx-runtime";
1798
+ var useInternalFieldArray = (context, field, validationBehavior) => {
2114
1799
  const value = useFieldDefaultValue(field, context);
2115
1800
  useRegisterControlledField(context, field);
2116
1801
  const hasBeenSubmitted = useInternalHasBeenSubmitted(context.formId);
@@ -2122,12 +1807,12 @@ const useInternalFieldArray = (context, field, validationBehavior) => {
2122
1807
  ...validationBehavior
2123
1808
  };
2124
1809
  const behavior = hasBeenSubmitted ? resolvedValidationBehavior.whenSubmitted : resolvedValidationBehavior.initial;
2125
- const maybeValidate = useCallback(() => {
1810
+ const maybeValidate = useCallback6(() => {
2126
1811
  if (behavior === "onChange") {
2127
1812
  validateField(field);
2128
1813
  }
2129
1814
  }, [behavior, field, validateField]);
2130
- invariant(
1815
+ invariant4(
2131
1816
  value === void 0 || value === null || Array.isArray(value),
2132
1817
  `FieldArray: defaultValue value for ${field} must be an array, null, or undefined`
2133
1818
  );
@@ -2135,7 +1820,7 @@ const useInternalFieldArray = (context, field, validationBehavior) => {
2135
1820
  context.formId,
2136
1821
  (state) => state.controlledFields.array
2137
1822
  );
2138
- const helpers = useMemo(
1823
+ const helpers = useMemo5(
2139
1824
  () => ({
2140
1825
  push: (item) => {
2141
1826
  arr.push(field, item);
@@ -2172,14 +1857,14 @@ const useInternalFieldArray = (context, field, validationBehavior) => {
2172
1857
  }),
2173
1858
  [arr, field, maybeValidate]
2174
1859
  );
2175
- const arrayValue = useMemo(() => value != null ? value : [], [value]);
1860
+ const arrayValue = useMemo5(() => value != null ? value : [], [value]);
2176
1861
  return [arrayValue, helpers, error];
2177
1862
  };
2178
1863
  function useFieldArray(name, { formId, validationBehavior } = {}) {
2179
1864
  const context = useInternalFormContext(formId, "FieldArray");
2180
1865
  return useInternalFieldArray(context, name, validationBehavior);
2181
1866
  }
2182
- const FieldArray = ({
1867
+ var FieldArray = ({
2183
1868
  name,
2184
1869
  children,
2185
1870
  formId,
@@ -2191,7 +1876,20 @@ const FieldArray = ({
2191
1876
  name,
2192
1877
  validationBehavior
2193
1878
  );
2194
- return /* @__PURE__ */ React.createElement(React.Fragment, null, children(value, helpers, error));
1879
+ return /* @__PURE__ */ jsx2(Fragment2, { children: children(value, helpers, error) });
1880
+ };
1881
+ export {
1882
+ FieldArray,
1883
+ ValidatedForm,
1884
+ createValidator,
1885
+ setFormDefaults,
1886
+ useControlField,
1887
+ useField,
1888
+ useFieldArray,
1889
+ useFormContext,
1890
+ useIsSubmitting,
1891
+ useIsValid,
1892
+ useUpdateControlledField,
1893
+ validationError
2195
1894
  };
2196
- export { FieldArray, ValidatedForm, createValidator, setFormDefaults, useControlField, useField, useFieldArray, useFormContext, useIsSubmitting, useIsValid, useUpdateControlledField, validationError };
2197
- //# sourceMappingURL=remix-validated-form.es.js.map
1895
+ //# sourceMappingURL=index.esm.js.map