{"version":3,"file":"useFormInput-Bj0gWSIo.mjs","sources":["../src/utils/normalizeInput.ts","../src/composables/useFormInput.ts"],"sourcesContent":["import type {Numberish} from '../types/CommonTypes'\n\nexport const normalizeInput = (\n  v: Numberish | null,\n  modelModifiers: Record<'number' | 'lazy' | 'trim', true | undefined>\n) => {\n  if (v === null) return\n  let update = v\n  if (modelModifiers.trim) update = update.toString().trim()\n  if (modelModifiers.number && typeof update === 'string' && update !== '') {\n    const parsed = Number.parseFloat(update)\n    update = Number.isNaN(parsed) ? update : parsed\n  }\n  return update\n}\n","import type {Numberish} from '../types/CommonTypes'\nimport {nextTick, onActivated, onMounted, ref, type Ref} from 'vue'\nimport {useAriaInvalid} from './useAriaInvalid'\nimport {useId} from './useId'\nimport {useDebounceFn, useFocus, useToNumber} from '@vueuse/core'\nimport type {CommonInputProps} from '../types/FormCommonInputProps'\n\nexport const useFormInput = (\n  props: Readonly<CommonInputProps>,\n  modelValue: Ref<Numberish | null>,\n  modelModifiers: Record<'number' | 'lazy' | 'trim', true | undefined>\n) => {\n  const input = ref<HTMLInputElement | null>(null)\n\n  const computedId = useId(() => props.id, 'input')\n  const debounceNumber = useToNumber(() => props.debounce ?? 0)\n  const debounceMaxWaitNumber = useToNumber(() => props.debounceMaxWait ?? NaN)\n\n  const internalUpdateModelValue = useDebounceFn(\n    (value: Numberish) => {\n      modelValue.value = value\n    },\n    () => (modelModifiers.lazy === true ? 0 : debounceNumber.value),\n    {maxWait: () => (modelModifiers.lazy === true ? NaN : debounceMaxWaitNumber.value)}\n  )\n\n  const updateModelValue = (value: Numberish, force = false) => {\n    if (modelModifiers.lazy === true && force === false) return\n    internalUpdateModelValue(value)\n  }\n\n  const {focused} = useFocus(input, {\n    initialValue: props.autofocus,\n  })\n\n  const _formatValue = (value: string, evt: Readonly<Event>, force = false) => {\n    if (props.formatter !== undefined && (!props.lazyFormatter || force)) {\n      return props.formatter(value, evt)\n    }\n    return value\n  }\n  onMounted(() => {\n    if (input.value) {\n      input.value.value = modelValue.value?.toString() ?? ''\n    }\n  })\n\n  onActivated(() => {\n    nextTick(() => {\n      if (props.autofocus) {\n        focused.value = true\n      }\n    })\n  })\n\n  const computedAriaInvalid = useAriaInvalid(\n    () => props.ariaInvalid,\n    () => props.state\n  )\n\n  const onInput = (evt: Readonly<Event>) => {\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt)\n    if (evt.defaultPrevented) {\n      evt.preventDefault()\n      return\n    }\n\n    const nextModel = formattedValue\n\n    updateModelValue(nextModel)\n  }\n\n  const onChange = (evt: Readonly<Event>) => {\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt)\n    if (evt.defaultPrevented) {\n      evt.preventDefault()\n      return\n    }\n\n    const nextModel = formattedValue\n    if (modelValue.value !== nextModel) {\n      updateModelValue(formattedValue, true)\n    }\n  }\n\n  const onBlur = (evt: Readonly<FocusEvent>) => {\n    if (!modelModifiers.lazy && !props.lazyFormatter) return\n\n    const {value} = evt.target as HTMLInputElement\n    const formattedValue = _formatValue(value, evt, true)\n\n    const nextModel = formattedValue\n    if (modelValue.value !== nextModel) {\n      updateModelValue(formattedValue, true)\n    }\n  }\n\n  const focus = () => {\n    if (!props.disabled) {\n      focused.value = true\n    }\n  }\n\n  const blur = () => {\n    if (!props.disabled) {\n      focused.value = false\n    }\n  }\n\n  return {\n    input,\n    computedId,\n    computedAriaInvalid,\n    onInput,\n    onChange,\n    onBlur,\n    focus,\n    blur,\n  }\n}\n"],"names":[],"mappings":"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"}