formstand 0.10.0 → 0.11.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/CHANGELOG.md +265 -0
- package/dist/index.cjs +20 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +21 -7
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
package/dist/index.d.cts
CHANGED
|
@@ -398,6 +398,15 @@ type NumberFieldProps<F extends FieldFormApi = FieldFormApi> = Readonly<{
|
|
|
398
398
|
placeholder?: string;
|
|
399
399
|
ref?: FieldRef<HTMLInputElement>;
|
|
400
400
|
}>;
|
|
401
|
+
type NumberInputBinding = Readonly<{
|
|
402
|
+
name: string;
|
|
403
|
+
value: string;
|
|
404
|
+
inputMode: "decimal";
|
|
405
|
+
"aria-invalid": true | undefined;
|
|
406
|
+
onChange: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
407
|
+
onBlur: () => void;
|
|
408
|
+
}>;
|
|
409
|
+
declare const useNumberInput: (field: UseFieldReturn<number | null | undefined>) => NumberInputBinding;
|
|
401
410
|
declare const NumberField: <F extends FieldFormApi>({ form, path, label, placeholder, ref, }: NumberFieldProps<F>) => react.JSX.Element;
|
|
402
411
|
type CheckboxFieldProps<F extends FieldFormApi = FieldFormApi> = Readonly<{
|
|
403
412
|
form: F;
|
|
@@ -488,4 +497,4 @@ declare const dateInputProps: <T extends Date | null | undefined>(field: UseFiel
|
|
|
488
497
|
declare const checkboxProps: <T extends boolean | null | undefined>(field: UseFieldReturn<T>) => CheckboxProps;
|
|
489
498
|
declare const selectProps: <T extends string | null | undefined>(field: UseFieldReturn<T>) => SelectProps;
|
|
490
499
|
|
|
491
|
-
export { type BoolMap, type BoundUseField, type BoundUseFieldArray, type BoundUseFlag, type BoundUseSelector, CheckboxField, type CheckboxFieldProps, type CheckboxProps, type CreateFormOptions, DateField, type DateFieldProps, type DateInputProps, type DefaultPathDepth, type ErrorMap, type FieldArrayEntry, type FieldArrayFormApi, type FieldFormApi, type FieldPath, type FieldPathArg, type FieldRef, type FieldSnapshot, type FieldValidationResult, type FieldValue, type FieldsValidationResult, type Form, type FormContextApi, type FormHooks, type FormProviderProps, type FormState, type FormStateApi, type InvalidSubmitHandler, NumberField, type NumberFieldProps, type NumberInputProps, type ParsedDateText, type ParsedNumberText, type PathDepth, type PathSegment, type PathsOf, type PersistHandle, type PersistOptions, type PersistStorage, type ReadonlyStoreApi, type ResetOptions, SelectField, type SelectFieldOption, type SelectFieldProps, type SelectProps, type SettledFieldValidationResult, type SettledFieldsValidationResult, type SettledValidationResult, type SubmitHandler, type SubmitOptions, type SubmitResult, TextField, type TextFieldProps, type TextInputProps, type UseFieldArrayReturn, type UseFieldOptions, type UseFieldReturn, type ValidationMode, type ValidationResult, type ValidationTrigger, checkboxProps, createForm, createFormContext, createFormHooks, dateInputProps, dateToInputText, emptyValueForSchema, flattenIssues, focusField, focusFirstError, getAtPath, hasFieldError, isAsyncRequiredError, numberInputProps, numberToInputText, parseDateText, parseNumberText, parsePath, persistForm, selectProps, setAtPath, shouldValidateOn, textInputProps, useField, useFieldArray, useForm, useFormError, useFormSelector, useFormSelectorShallow, useIsDirty, useIsSubmitting, useIsValid, useSubmitCount, useVariantField, validateAsync, validateSync };
|
|
500
|
+
export { type BoolMap, type BoundUseField, type BoundUseFieldArray, type BoundUseFlag, type BoundUseSelector, CheckboxField, type CheckboxFieldProps, type CheckboxProps, type CreateFormOptions, DateField, type DateFieldProps, type DateInputProps, type DefaultPathDepth, type ErrorMap, type FieldArrayEntry, type FieldArrayFormApi, type FieldFormApi, type FieldPath, type FieldPathArg, type FieldRef, type FieldSnapshot, type FieldValidationResult, type FieldValue, type FieldsValidationResult, type Form, type FormContextApi, type FormHooks, type FormProviderProps, type FormState, type FormStateApi, type InvalidSubmitHandler, NumberField, type NumberFieldProps, type NumberInputBinding, type NumberInputProps, type ParsedDateText, type ParsedNumberText, type PathDepth, type PathSegment, type PathsOf, type PersistHandle, type PersistOptions, type PersistStorage, type ReadonlyStoreApi, type ResetOptions, SelectField, type SelectFieldOption, type SelectFieldProps, type SelectProps, type SettledFieldValidationResult, type SettledFieldsValidationResult, type SettledValidationResult, type SubmitHandler, type SubmitOptions, type SubmitResult, TextField, type TextFieldProps, type TextInputProps, type UseFieldArrayReturn, type UseFieldOptions, type UseFieldReturn, type ValidationMode, type ValidationResult, type ValidationTrigger, checkboxProps, createForm, createFormContext, createFormHooks, dateInputProps, dateToInputText, emptyValueForSchema, flattenIssues, focusField, focusFirstError, getAtPath, hasFieldError, isAsyncRequiredError, numberInputProps, numberToInputText, parseDateText, parseNumberText, parsePath, persistForm, selectProps, setAtPath, shouldValidateOn, textInputProps, useField, useFieldArray, useForm, useFormError, useFormSelector, useFormSelectorShallow, useIsDirty, useIsSubmitting, useIsValid, useNumberInput, useSubmitCount, useVariantField, validateAsync, validateSync };
|
package/dist/index.d.ts
CHANGED
|
@@ -398,6 +398,15 @@ type NumberFieldProps<F extends FieldFormApi = FieldFormApi> = Readonly<{
|
|
|
398
398
|
placeholder?: string;
|
|
399
399
|
ref?: FieldRef<HTMLInputElement>;
|
|
400
400
|
}>;
|
|
401
|
+
type NumberInputBinding = Readonly<{
|
|
402
|
+
name: string;
|
|
403
|
+
value: string;
|
|
404
|
+
inputMode: "decimal";
|
|
405
|
+
"aria-invalid": true | undefined;
|
|
406
|
+
onChange: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
407
|
+
onBlur: () => void;
|
|
408
|
+
}>;
|
|
409
|
+
declare const useNumberInput: (field: UseFieldReturn<number | null | undefined>) => NumberInputBinding;
|
|
401
410
|
declare const NumberField: <F extends FieldFormApi>({ form, path, label, placeholder, ref, }: NumberFieldProps<F>) => react.JSX.Element;
|
|
402
411
|
type CheckboxFieldProps<F extends FieldFormApi = FieldFormApi> = Readonly<{
|
|
403
412
|
form: F;
|
|
@@ -488,4 +497,4 @@ declare const dateInputProps: <T extends Date | null | undefined>(field: UseFiel
|
|
|
488
497
|
declare const checkboxProps: <T extends boolean | null | undefined>(field: UseFieldReturn<T>) => CheckboxProps;
|
|
489
498
|
declare const selectProps: <T extends string | null | undefined>(field: UseFieldReturn<T>) => SelectProps;
|
|
490
499
|
|
|
491
|
-
export { type BoolMap, type BoundUseField, type BoundUseFieldArray, type BoundUseFlag, type BoundUseSelector, CheckboxField, type CheckboxFieldProps, type CheckboxProps, type CreateFormOptions, DateField, type DateFieldProps, type DateInputProps, type DefaultPathDepth, type ErrorMap, type FieldArrayEntry, type FieldArrayFormApi, type FieldFormApi, type FieldPath, type FieldPathArg, type FieldRef, type FieldSnapshot, type FieldValidationResult, type FieldValue, type FieldsValidationResult, type Form, type FormContextApi, type FormHooks, type FormProviderProps, type FormState, type FormStateApi, type InvalidSubmitHandler, NumberField, type NumberFieldProps, type NumberInputProps, type ParsedDateText, type ParsedNumberText, type PathDepth, type PathSegment, type PathsOf, type PersistHandle, type PersistOptions, type PersistStorage, type ReadonlyStoreApi, type ResetOptions, SelectField, type SelectFieldOption, type SelectFieldProps, type SelectProps, type SettledFieldValidationResult, type SettledFieldsValidationResult, type SettledValidationResult, type SubmitHandler, type SubmitOptions, type SubmitResult, TextField, type TextFieldProps, type TextInputProps, type UseFieldArrayReturn, type UseFieldOptions, type UseFieldReturn, type ValidationMode, type ValidationResult, type ValidationTrigger, checkboxProps, createForm, createFormContext, createFormHooks, dateInputProps, dateToInputText, emptyValueForSchema, flattenIssues, focusField, focusFirstError, getAtPath, hasFieldError, isAsyncRequiredError, numberInputProps, numberToInputText, parseDateText, parseNumberText, parsePath, persistForm, selectProps, setAtPath, shouldValidateOn, textInputProps, useField, useFieldArray, useForm, useFormError, useFormSelector, useFormSelectorShallow, useIsDirty, useIsSubmitting, useIsValid, useSubmitCount, useVariantField, validateAsync, validateSync };
|
|
500
|
+
export { type BoolMap, type BoundUseField, type BoundUseFieldArray, type BoundUseFlag, type BoundUseSelector, CheckboxField, type CheckboxFieldProps, type CheckboxProps, type CreateFormOptions, DateField, type DateFieldProps, type DateInputProps, type DefaultPathDepth, type ErrorMap, type FieldArrayEntry, type FieldArrayFormApi, type FieldFormApi, type FieldPath, type FieldPathArg, type FieldRef, type FieldSnapshot, type FieldValidationResult, type FieldValue, type FieldsValidationResult, type Form, type FormContextApi, type FormHooks, type FormProviderProps, type FormState, type FormStateApi, type InvalidSubmitHandler, NumberField, type NumberFieldProps, type NumberInputBinding, type NumberInputProps, type ParsedDateText, type ParsedNumberText, type PathDepth, type PathSegment, type PathsOf, type PersistHandle, type PersistOptions, type PersistStorage, type ReadonlyStoreApi, type ResetOptions, SelectField, type SelectFieldOption, type SelectFieldProps, type SelectProps, type SettledFieldValidationResult, type SettledFieldsValidationResult, type SettledValidationResult, type SubmitHandler, type SubmitOptions, type SubmitResult, TextField, type TextFieldProps, type TextInputProps, type UseFieldArrayReturn, type UseFieldOptions, type UseFieldReturn, type ValidationMode, type ValidationResult, type ValidationTrigger, checkboxProps, createForm, createFormContext, createFormHooks, dateInputProps, dateToInputText, emptyValueForSchema, flattenIssues, focusField, focusFirstError, getAtPath, hasFieldError, isAsyncRequiredError, numberInputProps, numberToInputText, parseDateText, parseNumberText, parsePath, persistForm, selectProps, setAtPath, shouldValidateOn, textInputProps, useField, useFieldArray, useForm, useFormError, useFormSelector, useFormSelectorShallow, useIsDirty, useIsSubmitting, useIsValid, useNumberInput, useSubmitCount, useVariantField, validateAsync, validateSync };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createStore } from 'zustand/vanilla';
|
|
2
2
|
import { devtools } from 'zustand/middleware';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { useRef, useEffect, createContext, useMemo, useCallback, useContext, useId
|
|
4
|
+
import { useRef, useEffect, createContext, useMemo, useCallback, useState, useContext, useId } from 'react';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
import { useStore } from 'zustand/react';
|
|
7
7
|
import { useShallow } from 'zustand/react/shallow';
|
|
@@ -1932,6 +1932,20 @@ var nameMatchesAny = (el, paths) => {
|
|
|
1932
1932
|
const name = el.getAttribute("name");
|
|
1933
1933
|
return name !== null && paths.some((p) => isPathOrChild(name, p));
|
|
1934
1934
|
};
|
|
1935
|
+
var cssQuoted = (value) => `"${value.replace(/[\\"]/g, (ch) => `\\${ch}`)}"`;
|
|
1936
|
+
var idMatches = (scope, path) => path === "" ? [] : [...scope.querySelectorAll(`[id=${cssQuoted(path)}]`)];
|
|
1937
|
+
var inDomOrder = (els) => [...els].sort(
|
|
1938
|
+
(a, b) => a === b ? 0 : (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0 ? -1 : 1
|
|
1939
|
+
);
|
|
1940
|
+
var pathCandidates = (scope, paths) => {
|
|
1941
|
+
const controls = namedControls(scope);
|
|
1942
|
+
const named = controls.filter((el) => nameMatchesAny(el, paths));
|
|
1943
|
+
const unnamedPaths = paths.filter(
|
|
1944
|
+
(p) => !controls.some((el) => nameMatchesAny(el, [p]))
|
|
1945
|
+
);
|
|
1946
|
+
const byId = unnamedPaths.flatMap((p) => idMatches(scope, p));
|
|
1947
|
+
return inDomOrder([.../* @__PURE__ */ new Set([...named, ...byId])]);
|
|
1948
|
+
};
|
|
1935
1949
|
var focusFirstError = (errors, root) => {
|
|
1936
1950
|
const scope = root ?? document;
|
|
1937
1951
|
const erroredPaths = Object.keys(errors).filter(
|
|
@@ -1939,18 +1953,18 @@ var focusFirstError = (errors, root) => {
|
|
|
1939
1953
|
);
|
|
1940
1954
|
const hasRootError = (errors[""]?.length ?? 0) > 0;
|
|
1941
1955
|
const controls = namedControls(scope);
|
|
1942
|
-
const fieldMatches =
|
|
1956
|
+
const fieldMatches = pathCandidates(scope, erroredPaths).filter(
|
|
1957
|
+
isFocusCandidate
|
|
1958
|
+
);
|
|
1943
1959
|
const rootFallbackApplies = hasRootError && (root !== void 0 || document.querySelectorAll("form").length <= 1);
|
|
1944
1960
|
const candidates = fieldMatches.length > 0 ? fieldMatches : rootFallbackApplies ? controls.filter(isFocusCandidate) : [];
|
|
1945
1961
|
return focusFirstOf(candidates);
|
|
1946
1962
|
};
|
|
1947
1963
|
var focusField = (path, root) => {
|
|
1948
|
-
const
|
|
1949
|
-
return path === "" ? (root !== void 0 || document.querySelectorAll("form").length <= 1) && focusFirstOf(
|
|
1950
|
-
controls.filter((el) => nameMatchesAny(el, [path])).filter(isFocusCandidate)
|
|
1951
|
-
);
|
|
1964
|
+
const scope = root ?? document;
|
|
1965
|
+
return path === "" ? (root !== void 0 || document.querySelectorAll("form").length <= 1) && focusFirstOf(namedControls(scope).filter(isFocusCandidate)) : focusFirstOf(pathCandidates(scope, [path]).filter(isFocusCandidate));
|
|
1952
1966
|
};
|
|
1953
1967
|
|
|
1954
|
-
export { CheckboxField, DateField, NumberField, SelectField, TextField, checkboxProps, createForm, createFormContext, createFormHooks, dateInputProps, dateToInputText, emptyValueForSchema, flattenIssues, focusField, focusFirstError, getAtPath, hasFieldError, isAsyncRequiredError, numberInputProps, numberToInputText, parseDateText, parseNumberText, parsePath, persistForm, selectProps, setAtPath, shouldValidateOn, textInputProps, useField, useFieldArray, useForm, useFormError, useFormSelector, useFormSelectorShallow, useIsDirty, useIsSubmitting, useIsValid, useSubmitCount, useVariantField, validateAsync, validateSync };
|
|
1968
|
+
export { CheckboxField, DateField, NumberField, SelectField, TextField, checkboxProps, createForm, createFormContext, createFormHooks, dateInputProps, dateToInputText, emptyValueForSchema, flattenIssues, focusField, focusFirstError, getAtPath, hasFieldError, isAsyncRequiredError, numberInputProps, numberToInputText, parseDateText, parseNumberText, parsePath, persistForm, selectProps, setAtPath, shouldValidateOn, textInputProps, useField, useFieldArray, useForm, useFormError, useFormSelector, useFormSelectorShallow, useIsDirty, useIsSubmitting, useIsValid, useNumberInput, useSubmitCount, useVariantField, validateAsync, validateSync };
|
|
1955
1969
|
//# sourceMappingURL=index.js.map
|
|
1956
1970
|
//# sourceMappingURL=index.js.map
|