123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import { resolveDirective as _resolveDirective, createVNode as _createVNode } from "vue";
- // Styles
- import "./VInput.css";
- // Components
- import { useInputIcon } from "./InputIcon.mjs";
- import { VMessages } from "../VMessages/VMessages.mjs"; // Composables
- import { makeComponentProps } from "../../composables/component.mjs";
- import { makeDensityProps, useDensity } from "../../composables/density.mjs";
- import { makeDimensionProps, useDimension } from "../../composables/dimensions.mjs";
- import { IconValue } from "../../composables/icons.mjs";
- import { useRtl } from "../../composables/locale.mjs";
- import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
- import { makeValidationProps, useValidation } from "../../composables/validation.mjs"; // Utilities
- import { computed } from 'vue';
- import { EventProp, genericComponent, getUid, only, propsFactory, useRender } from "../../util/index.mjs"; // Types
- export const makeVInputProps = propsFactory({
- id: String,
- appendIcon: IconValue,
- centerAffix: {
- type: Boolean,
- default: true
- },
- prependIcon: IconValue,
- hideDetails: [Boolean, String],
- hideSpinButtons: Boolean,
- hint: String,
- persistentHint: Boolean,
- messages: {
- type: [Array, String],
- default: () => []
- },
- direction: {
- type: String,
- default: 'horizontal',
- validator: v => ['horizontal', 'vertical'].includes(v)
- },
- 'onClick:prepend': EventProp(),
- 'onClick:append': EventProp(),
- ...makeComponentProps(),
- ...makeDensityProps(),
- ...only(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),
- ...makeThemeProps(),
- ...makeValidationProps()
- }, 'VInput');
- export const VInput = genericComponent()({
- name: 'VInput',
- props: {
- ...makeVInputProps()
- },
- emits: {
- 'update:modelValue': value => true
- },
- setup(props, _ref) {
- let {
- attrs,
- slots,
- emit
- } = _ref;
- const {
- densityClasses
- } = useDensity(props);
- const {
- dimensionStyles
- } = useDimension(props);
- const {
- themeClasses
- } = provideTheme(props);
- const {
- rtlClasses
- } = useRtl();
- 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
- }));
- const messages = computed(() => {
- if (props.errorMessages?.length || !isPristine.value && errorMessages.value.length) {
- return errorMessages.value;
- } else if (props.hint && (props.persistentHint || props.focused)) {
- return props.hint;
- } else {
- return props.messages;
- }
- });
- useRender(() => {
- const hasPrepend = !!(slots.prepend || props.prependIcon);
- const hasAppend = !!(slots.append || props.appendIcon);
- const hasMessages = messages.value.length > 0;
- const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
- return _createVNode("div", {
- "class": ['v-input', `v-input--${props.direction}`, {
- 'v-input--center-affix': props.centerAffix,
- 'v-input--hide-spin-buttons': props.hideSpinButtons
- }, densityClasses.value, themeClasses.value, rtlClasses.value, validationClasses.value, props.class],
- "style": [dimensionStyles.value, props.style]
- }, [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": messages.value
- }, {
- message: slots.message
- }), slots.details?.(slotProps.value)])]);
- });
- return {
- reset,
- resetValidation,
- validate,
- isValid,
- errorMessages
- };
- }
- });
- //# sourceMappingURL=VInput.mjs.map
|