remix-validated-form 4.2.0 → 4.4.0

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 (181) hide show
  1. package/.turbo/turbo-build.log +15 -9
  2. package/README.md +1 -0
  3. package/browser/ValidatedForm.js +16 -26
  4. package/browser/hooks.d.ts +2 -0
  5. package/browser/hooks.js +20 -9
  6. package/browser/internal/MultiValueMap.d.ts +2 -0
  7. package/browser/internal/MultiValueMap.js +4 -0
  8. package/browser/internal/getInputProps.js +2 -1
  9. package/browser/internal/hooks.d.ts +20 -9
  10. package/browser/internal/hooks.js +32 -23
  11. package/browser/internal/logic/getRadioChecked.js +10 -0
  12. package/browser/internal/reset.d.ts +28 -0
  13. package/browser/internal/reset.js +13 -0
  14. package/browser/internal/state/cleanup.d.ts +2 -0
  15. package/browser/internal/state/cleanup.js +6 -0
  16. package/browser/internal/state/controlledFieldStore.d.ts +24 -0
  17. package/browser/internal/state/controlledFieldStore.js +57 -0
  18. package/browser/internal/state/controlledFields.d.ts +6 -62
  19. package/browser/internal/state/controlledFields.js +36 -63
  20. package/browser/internal/state/createFormStore.d.ts +40 -0
  21. package/browser/internal/state/createFormStore.js +83 -0
  22. package/browser/internal/state/storeFamily.d.ts +9 -0
  23. package/browser/internal/state/storeFamily.js +18 -0
  24. package/browser/internal/state/storeHooks.d.ts +5 -0
  25. package/browser/internal/state/storeHooks.js +10 -0
  26. package/browser/internal/state.d.ts +0 -27
  27. package/browser/internal/state.js +0 -5
  28. package/browser/unreleased/formStateHooks.d.ts +15 -0
  29. package/browser/unreleased/formStateHooks.js +23 -14
  30. package/browser/userFacingFormContext.d.ts +8 -0
  31. package/browser/userFacingFormContext.js +5 -4
  32. package/dist/remix-validated-form.cjs.js +17 -0
  33. package/dist/remix-validated-form.es.js +2844 -0
  34. package/dist/remix-validated-form.umd.js +17 -0
  35. package/{build → dist/types}/ValidatedForm.d.ts +0 -0
  36. package/{build → dist/types}/hooks.d.ts +2 -0
  37. package/{build → dist/types}/index.d.ts +0 -0
  38. package/{build → dist/types}/internal/MultiValueMap.d.ts +2 -0
  39. package/{build → dist/types}/internal/constants.d.ts +0 -0
  40. package/{build → dist/types}/internal/flatten.d.ts +0 -0
  41. package/{build → dist/types}/internal/formContext.d.ts +0 -0
  42. package/{build → dist/types}/internal/getInputProps.d.ts +0 -0
  43. package/dist/types/internal/hooks.d.ts +32 -0
  44. package/{build → dist/types}/internal/hydratable.d.ts +0 -0
  45. package/{build → dist/types}/internal/logic/getCheckboxChecked.d.ts +0 -0
  46. package/{build → dist/types}/internal/logic/getRadioChecked.d.ts +0 -0
  47. package/dist/types/internal/state/cleanup.d.ts +2 -0
  48. package/dist/types/internal/state/controlledFieldStore.d.ts +24 -0
  49. package/dist/types/internal/state/controlledFields.d.ts +6 -0
  50. package/dist/types/internal/state/createFormStore.d.ts +40 -0
  51. package/dist/types/internal/state/storeFamily.d.ts +9 -0
  52. package/dist/types/internal/state/storeHooks.d.ts +5 -0
  53. package/{build → dist/types}/internal/submissionCallbacks.d.ts +0 -0
  54. package/{build → dist/types}/internal/util.d.ts +0 -0
  55. package/{build → dist/types}/server.d.ts +0 -0
  56. package/{build → dist/types}/unreleased/formStateHooks.d.ts +15 -0
  57. package/{build → dist/types}/userFacingFormContext.d.ts +8 -0
  58. package/{build → dist/types}/validation/createValidator.d.ts +0 -0
  59. package/{build → dist/types}/validation/types.d.ts +0 -0
  60. package/package.json +11 -9
  61. package/src/ValidatedForm.tsx +25 -43
  62. package/src/hooks.ts +29 -17
  63. package/src/internal/MultiValueMap.ts +6 -0
  64. package/src/internal/getInputProps.test.ts +251 -0
  65. package/src/internal/getInputProps.ts +2 -1
  66. package/src/internal/hooks.ts +69 -45
  67. package/src/internal/logic/getRadioChecked.ts +11 -0
  68. package/src/internal/state/cleanup.ts +8 -0
  69. package/src/internal/state/controlledFieldStore.ts +91 -0
  70. package/src/internal/state/controlledFields.ts +78 -0
  71. package/src/internal/state/createFormStore.ts +152 -0
  72. package/src/internal/state/storeFamily.ts +24 -0
  73. package/src/internal/state/storeHooks.ts +22 -0
  74. package/src/unreleased/formStateHooks.ts +50 -27
  75. package/src/userFacingFormContext.ts +17 -5
  76. package/src/validation/validation.test.ts +304 -0
  77. package/tsconfig.json +4 -1
  78. package/vite.config.ts +7 -0
  79. package/.turbo/turbo-test.log +0 -11
  80. package/browser/components.d.ts +0 -7
  81. package/browser/components.js +0 -10
  82. package/browser/internal/SingleTypeMultiValueMap.d.ts +0 -9
  83. package/browser/internal/SingleTypeMultiValueMap.js +0 -41
  84. package/browser/internal/customState.d.ts +0 -105
  85. package/browser/internal/customState.js +0 -46
  86. package/browser/internal/hooks-valtio.d.ts +0 -18
  87. package/browser/internal/hooks-valtio.js +0 -110
  88. package/browser/internal/hooks-zustand.d.ts +0 -16
  89. package/browser/internal/hooks-zustand.js +0 -100
  90. package/browser/internal/immerMiddleware.d.ts +0 -6
  91. package/browser/internal/immerMiddleware.js +0 -7
  92. package/browser/internal/logic/elementUtils.d.ts +0 -3
  93. package/browser/internal/logic/elementUtils.js +0 -3
  94. package/browser/internal/logic/getCheckboxChecked copy.d.ts +0 -1
  95. package/browser/internal/logic/getCheckboxChecked copy.js +0 -9
  96. package/browser/internal/logic/setFieldValue.d.ts +0 -1
  97. package/browser/internal/logic/setFieldValue.js +0 -40
  98. package/browser/internal/logic/setInputValueInForm.d.ts +0 -1
  99. package/browser/internal/logic/setInputValueInForm.js +0 -77
  100. package/browser/internal/setFieldValue.d.ts +0 -20
  101. package/browser/internal/setFieldValue.js +0 -83
  102. package/browser/internal/setFormValues.d.ts +0 -2
  103. package/browser/internal/setFormValues.js +0 -26
  104. package/browser/internal/state/setFieldValue.d.ts +0 -0
  105. package/browser/internal/state/setFieldValue.js +0 -1
  106. package/browser/internal/state-valtio.d.ts +0 -62
  107. package/browser/internal/state-valtio.js +0 -69
  108. package/browser/internal/state-zustand.d.ts +0 -47
  109. package/browser/internal/state-zustand.js +0 -85
  110. package/browser/internal/test.d.ts +0 -0
  111. package/browser/internal/test.js +0 -15
  112. package/browser/internal/useMultiValueMap.d.ts +0 -1
  113. package/browser/internal/useMultiValueMap.js +0 -11
  114. package/browser/internal/watch.d.ts +0 -18
  115. package/browser/internal/watch.js +0 -122
  116. package/browser/lowLevelHooks.d.ts +0 -0
  117. package/browser/lowLevelHooks.js +0 -1
  118. package/browser/test-data/testFormData.d.ts +0 -15
  119. package/browser/test-data/testFormData.js +0 -46
  120. package/browser/types.d.ts +0 -1
  121. package/browser/types.js +0 -1
  122. package/browser/validation/validation.test.d.ts +0 -1
  123. package/browser/validation/validation.test.js +0 -274
  124. package/browser/validation/withYup.d.ts +0 -6
  125. package/browser/validation/withYup.js +0 -40
  126. package/browser/validation/withZod.d.ts +0 -6
  127. package/browser/validation/withZod.js +0 -50
  128. package/build/ValidatedForm.js +0 -257
  129. package/build/hooks.js +0 -79
  130. package/build/index.js +0 -18
  131. package/build/internal/MultiValueMap.js +0 -44
  132. package/build/internal/SingleTypeMultiValueMap.d.ts +0 -8
  133. package/build/internal/SingleTypeMultiValueMap.js +0 -45
  134. package/build/internal/constants.js +0 -7
  135. package/build/internal/flatten.js +0 -14
  136. package/build/internal/formContext.js +0 -5
  137. package/build/internal/getInputProps.js +0 -57
  138. package/build/internal/hooks-valtio.d.ts +0 -18
  139. package/build/internal/hooks-valtio.js +0 -128
  140. package/build/internal/hooks-zustand.d.ts +0 -16
  141. package/build/internal/hooks-zustand.js +0 -117
  142. package/build/internal/hooks.d.ts +0 -21
  143. package/build/internal/hooks.js +0 -128
  144. package/build/internal/hydratable.js +0 -17
  145. package/build/internal/immerMiddleware.d.ts +0 -6
  146. package/build/internal/immerMiddleware.js +0 -14
  147. package/build/internal/logic/elementUtils.d.ts +0 -3
  148. package/build/internal/logic/elementUtils.js +0 -9
  149. package/build/internal/logic/getCheckboxChecked.js +0 -13
  150. package/build/internal/logic/getRadioChecked.js +0 -9
  151. package/build/internal/logic/setFieldValue.d.ts +0 -1
  152. package/build/internal/logic/setFieldValue.js +0 -47
  153. package/build/internal/logic/setInputValueInForm.d.ts +0 -1
  154. package/build/internal/logic/setInputValueInForm.js +0 -84
  155. package/build/internal/setFormValues.d.ts +0 -2
  156. package/build/internal/setFormValues.js +0 -33
  157. package/build/internal/state/atomUtils.d.ts +0 -38
  158. package/build/internal/state/atomUtils.js +0 -13
  159. package/build/internal/state/controlledFields.d.ts +0 -62
  160. package/build/internal/state/controlledFields.js +0 -85
  161. package/build/internal/state-valtio.d.ts +0 -62
  162. package/build/internal/state-valtio.js +0 -83
  163. package/build/internal/state-zustand.d.ts +0 -47
  164. package/build/internal/state-zustand.js +0 -91
  165. package/build/internal/state.d.ts +0 -370
  166. package/build/internal/state.js +0 -76
  167. package/build/internal/submissionCallbacks.js +0 -17
  168. package/build/internal/test.d.ts +0 -1
  169. package/build/internal/test.js +0 -12
  170. package/build/internal/util.js +0 -41
  171. package/build/internal/watch.d.ts +0 -20
  172. package/build/internal/watch.js +0 -126
  173. package/build/server.js +0 -32
  174. package/build/types.d.ts +0 -1
  175. package/build/types.js +0 -2
  176. package/build/unreleased/formStateHooks.js +0 -59
  177. package/build/userFacingFormContext.js +0 -30
  178. package/build/validation/createValidator.js +0 -45
  179. package/build/validation/types.js +0 -2
  180. package/src/internal/state/atomUtils.ts +0 -13
  181. package/src/internal/state.ts +0 -132
@@ -1,77 +1,50 @@
1
- import { atom } from "jotai";
2
- import omit from "lodash/omit";
3
1
  import { useCallback, useEffect } from "react";
