react-f0rm 0.0.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.
@@ -0,0 +1 @@
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":"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","x_google_ignoreList":[0]}