react-f0rm 0.1.0 → 0.2.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/README.md +174 -0
- package/dist/index.cjs.js +667 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm.js +482 -340
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +529 -344
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +2 -2
- package/dist/index.umd.min.js.map +1 -1
- package/dist/resolvers/yup.cjs.js +15 -0
- package/dist/resolvers/yup.cjs.js.map +1 -0
- package/dist/resolvers/yup.esm.js +13 -0
- package/dist/resolvers/yup.esm.js.map +1 -0
- package/dist/resolvers/zod.cjs.js +12 -0
- package/dist/resolvers/zod.cjs.js.map +1 -0
- package/dist/resolvers/zod.esm.js +10 -0
- package/dist/resolvers/zod.esm.js.map +1 -0
- package/package.json +82 -45
- package/index.d.ts +0 -22
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../node_modules/@for-fun/event-emitter/dist/event-emitter.esm.js","../src/util.js","../src/task-counter.js","../src/form.js","../src/context.js","../src/hooks/form.js","../src/hooks/field.js","../src/components/Form.jsx","../src/components/Field.jsx"],"sourcesContent":["function getSet(ee, key) {\n var set = ee.get(key);\n if (set) return set;\n var newSet = new Set();\n ee.set(key, newSet);\n return newSet;\n}\n\nvar errorEvent = Symbol('error');\nfunction create() {\n return new Map();\n}\nfunction emit(ee, key) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n (ee.get(key) || []).forEach(function (h) {\n return h.apply(void 0, args);\n });\n}\nfunction emitError(ee, err) {\n var handlerSet = ee.get(errorEvent);\n if (!handlerSet || !handlerSet.size) throw err;\n handlerSet.forEach(function (h) {\n return h(err);\n });\n}\nfunction on(ee, key, handler) {\n var set = getSet(ee, key);\n set.add(handler);\n return function () {\n return set.delete(handler);\n };\n}\nfunction onError(ee, handler) {\n return on(ee, errorEvent, handler);\n}\nfunction once(ee, key, handler) {\n var off = on(ee, key, function () {\n off();\n handler.apply(void 0, arguments);\n });\n return off;\n}\nfunction onceError(ee, handler) {\n return once(ee, errorEvent, handler);\n}\nfunction bindContext(context) {\n return function (func) {\n return func.bind(null, context);\n };\n}\nfunction createAndBind() {\n var ee = create();\n var bind = bindContext(ee);\n return {\n emit: bind(emit),\n emitError: bind(emitError),\n on: bind(on),\n onError: bind(onError),\n once: bind(once),\n onceError: bind(onceError)\n };\n}\n\nexport { bindContext, create, createAndBind, emit, emitError, errorEvent, on, onError, once, onceError };\n//# sourceMappingURL=event-emitter.esm.js.map\n","export function get(values, paths) {\n try {\n return paths.reduce((p, values) => values[p], values);\n } catch (e) {\n return undefined;\n }\n}\n\nexport function set(values, paths, value) {\n if (!paths.length) return values;\n\n const path = paths[0];\n if (Number.isNumber(value)) {\n const arr = Array.isArray(values) ? values.slice() : [];\n arr[path] = set(arr[path], paths.slice(1), value);\n return arr;\n }\n return {...values, [paths[0]]: set(values[path], paths.slice(1), value)};\n}\n\nexport function isNil(value) {\n return value == null;\n}\n\nexport function isEmpty(value) {\n if (isNil(value)) return true;\n if (typeof value !== 'object') return false;\n\n const values = Object.values(value);\n return values.length === 0 || values.every(isEmpty);\n}\n","import {create as createEmitter, emit, on, once} from '@for-fun/event-emitter';\n/** @typedef { import('../index').TaskCounter } TaskCounter */\n\n/**\n * @return {TaskCounter}\n */\nexport default function create() {\n return {emitter: createEmitter(), count: 0};\n}\n\n/**\n * @param {TaskCounter} counter\n * @param {Promise} task\n */\nexport function run(counter, task) {\n counter.count++;\n task.finally(() => {\n counter.count--;\n emit(counter.emitter, 'done');\n });\n}\n\n/**\n * @param {TaskCounter} counter\n */\nexport function isRunning(counter) {\n return Boolean(counter.count);\n}\n\n/**\n * @param {TaskCounter} counter\n * @param {() => boolean} ifReject\n */\nexport function waitUntil(counter, ifReject) {\n return new Promise((resolve, reject) => {\n const off = on(counter.emitter, 'done', () => {\n if (ifReject()) {\n off();\n reject();\n return;\n }\n if (counter.count) return;\n off();\n resolve();\n });\n })\n}\n","import {create as createEmitter, emit} from '@for-fun/event-emitter';\nimport {get, set} from './util';\nimport createCounter, {waitUntil, isRunning} from './task-counter';\n\n/** @typedef { import('../index').Form } Form */\n/** @typedef { import('../index').Paths } Paths */\n\n/**\n * Create form instance\n * @param {Object} [defaultValues] default values\n * @return {Form}\n */\nexport default function create(defaultValues) {\n const emitter = createEmitter();\n return {\n emitter,\n validatingCount: 0,\n defaultValues,\n values: new Map(),\n errors: new Map(),\n touched: new Set()\n };\n}\n\n/**\n * Get form values\n * @param {Form} form\n */\nexport function getValues({defaultValues, values}) {\n return values\n .keys()\n .reduce((k, v) => set(v, JSON.parse(k), values.get(k)), defaultValues);\n}\n\n/**\n * Get field value\n * @param {Form} form\n * @param {Paths} paths\n */\nexport function getValue({defaultValues, values}, paths) {\n const key = JSON.stringify(paths);\n if (values.has(key)) return values.get(key);\n return get(defaultValues, paths);\n}\n\n/**\n * Set field value\n * @param {Form} form\n * @param {Paths} paths\n * @param {any} value\n */\nexport function setValue({emitter, values}, paths, value) {\n const key = JSON.stringify(paths);\n values.set(key, value);\n emit(emitter, 'change');\n}\n\n/**\n * Get field error\n * @param {Form} form\n * @param {Paths} paths\n */\nexport function getError({errors}, paths) {\n return errors.get(JSON.stringify(paths));\n}\n\n/**\n * Get all errors\n * @param {Form} form\n */\nexport function getErrors({errors}) {\n return Array.from(errors.values());\n}\n\n/**\n * Set field error\n * @param {Form} Form\n * @param {Paths} paths\n * @param {string | undefined} error\n */\nexport function setError({emitter, errors}, paths, error) {\n errors.set(JSON.stringify(paths), error);\n emit(emitter, 'errors');\n}\n\n/**\n * Clear errors\n * @param {Form} form\n */\nexport function clearErrors({emitter, errors}) {\n errors.clear();\n emit(emitter, 'errors');\n}\n\n/**\n * Set field touched state\n * @param {Form} form\n * @param {Paths} paths\n */\nexport function setTouched({emitter, touched}, paths) {\n touched.add(JSON.stringify(paths));\n emit(emitter, 'touched');\n}\n\n/**\n * Set field touched state\n * @param {Form} form\n * @param {Paths} paths\n */\nexport function hasTouched({touched}, paths) {\n return touched.has(JSON.stringify(paths));\n}\n\n/**\n * Is dirty\n * @param {Form} form\n */\nexport function isDirty({touched}) {\n return touched.size > 0;\n}\n\n/**\n * Remove field\n * @param {Form} form\n * @param {Paths} paths\n */\nexport function removeField(form, paths) {\n const key = JSON.stringify(paths);\n const {emitter, values, touched, errors} = form;\n values.delete(key);\n touched.delete(key);\n errors.delete(key);\n emit(emitter, 'change');\n emit(emitter, 'touched');\n emit(emitter, 'errors');\n}\n\n/**\n * Reset form\n * @param {Form} form\n * @param {Object} [defaultValues]\n */\nexport function reset(form, defaultValues) {\n form.defaultValues = defaultValues;\n clearErrors(form);\n const {emitter, touched} = form;\n touched.clear();\n emit(emitter, 'change');\n emit(emitter, 'touched');\n emit(emitter, 'reset');\n}\n\n/**\n * @param {Form} form\n */\nexport function hasErrors({errors}) {\n return errors.size > 0;\n}\n\n/**\n * Validate all fields.\n * @param {Form} form\n * @return {Promise} resolve if no error; reject and stop validate if has an error;\n */\nexport function validate(form) {\n const token = createCounter();\n emit(form.emitter, 'validate', token);\n\n if (hasErrors(form)) return Promise.reject();\n if (!isRunning(token)) return Promise.resolve();\n\n return waitUntil(token, () => hasErrors(form));\n}\n","import {createContext, useContext} from 'react';\n\nexport const FormContext = createContext();\n\nexport const FormProvider = FormContext.Provider;\n\nexport function useFormContext() {\n const form = useContext(FormContext);\n if (!form) throw new Error('no form provided');\n return form;\n}\n","import {useRef, useReducer, useEffect} from 'react';\nimport {on, emit} from '@for-fun/event-emitter';\nimport createForm, {\n getError,\n getValue,\n hasErrors,\n hasTouched,\n isDirty\n} from '../form';\n\nexport default function useForm(defaultValues) {\n const ref = useRef();\n const form = (ref.current = ref.current || createForm());\n\n useEffect(() => {\n form.defaultValues = defaultValues;\n emit(form.emitter, 'change');\n }, [defaultValues]);\n\n return form;\n}\n\n/**\n * @param {EventEmitter} emitter\n * @param {string} event\n * @param {() => any} getter\n */\nexport function useWatch(emitter, event, getter) {\n const [value, syncValue] = useReducer(getter, getter);\n\n useEffect(() => on(emitter, event, syncValue), [emitter, event]);\n return value;\n}\n\n/**\n * Get field value state\n * @param {Form} form\n * @param {Paths} paths\n */\nexport function useValue(form, paths) {\n return useWatch(form.emitter, 'change', getValue.bind(null, form, paths));\n}\n\nexport function useTouched(form, paths) {\n return useWatch(form.emitter, 'touched', hasTouched.bind(null, form, paths));\n}\n\nexport function useError(form, paths) {\n return useWatch(form.emitter, 'errors', getError.bind(null, form, paths));\n}\n\nexport function useIsDirty(form) {\n return useWatch(form.emitter, 'touched', isDirty.bind(null, form));\n}\n\nexport function useHasErrors(form) {\n return useWatch(form.emitter, 'errors', hasErrors.bind(null, form));\n}\n","import {useEffect, useMemo, useRef} from 'react';\nimport {useFormContext} from '../context';\nimport {getValue, removeField, setError, setTouched, setValue} from '../form';\nimport {useValue} from './form';\n\nexport default function useField({name, defaultValue, validate}) {\n const form = useFormContext();\n const lockRef = useRef();\n const validateRef = useRef();\n validateRef.current = validate;\n const nameKey = JSON.stringify(name);\n\n const handlers = useMemo(() => {\n setValue(form, name, defaultValue);\n\n const onChange = v => setValue(form, name, v);\n const onBlur = () => {\n setTouched(form, name);\n\n if (!validateRef.current) return;\n const result = validateRef.current(getValue(form, name));\n if (!result) return;\n if (typeof result === 'string') {\n setError(form, name, result);\n return;\n }\n const lock = (lockRef.current = {});\n result\n .then(error => {\n if (lock === lockRef.current && error) setError(form, name, error);\n })\n .finally(() => (lockRef.current = null));\n };\n\n return {onChange, onBlur};\n }, [nameKey, form]);\n\n useEffect(\n () => () => {\n removeField(form, name);\n },\n [nameKey, form]\n );\n\n const value = useValue(form, name);\n return {value, ...handlers};\n}\n","import * as React from 'react';\nimport createForm, {getErrors, getValues, validate} from '../form';\nimport {FormProvider} from '../context';\n\n/** @typedef { import('../index').FormProps } FormProps */\n\n/**\n * Form\n * @param {FormProps} props\n */\nexport default function Form({\n form: f,\n onSubmit,\n onValidSubmit,\n onInvalidSubmit,\n ...props\n}) {\n const form = React.useMemo(() => f || createForm(), [f]);\n\n function handleSubmit(e) {\n const task = validate(form);\n\n if (!(onSubmit || onValidSubmit || onInvalidSubmit)) return;\n\n const values = getValues(form);\n if (onSubmit) onSubmit(values, e);\n task.then(valid =>\n valid\n ? onValidSubmit && onValidSubmit(values, e)\n : onInvalidSubmit && onInvalidSubmit(getErrors(form), values)\n );\n }\n\n return (\n <FormProvider value={form}>\n <form {...props} onSubmit={handleSubmit} />\n </FormProvider>\n );\n}\n","import useField from '../hooks/field';\n\nexport default function Field({render, ...props}) {\n const field = useField(props);\n return render(field);\n}\n"],"names":["get","values","paths","reduce","p","e","undefined","set","value","length","path","Number","isNumber","arr","Array","isArray","slice","create","emitter","createEmitter","count","isRunning","counter","Boolean","waitUntil","ifReject","Promise","resolve","reject","off","on","defaultValues","validatingCount","Map","errors","touched","Set","getValues","keys","k","v","JSON","parse","getValue","key","stringify","has","setValue","emit","getError","getErrors","from","setError","error","clearErrors","clear","setTouched","add","hasTouched","isDirty","size","removeField","form","delete","reset","hasErrors","validate","token","createCounter","FormContext","createContext","FormProvider","Provider","useFormContext","useContext","Error","useForm","ref","useRef","current","createForm","useEffect","useWatch","event","getter","syncValue","useReducer","useValue","bind","useTouched","useError","useIsDirty","useHasErrors","useField","name","defaultValue","lockRef","validateRef","nameKey","handlers","useMemo","onChange","onBlur","result","lock","then","finally","Form","f","onSubmit","onValidSubmit","onInvalidSubmit","props","React","handleSubmit","task","valid","React.createElement","Field","render","field"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../node_modules/.pnpm/@for-fun+event-emitter@1.0.0/node_modules/@for-fun/event-emitter/dist/event-emitter.esm.js","../src/util.ts","../src/path.ts","../src/form.ts","../src/context.ts","../src/hooks/form.tsx","../src/hooks/path.ts","../src/hooks/stage.ts","../src/hooks/validate.ts","../src/hooks/field.tsx","../src/hooks/fieldArray.ts","../src/components/Form.tsx","../src/components/Field.tsx"],"sourcesContent":["function getSet(ee, key) {\n var set = ee.get(key);\n if (set) return set;\n var newSet = new Set();\n ee.set(key, newSet);\n return newSet;\n}\nvar errorEvent = Symbol('error');\nfunction create() {\n return new Map();\n}\nfunction emit(ee, key) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n (ee.get(key) || []).forEach(function (h) {\n return h.apply(void 0, args);\n });\n}\nfunction emitError(ee, err) {\n var handlerSet = ee.get(errorEvent);\n if (!handlerSet || !handlerSet.size) throw err;\n handlerSet.forEach(function (h) {\n return h(err);\n });\n}\nfunction on(ee, key, handler) {\n var set = getSet(ee, key);\n set.add(handler);\n return function () {\n return set.delete(handler);\n };\n}\nfunction onError(ee, handler) {\n return on(ee, errorEvent, handler);\n}\nfunction once(ee, key, handler) {\n var off = on(ee, key, function () {\n off();\n handler.apply(void 0, arguments);\n });\n return off;\n}\nfunction onceError(ee, handler) {\n return once(ee, errorEvent, handler);\n}\nfunction bindContext(context) {\n return function (func) {\n return func.bind(null, context);\n };\n}\nfunction createAndBind() {\n var ee = create();\n var bind = bindContext(ee);\n return {\n emit: bind(emit),\n emitError: bind(emitError),\n on: bind(on),\n onError: bind(onError),\n once: bind(once),\n onceError: bind(onceError)\n };\n}\n\nexport { bindContext, create, createAndBind, emit, emitError, errorEvent, on, onError, once, onceError };\n//# sourceMappingURL=event-emitter.esm.js.map\n","import {on} from '@for-fun/event-emitter';\nimport type {EventEmitter} from '@for-fun/event-emitter';\n\nexport function normalizePath(\n path: string | (string | number)[]\n): (string | number)[] {\n if (Array.isArray(path)) return path;\n return path\n .split(/\\.|\\[/)\n .map(prop => (prop.endsWith(']') ? Number.parseInt(prop, 10) : prop));\n}\n\nexport function get(values: any, path: (string | number)[]): any {\n return path.reduce((current: any, p: string | number) => {\n if (current == null) return undefined;\n return current[p];\n }, values);\n}\n\nexport function set(values: any, path: (string | number)[], value: any): any {\n if (!path.length) return value;\n\n const [prop, ...props] = path;\n if (typeof prop === 'number') {\n const arr = Array.isArray(values) ? values.slice() : [];\n arr[prop] = set(arr[prop], props, value);\n return arr;\n }\n return {...values, [prop]: set(values && values[prop], props, value)};\n}\n\nexport function isNil(value: any): value is null | undefined {\n return value == null;\n}\n\nexport function isEmpty(value: any): boolean {\n if (isNil(value)) return true;\n if (typeof value !== 'object') return false;\n\n const values = Object.values(value);\n return values.length === 0 || values.every(isEmpty);\n}\n\nexport function isPromise(value: any): value is Promise<any> {\n return value && typeof value.then === 'function';\n}\n\nexport function waitUntil(\n emitter: EventEmitter<any>,\n event: string,\n isResolve: () => boolean,\n isReject: () => boolean\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (isReject()) return void reject();\n if (isResolve()) return void resolve();\n\n const off = on(emitter, event as any, () => {\n if (isReject()) {\n off();\n reject();\n return;\n }\n if (isResolve()) return;\n off();\n resolve();\n });\n });\n}\n","import {normalizePath} from './util';\n\nexport type PathValue = (string | number)[];\nexport type Name = string | PathValue;\nexport type Path = {value: PathValue; key: string};\n\nexport default function create(name: Name): Path {\n const value = normalizePath(name);\n return {value, key: JSON.stringify(value)};\n}\n","import {create as createEmitter, emit as _emit} from '@for-fun/event-emitter';\nimport type {EventEmitter} from '@for-fun/event-emitter';\nimport createPath from './path';\nimport type {Path} from './path';\nimport {get, set, waitUntil} from './util';\n\nconst emit = _emit as (\n emitter: EventEmitter,\n event: string,\n ...args: any[]\n) => void;\n\nexport type PathValue = (string | number)[];\nexport type Name = string | PathValue;\n\nexport interface Form<T extends Record<string, any> = any> {\n emitter: EventEmitter;\n revalidateOnChange: boolean;\n initialValues: T;\n values: Map<string, any>;\n errors: Map<string, string>;\n touched: Set<string>;\n validators: Map<string, () => void>;\n validating: Set<string>;\n validate?: (\n values: T\n ) => Record<string, string> | Promise<Record<string, string>>;\n isSubmitting: boolean;\n submitCount: number;\n isSubmitSuccessful: boolean | undefined;\n}\n\nexport type Options<T extends Record<string, any> = any> = {\n initialValues?: T;\n validateOnSubmit?: boolean;\n validateOnChange?: boolean;\n validateOnBlur?: boolean;\n revalidateOnChange?: boolean;\n revalidateOnBlur?: boolean;\n validate?: (\n values: T\n ) => Record<string, string> | Promise<Record<string, string>>;\n};\n\n/**\n * Create form instance\n * @param options\n * @return form instance\n */\nexport default function create<T extends Record<string, any> = any>(\n options?: Options<T>\n): Form<T> {\n const emitter = createEmitter();\n return {\n emitter,\n revalidateOnChange: true,\n ...options,\n initialValues: (options?.initialValues ?? {}) as T,\n values: new Map(),\n errors: new Map(),\n touched: new Set(),\n validators: new Map(),\n validating: new Set(),\n isSubmitting: false,\n submitCount: 0,\n isSubmitSuccessful: undefined\n };\n}\n\n/**\n * Get form values\n * @param form\n */\nexport function getValues(form: Form): any {\n return Array.from(form.values.keys()).reduce(\n (v, k) => set(v, JSON.parse(k), form.values.get(k)),\n form.initialValues\n );\n}\n\n/**\n * Get field value\n * @param form\n * @param name\n */\nexport function getValue(form: Form, name: Name): any {\n return getValueByPath(form, createPath(name));\n}\n\n/**\n * Get field value by path\n * @param form\n * @param path\n */\nexport function getValueByPath({initialValues, values}: Form, path: Path): any {\n if (values.has(path.key)) return values.get(path.key);\n return get(initialValues, path.value);\n}\n\n/**\n * Set field value\n * @param form\n * @param name\n * @param value\n */\nexport function setValue(form: Form, name: Name, value: any): void {\n setValueByPath(form, createPath(name), value);\n}\n\n/**\n * Set field value\n * @param form\n * @param path\n * @param value\n */\nexport function setValueByPath(\n {emitter, values}: Form,\n path: Path,\n value: any\n): void {\n values.set(path.key, value);\n emit(emitter, 'change', path);\n}\n\n/**\n * Get field error\n * @param form\n * @param name\n */\nexport function getError(form: Form, name: Name): string | undefined {\n return getErrorByPath(form, createPath(name));\n}\n\n/**\n * Get field error by path\n * @param form\n * @param path\n */\nexport function getErrorByPath({errors}: Form, path: Path): string | undefined {\n return errors.get(path.key);\n}\n\n/**\n * Get all errors\n * @param form\n * @return array of error strings\n */\nexport function getErrors({errors}: Form): string[] {\n return Array.from(errors.values());\n}\n\n/**\n * Get first error string\n * @param form\n * @return first error string or undefined\n */\nexport function getFirstError({errors}: Form): string | undefined {\n return errors.values().next().value;\n}\n\nexport function unsetValidatingByPath(\n {emitter, validating}: Form,\n {key}: Path\n): void {\n validating.delete(key);\n emit(emitter, 'validating');\n}\n\nexport function setValidatingByPath(\n {emitter, validating}: Form,\n {key}: Path\n): void {\n validating.add(key);\n emit(emitter, 'validating');\n}\n\n/**\n * Set field error\n * @param form\n * @param name\n * @param error\n */\nexport function setError(\n form: Form,\n name: Name,\n error: string | undefined\n): void {\n setErrorByPath(form, createPath(name), error);\n}\n\n/**\n * Set field error\n * @param form\n * @param path\n * @param error\n */\nexport function setErrorByPath(\n {emitter, errors}: Form,\n path: Path,\n error: string | undefined\n): void {\n if (error) {\n errors.set(path.key, error);\n } else {\n errors.delete(path.key);\n }\n emit(emitter, 'errors');\n}\n\n/**\n * Clear errors\n * @param form\n */\nexport function clearErrors({emitter, errors}: Form): void {\n errors.clear();\n emit(emitter, 'errors');\n}\n\n/**\n * Set field touched state\n * @param form\n * @param name\n */\nexport function setTouched(form: Form, name: Name): void {\n setTouchedByPath(form, createPath(name));\n}\n\n/**\n * Set field touched state\n * @param form\n * @param path\n */\nexport function setTouchedByPath({emitter, touched}: Form, {key}: Path): void {\n if (touched.has(key)) return;\n touched.add(key);\n emit(emitter, 'touched');\n}\n\n/**\n * Check if field has been touched\n * @param form\n * @param name\n */\nexport function hasTouched(form: Form, name: Name): boolean {\n return hasTouchedByPath(form, createPath(name));\n}\n\n/**\n * Check if field has been touched\n * @param form\n * @param path\n */\nexport function hasTouchedByPath({touched}: Form, path: Path): boolean {\n return touched.has(path.key);\n}\n\n/**\n * Is dirty -- any value differs from initialValues\n * @param form\n */\nexport function isDirty({initialValues, values}: Form): boolean {\n for (const [key, value] of values) {\n const path = JSON.parse(key);\n if (get(initialValues, path) !== value) return true;\n }\n return false;\n}\n\n/**\n * Is touched -- any field has been touched\n * @param form\n */\nexport function isTouched({touched}: Form): boolean {\n return touched.size > 0;\n}\n\n/**\n * Remove field\n * @param form\n * @param name\n */\nexport function removeField(form: Form, name: Name): void {\n removeFieldByPath(form, createPath(name));\n}\n\n/**\n * Remove field\n * @param form\n * @param path\n */\nexport function removeFieldByPath(form: Form, {key}: Path): void {\n const {emitter, values, touched, errors, validating} = form;\n values.delete(key);\n touched.delete(key);\n errors.delete(key);\n validating.delete(key);\n emit(emitter, 'change');\n emit(emitter, 'touched');\n emit(emitter, 'errors');\n emit(emitter, 'validating');\n}\n\n/**\n * Set form initialValues\n * @param form\n * @param initialValues\n */\nexport function setInitialValues(form: Form, initialValues: any): void {\n if (form.initialValues === initialValues) return;\n form.initialValues = initialValues;\n form.values.clear();\n emit(form.emitter, 'change');\n}\n\n/**\n * Reset form\n * @param form\n * @param initialValues\n */\nexport function reset(form: Form, initialValues?: any): void {\n form.initialValues = initialValues;\n clearErrors(form);\n const {emitter, touched, values} = form;\n values.clear();\n touched.clear();\n emit(emitter, 'change');\n emit(emitter, 'touched');\n emit(emitter, 'reset');\n}\n\n/**\n * @param form\n */\nexport function hasErrors({errors}: Form): boolean {\n return errors.size > 0;\n}\n\n/**\n * Trigger all fields validate.\n * @param form\n */\nexport function trigger(form: Form): void {\n form.validators.forEach(validator => validator());\n}\n\n/**\n * Validate and throw if any field error.\n * @param form\n * @return resolve if no error; reject and stop validate if has an error\n */\nexport async function ensureValidate(form: Form): Promise<void> {\n form.validators.forEach(validator => validator());\n\n await waitUntil(\n form.emitter,\n 'validating',\n () => !form.validating.size,\n () => hasErrors(form)\n ).catch(() => {\n throw new Error(getFirstError(form));\n });\n\n if (form.validate) {\n const result = await form.validate(getValues(form));\n const entries = result ? Object.entries(result) : [];\n if (entries.length) {\n entries.forEach(([field, error]) => {\n setError(form, field, error);\n });\n throw new Error(getFirstError(form));\n }\n }\n}\n\n/**\n * Validate and return if any field error.\n * @param form\n * @return error message string or void\n */\nexport async function validate(form: Form): Promise<void | string> {\n return ensureValidate(form).catch(e => e.message);\n}\n\nexport function setIsSubmitting(form: Form, value: boolean): void {\n form.isSubmitting = value;\n emit(form.emitter, 'submitting');\n}\n\nexport function incrementSubmitCount(form: Form): void {\n form.submitCount++;\n emit(form.emitter, 'submitCount');\n}\n\nexport function setSubmitSuccessful(form: Form, value: boolean): void {\n form.isSubmitSuccessful = value;\n emit(form.emitter, 'submitSuccessful');\n}\n","import {createContext, useContext} from 'react';\n\nexport const FormContext = createContext<any>(null);\n\nexport const FormProvider = FormContext.Provider;\n\nexport function useFormContext(): any {\n const form = useContext(FormContext);\n if (!form) throw new Error('no form provided');\n return form;\n}\n\nexport const CheckboxGroupContext = createContext<any>(null);\n\nexport const CheckboxGroupProvider = CheckboxGroupContext.Provider;\n\nexport function useCheckboxGroupContext(): any {\n const group = useContext(CheckboxGroupContext);\n if (!group) throw new Error('no group provided');\n return group;\n}\n","import {useRef, useReducer, useEffect} from 'react';\nimport {on} from '@for-fun/event-emitter';\nimport type {EventEmitter} from '@for-fun/event-emitter';\nimport createForm, {\n getErrorByPath,\n getValueByPath,\n hasTouchedByPath,\n hasErrors,\n isDirty,\n setInitialValues\n} from '../form';\nimport type {Form, Options, Name} from '../form';\nimport createPath from '../path';\nimport type {Path} from '../path';\n\nexport default function useForm<T extends Record<string, any> = any>(\n options?: Options<T>\n): Form<T> {\n const ref = useRef<Form<T> | null>(null);\n const form = (ref.current = ref.current || createForm(options));\n const initialValues = options && options.initialValues;\n\n useEffect(() => {\n setInitialValues(form, initialValues);\n }, [initialValues]);\n\n return form;\n}\n\nexport function useWatch<T>(\n emitter: EventEmitter,\n event: string,\n getter: () => T\n): T {\n const [value, syncValue] = useReducer(getter, undefined, getter);\n\n useEffect(() => on(emitter, event, syncValue), [emitter, event]);\n return value;\n}\n\n/**\n * Get field value state\n */\nexport function useValue(form: Form, name: Name): any {\n return useValueByPath(form, createPath(name));\n}\n\n/**\n * Get field value state by path\n */\nexport function useValueByPath(form: Form, path: Path): any {\n return useWatch(\n form.emitter,\n 'change',\n getValueByPath.bind(null, form, path)\n );\n}\n\n/**\n * Get field touched state\n */\nexport function useTouched(form: Form, name: Name): boolean {\n return useTouchedByPath(form, createPath(name));\n}\n\n/**\n * Get field touched state by path\n */\nexport function useTouchedByPath(form: Form, path: Path): boolean {\n return useWatch(\n form.emitter,\n 'touched',\n hasTouchedByPath.bind(null, form, path)\n );\n}\n\n/**\n * Get field error state\n */\nexport function useError(form: Form, name: Name): string | undefined {\n return useErrorByPath(form, createPath(name));\n}\n\n/**\n * Get field error state by path\n */\nexport function useErrorByPath(form: Form, path: Path): string | undefined {\n return useWatch(\n form.emitter,\n 'errors',\n getErrorByPath.bind(null, form, path)\n );\n}\n\nexport function useIsDirty(form: Form): boolean {\n return useWatch(form.emitter, 'touched', isDirty.bind(null, form));\n}\n\nexport function useHasErrors(form: Form): boolean {\n return useWatch(form.emitter, 'errors', hasErrors.bind(null, form));\n}\n\nexport function useIsSubmitting(form: Form): boolean {\n return useWatch(form.emitter, 'submitting', () => form.isSubmitting);\n}\n\nexport function useSubmitCount(form: Form): number {\n return useWatch(form.emitter, 'submitCount', () => form.submitCount);\n}\n","import {useMemo} from 'react';\nimport create from '../path';\nimport type {Name, Path} from '../path';\nimport {normalizePath} from '../util';\n\nexport default function usePath(name: Name): Path {\n const path = useMemo(() => create(normalizePath(name)), [name]);\n return useMemo(() => path, [path.key]);\n}\n","import {useCallback, useRef, type MutableRefObject} from 'react';\n\nexport default function useStage<T>(value: T): MutableRefObject<T> {\n const ref = useRef(value);\n ref.current = value;\n return ref;\n}\n\nexport function useStageFn<T extends (...args: any[]) => any>(fn: T): T {\n const ref = useStage(fn);\n return useCallback(\n (...params: any[]) => ref.current(...params),\n []\n ) as unknown as T;\n}\n","import {useEffect, useRef} from 'react';\nimport {useFormContext} from '../context';\nimport {\n getValueByPath,\n setErrorByPath,\n setValidatingByPath,\n unsetValidatingByPath\n} from '../form';\nimport type {Form} from '../form';\nimport type {Path} from '../path';\nimport {useStageFn} from './stage';\nimport {isPromise} from '../util';\n\nexport type Validator = (\n value: any,\n meta: {form: Form; path: Path}\n) => string | undefined | Promise<string | undefined>;\n\nexport default function useValidate(\n validate: Validator | undefined,\n path: Path\n): () => void {\n const form = useFormContext() as Form;\n const lockRef = useRef<object | null>(null);\n const validateRef = useRef(validate);\n validateRef.current = validate;\n\n useEffect(() => {\n const validator = () => {\n const fn = validateRef.current;\n if (!fn) return;\n const result = fn(getValueByPath(form, path), {form, path});\n if (!isPromise(result)) {\n setErrorByPath(form, path, result);\n return;\n }\n const lock = (lockRef.current = {});\n setValidatingByPath(form, path);\n result\n .then((error: string | undefined) => {\n if (lock === lockRef.current) {\n setErrorByPath(form, path, error);\n }\n })\n .finally(() => {\n if (lock === lockRef.current) {\n unsetValidatingByPath(form, path);\n lockRef.current = null;\n }\n });\n };\n\n form.validators.set(path.key, validator);\n return () => {\n form.validators.delete(path.key);\n };\n }, [form, path.key]);\n\n return useStageFn(() => form.validators.get(path.key)?.());\n}\n","import {useEffect, useMemo} from 'react';\nimport {useFormContext} from '../context';\nimport {removeFieldByPath, setTouchedByPath, setValueByPath} from '../form';\nimport type {Form} from '../form';\nimport type {Name, Path} from '../path';\nimport {useErrorByPath, useValueByPath} from './form';\nimport usePath from './path';\nimport useValidate from './validate';\nimport {useStageFn} from './stage';\n\ninterface UseFieldOptions {\n form?: Form;\n name: Name;\n initialValue?: any;\n shouldUnregister?: boolean;\n validate?: (\n value: any,\n meta: {form: Form; path: Path}\n ) => string | undefined | Promise<string | undefined>;\n [key: string]: any;\n}\n\ninterface UseFieldResult {\n value: any;\n error: string | undefined;\n onChange: (v: any) => void;\n onBlur: () => void;\n name: string;\n [key: string]: any;\n}\n\nexport default function useField({\n form: f1,\n name,\n initialValue,\n shouldUnregister,\n validate,\n ...rest\n}: UseFieldOptions): UseFieldResult {\n const f2 = useFormContext();\n const form = f1 || f2;\n const path = usePath(name);\n\n const validator = useValidate(validate, path);\n\n useMemo(() => {\n if (initialValue !== undefined) setValueByPath(form, path, initialValue);\n }, [form, path]);\n\n const error = useErrorByPath(form, path);\n const value = useValueByPath(form, path);\n\n const onChange = useStageFn((v: any) => {\n setValueByPath(form, path, v);\n if (\n form.validateOnChange ||\n (form.revalidateOnChange && error && error !== undefined)\n )\n validator();\n });\n\n const onBlur = useStageFn(() => {\n setTouchedByPath(form, path);\n if (form.validateOnBlur || (form.revalidateOnBlur && error !== undefined))\n validator();\n });\n\n useEffect(\n () => () => {\n if (shouldUnregister !== false) {\n removeFieldByPath(form, path);\n }\n },\n [path, form, shouldUnregister]\n );\n\n return {...rest, value, error, onChange, onBlur, name: path.key};\n}\n","import {useCallback, useEffect, useMemo, useReducer, useRef} from 'react';\nimport {on} from '@for-fun/event-emitter';\nimport {useFormContext} from '../context';\nimport {getValueByPath, setValueByPath} from '../form';\nimport type {Form, Name} from '../form';\nimport usePath from './path';\nimport {useStageFn} from './stage';\n\nlet idCounter = 0;\nfunction generateId(): string {\n return `_${++idCounter}`;\n}\n\ninterface FieldArrayItem {\n id: string;\n index: number;\n}\n\nexport default function useFieldArray(options: {name: Name; form?: Form}): {\n fields: FieldArrayItem[];\n append: (value: any) => void;\n prepend: (value: any) => void;\n insert: (index: number, value: any) => void;\n remove: (index: number) => void;\n swap: (from: number, to: number) => void;\n move: (from: number, to: number) => void;\n} {\n const f2 = useFormContext();\n const form = options.form || f2;\n const path = usePath(options.name);\n const idsRef = useRef<string[]>([]);\n\n const getArray = useCallback(\n (): any[] => getValueByPath(form, path) || [],\n [form, path]\n );\n\n const setArray = useCallback(\n (arr: any[]) => {\n setValueByPath(form, path, arr);\n },\n [form, path]\n );\n\n const computeFields = useCallback(() => {\n const arr = getArray();\n while (idsRef.current.length < arr.length) {\n idsRef.current.push(generateId());\n }\n while (idsRef.current.length > arr.length) {\n idsRef.current.pop();\n }\n return idsRef.current.map((id, index) => ({id, index}));\n }, [getArray]);\n\n // Use useWatch pattern: subscribe to 'change' events and re-compute fields\n const [fields, syncFields] = useReducer(\n computeFields,\n undefined,\n computeFields\n );\n useEffect(() => on(form.emitter, 'change', syncFields), [form.emitter]);\n\n const append = useStageFn((value: any) => {\n const arr = getArray();\n idsRef.current.push(generateId());\n setArray([...arr, value]);\n });\n\n const prepend = useStageFn((value: any) => {\n const arr = getArray();\n idsRef.current.unshift(generateId());\n setArray([value, ...arr]);\n });\n\n const insert = useStageFn((index: number, value: any) => {\n const arr = getArray();\n idsRef.current.splice(index, 0, generateId());\n const newArr = [...arr.slice(0, index), value, ...arr.slice(index)];\n setArray(newArr);\n });\n\n const remove = useStageFn((index: number) => {\n const arr = getArray();\n idsRef.current.splice(index, 1);\n const newArr = arr.filter((_: any, i: number) => i !== index);\n setArray(newArr);\n });\n\n const swap = useStageFn((from: number, to: number) => {\n const arr = getArray();\n [idsRef.current[from], idsRef.current[to]] = [\n idsRef.current[to],\n idsRef.current[from]\n ];\n const newArr = [...arr];\n [newArr[from], newArr[to]] = [newArr[to], newArr[from]];\n setArray(newArr);\n });\n\n const move = useStageFn((from: number, to: number) => {\n const arr = getArray();\n const [id] = idsRef.current.splice(from, 1);\n idsRef.current.splice(to, 0, id);\n const newArr = [...arr];\n const [item] = newArr.splice(from, 1);\n newArr.splice(to, 0, item);\n setArray(newArr);\n });\n\n return {fields, append, prepend, insert, remove, swap, move};\n}\n","import * as React from 'react';\nimport {\n getErrors,\n getValues,\n validate,\n setIsSubmitting,\n incrementSubmitCount,\n setSubmitSuccessful\n} from '../form';\nimport type {Form} from '../form';\nimport {FormProvider} from '../context';\nimport useForm from '../hooks/form';\n\ninterface FormProps<T extends Record<string, any> = any> extends Omit<\n React.FormHTMLAttributes<HTMLFormElement>,\n 'onSubmit'\n> {\n form?: Form<T>;\n initialValues?: T;\n onSubmit?: (values: T, e: React.FormEvent) => void;\n onValidSubmit?: (values: T, e: React.FormEvent) => void;\n onInvalidSubmit?: (errors: string[], values: T) => void;\n}\n\nexport default function Form<T extends Record<string, any> = any>({\n form: f1,\n initialValues,\n onSubmit,\n onValidSubmit,\n onInvalidSubmit,\n ...props\n}: FormProps<T>) {\n const f2 = useForm<T>({initialValues});\n const form = f1 || f2;\n\n async function handleSubmit(e: React.FormEvent<HTMLFormElement>) {\n e.preventDefault();\n setIsSubmitting(form, true);\n incrementSubmitCount(form);\n\n const error = await validate(form);\n const values = getValues(form) as T;\n\n if (error) {\n setIsSubmitting(form, false);\n setSubmitSuccessful(form, false);\n if (onInvalidSubmit) onInvalidSubmit(getErrors(form), values);\n return;\n }\n\n try {\n if (onSubmit) await onSubmit(values, e);\n if (onValidSubmit) onValidSubmit(values, e);\n setSubmitSuccessful(form, true);\n } catch {\n setSubmitSuccessful(form, false);\n } finally {\n setIsSubmitting(form, false);\n }\n }\n\n return (\n <FormProvider value={form}>\n <form {...props} noValidate onSubmit={handleSubmit} />\n </FormProvider>\n );\n}\n","import * as React from 'react';\nimport useField from '../hooks/field';\nimport type {Name} from '../path';\n\ninterface UseFieldOptions {\n form?: any;\n name?: Name;\n initialValue?: any;\n validate?: (\n value: any,\n meta: {form: any; path: any}\n ) => string | undefined | Promise<string | undefined>;\n [key: string]: any;\n}\n\ninterface FieldProps extends UseFieldOptions {\n as?: React.ComponentType<any>;\n asProps?: Record<string, any>;\n eventToValue?: (e: any) => any;\n valueToProps?: (value: any) => Record<string, any>;\n}\n\nconst buildInError = Symbol('buildInError');\n\nfunction setRef<T>(ref: React.Ref<T> | undefined, value: T | null) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n (ref as React.MutableRefObject<T | null>).current = value;\n }\n}\n\nexport const Field = React.forwardRef<HTMLInputElement, FieldProps>(\n ({validate, eventToValue, initialValue, name, asProps, ...props}, ref) => {\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n const mergedRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n innerRef.current = node;\n setRef(ref, node);\n },\n [ref]\n );\n const {as, value, valueToProps, onChange, error, ...rest} = useField({\n ...props,\n name: name!,\n initialValue,\n validate: (...params: [any, any]) => {\n if (innerRef.current?.checkValidity() === false)\n return buildInError as any;\n if (validate) return validate(...params);\n }\n });\n const Component = as || 'input';\n\n React.useEffect(() => {\n if (!innerRef.current) return;\n if ((error as any) === buildInError) {\n innerRef.current.setCustomValidity('');\n innerRef.current.reportValidity();\n return;\n }\n\n if (typeof error === 'string') {\n innerRef.current.setCustomValidity(error);\n innerRef.current.reportValidity();\n }\n }, [error]);\n\n const toValue = eventToValue ?? ((e: any) => e.target.value);\n\n return (\n <Component\n {...rest}\n {...asProps}\n {...(valueToProps ? valueToProps(value) : {value})}\n onChange={(e: any) => onChange(toValue(e))}\n ref={mergedRef}\n />\n );\n }\n);\n\ninterface CheckboxProps extends UseFieldOptions {}\n\nexport const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n ({name, ...props}, ref) => {\n const {value, onChange, error, ...rest} = useField({...props, name: name!});\n return (\n <input\n {...rest}\n type=\"checkbox\"\n checked={!!value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n onChange(e.target.checked)\n }\n ref={ref}\n />\n );\n }\n);\n"],"names":["create","emit","_emit","createEmitter","createPath","createForm"],"mappings":";;;AAAA,SAAS,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE;AACzB,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,EAAE,IAAI,GAAG,EAAE,OAAO,GAAG,CAAC;AACtB,EAAE,IAAI,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AACzB,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACtB,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAASA,QAAM,GAAG;AAClB,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC;AACnB,CAAC;AACD,SAASC,MAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AACvB,EAAE,KAAK,IAAI,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE;AAC9G,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACrC,GAAG;AACH,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE;AAC3C,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AACjC,GAAG,CAAC,CAAC;AACL,CAAC;AAQD,SAAS,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;AAC9B,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC5B,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnB,EAAE,OAAO,YAAY;AACrB,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/B,GAAG,CAAC;AACJ;;AC7BO,SAAS,cACd,IACqB,EAAA;AACrB,EAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,IAAI,CAAA,EAAU,OAAA,IAAA,CAAA;AAChC,EAAA,OAAO,IACJ,CAAA,KAAA,CAAM,OAAO,CAAA,CACb,IAAI,CAAS,IAAA,KAAA,IAAA,CAAK,QAAS,CAAA,GAAG,IAAI,MAAO,CAAA,QAAA,CAAS,IAAM,EAAA,EAAE,IAAI,IAAK,CAAA,CAAA;AACxE,CAAA;AAEgB,SAAA,GAAA,CAAI,QAAa,IAAgC,EAAA;AAC/D,EAAA,OAAO,IAAK,CAAA,MAAA,CAAO,CAAC,OAAA,EAAc,CAAuB,KAAA;AACvD,IAAI,IAAA,OAAA,IAAW,MAAa,OAAA,KAAA,CAAA,CAAA;AAC5B,IAAA,OAAO,QAAQ,CAAC,CAAA,CAAA;AAAA,KACf,MAAM,CAAA,CAAA;AACX,CAAA;AAEgB,SAAA,GAAA,CAAI,MAAa,EAAA,IAAA,EAA2B,KAAiB,EAAA;AAC3E,EAAI,IAAA,CAAC,IAAK,CAAA,MAAA,EAAe,OAAA,KAAA,CAAA;AAEzB,EAAA,MAAM,CAAC,IAAA,EAAM,GAAG,KAAK,CAAI,GAAA,IAAA,CAAA;AACzB,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAM,MAAA,GAAA,GAAM,MAAM,OAAQ,CAAA,MAAM,IAAI,MAAO,CAAA,KAAA,KAAU,EAAC,CAAA;AACtD,IAAA,GAAA,CAAI,IAAI,CAAI,GAAA,GAAA,CAAI,IAAI,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA,CAAA;AACvC,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,EAAC,GAAG,MAAQ,EAAA,CAAC,IAAI,GAAG,GAAI,CAAA,MAAA,IAAU,MAAO,CAAA,IAAI,CAAG,EAAA,KAAA,EAAO,KAAK,CAAC,EAAA,CAAA;AACtE,CAAA;AAcO,SAAS,UAAU,KAAmC,EAAA;AAC3D,EAAO,OAAA,KAAA,IAAS,OAAO,KAAA,CAAM,IAAS,KAAA,UAAA,CAAA;AACxC,CAAA;AAEO,SAAS,SACd,CAAA,OAAA,EACA,KACA,EAAA,SAAA,EACA,QACe,EAAA;AACf,EAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAW,KAAA;AAC5C,IAAA,IAAI,QAAS,EAAA,EAAU,OAAA,KAAK,MAAO,EAAA,CAAA;AACnC,IAAA,IAAI,SAAU,EAAA,EAAU,OAAA,KAAK,OAAQ,EAAA,CAAA;AAErC,IAAA,MAAM,GAAM,GAAA,EAAA,CAAG,OAAS,EAAA,KAAA,EAAc,MAAM;AAC1C,MAAA,IAAI,UAAY,EAAA;AACd,QAAI,GAAA,EAAA,CAAA;AACJ,QAAO,MAAA,EAAA,CAAA;AACP,QAAA,OAAA;AAAA,OACF;AACA,MAAA,IAAI,WAAa,EAAA,OAAA;AACjB,MAAI,GAAA,EAAA,CAAA;AACJ,MAAQ,OAAA,EAAA,CAAA;AAAA,KACT,CAAA,CAAA;AAAA,GACF,CAAA,CAAA;AACH;;AC9DA,SAAwBD,SAAO,IAAkB,EAAA;AAC/C,EAAM,MAAA,KAAA,GAAQ,cAAc,IAAI,CAAA,CAAA;AAChC,EAAA,OAAO,EAAC,KAAO,EAAA,GAAA,EAAK,IAAK,CAAA,SAAA,CAAU,KAAK,CAAC,EAAA,CAAA;AAC3C;;ACHA,MAAM,IAAO,GAAAE,MAAA,CAAA;AA2Cb,SAAwB,OACtB,OACS,EAAA;AACT,EAAA,MAAM,UAAUC,QAAc,EAAA,CAAA;AAC9B,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,kBAAoB,EAAA,IAAA;AAAA,IACpB,GAAG,OAAA;AAAA,IACH,aAAA,EAAgB,OAAS,EAAA,aAAA,IAAiB,EAAC;AAAA,IAC3C,MAAA,sBAAY,GAAI,EAAA;AAAA,IAChB,MAAA,sBAAY,GAAI,EAAA;AAAA,IAChB,OAAA,sBAAa,GAAI,EAAA;AAAA,IACjB,UAAA,sBAAgB,GAAI,EAAA;AAAA,IACpB,UAAA,sBAAgB,GAAI,EAAA;AAAA,IACpB,YAAc,EAAA,KAAA;AAAA,IACd,WAAa,EAAA,CAAA;AAAA,IACb,kBAAoB,EAAA,KAAA,CAAA;AAAA,GACtB,CAAA;AACF,CAAA;AAMO,SAAS,UAAU,IAAiB,EAAA;AACzC,EAAA,OAAO,MAAM,IAAK,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,EAAM,CAAE,CAAA,MAAA;AAAA,IACpC,CAAC,CAAA,EAAG,CAAM,KAAA,GAAA,CAAI,CAAG,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,CAAG,EAAA,IAAA,CAAK,MAAO,CAAA,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,IAClD,IAAK,CAAA,aAAA;AAAA,GACP,CAAA;AACF,CAAA;AAOgB,SAAA,QAAA,CAAS,MAAY,IAAiB,EAAA;AACpD,EAAA,OAAO,cAAe,CAAA,IAAA,EAAMC,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAC9C,CAAA;AAOO,SAAS,cAAe,CAAA,EAAC,aAAe,EAAA,MAAA,IAAe,IAAiB,EAAA;AAC7E,EAAI,IAAA,MAAA,CAAO,IAAI,IAAK,CAAA,GAAG,GAAU,OAAA,MAAA,CAAO,GAAI,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AACpD,EAAO,OAAA,GAAA,CAAI,aAAe,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AACtC,CAAA;AAQgB,SAAA,QAAA,CAAS,IAAY,EAAA,IAAA,EAAY,KAAkB,EAAA;AACjE,EAAA,cAAA,CAAe,IAAM,EAAAA,QAAA,CAAW,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAC9C,CAAA;AAQO,SAAS,eACd,EAAC,OAAA,EAAS,MAAM,EAAA,EAChB,MACA,KACM,EAAA;AACN,EAAO,MAAA,CAAA,GAAA,CAAI,IAAK,CAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAC1B,EAAK,IAAA,CAAA,OAAA,EAAS,UAAU,IAAI,CAAA,CAAA;AAC9B,CAAA;AAOgB,SAAA,QAAA,CAAS,MAAY,IAAgC,EAAA;AACnE,EAAA,OAAO,cAAe,CAAA,IAAA,EAAMA,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAC9C,CAAA;AAOO,SAAS,cAAe,CAAA,EAAC,MAAM,EAAA,EAAS,IAAgC,EAAA;AAC7E,EAAO,OAAA,MAAA,CAAO,GAAI,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAC5B,CAAA;AAOgB,SAAA,SAAA,CAAU,EAAC,MAAA,EAAyB,EAAA;AAClD,EAAA,OAAO,KAAM,CAAA,IAAA,CAAK,MAAO,CAAA,MAAA,EAAQ,CAAA,CAAA;AACnC,CAAA;AAOgB,SAAA,aAAA,CAAc,EAAC,MAAA,EAAmC,EAAA;AAChE,EAAA,OAAO,MAAO,CAAA,MAAA,EAAS,CAAA,IAAA,EAAO,CAAA,KAAA,CAAA;AAChC,CAAA;AAEO,SAAS,sBACd,EAAC,OAAA,EAAS,YACV,EAAA,EAAC,KACK,EAAA;AACN,EAAA,UAAA,CAAW,OAAO,GAAG,CAAA,CAAA;AACrB,EAAA,IAAA,CAAK,SAAS,YAAY,CAAA,CAAA;AAC5B,CAAA;AAEO,SAAS,oBACd,EAAC,OAAA,EAAS,YACV,EAAA,EAAC,KACK,EAAA;AACN,EAAA,UAAA,CAAW,IAAI,GAAG,CAAA,CAAA;AAClB,EAAA,IAAA,CAAK,SAAS,YAAY,CAAA,CAAA;AAC5B,CAAA;AAQgB,SAAA,QAAA,CACd,IACA,EAAA,IAAA,EACA,KACM,EAAA;AACN,EAAA,cAAA,CAAe,IAAM,EAAAA,QAAA,CAAW,IAAI,CAAA,EAAG,KAAK,CAAA,CAAA;AAC9C,CAAA;AAQO,SAAS,eACd,EAAC,OAAA,EAAS,MAAM,EAAA,EAChB,MACA,KACM,EAAA;AACN,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,MAAA,CAAA,GAAA,CAAI,IAAK,CAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,GACrB,MAAA;AACL,IAAO,MAAA,CAAA,MAAA,CAAO,KAAK,GAAG,CAAA,CAAA;AAAA,GACxB;AACA,EAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AACxB,CAAA;AAMO,SAAS,WAAY,CAAA,EAAC,OAAS,EAAA,MAAA,EAAqB,EAAA;AACzD,EAAA,MAAA,CAAO,KAAM,EAAA,CAAA;AACb,EAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AACxB,CAAA;AAOgB,SAAA,UAAA,CAAW,MAAY,IAAkB,EAAA;AACvD,EAAiB,gBAAA,CAAA,IAAA,EAAMA,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AACzC,CAAA;AAOO,SAAS,iBAAiB,EAAC,OAAA,EAAS,SAAgB,EAAA,EAAC,KAAkB,EAAA;AAC5E,EAAI,IAAA,OAAA,CAAQ,GAAI,CAAA,GAAG,CAAG,EAAA,OAAA;AACtB,EAAA,OAAA,CAAQ,IAAI,GAAG,CAAA,CAAA;AACf,EAAA,IAAA,CAAK,SAAS,SAAS,CAAA,CAAA;AACzB,CAAA;AAOgB,SAAA,UAAA,CAAW,MAAY,IAAqB,EAAA;AAC1D,EAAA,OAAO,gBAAiB,CAAA,IAAA,EAAMA,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAChD,CAAA;AAOO,SAAS,gBAAiB,CAAA,EAAC,OAAO,EAAA,EAAS,IAAqB,EAAA;AACrE,EAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAC7B,CAAA;AAMO,SAAS,OAAQ,CAAA,EAAC,aAAe,EAAA,MAAA,EAAwB,EAAA;AAC9D,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAQ,EAAA;AACjC,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC3B,IAAA,IAAI,GAAI,CAAA,aAAA,EAAe,IAAI,CAAA,KAAM,OAAc,OAAA,IAAA,CAAA;AAAA,GACjD;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAMgB,SAAA,SAAA,CAAU,EAAC,OAAA,EAAyB,EAAA;AAClD,EAAA,OAAO,QAAQ,IAAO,GAAA,CAAA,CAAA;AACxB,CAAA;AAOgB,SAAA,WAAA,CAAY,MAAY,IAAkB,EAAA;AACxD,EAAkB,iBAAA,CAAA,IAAA,EAAMA,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAC1C,CAAA;AAOO,SAAS,iBAAkB,CAAA,IAAA,EAAY,EAAC,GAAA,EAAkB,EAAA;AAC/D,EAAA,MAAM,EAAC,OAAS,EAAA,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,YAAc,GAAA,IAAA,CAAA;AACvD,EAAA,MAAA,CAAO,OAAO,GAAG,CAAA,CAAA;AACjB,EAAA,OAAA,CAAQ,OAAO,GAAG,CAAA,CAAA;AAClB,EAAA,MAAA,CAAO,OAAO,GAAG,CAAA,CAAA;AACjB,EAAA,UAAA,CAAW,OAAO,GAAG,CAAA,CAAA;AACrB,EAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AACtB,EAAA,IAAA,CAAK,SAAS,SAAS,CAAA,CAAA;AACvB,EAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AACtB,EAAA,IAAA,CAAK,SAAS,YAAY,CAAA,CAAA;AAC5B,CAAA;AAOgB,SAAA,gBAAA,CAAiB,MAAY,aAA0B,EAAA;AACrE,EAAI,IAAA,IAAA,CAAK,kBAAkB,aAAe,EAAA,OAAA;AAC1C,EAAA,IAAA,CAAK,aAAgB,GAAA,aAAA,CAAA;AACrB,EAAA,IAAA,CAAK,OAAO,KAAM,EAAA,CAAA;AAClB,EAAK,IAAA,CAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AAC7B,CAAA;AAOgB,SAAA,KAAA,CAAM,MAAY,aAA2B,EAAA;AAC3D,EAAA,IAAA,CAAK,aAAgB,GAAA,aAAA,CAAA;AACrB,EAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAChB,EAAA,MAAM,EAAC,OAAA,EAAS,OAAS,EAAA,MAAA,EAAU,GAAA,IAAA,CAAA;AACnC,EAAA,MAAA,CAAO,KAAM,EAAA,CAAA;AACb,EAAA,OAAA,CAAQ,KAAM,EAAA,CAAA;AACd,EAAA,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAA;AACtB,EAAA,IAAA,CAAK,SAAS,SAAS,CAAA,CAAA;AACvB,EAAA,IAAA,CAAK,SAAS,OAAO,CAAA,CAAA;AACvB,CAAA;AAKgB,SAAA,SAAA,CAAU,EAAC,MAAA,EAAwB,EAAA;AACjD,EAAA,OAAO,OAAO,IAAO,GAAA,CAAA,CAAA;AACvB,CAAA;AAMO,SAAS,QAAQ,IAAkB,EAAA;AACxC,EAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAQ,CAAa,SAAA,KAAA,SAAA,EAAW,CAAA,CAAA;AAClD,CAAA;AAOA,eAAsB,eAAe,IAA2B,EAAA;AAC9D,EAAA,IAAA,CAAK,UAAW,CAAA,OAAA,CAAQ,CAAa,SAAA,KAAA,SAAA,EAAW,CAAA,CAAA;AAEhD,EAAM,MAAA,SAAA;AAAA,IACJ,IAAK,CAAA,OAAA;AAAA,IACL,YAAA;AAAA,IACA,MAAM,CAAC,IAAA,CAAK,UAAW,CAAA,IAAA;AAAA,IACvB,MAAM,UAAU,IAAI,CAAA;AAAA,GACtB,CAAE,MAAM,MAAM;AACZ,IAAA,MAAM,IAAI,KAAA,CAAM,aAAc,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,GACpC,CAAA,CAAA;AAED,EAAA,IAAI,KAAK,QAAU,EAAA;AACjB,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAS,CAAA,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA;AAClD,IAAA,MAAM,UAAU,MAAS,GAAA,MAAA,CAAO,OAAQ,CAAA,MAAM,IAAI,EAAC,CAAA;AACnD,IAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,MAAA,OAAA,CAAQ,OAAQ,CAAA,CAAC,CAAC,KAAA,EAAO,KAAK,CAAM,KAAA;AAClC,QAAS,QAAA,CAAA,IAAA,EAAM,OAAO,KAAK,CAAA,CAAA;AAAA,OAC5B,CAAA,CAAA;AACD,MAAA,MAAM,IAAI,KAAA,CAAM,aAAc,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,KACrC;AAAA,GACF;AACF,CAAA;AAOA,eAAsB,SAAS,IAAoC,EAAA;AACjE,EAAA,OAAO,eAAe,IAAI,CAAA,CAAE,KAAM,CAAA,CAAA,CAAA,KAAK,EAAE,OAAO,CAAA,CAAA;AAClD,CAAA;AAEgB,SAAA,eAAA,CAAgB,MAAY,KAAsB,EAAA;AAChE,EAAA,IAAA,CAAK,YAAe,GAAA,KAAA,CAAA;AACpB,EAAK,IAAA,CAAA,IAAA,CAAK,SAAS,YAAY,CAAA,CAAA;AACjC,CAAA;AAEO,SAAS,qBAAqB,IAAkB,EAAA;AACrD,EAAK,IAAA,CAAA,WAAA,EAAA,CAAA;AACL,EAAK,IAAA,CAAA,IAAA,CAAK,SAAS,aAAa,CAAA,CAAA;AAClC,CAAA;AAEgB,SAAA,mBAAA,CAAoB,MAAY,KAAsB,EAAA;AACpE,EAAA,IAAA,CAAK,kBAAqB,GAAA,KAAA,CAAA;AAC1B,EAAK,IAAA,CAAA,IAAA,CAAK,SAAS,kBAAkB,CAAA,CAAA;AACvC;;AC1Ya,MAAA,WAAA,GAAc,cAAmB,IAAI,EAAA;AAE3C,MAAM,eAAe,WAAY,CAAA,SAAA;AAEjC,SAAS,cAAsB,GAAA;AACpC,EAAM,MAAA,IAAA,GAAO,WAAW,WAAW,CAAA,CAAA;AACnC,EAAA,IAAI,CAAC,IAAA,EAAY,MAAA,IAAI,MAAM,kBAAkB,CAAA,CAAA;AAC7C,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEa,MAAA,oBAAA,GAAuB,cAAmB,IAAI,EAAA;AAEpD,MAAM,wBAAwB,oBAAqB,CAAA,SAAA;AAEnD,SAAS,uBAA+B,GAAA;AAC7C,EAAM,MAAA,KAAA,GAAQ,WAAW,oBAAoB,CAAA,CAAA;AAC7C,EAAA,IAAI,CAAC,KAAA,EAAa,MAAA,IAAI,MAAM,mBAAmB,CAAA,CAAA;AAC/C,EAAO,OAAA,KAAA,CAAA;AACT;;ACLA,SAAwB,QACtB,OACS,EAAA;AACT,EAAM,MAAA,GAAA,GAAM,OAAuB,IAAI,CAAA,CAAA;AACvC,EAAA,MAAM,OAAQ,GAAI,CAAA,OAAA,GAAU,GAAI,CAAA,OAAA,IAAWC,OAAW,OAAO,CAAA,CAAA;AAC7D,EAAM,MAAA,aAAA,GAAgB,WAAW,OAAQ,CAAA,aAAA,CAAA;AAEzC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,gBAAA,CAAiB,MAAM,aAAa,CAAA,CAAA;AAAA,GACtC,EAAG,CAAC,aAAa,CAAC,CAAA,CAAA;AAElB,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEgB,SAAA,QAAA,CACd,OACA,EAAA,KAAA,EACA,MACG,EAAA;AACH,EAAA,MAAM,CAAC,KAAO,EAAA,SAAS,IAAI,UAAW,CAAA,MAAA,EAAQ,QAAW,MAAM,CAAA,CAAA;AAE/D,EAAU,SAAA,CAAA,MAAM,GAAG,OAAS,EAAA,KAAA,EAAO,SAAS,CAAG,EAAA,CAAC,OAAS,EAAA,KAAK,CAAC,CAAA,CAAA;AAC/D,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAKgB,SAAA,QAAA,CAAS,MAAY,IAAiB,EAAA;AACpD,EAAA,OAAO,cAAe,CAAA,IAAA,EAAMD,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAC9C,CAAA;AAKgB,SAAA,cAAA,CAAe,MAAY,IAAiB,EAAA;AAC1D,EAAO,OAAA,QAAA;AAAA,IACL,IAAK,CAAA,OAAA;AAAA,IACL,QAAA;AAAA,IACA,cAAe,CAAA,IAAA,CAAK,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AAAA,GACtC,CAAA;AACF,CAAA;AAKgB,SAAA,UAAA,CAAW,MAAY,IAAqB,EAAA;AAC1D,EAAA,OAAO,gBAAiB,CAAA,IAAA,EAAMA,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAChD,CAAA;AAKgB,SAAA,gBAAA,CAAiB,MAAY,IAAqB,EAAA;AAChE,EAAO,OAAA,QAAA;AAAA,IACL,IAAK,CAAA,OAAA;AAAA,IACL,SAAA;AAAA,IACA,gBAAiB,CAAA,IAAA,CAAK,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AAAA,GACxC,CAAA;AACF,CAAA;AAKgB,SAAA,QAAA,CAAS,MAAY,IAAgC,EAAA;AACnE,EAAA,OAAO,cAAe,CAAA,IAAA,EAAMA,QAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAC9C,CAAA;AAKgB,SAAA,cAAA,CAAe,MAAY,IAAgC,EAAA;AACzE,EAAO,OAAA,QAAA;AAAA,IACL,IAAK,CAAA,OAAA;AAAA,IACL,QAAA;AAAA,IACA,cAAe,CAAA,IAAA,CAAK,IAAM,EAAA,IAAA,EAAM,IAAI,CAAA;AAAA,GACtC,CAAA;AACF,CAAA;AAEO,SAAS,WAAW,IAAqB,EAAA;AAC9C,EAAO,OAAA,QAAA,CAAS,KAAK,OAAS,EAAA,SAAA,EAAW,QAAQ,IAAK,CAAA,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA;AACnE,CAAA;AAEO,SAAS,aAAa,IAAqB,EAAA;AAChD,EAAO,OAAA,QAAA,CAAS,KAAK,OAAS,EAAA,QAAA,EAAU,UAAU,IAAK,CAAA,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA;AACpE,CAAA;AAEO,SAAS,gBAAgB,IAAqB,EAAA;AACnD,EAAA,OAAO,SAAS,IAAK,CAAA,OAAA,EAAS,YAAc,EAAA,MAAM,KAAK,YAAY,CAAA,CAAA;AACrE,CAAA;AAEO,SAAS,eAAe,IAAoB,EAAA;AACjD,EAAA,OAAO,SAAS,IAAK,CAAA,OAAA,EAAS,aAAe,EAAA,MAAM,KAAK,WAAW,CAAA,CAAA;AACrE;;ACvGA,SAAwB,QAAQ,IAAkB,EAAA;AAChD,EAAM,MAAA,IAAA,GAAO,OAAQ,CAAA,MAAMJ,QAAO,CAAA,aAAA,CAAc,IAAI,CAAC,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA,CAAA;AAC9D,EAAA,OAAO,QAAQ,MAAM,IAAA,EAAM,CAAC,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AACvC;;ACNA,SAAwB,SAAY,KAA+B,EAAA;AACjE,EAAM,MAAA,GAAA,GAAM,OAAO,KAAK,CAAA,CAAA;AACxB,EAAA,GAAA,CAAI,OAAU,GAAA,KAAA,CAAA;AACd,EAAO,OAAA,GAAA,CAAA;AACT,CAAA;AAEO,SAAS,WAA8C,EAAU,EAAA;AACtE,EAAM,MAAA,GAAA,GAAM,SAAS,EAAE,CAAA,CAAA;AACvB,EAAO,OAAA,WAAA;AAAA,IACL,CAAI,GAAA,MAAA,KAAkB,GAAI,CAAA,OAAA,CAAQ,GAAG,MAAM,CAAA;AAAA,IAC3C,EAAC;AAAA,GACH,CAAA;AACF;;ACIwB,SAAA,WAAA,CACtB,UACA,IACY,EAAA;AACZ,EAAA,MAAM,OAAO,cAAe,EAAA,CAAA;AAC5B,EAAM,MAAA,OAAA,GAAU,OAAsB,IAAI,CAAA,CAAA;AAC1C,EAAM,MAAA,WAAA,GAAc,OAAO,QAAQ,CAAA,CAAA;AACnC,EAAA,WAAA,CAAY,OAAU,GAAA,QAAA,CAAA;AAEtB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,YAAY,MAAM;AACtB,MAAA,MAAM,KAAK,WAAY,CAAA,OAAA,CAAA;AACvB,MAAA,IAAI,CAAC,EAAI,EAAA,OAAA;AACT,MAAM,MAAA,MAAA,GAAS,GAAG,cAAe,CAAA,IAAA,EAAM,IAAI,CAAG,EAAA,EAAC,IAAM,EAAA,IAAA,EAAK,CAAA,CAAA;AAC1D,MAAI,IAAA,CAAC,SAAU,CAAA,MAAM,CAAG,EAAA;AACtB,QAAe,cAAA,CAAA,IAAA,EAAM,MAAM,MAAM,CAAA,CAAA;AACjC,QAAA,OAAA;AAAA,OACF;AACA,MAAM,MAAA,IAAA,GAAQ,OAAQ,CAAA,OAAA,GAAU,EAAC,CAAA;AACjC,MAAA,mBAAA,CAAoB,MAAM,IAAI,CAAA,CAAA;AAC9B,MACG,MAAA,CAAA,IAAA,CAAK,CAAC,KAA8B,KAAA;AACnC,QAAI,IAAA,IAAA,KAAS,QAAQ,OAAS,EAAA;AAC5B,UAAe,cAAA,CAAA,IAAA,EAAM,MAAM,KAAK,CAAA,CAAA;AAAA,SAClC;AAAA,OACD,CACA,CAAA,OAAA,CAAQ,MAAM;AACb,QAAI,IAAA,IAAA,KAAS,QAAQ,OAAS,EAAA;AAC5B,UAAA,qBAAA,CAAsB,MAAM,IAAI,CAAA,CAAA;AAChC,UAAA,OAAA,CAAQ,OAAU,GAAA,IAAA,CAAA;AAAA,SACpB;AAAA,OACD,CAAA,CAAA;AAAA,KACL,CAAA;AAEA,IAAA,IAAA,CAAK,UAAW,CAAA,GAAA,CAAI,IAAK,CAAA,GAAA,EAAK,SAAS,CAAA,CAAA;AACvC,IAAA,OAAO,MAAM;AACX,MAAK,IAAA,CAAA,UAAA,CAAW,MAAO,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAAA,KACjC,CAAA;AAAA,GACC,EAAA,CAAC,IAAM,EAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAEnB,EAAO,OAAA,UAAA,CAAW,MAAM,IAAK,CAAA,UAAA,CAAW,IAAI,IAAK,CAAA,GAAG,KAAK,CAAA,CAAA;AAC3D;;AC5BA,SAAwB,QAAS,CAAA;AAAA,EAC/B,IAAM,EAAA,EAAA;AAAA,EACN,IAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG,IAAA;AACL,CAAoC,EAAA;AAClC,EAAA,MAAM,KAAK,cAAe,EAAA,CAAA;AAC1B,EAAA,MAAM,OAAO,EAAM,IAAA,EAAA,CAAA;AACnB,EAAM,MAAA,IAAA,GAAO,QAAQ,IAAI,CAAA,CAAA;AAEzB,EAAM,MAAA,SAAA,GAAY,WAAY,CAAA,QAAA,EAAU,IAAI,CAAA,CAAA;AAE5C,EAAA,OAAA,CAAQ,MAAM;AACZ,IAAA,IAAI,YAAiB,KAAA,KAAA,CAAA,EAA0B,cAAA,CAAA,IAAA,EAAM,MAAM,YAAY,CAAA,CAAA;AAAA,GACtE,EAAA,CAAC,IAAM,EAAA,IAAI,CAAC,CAAA,CAAA;AAEf,EAAM,MAAA,KAAA,GAAQ,cAAe,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AACvC,EAAM,MAAA,KAAA,GAAQ,cAAe,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAEvC,EAAM,MAAA,QAAA,GAAW,UAAW,CAAA,CAAC,CAAW,KAAA;AACtC,IAAe,cAAA,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAC5B,IAAA,IACE,IAAK,CAAA,gBAAA,IACJ,IAAK,CAAA,kBAAA,IAAsB,SAAS,KAAU,KAAA,KAAA,CAAA;AAE/C,MAAU,SAAA,EAAA,CAAA;AAAA,GACb,CAAA,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,WAAW,MAAM;AAC9B,IAAA,gBAAA,CAAiB,MAAM,IAAI,CAAA,CAAA;AAC3B,IAAA,IAAI,IAAK,CAAA,cAAA,IAAmB,IAAK,CAAA,gBAAA,IAAoB,KAAU,KAAA,KAAA,CAAA;AAC7D,MAAU,SAAA,EAAA,CAAA;AAAA,GACb,CAAA,CAAA;AAED,EAAA,SAAA;AAAA,IACE,MAAM,MAAM;AACV,MAAA,IAAI,qBAAqB,KAAO,EAAA;AAC9B,QAAA,iBAAA,CAAkB,MAAM,IAAI,CAAA,CAAA;AAAA,OAC9B;AAAA,KACF;AAAA,IACA,CAAC,IAAM,EAAA,IAAA,EAAM,gBAAgB,CAAA;AAAA,GAC/B,CAAA;AAEA,EAAO,OAAA,EAAC,GAAG,IAAM,EAAA,KAAA,EAAO,OAAO,QAAU,EAAA,MAAA,EAAQ,IAAM,EAAA,IAAA,CAAK,GAAG,EAAA,CAAA;AACjE;;ACrEA,IAAI,SAAY,GAAA,CAAA,CAAA;AAChB,SAAS,UAAqB,GAAA;AAC5B,EAAO,OAAA,CAAA,CAAA,EAAI,EAAE,SAAS,CAAA,CAAA,CAAA;AACxB,CAAA;AAOA,SAAwB,cAAc,OAQpC,EAAA;AACA,EAAA,MAAM,KAAK,cAAe,EAAA,CAAA;AAC1B,EAAM,MAAA,IAAA,GAAO,QAAQ,IAAQ,IAAA,EAAA,CAAA;AAC7B,EAAM,MAAA,IAAA,GAAO,OAAQ,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AACjC,EAAM,MAAA,MAAA,GAAS,MAAiB,CAAA,EAAE,CAAA,CAAA;AAElC,EAAA,MAAM,QAAW,GAAA,WAAA;AAAA,IACf,MAAa,cAAA,CAAe,IAAM,EAAA,IAAI,KAAK,EAAC;AAAA,IAC5C,CAAC,MAAM,IAAI,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,QAAW,GAAA,WAAA;AAAA,IACf,CAAC,GAAe,KAAA;AACd,MAAe,cAAA,CAAA,IAAA,EAAM,MAAM,GAAG,CAAA,CAAA;AAAA,KAChC;AAAA,IACA,CAAC,MAAM,IAAI,CAAA;AAAA,GACb,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,MAAM,MAAM,QAAS,EAAA,CAAA;AACrB,IAAA,OAAO,MAAO,CAAA,OAAA,CAAQ,MAAS,GAAA,GAAA,CAAI,MAAQ,EAAA;AACzC,MAAO,MAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,UAAA,EAAY,CAAA,CAAA;AAAA,KAClC;AACA,IAAA,OAAO,MAAO,CAAA,OAAA,CAAQ,MAAS,GAAA,GAAA,CAAI,MAAQ,EAAA;AACzC,MAAA,MAAA,CAAO,QAAQ,GAAI,EAAA,CAAA;AAAA,KACrB;AACA,IAAO,OAAA,MAAA,CAAO,QAAQ,GAAI,CAAA,CAAC,IAAI,KAAW,MAAA,EAAC,EAAI,EAAA,KAAA,EAAO,CAAA,CAAA,CAAA;AAAA,GACxD,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAGb,EAAM,MAAA,CAAC,MAAQ,EAAA,UAAU,CAAI,GAAA,UAAA;AAAA,IAC3B,aAAA;AAAA,IACA,KAAA,CAAA;AAAA,IACA,aAAA;AAAA,GACF,CAAA;AACA,EAAU,SAAA,CAAA,MAAM,EAAG,CAAA,IAAA,CAAK,OAAS,EAAA,QAAA,EAAU,UAAU,CAAG,EAAA,CAAC,IAAK,CAAA,OAAO,CAAC,CAAA,CAAA;AAEtE,EAAM,MAAA,MAAA,GAAS,UAAW,CAAA,CAAC,KAAe,KAAA;AACxC,IAAA,MAAM,MAAM,QAAS,EAAA,CAAA;AACrB,IAAO,MAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,UAAA,EAAY,CAAA,CAAA;AAChC,IAAA,QAAA,CAAS,CAAC,GAAG,GAAK,EAAA,KAAK,CAAC,CAAA,CAAA;AAAA,GACzB,CAAA,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,UAAW,CAAA,CAAC,KAAe,KAAA;AACzC,IAAA,MAAM,MAAM,QAAS,EAAA,CAAA;AACrB,IAAO,MAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,UAAA,EAAY,CAAA,CAAA;AACnC,IAAA,QAAA,CAAS,CAAC,KAAA,EAAO,GAAG,GAAG,CAAC,CAAA,CAAA;AAAA,GACzB,CAAA,CAAA;AAED,EAAA,MAAM,MAAS,GAAA,UAAA,CAAW,CAAC,KAAA,EAAe,KAAe,KAAA;AACvD,IAAA,MAAM,MAAM,QAAS,EAAA,CAAA;AACrB,IAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAO,KAAO,EAAA,CAAA,EAAG,YAAY,CAAA,CAAA;AAC5C,IAAA,MAAM,MAAS,GAAA,CAAC,GAAG,GAAA,CAAI,KAAM,CAAA,CAAA,EAAG,KAAK,CAAA,EAAG,KAAO,EAAA,GAAG,GAAI,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAClE,IAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,UAAW,CAAA,CAAC,KAAkB,KAAA;AAC3C,IAAA,MAAM,MAAM,QAAS,EAAA,CAAA;AACrB,IAAO,MAAA,CAAA,OAAA,CAAQ,MAAO,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAC9B,IAAA,MAAM,SAAS,GAAI,CAAA,MAAA,CAAO,CAAC,CAAQ,EAAA,CAAA,KAAc,MAAM,KAAK,CAAA,CAAA;AAC5D,IAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,CAAC,IAAA,EAAc,EAAe,KAAA;AACpD,IAAA,MAAM,MAAM,QAAS,EAAA,CAAA;AACrB,IAAC,CAAA,MAAA,CAAO,QAAQ,IAAI,CAAA,EAAG,OAAO,OAAQ,CAAA,EAAE,CAAC,CAAI,GAAA;AAAA,MAC3C,MAAA,CAAO,QAAQ,EAAE,CAAA;AAAA,MACjB,MAAA,CAAO,QAAQ,IAAI,CAAA;AAAA,KACrB,CAAA;AACA,IAAM,MAAA,MAAA,GAAS,CAAC,GAAG,GAAG,CAAA,CAAA;AACtB,IAAA,CAAC,MAAO,CAAA,IAAI,CAAG,EAAA,MAAA,CAAO,EAAE,CAAC,CAAI,GAAA,CAAC,MAAO,CAAA,EAAE,CAAG,EAAA,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA;AACtD,IAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,CAAC,IAAA,EAAc,EAAe,KAAA;AACpD,IAAA,MAAM,MAAM,QAAS,EAAA,CAAA;AACrB,IAAA,MAAM,CAAC,EAAE,CAAA,GAAI,OAAO,OAAQ,CAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AAC1C,IAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAO,EAAI,EAAA,CAAA,EAAG,EAAE,CAAA,CAAA;AAC/B,IAAM,MAAA,MAAA,GAAS,CAAC,GAAG,GAAG,CAAA,CAAA;AACtB,IAAA,MAAM,CAAC,IAAI,CAAA,GAAI,MAAO,CAAA,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA;AACpC,IAAO,MAAA,CAAA,MAAA,CAAO,EAAI,EAAA,CAAA,EAAG,IAAI,CAAA,CAAA;AACzB,IAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,GAChB,CAAA,CAAA;AAED,EAAA,OAAO,EAAC,MAAQ,EAAA,MAAA,EAAQ,SAAS,MAAQ,EAAA,MAAA,EAAQ,MAAM,IAAI,EAAA,CAAA;AAC7D;;ACvFA,SAAwB,IAA0C,CAAA;AAAA,EAChE,IAAM,EAAA,EAAA;AAAA,EACN,aAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,GAAG,KAAA;AACL,CAAiB,EAAA;AACf,EAAA,MAAM,EAAK,GAAA,OAAA,CAAW,EAAC,aAAA,EAAc,CAAA,CAAA;AACrC,EAAA,MAAM,OAAO,EAAM,IAAA,EAAA,CAAA;AAEnB,EAAA,eAAe,aAAa,CAAqC,EAAA;AAC/D,IAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,IAAA,eAAA,CAAgB,MAAM,IAAI,CAAA,CAAA;AAC1B,IAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAEzB,IAAM,MAAA,KAAA,GAAQ,MAAM,QAAA,CAAS,IAAI,CAAA,CAAA;AACjC,IAAM,MAAA,MAAA,GAAS,UAAU,IAAI,CAAA,CAAA;AAE7B,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,eAAA,CAAgB,MAAM,KAAK,CAAA,CAAA;AAC3B,MAAA,mBAAA,CAAoB,MAAM,KAAK,CAAA,CAAA;AAC/B,MAAA,IAAI,eAAiB,EAAA,eAAA,CAAgB,SAAU,CAAA,IAAI,GAAG,MAAM,CAAA,CAAA;AAC5D,MAAA,OAAA;AAAA,KACF;AAEA,IAAI,IAAA;AACF,MAAA,IAAI,QAAU,EAAA,MAAM,QAAS,CAAA,MAAA,EAAQ,CAAC,CAAA,CAAA;AACtC,MAAI,IAAA,aAAA,EAA6B,aAAA,CAAA,MAAA,EAAQ,CAAC,CAAA,CAAA;AAC1C,MAAA,mBAAA,CAAoB,MAAM,IAAI,CAAA,CAAA;AAAA,KACxB,CAAA,MAAA;AACN,MAAA,mBAAA,CAAoB,MAAM,KAAK,CAAA,CAAA;AAAA,KAC/B,SAAA;AACA,MAAA,eAAA,CAAgB,MAAM,KAAK,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,EAAa,KAAO,EAAA,IAAA,EAAA,kBAClB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,GAAG,KAAA,EAAO,UAAU,EAAA,IAAA,EAAC,QAAU,EAAA,YAAA,EAAc,CACtD,CAAA,CAAA;AAEJ;;AC5CA,MAAM,YAAA,0BAAsB,cAAc,CAAA,CAAA;AAE1C,SAAS,MAAA,CAAU,KAA+B,KAAiB,EAAA;AACjE,EAAI,IAAA,OAAO,QAAQ,UAAY,EAAA;AAC7B,IAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAAA,aACA,GAAK,EAAA;AACd,IAAC,IAAyC,OAAU,GAAA,KAAA,CAAA;AAAA,GACtD;AACF,CAAA;AAEO,MAAM,QAAQ,KAAM,CAAA,UAAA;AAAA,EACzB,CAAC,EAAC,QAAA,EAAU,YAAc,EAAA,YAAA,EAAc,MAAM,OAAS,EAAA,GAAG,KAAK,EAAA,EAAG,GAAQ,KAAA;AACxE,IAAM,MAAA,QAAA,GAAW,KAAM,CAAA,MAAA,CAAgC,IAAI,CAAA,CAAA;AAC3D,IAAA,MAAM,YAAY,KAAM,CAAA,WAAA;AAAA,MACtB,CAAC,IAAkC,KAAA;AACjC,QAAA,QAAA,CAAS,OAAU,GAAA,IAAA,CAAA;AACnB,QAAA,MAAA,CAAO,KAAK,IAAI,CAAA,CAAA;AAAA,OAClB;AAAA,MACA,CAAC,GAAG,CAAA;AAAA,KACN,CAAA;AACA,IAAM,MAAA,EAAC,IAAI,KAAO,EAAA,YAAA,EAAc,UAAU,KAAO,EAAA,GAAG,IAAI,EAAA,GAAI,QAAS,CAAA;AAAA,MACnE,GAAG,KAAA;AAAA,MACH,IAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA,EAAU,IAAI,MAAuB,KAAA;AACnC,QAAI,IAAA,QAAA,CAAS,OAAS,EAAA,aAAA,EAAoB,KAAA,KAAA;AACxC,UAAO,OAAA,YAAA,CAAA;AACT,QAAA,IAAI,QAAU,EAAA,OAAO,QAAS,CAAA,GAAG,MAAM,CAAA,CAAA;AAAA,OACzC;AAAA,KACD,CAAA,CAAA;AACD,IAAA,MAAM,YAAY,EAAM,IAAA,OAAA,CAAA;AAExB,IAAA,KAAA,CAAM,UAAU,MAAM;AACpB,MAAI,IAAA,CAAC,SAAS,OAAS,EAAA,OAAA;AACvB,MAAA,IAAK,UAAkB,YAAc,EAAA;AACnC,QAAS,QAAA,CAAA,OAAA,CAAQ,kBAAkB,EAAE,CAAA,CAAA;AACrC,QAAA,QAAA,CAAS,QAAQ,cAAe,EAAA,CAAA;AAChC,QAAA,OAAA;AAAA,OACF;AAEA,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,QAAS,QAAA,CAAA,OAAA,CAAQ,kBAAkB,KAAK,CAAA,CAAA;AACxC,QAAA,QAAA,CAAS,QAAQ,cAAe,EAAA,CAAA;AAAA,OAClC;AAAA,KACF,EAAG,CAAC,KAAK,CAAC,CAAA,CAAA;AAEV,IAAA,MAAM,OAAU,GAAA,YAAA,KAAiB,CAAC,CAAA,KAAW,EAAE,MAAO,CAAA,KAAA,CAAA,CAAA;AAEtD,IACE,uBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACE,GAAG,IAAA;AAAA,QACH,GAAG,OAAA;AAAA,QACH,GAAI,YAAe,GAAA,YAAA,CAAa,KAAK,CAAA,GAAI,EAAC,KAAK,EAAA;AAAA,QAChD,UAAU,CAAC,CAAA,KAAW,QAAS,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QACzC,GAAK,EAAA,SAAA;AAAA,OAAA;AAAA,KACP,CAAA;AAAA,GAEJ;AACF,EAAA;AAIO,MAAM,WAAW,KAAM,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAC,IAAA,EAAM,GAAG,KAAA,IAAQ,GAAQ,KAAA;AACzB,IAAA,MAAM,EAAC,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,GAAG,IAAA,EAAQ,GAAA,QAAA,CAAS,EAAC,GAAG,KAAO,EAAA,IAAA,EAAY,CAAA,CAAA;AAC1E,IACE,uBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACE,GAAG,IAAA;AAAA,QACJ,IAAK,EAAA,UAAA;AAAA,QACL,OAAA,EAAS,CAAC,CAAC,KAAA;AAAA,QACX,UAAU,CAAC,CAAA,KACT,QAAS,CAAA,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,QAE3B,GAAA;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GAEJ;AACF;;;;","x_google_ignoreList":[0]}
|