@jcoreio/zod-forms 1.2.1 → 2.0.0-beta.2
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/FieldPath.d.ts +2 -2
- package/FieldPath.d.ts.map +1 -1
- package/FieldPath.js.map +1 -1
- package/FieldPath.mjs.map +1 -1
- package/FormAction.d.ts +2 -2
- package/FormAction.d.ts.map +1 -1
- package/FormAction.js.map +1 -1
- package/FormAction.mjs.map +1 -1
- package/FormContext.d.ts +7 -6
- package/FormContext.d.ts.map +1 -1
- package/FormContext.js.map +1 -1
- package/FormContext.mjs.map +1 -1
- package/FormState.d.ts +10 -8
- package/FormState.d.ts.map +1 -1
- package/FormState.js.map +1 -1
- package/FormState.mjs.map +1 -1
- package/README.md +2 -2
- package/actions/arrayActions.d.ts +40 -39
- package/actions/arrayActions.d.ts.map +1 -1
- package/actions/arrayActions.js +37 -37
- package/actions/arrayActions.js.map +1 -1
- package/actions/arrayActions.mjs +29 -29
- package/actions/arrayActions.mjs.map +1 -1
- package/actions/initialize.d.ts +5 -4
- package/actions/initialize.d.ts.map +1 -1
- package/actions/initialize.js.map +1 -1
- package/actions/initialize.mjs.map +1 -1
- package/actions/setParsedValue.d.ts +12 -0
- package/actions/setParsedValue.d.ts.map +1 -0
- package/{reducers/setRawValue.js → actions/setParsedValue.js} +9 -26
- package/actions/setParsedValue.js.map +1 -0
- package/actions/setParsedValue.mjs +9 -0
- package/actions/setParsedValue.mjs.map +1 -0
- package/actions/setSubmitStatus.d.ts +3 -3
- package/actions/setSubmitStatus.d.ts.map +1 -1
- package/actions/setSubmitStatus.js.map +1 -1
- package/actions/setSubmitStatus.mjs.map +1 -1
- package/actions/setValue.d.ts +3 -5
- package/actions/setValue.d.ts.map +1 -1
- package/actions/setValue.js +3 -7
- package/actions/setValue.js.map +1 -1
- package/actions/setValue.mjs +2 -3
- package/actions/setValue.mjs.map +1 -1
- package/createFormMiddleware.d.ts.map +1 -1
- package/createFormMiddleware.js +7 -5
- package/createFormMiddleware.js.map +1 -1
- package/createFormMiddleware.mjs +7 -5
- package/createFormMiddleware.mjs.map +1 -1
- package/createFormProvider.d.ts.map +1 -1
- package/createFormProvider.js +10 -10
- package/createFormProvider.js.map +1 -1
- package/createFormProvider.mjs +7 -7
- package/createFormProvider.mjs.map +1 -1
- package/createFormReducer.js +17 -17
- package/createFormReducer.js.map +1 -1
- package/createFormReducer.mjs +17 -17
- package/createFormReducer.mjs.map +1 -1
- package/createSelectFormStatus.d.ts +1 -1
- package/createSelectFormStatus.d.ts.map +1 -1
- package/createSelectFormStatus.js +6 -6
- package/createSelectFormStatus.js.map +1 -1
- package/createSelectFormStatus.mjs +1 -1
- package/createSelectFormStatus.mjs.map +1 -1
- package/createSelectFormValues.d.ts +19 -19
- package/createSelectFormValues.d.ts.map +1 -1
- package/createSelectFormValues.js +5 -5
- package/createSelectFormValues.js.map +1 -1
- package/createSelectFormValues.mjs +3 -3
- package/createSelectFormValues.mjs.map +1 -1
- package/createZodForm.d.ts +4 -4
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/index.js.map +1 -1
- package/index.mjs.map +1 -1
- package/initFormState.js +1 -1
- package/initFormState.js.map +1 -1
- package/initFormState.mjs +1 -1
- package/initFormState.mjs.map +1 -1
- package/package.json +4 -1
- package/reducers/addHandlers.d.ts +6 -6
- package/reducers/arrayInsert.d.ts.map +1 -1
- package/reducers/arrayInsert.js +10 -4
- package/reducers/arrayInsert.js.map +1 -1
- package/reducers/arrayInsert.mjs +6 -4
- package/reducers/arrayInsert.mjs.map +1 -1
- package/reducers/arrayInsertParsed.d.ts +7 -0
- package/reducers/arrayInsertParsed.d.ts.map +1 -0
- package/reducers/arrayInsertParsed.js +16 -0
- package/reducers/arrayInsertParsed.js.map +1 -0
- package/reducers/arrayInsertParsed.mjs +12 -0
- package/reducers/arrayInsertParsed.mjs.map +1 -0
- package/reducers/arrayPush.d.ts.map +1 -1
- package/reducers/arrayPush.js +6 -4
- package/reducers/arrayPush.js.map +1 -1
- package/reducers/arrayPush.mjs +2 -4
- package/reducers/arrayPush.mjs.map +1 -1
- package/reducers/arrayPushParsed.d.ts +7 -0
- package/reducers/{arrayUnshiftRaw.d.ts.map → arrayPushParsed.d.ts.map} +1 -1
- package/reducers/arrayPushParsed.js +15 -0
- package/reducers/arrayPushParsed.js.map +1 -0
- package/reducers/arrayPushParsed.mjs +11 -0
- package/reducers/arrayPushParsed.mjs.map +1 -0
- package/reducers/arraySplice.d.ts.map +1 -1
- package/reducers/arraySplice.js +12 -6
- package/reducers/arraySplice.js.map +1 -1
- package/reducers/arraySplice.mjs +9 -5
- package/reducers/arraySplice.mjs.map +1 -1
- package/reducers/arraySpliceParsed.d.ts +7 -0
- package/reducers/arraySpliceParsed.d.ts.map +1 -0
- package/reducers/arraySpliceParsed.js +20 -0
- package/reducers/arraySpliceParsed.js.map +1 -0
- package/reducers/arraySpliceParsed.mjs +14 -0
- package/reducers/arraySpliceParsed.mjs.map +1 -0
- package/reducers/arrayUnshift.d.ts.map +1 -1
- package/reducers/arrayUnshift.js +6 -4
- package/reducers/arrayUnshift.js.map +1 -1
- package/reducers/arrayUnshift.mjs +2 -4
- package/reducers/arrayUnshift.mjs.map +1 -1
- package/reducers/arrayUnshiftParsed.d.ts +7 -0
- package/reducers/arrayUnshiftParsed.d.ts.map +1 -0
- package/reducers/arrayUnshiftParsed.js +15 -0
- package/reducers/arrayUnshiftParsed.js.map +1 -0
- package/reducers/arrayUnshiftParsed.mjs +11 -0
- package/reducers/arrayUnshiftParsed.mjs.map +1 -0
- package/reducers/initialize.d.ts +12 -12
- package/reducers/initialize.d.ts.map +1 -1
- package/reducers/initialize.js +9 -9
- package/reducers/initialize.js.map +1 -1
- package/reducers/initialize.mjs +8 -8
- package/reducers/initialize.mjs.map +1 -1
- package/reducers/removeHandlers.d.ts +6 -6
- package/reducers/setParsedValue.d.ts +47 -0
- package/reducers/setParsedValue.d.ts.map +1 -0
- package/reducers/setParsedValue.js +41 -0
- package/reducers/setParsedValue.js.map +1 -0
- package/reducers/setParsedValue.mjs +32 -0
- package/reducers/setParsedValue.mjs.map +1 -0
- package/reducers/setSubmitStatus.d.ts +6 -6
- package/reducers/setValue.d.ts +9 -10
- package/reducers/setValue.d.ts.map +1 -1
- package/reducers/setValue.js +9 -15
- package/reducers/setValue.js.map +1 -1
- package/reducers/setValue.mjs +9 -15
- package/reducers/setValue.mjs.map +1 -1
- package/reducers/submitSucceeded.d.ts +6 -6
- package/reducers/submitSucceeded.js +2 -2
- package/reducers/submitSucceeded.js.map +1 -1
- package/reducers/submitSucceeded.mjs +2 -2
- package/reducers/submitSucceeded.mjs.map +1 -1
- package/reducers/util/updateRawArray.d.ts +2 -2
- package/reducers/util/updateRawArray.d.ts.map +1 -1
- package/reducers/util/updateRawArray.js +3 -3
- package/reducers/util/updateRawArray.js.map +1 -1
- package/reducers/util/updateRawArray.mjs +3 -3
- package/reducers/util/updateRawArray.mjs.map +1 -1
- package/src/FieldPath.ts +3 -5
- package/src/FormAction.ts +2 -2
- package/src/FormContext.ts +7 -6
- package/src/FormState.ts +12 -8
- package/src/actions/arrayActions.ts +66 -58
- package/src/actions/initialize.ts +3 -2
- package/src/actions/setParsedValue.ts +21 -0
- package/src/actions/setSubmitStatus.ts +1 -1
- package/src/actions/setValue.ts +2 -5
- package/src/createFormMiddleware.ts +5 -3
- package/src/createFormProvider.tsx +12 -9
- package/src/createFormReducer.ts +17 -17
- package/src/createSelectFormStatus.ts +5 -5
- package/src/createSelectFormValues.ts +2 -2
- package/src/index.ts +1 -1
- package/src/initFormState.ts +1 -1
- package/src/reducers/arrayInsert.ts +9 -6
- package/src/reducers/arrayInsertParsed.ts +19 -0
- package/src/reducers/arrayPush.ts +5 -7
- package/src/reducers/arrayPushParsed.ts +23 -0
- package/src/reducers/arraySplice.ts +18 -5
- package/src/reducers/arraySpliceParsed.ts +17 -0
- package/src/reducers/arrayUnshift.ts +6 -4
- package/src/reducers/arrayUnshiftParsed.ts +16 -0
- package/src/reducers/initialize.ts +10 -8
- package/src/reducers/setParsedValue.ts +61 -0
- package/src/reducers/setValue.ts +12 -21
- package/src/reducers/submitSucceeded.ts +1 -1
- package/src/reducers/util/updateRawArray.ts +5 -5
- package/src/useArrayField.ts +13 -12
- package/src/useField.ts +26 -24
- package/src/useHtmlField.ts +42 -42
- package/src/useInitialize.ts +1 -1
- package/src/util/maybeParse.ts +2 -2
- package/useArrayField.d.ts +4 -4
- package/useArrayField.d.ts.map +1 -1
- package/useArrayField.js +8 -13
- package/useArrayField.js.map +1 -1
- package/useArrayField.mjs +3 -7
- package/useArrayField.mjs.map +1 -1
- package/useField.d.ts +7 -6
- package/useField.d.ts.map +1 -1
- package/useField.js +24 -24
- package/useField.js.map +1 -1
- package/useField.mjs +18 -18
- package/useField.mjs.map +1 -1
- package/useFormValues.d.ts +4 -4
- package/useHtmlField.js +40 -40
- package/useHtmlField.js.map +1 -1
- package/useHtmlField.mjs +36 -36
- package/useHtmlField.mjs.map +1 -1
- package/useInitialize.d.ts.map +1 -1
- package/useInitialize.js +1 -1
- package/useInitialize.js.map +1 -1
- package/useInitialize.mjs +1 -1
- package/useInitialize.mjs.map +1 -1
- package/util/maybeParse.d.ts +1 -1
- package/util/maybeParse.d.ts.map +1 -1
- package/util/maybeParse.js +2 -2
- package/util/maybeParse.js.map +1 -1
- package/util/maybeParse.mjs +2 -2
- package/util/maybeParse.mjs.map +1 -1
- package/actions/setRawValue.d.ts +0 -9
- package/actions/setRawValue.d.ts.map +0 -1
- package/actions/setRawValue.js +0 -14
- package/actions/setRawValue.js.map +0 -1
- package/actions/setRawValue.mjs +0 -8
- package/actions/setRawValue.mjs.map +0 -1
- package/reducers/arrayInsertRaw.d.ts +0 -7
- package/reducers/arrayInsertRaw.d.ts.map +0 -1
- package/reducers/arrayInsertRaw.js +0 -22
- package/reducers/arrayInsertRaw.js.map +0 -1
- package/reducers/arrayInsertRaw.mjs +0 -14
- package/reducers/arrayInsertRaw.mjs.map +0 -1
- package/reducers/arrayPushRaw.d.ts +0 -7
- package/reducers/arrayPushRaw.d.ts.map +0 -1
- package/reducers/arrayPushRaw.js +0 -17
- package/reducers/arrayPushRaw.js.map +0 -1
- package/reducers/arrayPushRaw.mjs +0 -9
- package/reducers/arrayPushRaw.mjs.map +0 -1
- package/reducers/arraySpliceRaw.d.ts +0 -7
- package/reducers/arraySpliceRaw.d.ts.map +0 -1
- package/reducers/arraySpliceRaw.js +0 -26
- package/reducers/arraySpliceRaw.js.map +0 -1
- package/reducers/arraySpliceRaw.mjs +0 -18
- package/reducers/arraySpliceRaw.mjs.map +0 -1
- package/reducers/arrayUnshiftRaw.d.ts +0 -7
- package/reducers/arrayUnshiftRaw.js +0 -17
- package/reducers/arrayUnshiftRaw.js.map +0 -1
- package/reducers/arrayUnshiftRaw.mjs +0 -9
- package/reducers/arrayUnshiftRaw.mjs.map +0 -1
- package/reducers/setRawValue.d.ts +0 -27
- package/reducers/setRawValue.d.ts.map +0 -1
- package/reducers/setRawValue.js.map +0 -1
- package/reducers/setRawValue.mjs +0 -26
- package/reducers/setRawValue.mjs.map +0 -1
- package/src/actions/setRawValue.ts +0 -17
- package/src/reducers/arrayInsertRaw.ts +0 -22
- package/src/reducers/arrayPushRaw.ts +0 -18
- package/src/reducers/arraySpliceRaw.ts +0 -30
- package/src/reducers/arrayUnshiftRaw.ts +0 -18
- package/src/reducers/setRawValue.ts +0 -40
package/useField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useField.js","names":["_FieldPath","require","_get","_react","_interopRequireDefault","_useFormSelector","_useFormContext3","_reselect","_reactRedux","_fastDeepEqual","_maybeParse","_bindActionsToField","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useFieldBase","field","_useFormContext","useFormContext","setValue","setRawValue","setMeta","selectFormValues","selectFieldErrorMap","useFormSelector","untypedUseFormSelector","valuesSelector","React","useMemo","createSelector","createStructuredSelector","value","_ref","values","get","path","rawValue","_ref2","rawValues","initialValue","_ref3","initialValues","rawInitialValue","_ref4","rawInitialValues","_ref5","_ref5$value","maybeParse","schema","_ref5$initialValue","dirty","isEqual","pristine","pathstring","shallowEqual","error","state","meta","fieldMeta","submitFailed","boundActions","bindActionsToField","visited","touched","valid","invalid","Boolean","useField","_useFormContext2","root","FieldPath"],"sources":["src/useField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { FieldMeta } from './FormState'\nimport { get } from './util/get'\nimport React from 'react'\nimport { setValue } from './actions/setValue'\nimport { setRawValue } from './actions/setRawValue'\nimport { setMeta } from './actions/setMeta'\nimport {\n useFormSelector as untypedUseFormSelector,\n TypedUseFormSelector,\n} from './useFormSelector'\nimport { useFormContext } from './useFormContext'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { shallowEqual } from 'react-redux'\nimport isEqual from 'fast-deep-equal'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { maybeParse } from './util/maybeParse'\nimport { bindActionsToField } from './util/bindActionsToField'\n\nexport type UseFieldProps<Field extends FieldPath> = FieldMeta &\n ReturnType<\n typeof bindActionsToField<{\n setValue: typeof setValue\n setRawValue: typeof setRawValue\n setMeta: typeof setMeta\n }>\n > & {\n value: z.output<Field['schema']> | undefined\n rawValue: unknown\n initialValue: z.output<Field['schema']> | undefined\n rawInitialValue: unknown\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n\nexport interface TypedUseField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(field: Field): UseFieldProps<Field>\n <Path extends PathInSchema<T>>(path: Path): UseFieldProps<\n FieldPath<SchemaAt<T, Path>>\n >\n <Pathstring extends PathstringInSchema<T>>(path: Pathstring): UseFieldProps<\n FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>\n >\n}\n\nfunction useFieldBase<T extends z.ZodTypeAny, Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field> {\n type Schema = Field['schema']\n\n const {\n setValue,\n setRawValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n value: ({ values }) =>\n get(values, field.path) as z.output<Schema> | undefined,\n rawValue: ({ rawValues }) =>\n get(rawValues, field.path) as unknown,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as z.output<Schema> | undefined,\n rawInitialValue: ({ rawInitialValues }) =>\n get(rawInitialValues, field.path) as unknown,\n }),\n ],\n ({\n rawValue,\n value = maybeParse(field.schema, rawValue),\n rawInitialValue,\n initialValue = maybeParse(field.schema, rawInitialValue),\n }) => {\n const dirty = !isEqual(value, initialValue)\n const pristine = !dirty\n return {\n value,\n rawValue,\n initialValue,\n rawInitialValue,\n dirty,\n pristine,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const values = useFormSelector(valuesSelector, shallowEqual)\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () => bindActionsToField({ setValue, setRawValue, setMeta }, field),\n [field.pathstring]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n ...values,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n valid: !error,\n invalid: Boolean(error),\n }),\n [field.pathstring, values, meta, error, submitFailed]\n ) as any\n}\n\nexport function useField<Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(field: Path): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any\n>(\n field: Pathstring\n): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useField.js","names":["_FieldPath","require","_get","_react","_interopRequireDefault","_useFormSelector","_useFormContext3","_reselect","_reactRedux","_fastDeepEqual","_maybeParse","_bindActionsToField","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useFieldBase","field","_useFormContext","useFormContext","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","useFormSelector","untypedUseFormSelector","valuesSelector","React","useMemo","createSelector","createStructuredSelector","parsedValue","_ref","parsedValues","get","path","value","_ref2","values","initialParsedValue","_ref3","initialParsedValues","initialValue","_ref4","initialValues","_ref5","_ref5$parsedValue","maybeParse","schema","_ref5$initialParsedVa","dirty","isEqual","pristine","pathstring","shallowEqual","error","state","meta","fieldMeta","submitFailed","boundActions","bindActionsToField","visited","touched","valid","invalid","Boolean","useField","_useFormContext2","root","FieldPath"],"sources":["src/useField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { FieldMeta } from './FormState'\nimport { get } from './util/get'\nimport React from 'react'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport {\n useFormSelector as untypedUseFormSelector,\n TypedUseFormSelector,\n} from './useFormSelector'\nimport { useFormContext } from './useFormContext'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { shallowEqual } from 'react-redux'\nimport isEqual from 'fast-deep-equal'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { maybeParse } from './util/maybeParse'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { DeepPartial } from './util/DeepPartial'\n\nexport type UseFieldProps<Field extends FieldPath> = FieldMeta &\n ReturnType<\n typeof bindActionsToField<{\n setParsedValue: typeof setParsedValue\n setValue: typeof setValue\n setMeta: typeof setMeta\n }>\n > & {\n parsedValue?: z.output<Field['schema']>\n value?: DeepPartial<z.input<Field['schema']>>\n initialParsedValue?: z.output<Field['schema']>\n initialValue?: DeepPartial<z.input<Field['schema']>>\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n\nexport interface TypedUseField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(field: Field): UseFieldProps<Field>\n <Path extends PathInSchema<T>>(path: Path): UseFieldProps<\n FieldPath<SchemaAt<T, Path>>\n >\n <Pathstring extends PathstringInSchema<T>>(path: Pathstring): UseFieldProps<\n FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>\n >\n}\n\nfunction useFieldBase<T extends z.ZodTypeAny, Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field> {\n type Schema = Field['schema']\n\n const {\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as z.output<Schema> | undefined,\n value: ({ values }) => get(values, field.path) as unknown,\n initialParsedValue: ({ initialParsedValues }) =>\n get(initialParsedValues, field.path) as\n | z.output<Schema>\n | undefined,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as unknown,\n }),\n ],\n ({\n value,\n parsedValue = maybeParse(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse(field.schema, initialValue),\n }) => {\n const dirty = !isEqual(value, initialValue)\n const pristine = !dirty\n return {\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n dirty,\n pristine,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const parsedValues = useFormSelector(valuesSelector, shallowEqual)\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () => bindActionsToField({ setParsedValue, setValue, setMeta }, field),\n [field.pathstring]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n ...parsedValues,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n valid: !error,\n invalid: Boolean(error),\n }),\n [field.pathstring, parsedValues, meta, error, submitFailed]\n ) as any\n}\n\nexport function useField<Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(field: Path): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any\n>(\n field: Pathstring\n): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/useField.mjs
CHANGED
|
@@ -10,61 +10,61 @@ import { maybeParse } from "./util/maybeParse.mjs";
|
|
|
10
10
|
import { bindActionsToField } from "./util/bindActionsToField.mjs";
|
|
11
11
|
function useFieldBase(field) {
|
|
12
12
|
const {
|
|
13
|
+
setParsedValue,
|
|
13
14
|
setValue,
|
|
14
|
-
setRawValue,
|
|
15
15
|
setMeta,
|
|
16
16
|
selectFormValues,
|
|
17
17
|
selectFieldErrorMap
|
|
18
18
|
} = useFormContext();
|
|
19
19
|
const useFormSelector = untypedUseFormSelector;
|
|
20
20
|
const valuesSelector = React.useMemo(() => createSelector([selectFormValues], createSelector([createStructuredSelector({
|
|
21
|
+
parsedValue: ({
|
|
22
|
+
parsedValues
|
|
23
|
+
}) => get(parsedValues, field.path),
|
|
21
24
|
value: ({
|
|
22
25
|
values
|
|
23
26
|
}) => get(values, field.path),
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}) => get(
|
|
27
|
+
initialParsedValue: ({
|
|
28
|
+
initialParsedValues
|
|
29
|
+
}) => get(initialParsedValues, field.path),
|
|
27
30
|
initialValue: ({
|
|
28
31
|
initialValues
|
|
29
|
-
}) => get(initialValues, field.path)
|
|
30
|
-
rawInitialValue: ({
|
|
31
|
-
rawInitialValues
|
|
32
|
-
}) => get(rawInitialValues, field.path)
|
|
32
|
+
}) => get(initialValues, field.path)
|
|
33
33
|
})], ({
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
value,
|
|
35
|
+
parsedValue = maybeParse(field.schema, value),
|
|
36
|
+
initialValue,
|
|
37
|
+
initialParsedValue = maybeParse(field.schema, initialValue)
|
|
38
38
|
}) => {
|
|
39
39
|
const dirty = !isEqual(value, initialValue);
|
|
40
40
|
const pristine = !dirty;
|
|
41
41
|
return {
|
|
42
|
+
parsedValue,
|
|
42
43
|
value,
|
|
43
|
-
|
|
44
|
+
initialParsedValue,
|
|
44
45
|
initialValue,
|
|
45
|
-
rawInitialValue,
|
|
46
46
|
dirty,
|
|
47
47
|
pristine
|
|
48
48
|
};
|
|
49
49
|
})), [field.pathstring]);
|
|
50
|
-
const
|
|
50
|
+
const parsedValues = useFormSelector(valuesSelector, shallowEqual);
|
|
51
51
|
const error = useFormSelector(state => selectFieldErrorMap(state)[field.pathstring]);
|
|
52
52
|
const meta = useFormSelector(state => state.fieldMeta[field.pathstring]);
|
|
53
53
|
const submitFailed = useFormSelector(state => state.submitFailed);
|
|
54
54
|
const boundActions = React.useMemo(() => bindActionsToField({
|
|
55
|
+
setParsedValue,
|
|
55
56
|
setValue,
|
|
56
|
-
setRawValue,
|
|
57
57
|
setMeta
|
|
58
58
|
}, field), [field.pathstring]);
|
|
59
59
|
return React.useMemo(() => ({
|
|
60
60
|
...boundActions,
|
|
61
|
-
...
|
|
61
|
+
...parsedValues,
|
|
62
62
|
visited: (meta === null || meta === void 0 ? void 0 : meta.visited) || false,
|
|
63
63
|
touched: (meta === null || meta === void 0 ? void 0 : meta.touched) || submitFailed,
|
|
64
64
|
error,
|
|
65
65
|
valid: !error,
|
|
66
66
|
invalid: Boolean(error)
|
|
67
|
-
}), [field.pathstring,
|
|
67
|
+
}), [field.pathstring, parsedValues, meta, error, submitFailed]);
|
|
68
68
|
}
|
|
69
69
|
export function useField(field) {
|
|
70
70
|
const {
|
package/useField.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useField.mjs","names":["FieldPath","get","React","useFormSelector","untypedUseFormSelector","useFormContext","createSelector","createStructuredSelector","shallowEqual","isEqual","maybeParse","bindActionsToField","useFieldBase","field","
|
|
1
|
+
{"version":3,"file":"useField.mjs","names":["FieldPath","get","React","useFormSelector","untypedUseFormSelector","useFormContext","createSelector","createStructuredSelector","shallowEqual","isEqual","maybeParse","bindActionsToField","useFieldBase","field","setParsedValue","setValue","setMeta","selectFormValues","selectFieldErrorMap","valuesSelector","useMemo","parsedValue","parsedValues","path","value","values","initialParsedValue","initialParsedValues","initialValue","initialValues","schema","dirty","pristine","pathstring","error","state","meta","fieldMeta","submitFailed","boundActions","visited","touched","valid","invalid","Boolean","useField","root"],"sources":["src/useField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { FieldMeta } from './FormState'\nimport { get } from './util/get'\nimport React from 'react'\nimport { setParsedValue } from './actions/setParsedValue'\nimport { setValue } from './actions/setValue'\nimport { setMeta } from './actions/setMeta'\nimport {\n useFormSelector as untypedUseFormSelector,\n TypedUseFormSelector,\n} from './useFormSelector'\nimport { useFormContext } from './useFormContext'\nimport { createSelector, createStructuredSelector } from 'reselect'\nimport { shallowEqual } from 'react-redux'\nimport isEqual from 'fast-deep-equal'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\nimport { maybeParse } from './util/maybeParse'\nimport { bindActionsToField } from './util/bindActionsToField'\nimport { DeepPartial } from './util/DeepPartial'\n\nexport type UseFieldProps<Field extends FieldPath> = FieldMeta &\n ReturnType<\n typeof bindActionsToField<{\n setParsedValue: typeof setParsedValue\n setValue: typeof setValue\n setMeta: typeof setMeta\n }>\n > & {\n parsedValue?: z.output<Field['schema']>\n value?: DeepPartial<z.input<Field['schema']>>\n initialParsedValue?: z.output<Field['schema']>\n initialValue?: DeepPartial<z.input<Field['schema']>>\n error?: string\n dirty: boolean\n pristine: boolean\n valid: boolean\n invalid: boolean\n }\n\nexport interface TypedUseField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(field: Field): UseFieldProps<Field>\n <Path extends PathInSchema<T>>(path: Path): UseFieldProps<\n FieldPath<SchemaAt<T, Path>>\n >\n <Pathstring extends PathstringInSchema<T>>(path: Pathstring): UseFieldProps<\n FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>\n >\n}\n\nfunction useFieldBase<T extends z.ZodTypeAny, Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field> {\n type Schema = Field['schema']\n\n const {\n setParsedValue,\n setValue,\n setMeta,\n selectFormValues,\n selectFieldErrorMap,\n } = useFormContext<T>()\n\n const useFormSelector = untypedUseFormSelector as TypedUseFormSelector<T>\n\n const valuesSelector = React.useMemo(\n () =>\n createSelector(\n [selectFormValues],\n createSelector(\n [\n createStructuredSelector({\n parsedValue: ({ parsedValues }) =>\n get(parsedValues, field.path) as z.output<Schema> | undefined,\n value: ({ values }) => get(values, field.path) as unknown,\n initialParsedValue: ({ initialParsedValues }) =>\n get(initialParsedValues, field.path) as\n | z.output<Schema>\n | undefined,\n initialValue: ({ initialValues }) =>\n get(initialValues, field.path) as unknown,\n }),\n ],\n ({\n value,\n parsedValue = maybeParse(field.schema, value),\n initialValue,\n initialParsedValue = maybeParse(field.schema, initialValue),\n }) => {\n const dirty = !isEqual(value, initialValue)\n const pristine = !dirty\n return {\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n dirty,\n pristine,\n }\n }\n )\n ),\n [field.pathstring]\n )\n\n const parsedValues = useFormSelector(valuesSelector, shallowEqual)\n\n const error = useFormSelector(\n (state) => selectFieldErrorMap(state)[field.pathstring]\n )\n const meta = useFormSelector((state) => state.fieldMeta[field.pathstring])\n const submitFailed = useFormSelector((state) => state.submitFailed)\n\n const boundActions = React.useMemo(\n () => bindActionsToField({ setParsedValue, setValue, setMeta }, field),\n [field.pathstring]\n )\n\n return React.useMemo(\n () => ({\n ...boundActions,\n ...parsedValues,\n visited: meta?.visited || false,\n touched: meta?.touched || submitFailed,\n error,\n valid: !error,\n invalid: Boolean(error),\n }),\n [field.pathstring, parsedValues, meta, error, submitFailed]\n ) as any\n}\n\nexport function useField<Field extends FieldPath>(\n field: Field\n): UseFieldProps<Field>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(field: Path): UseFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseArray<T> to pass a pathstring'\n >,\n Pathstring extends PathstringInSchema<T> = any\n>(\n field: Pathstring\n): UseFieldProps<FieldPath<SchemaAt<T, parsePathstring<Pathstring>>>>\nexport function useField<T extends z.ZodTypeAny>(\n field: FieldPath | BasePath | string\n): UseFieldProps<any> | { ERROR: string } {\n const { root } = useFormContext<T>()\n return useFieldBase(\n field instanceof FieldPath ? field : root.get(field as any)\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
package/useFormValues.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
export declare function useFormValues<T extends z.ZodTypeAny = z.ZodUnknown>(): {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
parsedValues: z.output<T> | undefined;
|
|
4
|
+
values: import("./util/DeepPartial").DeepPartial<z.input<T>> | undefined;
|
|
5
|
+
initialParsedValues: z.output<T> | undefined;
|
|
6
|
+
initialValues: import("./util/DeepPartial").DeepPartial<z.input<T>> | undefined;
|
|
7
7
|
};
|
|
8
8
|
//# sourceMappingURL=useFormValues.d.ts.map
|
package/useHtmlField.js
CHANGED
|
@@ -15,7 +15,7 @@ var _zodInvertible = require("zod-invertible");
|
|
|
15
15
|
var _useFormContext2 = require("./useFormContext.js");
|
|
16
16
|
var _acceptsNumber = require("./util/acceptsNumber.js");
|
|
17
17
|
var _acceptsBigint = require("./util/acceptsBigint.js");
|
|
18
|
-
var _excluded = ["
|
|
18
|
+
var _excluded = ["parsedValue", "value", "initialParsedValue", "initialValue", "setParsedValue", "setValue", "setMeta"],
|
|
19
19
|
_excluded2 = ["field"];
|
|
20
20
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
21
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -25,25 +25,25 @@ function useHtmlFieldBase(options) {
|
|
|
25
25
|
_options$normalizeOnB = options.normalizeOnBlur,
|
|
26
26
|
normalizeOnBlur = _options$normalizeOnB === void 0 ? true : _options$normalizeOnB;
|
|
27
27
|
var props = (0, _useField.useField)(field);
|
|
28
|
-
var
|
|
29
|
-
|
|
28
|
+
var parsedValue = props.parsedValue,
|
|
29
|
+
value = props.value,
|
|
30
|
+
initialParsedValue = props.initialParsedValue,
|
|
30
31
|
initialValue = props.initialValue,
|
|
31
|
-
|
|
32
|
+
setParsedValue = props.setParsedValue,
|
|
32
33
|
setValue = props.setValue,
|
|
33
|
-
setRawValue = props.setRawValue,
|
|
34
34
|
setMeta = props.setMeta,
|
|
35
35
|
meta = (0, _objectWithoutProperties2["default"])(props, _excluded);
|
|
36
36
|
var schema = field.schema;
|
|
37
37
|
|
|
38
|
-
//
|
|
39
|
-
//
|
|
40
|
-
// coerced the
|
|
41
|
-
// This way we can set a
|
|
38
|
+
// tempValue is used for storing blank text when we've coerced the
|
|
39
|
+
// value to null or undefined, or storing numeric text when we've
|
|
40
|
+
// coerced the value to a number or bigint.
|
|
41
|
+
// This way we can set a value that will parse better in the form
|
|
42
42
|
// state without interfering with the text the user is typing.
|
|
43
|
-
var _React$useState = _react["default"].useState(
|
|
43
|
+
var _React$useState = _react["default"].useState(value),
|
|
44
44
|
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
tempValue = _React$useState2[0],
|
|
46
|
+
setTempValue = _React$useState2[1];
|
|
47
47
|
var tryNumber = _react["default"].useMemo(function () {
|
|
48
48
|
return (0, _acceptsNumber.acceptsNumber)(schema);
|
|
49
49
|
}, [schema]);
|
|
@@ -51,66 +51,66 @@ function useHtmlFieldBase(options) {
|
|
|
51
51
|
return (0, _acceptsBigint.acceptsBigint)(schema);
|
|
52
52
|
}, [schema]);
|
|
53
53
|
var onChange = _react["default"].useCallback(function (e) {
|
|
54
|
-
var
|
|
55
|
-
var normalized =
|
|
54
|
+
var value = getValue(e);
|
|
55
|
+
var normalized = normalizeValue(value, {
|
|
56
56
|
schema: schema,
|
|
57
57
|
tryNumber: tryNumber,
|
|
58
58
|
tryBigint: tryBigint
|
|
59
59
|
});
|
|
60
|
-
if (typeof
|
|
61
|
-
|
|
60
|
+
if (typeof value === 'string' && typeof normalized !== 'string') {
|
|
61
|
+
setTempValue(value);
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
}, [
|
|
63
|
+
setValue(normalized);
|
|
64
|
+
}, [getValue, setValue, schema]);
|
|
65
65
|
var onFocus = _react["default"].useCallback(function () {
|
|
66
66
|
setMeta({
|
|
67
67
|
visited: true
|
|
68
68
|
});
|
|
69
69
|
}, []);
|
|
70
70
|
var onBlur = _react["default"].useCallback(function (e) {
|
|
71
|
-
var
|
|
71
|
+
var value = normalizeValue(getValue(e), {
|
|
72
72
|
schema: schema,
|
|
73
73
|
tryNumber: tryNumber,
|
|
74
74
|
tryBigint: tryBigint
|
|
75
75
|
});
|
|
76
76
|
if (normalizeOnBlur) {
|
|
77
|
-
var parsed = field.schema.safeParse(
|
|
77
|
+
var parsed = field.schema.safeParse(value);
|
|
78
78
|
var formatted = parsed.success ? (0, _zodInvertible.invert)(field.schema).safeParse(parsed.data) : undefined;
|
|
79
|
-
if (formatted !== null && formatted !== void 0 && formatted.success)
|
|
80
|
-
|
|
79
|
+
if (formatted !== null && formatted !== void 0 && formatted.success) value = formatted.data;
|
|
80
|
+
setValue(value);
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
setTempValue(undefined);
|
|
83
83
|
setMeta({
|
|
84
84
|
visited: true,
|
|
85
85
|
touched: true
|
|
86
86
|
});
|
|
87
|
-
}, [
|
|
87
|
+
}, [getValue, setValue, schema]);
|
|
88
88
|
return _react["default"].useMemo(function () {
|
|
89
89
|
return {
|
|
90
90
|
input: _objectSpread(_objectSpread({
|
|
91
91
|
name: field.pathstring,
|
|
92
92
|
type: type,
|
|
93
|
-
value: typeof
|
|
93
|
+
value: typeof value === 'boolean' ? String(value) : typeof value === 'string' ? value || tempValue || '' : tempValue || (value == null ? '' : String(value) || '')
|
|
94
94
|
}, type === 'checkbox' && {
|
|
95
|
-
checked: Boolean(
|
|
95
|
+
checked: Boolean(value)
|
|
96
96
|
}), {}, {
|
|
97
97
|
onChange: onChange,
|
|
98
98
|
onFocus: onFocus,
|
|
99
99
|
onBlur: onBlur
|
|
100
100
|
}),
|
|
101
101
|
meta: _objectSpread(_objectSpread({}, meta), {}, {
|
|
102
|
+
parsedValue: parsedValue,
|
|
102
103
|
value: value,
|
|
103
|
-
|
|
104
|
+
initialParsedValue: initialParsedValue,
|
|
104
105
|
initialValue: initialValue,
|
|
105
|
-
|
|
106
|
+
setParsedValue: setParsedValue,
|
|
106
107
|
setValue: setValue,
|
|
107
|
-
setRawValue: setRawValue,
|
|
108
108
|
setMeta: setMeta
|
|
109
109
|
})
|
|
110
110
|
};
|
|
111
|
-
}, [props,
|
|
111
|
+
}, [props, tempValue, onChange]);
|
|
112
112
|
}
|
|
113
|
-
function
|
|
113
|
+
function getValue(e) {
|
|
114
114
|
var target = e.target;
|
|
115
115
|
if (target instanceof HTMLInputElement) {
|
|
116
116
|
return target.type === 'checkbox' ? target.checked : target.value;
|
|
@@ -122,32 +122,32 @@ function normalizeBlank(schema) {
|
|
|
122
122
|
if (schema.safeParse(null).success) return null;
|
|
123
123
|
return undefined;
|
|
124
124
|
}
|
|
125
|
-
function safeBigInt(
|
|
125
|
+
function safeBigInt(value) {
|
|
126
126
|
try {
|
|
127
|
-
return BigInt(
|
|
127
|
+
return BigInt(value);
|
|
128
128
|
} catch (error) {
|
|
129
129
|
return undefined;
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
|
-
function
|
|
132
|
+
function normalizeValue(value, _ref) {
|
|
133
133
|
var schema = _ref.schema,
|
|
134
134
|
tryNumber = _ref.tryNumber,
|
|
135
135
|
tryBigint = _ref.tryBigint;
|
|
136
|
-
if (typeof
|
|
137
|
-
if (typeof
|
|
136
|
+
if (typeof value === 'boolean') return value;
|
|
137
|
+
if (typeof value === 'string' && !/\S/.test(value)) {
|
|
138
138
|
return normalizeBlank(schema);
|
|
139
139
|
}
|
|
140
|
-
if (typeof
|
|
140
|
+
if (typeof value === 'string' && !schema.safeParse(value).success) {
|
|
141
141
|
if (tryNumber) {
|
|
142
|
-
var num = Number(
|
|
142
|
+
var num = Number(value);
|
|
143
143
|
if (!isNaN(num)) return num;
|
|
144
144
|
}
|
|
145
145
|
if (tryBigint) {
|
|
146
|
-
var bigint = safeBigInt(
|
|
146
|
+
var bigint = safeBigInt(value);
|
|
147
147
|
if (bigint != null) return bigint;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
return
|
|
150
|
+
return value;
|
|
151
151
|
}
|
|
152
152
|
function useHtmlField(_ref2) {
|
|
153
153
|
var field = _ref2.field,
|
package/useHtmlField.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHtmlField.js","names":["_FieldPath","require","_useField","_react","_interopRequireDefault","_zodInvertible","_useFormContext2","_acceptsNumber","_acceptsBigint","_excluded","_excluded2","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useHtmlFieldBase","options","field","type","_options$normalizeOnB","normalizeOnBlur","props","useField","value","rawValue","initialValue","rawInitialValue","setValue","setRawValue","setMeta","meta","_objectWithoutProperties2","schema","_React$useState","React","useState","_React$useState2","_slicedToArray2","tempRawValue","setTempRawValue","tryNumber","useMemo","acceptsNumber","tryBigint","acceptsBigint","onChange","useCallback","getRawValue","normalized","normalizeRawValue","onFocus","visited","onBlur","parsed","safeParse","formatted","success","invert","data","undefined","touched","input","name","pathstring","String","checked","Boolean","target","HTMLInputElement","normalizeBlank","safeBigInt","BigInt","error","_ref","test","num","Number","isNaN","bigint","useHtmlField","_ref2","rest","_useFormContext","useFormContext","root","FieldPath","get"],"sources":["src/useHtmlField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { useField, UseFieldProps } from './useField'\nimport React, { ChangeEvent, HTMLInputTypeAttribute } from 'react'\nimport { invert } from 'zod-invertible'\nimport { useFormContext } from './useFormContext'\nimport { acceptsNumber } from './util/acceptsNumber'\nimport { acceptsBigint } from './util/acceptsBigint'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\n\nexport type HtmlFieldInputProps = {\n name: string\n type: HTMLInputTypeAttribute\n value: string\n checked?: boolean\n onChange: React.ChangeEventHandler\n onFocus: React.FocusEventHandler\n onBlur: React.FocusEventHandler\n}\n\nexport type ValidUseHtmlFieldProps<Field extends FieldPath> = {\n input: HtmlFieldInputProps\n meta: UseFieldProps<Field>\n}\n\nexport type UseHtmlFieldProps<Field extends FieldPath> = z.input<\n Field['schema']\n> extends string | number | bigint | boolean | null | undefined\n ? {\n input: HtmlFieldInputProps\n meta: UseFieldProps<Field>\n }\n : {\n ERROR: 'field schema input must be a nullish string, number, boolean or bigint'\n }\n\nexport type UseHtmlFieldOptions<\n Field,\n Schema extends z.ZodTypeAny = Field extends FieldPath<infer S>\n ? S\n : z.ZodTypeAny\n> = {\n field: Field\n type: z.input<Schema> extends boolean | null | undefined\n ? 'checkbox'\n : Exclude<HTMLInputTypeAttribute, 'checkbox'>\n normalizeOnBlur?: boolean\n}\n\nexport interface TypedUseHtmlField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(\n options: UseHtmlFieldOptions<Field, Field['schema']>\n ): UseHtmlFieldProps<Field>\n <Path extends PathInSchema<T>>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, Path>>\n ): UseHtmlFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Path extends PathstringInSchema<T>>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, parsePathstring<Path>>>\n ): UseHtmlFieldProps<FieldPath<SchemaAt<T, parsePathstring<Path>>>>\n}\n\nfunction useHtmlFieldBase<Field extends FieldPath>(\n options: UseHtmlFieldOptions<Field, Field['schema']>\n): UseHtmlFieldProps<Field> {\n const { field, type, normalizeOnBlur = true } = options\n const props = useField(field)\n const {\n value,\n rawValue,\n initialValue,\n rawInitialValue,\n setValue,\n setRawValue,\n setMeta,\n ...meta\n } = props\n\n const { schema } = field\n\n // tempRawValue is used for storing blank text when we've coerced the\n // raw value to null or undefined, or storing numeric text when we've\n // coerced the raw value to a number or bigint.\n // This way we can set a raw value that will parse better in the form\n // state without interfering with the text the user is typing.\n const [tempRawValue, setTempRawValue] = React.useState(\n rawValue as string | null | undefined\n )\n\n const tryNumber = React.useMemo(() => acceptsNumber(schema), [schema])\n const tryBigint = React.useMemo(() => acceptsBigint(schema), [schema])\n\n const onChange = React.useCallback(\n (e: React.ChangeEvent) => {\n const rawValue = getRawValue(e)\n const normalized = normalizeRawValue(rawValue, {\n schema,\n tryNumber,\n tryBigint,\n })\n if (typeof rawValue === 'string' && typeof normalized !== 'string') {\n setTempRawValue(rawValue)\n }\n setRawValue(normalized)\n },\n [getRawValue, setRawValue, schema]\n )\n\n const onFocus = React.useCallback(() => {\n setMeta({ visited: true })\n }, [])\n\n const onBlur = React.useCallback(\n (e: React.FocusEvent) => {\n let rawValue = normalizeRawValue(getRawValue(e), {\n schema,\n tryNumber,\n tryBigint,\n })\n if (normalizeOnBlur) {\n const parsed = field.schema.safeParse(rawValue)\n const formatted = parsed.success\n ? invert(field.schema).safeParse(parsed.data)\n : undefined\n if (formatted?.success) rawValue = formatted.data\n setRawValue(rawValue)\n }\n setTempRawValue(undefined)\n setMeta({ visited: true, touched: true })\n },\n [getRawValue, setRawValue, schema]\n )\n\n return React.useMemo(\n (): ValidUseHtmlFieldProps<Field> => ({\n input: {\n name: field.pathstring,\n type,\n value:\n typeof rawValue === 'boolean'\n ? String(rawValue)\n : typeof rawValue === 'string'\n ? rawValue || tempRawValue || ''\n : tempRawValue || (rawValue == null ? '' : String(rawValue) || ''),\n ...(type === 'checkbox' && { checked: Boolean(rawValue) }),\n onChange,\n onFocus,\n onBlur,\n },\n meta: {\n ...meta,\n value,\n rawValue,\n initialValue,\n rawInitialValue,\n setValue,\n setRawValue,\n setMeta,\n },\n }),\n [props, tempRawValue, onChange]\n ) as any\n}\n\nfunction getRawValue(e: ChangeEvent) {\n const { target } = e\n if (target instanceof HTMLInputElement) {\n return target.type === 'checkbox' ? target.checked : target.value\n }\n return (target as any).value\n}\n\nfunction normalizeBlank(schema: z.ZodTypeAny): any {\n if (schema.safeParse(undefined).success) return undefined\n if (schema.safeParse(null).success) return null\n return undefined\n}\n\nfunction safeBigInt(rawValue: string): bigint | undefined {\n try {\n return BigInt(rawValue)\n } catch (error) {\n return undefined\n }\n}\n\nfunction normalizeRawValue(\n rawValue: string | boolean,\n {\n schema,\n tryNumber,\n tryBigint,\n }: { schema: z.ZodTypeAny; tryNumber: boolean; tryBigint: boolean }\n): string | boolean | number | bigint | null | undefined {\n if (typeof rawValue === 'boolean') return rawValue\n if (typeof rawValue === 'string' && !/\\S/.test(rawValue)) {\n return normalizeBlank(schema)\n }\n if (typeof rawValue === 'string' && !schema.safeParse(rawValue).success) {\n if (tryNumber) {\n const num = Number(rawValue)\n if (!isNaN(num)) return num\n }\n if (tryBigint) {\n const bigint = safeBigInt(rawValue)\n if (bigint != null) return bigint\n }\n }\n return rawValue\n}\n\nexport function useHtmlField<Field extends FieldPath>(\n options: UseHtmlFieldOptions<Field, Field['schema']>\n): UseHtmlFieldProps<Field>\nexport function useHtmlField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseHtmlField<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, Path>>\n): UseHtmlFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useHtmlField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseHtmlField<T> to pass a pathstring'\n >,\n Path extends PathstringInSchema<T> = any\n>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, parsePathstring<Path>>>\n): UseHtmlFieldProps<FieldPath<SchemaAt<T, parsePathstring<Path>>>>\nexport function useHtmlField<T extends z.ZodTypeAny>({\n field,\n ...rest\n}: UseHtmlFieldOptions<FieldPath | BasePath, T>): UseHtmlFieldProps<any> {\n const { root } = useFormContext<T>()\n return useHtmlFieldBase({\n field: field instanceof FieldPath ? field : root.get(field as any),\n ...rest,\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useHtmlField.js","names":["_FieldPath","require","_useField","_react","_interopRequireDefault","_zodInvertible","_useFormContext2","_acceptsNumber","_acceptsBigint","_excluded","_excluded2","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","useHtmlFieldBase","options","field","type","_options$normalizeOnB","normalizeOnBlur","props","useField","parsedValue","value","initialParsedValue","initialValue","setParsedValue","setValue","setMeta","meta","_objectWithoutProperties2","schema","_React$useState","React","useState","_React$useState2","_slicedToArray2","tempValue","setTempValue","tryNumber","useMemo","acceptsNumber","tryBigint","acceptsBigint","onChange","useCallback","getValue","normalized","normalizeValue","onFocus","visited","onBlur","parsed","safeParse","formatted","success","invert","data","undefined","touched","input","name","pathstring","String","checked","Boolean","target","HTMLInputElement","normalizeBlank","safeBigInt","BigInt","error","_ref","test","num","Number","isNaN","bigint","useHtmlField","_ref2","rest","_useFormContext","useFormContext","root","FieldPath","get"],"sources":["src/useHtmlField.ts"],"sourcesContent":["import z from 'zod'\nimport { BasePath, FieldPath } from './FieldPath'\nimport { useField, UseFieldProps } from './useField'\nimport React, { ChangeEvent, HTMLInputTypeAttribute } from 'react'\nimport { invert } from 'zod-invertible'\nimport { useFormContext } from './useFormContext'\nimport { acceptsNumber } from './util/acceptsNumber'\nimport { acceptsBigint } from './util/acceptsBigint'\nimport { PathInSchema, PathstringInSchema } from './util/PathInSchema'\nimport { parsePathstring } from './util/parsePathstring'\nimport { SchemaAt } from './util/SchemaAt'\n\nexport type HtmlFieldInputProps = {\n name: string\n type: HTMLInputTypeAttribute\n value: string\n checked?: boolean\n onChange: React.ChangeEventHandler\n onFocus: React.FocusEventHandler\n onBlur: React.FocusEventHandler\n}\n\nexport type ValidUseHtmlFieldProps<Field extends FieldPath> = {\n input: HtmlFieldInputProps\n meta: UseFieldProps<Field>\n}\n\nexport type UseHtmlFieldProps<Field extends FieldPath> = z.input<\n Field['schema']\n> extends string | number | bigint | boolean | null | undefined\n ? {\n input: HtmlFieldInputProps\n meta: UseFieldProps<Field>\n }\n : {\n ERROR: 'field schema input must be a nullish string, number, boolean or bigint'\n }\n\nexport type UseHtmlFieldOptions<\n Field,\n Schema extends z.ZodTypeAny = Field extends FieldPath<infer S>\n ? S\n : z.ZodTypeAny\n> = {\n field: Field\n type: z.input<Schema> extends boolean | null | undefined\n ? 'checkbox'\n : Exclude<HTMLInputTypeAttribute, 'checkbox'>\n normalizeOnBlur?: boolean\n}\n\nexport interface TypedUseHtmlField<T extends z.ZodTypeAny> {\n <Field extends FieldPath>(\n options: UseHtmlFieldOptions<Field, Field['schema']>\n ): UseHtmlFieldProps<Field>\n <Path extends PathInSchema<T>>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, Path>>\n ): UseHtmlFieldProps<FieldPath<SchemaAt<T, Path>>>\n <Path extends PathstringInSchema<T>>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, parsePathstring<Path>>>\n ): UseHtmlFieldProps<FieldPath<SchemaAt<T, parsePathstring<Path>>>>\n}\n\nfunction useHtmlFieldBase<Field extends FieldPath>(\n options: UseHtmlFieldOptions<Field, Field['schema']>\n): UseHtmlFieldProps<Field> {\n const { field, type, normalizeOnBlur = true } = options\n const props = useField(field)\n const {\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n setParsedValue,\n setValue,\n setMeta,\n ...meta\n } = props\n\n const { schema } = field\n\n // tempValue is used for storing blank text when we've coerced the\n // value to null or undefined, or storing numeric text when we've\n // coerced the value to a number or bigint.\n // This way we can set a value that will parse better in the form\n // state without interfering with the text the user is typing.\n const [tempValue, setTempValue] = React.useState(\n value as string | null | undefined\n )\n\n const tryNumber = React.useMemo(() => acceptsNumber(schema), [schema])\n const tryBigint = React.useMemo(() => acceptsBigint(schema), [schema])\n\n const onChange = React.useCallback(\n (e: React.ChangeEvent) => {\n const value = getValue(e)\n const normalized = normalizeValue(value, {\n schema,\n tryNumber,\n tryBigint,\n })\n if (typeof value === 'string' && typeof normalized !== 'string') {\n setTempValue(value)\n }\n setValue(normalized)\n },\n [getValue, setValue, schema]\n )\n\n const onFocus = React.useCallback(() => {\n setMeta({ visited: true })\n }, [])\n\n const onBlur = React.useCallback(\n (e: React.FocusEvent) => {\n let value = normalizeValue(getValue(e), {\n schema,\n tryNumber,\n tryBigint,\n })\n if (normalizeOnBlur) {\n const parsed = field.schema.safeParse(value)\n const formatted = parsed.success\n ? invert(field.schema).safeParse(parsed.data)\n : undefined\n if (formatted?.success) value = formatted.data\n setValue(value)\n }\n setTempValue(undefined)\n setMeta({ visited: true, touched: true })\n },\n [getValue, setValue, schema]\n )\n\n return React.useMemo(\n (): ValidUseHtmlFieldProps<Field> => ({\n input: {\n name: field.pathstring,\n type,\n value:\n typeof value === 'boolean'\n ? String(value)\n : typeof value === 'string'\n ? value || tempValue || ''\n : tempValue || (value == null ? '' : String(value) || ''),\n ...(type === 'checkbox' && { checked: Boolean(value) }),\n onChange,\n onFocus,\n onBlur,\n },\n meta: {\n ...meta,\n parsedValue,\n value,\n initialParsedValue,\n initialValue,\n setParsedValue,\n setValue,\n setMeta,\n },\n }),\n [props, tempValue, onChange]\n ) as any\n}\n\nfunction getValue(e: ChangeEvent) {\n const { target } = e\n if (target instanceof HTMLInputElement) {\n return target.type === 'checkbox' ? target.checked : target.value\n }\n return (target as any).value\n}\n\nfunction normalizeBlank(schema: z.ZodTypeAny): any {\n if (schema.safeParse(undefined).success) return undefined\n if (schema.safeParse(null).success) return null\n return undefined\n}\n\nfunction safeBigInt(value: string): bigint | undefined {\n try {\n return BigInt(value)\n } catch (error) {\n return undefined\n }\n}\n\nfunction normalizeValue(\n value: string | boolean,\n {\n schema,\n tryNumber,\n tryBigint,\n }: { schema: z.ZodTypeAny; tryNumber: boolean; tryBigint: boolean }\n): string | boolean | number | bigint | null | undefined {\n if (typeof value === 'boolean') return value\n if (typeof value === 'string' && !/\\S/.test(value)) {\n return normalizeBlank(schema)\n }\n if (typeof value === 'string' && !schema.safeParse(value).success) {\n if (tryNumber) {\n const num = Number(value)\n if (!isNaN(num)) return num\n }\n if (tryBigint) {\n const bigint = safeBigInt(value)\n if (bigint != null) return bigint\n }\n }\n return value\n}\n\nexport function useHtmlField<Field extends FieldPath>(\n options: UseHtmlFieldOptions<Field, Field['schema']>\n): UseHtmlFieldProps<Field>\nexport function useHtmlField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseHtmlField<T> to pass a path array'\n >,\n Path extends PathInSchema<T> = any\n>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, Path>>\n): UseHtmlFieldProps<FieldPath<SchemaAt<T, Path>>>\nexport function useHtmlField<\n T extends z.ZodTypeAny = z.ZodBranded<\n z.ZodNever,\n 'cast to TypedUseHtmlField<T> to pass a pathstring'\n >,\n Path extends PathstringInSchema<T> = any\n>(\n options: UseHtmlFieldOptions<Path, SchemaAt<T, parsePathstring<Path>>>\n): UseHtmlFieldProps<FieldPath<SchemaAt<T, parsePathstring<Path>>>>\nexport function useHtmlField<T extends z.ZodTypeAny>({\n field,\n ...rest\n}: UseHtmlFieldOptions<FieldPath | BasePath, T>): UseHtmlFieldProps<any> {\n const { root } = useFormContext<T>()\n return useHtmlFieldBase({\n field: field instanceof FieldPath ? field : root.get(field as any),\n ...rest,\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
package/useHtmlField.mjs
CHANGED
|
@@ -13,12 +13,12 @@ function useHtmlFieldBase(options) {
|
|
|
13
13
|
} = options;
|
|
14
14
|
const props = useField(field);
|
|
15
15
|
const {
|
|
16
|
+
parsedValue,
|
|
16
17
|
value,
|
|
17
|
-
|
|
18
|
+
initialParsedValue,
|
|
18
19
|
initialValue,
|
|
19
|
-
|
|
20
|
+
setParsedValue,
|
|
20
21
|
setValue,
|
|
21
|
-
setRawValue,
|
|
22
22
|
setMeta,
|
|
23
23
|
...meta
|
|
24
24
|
} = props;
|
|
@@ -26,56 +26,56 @@ function useHtmlFieldBase(options) {
|
|
|
26
26
|
schema
|
|
27
27
|
} = field;
|
|
28
28
|
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
// coerced the
|
|
32
|
-
// This way we can set a
|
|
29
|
+
// tempValue is used for storing blank text when we've coerced the
|
|
30
|
+
// value to null or undefined, or storing numeric text when we've
|
|
31
|
+
// coerced the value to a number or bigint.
|
|
32
|
+
// This way we can set a value that will parse better in the form
|
|
33
33
|
// state without interfering with the text the user is typing.
|
|
34
|
-
const [
|
|
34
|
+
const [tempValue, setTempValue] = React.useState(value);
|
|
35
35
|
const tryNumber = React.useMemo(() => acceptsNumber(schema), [schema]);
|
|
36
36
|
const tryBigint = React.useMemo(() => acceptsBigint(schema), [schema]);
|
|
37
37
|
const onChange = React.useCallback(e => {
|
|
38
|
-
const
|
|
39
|
-
const normalized =
|
|
38
|
+
const value = getValue(e);
|
|
39
|
+
const normalized = normalizeValue(value, {
|
|
40
40
|
schema,
|
|
41
41
|
tryNumber,
|
|
42
42
|
tryBigint
|
|
43
43
|
});
|
|
44
|
-
if (typeof
|
|
45
|
-
|
|
44
|
+
if (typeof value === 'string' && typeof normalized !== 'string') {
|
|
45
|
+
setTempValue(value);
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
}, [
|
|
47
|
+
setValue(normalized);
|
|
48
|
+
}, [getValue, setValue, schema]);
|
|
49
49
|
const onFocus = React.useCallback(() => {
|
|
50
50
|
setMeta({
|
|
51
51
|
visited: true
|
|
52
52
|
});
|
|
53
53
|
}, []);
|
|
54
54
|
const onBlur = React.useCallback(e => {
|
|
55
|
-
let
|
|
55
|
+
let value = normalizeValue(getValue(e), {
|
|
56
56
|
schema,
|
|
57
57
|
tryNumber,
|
|
58
58
|
tryBigint
|
|
59
59
|
});
|
|
60
60
|
if (normalizeOnBlur) {
|
|
61
|
-
const parsed = field.schema.safeParse(
|
|
61
|
+
const parsed = field.schema.safeParse(value);
|
|
62
62
|
const formatted = parsed.success ? invert(field.schema).safeParse(parsed.data) : undefined;
|
|
63
|
-
if (formatted !== null && formatted !== void 0 && formatted.success)
|
|
64
|
-
|
|
63
|
+
if (formatted !== null && formatted !== void 0 && formatted.success) value = formatted.data;
|
|
64
|
+
setValue(value);
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
setTempValue(undefined);
|
|
67
67
|
setMeta({
|
|
68
68
|
visited: true,
|
|
69
69
|
touched: true
|
|
70
70
|
});
|
|
71
|
-
}, [
|
|
71
|
+
}, [getValue, setValue, schema]);
|
|
72
72
|
return React.useMemo(() => ({
|
|
73
73
|
input: {
|
|
74
74
|
name: field.pathstring,
|
|
75
75
|
type,
|
|
76
|
-
value: typeof
|
|
76
|
+
value: typeof value === 'boolean' ? String(value) : typeof value === 'string' ? value || tempValue || '' : tempValue || (value == null ? '' : String(value) || ''),
|
|
77
77
|
...(type === 'checkbox' && {
|
|
78
|
-
checked: Boolean(
|
|
78
|
+
checked: Boolean(value)
|
|
79
79
|
}),
|
|
80
80
|
onChange,
|
|
81
81
|
onFocus,
|
|
@@ -83,17 +83,17 @@ function useHtmlFieldBase(options) {
|
|
|
83
83
|
},
|
|
84
84
|
meta: {
|
|
85
85
|
...meta,
|
|
86
|
+
parsedValue,
|
|
86
87
|
value,
|
|
87
|
-
|
|
88
|
+
initialParsedValue,
|
|
88
89
|
initialValue,
|
|
89
|
-
|
|
90
|
+
setParsedValue,
|
|
90
91
|
setValue,
|
|
91
|
-
setRawValue,
|
|
92
92
|
setMeta
|
|
93
93
|
}
|
|
94
|
-
}), [props,
|
|
94
|
+
}), [props, tempValue, onChange]);
|
|
95
95
|
}
|
|
96
|
-
function
|
|
96
|
+
function getValue(e) {
|
|
97
97
|
const {
|
|
98
98
|
target
|
|
99
99
|
} = e;
|
|
@@ -107,33 +107,33 @@ function normalizeBlank(schema) {
|
|
|
107
107
|
if (schema.safeParse(null).success) return null;
|
|
108
108
|
return undefined;
|
|
109
109
|
}
|
|
110
|
-
function safeBigInt(
|
|
110
|
+
function safeBigInt(value) {
|
|
111
111
|
try {
|
|
112
|
-
return BigInt(
|
|
112
|
+
return BigInt(value);
|
|
113
113
|
} catch (error) {
|
|
114
114
|
return undefined;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
function
|
|
117
|
+
function normalizeValue(value, {
|
|
118
118
|
schema,
|
|
119
119
|
tryNumber,
|
|
120
120
|
tryBigint
|
|
121
121
|
}) {
|
|
122
|
-
if (typeof
|
|
123
|
-
if (typeof
|
|
122
|
+
if (typeof value === 'boolean') return value;
|
|
123
|
+
if (typeof value === 'string' && !/\S/.test(value)) {
|
|
124
124
|
return normalizeBlank(schema);
|
|
125
125
|
}
|
|
126
|
-
if (typeof
|
|
126
|
+
if (typeof value === 'string' && !schema.safeParse(value).success) {
|
|
127
127
|
if (tryNumber) {
|
|
128
|
-
const num = Number(
|
|
128
|
+
const num = Number(value);
|
|
129
129
|
if (!isNaN(num)) return num;
|
|
130
130
|
}
|
|
131
131
|
if (tryBigint) {
|
|
132
|
-
const bigint = safeBigInt(
|
|
132
|
+
const bigint = safeBigInt(value);
|
|
133
133
|
if (bigint != null) return bigint;
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
return
|
|
136
|
+
return value;
|
|
137
137
|
}
|
|
138
138
|
export function useHtmlField({
|
|
139
139
|
field,
|