{"version":3,"file":"VInput.mjs","names":["useInputIcon","VMessages","makeComponentProps","makeDensityProps","useDensity","makeDimensionProps","useDimension","IconValue","useRtl","makeThemeProps","provideTheme","makeValidationProps","useValidation","computed","EventProp","genericComponent","getUid","only","propsFactory","useRender","makeVInputProps","id","String","appendIcon","centerAffix","type","Boolean","default","prependIcon","hideDetails","hideSpinButtons","hint","persistentHint","messages","Array","direction","validator","v","includes","VInput","name","props","emits","value","setup","_ref","attrs","slots","emit","densityClasses","dimensionStyles","themeClasses","rtlClasses","InputIcon","uid","messagesId","errorMessages","isDirty","isDisabled","isReadonly","isPristine","isValid","isValidating","reset","resetValidation","validate","validationClasses","slotProps","length","focused","hasPrepend","prepend","hasAppend","append","hasMessages","hasDetails","details","_createVNode","class","style","message"],"sources":["../../../src/components/VInput/VInput.tsx"],"sourcesContent":["// Styles\nimport './VInput.sass'\n\n// Components\nimport { useInputIcon } from '@/components/VInput/InputIcon'\nimport { VMessages } from '@/components/VMessages/VMessages'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { makeValidationProps, useValidation } from '@/composables/validation'\n\n// Utilities\nimport { computed } from 'vue'\nimport { EventProp, genericComponent, getUid, only, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef, PropType, Ref } from 'vue'\nimport type { VMessageSlot } from '@/components/VMessages/VMessages'\nimport type { GenericProps } from '@/util'\n\nexport interface VInputSlot {\n  id: ComputedRef<string>\n  messagesId: ComputedRef<string>\n  isDirty: ComputedRef<boolean>\n  isDisabled: ComputedRef<boolean>\n  isReadonly: ComputedRef<boolean>\n  isPristine: Ref<boolean>\n  isValid: ComputedRef<boolean | null>\n  isValidating: Ref<boolean>\n  reset: () => void\n  resetValidation: () => void\n  validate: () => void\n}\n\nexport const makeVInputProps = propsFactory({\n  id: String,\n  appendIcon: IconValue,\n  centerAffix: {\n    type: Boolean,\n    default: true,\n  },\n  prependIcon: IconValue,\n  hideDetails: [Boolean, String] as PropType<boolean | 'auto'>,\n  hideSpinButtons: Boolean,\n  hint: String,\n  persistentHint: Boolean,\n  messages: {\n    type: [Array, String] as PropType<string | readonly string[]>,\n    default: () => ([]),\n  },\n  direction: {\n    type: String as PropType<'horizontal' | 'vertical'>,\n    default: 'horizontal',\n    validator: (v: any) => ['horizontal', 'vertical'].includes(v),\n  },\n\n  'onClick:prepend': EventProp<[MouseEvent]>(),\n  'onClick:append': EventProp<[MouseEvent]>(),\n\n  ...makeComponentProps(),\n  ...makeDensityProps(),\n  ...only(makeDimensionProps(), [\n    'maxWidth',\n    'minWidth',\n    'width',\n  ]),\n  ...makeThemeProps(),\n  ...makeValidationProps(),\n}, 'VInput')\n\nexport type VInputSlots = {\n  default: VInputSlot\n  prepend: VInputSlot\n  append: VInputSlot\n  details: VInputSlot\n  message: VMessageSlot\n}\n\nexport const VInput = genericComponent<new <T>(\n  props: {\n    modelValue?: T | null\n    'onUpdate:modelValue'?: (value: T | null) => void\n  },\n  slots: VInputSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n  name: 'VInput',\n\n  props: {\n    ...makeVInputProps(),\n  },\n\n  emits: {\n    'update:modelValue': (value: any) => true,\n  },\n\n  setup (props, { attrs, slots, emit }) {\n    const { densityClasses } = useDensity(props)\n    const { dimensionStyles } = useDimension(props)\n    const { themeClasses } = provideTheme(props)\n    const { rtlClasses } = useRtl()\n    const { InputIcon } = useInputIcon(props)\n\n    const uid = getUid()\n    const id = computed(() => props.id || `input-${uid}`)\n    const messagesId = computed(() => `${id.value}-messages`)\n\n    const {\n      errorMessages,\n      isDirty,\n      isDisabled,\n      isReadonly,\n      isPristine,\n      isValid,\n      isValidating,\n      reset,\n      resetValidation,\n      validate,\n      validationClasses,\n    } = useValidation(props, 'v-input', id)\n\n    const slotProps = computed<VInputSlot>(() => ({\n      id,\n      messagesId,\n      isDirty,\n      isDisabled,\n      isReadonly,\n      isPristine,\n      isValid,\n      isValidating,\n      reset,\n      resetValidation,\n      validate,\n    }))\n\n    const messages = computed(() => {\n      if (props.errorMessages?.length || (!isPristine.value && errorMessages.value.length)) {\n        return errorMessages.value\n      } else if (props.hint && (props.persistentHint || props.focused)) {\n        return props.hint\n      } else {\n        return props.messages\n      }\n    })\n\n    useRender(() => {\n      const hasPrepend = !!(slots.prepend || props.prependIcon)\n      const hasAppend = !!(slots.append || props.appendIcon)\n      const hasMessages = messages.value.length > 0\n      const hasDetails = !props.hideDetails || (\n        props.hideDetails === 'auto' &&\n        (hasMessages || !!slots.details)\n      )\n\n      return (\n        <div\n          class={[\n            'v-input',\n            `v-input--${props.direction}`,\n            {\n              'v-input--center-affix': props.centerAffix,\n              'v-input--hide-spin-buttons': props.hideSpinButtons,\n            },\n            densityClasses.value,\n            themeClasses.value,\n            rtlClasses.value,\n            validationClasses.value,\n            props.class,\n          ]}\n          style={[\n            dimensionStyles.value,\n            props.style,\n          ]}\n        >\n          { hasPrepend && (\n            <div key=\"prepend\" class=\"v-input__prepend\">\n              { slots.prepend?.(slotProps.value) }\n\n              { props.prependIcon && (\n                <InputIcon\n                  key=\"prepend-icon\"\n                  name=\"prepend\"\n                />\n              )}\n            </div>\n          )}\n\n          { slots.default && (\n            <div class=\"v-input__control\">\n              { slots.default?.(slotProps.value) }\n            </div>\n          )}\n\n          { hasAppend && (\n            <div key=\"append\" class=\"v-input__append\">\n              { props.appendIcon && (\n                <InputIcon\n                  key=\"append-icon\"\n                  name=\"append\"\n                />\n              )}\n\n              { slots.append?.(slotProps.value) }\n            </div>\n          )}\n\n          { hasDetails && (\n            <div class=\"v-input__details\">\n              <VMessages\n                id={ messagesId.value }\n                active={ hasMessages }\n                messages={ messages.value }\n                v-slots={{ message: slots.message }}\n              />\n\n              { slots.details?.(slotProps.value) }\n            </div>\n          )}\n        </div>\n      )\n    })\n\n    return {\n      reset,\n      resetValidation,\n      validate,\n      isValid,\n      errorMessages,\n    }\n  },\n})\n\nexport type VInput = InstanceType<typeof VInput>\n"],"mappings":"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","ignoreList":[]}