4
- import { useFieldDefaultValue, useFormAtomValue, useFormAtom, useFormUpdateAtom, } from "../hooks";
5
- import { isHydratedAtom } from "../state";
6
- import { fieldAtomFamily, formAtomFamily, } from "./atomUtils";
7
- export const controlledFieldsAtom = formAtomFamily({});
8
- const refCountAtom = fieldAtomFamily(() => atom(0));
9
- const fieldValueAtom = fieldAtomFamily(() => atom(undefined));
10
- const fieldValueHydratedAtom = fieldAtomFamily(() => atom(false));
11
- const pendingValidateAtom = fieldAtomFamily(() => atom(undefined));
12
- const registerAtom = atom(null, (get, set, { formId, field }) => {
13
- set(refCountAtom({ formId, field }), (prev) => prev + 1);
14
- const newRefCount = get(refCountAtom({ formId, field }));
15
- // We don't set hydrated here because it gets set when we know
16
- // we have the right default values
17
- if (newRefCount === 1) {
18
- set(controlledFieldsAtom(formId), (prev) => ({
19
- ...prev,
20
- [field]: fieldValueAtom({ formId, field }),
21
- }));
22
- }
23
- });
24
- const unregisterAtom = atom(null, (get, set, { formId, field }) => {
25
- set(refCountAtom({ formId, field }), (prev) => prev - 1);
26
- const newRefCount = get(refCountAtom({ formId, field }));
27
- if (newRefCount === 0) {
28
- set(controlledFieldsAtom(formId), (prev) => omit(prev, field));
29
- fieldValueAtom.remove({ formId, field });
30
- pendingValidateAtom.remove({ formId, field });
31
- fieldValueHydratedAtom.remove({ formId, field });
32
- }
33
- });
34
- export const setControlledFieldValueAtom = atom(null, async (_get, set, { formId, field, value, }) => {
35
- set(fieldValueAtom({ formId, field }), value);
36
- const pending = pendingValidateAtom({ formId, field });
37
- await new Promise((resolve) => set(pending, resolve));
38
- set(pending, undefined);
39
- });
40
- export const useControlledFieldValue = (formId, field) => {
41
- const fieldAtom = fieldValueAtom({ formId, field });
42
- const [value, setValue] = useFormAtom(fieldAtom);
43
- const defaultValue = useFieldDefaultValue(field, { formId });
44
- const isHydrated = useFormAtomValue(isHydratedAtom(formId));
45
- const [isFieldHydrated, setIsFieldHydrated] = useFormAtom(fieldValueHydratedAtom({ formId, field }));
2
+ import { useFieldDefaultValue } from "../hooks";
3
+ import { controlledFieldStore } from "./controlledFieldStore";
4
+ import { formStore } from "./createFormStore";
5
+ export const useControlledFieldValue = (context, field) => {
6
+ const useValueStore = controlledFieldStore(context.formId);
7
+ const value = useValueStore((state) => { var _a; return (_a = state.fields[field]) === null || _a === void 0 ? void 0 : _a.value; });
8
+ const useFormStore = formStore(context.formId);
9
+ const isFormHydrated = useFormStore((state) => state.isHydrated);
10
+ const defaultValue = useFieldDefaultValue(field, context);
11
+ const isFieldHydrated = useValueStore((state) => { var _a, _b; return (_b = (_a = state.fields[field]) === null || _a === void 0 ? void 0 : _a.hydrated) !== null && _b !== void 0 ? _b : false; });
12
+ const hydrateWithDefault = useValueStore((state) => state.hydrateWithDefault);
46
13
  useEffect(() => {
47
- if (isHydrated && !isFieldHydrated) {
48
- setValue(defaultValue);
49
- setIsFieldHydrated(true);
14
+ if (isFormHydrated && !isFieldHydrated) {
15
+ hydrateWithDefault(field, defaultValue);
50
16
  }
51
17
  }, [
52
18
  defaultValue,
53
19
  field,
54
- formId,
20
+ hydrateWithDefault,
55
21
  isFieldHydrated,
56
- isHydrated,
57
- setIsFieldHydrated,
58
- setValue,
22
+ isFormHydrated,
59
23
  ]);
60
24
  return isFieldHydrated ? value : defaultValue;
61
25
  };
62
- export const useControllableValue = (formId, field) => {
63
- const pending = useFormAtomValue(pendingValidateAtom({ formId, field }));
26
+ export const useControllableValue = (context, field) => {
27
+ const useValueStore = controlledFieldStore(context.formId);
28
+ const resolveUpdate = useValueStore((state) => { var _a; return (_a = state.fields[field]) === null || _a === void 0 ? void 0 : _a.resolveValueUpdate; });
64
29
  useEffect(() => {
65
- pending === null || pending === void 0 ? void 0 : pending();
66
- }, [pending]);
67
- const register = useFormUpdateAtom(registerAtom);
68
- const unregister = useFormUpdateAtom(unregisterAtom);
30
+ resolveUpdate === null || resolveUpdate === void 0 ? void 0 : resolveUpdate();
31
+ }, [resolveUpdate]);
32
+ const register = useValueStore((state) => state.register);
33
+ const unregister = useValueStore((state) => state.unregister);
69
34
  useEffect(() => {
70
- register({ formId, field });
71
- return () => unregister({ formId, field });
72
- }, [field, formId, register, unregister]);
73
- const setControlledFieldValue = useFormUpdateAtom(setControlledFieldValueAtom);
74
- const setValue = useCallback((value) => setControlledFieldValue({ formId, field, value }), [field, formId, setControlledFieldValue]);
75
- const value = useControlledFieldValue(formId, field);
35
+ register(field);
36
+ return () => unregister(field);
37
+ }, [context.formId, field, register, unregister]);
38
+ const setControlledFieldValue = useValueStore((state) => state.setValue);
39
+ const setValue = useCallback((value) => setControlledFieldValue(field, value), [field, setControlledFieldValue]);
40
+ const value = useControlledFieldValue(context, field);
76
41
  return [value, setValue];
77
42
  };
