{"version":3,"names":["onCleanup","untrack","DEFAULT_VALIDITY_STATE","getCombinedFieldValidityData","useFormContext","mergePropsN","ariaInvalid","createStableCallback","useTimeout","validityKeys","Object","keys","isOnlyValueMissing","state","valid","valueMissing","onlyValueMissing","key","useFieldValidation","params","setValidityData","validate","validityData","validationDebounceTime","invalid","markedDirtyRef","name","controlId","shouldValidateOnChange","formRef","clearErrors","timeout","inputRef","current","commitGeneration","disposed","commitImpl","value","revalidate","myGeneration","isStale","element","currentValidity","currentState","currentNativeValidity","validity","nextValidityData","error","errors","initialValue","setCustomValidity","id","currentFieldData","fields","get","set","currentNativeValidityObject","reduce","acc","getState","el","computedState","hasOnlyValueMissingError","clear","result","validationErrors","nextState","defaultValidationMessage","validateOnChange","validationMessage","formValues","Array","from","values","field","getValue","validateFn","resultOrPromise","customError","isArray","join","commit","getValidationProps","externalProps","getInputValidationProps","onInput","event","defaultPrevented","currentTarget","debounce","start"],"sources":["use-field-validation.ts"],"sourcesContent":["import type { JSX } from \"@solidjs/web\";\nimport { type Accessor, onCleanup, untrack } from \"solid-js\";\nimport {\n\tDEFAULT_VALIDITY_STATE,\n\tgetCombinedFieldValidityData,\n} from \"../field-constants\";\nimport type {\n\tFieldRootState,\n\tFieldValidateFn,\n\tFieldValidationProps,\n\tFieldValidityData,\n\tMutableRef,\n} from \"../field-context\";\nimport { useFormContext } from \"../form-context\";\nimport { mergePropsN, type PropsLike } from \"../merge-props-n\";\nimport { ariaInvalid } from \"../seed-aria-attr\";\nimport { createStableCallback } from \"../stable-callback\";\nimport { useTimeout } from \"../use-timeout\";\n\ntype ValidityKey = keyof ValidityState;\n\nconst validityKeys = Object.keys(DEFAULT_VALIDITY_STATE) as Array<ValidityKey>;\n\n/**\n * Native ValidityState may only report `valueMissing` (i.e. the control is\n * empty) — we don't want to \"scold\" the user for empty fields if other\n * native errors aren't present. This helper returns `true` when the only\n * thing wrong is `valueMissing`.\n */\nfunction isOnlyValueMissing(\n\tstate: Record<ValidityKey, boolean> | undefined,\n): boolean {\n\tif (!state || state.valid || !state.valueMissing) {\n\t\treturn false;\n\t}\n\n\tlet onlyValueMissing = false;\n\n\tfor (const key of validityKeys) {\n\t\tif (key === \"valid\") continue;\n\t\tif (key === \"valueMissing\") {\n\t\t\tonlyValueMissing = state[key];\n\t\t\tcontinue;\n\t\t}\n\t\tif (state[key]) {\n\t\t\tonlyValueMissing = false;\n\t\t}\n\t}\n\n\treturn onlyValueMissing;\n}\n\nexport interface UseFieldValidationParameters {\n\tsetValidityData: (data: FieldValidityData) => void;\n\tvalidate: Accessor<FieldValidateFn | undefined>;\n\tvalidityData: Accessor<FieldValidityData>;\n\tvalidationDebounceTime: Accessor<number>;\n\tinvalid: Accessor<boolean>;\n\tmarkedDirtyRef: MutableRef<boolean>;\n\tstate: Accessor<FieldRootState>;\n\tname: Accessor<string | undefined>;\n\t/** `<Field.Root>`-level id (for Form registration) — used to key the\n\t *  fields map when updating the form's combined validity snapshot. */\n\tcontrolId: Accessor<string | undefined>;\n\tshouldValidateOnChange: Accessor<boolean>;\n}\n\n/**\n * Port of Base UI React's `useFieldValidation`\n * (`packages/react/src/field/root/useFieldValidation.ts`). Produces the\n * props-factories and the imperative `commit` function that the Field root\n * exposes to the rest of the field parts.\n *\n * Solid 2 notes:\n *\n * - Every parameter except the plain refs is an `Accessor<T>`. Callers read\n *   them through the stable-callback trampolines below, so invocation-time\n *   values always win.\n * - `commit` wraps a setValidityData write; the parent root is expected to\n *   route that through its own `createStableCallback`-wrapped setter so\n *   writes inside reactive scope are legal.\n * - React used `ReactDOM.flushSync` for synchronous submit validation; the\n *   Solid port calls `flush()` is NOT needed here because consumers do it\n *   themselves after invoking `validate`. The `flushSync` parameter is\n *   accepted for API parity with the React entry handled.\n */\nexport function useFieldValidation(\n\tparams: UseFieldValidationParameters,\n): FieldValidationProps {\n\tconst {\n\t\tsetValidityData,\n\t\tvalidate,\n\t\tvalidityData,\n\t\tvalidationDebounceTime,\n\t\tinvalid,\n\t\tmarkedDirtyRef,\n\t\tstate,\n\t\tname,\n\t\tcontrolId,\n\t\tshouldValidateOnChange,\n\t} = params;\n\n\tconst { formRef, clearErrors } = useFormContext();\n\n\tconst timeout = useTimeout();\n\tconst inputRef: MutableRef<HTMLInputElement | null> = { current: null };\n\n\t// Monotonic generation counter — bumped on each commit entry so any\n\t// later-started commit can invalidate the writes of an in-flight\n\t// predecessor. Last-start-wins: an await in commit#1 cannot land its\n\t// validity write if commit#2 has been started in the meantime. This\n\t// matches React's pattern (used in combination with React's mount-guard)\n\t// and prevents intermediate states from leaking between two racing\n\t// commits.\n\tlet commitGeneration = 0;\n\n\t// Owner-dispose guard. `commit` is async and can outlive the owning\n\t// scope: if the consumer awaits a slow validate and the root disposes\n\t// before it resolves, we must not land a late `setValidityData` write.\n\t// `useFieldValidation` itself lives in the component body, so\n\t// `onCleanup` fires when the owner disposes.\n\tlet disposed = false;\n\tonCleanup(() => {\n\t\tdisposed = true;\n\t});\n\n\t// Core commit routine — wrapped below via `createStableCallback` so the\n\t// returned reference is referentially stable for consumers that capture\n\t// it in refs / closures.\n\tconst commitImpl = async (\n\t\tvalue: unknown,\n\t\trevalidate = false,\n\t): Promise<void> => {\n\t\tconst myGeneration = ++commitGeneration;\n\t\tconst isStale = () => disposed || myGeneration !== commitGeneration;\n\t\tif (disposed) return;\n\t\tconst element = inputRef.current;\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\n\t\t// `untrack` the reactive-state snapshot reads — `commitImpl` is an\n\t\t// imperative side-effect path called from event handlers and other\n\t\t// callers that may sit in unowned/effect-apply scope. The reads\n\t\t// here are point-in-time snapshots, not subscriptions.\n\t\tconst currentValidity = untrack(validityData);\n\t\tconst currentState = untrack(state);\n\n\t\tif (revalidate) {\n\t\t\tif (currentState.valid !== false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst currentNativeValidity = element.validity;\n\n\t\t\tif (!currentNativeValidity.valueMissing) {\n\t\t\t\t// The 'valueMissing' (required) condition has been resolved\n\t\t\t\t// by the user typing. Temporarily mark the field as valid\n\t\t\t\t// for this onChange event. Other native errors (e.g.\n\t\t\t\t// `typeMismatch`) will be caught by full validation on blur\n\t\t\t\t// or submit.\n\t\t\t\tconst nextValidityData: FieldValidityData = {\n\t\t\t\t\tvalue,\n\t\t\t\t\tstate: { ...DEFAULT_VALIDITY_STATE, valid: true },\n\t\t\t\t\terror: \"\",\n\t\t\t\t\terrors: [],\n\t\t\t\t\tinitialValue: currentValidity.initialValue,\n\t\t\t\t};\n\t\t\t\telement.setCustomValidity(\"\");\n\n\t\t\t\tconst id = controlId();\n\t\t\t\tif (id) {\n\t\t\t\t\tconst currentFieldData = formRef.current.fields.get(id);\n\t\t\t\t\tif (currentFieldData) {\n\t\t\t\t\t\t// `getCombinedFieldValidityData` returns a `FieldValidityData`\n\t\t\t\t\t\t// (top-level: state/errors/error/value/initialValue). It must\n\t\t\t\t\t\t// land under the entry's `validityData` key, NOT spread onto\n\t\t\t\t\t\t// the entry — otherwise Form's submit path, which reads\n\t\t\t\t\t\t// `entry.validityData.state.valid`, sees the stale snapshot\n\t\t\t\t\t\t// captured at registration time.\n\t\t\t\t\t\tformRef.current.fields.set(id, {\n\t\t\t\t\t\t\t...currentFieldData,\n\t\t\t\t\t\t\tvalidityData: getCombinedFieldValidityData(\n\t\t\t\t\t\t\t\tnextValidityData,\n\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsetValidityData(nextValidityData);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Value is still missing, or other conditions apply. Build a\n\t\t\t// plain object representation of the native validity so\n\t\t\t// `isOnlyValueMissing` can inspect it without the live\n\t\t\t// `ValidityState` getter overhead.\n\t\t\tconst currentNativeValidityObject = validityKeys.reduce(\n\t\t\t\t(acc, key) => {\n\t\t\t\t\tacc[key] = currentNativeValidity[key];\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<ValidityKey, boolean>,\n\t\t\t);\n\n\t\t\t// If it's (still) natively invalid due to something other than\n\t\t\t// just valueMissing, bail from this revalidation-on-change to\n\t\t\t// avoid \"scolding\" the user for unrelated errors mid-typing.\n\t\t\tif (\n\t\t\t\t!currentNativeValidityObject.valid &&\n\t\t\t\t!isOnlyValueMissing(currentNativeValidityObject)\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise fall through to the full validation path below.\n\t\t}\n\n\t\tfunction getState(el: HTMLInputElement) {\n\t\t\tconst computedState = validityKeys.reduce(\n\t\t\t\t(acc, key) => {\n\t\t\t\t\tacc[key] = el.validity[key];\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<ValidityKey, boolean>,\n\t\t\t);\n\n\t\t\tlet hasOnlyValueMissingError = false;\n\n\t\t\tfor (const key of validityKeys) {\n\t\t\t\tif (key === \"valid\") continue;\n\t\t\t\tif (key === \"valueMissing\" && computedState[key]) {\n\t\t\t\t\thasOnlyValueMissingError = true;\n\t\t\t\t} else if (computedState[key]) {\n\t\t\t\t\treturn computedState;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Only let `valueMissing` mark the field invalid once the user\n\t\t\t// has touched it; otherwise every pristine required field\n\t\t\t// would render as \"invalid\" on mount.\n\t\t\tif (hasOnlyValueMissingError && !markedDirtyRef.current) {\n\t\t\t\tcomputedState.valid = true;\n\t\t\t\tcomputedState.valueMissing = false;\n\t\t\t}\n\t\t\treturn computedState;\n\t\t}\n\n\t\ttimeout.clear();\n\n\t\tlet result: null | string | string[] = null;\n\t\tlet validationErrors: string[] = [];\n\n\t\tconst nextState = getState(element);\n\n\t\tlet defaultValidationMessage: string | undefined;\n\t\tconst validateOnChange = shouldValidateOnChange();\n\n\t\tif (element.validationMessage && !validateOnChange) {\n\t\t\t// Not validating on change: if there's a native\n\t\t\t// `validationMessage`, surface it directly and skip the\n\t\t\t// consumer-supplied validate fn.\n\t\t\tdefaultValidationMessage = element.validationMessage;\n\t\t\tvalidationErrors = [element.validationMessage];\n\t\t} else {\n\t\t\t// Either validating on change, or native constraint validations\n\t\t\t// passed — call the custom validate fn next.\n\t\t\tconst formValues = Array.from(formRef.current.fields.values()).reduce(\n\t\t\t\t(acc, field) => {\n\t\t\t\t\tif (field.name) {\n\t\t\t\t\t\tacc[field.name] = field.getValue();\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t\t},\n\t\t\t\t{} as Record<string, unknown>,\n\t\t\t);\n\n\t\t\tconst validateFn = validate();\n\t\t\tif (validateFn) {\n\t\t\t\tconst resultOrPromise = validateFn(value, formValues);\n\t\t\t\tif (\n\t\t\t\t\ttypeof resultOrPromise === \"object\" &&\n\t\t\t\t\tresultOrPromise !== null &&\n\t\t\t\t\t\"then\" in resultOrPromise\n\t\t\t\t) {\n\t\t\t\t\tresult = await resultOrPromise;\n\t\t\t\t\t// A newer commit started while we were awaiting — bail so\n\t\t\t\t\t// the later call's result (or lack thereof) wins. No\n\t\t\t\t\t// intermediate state gets published.\n\t\t\t\t\tif (isStale()) return;\n\t\t\t\t} else {\n\t\t\t\t\tresult = resultOrPromise as string | string[] | null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result !== null) {\n\t\t\t\tnextState.valid = false;\n\t\t\t\tnextState.customError = true;\n\n\t\t\t\tif (Array.isArray(result)) {\n\t\t\t\t\tvalidationErrors = result;\n\t\t\t\t\telement.setCustomValidity(result.join(\"\\n\"));\n\t\t\t\t} else if (result) {\n\t\t\t\t\tvalidationErrors = [result];\n\t\t\t\t\telement.setCustomValidity(result);\n\t\t\t\t}\n\t\t\t} else if (validateOnChange) {\n\t\t\t\t// Custom validate returned no errors; if validating on\n\t\t\t\t// change we need to clear the previously-set custom\n\t\t\t\t// validity so the next native check reads clean.\n\t\t\t\telement.setCustomValidity(\"\");\n\t\t\t\tnextState.customError = false;\n\n\t\t\t\tif (element.validationMessage) {\n\t\t\t\t\tdefaultValidationMessage = element.validationMessage;\n\t\t\t\t\tvalidationErrors = [element.validationMessage];\n\t\t\t\t} else if (element.validity.valid && !nextState.valid) {\n\t\t\t\t\tnextState.valid = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst nextValidityData: FieldValidityData = {\n\t\t\tvalue,\n\t\t\tstate: nextState,\n\t\t\terror:\n\t\t\t\tdefaultValidationMessage ??\n\t\t\t\t(Array.isArray(result) ? (result[0] ?? \"\") : (result ?? \"\")),\n\t\t\terrors: validationErrors,\n\t\t\tinitialValue: currentValidity.initialValue,\n\t\t};\n\n\t\tconst id = controlId();\n\t\tif (id) {\n\t\t\tconst currentFieldData = formRef.current.fields.get(id);\n\t\t\tif (currentFieldData) {\n\t\t\t\t// Land the combined snapshot under `validityData` (NOT spread\n\t\t\t\t// onto the entry's top-level keys) so Form's `finishSubmit`,\n\t\t\t\t// which reads `entry.validityData.state.valid`, sees the\n\t\t\t\t// fresh result. See sibling fix in the revalidate branch.\n\t\t\t\tformRef.current.fields.set(id, {\n\t\t\t\t\t...currentFieldData,\n\t\t\t\t\tvalidityData: getCombinedFieldValidityData(\n\t\t\t\t\t\tnextValidityData,\n\t\t\t\t\t\tinvalid(),\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tsetValidityData(nextValidityData);\n\t};\n\n\tconst commit = createStableCallback<typeof commitImpl>(() => commitImpl);\n\n\tconst getValidationProps = (\n\t\texternalProps: JSX.HTMLAttributes<HTMLElement> = {},\n\t): JSX.HTMLAttributes<HTMLElement> => {\n\t\t// `mergePropsN` is the reactive analog to React's `mergeProps` — it\n\t\t// layers getters on top of each other so `aria-invalid` updates with\n\t\t// `state()`.\n\t\treturn mergePropsN([\n\t\t\tariaInvalid(() => state().valid === false),\n\t\t\texternalProps as PropsLike,\n\t\t]) as JSX.HTMLAttributes<HTMLElement>;\n\t};\n\n\tconst getInputValidationProps = (\n\t\texternalProps: JSX.InputHTMLAttributes<HTMLInputElement> = {},\n\t): JSX.InputHTMLAttributes<HTMLInputElement> => {\n\t\tconst onInput = (\n\t\t\tevent: InputEvent & { currentTarget: HTMLInputElement },\n\t\t) => {\n\t\t\t// The native event handler for React's `onChange` is `onInput` in\n\t\t\t// Solid — match React's behavior (which explicitly bails on\n\t\t\t// `defaultPrevented` due to a React bug; we preserve the guard).\n\t\t\tif (event.defaultPrevented) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tclearErrors(name());\n\n\t\t\tif (!shouldValidateOnChange()) {\n\t\t\t\tvoid commit(event.currentTarget.value, true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst element = event.currentTarget;\n\n\t\t\tif (element.value === \"\") {\n\t\t\t\t// Empty values bypass the debounce so \"required\" errors clear\n\t\t\t\t// immediately when the user clears the field.\n\t\t\t\tvoid commit(element.value);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttimeout.clear();\n\n\t\t\tconst debounce = validationDebounceTime();\n\t\t\tif (debounce) {\n\t\t\t\ttimeout.start(debounce, () => {\n\t\t\t\t\tvoid commit(element.value);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tvoid commit(element.value);\n\t\t\t}\n\t\t};\n\n\t\treturn mergePropsN([\n\t\t\t{ onInput } as PropsLike,\n\t\t\tgetValidationProps(\n\t\t\t\texternalProps as JSX.HTMLAttributes<HTMLElement>,\n\t\t\t) as PropsLike,\n\t\t]) as JSX.InputHTMLAttributes<HTMLInputElement>;\n\t};\n\n\treturn {\n\t\tgetValidationProps,\n\t\tgetInputValidationProps,\n\t\tinputRef,\n\t\tcommit,\n\t};\n}\n"],"mappings":"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","ignoreList":[]}