{"version":3,"names":["dynamic","createEffect","createMemo","omit","untrack","useFieldRootContext","fieldStateAttrs","useAriaLabelledBy","useLabelableId","mergeRootProps","resolveClassStyle","useFieldControlRegistration","useFieldMessagesContext","FieldControl","props","field","messages","id","undefined","disabled","state","value","controlRef","validation","inputRef","getValue","current","externalValue","hasExternal","input","setFilled","ariaLabelledBy","ariaDescribedBy","ids","getMessageIds","length","join","userStyling","userHtmlProps","internalProps","ref","el","name","data-disabled","aria-labelledby","aria-describedby","onFocus","setFocused","onBlur","event","setTouched","validationMode","commit","currentTarget","onInput","setDirty","validityData","initialValue","onKeyDown","tagName","key","styledUserProps","merged","getInputValidationProps","Tag","as"],"sources":["field-control.tsx"],"sourcesContent":["import type { JSX, ValidComponent } from \"@solidjs/web\";\nimport { dynamic } from \"@solidjs/web\";\nimport { createEffect, createMemo, omit, untrack } from \"solid-js\";\nimport {\n\ttype FieldRootState,\n\tuseFieldRootContext,\n} from \"../../internals/field-context.ts\";\nimport { fieldStateAttrs } from \"../../internals/field-state-attrs.ts\";\nimport { useAriaLabelledBy } from \"../../internals/labelable-provider/use-aria-labelled-by.ts\";\nimport { useLabelableId } from \"../../internals/labelable-provider/use-labelable-id.ts\";\nimport { mergeRootProps } from \"../../internals/merge-root-props\";\nimport { resolveClassStyle } from \"../../internals/resolve-class-style\";\nimport type { BaseUIComponentProps } from \"../../internals/types\";\nimport { useFieldControlRegistration } from \"../../internals/use-field-control-registration/use-field-control-registration.ts\";\nimport { useFieldMessagesContext } from \"../field-messages-context.ts\";\n\nexport interface FieldControlState extends FieldRootState {}\n\nexport interface FieldControlProps\n\textends BaseUIComponentProps<\"input\", FieldControlState> {\n\t/** Tag/component to render. Defaults to `\"input\"`. */\n\tas?: ValidComponent;\n}\n\n/**\n * The form control to label and validate. Renders an `<input>` element.\n *\n * Wires:\n *   - id registration into the surrounding `<LabelableProvider>` (so\n *     `<Field.Label>` can point `htmlFor` at us).\n *   - value registration into the surrounding `<Field.Root>` (so form-level\n *     validation / submit focus can find us).\n *   - `aria-labelledby` composed from any labels registered with the provider.\n *   - `aria-describedby` composed from descriptions + errors registered with\n *     the field-messages registry.\n *   - `onInput` / `onBlur` / `onFocus` into the root's touched/dirty/filled/\n *     focused setters and the validation pipeline (`validation.commit` on\n *     blur when `validationMode === 'onBlur'`; `validation.getInputValidationProps()`\n *     merges an `onInput`-driven commit for `onChange`/`onSubmit` modes).\n */\nexport function FieldControl(props: FieldControlProps): JSX.Element {\n\tconst field = useFieldRootContext();\n\tconst messages = useFieldMessagesContext();\n\n\t// Register control id with the labelable-provider so `<Field.Label>`'s\n\t// `htmlFor` wires up. `useLabelableId` handles the one-shot registration\n\t// + cleanup. We pass `props.id` (read once, belt-and-braces via\n\t// `untrack` in the hook itself) to honour a consumer override.\n\tconst { id } = useLabelableId({\n\t\tid: untrack(() => (typeof props.id === \"string\" ? props.id : undefined)),\n\t});\n\n\tconst disabled = createMemo(\n\t\t(): boolean => field.disabled() || props.disabled === true,\n\t);\n\n\tconst state = createMemo(\n\t\t(): FieldControlState => ({\n\t\t\t...field.state(),\n\t\t\tdisabled: disabled(),\n\t\t}),\n\t);\n\n\t// Register our live value with the surrounding `<Field.Root>`. The root\n\t// uses this to key the control into `<Form>`'s `fields` map and to\n\t// refresh the registration on value changes (via `useValueChanged`).\n\t// `getValue` reads directly from the input element — matches React's\n\t// \"validation.inputRef.current?.value\" fallback.\n\tuseFieldControlRegistration({\n\t\tvalue: () => props.value,\n\t\tid: () => id,\n\t\tcontrolRef: field.validation.inputRef,\n\t\tgetValue: () => field.validation.inputRef.current?.value,\n\t});\n\n\t// Keep `filled` in sync with either an external `value` (if controlled)\n\t// or the input element's `value` attribute on mount. Mirrors React's\n\t// `useIsoLayoutEffect` branch in FieldControl.\n\tcreateEffect(\n\t\t() => {\n\t\t\tconst externalValue = props.value;\n\t\t\treturn externalValue;\n\t\t},\n\t\t(externalValue) => {\n\t\t\tconst hasExternal = externalValue != null;\n\t\t\tconst input = field.validation.inputRef.current;\n\t\t\tif (input?.value || (hasExternal && externalValue !== \"\")) {\n\t\t\t\tfield.setFilled(true);\n\t\t\t} else if (hasExternal && externalValue === \"\") {\n\t\t\t\tfield.setFilled(false);\n\t\t\t}\n\t\t},\n\t);\n\n\tconst ariaLabelledBy = useAriaLabelledBy();\n\n\tconst ariaDescribedBy = createMemo((): string | undefined => {\n\t\tconst ids = messages.getMessageIds();\n\t\tif (ids.length === 0) return undefined;\n\t\treturn ids.join(\" \");\n\t});\n\n\tconst userStyling = resolveClassStyle(props, () => state());\n\n\tconst userHtmlProps = omit(\n\t\tprops,\n\t\t\"class\",\n\t\t\"style\",\n\t\t\"attrs\",\n\t\t\"as\",\n\t\t\"id\",\n\t) as Record<string, unknown>;\n\n\tconst internalProps = mergeRootProps(fieldStateAttrs(state), {\n\t\tid,\n\t\tref: (el: HTMLInputElement | null): void => {\n\t\t\tfield.validation.inputRef.current = el;\n\t\t},\n\t\tget disabled() {\n\t\t\treturn disabled();\n\t\t},\n\t\tget name() {\n\t\t\treturn field.name() ?? props.name;\n\t\t},\n\t\tget \"data-disabled\"(): \"\" | undefined {\n\t\t\treturn disabled() ? \"\" : undefined;\n\t\t},\n\t\tget \"aria-labelledby\"() {\n\t\t\treturn ariaLabelledBy() ?? \"\";\n\t\t},\n\t\tget \"aria-describedby\"() {\n\t\t\treturn ariaDescribedBy() ?? \"\";\n\t\t},\n\t\tonFocus: () => {\n\t\t\tfield.setFocused(true);\n\t\t},\n\t\tonBlur: (event: FocusEvent & { currentTarget: HTMLInputElement }) => {\n\t\t\tfield.setTouched(true);\n\t\t\tfield.setFocused(false);\n\t\t\tif (field.validationMode() === \"onBlur\") {\n\t\t\t\tvoid field.validation.commit(event.currentTarget.value);\n\t\t\t}\n\t\t},\n\t\tonInput: (event: InputEvent & { currentTarget: HTMLInputElement }) => {\n\t\t\tconst value = event.currentTarget.value;\n\t\t\tfield.setDirty(value !== field.validityData().initialValue);\n\t\t\tfield.setFilled(value !== \"\");\n\t\t},\n\t\tonKeyDown: (event: KeyboardEvent & { currentTarget: HTMLInputElement }) => {\n\t\t\tif (event.currentTarget.tagName === \"INPUT\" && event.key === \"Enter\") {\n\t\t\t\tfield.setTouched(true);\n\t\t\t\tvoid field.validation.commit(event.currentTarget.value);\n\t\t\t}\n\t\t},\n\t});\n\n\tconst styledUserProps = mergeRootProps(userStyling, userHtmlProps);\n\n\tconst merged = mergeRootProps(\n\t\tmergeRootProps(\n\t\t\tinternalProps,\n\t\t\tfield.validation.getInputValidationProps() as Record<string, unknown>,\n\t\t),\n\t\tstyledUserProps,\n\t);\n\n\tconst Tag = dynamic(() => props.as ?? \"input\");\n\treturn <Tag {...merged} />;\n}\n"],"mappings":"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","ignoreList":[]}