@lucas-barake/effect-form-react 0.1.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.
- package/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/cjs/FormReact.js +477 -0
- package/dist/cjs/FormReact.js.map +1 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/use-debounced.js +67 -0
- package/dist/cjs/internal/use-debounced.js.map +1 -0
- package/dist/dts/FormReact.d.ts +177 -0
- package/dist/dts/FormReact.d.ts.map +1 -0
- package/dist/dts/index.d.ts +2 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/internal/use-debounced.d.ts +2 -0
- package/dist/dts/internal/use-debounced.d.ts.map +1 -0
- package/dist/esm/FormReact.js +449 -0
- package/dist/esm/FormReact.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/use-debounced.js +39 -0
- package/dist/esm/internal/use-debounced.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +33 -0
- package/src/FormReact.tsx +743 -0
- package/src/index.ts +1 -0
- package/src/internal/use-debounced.ts +49 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Lucas Barake
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.build = void 0;
|
|
7
|
+
var _jsxRuntime = /*#__PURE__*/require("react/jsx-runtime");
|
|
8
|
+
var _atomReact = /*#__PURE__*/require("@effect-atom/atom-react");
|
|
9
|
+
var Atom = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("@effect-atom/atom/Atom"));
|
|
10
|
+
var _effectForm = /*#__PURE__*/require("@lucas-barake/effect-form");
|
|
11
|
+
var _path = /*#__PURE__*/require("@lucas-barake/effect-form/internal/path");
|
|
12
|
+
var Cause = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Cause"));
|
|
13
|
+
var Option = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Option"));
|
|
14
|
+
var ParseResult = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/ParseResult"));
|
|
15
|
+
var AST = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/SchemaAST"));
|
|
16
|
+
var _react = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("react"));
|
|
17
|
+
var React = _react;
|
|
18
|
+
var _useDebounced = /*#__PURE__*/require("./internal/use-debounced.js");
|
|
19
|
+
function _interopRequireWildcard(e, t) {
|
|
20
|
+
if ("function" == typeof WeakMap) var r = new WeakMap(),
|
|
21
|
+
n = new WeakMap();
|
|
22
|
+
return (_interopRequireWildcard = function (e, t) {
|
|
23
|
+
if (!t && e && e.__esModule) return e;
|
|
24
|
+
var o,
|
|
25
|
+
i,
|
|
26
|
+
f = {
|
|
27
|
+
__proto__: null,
|
|
28
|
+
default: e
|
|
29
|
+
};
|
|
30
|
+
if (null === e || "object" != typeof e && "function" != typeof e) return f;
|
|
31
|
+
if (o = t ? n : r) {
|
|
32
|
+
if (o.has(e)) return o.get(e);
|
|
33
|
+
o.set(e, f);
|
|
34
|
+
}
|
|
35
|
+
for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
|
|
36
|
+
return f;
|
|
37
|
+
})(e, t);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @since 1.0.0
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
const ArrayItemContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
44
|
+
const AutoSubmitContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
45
|
+
const makeFieldComponent = (fieldKey, fieldDef, crossFieldErrorsAtom, submitCountAtom, dirtyFieldsAtom, parsedMode, getOrCreateValidationAtom, getOrCreateFieldAtoms, Component) => {
|
|
46
|
+
const FieldComponent = React.memo(() => {
|
|
47
|
+
const arrayCtx = (0, _react.useContext)(ArrayItemContext);
|
|
48
|
+
const autoSubmitOnBlur = (0, _react.useContext)(AutoSubmitContext);
|
|
49
|
+
const fieldPath = arrayCtx ? `${arrayCtx.parentPath}.${fieldKey}` : fieldKey;
|
|
50
|
+
const {
|
|
51
|
+
crossFieldErrorAtom,
|
|
52
|
+
touchedAtom,
|
|
53
|
+
valueAtom
|
|
54
|
+
} = React.useMemo(() => getOrCreateFieldAtoms(fieldPath), [fieldPath]);
|
|
55
|
+
const [value, setValue] = (0, _atomReact.useAtom)(valueAtom);
|
|
56
|
+
const [isTouched, setTouched] = (0, _atomReact.useAtom)(touchedAtom);
|
|
57
|
+
const crossFieldError = (0, _atomReact.useAtomValue)(crossFieldErrorAtom);
|
|
58
|
+
const setCrossFieldErrors = (0, _atomReact.useAtomSet)(crossFieldErrorsAtom);
|
|
59
|
+
const submitCount = (0, _atomReact.useAtomValue)(submitCountAtom);
|
|
60
|
+
const validationAtom = React.useMemo(() => getOrCreateValidationAtom(fieldPath, fieldDef.schema), [fieldPath]);
|
|
61
|
+
const validationResult = (0, _atomReact.useAtomValue)(validationAtom);
|
|
62
|
+
const validateImmediate = (0, _atomReact.useAtomSet)(validationAtom);
|
|
63
|
+
const shouldDebounceValidation = parsedMode.validation === "onChange" && parsedMode.debounce !== null && !parsedMode.autoSubmit;
|
|
64
|
+
const validate = (0, _useDebounced.useDebounced)(validateImmediate, shouldDebounceValidation ? parsedMode.debounce : null);
|
|
65
|
+
const prevValueRef = React.useRef(value);
|
|
66
|
+
React.useEffect(() => {
|
|
67
|
+
if (prevValueRef.current === value) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
prevValueRef.current = value;
|
|
71
|
+
const shouldValidate = parsedMode.validation === "onChange" || parsedMode.validation === "onBlur" && isTouched;
|
|
72
|
+
if (shouldValidate) {
|
|
73
|
+
validate(value);
|
|
74
|
+
}
|
|
75
|
+
}, [value, isTouched, validate]);
|
|
76
|
+
const perFieldError = React.useMemo(() => {
|
|
77
|
+
if (validationResult._tag === "Failure") {
|
|
78
|
+
const parseError = Cause.failureOption(validationResult.cause);
|
|
79
|
+
if (Option.isSome(parseError) && ParseResult.isParseError(parseError.value)) {
|
|
80
|
+
return _effectForm.Validation.extractFirstError(parseError.value);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return Option.none();
|
|
84
|
+
}, [validationResult]);
|
|
85
|
+
const validationError = Option.isSome(perFieldError) ? perFieldError : crossFieldError;
|
|
86
|
+
const onChange = React.useCallback(newValue => {
|
|
87
|
+
setValue(newValue);
|
|
88
|
+
setCrossFieldErrors(prev => {
|
|
89
|
+
if (prev.has(fieldPath)) {
|
|
90
|
+
const next = new Map(prev);
|
|
91
|
+
next.delete(fieldPath);
|
|
92
|
+
return next;
|
|
93
|
+
}
|
|
94
|
+
return prev;
|
|
95
|
+
});
|
|
96
|
+
if (parsedMode.validation === "onChange") {
|
|
97
|
+
validate(newValue);
|
|
98
|
+
}
|
|
99
|
+
}, [fieldPath, setValue, setCrossFieldErrors, validate]);
|
|
100
|
+
const onBlur = React.useCallback(() => {
|
|
101
|
+
setTouched(true);
|
|
102
|
+
if (parsedMode.validation === "onBlur") {
|
|
103
|
+
validate(value);
|
|
104
|
+
}
|
|
105
|
+
autoSubmitOnBlur?.();
|
|
106
|
+
}, [setTouched, validate, value, autoSubmitOnBlur]);
|
|
107
|
+
const dirtyFields = (0, _atomReact.useAtomValue)(dirtyFieldsAtom);
|
|
108
|
+
const isDirty = React.useMemo(() => (0, _path.isPathOrParentDirty)(dirtyFields, fieldPath), [dirtyFields, fieldPath]);
|
|
109
|
+
const isValidating = validationResult.waiting;
|
|
110
|
+
const shouldShowError = isTouched || submitCount > 0;
|
|
111
|
+
return (0, _jsxRuntime.jsx)(Component, {
|
|
112
|
+
value: value,
|
|
113
|
+
onChange: onChange,
|
|
114
|
+
onBlur: onBlur,
|
|
115
|
+
error: shouldShowError ? validationError : Option.none(),
|
|
116
|
+
isTouched: isTouched,
|
|
117
|
+
isValidating: isValidating,
|
|
118
|
+
isDirty: isDirty
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
return FieldComponent;
|
|
122
|
+
};
|
|
123
|
+
const makeArrayFieldComponent = (fieldKey, def, stateAtom, crossFieldErrorsAtom, submitCountAtom, dirtyFieldsAtom, parsedMode, getOrCreateValidationAtom, getOrCreateFieldAtoms, operations, componentMap) => {
|
|
124
|
+
const isStructSchema = AST.isTypeLiteral(def.itemSchema.ast);
|
|
125
|
+
const ArrayWrapper = ({
|
|
126
|
+
children
|
|
127
|
+
}) => {
|
|
128
|
+
const arrayCtx = (0, _react.useContext)(ArrayItemContext);
|
|
129
|
+
const [formStateOption, setFormState] = (0, _atomReact.useAtom)(stateAtom);
|
|
130
|
+
const formState = Option.getOrThrow(formStateOption);
|
|
131
|
+
const fieldPath = arrayCtx ? `${arrayCtx.parentPath}.${fieldKey}` : fieldKey;
|
|
132
|
+
const items = React.useMemo(() => (0, _path.getNestedValue)(formState.values, fieldPath) ?? [], [formState.values, fieldPath]);
|
|
133
|
+
const append = React.useCallback(value => {
|
|
134
|
+
setFormState(prev => {
|
|
135
|
+
if (Option.isNone(prev)) return prev;
|
|
136
|
+
return Option.some(operations.appendArrayItem(prev.value, fieldPath, def.itemSchema, value));
|
|
137
|
+
});
|
|
138
|
+
}, [fieldPath, setFormState]);
|
|
139
|
+
const remove = React.useCallback(index => {
|
|
140
|
+
setFormState(prev => {
|
|
141
|
+
if (Option.isNone(prev)) return prev;
|
|
142
|
+
return Option.some(operations.removeArrayItem(prev.value, fieldPath, index));
|
|
143
|
+
});
|
|
144
|
+
}, [fieldPath, setFormState]);
|
|
145
|
+
const swap = React.useCallback((indexA, indexB) => {
|
|
146
|
+
setFormState(prev => {
|
|
147
|
+
if (Option.isNone(prev)) return prev;
|
|
148
|
+
return Option.some(operations.swapArrayItems(prev.value, fieldPath, indexA, indexB));
|
|
149
|
+
});
|
|
150
|
+
}, [fieldPath, setFormState]);
|
|
151
|
+
const move = React.useCallback((from, to) => {
|
|
152
|
+
setFormState(prev => {
|
|
153
|
+
if (Option.isNone(prev)) return prev;
|
|
154
|
+
return Option.some(operations.moveArrayItem(prev.value, fieldPath, from, to));
|
|
155
|
+
});
|
|
156
|
+
}, [fieldPath, setFormState]);
|
|
157
|
+
return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
158
|
+
children: children({
|
|
159
|
+
items,
|
|
160
|
+
append,
|
|
161
|
+
remove,
|
|
162
|
+
swap,
|
|
163
|
+
move
|
|
164
|
+
})
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
const ItemWrapper = ({
|
|
168
|
+
children,
|
|
169
|
+
index
|
|
170
|
+
}) => {
|
|
171
|
+
const arrayCtx = (0, _react.useContext)(ArrayItemContext);
|
|
172
|
+
const setFormState = (0, _atomReact.useAtomSet)(stateAtom);
|
|
173
|
+
const parentPath = arrayCtx ? `${arrayCtx.parentPath}.${fieldKey}` : fieldKey;
|
|
174
|
+
const itemPath = `${parentPath}[${index}]`;
|
|
175
|
+
const remove = React.useCallback(() => {
|
|
176
|
+
setFormState(prev => {
|
|
177
|
+
if (Option.isNone(prev)) return prev;
|
|
178
|
+
return Option.some(operations.removeArrayItem(prev.value, parentPath, index));
|
|
179
|
+
});
|
|
180
|
+
}, [parentPath, index, setFormState]);
|
|
181
|
+
return (0, _jsxRuntime.jsx)(ArrayItemContext.Provider, {
|
|
182
|
+
value: {
|
|
183
|
+
index,
|
|
184
|
+
parentPath: itemPath
|
|
185
|
+
},
|
|
186
|
+
children: typeof children === "function" ? children({
|
|
187
|
+
remove
|
|
188
|
+
}) : children
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
const itemFieldComponents = {};
|
|
192
|
+
if (isStructSchema) {
|
|
193
|
+
const ast = def.itemSchema.ast;
|
|
194
|
+
for (const prop of ast.propertySignatures) {
|
|
195
|
+
const itemKey = prop.name;
|
|
196
|
+
const itemSchema = {
|
|
197
|
+
ast: prop.type
|
|
198
|
+
};
|
|
199
|
+
const itemDef = _effectForm.Form.makeField(itemKey, itemSchema);
|
|
200
|
+
const itemComponent = componentMap[itemKey];
|
|
201
|
+
itemFieldComponents[itemKey] = makeFieldComponent(itemKey, itemDef, crossFieldErrorsAtom, submitCountAtom, dirtyFieldsAtom, parsedMode, getOrCreateValidationAtom, getOrCreateFieldAtoms, itemComponent);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const properties = {
|
|
205
|
+
Item: ItemWrapper,
|
|
206
|
+
...itemFieldComponents
|
|
207
|
+
};
|
|
208
|
+
return new Proxy(ArrayWrapper, {
|
|
209
|
+
get(target, prop) {
|
|
210
|
+
if (prop in properties) {
|
|
211
|
+
return properties[prop];
|
|
212
|
+
}
|
|
213
|
+
return Reflect.get(target, prop);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
const makeFieldComponents = (fields, stateAtom, crossFieldErrorsAtom, submitCountAtom, dirtyFieldsAtom, parsedMode, getOrCreateValidationAtom, getOrCreateFieldAtoms, operations, componentMap) => {
|
|
218
|
+
const components = {};
|
|
219
|
+
for (const [key, def] of Object.entries(fields)) {
|
|
220
|
+
if (_effectForm.Form.isArrayFieldDef(def)) {
|
|
221
|
+
const arrayComponentMap = componentMap[key];
|
|
222
|
+
components[key] = makeArrayFieldComponent(key, def, stateAtom, crossFieldErrorsAtom, submitCountAtom, dirtyFieldsAtom, parsedMode, getOrCreateValidationAtom, getOrCreateFieldAtoms, operations, arrayComponentMap);
|
|
223
|
+
} else if (_effectForm.Form.isFieldDef(def)) {
|
|
224
|
+
const fieldComponent = componentMap[key];
|
|
225
|
+
components[key] = makeFieldComponent(key, def, crossFieldErrorsAtom, submitCountAtom, dirtyFieldsAtom, parsedMode, getOrCreateValidationAtom, getOrCreateFieldAtoms, fieldComponent);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return components;
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Builds a React form from a FormBuilder.
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```tsx
|
|
235
|
+
* import { Form } from "@lucas-barake/effect-form"
|
|
236
|
+
* import { FormReact } from "@lucas-barake/effect-form-react"
|
|
237
|
+
* import * as Atom from "@effect-atom/atom/Atom"
|
|
238
|
+
* import * as Schema from "effect/Schema"
|
|
239
|
+
* import * as Effect from "effect/Effect"
|
|
240
|
+
* import * as Layer from "effect/Layer"
|
|
241
|
+
*
|
|
242
|
+
* const runtime = Atom.runtime(Layer.empty)
|
|
243
|
+
*
|
|
244
|
+
* const loginForm = Form.empty
|
|
245
|
+
* .addField("email", Schema.String)
|
|
246
|
+
* .addField("password", Schema.String)
|
|
247
|
+
*
|
|
248
|
+
* const form = FormReact.build(loginForm, {
|
|
249
|
+
* runtime,
|
|
250
|
+
* fields: { email: TextInput, password: PasswordInput },
|
|
251
|
+
* })
|
|
252
|
+
*
|
|
253
|
+
* function LoginDialog({ onClose }) {
|
|
254
|
+
* const handleSubmit = form.submit((values) =>
|
|
255
|
+
* Effect.gen(function* () {
|
|
256
|
+
* yield* saveUser(values)
|
|
257
|
+
* onClose()
|
|
258
|
+
* })
|
|
259
|
+
* )
|
|
260
|
+
*
|
|
261
|
+
* return (
|
|
262
|
+
* <form.Form defaultValues={{ email: "", password: "" }} onSubmit={handleSubmit}>
|
|
263
|
+
* <form.email />
|
|
264
|
+
* <form.password />
|
|
265
|
+
* <form.Subscribe>
|
|
266
|
+
* {({ isDirty, submit }) => (
|
|
267
|
+
* <button onClick={submit} disabled={!isDirty}>Login</button>
|
|
268
|
+
* )}
|
|
269
|
+
* </form.Subscribe>
|
|
270
|
+
* </form.Form>
|
|
271
|
+
* )
|
|
272
|
+
* }
|
|
273
|
+
* ```
|
|
274
|
+
*
|
|
275
|
+
* @since 1.0.0
|
|
276
|
+
* @category Constructors
|
|
277
|
+
*/
|
|
278
|
+
const build = (self, options) => {
|
|
279
|
+
const {
|
|
280
|
+
fields: components,
|
|
281
|
+
mode,
|
|
282
|
+
runtime
|
|
283
|
+
} = options;
|
|
284
|
+
const parsedMode = _effectForm.Mode.parse(mode);
|
|
285
|
+
const {
|
|
286
|
+
fields
|
|
287
|
+
} = self;
|
|
288
|
+
const formAtoms = _effectForm.FormAtoms.make({
|
|
289
|
+
formBuilder: self,
|
|
290
|
+
runtime
|
|
291
|
+
});
|
|
292
|
+
const {
|
|
293
|
+
combinedSchema,
|
|
294
|
+
crossFieldErrorsAtom,
|
|
295
|
+
decodeAndSubmit,
|
|
296
|
+
dirtyFieldsAtom,
|
|
297
|
+
fieldRefs,
|
|
298
|
+
getOrCreateFieldAtoms,
|
|
299
|
+
getOrCreateValidationAtom,
|
|
300
|
+
isDirtyAtom,
|
|
301
|
+
onSubmitAtom,
|
|
302
|
+
operations,
|
|
303
|
+
resetValidationAtoms,
|
|
304
|
+
stateAtom,
|
|
305
|
+
submitCountAtom
|
|
306
|
+
} = formAtoms;
|
|
307
|
+
const FormComponent = ({
|
|
308
|
+
children,
|
|
309
|
+
defaultValues,
|
|
310
|
+
onSubmit
|
|
311
|
+
}) => {
|
|
312
|
+
const registry = React.useContext(_atomReact.RegistryContext);
|
|
313
|
+
const state = (0, _atomReact.useAtomValue)(stateAtom);
|
|
314
|
+
const setFormState = (0, _atomReact.useAtomSet)(stateAtom);
|
|
315
|
+
const setOnSubmit = (0, _atomReact.useAtomSet)(onSubmitAtom);
|
|
316
|
+
const callDecodeAndSubmit = (0, _atomReact.useAtomSet)(decodeAndSubmit);
|
|
317
|
+
React.useEffect(() => {
|
|
318
|
+
setOnSubmit(onSubmit);
|
|
319
|
+
}, [onSubmit, setOnSubmit]);
|
|
320
|
+
React.useEffect(() => {
|
|
321
|
+
setFormState(Option.some(operations.createInitialState(defaultValues)));
|
|
322
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only
|
|
323
|
+
}, []);
|
|
324
|
+
const debouncedAutoSubmit = (0, _useDebounced.useDebounced)(() => {
|
|
325
|
+
const stateOption = registry.get(stateAtom);
|
|
326
|
+
if (Option.isNone(stateOption)) return;
|
|
327
|
+
callDecodeAndSubmit(stateOption.value.values);
|
|
328
|
+
}, parsedMode.autoSubmit && parsedMode.validation === "onChange" ? parsedMode.debounce : null);
|
|
329
|
+
(0, _atomReact.useAtomSubscribe)(stateAtom, React.useCallback(() => {
|
|
330
|
+
if (parsedMode.autoSubmit && parsedMode.validation === "onChange") {
|
|
331
|
+
debouncedAutoSubmit();
|
|
332
|
+
}
|
|
333
|
+
}, [debouncedAutoSubmit]), {
|
|
334
|
+
immediate: false
|
|
335
|
+
});
|
|
336
|
+
const onBlurAutoSubmit = React.useCallback(() => {
|
|
337
|
+
if (parsedMode.autoSubmit && parsedMode.validation === "onBlur") {
|
|
338
|
+
const stateOption = registry.get(stateAtom);
|
|
339
|
+
if (Option.isNone(stateOption)) return;
|
|
340
|
+
callDecodeAndSubmit(stateOption.value.values);
|
|
341
|
+
}
|
|
342
|
+
}, [registry, callDecodeAndSubmit]);
|
|
343
|
+
if (Option.isNone(state)) return null;
|
|
344
|
+
return (0, _jsxRuntime.jsx)(AutoSubmitContext.Provider, {
|
|
345
|
+
value: onBlurAutoSubmit,
|
|
346
|
+
children: (0, _jsxRuntime.jsx)("form", {
|
|
347
|
+
onSubmit: e => {
|
|
348
|
+
e.preventDefault();
|
|
349
|
+
e.stopPropagation();
|
|
350
|
+
},
|
|
351
|
+
children: children
|
|
352
|
+
})
|
|
353
|
+
});
|
|
354
|
+
};
|
|
355
|
+
const useFormHook = () => {
|
|
356
|
+
const registry = React.useContext(_atomReact.RegistryContext);
|
|
357
|
+
const formValues = Option.getOrThrow((0, _atomReact.useAtomValue)(stateAtom)).values;
|
|
358
|
+
const setFormState = (0, _atomReact.useAtomSet)(stateAtom);
|
|
359
|
+
const setCrossFieldErrors = (0, _atomReact.useAtomSet)(crossFieldErrorsAtom);
|
|
360
|
+
const [decodeAndSubmitResult, callDecodeAndSubmit] = (0, _atomReact.useAtom)(decodeAndSubmit);
|
|
361
|
+
const isDirty = (0, _atomReact.useAtomValue)(isDirtyAtom);
|
|
362
|
+
React.useEffect(() => {
|
|
363
|
+
if (decodeAndSubmitResult._tag === "Failure") {
|
|
364
|
+
const parseError = Cause.failureOption(decodeAndSubmitResult.cause);
|
|
365
|
+
if (Option.isSome(parseError) && ParseResult.isParseError(parseError.value)) {
|
|
366
|
+
const issues = ParseResult.ArrayFormatter.formatErrorSync(parseError.value);
|
|
367
|
+
const fieldErrors = new Map();
|
|
368
|
+
for (const issue of issues) {
|
|
369
|
+
if (issue.path.length > 0) {
|
|
370
|
+
const fieldPath = (0, _path.schemaPathToFieldPath)(issue.path);
|
|
371
|
+
if (!fieldErrors.has(fieldPath)) {
|
|
372
|
+
fieldErrors.set(fieldPath, issue.message);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
if (fieldErrors.size > 0) {
|
|
377
|
+
setCrossFieldErrors(fieldErrors);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}, [decodeAndSubmitResult, setCrossFieldErrors]);
|
|
382
|
+
const submit = React.useCallback(() => {
|
|
383
|
+
const stateOption = registry.get(stateAtom);
|
|
384
|
+
if (Option.isNone(stateOption)) return;
|
|
385
|
+
setCrossFieldErrors(new Map());
|
|
386
|
+
setFormState(prev => {
|
|
387
|
+
if (Option.isNone(prev)) return prev;
|
|
388
|
+
return Option.some(operations.createSubmitState(prev.value));
|
|
389
|
+
});
|
|
390
|
+
callDecodeAndSubmit(stateOption.value.values);
|
|
391
|
+
}, [setFormState, callDecodeAndSubmit, setCrossFieldErrors, registry]);
|
|
392
|
+
const reset = React.useCallback(() => {
|
|
393
|
+
setFormState(prev => {
|
|
394
|
+
if (Option.isNone(prev)) return prev;
|
|
395
|
+
return Option.some(operations.createResetState(prev.value));
|
|
396
|
+
});
|
|
397
|
+
setCrossFieldErrors(new Map());
|
|
398
|
+
resetValidationAtoms(registry);
|
|
399
|
+
callDecodeAndSubmit(Atom.Reset);
|
|
400
|
+
}, [setFormState, setCrossFieldErrors, callDecodeAndSubmit, registry]);
|
|
401
|
+
const setValue = React.useCallback((field, update) => {
|
|
402
|
+
const path = field.key;
|
|
403
|
+
setFormState(prev => {
|
|
404
|
+
if (Option.isNone(prev)) return prev;
|
|
405
|
+
const state = prev.value;
|
|
406
|
+
const currentValue = (0, _path.getNestedValue)(state.values, path);
|
|
407
|
+
const newValue = typeof update === "function" ? update(currentValue) : update;
|
|
408
|
+
return Option.some(operations.setFieldValue(state, path, newValue));
|
|
409
|
+
});
|
|
410
|
+
setCrossFieldErrors(prev => {
|
|
411
|
+
let changed = false;
|
|
412
|
+
const next = new Map(prev);
|
|
413
|
+
for (const errorPath of prev.keys()) {
|
|
414
|
+
if (errorPath === path || errorPath.startsWith(path + ".") || errorPath.startsWith(path + "[")) {
|
|
415
|
+
next.delete(errorPath);
|
|
416
|
+
changed = true;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return changed ? next : prev;
|
|
420
|
+
});
|
|
421
|
+
}, [setFormState, setCrossFieldErrors]);
|
|
422
|
+
const setValues = React.useCallback(values => {
|
|
423
|
+
setFormState(prev => {
|
|
424
|
+
if (Option.isNone(prev)) return prev;
|
|
425
|
+
return Option.some(operations.setFormValues(prev.value, values));
|
|
426
|
+
});
|
|
427
|
+
setCrossFieldErrors(new Map());
|
|
428
|
+
}, [setFormState, setCrossFieldErrors]);
|
|
429
|
+
return {
|
|
430
|
+
submit,
|
|
431
|
+
reset,
|
|
432
|
+
isDirty,
|
|
433
|
+
submitResult: decodeAndSubmitResult,
|
|
434
|
+
values: formValues,
|
|
435
|
+
setValue,
|
|
436
|
+
setValues
|
|
437
|
+
};
|
|
438
|
+
};
|
|
439
|
+
const SubscribeComponent = ({
|
|
440
|
+
children
|
|
441
|
+
}) => {
|
|
442
|
+
const {
|
|
443
|
+
isDirty,
|
|
444
|
+
reset,
|
|
445
|
+
setValue,
|
|
446
|
+
setValues,
|
|
447
|
+
submit,
|
|
448
|
+
submitResult,
|
|
449
|
+
values
|
|
450
|
+
} = useFormHook();
|
|
451
|
+
return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
452
|
+
children: children({
|
|
453
|
+
values,
|
|
454
|
+
isDirty,
|
|
455
|
+
submitResult,
|
|
456
|
+
submit,
|
|
457
|
+
reset,
|
|
458
|
+
setValue,
|
|
459
|
+
setValues
|
|
460
|
+
})
|
|
461
|
+
});
|
|
462
|
+
};
|
|
463
|
+
const submitHelper = fn => runtime.fn()(fn);
|
|
464
|
+
const fieldComponents = makeFieldComponents(fields, stateAtom, crossFieldErrorsAtom, submitCountAtom, dirtyFieldsAtom, parsedMode, getOrCreateValidationAtom, getOrCreateFieldAtoms, operations, components);
|
|
465
|
+
return {
|
|
466
|
+
atom: stateAtom,
|
|
467
|
+
schema: combinedSchema,
|
|
468
|
+
fields: fieldRefs,
|
|
469
|
+
Form: FormComponent,
|
|
470
|
+
Subscribe: SubscribeComponent,
|
|
471
|
+
useForm: useFormHook,
|
|
472
|
+
submit: submitHelper,
|
|
473
|
+
...fieldComponents
|
|
474
|
+
};
|
|
475
|
+
};
|
|
476
|
+
exports.build = build;
|
|
477
|
+
//# sourceMappingURL=FormReact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormReact.js","names":["_atomReact","require","Atom","_interopRequireWildcard","_effectForm","_path","Cause","Option","ParseResult","AST","_react","React","_useDebounced","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ArrayItemContext","createContext","AutoSubmitContext","makeFieldComponent","fieldKey","fieldDef","crossFieldErrorsAtom","submitCountAtom","dirtyFieldsAtom","parsedMode","getOrCreateValidationAtom","getOrCreateFieldAtoms","Component","FieldComponent","memo","arrayCtx","useContext","autoSubmitOnBlur","fieldPath","parentPath","crossFieldErrorAtom","touchedAtom","valueAtom","useMemo","value","setValue","useAtom","isTouched","setTouched","crossFieldError","useAtomValue","setCrossFieldErrors","useAtomSet","submitCount","validationAtom","schema","validationResult","validateImmediate","shouldDebounceValidation","validation","debounce","autoSubmit","validate","useDebounced","prevValueRef","useRef","useEffect","current","shouldValidate","perFieldError","_tag","parseError","failureOption","cause","isSome","isParseError","Validation","extractFirstError","none","validationError","onChange","useCallback","newValue","prev","next","Map","delete","onBlur","dirtyFields","isDirty","isPathOrParentDirty","isValidating","waiting","shouldShowError","_jsxRuntime","jsx","error","makeArrayFieldComponent","def","stateAtom","operations","componentMap","isStructSchema","isTypeLiteral","itemSchema","ast","ArrayWrapper","children","formStateOption","setFormState","formState","getOrThrow","items","getNestedValue","values","append","isNone","some","appendArrayItem","remove","index","removeArrayItem","swap","indexA","indexB","swapArrayItems","move","from","to","moveArrayItem","Fragment","ItemWrapper","itemPath","Provider","itemFieldComponents","prop","propertySignatures","itemKey","name","type","itemDef","Form","makeField","itemComponent","properties","Item","Proxy","target","Reflect","makeFieldComponents","fields","components","key","entries","isArrayFieldDef","arrayComponentMap","isFieldDef","fieldComponent","build","self","options","mode","runtime","Mode","parse","formAtoms","FormAtoms","make","formBuilder","combinedSchema","decodeAndSubmit","fieldRefs","isDirtyAtom","onSubmitAtom","resetValidationAtoms","FormComponent","defaultValues","onSubmit","registry","RegistryContext","state","setOnSubmit","callDecodeAndSubmit","createInitialState","debouncedAutoSubmit","stateOption","useAtomSubscribe","immediate","onBlurAutoSubmit","preventDefault","stopPropagation","useFormHook","formValues","decodeAndSubmitResult","issues","ArrayFormatter","formatErrorSync","fieldErrors","issue","path","length","schemaPathToFieldPath","message","size","submit","createSubmitState","reset","createResetState","Reset","field","update","currentValue","setFieldValue","changed","errorPath","keys","startsWith","setValues","setFormValues","submitResult","SubscribeComponent","submitHelper","fn","fieldComponents","atom","Subscribe","useForm","exports"],"sources":["../../src/FormReact.tsx"],"sourcesContent":[null],"mappings":";;;;;;;AAGA,IAAAA,UAAA,gBAAAC,OAAA;AACA,IAAAC,IAAA,gBAAAC,uBAAA,cAAAF,OAAA;AAEA,IAAAG,WAAA,gBAAAH,OAAA;AACA,IAAAI,KAAA,gBAAAJ,OAAA;AACA,IAAAK,KAAA,gBAAAH,uBAAA,cAAAF,OAAA;AAEA,IAAAM,MAAA,gBAAAJ,uBAAA,cAAAF,OAAA;AACA,IAAAO,WAAA,gBAAAL,uBAAA,cAAAF,OAAA;AAEA,IAAAQ,GAAA,gBAAAN,uBAAA,cAAAF,OAAA;AACA,IAAAS,MAAA,gBAAAP,uBAAA,cAAAF,OAAA;AAA8B,IAAAU,KAAA,GAAAD,MAAA;AAE9B,IAAAE,aAAA,gBAAAX,OAAA;AAA0D,SAAAE,wBAAAU,CAAA,EAAAC,CAAA;EAAA,yBAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAZ,uBAAA,YAAAA,CAAAU,CAAA,EAAAC,CAAA;IAAA,KAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA;IAAA,IAAAM,CAAA;MAAAC,CAAA;MAAAC,CAAA;QAAAC,SAAA;QAAAC,OAAA,EAAAV;MAAA;IAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA;IAAA,IAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA;MAAA,IAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA;MAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA;IAAA;IAAA,WAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA;IAAA,OAAAO,CAAA;EAAA,GAAAR,CAAA,EAAAC,CAAA;AAAA;AAhB1D;;;;AA8JA,MAAMkB,gBAAgB,gBAAG,IAAAtB,MAAA,CAAAuB,aAAa,EAA+B,IAAI,CAAC;AAC1E,MAAMC,iBAAiB,gBAAG,IAAAxB,MAAA,CAAAuB,aAAa,EAAsB,IAAI,CAAC;AAElE,MAAME,kBAAkB,GAAGA,CACzBC,QAAgB,EAChBC,QAAkC,EAClCC,oBAA6E,EAC7EC,eAAkC,EAClCC,eAA+C,EAC/CC,UAA2B,EAC3BC,yBAG6D,EAC7DC,qBAAkE,EAClEC,SAA2C,KAC/B;EACZ,MAAMC,cAAc,GAAalC,KAAK,CAACmC,IAAI,CAAC,MAAK;IAC/C,MAAMC,QAAQ,GAAG,IAAArC,MAAA,CAAAsC,UAAU,EAAChB,gBAAgB,CAAC;IAC7C,MAAMiB,gBAAgB,GAAG,IAAAvC,MAAA,CAAAsC,UAAU,EAACd,iBAAiB,CAAC;IACtD,MAAMgB,SAAS,GAAGH,QAAQ,GAAG,GAAGA,QAAQ,CAACI,UAAU,IAAIf,QAAQ,EAAE,GAAGA,QAAQ;IAE5E,MAAM;MAAEgB,mBAAmB;MAAEC,WAAW;MAAEC;IAAS,CAAE,GAAG3C,KAAK,CAAC4C,OAAO,CACnE,MAAMZ,qBAAqB,CAACO,SAAS,CAAC,EACtC,CAACA,SAAS,CAAC,CACZ;IAED,MAAM,CAACM,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAzD,UAAA,CAAA0D,OAAO,EAACJ,SAAS,CAAqD;IAChG,MAAM,CAACK,SAAS,EAAEC,UAAU,CAAC,GAAG,IAAA5D,UAAA,CAAA0D,OAAO,EAACL,WAAW,CAAC;IACpD,MAAMQ,eAAe,GAAG,IAAA7D,UAAA,CAAA8D,YAAY,EAACV,mBAAmB,CAAC;IACzD,MAAMW,mBAAmB,GAAG,IAAA/D,UAAA,CAAAgE,UAAU,EAAC1B,oBAAoB,CAAC;IAC5D,MAAM2B,WAAW,GAAG,IAAAjE,UAAA,CAAA8D,YAAY,EAACvB,eAAe,CAAC;IAEjD,MAAM2B,cAAc,GAAGvD,KAAK,CAAC4C,OAAO,CAClC,MAAMb,yBAAyB,CAACQ,SAAS,EAAEb,QAAQ,CAAC8B,MAAM,CAAC,EAC3D,CAACjB,SAAS,CAAC,CACZ;IACD,MAAMkB,gBAAgB,GAAG,IAAApE,UAAA,CAAA8D,YAAY,EAACI,cAAc,CAAC;IACrD,MAAMG,iBAAiB,GAAG,IAAArE,UAAA,CAAAgE,UAAU,EAACE,cAAc,CAAC;IAEpD,MAAMI,wBAAwB,GAAG7B,UAAU,CAAC8B,UAAU,KAAK,UAAU,IAChE9B,UAAU,CAAC+B,QAAQ,KAAK,IAAI,IAC5B,CAAC/B,UAAU,CAACgC,UAAU;IAC3B,MAAMC,QAAQ,GAAG,IAAA9D,aAAA,CAAA+D,YAAY,EAACN,iBAAiB,EAAEC,wBAAwB,GAAG7B,UAAU,CAAC+B,QAAQ,GAAG,IAAI,CAAC;IAEvG,MAAMI,YAAY,GAAGjE,KAAK,CAACkE,MAAM,CAACrB,KAAK,CAAC;IACxC7C,KAAK,CAACmE,SAAS,CAAC,MAAK;MACnB,IAAIF,YAAY,CAACG,OAAO,KAAKvB,KAAK,EAAE;QAClC;MACF;MACAoB,YAAY,CAACG,OAAO,GAAGvB,KAAK;MAE5B,MAAMwB,cAAc,GAAGvC,UAAU,CAAC8B,UAAU,KAAK,UAAU,IACrD9B,UAAU,CAAC8B,UAAU,KAAK,QAAQ,IAAIZ,SAAU;MAEtD,IAAIqB,cAAc,EAAE;QAClBN,QAAQ,CAAClB,KAAK,CAAC;MACjB;IACF,CAAC,EAAE,CAACA,KAAK,EAAEG,SAAS,EAAEe,QAAQ,CAAC,CAAC;IAEhC,MAAMO,aAAa,GAA0BtE,KAAK,CAAC4C,OAAO,CAAC,MAAK;MAC9D,IAAIa,gBAAgB,CAACc,IAAI,KAAK,SAAS,EAAE;QACvC,MAAMC,UAAU,GAAG7E,KAAK,CAAC8E,aAAa,CAAChB,gBAAgB,CAACiB,KAAK,CAAC;QAC9D,IAAI9E,MAAM,CAAC+E,MAAM,CAACH,UAAU,CAAC,IAAI3E,WAAW,CAAC+E,YAAY,CAACJ,UAAU,CAAC3B,KAAK,CAAC,EAAE;UAC3E,OAAOpD,WAAA,CAAAoF,UAAU,CAACC,iBAAiB,CAACN,UAAU,CAAC3B,KAAK,CAAC;QACvD;MACF;MACA,OAAOjD,MAAM,CAACmF,IAAI,EAAE;IACtB,CAAC,EAAE,CAACtB,gBAAgB,CAAC,CAAC;IAEtB,MAAMuB,eAAe,GAAGpF,MAAM,CAAC+E,MAAM,CAACL,aAAa,CAAC,GAAGA,aAAa,GAAGpB,eAAe;IAEtF,MAAM+B,QAAQ,GAAGjF,KAAK,CAACkF,WAAW,CAC/BC,QAAkC,IAAI;MACrCrC,QAAQ,CAACqC,QAAQ,CAAC;MAClB/B,mBAAmB,CAAEgC,IAAI,IAAI;QAC3B,IAAIA,IAAI,CAACvE,GAAG,CAAC0B,SAAS,CAAC,EAAE;UACvB,MAAM8C,IAAI,GAAG,IAAIC,GAAG,CAACF,IAAI,CAAC;UAC1BC,IAAI,CAACE,MAAM,CAAChD,SAAS,CAAC;UACtB,OAAO8C,IAAI;QACb;QACA,OAAOD,IAAI;MACb,CAAC,CAAC;MACF,IAAItD,UAAU,CAAC8B,UAAU,KAAK,UAAU,EAAE;QACxCG,QAAQ,CAACoB,QAAQ,CAAC;MACpB;IACF,CAAC,EACD,CAAC5C,SAAS,EAAEO,QAAQ,EAAEM,mBAAmB,EAAEW,QAAQ,CAAC,CACrD;IAED,MAAMyB,MAAM,GAAGxF,KAAK,CAACkF,WAAW,CAAC,MAAK;MACpCjC,UAAU,CAAC,IAAI,CAAC;MAChB,IAAInB,UAAU,CAAC8B,UAAU,KAAK,QAAQ,EAAE;QACtCG,QAAQ,CAAClB,KAAK,CAAC;MACjB;MACAP,gBAAgB,GAAE,CAAE;IACtB,CAAC,EAAE,CAACW,UAAU,EAAEc,QAAQ,EAAElB,KAAK,EAAEP,gBAAgB,CAAC,CAAC;IAEnD,MAAMmD,WAAW,GAAG,IAAApG,UAAA,CAAA8D,YAAY,EAACtB,eAAe,CAAC;IACjD,MAAM6D,OAAO,GAAG1F,KAAK,CAAC4C,OAAO,CAC3B,MAAM,IAAAlD,KAAA,CAAAiG,mBAAmB,EAACF,WAAW,EAAElD,SAAS,CAAC,EACjD,CAACkD,WAAW,EAAElD,SAAS,CAAC,CACzB;IACD,MAAMqD,YAAY,GAAGnC,gBAAgB,CAACoC,OAAO;IAC7C,MAAMC,eAAe,GAAG9C,SAAS,IAAIM,WAAW,GAAG,CAAC;IAEpD,OACE,IAAAyC,WAAA,CAAAC,GAAA,EAAC/D,SAAS;MACRY,KAAK,EAAEA,KAAK;MACZoC,QAAQ,EAAEA,QAAQ;MAClBO,MAAM,EAAEA,MAAM;MACdS,KAAK,EAAEH,eAAe,GAAGd,eAAe,GAAGpF,MAAM,CAACmF,IAAI,EAAU;MAChE/B,SAAS,EAAEA,SAAS;MACpB4C,YAAY,EAAEA,YAAY;MAC1BF,OAAO,EAAEA;IAAO,EAChB;EAEN,CAAC,CAAC;EAEF,OAAOxD,cAAc;AACvB,CAAC;AAED,MAAMgE,uBAAuB,GAAGA,CAC9BzE,QAAgB,EAChB0E,GAAkC,EAClCC,SAAgG,EAChGzE,oBAA6E,EAC7EC,eAAkC,EAClCC,eAA+C,EAC/CC,UAA2B,EAC3BC,yBAG6D,EAC7DC,qBAAkE,EAClEqE,UAAyC,EACzCC,YAAsC,KACZ;EAC1B,MAAMC,cAAc,GAAGzG,GAAG,CAAC0G,aAAa,CAACL,GAAG,CAACM,UAAU,CAACC,GAAG,CAAC;EAE5D,MAAMC,YAAY,GAEbA,CAAC;IAAEC;EAAQ,CAAE,KAAI;IACpB,MAAMxE,QAAQ,GAAG,IAAArC,MAAA,CAAAsC,UAAU,EAAChB,gBAAgB,CAAC;IAC7C,MAAM,CAACwF,eAAe,EAAEC,YAAY,CAAC,GAAG,IAAAzH,UAAA,CAAA0D,OAAO,EAACqD,SAAS,CAAC;IAC1D,MAAMW,SAAS,GAAGnH,MAAM,CAACoH,UAAU,CAACH,eAAe,CAAC;IAEpD,MAAMtE,SAAS,GAAGH,QAAQ,GAAG,GAAGA,QAAQ,CAACI,UAAU,IAAIf,QAAQ,EAAE,GAAGA,QAAQ;IAC5E,MAAMwF,KAAK,GAAGjH,KAAK,CAAC4C,OAAO,CACzB,MAAO,IAAAlD,KAAA,CAAAwH,cAAc,EAACH,SAAS,CAACI,MAAM,EAAE5E,SAAS,CAAC,IAAI,EAA8C,EACpG,CAACwE,SAAS,CAACI,MAAM,EAAE5E,SAAS,CAAC,CAC9B;IAED,MAAM6E,MAAM,GAAGpH,KAAK,CAACkF,WAAW,CAC7BrC,KAAgC,IAAI;MACnCiE,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACkB,eAAe,CAACnC,IAAI,CAACvC,KAAK,EAAEN,SAAS,EAAE4D,GAAG,CAACM,UAAU,EAAE5D,KAAK,CAAC,CAAC;MAC9F,CAAC,CAAC;IACJ,CAAC,EACD,CAACN,SAAS,EAAEuE,YAAY,CAAC,CAC1B;IAED,MAAMU,MAAM,GAAGxH,KAAK,CAACkF,WAAW,CAC7BuC,KAAa,IAAI;MAChBX,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACqB,eAAe,CAACtC,IAAI,CAACvC,KAAK,EAAEN,SAAS,EAAEkF,KAAK,CAAC,CAAC;MAC9E,CAAC,CAAC;IACJ,CAAC,EACD,CAAClF,SAAS,EAAEuE,YAAY,CAAC,CAC1B;IAED,MAAMa,IAAI,GAAG3H,KAAK,CAACkF,WAAW,CAC5B,CAAC0C,MAAc,EAAEC,MAAc,KAAI;MACjCf,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACyB,cAAc,CAAC1C,IAAI,CAACvC,KAAK,EAAEN,SAAS,EAAEqF,MAAM,EAAEC,MAAM,CAAC,CAAC;MACtF,CAAC,CAAC;IACJ,CAAC,EACD,CAACtF,SAAS,EAAEuE,YAAY,CAAC,CAC1B;IAED,MAAMiB,IAAI,GAAG/H,KAAK,CAACkF,WAAW,CAC5B,CAAC8C,IAAY,EAAEC,EAAU,KAAI;MAC3BnB,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAAC6B,aAAa,CAAC9C,IAAI,CAACvC,KAAK,EAAEN,SAAS,EAAEyF,IAAI,EAAEC,EAAE,CAAC,CAAC;MAC/E,CAAC,CAAC;IACJ,CAAC,EACD,CAAC1F,SAAS,EAAEuE,YAAY,CAAC,CAC1B;IAED,OAAO,IAAAf,WAAA,CAAAC,GAAA,EAAAD,WAAA,CAAAoC,QAAA;MAAAvB,QAAA,EAAGA,QAAQ,CAAC;QAAEK,KAAK;QAAEG,MAAM;QAAEI,MAAM;QAAEG,IAAI;QAAEI;MAAI,CAAE;IAAC,EAAI;EAC/D,CAAC;EAED,MAAMK,WAAW,GAGZA,CAAC;IAAExB,QAAQ;IAAEa;EAAK,CAAE,KAAI;IAC3B,MAAMrF,QAAQ,GAAG,IAAArC,MAAA,CAAAsC,UAAU,EAAChB,gBAAgB,CAAC;IAC7C,MAAMyF,YAAY,GAAG,IAAAzH,UAAA,CAAAgE,UAAU,EAAC+C,SAAS,CAAC;IAE1C,MAAM5D,UAAU,GAAGJ,QAAQ,GAAG,GAAGA,QAAQ,CAACI,UAAU,IAAIf,QAAQ,EAAE,GAAGA,QAAQ;IAC7E,MAAM4G,QAAQ,GAAG,GAAG7F,UAAU,IAAIiF,KAAK,GAAG;IAE1C,MAAMD,MAAM,GAAGxH,KAAK,CAACkF,WAAW,CAAC,MAAK;MACpC4B,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACqB,eAAe,CAACtC,IAAI,CAACvC,KAAK,EAAEL,UAAU,EAAEiF,KAAK,CAAC,CAAC;MAC/E,CAAC,CAAC;IACJ,CAAC,EAAE,CAACjF,UAAU,EAAEiF,KAAK,EAAEX,YAAY,CAAC,CAAC;IAErC,OACE,IAAAf,WAAA,CAAAC,GAAA,EAAC3E,gBAAgB,CAACiH,QAAQ;MAACzF,KAAK,EAAE;QAAE4E,KAAK;QAAEjF,UAAU,EAAE6F;MAAQ,CAAE;MAAAzB,QAAA,EAC9D,OAAOA,QAAQ,KAAK,UAAU,GAAGA,QAAQ,CAAC;QAAEY;MAAM,CAAE,CAAC,GAAGZ;IAAQ,EACvC;EAEhC,CAAC;EAED,MAAM2B,mBAAmB,GAA6B,EAAE;EAExD,IAAIhC,cAAc,EAAE;IAClB,MAAMG,GAAG,GAAGP,GAAG,CAACM,UAAU,CAACC,GAAsB;IACjD,KAAK,MAAM8B,IAAI,IAAI9B,GAAG,CAAC+B,kBAAkB,EAAE;MACzC,MAAMC,OAAO,GAAGF,IAAI,CAACG,IAAc;MACnC,MAAMlC,UAAU,GAAG;QAAEC,GAAG,EAAE8B,IAAI,CAACI;MAAI,CAAuB;MAC1D,MAAMC,OAAO,GAAGpJ,WAAA,CAAAqJ,IAAI,CAACC,SAAS,CAACL,OAAO,EAAEjC,UAAU,CAAC;MACnD,MAAMuC,aAAa,GAAI1C,YAAmE,CAACoC,OAAO,CAAC;MACnGH,mBAAmB,CAACG,OAAO,CAAC,GAAGlH,kBAAkB,CAC/CkH,OAAO,EACPG,OAAO,EACPlH,oBAAoB,EACpBC,eAAe,EACfC,eAAe,EACfC,UAAU,EACVC,yBAAyB,EACzBC,qBAAqB,EACrBgH,aAAa,CACd;IACH;EACF;EAEA,MAAMC,UAAU,GAA4B;IAC1CC,IAAI,EAAEd,WAAW;IACjB,GAAGG;GACJ;EAED,OAAO,IAAIY,KAAK,CAACxC,YAAY,EAAE;IAC7B7F,GAAGA,CAACsI,MAAM,EAAEZ,IAAI;MACd,IAAIA,IAAI,IAAIS,UAAU,EAAE;QACtB,OAAOA,UAAU,CAACT,IAAc,CAAC;MACnC;MACA,OAAOa,OAAO,CAACvI,GAAG,CAACsI,MAAM,EAAEZ,IAAI,CAAC;IAClC;GACD,CAA2B;AAC9B,CAAC;AAED,MAAMc,mBAAmB,GAAGA,CAC1BC,MAAe,EACfnD,SAAwG,EACxGzE,oBAA6E,EAC7EC,eAAkC,EAClCC,eAA+C,EAC/CC,UAA2B,EAC3BC,yBAG6D,EAC7DC,qBAAkE,EAClEqE,UAA6C,EAC7CC,YAAwC,KACZ;EAC5B,MAAMkD,UAAU,GAAwB,EAAE;EAE1C,KAAK,MAAM,CAACC,GAAG,EAAEtD,GAAG,CAAC,IAAIjF,MAAM,CAACwI,OAAO,CAACH,MAAM,CAAC,EAAE;IAC/C,IAAI9J,WAAA,CAAAqJ,IAAI,CAACa,eAAe,CAACxD,GAAG,CAAC,EAAE;MAC7B,MAAMyD,iBAAiB,GAAItD,YAAoC,CAACmD,GAAG,CAAC;MACpED,UAAU,CAACC,GAAG,CAAC,GAAGvD,uBAAuB,CACvCuD,GAAG,EACHtD,GAAoD,EACpDC,SAAS,EACTzE,oBAAoB,EACpBC,eAAe,EACfC,eAAe,EACfC,UAAU,EACVC,yBAAyB,EACzBC,qBAAqB,EACrBqE,UAAU,EACVuD,iBAAiB,CAClB;IACH,CAAC,MAAM,IAAInK,WAAA,CAAAqJ,IAAI,CAACe,UAAU,CAAC1D,GAAG,CAAC,EAAE;MAC/B,MAAM2D,cAAc,GAAIxD,YAAmE,CAACmD,GAAG,CAAC;MAChGD,UAAU,CAACC,GAAG,CAAC,GAAGjI,kBAAkB,CAClCiI,GAAG,EACHtD,GAAG,EACHxE,oBAAoB,EACpBC,eAAe,EACfC,eAAe,EACfC,UAAU,EACVC,yBAAyB,EACzBC,qBAAqB,EACrB8H,cAAc,CACf;IACH;EACF;EAEA,OAAON,UAAsC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDO,MAAMO,KAAK,GAAGA,CACnBC,IAAkC,EAClCC,OAIC,KACwB;EACzB,MAAM;IAAEV,MAAM,EAAEC,UAAU;IAAEU,IAAI;IAAEC;EAAO,CAAE,GAAGF,OAAO;EACrD,MAAMnI,UAAU,GAAGrC,WAAA,CAAA2K,IAAI,CAACC,KAAK,CAACH,IAAI,CAAC;EACnC,MAAM;IAAEX;EAAM,CAAE,GAAGS,IAAI;EAEvB,MAAMM,SAAS,GAAoC7K,WAAA,CAAA8K,SAAS,CAACC,IAAI,CAAC;IAChEC,WAAW,EAAET,IAAI;IACjBG;GACD,CAAC;EAEF,MAAM;IACJO,cAAc;IACd/I,oBAAoB;IACpBgJ,eAAe;IACf9I,eAAe;IACf+I,SAAS;IACT5I,qBAAqB;IACrBD,yBAAyB;IACzB8I,WAAW;IACXC,YAAY;IACZzE,UAAU;IACV0E,oBAAoB;IACpB3E,SAAS;IACTxE;EAAe,CAChB,GAAG0I,SAAS;EAEb,MAAMU,aAAa,GAIdA,CAAC;IAAEpE,QAAQ;IAAEqE,aAAa;IAAEC;EAAQ,CAAE,KAAI;IAC7C,MAAMC,QAAQ,GAAGnL,KAAK,CAACqC,UAAU,CAAChD,UAAA,CAAA+L,eAAe,CAAC;IAClD,MAAMC,KAAK,GAAG,IAAAhM,UAAA,CAAA8D,YAAY,EAACiD,SAAS,CAAC;IACrC,MAAMU,YAAY,GAAG,IAAAzH,UAAA,CAAAgE,UAAU,EAAC+C,SAAS,CAAC;IAC1C,MAAMkF,WAAW,GAAG,IAAAjM,UAAA,CAAAgE,UAAU,EAACyH,YAAY,CAAC;IAC5C,MAAMS,mBAAmB,GAAG,IAAAlM,UAAA,CAAAgE,UAAU,EAACsH,eAAe,CAAC;IAEvD3K,KAAK,CAACmE,SAAS,CAAC,MAAK;MACnBmH,WAAW,CAACJ,QAAQ,CAAC;IACvB,CAAC,EAAE,CAACA,QAAQ,EAAEI,WAAW,CAAC,CAAC;IAE3BtL,KAAK,CAACmE,SAAS,CAAC,MAAK;MACnB2C,YAAY,CAAClH,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACmF,kBAAkB,CAACP,aAAa,CAAC,CAAC,CAAC;MACvE;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,MAAMQ,mBAAmB,GAAG,IAAAxL,aAAA,CAAA+D,YAAY,EAAC,MAAK;MAC5C,MAAM0H,WAAW,GAAGP,QAAQ,CAACrK,GAAG,CAACsF,SAAS,CAAC;MAC3C,IAAIxG,MAAM,CAACyH,MAAM,CAACqE,WAAW,CAAC,EAAE;MAChCH,mBAAmB,CAACG,WAAW,CAAC7I,KAAK,CAACsE,MAAM,CAAC;IAC/C,CAAC,EAAErF,UAAU,CAACgC,UAAU,IAAIhC,UAAU,CAAC8B,UAAU,KAAK,UAAU,GAAG9B,UAAU,CAAC+B,QAAQ,GAAG,IAAI,CAAC;IAE9F,IAAAxE,UAAA,CAAAsM,gBAAgB,EACdvF,SAAS,EACTpG,KAAK,CAACkF,WAAW,CAAC,MAAK;MACrB,IAAIpD,UAAU,CAACgC,UAAU,IAAIhC,UAAU,CAAC8B,UAAU,KAAK,UAAU,EAAE;QACjE6H,mBAAmB,EAAE;MACvB;IACF,CAAC,EAAE,CAACA,mBAAmB,CAAC,CAAC,EACzB;MAAEG,SAAS,EAAE;IAAK,CAAE,CACrB;IAED,MAAMC,gBAAgB,GAAG7L,KAAK,CAACkF,WAAW,CAAC,MAAK;MAC9C,IAAIpD,UAAU,CAACgC,UAAU,IAAIhC,UAAU,CAAC8B,UAAU,KAAK,QAAQ,EAAE;QAC/D,MAAM8H,WAAW,GAAGP,QAAQ,CAACrK,GAAG,CAACsF,SAAS,CAAC;QAC3C,IAAIxG,MAAM,CAACyH,MAAM,CAACqE,WAAW,CAAC,EAAE;QAChCH,mBAAmB,CAACG,WAAW,CAAC7I,KAAK,CAACsE,MAAM,CAAC;MAC/C;IACF,CAAC,EAAE,CAACgE,QAAQ,EAAEI,mBAAmB,CAAC,CAAC;IAEnC,IAAI3L,MAAM,CAACyH,MAAM,CAACgE,KAAK,CAAC,EAAE,OAAO,IAAI;IAErC,OACE,IAAAtF,WAAA,CAAAC,GAAA,EAACzE,iBAAiB,CAAC+G,QAAQ;MAACzF,KAAK,EAAEgJ,gBAAgB;MAAAjF,QAAA,EACjD,IAAAb,WAAA,CAAAC,GAAA;QACEkF,QAAQ,EAAGhL,CAAC,IAAI;UACdA,CAAC,CAAC4L,cAAc,EAAE;UAClB5L,CAAC,CAAC6L,eAAe,EAAE;QACrB,CAAC;QAAAnF,QAAA,EAEAA;MAAQ;IACJ,EACoB;EAEjC,CAAC;EAED,MAAMoF,WAAW,GAAGA,CAAA,KAAK;IACvB,MAAMb,QAAQ,GAAGnL,KAAK,CAACqC,UAAU,CAAChD,UAAA,CAAA+L,eAAe,CAAC;IAClD,MAAMa,UAAU,GAAGrM,MAAM,CAACoH,UAAU,CAAC,IAAA3H,UAAA,CAAA8D,YAAY,EAACiD,SAAS,CAAC,CAAC,CAACe,MAAM;IACpE,MAAML,YAAY,GAAG,IAAAzH,UAAA,CAAAgE,UAAU,EAAC+C,SAAS,CAAC;IAC1C,MAAMhD,mBAAmB,GAAG,IAAA/D,UAAA,CAAAgE,UAAU,EAAC1B,oBAAoB,CAAC;IAC5D,MAAM,CAACuK,qBAAqB,EAAEX,mBAAmB,CAAC,GAAG,IAAAlM,UAAA,CAAA0D,OAAO,EAAC4H,eAAe,CAAC;IAC7E,MAAMjF,OAAO,GAAG,IAAArG,UAAA,CAAA8D,YAAY,EAAC0H,WAAW,CAAC;IAEzC7K,KAAK,CAACmE,SAAS,CAAC,MAAK;MACnB,IAAI+H,qBAAqB,CAAC3H,IAAI,KAAK,SAAS,EAAE;QAC5C,MAAMC,UAAU,GAAG7E,KAAK,CAAC8E,aAAa,CAACyH,qBAAqB,CAACxH,KAAK,CAAC;QACnE,IAAI9E,MAAM,CAAC+E,MAAM,CAACH,UAAU,CAAC,IAAI3E,WAAW,CAAC+E,YAAY,CAACJ,UAAU,CAAC3B,KAAK,CAAC,EAAE;UAC3E,MAAMsJ,MAAM,GAAGtM,WAAW,CAACuM,cAAc,CAACC,eAAe,CAAC7H,UAAU,CAAC3B,KAAK,CAAC;UAE3E,MAAMyJ,WAAW,GAAG,IAAIhH,GAAG,EAAkB;UAC7C,KAAK,MAAMiH,KAAK,IAAIJ,MAAM,EAAE;YAC1B,IAAII,KAAK,CAACC,IAAI,CAACC,MAAM,GAAG,CAAC,EAAE;cACzB,MAAMlK,SAAS,GAAG,IAAA7C,KAAA,CAAAgN,qBAAqB,EAACH,KAAK,CAACC,IAAI,CAAC;cACnD,IAAI,CAACF,WAAW,CAACzL,GAAG,CAAC0B,SAAS,CAAC,EAAE;gBAC/B+J,WAAW,CAACvL,GAAG,CAACwB,SAAS,EAAEgK,KAAK,CAACI,OAAO,CAAC;cAC3C;YACF;UACF;UAEA,IAAIL,WAAW,CAACM,IAAI,GAAG,CAAC,EAAE;YACxBxJ,mBAAmB,CAACkJ,WAAW,CAAC;UAClC;QACF;MACF;IACF,CAAC,EAAE,CAACJ,qBAAqB,EAAE9I,mBAAmB,CAAC,CAAC;IAEhD,MAAMyJ,MAAM,GAAG7M,KAAK,CAACkF,WAAW,CAAC,MAAK;MACpC,MAAMwG,WAAW,GAAGP,QAAQ,CAACrK,GAAG,CAACsF,SAAS,CAAC;MAC3C,IAAIxG,MAAM,CAACyH,MAAM,CAACqE,WAAW,CAAC,EAAE;MAEhCtI,mBAAmB,CAAC,IAAIkC,GAAG,EAAE,CAAC;MAE9BwB,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACyG,iBAAiB,CAAC1H,IAAI,CAACvC,KAAK,CAAC,CAAC;MAC9D,CAAC,CAAC;MAEF0I,mBAAmB,CAACG,WAAW,CAAC7I,KAAK,CAACsE,MAAM,CAAC;IAC/C,CAAC,EAAE,CAACL,YAAY,EAAEyE,mBAAmB,EAAEnI,mBAAmB,EAAE+H,QAAQ,CAAC,CAAC;IAEtE,MAAM4B,KAAK,GAAG/M,KAAK,CAACkF,WAAW,CAAC,MAAK;MACnC4B,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAAC2G,gBAAgB,CAAC5H,IAAI,CAACvC,KAAK,CAAC,CAAC;MAC7D,CAAC,CAAC;MACFO,mBAAmB,CAAC,IAAIkC,GAAG,EAAE,CAAC;MAC9ByF,oBAAoB,CAACI,QAAQ,CAAC;MAC9BI,mBAAmB,CAAChM,IAAI,CAAC0N,KAAK,CAAC;IACjC,CAAC,EAAE,CAACnG,YAAY,EAAE1D,mBAAmB,EAAEmI,mBAAmB,EAAEJ,QAAQ,CAAC,CAAC;IAEtE,MAAMrI,QAAQ,GAAG9C,KAAK,CAACkF,WAAW,CAAC,CACjCgI,KAAoB,EACpBC,MAA4B,KAC1B;MACF,MAAMX,IAAI,GAAGU,KAAK,CAACzD,GAAG;MAEtB3C,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,MAAMiG,KAAK,GAAGjG,IAAI,CAACvC,KAAK;QAExB,MAAMuK,YAAY,GAAG,IAAA1N,KAAA,CAAAwH,cAAc,EAACmE,KAAK,CAAClE,MAAM,EAAEqF,IAAI,CAAM;QAC5D,MAAMrH,QAAQ,GAAG,OAAOgI,MAAM,KAAK,UAAU,GACxCA,MAAyB,CAACC,YAAY,CAAC,GACxCD,MAAM;QAEV,OAAOvN,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACgH,aAAa,CAAChC,KAAK,EAAEmB,IAAI,EAAErH,QAAQ,CAAC,CAAC;MACrE,CAAC,CAAC;MAEF/B,mBAAmB,CAAEgC,IAAI,IAAI;QAC3B,IAAIkI,OAAO,GAAG,KAAK;QACnB,MAAMjI,IAAI,GAAG,IAAIC,GAAG,CAACF,IAAI,CAAC;QAC1B,KAAK,MAAMmI,SAAS,IAAInI,IAAI,CAACoI,IAAI,EAAE,EAAE;UACnC,IAAID,SAAS,KAAKf,IAAI,IAAIe,SAAS,CAACE,UAAU,CAACjB,IAAI,GAAG,GAAG,CAAC,IAAIe,SAAS,CAACE,UAAU,CAACjB,IAAI,GAAG,GAAG,CAAC,EAAE;YAC9FnH,IAAI,CAACE,MAAM,CAACgI,SAAS,CAAC;YACtBD,OAAO,GAAG,IAAI;UAChB;QACF;QACA,OAAOA,OAAO,GAAGjI,IAAI,GAAGD,IAAI;MAC9B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC0B,YAAY,EAAE1D,mBAAmB,CAAC,CAAC;IAEvC,MAAMsK,SAAS,GAAG1N,KAAK,CAACkF,WAAW,CAAEiC,MAAuC,IAAI;MAC9EL,YAAY,CAAE1B,IAAI,IAAI;QACpB,IAAIxF,MAAM,CAACyH,MAAM,CAACjC,IAAI,CAAC,EAAE,OAAOA,IAAI;QACpC,OAAOxF,MAAM,CAAC0H,IAAI,CAACjB,UAAU,CAACsH,aAAa,CAACvI,IAAI,CAACvC,KAAK,EAAEsE,MAAM,CAAC,CAAC;MAClE,CAAC,CAAC;MAEF/D,mBAAmB,CAAC,IAAIkC,GAAG,EAAE,CAAC;IAChC,CAAC,EAAE,CAACwB,YAAY,EAAE1D,mBAAmB,CAAC,CAAC;IAEvC,OAAO;MAAEyJ,MAAM;MAAEE,KAAK;MAAErH,OAAO;MAAEkI,YAAY,EAAE1B,qBAAqB;MAAE/E,MAAM,EAAE8E,UAAU;MAAEnJ,QAAQ;MAAE4K;IAAS,CAAE;EACjH,CAAC;EAED,MAAMG,kBAAkB,GAEnBA,CAAC;IAAEjH;EAAQ,CAAE,KAAI;IACpB,MAAM;MAAElB,OAAO;MAAEqH,KAAK;MAAEjK,QAAQ;MAAE4K,SAAS;MAAEb,MAAM;MAAEe,YAAY;MAAEzG;IAAM,CAAE,GAAG6E,WAAW,EAAE;IAE3F,OAAO,IAAAjG,WAAA,CAAAC,GAAA,EAAAD,WAAA,CAAAoC,QAAA;MAAAvB,QAAA,EAAGA,QAAQ,CAAC;QAAEO,MAAM;QAAEzB,OAAO;QAAEkI,YAAY;QAAEf,MAAM;QAAEE,KAAK;QAAEjK,QAAQ;QAAE4K;MAAS,CAAE;IAAC,EAAI;EAC/F,CAAC;EAED,MAAMI,YAAY,GAChBC,EAA4F,IACzF5D,OAAO,CAAC4D,EAAE,EAAmC,CAACA,EAAE,CAA6D;EAElH,MAAMC,eAAe,GAAG1E,mBAAmB,CACzCC,MAAM,EACNnD,SAAS,EACTzE,oBAAoB,EACpBC,eAAe,EACfC,eAAe,EACfC,UAAU,EACVC,yBAAyB,EACzBC,qBAAqB,EACrBqE,UAAU,EACVmD,UAAU,CACX;EAED,OAAO;IACLyE,IAAI,EAAE7H,SAAS;IACf5C,MAAM,EAAEkH,cAAc;IACtBnB,MAAM,EAAEqB,SAAS;IACjB9B,IAAI,EAAEkC,aAAa;IACnBkD,SAAS,EAAEL,kBAAkB;IAC7BM,OAAO,EAAEnC,WAAW;IACpBa,MAAM,EAAEiB,YAAY;IACpB,GAAGE;GACqB;AAC5B,CAAC;AAAAI,OAAA,CAAArE,KAAA,GAAAA,KAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useDebounced = void 0;
|
|
7
|
+
var React = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("react"));
|
|
8
|
+
function _interopRequireWildcard(e, t) {
|
|
9
|
+
if ("function" == typeof WeakMap) var r = new WeakMap(),
|
|
10
|
+
n = new WeakMap();
|
|
11
|
+
return (_interopRequireWildcard = function (e, t) {
|
|
12
|
+
if (!t && e && e.__esModule) return e;
|
|
13
|
+
var o,
|
|
14
|
+
i,
|
|
15
|
+
f = {
|
|
16
|
+
__proto__: null,
|
|
17
|
+
default: e
|
|
18
|
+
};
|
|
19
|
+
if (null === e || "object" != typeof e && "function" != typeof e) return f;
|
|
20
|
+
if (o = t ? n : r) {
|
|
21
|
+
if (o.has(e)) return o.get(e);
|
|
22
|
+
o.set(e, f);
|
|
23
|
+
}
|
|
24
|
+
for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]);
|
|
25
|
+
return f;
|
|
26
|
+
})(e, t);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Internal debounce hook for form validation.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Hook that debounces a callback function.
|
|
36
|
+
*
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
39
|
+
const useDebounced = (fn, delayMs) => {
|
|
40
|
+
const timeoutRef = React.useRef(null);
|
|
41
|
+
const fnRef = React.useRef(fn);
|
|
42
|
+
React.useEffect(() => {
|
|
43
|
+
fnRef.current = fn;
|
|
44
|
+
});
|
|
45
|
+
React.useEffect(() => {
|
|
46
|
+
return () => {
|
|
47
|
+
if (timeoutRef.current !== null) {
|
|
48
|
+
clearTimeout(timeoutRef.current);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}, []);
|
|
52
|
+
return React.useMemo(() => (...args) => {
|
|
53
|
+
if (delayMs === null || delayMs === 0) {
|
|
54
|
+
fnRef.current(...args);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (timeoutRef.current !== null) {
|
|
58
|
+
clearTimeout(timeoutRef.current);
|
|
59
|
+
}
|
|
60
|
+
timeoutRef.current = setTimeout(() => {
|
|
61
|
+
fnRef.current(...args);
|
|
62
|
+
timeoutRef.current = null;
|
|
63
|
+
}, delayMs);
|
|
64
|
+
}, [delayMs]);
|
|
65
|
+
};
|
|
66
|
+
exports.useDebounced = useDebounced;
|
|
67
|
+
//# sourceMappingURL=use-debounced.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-debounced.js","names":["React","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useDebounced","fn","delayMs","timeoutRef","useRef","fnRef","useEffect","current","clearTimeout","useMemo","args","setTimeout","exports"],"sources":["../../../src/internal/use-debounced.ts"],"sourcesContent":[null],"mappings":";;;;;;AAKA,IAAAA,KAAA,gBAAAC,uBAAA,cAAAC,OAAA;AAA8B,SAAAD,wBAAAE,CAAA,EAAAC,CAAA;EAAA,yBAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAJ,uBAAA,YAAAA,CAAAE,CAAA,EAAAC,CAAA;IAAA,KAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA;IAAA,IAAAM,CAAA;MAAAC,CAAA;MAAAC,CAAA;QAAAC,SAAA;QAAAC,OAAA,EAAAV;MAAA;IAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA;IAAA,IAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA;MAAA,IAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA;MAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA;IAAA;IAAA,WAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA;IAAA,OAAAO,CAAA;EAAA,GAAAR,CAAA,EAAAC,CAAA;AAAA;AAL9B;;;;;;AAOA;;;;;AAKO,MAAMkB,YAAY,GAAGA,CAC1BC,EAAK,EACLC,OAAsB,KACjB;EACL,MAAMC,UAAU,GAAGzB,KAAK,CAAC0B,MAAM,CAAuC,IAAI,CAAC;EAC3E,MAAMC,KAAK,GAAG3B,KAAK,CAAC0B,MAAM,CAACH,EAAE,CAAC;EAE9BvB,KAAK,CAAC4B,SAAS,CAAC,MAAK;IACnBD,KAAK,CAACE,OAAO,GAAGN,EAAE;EACpB,CAAC,CAAC;EAEFvB,KAAK,CAAC4B,SAAS,CAAC,MAAK;IACnB,OAAO,MAAK;MACV,IAAIH,UAAU,CAACI,OAAO,KAAK,IAAI,EAAE;QAC/BC,YAAY,CAACL,UAAU,CAACI,OAAO,CAAC;MAClC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO7B,KAAK,CAAC+B,OAAO,CAClB,MACG,CAAC,GAAGC,IAAmB,KAAI;IAC1B,IAAIR,OAAO,KAAK,IAAI,IAAIA,OAAO,KAAK,CAAC,EAAE;MACrCG,KAAK,CAACE,OAAO,CAAC,GAAGG,IAAI,CAAC;MACtB;IACF;IACA,IAAIP,UAAU,CAACI,OAAO,KAAK,IAAI,EAAE;MAC/BC,YAAY,CAACL,UAAU,CAACI,OAAO,CAAC;IAClC;IACAJ,UAAU,CAACI,OAAO,GAAGI,UAAU,CAAC,MAAK;MACnCN,KAAK,CAACE,OAAO,CAAC,GAAGG,IAAI,CAAC;MACtBP,UAAU,CAACI,OAAO,GAAG,IAAI;IAC3B,CAAC,EAAEL,OAAO,CAAC;EACb,CAAO,EACT,CAACA,OAAO,CAAC,CACV;AACH,CAAC;AAAAU,OAAA,CAAAZ,YAAA,GAAAA,YAAA","ignoreList":[]}
|