UNPKG

vuetify

Version:

Vue Material Component Framework

123 lines (122 loc) 3.85 kB
import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue"; // Styles import "./VInput.css"; // Components import { VMessages } from "../VMessages/index.mjs"; // Composables import { IconValue } from "../../composables/icons.mjs"; import { makeDensityProps, useDensity } from "../../composables/density.mjs"; import { makeValidationProps, useValidation } from "../../composables/validation.mjs"; // Utilities import { computed } from 'vue'; import { EventProp, genericComponent, getUid, isOn, pick, propsFactory, useRender } from "../../util/index.mjs"; // Types import { useInputIcon } from "./InputIcon.mjs"; export const makeVInputProps = propsFactory({ id: String, appendIcon: IconValue, prependIcon: IconValue, hideDetails: [Boolean, String], messages: { type: [Array, String], default: () => [] }, direction: { type: String, default: 'horizontal', validator: v => ['horizontal', 'vertical'].includes(v) }, 'onClick:prepend': EventProp, 'onClick:append': EventProp, ...makeDensityProps(), ...makeValidationProps() }, 'v-input'); export const VInput = genericComponent()({ name: 'VInput', props: { ...makeVInputProps() }, emits: { 'update:modelValue': val => true }, setup(props, _ref) { let { attrs, slots, emit } = _ref; const { densityClasses } = useDensity(props); const { InputIcon } = useInputIcon(props); const uid = getUid(); const id = computed(() => props.id || `input-${uid}`); const messagesId = computed(() => `${id.value}-messages`); const { errorMessages, isDirty, isDisabled, isReadonly, isPristine, isValid, isValidating, reset, resetValidation, validate, validationClasses } = useValidation(props, 'v-input', id); const slotProps = computed(() => ({ id, messagesId, isDirty, isDisabled, isReadonly, isPristine, isValid, isValidating, reset, resetValidation, validate })); useRender(() => { const hasPrepend = !!(slots.prepend || props.prependIcon); const hasAppend = !!(slots.append || props.appendIcon); const hasMessages = !!(props.messages?.length || errorMessages.value.length); const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details); return _createVNode("div", { "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value] }, [hasPrepend && _createVNode("div", { "key": "prepend", "class": "v-input__prepend" }, [slots.prepend?.(slotProps.value), props.prependIcon && _createVNode(InputIcon, { "key": "prepend-icon", "name": "prepend" }, null)]), slots.default && _createVNode("div", { "class": "v-input__control" }, [slots.default?.(slotProps.value)]), hasAppend && _createVNode("div", { "key": "append", "class": "v-input__append" }, [props.appendIcon && _createVNode(InputIcon, { "key": "append-icon", "name": "append" }, null), slots.append?.(slotProps.value)]), hasDetails && _createVNode("div", { "class": "v-input__details" }, [_createVNode(VMessages, { "id": messagesId.value, "active": hasMessages, "messages": errorMessages.value.length > 0 ? errorMessages.value : props.messages }, { message: slots.message }), slots.details?.(slotProps.value)])]); }); return { reset, resetValidation, validate }; } }); export function filterInputProps(props) { const keys = Object.keys(VInput.props).filter(k => !isOn(k)); return pick(props, keys); } //# sourceMappingURL=VInput.mjs.map