43
+ export const useUpdateControllableValue = (formId) => {
44
+ const useValueStore = controlledFieldStore(formId);
45
+ return useValueStore((state) => state.setValue);
46
+ };
47
+ export const useAwaitValue = (formId) => {
48
+ const useValueStore = controlledFieldStore(formId);
49
+ return useValueStore((state) => state.awaitValueUpdate);
50
+ };
@@ -0,0 +1,40 @@
1
+ import { FieldErrors, TouchedFields, Validator } from "../../validation/types";
2
+ export declare type SyncedFormProps = {
3
+ formId?: string;
4
+ action?: string;
5
+ subaction?: string;
6
+ defaultValues: {
7
+ [fieldName: string]: any;
8
+ };
9
+ registerReceiveFocus: (fieldName: string, handler: () => void) => () => void;
10
+ validator: Validator<unknown>;
11
+ };
12
+ export declare type FormState = {
13
+ isHydrated: boolean;
14
+ isSubmitting: boolean;
15
+ hasBeenSubmitted: boolean;
16
+ fieldErrors: FieldErrors;
17
+ touchedFields: TouchedFields;
18
+ formProps?: SyncedFormProps;
19
+ formElement: HTMLFormElement | null;
20
+ isValid: () => boolean;
21
+ startSubmit: () => void;
22
+ endSubmit: () => void;
23
+ setTouched: (field: string, touched: boolean) => void;
24
+ setFieldError: (field: string, error: string) => void;
25
+ setFieldErrors: (errors: FieldErrors) => void;
26
+ clearFieldError: (field: string) => void;
27
+ reset: () => void;
28
+ syncFormProps: (props: SyncedFormProps) => void;
29
+ setHydrated: () => void;
30
+ setFormElement: (formElement: HTMLFormElement | null) => void;
31
+ validateField: (fieldName: string) => Promise<string | null>;
32
+ validate: () => Promise<void>;
33
+ resetFormElement: () => void;
34
+ };
35
+ export declare const formStore: {
36
+ (formId: import("./storeFamily").InternalFormId): import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<FormState>, "setState"> & {
37
+ setState(nextStateOrUpdater: FormState | Partial<FormState> | ((state: import("immer/dist/internal").WritableDraft<FormState>) => void), shouldReplace?: boolean | undefined): void;
38
+ }>;
39
+ remove(formId: import("./storeFamily").InternalFormId): void;
40
+ };
@@ -0,0 +1,83 @@
1
+ import invariant from "tiny-invariant";
2
+ import create from "zustand";
3
+ import { immer } from "zustand/middleware/immer";
4
+ import { controlledFieldStore } from "./controlledFieldStore";
5
+ import { storeFamily } from "./storeFamily";
6
+ export const formStore = storeFamily((formId) => create()(immer((set, get, api) => ({
7
+ isHydrated: false,
8
+ isSubmitting: false,
9
+ hasBeenSubmitted: false,
10
+ touchedFields: {},
11
+ fieldErrors: {},
12
+ formElement: null,
13
+ isValid: () => Object.keys(get().fieldErrors).length === 0,
14
+ startSubmit: () => set((state) => {
15
+ state.isSubmitting = true;
16
+ state.hasBeenSubmitted = true;
17
+ }),
18
+ endSubmit: () => set((state) => {
19
+ state.isSubmitting = false;
20
+ }),
21
+ setTouched: (fieldName, touched) => set((state) => {
22
+ state.touchedFields[fieldName] = touched;
23
+ }),
24
+ setFieldError: (fieldName, error) => set((state) => {
25
+ state.fieldErrors[fieldName] = error;
26
+ }),
27
+ setFieldErrors: (errors) => set((state) => {
28
+ state.fieldErrors = errors;
29
+ }),
30
+ clearFieldError: (fieldName) => set((state) => {
31
+ delete state.fieldErrors[fieldName];
32
+ }),
33
+ reset: () => set((state) => {
34
+ state.fieldErrors = {};
35
+ state.touchedFields = {};
36
+ state.hasBeenSubmitted = false;
37
+ }),
38
+ syncFormProps: (props) => set((state) => {
39
+ state.formProps = props;
40
+ }),
41
+ setHydrated: () => set((state) => {
42
+ state.isHydrated = true;
43
+ }),
44
+ setFormElement: (formElement) => {
45
+ // This gets called frequently, so we want to avoid calling set() every time
46
+ // Or else we wind up with an infinite loop
47
+ if (get().formElement === formElement)
48
+ return;
49
+ set((state) => {
50
+ // weird type issue here
51
+ // seems to be because formElement is a writable draft
52
+ state.formElement = formElement;
53
+ });
54
+ },
55
+ validateField: async (field) => {
56
+ var _a, _b, _c;
57
+ const formElement = get().formElement;
58
+ invariant(formElement, "Cannot find reference to form. This is probably a bug in remix-validated-form.");
59
+ const validator = (_a = get().formProps) === null || _a === void 0 ? void 0 : _a.validator;
60
+ invariant(validator, "Cannot validator. This is probably a bug in remix-validated-form.");
61
+ await ((_c = (_b = controlledFieldStore(formId).getState()).awaitValueUpdate) === null || _c === void 0 ? void 0 : _c.call(_b, field));
62
+ const { error } = await validator.validateField(new FormData(formElement), field);
63
+ if (error) {
64
+ get().setFieldError(field, error);
65
+ return error;
66
+ }
67
+ else {
68
+ get().clearFieldError(field);
69
+ return null;
70
+ }
71
+ },
72
+ validate: async () => {
73
+ var _a;
74
+ const formElement = get().formElement;
75
+ invariant(formElement, "Cannot find reference to form. This is probably a bug in remix-validated-form.");
76
+ const validator = (_a = get().formProps) === null || _a === void 0 ? void 0 : _a.validator;
77
+ invariant(validator, "Cannot validator. This is probably a bug in remix-validated-form.");
78
+ const { error } = await validator.validate(new FormData(formElement));
79
+ if (error)
80
+ get().setFieldErrors(error.fieldErrors);
81
+ },
82
+ resetFormElement: () => { var _a; return (_a = get().formElement) === null || _a === void 0 ? void 0 : _a.reset(); },
83
+ }))));
@@ -0,0 +1,9 @@
1
+ /**
2
+ * This is basically what `atomFamily` from jotai does,
3
+ * but it doesn't make sense to include the entire jotai library just for that api.
4
+ */
5
+ export declare type InternalFormId = string | symbol;
6
+ export declare const storeFamily: <T>(create: (formId: InternalFormId) => T) => {
7
+ (formId: InternalFormId): T;
8
+ remove(formId: InternalFormId): void;
9
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This is basically what `atomFamily` from jotai does,
3
+ * but it doesn't make sense to include the entire jotai library just for that api.
4
+ */
5
+ export const storeFamily = (create) => {
6
+ const stores = new Map();
7
+ const family = (formId) => {
8
+ if (stores.has(formId))
9
+ return stores.get(formId);
10
+ const store = create(formId);
11
+ stores.set(formId, store);
12
+ return store;
13
+ };
14
+ family.remove = (formId) => {
15
+ stores.delete(formId);
16
+ };
17
+ return family;
18
+ };
@@ -0,0 +1,5 @@
1
+ import { ControlledFieldState } from "./controlledFieldStore";
2
+ import { FormState } from "./createFormStore";
3
+ import { InternalFormId } from "./storeFamily";
4
+ export declare const useFormStore: <T>(formId: InternalFormId, selector: (state: FormState) => T) => T;
5
+ export declare const useControlledFieldStore: <T>(formId: InternalFormId, selector: (state: ControlledFieldState) => T) => T;
@@ -0,0 +1,10 @@
1
+ import { controlledFieldStore, } from "./controlledFieldStore";
2
+ import { formStore } from "./createFormStore";
3
+ export const useFormStore = (formId, selector) => {
4
+ const useStore = formStore(formId);
5
+ return useStore(selector);
6
+ };
7
+ export const useControlledFieldStore = (formId, selector) => {
8
+ const useStore = controlledFieldStore(formId);
9
+ return useStore(selector);
10
+ };
@@ -206,33 +206,6 @@ export declare const isValidAtom: {
206
206
  remove(param: InternalFormId): void;
207
207
  setShouldRemove(shouldRemove: ((createdAt: number, param: InternalFormId) => boolean) | null): void;
208
208
  };
209
- export declare const resetAtom: {
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
209
  export declare const startSubmitAtom: {
237
210
  (param: InternalFormId): import("jotai").Atom<null> & {
238
211
  write: (get: {
@@ -26,11 +26,6 @@ export const cleanupFormState = (formId) => {
26
26
  ].forEach((formAtom) => formAtom.remove(formId));
27
27
  };
28
28
  export const isValidAtom = atomFamily((formId) => atom((get) => Object.keys(get(fieldErrorsAtom(formId))).length === 0));
29
- export const resetAtom = atomFamily((formId) => atom(null, (_get, set) => {
30
- set(fieldErrorsAtom(formId), {});
31
- set(touchedFieldsAtom(formId), {});
32
- set(hasBeenSubmittedAtom(formId), false);
33
- }));
34
29
  export const startSubmitAtom = atomFamily((formId) => atom(null, (_get, set) => {
35
30
  set(isSubmittingAtom(formId), true);
36
31
  set(hasBeenSubmittedAtom(formId), true);
@@ -30,6 +30,21 @@ export declare type FormHelpers = {
30
30
  * Change the touched state of the specified field.
31
31
  */
32
32
  setTouched: (fieldName: string, touched: boolean) => void;
33
+ /**
34
+ * Validate the whole form and populate any errors.
35
+ */
36
+ validate: () => Promise<void>;
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;
33
48
  };
34
49
  /**
35
50
  * Returns helpers that can be used to update the form state.
@@ -1,25 +1,27 @@
1
1
  import { useMemo } from "react";
2
- import { useInternalFormContext, useClearError, useSetTouched, useDefaultValuesForForm, useFieldErrorsForForm, useFormAtomValue, } from "../internal/hooks";
3
- import { fieldErrorsAtom, formPropsAtom, hasBeenSubmittedAtom, isSubmittingAtom, isValidAtom, touchedFieldsAtom, } from "../internal/state";
2
+ import { useInternalFormContext, useClearError, useSetTouched, useDefaultValuesForForm, useFieldErrorsForForm, useInternalIsSubmitting, useInternalHasBeenSubmitted, useTouchedFields, useInternalIsValid, useFieldErrors, useValidateField, useValidate, useSetFieldErrors, useResetFormElement, useSyncedDefaultValues, useFormActionProp, useFormSubactionProp, } from "../internal/hooks";
4
3
  /**
5
4
  * Returns information about the form.
6
5
  *
7
6
  * @param formId the id of the form. Only necessary if being used outside a ValidatedForm.
8
7
  */
9
8
  export const useFormState = (formId) => {
10
- const formContext = useInternalFormContext(formId, "useIsValid");
11
- const formProps = useFormAtomValue(formPropsAtom(formContext.formId));
12
- const isSubmitting = useFormAtomValue(isSubmittingAtom(formContext.formId));
13
- const hasBeenSubmitted = useFormAtomValue(hasBeenSubmittedAtom(formContext.formId));
14
- const touchedFields = useFormAtomValue(touchedFieldsAtom(formContext.formId));
15
- const isValid = useFormAtomValue(isValidAtom(formContext.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);
16
17
  const defaultValuesToUse = useDefaultValuesForForm(formContext);
17
- const hydratedDefaultValues = defaultValuesToUse.hydrateTo(formProps.defaultValues);
18
- const fieldErrorsFromState = useFormAtomValue(fieldErrorsAtom(formContext.formId));
18
+ const hydratedDefaultValues = defaultValuesToUse.hydrateTo(syncedDefaultValues);
19
+ const fieldErrorsFromState = useFieldErrors(formContext.formId);
19
20
  const fieldErrorsToUse = useFieldErrorsForForm(formContext);
20
21
  const hydratedFieldErrors = fieldErrorsToUse.hydrateTo(fieldErrorsFromState);
21
22
  return useMemo(() => ({
22
- ...formProps,
23
+ action,
24
+ subaction,
23
25
  defaultValues: hydratedDefaultValues,
24
26
  fieldErrors: hydratedFieldErrors !== null && hydratedFieldErrors !== void 0 ? hydratedFieldErrors : {},
25
27
  hasBeenSubmitted,
@@ -27,12 +29,13 @@ export const useFormState = (formId) => {
27
29
  touchedFields,
28
30
  isValid,
29
31
  }), [
30
- formProps,
32
+ action,
31
33
  hasBeenSubmitted,
32
34
  hydratedDefaultValues,
33
35
  hydratedFieldErrors,
34
36
  isSubmitting,
35
37
  isValid,
38
+ subaction,
36
39
  touchedFields,
37
40
  ]);
38
41
  };
@@ -44,11 +47,17 @@ export const useFormState = (formId) => {
44
47
  export const useFormHelpers = (formId) => {
45
48
  const formContext = useInternalFormContext(formId, "useFormHelpers");
46
49
  const setTouched = useSetTouched(formContext);
47
- const { validateField } = useFormAtomValue(formPropsAtom(formContext.formId));
50
+ const validateField = useValidateField(formContext.formId);
51
+ const validate = useValidate(formContext.formId);
48
52
  const clearError = useClearError(formContext);
53
+ const setFieldErrors = useSetFieldErrors(formContext.formId);
54
+ const reset = useResetFormElement(formContext.formId);
49
55
  return useMemo(() => ({
50
56
  setTouched,
51
57
  validateField,
52
58
  clearError,
53
- }), [clearError, setTouched, validateField]);
59
+ validate,
60
+ clearAllErrors: () => setFieldErrors({}),
61
+ reset,
62
+ }), [clearError, reset, setFieldErrors, setTouched, validate, validateField]);
54
63
  };
@@ -53,6 +53,14 @@ export declare type FormContextValue = {
53
53
  * Change the touched state of the specified field.
54
54
  */
55
55
  setFieldTouched: (fieldName: string, touched: boolean) => void;
56
+ /**
57
+ * Validate the whole form and populate any errors.
58
+ */
59
+ validate: () => Promise<void>;
60
+ /**
61
+ * Clears all errors on the form.
62
+ */
63
+ clearAllErrors: () => void;
56
64
  };
57
65
  /**
58
66
  * Provides access to some of the internal state of the form.
@@ -1,6 +1,5 @@
1
1
  import { useCallback } from "react";
2
- import { useFormAtomValue, useInternalFormContext } from "./internal/hooks";
3
- import { formPropsAtom } from "./internal/state";
2
+ import { useInternalFormContext, useRegisterReceiveFocus, } from "./internal/hooks";
4
3
  import { useFormHelpers, useFormState } from "./unreleased/formStateHooks";
5
4
  /**
6
5
  * Provides access to some of the internal state of the form.
@@ -9,8 +8,8 @@ export const useFormContext = (formId) => {
9
8
  // Try to access context so we get our error specific to this hook if it's not there
10
9
  const context = useInternalFormContext(formId, "useFormContext");
11
10
  const state = useFormState(formId);
12
- const { clearError: internalClearError, setTouched, validateField, } = useFormHelpers(formId);
13
- const { registerReceiveFocus } = useFormAtomValue(formPropsAtom(context.formId));
11
+ const { clearError: internalClearError, setTouched, validateField, clearAllErrors, validate, } = useFormHelpers(formId);
12
+ const registerReceiveFocus = useRegisterReceiveFocus(context.formId);
14
13
  const clearError = useCallback((...names) => {
15
14
  names.forEach((name) => {
16
15
  internalClearError(name);
@@ -22,5 +21,7 @@ export const useFormContext = (formId) => {
22
21
  validateField,
23
22
  clearError,
24
23
  registerReceiveFocus,
24
+ clearAllErrors,
25
+ validate,
25
26
  };
26
27
  };
@@ -0,0 +1,17 @@
1
+ "use strict";var Tn=Object.defineProperty,wn=Object.defineProperties;var Cn=Object.getOwnPropertyDescriptors;var de=Object.getOwnPropertySymbols;var Et=Object.prototype.hasOwnProperty,It=Object.prototype.propertyIsEnumerable;var Pt=(e,t,r)=>t in e?Tn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,C=(e,t)=>{for(var r in t||(t={}))Et.call(t,r)&&Pt(e,r,t[r]);if(de)for(var r of de(t))It.call(t,r)&&Pt(e,r,t[r]);return e},K=(e,t)=>wn(e,Cn(t));var At=(e,t)=>{var r={};for(var n in e)Et.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&de)for(var n of de(e))t.indexOf(n)<0&&It.call(e,n)&&(r[n]=e[n]);return r};Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var y=require("react"),re=require("@remix-run/react"),xn=require("@remix-run/server-runtime");function Dn(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var D=Dn(y),ve=typeof globalThis!="undefined"?globalThis:typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{};function Mn(){this.__data__=[],this.size=0}var jn=Mn;function Rn(e,t){return e===t||e!==e&&t!==t}var Ze=Rn,Ln=Ze;function Gn(e,t){for(var r=e.length;r--;)if(Ln(e[r][0],t))return r;return-1}var $e=Gn,Hn=$e,Vn=Array.prototype,Kn=Vn.splice;function Nn(e){var t=this.__data__,r=Hn(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():Kn.call(t,r,1),--this.size,!0}var Bn=Nn,Un=$e;function qn(e){var t=this.__data__,r=Un(t,e);return r<0?void 0:t[r][1]}var zn=qn,Wn=$e;function kn(e){return Wn(this.__data__,e)>-1}var Xn=kn,Yn=$e;function Zn(e,t){var r=this.__data__,n=Yn(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}var Jn=Zn,Qn=jn,ea=Bn,ta=zn,ra=Xn,na=Jn;function U(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}U.prototype.clear=Qn;U.prototype.delete=ea;U.prototype.get=ta;U.prototype.has=ra;U.prototype.set=na;var Se=U,aa=Se;function sa(){this.__data__=new aa,this.size=0}var oa=sa;function ia(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}var ua=ia;function ca(e){return this.__data__.get(e)}var fa=ca;function la(e){return this.__data__.has(e)}var da=la,va=typeof ve=="object"&&ve&&ve.Object===Object&&ve,pr=va,ha=pr,ya=typeof self=="object"&&self&&self.Object===Object&&self,pa=ha||ya||Function("return this")(),x=pa,ga=x,ma=ga.Symbol,Pe=ma,Ot=Pe,gr=Object.prototype,ba=gr.hasOwnProperty,_a=gr.toString,J=Ot?Ot.toStringTag:void 0;function $a(e){var t=ba.call(e,J),r=e[J];try{e[J]=void 0;var n=!0}catch{}var a=_a.call(e);return n&&(t?e[J]=r:delete e[J]),a}var Sa=$a,Pa=Object.prototype,Ea=Pa.toString;function Ia(e){return Ea.call(e)}var Aa=Ia,Ft=Pe,Oa=Sa,Fa=Aa,Ta="[object Null]",wa="[object Undefined]",Tt=Ft?Ft.toStringTag:void 0;function Ca(e){return e==null?e===void 0?wa:Ta:Tt&&Tt in Object(e)?Oa(e):Fa(e)}var se=Ca;function xa(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var oe=xa,Da=se,Ma=oe,ja="[object AsyncFunction]",Ra="[object Function]",La="[object GeneratorFunction]",Ga="[object Proxy]";function Ha(e){if(!Ma(e))return!1;var t=Da(e);return t==Ra||t==La||t==ja||t==Ga}var mr=Ha,Va=x,Ka=Va["__core-js_shared__"],Na=Ka,we=Na,wt=function(){var e=/[^.]+$/.exec(we&&we.keys&&we.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Ba(e){return!!wt&&wt in e}var Ua=Ba,qa=Function.prototype,za=qa.toString;function Wa(e){if(e!=null){try{return za.call(e)}catch{}try{return e+""}catch{}}return""}var br=Wa,ka=mr,Xa=Ua,Ya=oe,Za=br,Ja=/[\\^$.*+?()[\]{}|]/g,Qa=/^\[object .+?Constructor\]$/,es=Function.prototype,ts=Object.prototype,rs=es.toString,ns=ts.hasOwnProperty,as=RegExp("^"+rs.call(ns).replace(Ja,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function ss(e){if(!Ya(e)||Xa(e))return!1;var t=ka(e)?as:Qa;return t.test(Za(e))}var os=ss;function is(e,t){return e==null?void 0:e[t]}var us=is,cs=os,fs=us;function ls(e,t){var r=fs(e,t);return cs(r)?r:void 0}var H=ls,ds=H,vs=x,hs=ds(vs,"Map"),Je=hs,ys=H,ps=ys(Object,"create"),Ee=ps,Ct=Ee;function gs(){this.__data__=Ct?Ct(null):{},this.size=0}var ms=gs;function bs(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var _s=bs,$s=Ee,Ss="__lodash_hash_undefined__",Ps=Object.prototype,Es=Ps.hasOwnProperty;function Is(e){var t=this.__data__;if($s){var r=t[e];return r===Ss?void 0:r}return Es.call(t,e)?t[e]:void 0}var As=Is,Os=Ee,Fs=Object.prototype,Ts=Fs.hasOwnProperty;function ws(e){var t=this.__data__;return Os?t[e]!==void 0:Ts.call(t,e)}var Cs=ws,xs=Ee,Ds="__lodash_hash_undefined__";function Ms(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=xs&&t===void 0?Ds:t,this}var js=Ms,Rs=ms,Ls=_s,Gs=As,Hs=Cs,Vs=js;function q(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}q.prototype.clear=Rs;q.prototype.delete=Ls;q.prototype.get=Gs;q.prototype.has=Hs;q.prototype.set=Vs;var Ks=q,xt=Ks,Ns=Se,Bs=Je;function Us(){this.size=0,this.__data__={hash:new xt,map:new(Bs||Ns),string:new xt}}var qs=Us;function zs(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var Ws=zs,ks=Ws;function Xs(e,t){var r=e.__data__;return ks(t)?r[typeof t=="string"?"string":"hash"]:r.map}var Ie=Xs,Ys=Ie;function Zs(e){var t=Ys(this,e).delete(e);return this.size-=t?1:0,t}var Js=Zs,Qs=Ie;function eo(e){return Qs(this,e).get(e)}var to=eo,ro=Ie;function no(e){return ro(this,e).has(e)}var ao=no,so=Ie;function oo(e,t){var r=so(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}var io=oo,uo=qs,co=Js,fo=to,lo=ao,vo=io;function z(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}z.prototype.clear=uo;z.prototype.delete=co;z.prototype.get=fo;z.prototype.has=lo;z.prototype.set=vo;var Qe=z,ho=Se,yo=Je,po=Qe,go=200;function mo(e,t){var r=this.__data__;if(r instanceof ho){var n=r.__data__;if(!yo||n.length<go-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new po(n)}return r.set(e,t),this.size=r.size,this}var bo=mo,_o=Se,$o=oa,So=ua,Po=fa,Eo=da,Io=bo;function W(e){var t=this.__data__=new _o(e);this.size=t.size}W.prototype.clear=$o;W.prototype.delete=So;W.prototype.get=Po;W.prototype.has=Eo;W.prototype.set=Io;var _r=W,Ao="__lodash_hash_undefined__";function Oo(e){return this.__data__.set(e,Ao),this}var Fo=Oo;function To(e){return this.__data__.has(e)}var wo=To,Co=Qe,xo=Fo,Do=wo;function pe(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new Co;++t<r;)this.add(e[t])}pe.prototype.add=pe.prototype.push=xo;pe.prototype.has=Do;var $r=pe;function Mo(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}var jo=Mo;function Ro(e,t){return e.has(t)}var Sr=Ro,Lo=$r,Go=jo,Ho=Sr,Vo=1,Ko=2;function No(e,t,r,n,a,s){var o=r&Vo,i=e.length,c=t.length;if(i!=c&&!(o&&c>i))return!1;var u=s.get(e),f=s.get(t);if(u&&f)return u==t&&f==e;var l=-1,d=!0,v=r&Ko?new Lo:void 0;for(s.set(e,t),s.set(t,e);++l<i;){var p=e[l],m=t[l];if(n)var S=o?n(m,p,l,t,e,s):n(p,m,l,e,t,s);if(S!==void 0){if(S)continue;d=!1;break}if(v){if(!Go(t,function(b,$){if(!Ho(v,$)&&(p===b||a(p,b,r,n,s)))return v.push($)})){d=!1;break}}else if(!(p===m||a(p,m,r,n,s))){d=!1;break}}return s.delete(e),s.delete(t),d}var Pr=No,Bo=x,Uo=Bo.Uint8Array,qo=Uo;function zo(e){var t=-1,r=Array(e.size);return e.forEach(function(n,a){r[++t]=[a,n]}),r}var Wo=zo;function ko(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var et=ko,Dt=Pe,Mt=qo,Xo=Ze,Yo=Pr,Zo=Wo,Jo=et,Qo=1,ei=2,ti="[object Boolean]",ri="[object Date]",ni="[object Error]",ai="[object Map]",si="[object Number]",oi="[object RegExp]",ii="[object Set]",ui="[object String]",ci="[object Symbol]",fi="[object ArrayBuffer]",li="[object DataView]",jt=Dt?Dt.prototype:void 0,Ce=jt?jt.valueOf:void 0;function di(e,t,r,n,a,s,o){switch(r){case li:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case fi:return!(e.byteLength!=t.byteLength||!s(new Mt(e),new Mt(t)));case ti:case ri:case si:return Xo(+e,+t);case ni:return e.name==t.name&&e.message==t.message;case oi:case ui:return e==t+"";case ai:var i=Zo;case ii:var c=n&Qo;if(i||(i=Jo),e.size!=t.size&&!c)return!1;var u=o.get(e);if(u)return u==t;n|=ei,o.set(e,t);var f=Yo(i(e),i(t),n,a,s,o);return o.delete(e),f;case ci:if(Ce)return Ce.call(e)==Ce.call(t)}return!1}var vi=di;function hi(e,t){for(var r=-1,n=t.length,a=e.length;++r<n;)e[a+r]=t[r];return e}var Er=hi,yi=Array.isArray,M=yi,pi=Er,gi=M;function mi(e,t,r){var n=t(e);return gi(e)?n:pi(n,r(e))}var Ir=mi;function bi(e,t){for(var r=-1,n=e==null?0:e.length,a=0,s=[];++r<n;){var o=e[r];t(o,r,e)&&(s[a++]=o)}return s}var _i=bi;function $i(){return[]}var Ar=$i,Si=_i,Pi=Ar,Ei=Object.prototype,Ii=Ei.propertyIsEnumerable,Rt=Object.getOwnPropertySymbols,Ai=Rt?function(e){return e==null?[]:(e=Object(e),Si(Rt(e),function(t){return Ii.call(e,t)}))}:Pi,Or=Ai;function Oi(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var Fi=Oi;function Ti(e){return e!=null&&typeof e=="object"}var ie=Ti,wi=se,Ci=ie,xi="[object Arguments]";function Di(e){return Ci(e)&&wi(e)==xi}var Mi=Di,Lt=Mi,ji=ie,Fr=Object.prototype,Ri=Fr.hasOwnProperty,Li=Fr.propertyIsEnumerable,Gi=Lt(function(){return arguments}())?Lt:function(e){return ji(e)&&Ri.call(e,"callee")&&!Li.call(e,"callee")},Tr=Gi,ge={exports:{}};function Hi(){return!1}var Vi=Hi;(function(e,t){var r=x,n=Vi,a=t&&!t.nodeType&&t,s=a&&!0&&e&&!e.nodeType&&e,o=s&&s.exports===a,i=o?r.Buffer:void 0,c=i?i.isBuffer:void 0,u=c||n;e.exports=u})(ge,ge.exports);var Ki=9007199254740991,Ni=/^(?:0|[1-9]\d*)$/;function Bi(e,t){var r=typeof e;return t=t==null?Ki:t,!!t&&(r=="number"||r!="symbol"&&Ni.test(e))&&e>-1&&e%1==0&&e<t}var tt=Bi,Ui=9007199254740991;function qi(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Ui}var rt=qi,zi=se,Wi=rt,ki=ie,Xi="[object Arguments]",Yi="[object Array]",Zi="[object Boolean]",Ji="[object Date]",Qi="[object Error]",eu="[object Function]",tu="[object Map]",ru="[object Number]",nu="[object Object]",au="[object RegExp]",su="[object Set]",ou="[object String]",iu="[object WeakMap]",uu="[object ArrayBuffer]",cu="[object DataView]",fu="[object Float32Array]",lu="[object Float64Array]",du="[object Int8Array]",vu="[object Int16Array]",hu="[object Int32Array]",yu="[object Uint8Array]",pu="[object Uint8ClampedArray]",gu="[object Uint16Array]",mu="[object Uint32Array]",_={};_[fu]=_[lu]=_[du]=_[vu]=_[hu]=_[yu]=_[pu]=_[gu]=_[mu]=!0;_[Xi]=_[Yi]=_[uu]=_[Zi]=_[cu]=_[Ji]=_[Qi]=_[eu]=_[tu]=_[ru]=_[nu]=_[au]=_[su]=_[ou]=_[iu]=!1;function bu(e){return ki(e)&&Wi(e.length)&&!!_[zi(e)]}var _u=bu;function $u(e){return function(t){return e(t)}}var Su=$u,He={exports:{}};(function(e,t){var r=pr,n=t&&!t.nodeType&&t,a=n&&!0&&e&&!e.nodeType&&e,s=a&&a.exports===n,o=s&&r.process,i=function(){try{var c=a&&a.require&&a.require("util").types;return c||o&&o.binding&&o.binding("util")}catch{}}();e.exports=i})(He,He.exports);var Pu=_u,Eu=Su,Gt=He.exports,Ht=Gt&&Gt.isTypedArray,Iu=Ht?Eu(Ht):Pu,wr=Iu,Au=Fi,Ou=Tr,Fu=M,Tu=ge.exports,wu=tt,Cu=wr,xu=Object.prototype,Du=xu.hasOwnProperty;function Mu(e,t){var r=Fu(e),n=!r&&Ou(e),a=!r&&!n&&Tu(e),s=!r&&!n&&!a&&Cu(e),o=r||n||a||s,i=o?Au(e.length,String):[],c=i.length;for(var u in e)(t||Du.call(e,u))&&!(o&&(u=="length"||a&&(u=="offset"||u=="parent")||s&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||wu(u,c)))&&i.push(u);return i}var Cr=Mu,ju=Object.prototype;function Ru(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||ju;return e===r}var xr=Ru;function Lu(e,t){return function(r){return e(t(r))}}var Dr=Lu,Gu=Dr,Hu=Gu(Object.keys,Object),Vu=Hu,Ku=xr,Nu=Vu,Bu=Object.prototype,Uu=Bu.hasOwnProperty;function qu(e){if(!Ku(e))return Nu(e);var t=[];for(var r in Object(e))Uu.call(e,r)&&r!="constructor"&&t.push(r);return t}var zu=qu,Wu=mr,ku=rt;function Xu(e){return e!=null&&ku(e.length)&&!Wu(e)}var Mr=Xu,Yu=Cr,Zu=zu,Ju=Mr;function Qu(e){return Ju(e)?Yu(e):Zu(e)}var jr=Qu,ec=Ir,tc=Or,rc=jr;function nc(e){return ec(e,rc,tc)}var ac=nc,Vt=ac,sc=1,oc=Object.prototype,ic=oc.hasOwnProperty;function uc(e,t,r,n,a,s){var o=r&sc,i=Vt(e),c=i.length,u=Vt(t),f=u.length;if(c!=f&&!o)return!1;for(var l=c;l--;){var d=i[l];if(!(o?d in t:ic.call(t,d)))return!1}var v=s.get(e),p=s.get(t);if(v&&p)return v==t&&p==e;var m=!0;s.set(e,t),s.set(t,e);for(var S=o;++l<c;){d=i[l];var b=e[d],$=t[d];if(n)var A=o?n($,b,d,t,e,s):n(b,$,d,e,t,s);if(!(A===void 0?b===$||a(b,$,r,n,s):A)){m=!1;break}S||(S=d=="constructor")}if(m&&!S){var P=e.constructor,F=t.constructor;P!=F&&"constructor"in e&&"constructor"in t&&!(typeof P=="function"&&P instanceof P&&typeof F=="function"&&F instanceof F)&&(m=!1)}return s.delete(e),s.delete(t),m}var cc=uc,fc=H,lc=x,dc=fc(lc,"DataView"),vc=dc,hc=H,yc=x,pc=hc(yc,"Promise"),gc=pc,mc=H,bc=x,_c=mc(bc,"Set"),Rr=_c,$c=H,Sc=x,Pc=$c(Sc,"WeakMap"),Ec=Pc,Ve=vc,Ke=Je,Ne=gc,Be=Rr,Ue=Ec,Lr=se,k=br,Kt="[object Map]",Ic="[object Object]",Nt="[object Promise]",Bt="[object Set]",Ut="[object WeakMap]",qt="[object DataView]",Ac=k(Ve),Oc=k(Ke),Fc=k(Ne),Tc=k(Be),wc=k(Ue),R=Lr;(Ve&&R(new Ve(new ArrayBuffer(1)))!=qt||Ke&&R(new Ke)!=Kt||Ne&&R(Ne.resolve())!=Nt||Be&&R(new Be)!=Bt||Ue&&R(new Ue)!=Ut)&&(R=function(e){var t=Lr(e),r=t==Ic?e.constructor:void 0,n=r?k(r):"";if(n)switch(n){case Ac:return qt;case Oc:return Kt;case Fc:return Nt;case Tc:return Bt;case wc:return Ut}return t});var Cc=R,xe=_r,xc=Pr,Dc=vi,Mc=cc,zt=Cc,Wt=M,kt=ge.exports,jc=wr,Rc=1,Xt="[object Arguments]",Yt="[object Array]",he="[object Object]",Lc=Object.prototype,Zt=Lc.hasOwnProperty;function Gc(e,t,r,n,a,s){var o=Wt(e),i=Wt(t),c=o?Yt:zt(e),u=i?Yt:zt(t);c=c==Xt?he:c,u=u==Xt?he:u;var f=c==he,l=u==he,d=c==u;if(d&&kt(e)){if(!kt(t))return!1;o=!0,f=!1}if(d&&!f)return s||(s=new xe),o||jc(e)?xc(e,t,r,n,a,s):Dc(e,t,c,r,n,a,s);if(!(r&Rc)){var v=f&&Zt.call(e,"__wrapped__"),p=l&&Zt.call(t,"__wrapped__");if(v||p){var m=v?e.value():e,S=p?t.value():t;return s||(s=new xe),a(m,S,r,n,s)}}return d?(s||(s=new xe),Mc(e,t,r,n,a,s)):!1}var Hc=Gc,Vc=Hc,Jt=ie;function Gr(e,t,r,n,a){return e===t?!0:e==null||t==null||!Jt(e)&&!Jt(t)?e!==e&&t!==t:Vc(e,t,r,n,Gr,a)}var nt=Gr,Kc=_r,Nc=nt,Bc=1,Uc=2;function qc(e,t,r,n){var a=r.length,s=a,o=!n;if(e==null)return!s;for(e=Object(e);a--;){var i=r[a];if(o&&i[2]?i[1]!==e[i[0]]:!(i[0]in e))return!1}for(;++a<s;){i=r[a];var c=i[0],u=e[c],f=i[1];if(o&&i[2]){if(u===void 0&&!(c in e))return!1}else{var l=new Kc;if(n)var d=n(u,f,c,e,t,l);if(!(d===void 0?Nc(f,u,Bc|Uc,n,l):d))return!1}}return!0}var zc=qc,Wc=oe;function kc(e){return e===e&&!Wc(e)}var Hr=kc,Xc=Hr,Yc=jr;function Zc(e){for(var t=Yc(e),r=t.length;r--;){var n=t[r],a=e[n];t[r]=[n,a,Xc(a)]}return t}var Jc=Zc;function Qc(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}var Vr=Qc,ef=zc,tf=Jc,rf=Vr;function nf(e){var t=tf(e);return t.length==1&&t[0][2]?rf(t[0][0],t[0][1]):function(r){return r===e||ef(r,e,t)}}var af=nf,sf=se,of=ie,uf="[object Symbol]";function cf(e){return typeof e=="symbol"||of(e)&&sf(e)==uf}var at=cf,ff=M,lf=at,df=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,vf=/^\w*$/;function hf(e,t){if(ff(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||lf(e)?!0:vf.test(e)||!df.test(e)||t!=null&&e in Object(t)}var st=hf,Kr=Qe,yf="Expected a function";function ot(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(yf);var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],s=r.cache;if(s.has(a))return s.get(a);var o=e.apply(this,n);return r.cache=s.set(a,o)||s,o};return r.cache=new(ot.Cache||Kr),r}ot.Cache=Kr;var pf=ot,gf=pf,mf=500;function bf(e){var t=gf(e,function(n){return r.size===mf&&r.clear(),n}),r=t.cache;return t}var _f=bf,$f=_f,Sf=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pf=/\\(\\)?/g,Ef=$f(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(Sf,function(r,n,a,s){t.push(a?s.replace(Pf,"$1"):n||r)}),t}),If=Ef;function Af(e,t){for(var r=-1,n=e==null?0:e.length,a=Array(n);++r<n;)a[r]=t(e[r],r,e);return a}var Nr=Af,Qt=Pe,Of=Nr,Ff=M,Tf=at,wf=1/0,er=Qt?Qt.prototype:void 0,tr=er?er.toString:void 0;function Br(e){if(typeof e=="string")return e;if(Ff(e))return Of(e,Br)+"";if(Tf(e))return tr?tr.call(e):"";var t=e+"";return t=="0"&&1/e==-wf?"-0":t}var Cf=Br,xf=Cf;function Df(e){return e==null?"":xf(e)}var Mf=Df,jf=M,Rf=st,Lf=If,Gf=Mf;function Hf(e,t){return jf(e)?e:Rf(e,t)?[e]:Lf(Gf(e))}var Ae=Hf,Vf=at,Kf=1/0;function Nf(e){if(typeof e=="string"||Vf(e))return e;var t=e+"";return t=="0"&&1/e==-Kf?"-0":t}var ue=Nf,Bf=Ae,Uf=ue;function qf(e,t){t=Bf(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[Uf(t[r++])];return r&&r==n?e:void 0}var it=qf,zf=it;function Wf(e,t,r){var n=e==null?void 0:zf(e,t);return n===void 0?r:n}var qe=Wf;function kf(e,t){return e!=null&&t in Object(e)}var Xf=kf,Yf=Ae,Zf=Tr,Jf=M,Qf=tt,el=rt,tl=ue;function rl(e,t,r){t=Yf(t,e);for(var n=-1,a=t.length,s=!1;++n<a;){var o=tl(t[n]);if(!(s=e!=null&&r(e,o)))break;e=e[o]}return s||++n!=a?s:(a=e==null?0:e.length,!!a&&el(a)&&Qf(o,a)&&(Jf(e)||Zf(e)))}var nl=rl,al=Xf,sl=nl;function ol(e,t){return e!=null&&sl(e,t,al)}var il=ol,ul=nt,cl=qe,fl=il,ll=st,dl=Hr,vl=Vr,hl=ue,yl=1,pl=2;function gl(e,t){return ll(e)&&dl(t)?vl(hl(e),t):function(r){var n=cl(r,e);return n===void 0&&n===t?fl(r,e):ul(t,n,yl|pl)}}var ml=gl;function bl(e){return e}var _l=bl;function $l(e){return function(t){return t==null?void 0:t[e]}}var Sl=$l,Pl=it;function El(e){return function(t){return Pl(t,e)}}var Il=El,Al=Sl,Ol=Il,Fl=st,Tl=ue;function wl(e){return Fl(e)?Al(Tl(e)):Ol(e)}var Cl=wl,xl=af,Dl=ml,Ml=_l,jl=M,Rl=Cl;function Ll(e){return typeof e=="function"?e:e==null?Ml:typeof e=="object"?jl(e)?Dl(e[0],e[1]):xl(e):Rl(e)}var Ur=Ll,Gl="Expected a function";function Hl(e){if(typeof e!="function")throw new TypeError(Gl);return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}var Vl=Hl,Kl=H,Nl=function(){try{var e=Kl(Object,"defineProperty");return e({},"",{}),e}catch{}}(),Bl=Nl,rr=Bl;function Ul(e,t,r){t=="__proto__"&&rr?rr(e,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):e[t]=r}var ql=Ul,zl=ql,Wl=Ze,kl=Object.prototype,Xl=kl.hasOwnProperty;function Yl(e,t,r){var n=e[t];(!(Xl.call(e,t)&&Wl(n,r))||r===void 0&&!(t in e))&&zl(e,t,r)}var Zl=Yl,Jl=Zl,Ql=Ae,ed=tt,nr=oe,td=ue;function rd(e,t,r,n){if(!nr(e))return e;t=Ql(t,e);for(var a=-1,s=t.length,o=s-1,i=e;i!=null&&++a<s;){var c=td(t[a]),u=r;if(c==="__proto__"||c==="constructor"||c==="prototype")return e;if(a!=o){var f=i[c];u=n?n(f,c,i):void 0,u===void 0&&(u=nr(f)?f:ed(t[a+1])?[]:{})}Jl(i,c,u),i=i[c]}return e}var qr=rd,nd=it,ad=qr,sd=Ae;function od(e,t,r){for(var n=-1,a=t.length,s={};++n<a;){var o=t[n],i=nd(e,o);r(i,o)&&ad(s,sd(o,e),i)}return s}var id=od,ud=Dr,cd=ud(Object.getPrototypeOf,Object),fd=cd,ld=Er,dd=fd,vd=Or,hd=Ar,yd=Object.getOwnPropertySymbols,pd=yd?function(e){for(var t=[];e;)ld(t,vd(e)),e=dd(e);return t}:hd,gd=pd;function md(e){var t=[];if(e!=null)for(var r in Object(e))t.push(r);return t}var bd=md,_d=oe,$d=xr,Sd=bd,Pd=Object.prototype,Ed=Pd.hasOwnProperty;function Id(e){if(!_d(e))return Sd(e);var t=$d(e),r=[];for(var n in e)n=="constructor"&&(t||!Ed.call(e,n))||r.push(n);return r}var Ad=Id,Od=Cr,Fd=Ad,Td=Mr;function wd(e){return Td(e)?Od(e,!0):Fd(e)}var Cd=wd,xd=Ir,Dd=gd,Md=Cd;function jd(e){return xd(e,Md,Dd)}var Rd=jd,Ld=Nr,Gd=Ur,Hd=id,Vd=Rd;function Kd(e,t){if(e==null)return{};var r=Ld(Vd(e),function(n){return[n]});return t=Gd(t),Hd(e,r,function(n,a){return t(n,a[0])})}var Nd=Kd,Bd=Ur,Ud=Vl,qd=Nd;function zd(e,t){return qd(e,Ud(Bd(t)))}var Wd=zd;const kd=(e="on",t)=>{if(Array.isArray(t))return t.some(r=>r===!0||r===e);if(typeof t=="boolean")return t;if(typeof t=="string")return t===e},Xd=(e="on",t)=>{if(typeof t=="string")return t===e},Yd={initial:"onBlur",whenTouched:"onChange",whenSubmitted:"onChange"},Zd=({clearError:e,validate:t,defaultValue:r,touched:n,setTouched:a,hasBeenSubmitted:s,validationBehavior:o,name:i})=>{const c=C(C({},Yd),o);return(u={})=>{const f=s?c.whenSubmitted:n?c.whenTouched:c.initial,l=K(C({},u),{onChange:(...d)=>{var v;return f==="onChange"?t():e(),(v=u==null?void 0:u.onChange)==null?void 0:v.call(u,...d)},onBlur:(...d)=>{var v;return f==="onBlur"&&t(),a(!0),(v=u==null?void 0:u.onBlur)==null?void 0:v.call(u,...d)},name:i});return u.type==="checkbox"?l.defaultChecked=kd(u.value,r):u.type==="radio"?l.defaultChecked=Xd(u.value,r):u.value===void 0&&(l.defaultValue=r),Wd(l,d=>d===void 0)}};var Jd="Invariant failed";function Q(e,t){if(!e)throw new Error(Jd)}const ye="__rvfInternalFormId",Qd="__rvfInternalFormDefaults",zr=e=>`${Qd}_${e}`,Wr=y.createContext(null),ut=e=>({hydrateTo:()=>e,map:t=>ut(t(e))}),ct=()=>({hydrateTo:e=>e,map:()=>ct()}),ev=(e,t)=>t?ct():ut(e),ee={serverData:ut,hydratedData:ct,from:ev},ar=e=>{let t;const r=new Set,n=(c,u)=>{const f=typeof c=="function"?c(t):c;if(f!==t){const l=t;t=u?f:Object.assign({},t,f),r.forEach(d=>d(t,l))}},a=()=>t,i={setState:n,getState:a,subscribe:c=>(r.add(c),()=>r.delete(c)),destroy:()=>r.clear()};return t=e(n,a,i),i},tv=e=>e?ar(e):ar;var kr={exports:{}},Xr={},Yr={exports:{}},Zr={};/**
2
+ * @license React
3
+ * use-sync-external-store-shim.production.min.js
4
+ *
5
+ * Copyright (c) Facebook, Inc. and its affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var N=D.default;function rv(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var nv=typeof Object.is=="function"?Object.is:rv,av=N.useState,sv=N.useEffect,ov=N.useLayoutEffect,iv=N.useDebugValue;function uv(e,t){var r=t(),n=av({inst:{value:r,getSnapshot:t}}),a=n[0].inst,s=n[1];return ov(function(){a.value=r,a.getSnapshot=t,De(a)&&s({inst:a})},[e,r,t]),sv(function(){return De(a)&&s({inst:a}),e(function(){De(a)&&s({inst:a})})},[e]),iv(r),r}function De(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!nv(e,r)}catch{return!0}}function cv(e,t){return t()}var fv=typeof window=="undefined"||typeof window.document=="undefined"||typeof window.document.createElement=="undefined"?cv:uv;Zr.useSyncExternalStore=N.useSyncExternalStore!==void 0?N.useSyncExternalStore:fv;Yr.exports=Zr;/**
10
+ * @license React
11
+ * use-sync-external-store-shim/with-selector.production.min.js
12
+ *
13
+ * Copyright (c) Facebook, Inc. and its affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */var Oe=D.default,lv=Yr.exports;function dv(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var vv=typeof Object.is=="function"?Object.is:dv,hv=lv.useSyncExternalStore,yv=Oe.useRef,pv=Oe.useEffect,gv=Oe.useMemo,mv=Oe.useDebugValue;Xr.useSyncExternalStoreWithSelector=function(e,t,r,n,a){var s=yv(null);if(s.current===null){var o={hasValue:!1,value:null};s.current=o}else o=s.current;s=gv(function(){function c(v){if(!u){if(u=!0,f=v,v=n(v),a!==void 0&&o.hasValue){var p=o.value;if(a(p,v))return l=p}return l=v}if(p=l,vv(f,v))return p;var m=n(v);return a!==void 0&&a(p,m)?p:(f=v,l=m)}var u=!1,f,l,d=r===void 0?null:r;return[function(){return c(t())},d===null?void 0:function(){return c(d())}]},[t,r,n,a]);var i=hv(e,s[0],s[1]);return pv(function(){o.hasValue=!0,o.value=i},[i]),mv(i),i};kr.exports=Xr;function bv(e,t=e.getState,r){const n=kr.exports.useSyncExternalStoreWithSelector(e.subscribe,e.getState,e.getServerState||e.getState,t,r);return y.useDebugValue(n),n}const sr=e=>{const t=typeof e=="function"?tv(e):e,r=(n,a)=>bv(t,n,a);return Object.assign(r,t),r},_v=e=>e?sr(e):sr;var Jr=_v;function O(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];throw Error("[Immer] minified error nr: "+e+(r.length?" "+r.map(function(a){return"'"+a+"'"}).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function B(e){return!!e&&!!e[E]}function G(e){return!!e&&(function(t){if(!t||typeof t!="object")return!1;var r=Object.getPrototypeOf(t);if(r===null)return!0;var n=Object.hasOwnProperty.call(r,"constructor")&&r.constructor;return n===Object||typeof n=="function"&&Function.toString.call(n)===Fv}(e)||Array.isArray(e)||!!e[vr]||!!e.constructor[vr]||ft(e)||lt(e))}function ne(e,t,r){r===void 0&&(r=!1),X(e)===0?(r?Object.keys:pt)(e).forEach(function(n){r&&typeof n=="symbol"||t(n,e[n],e)}):e.forEach(function(n,a){return t(a,n,e)})}function X(e){var t=e[E];return t?t.i>3?t.i-4:t.i:Array.isArray(e)?1:ft(e)?2:lt(e)?3:0}function ze(e,t){return X(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function $v(e,t){return X(e)===2?e.get(t):e[t]}function Qr(e,t,r){var n=X(e);n===2?e.set(t,r):n===3?(e.delete(t),e.add(r)):e[t]=r}function Sv(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function ft(e){return Av&&e instanceof Map}function lt(e){return Ov&&e instanceof Set}function L(e){return e.o||e.t}function dt(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Tv(e);delete t[E];for(var r=pt(t),n=0;n<r.length;n++){var a=r[n],s=t[a];s.writable===!1&&(s.writable=!0,s.configurable=!0),(s.get||s.set)&&(t[a]={configurable:!0,writable:!0,enumerable:s.enumerable,value:e[a]})}return Object.create(Object.getPrototypeOf(e),t)}function vt(e,t){return t===void 0&&(t=!1),ht(e)||B(e)||!G(e)||(X(e)>1&&(e.set=e.add=e.clear=e.delete=Pv),Object.freeze(e),t&&ne(e,function(r,n){return vt(n,!0)},!0)),e}function Pv(){O(2)}function ht(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function w(e){var t=wv[e];return t||O(18,e),t}function or(){return ae}function Me(e,t){t&&(w("Patches"),e.u=[],e.s=[],e.v=t)}function me(e){We(e),e.p.forEach(Ev),e.p=null}function We(e){e===ae&&(ae=e.l)}function ir(e){return ae={p:[],l:ae,h:e,m:!0,_:0}}function Ev(e){var t=e[E];t.i===0||t.i===1?t.j():t.O=!0}function je(e,t){t._=t.p.length;var r=t.p[0],n=e!==void 0&&e!==r;return t.h.g||w("ES5").S(t,e,n),n?(r[E].P&&(me(t),O(4)),G(e)&&(e=be(t,e),t.l||_e(t,e)),t.u&&w("Patches").M(r[E].t,e,t.u,t.s)):e=be(t,r,[]),me(t),t.u&&t.v(t.u,t.s),e!==en?e:void 0}function be(e,t,r){if(ht(t))return t;var n=t[E];if(!n)return ne(t,function(s,o){return ur(e,n,t,s,o,r)},!0),t;if(n.A!==e)return t;if(!n.P)return _e(e,n.t,!0),n.t;if(!n.I){n.I=!0,n.A._--;var a=n.i===4||n.i===5?n.o=dt(n.k):n.o;ne(n.i===3?new Set(a):a,function(s,o){return ur(e,n,a,s,o,r)}),_e(e,a,!1),r&&e.u&&w("Patches").R(n,r,e.u,e.s)}return n.o}function ur(e,t,r,n,a,s){if(B(a)){var o=be(e,a,s&&t&&t.i!==3&&!ze(t.D,n)?s.concat(n):void 0);if(Qr(r,n,o),!B(o))return;e.m=!1}if(G(a)&&!ht(a)){if(!e.h.F&&e._<1)return;be(e,a),t&&t.A.l||_e(e,a)}}function _e(e,t,r){r===void 0&&(r=!1),e.h.F&&e.m&&vt(t,r)}function Re(e,t){var r=e[E];return(r?L(r):e)[t]}function cr(e,t){if(t in e)for(var r=Object.getPrototypeOf(e);r;){var n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Object.getPrototypeOf(r)}}function ke(e){e.P||(e.P=!0,e.l&&ke(e.l))}function Le(e){e.o||(e.o=dt(e.t))}function Xe(e,t,r){var n=ft(t)?w("MapSet").N(t,r):lt(t)?w("MapSet").T(t,r):e.g?function(a,s){var o=Array.isArray(a),i={i:o?1:0,A:s?s.A:or(),P:!1,I:!1,D:{},l:s,t:a,k:null,o:null,j:null,C:!1},c=i,u=Ye;o&&(c=[i],u=te);var f=Proxy.revocable(c,u),l=f.revoke,d=f.proxy;return i.k=d,i.j=l,d}(t,r):w("ES5").J(t,r);return(r?r.A:or()).p.push(n),n}function Iv(e){return B(e)||O(22,e),function t(r){if(!G(r))return r;var n,a=r[E],s=X(r);if(a){if(!a.P&&(a.i<4||!w("ES5").K(a)))return a.t;a.I=!0,n=fr(r,s),a.I=!1}else n=fr(r,s);return ne(n,function(o,i){a&&$v(a.t,o)===i||Qr(n,o,t(i))}),s===3?new Set(n):n}(e)}function fr(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return dt(e)}var lr,ae,yt=typeof Symbol!="undefined"&&typeof Symbol("x")=="symbol",Av=typeof Map!="undefined",Ov=typeof Set!="undefined",dr=typeof Proxy!="undefined"&&Proxy.revocable!==void 0&&typeof Reflect!="undefined",en=yt?Symbol.for("immer-nothing"):((lr={})["immer-nothing"]=!0,lr),vr=yt?Symbol.for("immer-draftable"):"__$immer_draftable",E=yt?Symbol.for("immer-state"):"__$immer_state",Fv=""+Object.prototype.constructor,pt=typeof Reflect!="undefined"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,Tv=Object.getOwnPropertyDescriptors||function(e){var t={};return pt(e).forEach(function(r){t[r]=Object.getOwnPropertyDescriptor(e,r)}),t},wv={},Ye={get:function(e,t){if(t===E)return e;var r=L(e);if(!ze(r,t))return function(a,s,o){var i,c=cr(s,o);return c?"value"in c?c.value:(i=c.get)===null||i===void 0?void 0:i.call(a.k):void 0}(e,r,t);var n=r[t];return e.I||!G(n)?n:n===Re(e.t,t)?(Le(e),e.o[t]=Xe(e.A.h,n,e)):n},has:function(e,t){return t in L(e)},ownKeys:function(e){return Reflect.ownKeys(L(e))},set:function(e,t,r){var n=cr(L(e),t);if(n!=null&&n.set)return n.set.call(e.k,r),!0;if(!e.P){var a=Re(L(e),t),s=a==null?void 0:a[E];if(s&&s.t===r)return e.o[t]=r,e.D[t]=!1,!0;if(Sv(r,a)&&(r!==void 0||ze(e.t,t)))return!0;Le(e),ke(e)}return e.o[t]===r&&typeof r!="number"&&(r!==void 0||t in e.o)||(e.o[t]=r,e.D[t]=!0,!0)},deleteProperty:function(e,t){return Re(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,Le(e),ke(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var r=L(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty:function(){O(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){O(12)}},te={};ne(Ye,function(e,t){te[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),te.deleteProperty=function(e,t){return te.set.call(this,e,t,void 0)},te.set=function(e,t,r){return Ye.set.call(this,e[0],t,r,e[0])};var Cv=function(){function e(r){var n=this;this.g=dr,this.F=!0,this.produce=function(a,s,o){if(typeof a=="function"&&typeof s!="function"){var i=s;s=a;var c=n;return function(m){var S=this;m===void 0&&(m=i);for(var b=arguments.length,$=Array(b>1?b-1:0),A=1;A<b;A++)$[A-1]=arguments[A];return c.produce(m,function(P){var F;return(F=s).call.apply(F,[S,P].concat($))})}}var u;if(typeof s!="function"&&O(6),o!==void 0&&typeof o!="function"&&O(7),G(a)){var f=ir(n),l=Xe(n,a,void 0),d=!0;try{u=s(l),d=!1}finally{d?me(f):We(f)}return typeof Promise!="undefined"&&u instanceof Promise?u.then(function(m){return Me(f,o),je(m,f)},function(m){throw me(f),m}):(Me(f,o),je(u,f))}if(!a||typeof a!="object"){if((u=s(a))===void 0&&(u=a),u===en&&(u=void 0),n.F&&vt(u,!0),o){var v=[],p=[];w("Patches").M(a,u,v,p),o(v,p)}return u}O(21,a)},this.produceWithPatches=function(a,s){if(typeof a=="function")return function(u){for(var f=arguments.length,l=Array(f>1?f-1:0),d=1;d<f;d++)l[d-1]=arguments[d];return n.produceWithPatches(u,function(v){return a.apply(void 0,[v].concat(l))})};var o,i,c=n.produce(a,s,function(u,f){o=u,i=f});return typeof Promise!="undefined"&&c instanceof Promise?c.then(function(u){return[u,o,i]}):[c,o,i]},typeof(r==null?void 0:r.useProxies)=="boolean"&&this.setUseProxies(r.useProxies),typeof(r==null?void 0:r.autoFreeze)=="boolean"&&this.setAutoFreeze(r.autoFreeze)}var t=e.prototype;return t.createDraft=function(r){G(r)||O(8),B(r)&&(r=Iv(r));var n=ir(this),a=Xe(this,r,void 0);return a[E].C=!0,We(n),a},t.finishDraft=function(r,n){var a=r&&r[E],s=a.A;return Me(s,n),je(void 0,s)},t.setAutoFreeze=function(r){this.F=r},t.setUseProxies=function(r){r&&!dr&&O(20),this.g=r},t.applyPatches=function(r,n){var a;for(a=n.length-1;a>=0;a--){var s=n[a];if(s.path.length===0&&s.op==="replace"){r=s.value;break}}a>-1&&(n=n.slice(a+1));var o=w("Patches").$;return B(r)?o(r,n):this.produce(r,function(i){return o(i,n)})},e}(),I=new Cv,xv=I.produce;I.produceWithPatches.bind(I);I.setAutoFreeze.bind(I);I.setUseProxies.bind(I);I.applyPatches.bind(I);I.createDraft.bind(I);I.finishDraft.bind(I);const Dv=e=>(t,r,n)=>(n.setState=(a,s,...o)=>{const i=typeof a=="function"?xv(a):a;return t(i,s,...o)},e(n.setState,r,n)),tn=Dv,rn=e=>{const t=new Map,r=n=>{if(t.has(n))return t.get(n);const a=e(n);return t.set(n,a),a};return r.remove=n=>{t.delete(n)},r},Y=rn(()=>Jr()(tn((e,t,r)=>({fields:{},register:n=>e(a=>{a.fields[n]?a.fields[n].refCount++:a.fields[n]={refCount:1,value:void 0,hydrated:!1,valueUpdatePromise:void 0,resolveValueUpdate:void 0}}),unregister:n=>e(a=>{const s=a.fields[n];!s||(s.refCount--,s.refCount===0&&delete a.fields[n])}),setValue:(n,a)=>e(s=>{const o=s.fields[n];if(!o)return;o.value=a;const i=new Promise(c=>{o.resolveValueUpdate=c});o.valueUpdatePromise=i}),hydrateWithDefault:(n,a)=>e(s=>{const o=s.fields[n];!o||(o.value=a,o.defaultValue=a,o.hydrated=!0)}),awaitValueUpdate:async n=>{var a;await((a=t().fields[n])==null?void 0:a.valueUpdatePromise)},reset:()=>e(n=>{Object.values(n.fields).forEach(a=>{!a||(a.value=a.defaultValue)})})})))),gt=rn(e=>Jr()(tn((t,r,n)=>({isHydrated:!1,isSubmitting:!1,hasBeenSubmitted:!1,touchedFields:{},fieldErrors:{},formElement:null,isValid:()=>Object.keys(r().fieldErrors).length===0,startSubmit:()=>t(a=>{a.isSubmitting=!0,a.hasBeenSubmitted=!0}),endSubmit:()=>t(a=>{a.isSubmitting=!1}),setTouched:(a,s)=>t(o=>{o.touchedFields[a]=s}),setFieldError:(a,s)=>t(o=>{o.fieldErrors[a]=s}),setFieldErrors:a=>t(s=>{s.fieldErrors=a}),clearFieldError:a=>t(s=>{delete s.fieldErrors[a]}),reset:()=>t(a=>{a.fieldErrors={},a.touchedFields={},a.hasBeenSubmitted=!1}),syncFormProps:a=>t(s=>{s.formProps=a}),setHydrated:()=>t(a=>{a.isHydrated=!0}),setFormElement:a=>{r().formElement!==a&&t(s=>{s.formElement=a})},validateField:async a=>{var c,u,f;const s=r().formElement;Q(s);const o=(c=r().formProps)==null?void 0:c.validator;Q(o),await((f=(u=Y(e).getState()).awaitValueUpdate)==null?void 0:f.call(u,a));const{error:i}=await o.validateField(new FormData(s),a);return i?(r().setFieldError(a,i),i):(r().clearFieldError(a),null)},validate:async()=>{var i;const a=r().formElement;Q(a);const s=(i=r().formProps)==null?void 0:i.validator;Q(s);const{error:o}=await s.validate(new FormData(a));o&&r().setFieldErrors(o.fieldErrors)},resetFormElement:()=>{var a;return(a=r().formElement)==null?void 0:a.reset()}})))),g=(e,t)=>gt(e)(t),Mv=(e,t)=>Y(e)(t),j=(e,t)=>{const r=y.useContext(Wr);if(e)return{formId:e};if(r)return r;throw new Error(`Unable to determine form for ${t}. Please use it inside a ValidatedForm or pass a 'formId'.`)};function mt({fetcher:e,subaction:t,formId:r}){var a;const n=re.useActionData();return e?(a=e.data)!=null&&a.fieldErrors?e.data:null:n!=null&&n.fieldErrors?typeof r=="string"&&n.formId?n.formId===r?n:null:!t&&!n.subaction||n.subaction===t?n:null:null}const nn=e=>{const t=mt(e),r=g(e.formId,n=>n.isHydrated);return ee.from(t==null?void 0:t.fieldErrors,r)},an=({formId:e})=>{const t=re.useMatches();if(typeof e=="string"){const r=zr(e),n=t.reverse().find(a=>a.data&&r in a.data);return n==null?void 0:n.data[r]}return null},sn=e=>{const{formId:t,defaultValuesProp:r}=e,n=g(t,o=>o.isHydrated),a=mt(e),s=an(e);return n?ee.hydratedData():a!=null&&a.repopulateFields?(Q(typeof a.repopulateFields=="object"),ee.serverData(a.repopulateFields)):r?ee.serverData(r):ee.serverData(s)},jv=({fetcher:e})=>{const t=re.useTransition();return e?e.state==="submitting":!!t.submission},Rv=(e,{formId:t})=>{const r=g(t,s=>s.touchedFields[e]),n=g(t,s=>s.setTouched),a=y.useCallback(s=>n(e,s),[e,n]);return[r,a]},Lv=(e,t)=>{const r=nn(t),n=g(t.formId,a=>a.fieldErrors[e]);return r.map(a=>a==null?void 0:a[e]).hydrateTo(n)},on=e=>{const{formId:t}=e;return g(t,r=>r.clearFieldError)},un=(e,t)=>{const r=sn(t),n=hn(t.formId);return r.map(a=>qe(a,e)).hydrateTo(qe(n,e))},cn=e=>g(e,t=>t.isSubmitting),fn=e=>g(e,t=>t.isValid()),ln=e=>g(e,t=>t.hasBeenSubmitted),dn=e=>g(e,t=>t.validateField),Gv=e=>g(e,t=>t.validate),Hv=()=>()=>{},vn=e=>g(e,t=>{var r,n;return(n=(r=t.formProps)==null?void 0:r.registerReceiveFocus)!=null?n:Hv}),Vv={},hn=e=>g(e,t=>{var r,n;return(n=(r=t.formProps)==null?void 0:r.defaultValues)!=null?n:Vv}),Kv=({formId:e})=>g(e,t=>t.setTouched),Nv=e=>g(e,t=>t.touchedFields),Bv=e=>g(e,t=>t.fieldErrors),yn=e=>g(e,t=>t.setFieldErrors),Uv=e=>g(e,t=>t.resetFormElement),qv=e=>g(e,t=>{var r;return(r=t.formProps)==null?void 0:r.action}),zv=e=>g(e,t=>{var r;return(r=t.formProps)==null?void 0:r.subaction}),Wv=(e,t)=>{const r=Y(e.formId),n=r(u=>{var f;return(f=u.fields[t])==null?void 0:f.value}),s=gt(e.formId)(u=>u.isHydrated),o=un(t,e),i=r(u=>{var f,l;return(l=(f=u.fields[t])==null?void 0:f.hydrated)!=null?l:!1}),c=r(u=>u.hydrateWithDefault);return y.useEffect(()=>{s&&!i&&c(t,o)},[o,t,c,i,s]),i?n:o},kv=(e,t)=>{const r=Y(e.formId),n=r(u=>{var f;return(f=u.fields[t])==null?void 0:f.resolveValueUpdate});y.useEffect(()=>{n==null||n()},[n]);const a=r(u=>u.register),s=r(u=>u.unregister);y.useEffect(()=>(a(t),()=>s(t)),[e.formId,t,a,s]);const o=r(u=>u.setValue),i=y.useCallback(u=>o(t,u),[t,o]);return[Wv(e,t),i]},Xv=e=>Y(e)(r=>r.setValue),pn=e=>{const t=j(e,"useIsSubmitting");return cn(t.formId)},gn=e=>{const t=j(e,"useIsValid");return fn(t.formId)},Yv=(e,t)=>{const{formId:r,handleReceiveFocus:n}=t!=null?t:{},a=j(r,"useField"),s=un(e,a),[o,i]=Rv(e,a),c=Lv(e,a),u=on(a),f=ln(a.formId),l=dn(a.formId),d=vn(a.formId);return y.useEffect(()=>{if(n)return d(e,n)},[n,e,d]),y.useMemo(()=>{const p={error:c,clearError:()=>u(e),validate:()=>{l(e)},defaultValue:s,touched:o,setTouched:i},m=Zd(K(C({},p),{name:e,hasBeenSubmitted:f,validationBehavior:t==null?void 0:t.validationBehavior}));return K(C({},p),{getInputProps:m})},[c,u,s,o,i,e,f,t==null?void 0:t.validationBehavior,l])},Zv=(e,t)=>{const r=j(t,"useControlField"),[n,a]=kv(r,e);return[n,a]},Jv=e=>{const t=j(e,"useControlField");return Xv(t.formId)};function Qv(e,t,r){return xn.json({fieldErrors:e.fieldErrors,subaction:e.subaction,repopulateFields:t,formId:e.formId},C({status:422},r))}const eh=(e,t)=>({[zr(e)]:t});function th(e,t,r,n){for(var a=e.length,s=r+(n?1:-1);n?s--:++s<a;)if(t(e[s],s,e))return s;return-1}var rh=th;function nh(e){return e!==e}var ah=nh;function sh(e,t,r){for(var n=r-1,a=e.length;++n<a;)if(e[n]===t)return n;return-1}var oh=sh,ih=rh,uh=ah,ch=oh;function fh(e,t,r){return t===t?ch(e,t,r):ih(e,uh,r)}var lh=fh,dh=lh;function vh(e,t){var r=e==null?0:e.length;return!!r&&dh(e,t,0)>-1}var hh=vh;function yh(e,t,r){for(var n=-1,a=e==null?0:e.length;++n<a;)if(r(t,e[n]))return!0;return!1}var ph=yh;function gh(){}var mh=gh,Ge=Rr,bh=mh,_h=et,$h=1/0,Sh=Ge&&1/_h(new Ge([,-0]))[1]==$h?function(e){return new Ge(e)}:bh,Ph=Sh,Eh=$r,Ih=hh,Ah=ph,Oh=Sr,Fh=Ph,Th=et,wh=200;function Ch(e,t,r){var n=-1,a=Ih,s=e.length,o=!0,i=[],c=i;if(r)o=!1,a=Ah;else if(s>=wh){var u=t?null:Fh(e);if(u)return Th(u);o=!1,a=Oh,c=new Eh}else c=t?[]:i;e:for(;++n<s;){var f=e[n],l=t?t(f):f;if(f=r||f!==0?f:0,o&&l===l){for(var d=c.length;d--;)if(c[d]===l)continue e;t&&c.push(l),i.push(f)}else a(c,l,r)||(c!==i&&c.push(l),i.push(f))}return i}var xh=Ch,Dh=xh;function Mh(e){return e&&e.length?Dh(e):[]}var jh=Mh;class mn{constructor(){this.dict=new Map,this.add=(t,r)=>{this.dict.has(t)?this.dict.get(t).push(r):this.dict.set(t,[r])},this.delete=t=>{this.dict.delete(t)},this.remove=(t,r)=>{if(!this.dict.has(t))return;const n=this.dict.get(t),a=n.indexOf(r);a!==-1&&n.splice(a,1),n.length===0&&this.dict.delete(t)},this.getAll=t=>{var r;return(r=this.dict.get(t))!=null?r:[]},this.entries=()=>this.dict.entries(),this.values=()=>this.dict.values(),this.has=t=>this.dict.has(t)}}const Rh=()=>{const e=y.useRef(null);return y.useCallback(()=>(e.current||(e.current=new mn),e.current),[])},Lh=e=>{gt.remove(e),Y.remove(e)};function bn(e,t){const r=y.useRef(!1);y.useEffect(()=>{e&&(r.current=!0),!e&&r.current&&(r.current=!1,t())})}var Gh=nt;function Hh(e,t){return Gh(e,t)}var Vh=Hh;const Kh=e=>t=>{e.filter(Boolean).forEach(r=>{typeof r=="function"?r(t):r!=null&&(r.current=t)})},Nh=typeof window!="undefined"?y.useLayoutEffect:y.useEffect,Bh=e=>{const t=y.useRef(e),r=t.current===e||Vh(t.current,e);return y.useEffect(()=>{r||(t.current=e)}),r?t.current:e},Uh=e=>new FormData(e);function qh(e){return e!==null}const zh=(e,t,r)=>{var s;const n=[...r.elements].map(o=>{const i=o instanceof RadioNodeList?o[0]:o;return i instanceof HTMLInputElement?i.name:null}).filter(qh).filter(o=>o in e),a=jh(n);for(const o of a){if(t.has(o)){t.getAll(o).forEach(c=>{c()});break}const i=r.elements.namedItem(o);if(!!i){if(i instanceof RadioNodeList){const c=(s=[...i].filter(u=>u instanceof HTMLInputElement).find(u=>u.value===i.value))!=null?s:i[0];if(c&&c instanceof HTMLInputElement){c.focus();break}}if(i instanceof HTMLInputElement){if(i.type==="hidden")continue;i.focus();break}}}},Wh=e=>{const[t]=y.useState(()=>Symbol("remix-validated-form-id"));return e!=null?e:t},kh=({resetAfterSubmit:e,formRef:t})=>{const r=pn(),n=gn();return bn(r,()=>{var a;n&&e&&((a=t.current)==null||a.reset())}),null};function Xh(e){let t=!1;return new Proxy(e,{get:(r,n)=>n==="preventDefault"?()=>{t=!0}:n==="defaultPrevented"?t:r[n]})}function Yh(m){var S=m,{validator:e,onSubmit:t,children:r,fetcher:n,action:a,defaultValues:s,formRef:o,onReset:i,subaction:c,resetAfterSubmit:u=!1,disableFocusOnError:f,method:l,replace:d,id:v}=S,p=At(S,["validator","onSubmit","children","fetcher","action","defaultValues","formRef","onReset","subaction","resetAfterSubmit","disableFocusOnError","method","replace","id"]);var St;const b=Wh(v),$=Bh(s),A=y.useMemo(()=>({formId:b,action:a,subaction:c,defaultValuesProp:$,fetcher:n}),[a,n,b,$,c]),P=mt(A),F=an(A),_n=jv(A),V=y.useRef(null),$n=(St=n==null?void 0:n.Form)!=null?St:re.Form,Sn=re.useSubmit(),Fe=yn(b),Pn=g(b,h=>h.setFieldError),En=g(b,h=>h.reset),In=Mv(b,h=>h.reset),An=g(b,h=>h.startSubmit),Te=g(b,h=>h.endSubmit),bt=g(b,h=>h.syncFormProps),_t=g(b,h=>h.setHydrated),On=g(b,h=>h.setFormElement);y.useEffect(()=>(_t(),()=>Lh(b)),[b,_t]);const ce=Rh(),$t=y.useCallback((h,T)=>(ce().add(h,T),()=>{ce().remove(h,T)}),[ce]);Nh(()=>{var h;bt({action:a,defaultValues:(h=$!=null?$:F)!=null?h:{},subaction:c,registerReceiveFocus:$t,validator:e})},[a,$,$t,c,bt,F,e]),y.useEffect(()=>{var h;Fe((h=P==null?void 0:P.fieldErrors)!=null?h:{})},[P==null?void 0:P.fieldErrors,Fe,Pn]),bn(_n,()=>{Te()});let fe=D.default.useRef();y.useEffect(()=>{let h=V.current;if(!h)return;function T(Z){if(!(Z.target instanceof HTMLElement))return;let le=Z.target.closest("button,input[type=submit]");le&&le.form===h&&le.type==="submit"&&(fe.current=le)}return window.addEventListener("click",T,{capture:!0}),()=>{window.removeEventListener("click",T,{capture:!0})}},[]);const Fn=async h=>{An();const T=await e.validate(Uh(h.currentTarget));if(T.error)Te(),Fe(T.error.fieldErrors),f||zh(T.error.fieldErrors,ce(),V.current);else{const Z=Xh(h);if(await(t==null?void 0:t(T.data,Z)),Z.defaultPrevented){Te();return}n?n.submit(fe.current||V.current):Sn(fe.current||V.current,{method:l,replace:d}),fe.current=null}};return D.default.createElement($n,K(C({ref:Kh([V,o,On])},p),{id:v,action:a,method:l,replace:d,onSubmit:h=>{h.preventDefault(),Fn(h)},onReset:h=>{i==null||i(h),!h.defaultPrevented&&(En(),In())}}),D.default.createElement(Wr.Provider,{value:A},D.default.createElement(kh,{formRef:V,resetAfterSubmit:u}),c&&D.default.createElement("input",{type:"hidden",value:c,name:"subaction"}),v&&D.default.createElement("input",{type:"hidden",value:v,name:ye}),r))}var Zh=qr;function Jh(e,t,r){return e==null?e:Zh(e,t,r)}var Qh=Jh;const hr=e=>{const t=new mn;return e.forEach(([r,n])=>t.add(r,n)),[...t.entries()].reduce((r,[n,a])=>Qh(r,n,a.length===1?a[0]:a),{})},yr=e=>"entries"in e&&typeof e.entries=="function"?hr([...e.entries()]):hr(Object.entries(e));function ey(e){return{validate:async t=>{const r=yr(t),n=await e.validate(r);return n.error?{data:void 0,error:{fieldErrors:n.error,subaction:r.subaction,formId:r[ye]},submittedData:r,formId:r[ye]}:{data:n.data,error:void 0,submittedData:r,formId:r[ye]}},validateField:(t,r)=>e.validateField(yr(t),r)}}const ty=e=>{const t=j(e,"useFormState"),r=cn(t.formId),n=ln(t.formId),a=Nv(t.formId),s=fn(t.formId),o=qv(t.formId),i=zv(t.formId),c=hn(t.formId),f=sn(t).hydrateTo(c),l=Bv(t.formId),v=nn(t).hydrateTo(l);return y.useMemo(()=>({action:o,subaction:i,defaultValues:f,fieldErrors:v!=null?v:{},hasBeenSubmitted:n,isSubmitting:r,touchedFields:a,isValid:s}),[o,n,f,v,r,s,i,a])},ry=e=>{const t=j(e,"useFormHelpers"),r=Kv(t),n=dn(t.formId),a=Gv(t.formId),s=on(t),o=yn(t.formId),i=Uv(t.formId);return y.useMemo(()=>({setTouched:r,validateField:n,clearError:s,validate:a,clearAllErrors:()=>o({}),reset:i}),[s,i,o,r,a,n])},ny=e=>{const t=j(e,"useFormContext"),r=ty(e),{clearError:n,setTouched:a,validateField:s,clearAllErrors:o,validate:i}=ry(e),c=vn(t.formId),u=y.useCallback((...f)=>{f.forEach(l=>{n(l)})},[n]);return K(C({},r),{setFieldTouched:a,validateField:s,clearError:u,registerReceiveFocus:c,clearAllErrors:o,validate:i})};exports.ValidatedForm=Yh;exports.createValidator=ey;exports.setFormDefaults=eh;exports.useControlField=Zv;exports.useField=Yv;exports.useFormContext=ny;exports.useIsSubmitting=pn;exports.useIsValid=gn;exports.useUpdateControlledField=Jv;exports.validationError=Qv;