vuetify 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/json/attributes.json +488 -524
- package/dist/json/importMap.json +64 -60
- package/dist/json/tags.json +0 -9
- package/dist/json/web-types.json +790 -898
- package/dist/vuetify.css +141 -142
- package/dist/vuetify.d.ts +4398 -3687
- package/dist/vuetify.esm.js +2400 -2345
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +2399 -2344
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +798 -788
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.mjs +12 -4
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.ts +392 -158
- package/lib/components/VAvatar/VAvatar.mjs +1 -1
- package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
- package/lib/components/VBreadcrumbs/index.d.ts +2 -0
- package/lib/components/VBtn/index.d.ts +1 -0
- package/lib/components/VCard/VCard.css +0 -3
- package/lib/components/VCard/VCard.mjs +2 -1
- package/lib/components/VCard/VCard.mjs.map +1 -1
- package/lib/components/VCard/VCard.sass +0 -3
- package/lib/components/VCard/VCardItem.mjs +1 -2
- package/lib/components/VCard/VCardItem.mjs.map +1 -1
- package/lib/components/VCard/index.d.ts +1 -0
- package/lib/components/VCheckbox/VCheckboxBtn.mjs +1 -1
- package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
- package/lib/components/VCheckbox/index.d.ts +1 -1
- package/lib/components/VChip/VChip.mjs +0 -1
- package/lib/components/VChip/VChip.mjs.map +1 -1
- package/lib/components/VChip/index.d.ts +1 -2
- package/lib/components/VCombobox/VCombobox.mjs +12 -4
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/index.d.ts +392 -158
- package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs +1 -1
- package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanel.css +2 -2
- package/lib/components/VExpansionPanel/VExpansionPanel.sass +2 -2
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
- package/lib/components/VField/index.d.ts +5 -5
- package/lib/components/VFileInput/index.d.ts +6 -6
- package/lib/components/VInput/VInput.mjs +1 -1
- package/lib/components/VInput/VInput.mjs.map +1 -1
- package/lib/components/VInput/index.d.ts +4 -4
- package/lib/components/VList/VList.mjs +3 -0
- package/lib/components/VList/VList.mjs.map +1 -1
- package/lib/components/VList/VListGroup.mjs +1 -1
- package/lib/components/VList/VListGroup.mjs.map +1 -1
- package/lib/components/VList/VListItem.mjs +3 -1
- package/lib/components/VList/VListItem.mjs.map +1 -1
- package/lib/components/VList/index.d.ts +19 -8
- package/lib/components/VNoSsr/VNoSsr.mjs +1 -3
- package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
- package/lib/components/VOverlay/VOverlay.mjs +3 -1
- package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
- package/lib/components/VOverlay/locationStrategies.mjs +17 -19
- package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
- package/lib/components/VOverlay/scrollStrategies.mjs +5 -1
- package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
- package/lib/components/VOverlay/useActivator.mjs +5 -1
- package/lib/components/VOverlay/useActivator.mjs.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.mjs +1 -0
- package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
- package/lib/components/VRadioGroup/index.d.ts +1 -1
- package/lib/components/VRangeSlider/index.d.ts +1 -1
- package/lib/components/VRating/VRating.mjs +7 -6
- package/lib/components/VRating/VRating.mjs.map +1 -1
- package/lib/components/VRating/index.d.ts +14 -14
- package/lib/components/VSelect/VSelect.mjs +16 -8
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/index.d.ts +392 -158
- package/lib/components/VSelectionControl/VSelectionControl.mjs +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +1 -1
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
- package/lib/components/VSlideGroup/VSlideGroup.css +1 -0
- package/lib/components/VSlideGroup/VSlideGroup.sass +1 -0
- package/lib/components/VSlider/index.d.ts +1 -1
- package/lib/components/VSwitch/index.d.ts +1 -1
- package/lib/components/VTable/VTable.css +9 -9
- package/lib/components/VTable/VTable.sass +20 -15
- package/lib/components/VTabs/index.d.ts +1 -0
- package/lib/components/VTextField/VTextField.mjs +23 -19
- package/lib/components/VTextField/VTextField.mjs.map +1 -1
- package/lib/components/VTextField/index.d.ts +58 -58
- package/lib/components/VTextarea/index.d.ts +6 -6
- package/lib/components/VToolbar/VToolbar.css +1 -0
- package/lib/components/VToolbar/VToolbar.sass +1 -0
- package/lib/components/VValidation/index.d.ts +1 -1
- package/lib/components/index.d.ts +4145 -3435
- package/lib/components/transitions/index.mjs +1 -1
- package/lib/components/transitions/index.mjs.map +1 -1
- package/lib/composables/hydration.mjs +8 -4
- package/lib/composables/hydration.mjs.map +1 -1
- package/lib/composables/icons.mjs +6 -3
- package/lib/composables/icons.mjs.map +1 -1
- package/lib/composables/nested/nested.mjs +2 -2
- package/lib/composables/nested/nested.mjs.map +1 -1
- package/lib/composables/router.mjs +2 -2
- package/lib/composables/router.mjs.map +1 -1
- package/lib/composables/toggleScope.mjs +6 -2
- package/lib/composables/toggleScope.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +16 -10
- package/lib/framework.mjs.map +1 -1
- package/lib/index.d.ts +17 -16
- package/lib/util/defineComponent.mjs +10 -15
- package/lib/util/defineComponent.mjs.map +1 -1
- package/lib/util/helpers.mjs +10 -2
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useActivator.mjs","names":["makeDelayProps","useDelay","VMenuSymbol","getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","computed","effectScope","inject","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","closeOnContentClick","useActivator","props","isActive","isTop","activatorEl","isHovered","isFocused","firstEnter","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","contentEvents","menu","closeParents","scrimEvents","val","activatorRef","$el","vm","scope","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","selector","proxy","parentNode","hasAttribute","document","querySelector","nodeType","Node","ELEMENT_NODE"],"sources":["../../../src/components/VOverlay/useActivator.tsx"],"sourcesContent":["// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { VMenuSymbol } from '@/components/VMenu/shared'\n\n// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport {\n computed,\n effectScope,\n inject,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentInternalInstance,\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n\n closeOnContentClick: boolean\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n closeOnContentClick: Boolean,\n\n ...makeDelayProps(),\n}, 'VOverlay/useActivator')\n\nexport function useActivator (\n props: ActivatorProps,\n { isActive, isTop }: { isActive: Ref<boolean>, isTop: Ref<boolean> }\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n let firstEnter = true\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (\n value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n ) && !(props.openOnHover && isActive.value && !isTop.value)\n ) {\n if (isActive.value !== value) {\n firstEnter = true\n }\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const contentEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (props.openOnHover) {\n events.mouseenter = () => {\n isHovered = true\n runOpenDelay()\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n if (props.closeOnContentClick) {\n const menu = inject(VMenuSymbol, null)\n events.click = () => {\n isActive.value = false\n menu?.closeParents()\n }\n }\n\n return events\n })\n\n const scrimEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n if (props.openOnHover) {\n events.mouseenter = () => {\n if (firstEnter) {\n isHovered = true\n firstEnter = false\n runOpenDelay()\n }\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n return events\n })\n\n watch(isTop, val => {\n if (val && (\n (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused)) ||\n (openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))\n )) {\n isActive.value = false\n }\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n const vm = getCurrentInstance('useActivator')\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, vm, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n return { activatorEl, activatorRef, activatorEvents, contentEvents, scrimEvents }\n}\n\nfunction _useActivator (\n props: ActivatorProps,\n vm: ComponentInternalInstance,\n { activatorEl, activatorEvents }: Pick<ReturnType<typeof useActivator>, 'activatorEl' | 'activatorEvents'>\n) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n let el = vm?.proxy?.$el?.parentNode\n while (el.hasAttribute('data-no-activator')) {\n el = el.parentNode\n }\n activator = el\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useActivator.mjs","names":["makeDelayProps","useDelay","VMenuSymbol","getCurrentInstance","IN_BROWSER","isComponentInstance","propsFactory","SUPPORTS_FOCUS_VISIBLE","computed","effectScope","inject","nextTick","onScopeDispose","ref","watch","watchEffect","makeActivatorProps","activator","String","Object","activatorProps","type","default","openOnClick","Boolean","undefined","openOnHover","openOnFocus","closeOnContentClick","useActivator","props","isActive","isTop","activatorEl","isHovered","isFocused","firstEnter","value","runOpenDelay","runCloseDelay","availableEvents","click","e","stopPropagation","currentTarget","target","mouseenter","mouseleave","focus","matches","blur","activatorEvents","events","contentEvents","menu","closeParents","scrimEvents","val","activatorRef","$el","vm","scope","run","_useActivator","stop","flush","immediate","oldVal","getActivator","unbindActivatorProps","bindActivatorProps","el","_props","entries","forEach","name","cb","addEventListener","keys","k","removeAttribute","setAttribute","removeEventListener","selector","proxy","parentNode","hasAttribute","document","querySelector","nodeType","Node","ELEMENT_NODE"],"sources":["../../../src/components/VOverlay/useActivator.tsx"],"sourcesContent":["// Composables\nimport { makeDelayProps, useDelay } from '@/composables/delay'\nimport { VMenuSymbol } from '@/components/VMenu/shared'\n\n// Utilities\nimport { getCurrentInstance, IN_BROWSER, isComponentInstance, propsFactory, SUPPORTS_FOCUS_VISIBLE } from '@/util'\nimport {\n computed,\n effectScope,\n inject,\n nextTick,\n onScopeDispose,\n ref,\n watch,\n watchEffect,\n} from 'vue'\n\n// Types\nimport type { DelayProps } from '@/composables/delay'\nimport type {\n ComponentInternalInstance,\n ComponentPublicInstance,\n EffectScope,\n PropType,\n Ref,\n} from 'vue'\n\ninterface ActivatorProps extends DelayProps {\n activator?: 'parent' | string | Element | ComponentPublicInstance\n activatorProps: Record<string, any>\n\n openOnClick: boolean | undefined\n openOnHover: boolean\n openOnFocus: boolean | undefined\n\n closeOnContentClick: boolean\n}\n\nexport const makeActivatorProps = propsFactory({\n activator: [String, Object] as PropType<ActivatorProps['activator']>,\n activatorProps: {\n type: Object as PropType<ActivatorProps['activatorProps']>,\n default: () => ({}),\n },\n\n openOnClick: {\n type: Boolean,\n default: undefined,\n },\n openOnHover: Boolean,\n openOnFocus: {\n type: Boolean,\n default: undefined,\n },\n\n closeOnContentClick: Boolean,\n\n ...makeDelayProps(),\n}, 'v-overlay-activator')\n\nexport function useActivator (\n props: ActivatorProps,\n { isActive, isTop }: { isActive: Ref<boolean>, isTop: Ref<boolean> }\n) {\n const activatorEl = ref<HTMLElement>()\n\n let isHovered = false\n let isFocused = false\n let firstEnter = true\n\n const openOnFocus = computed(() => props.openOnFocus || (props.openOnFocus == null && props.openOnHover))\n const openOnClick = computed(() => props.openOnClick || (props.openOnClick == null && !props.openOnHover && !openOnFocus.value))\n\n const { runOpenDelay, runCloseDelay } = useDelay(props, value => {\n if (\n value === (\n (props.openOnHover && isHovered) ||\n (openOnFocus.value && isFocused)\n ) && !(props.openOnHover && isActive.value && !isTop.value)\n ) {\n if (isActive.value !== value) {\n firstEnter = true\n }\n isActive.value = value\n }\n })\n\n const availableEvents = {\n click: (e: MouseEvent) => {\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n isActive.value = !isActive.value\n },\n mouseenter: (e: MouseEvent) => {\n isHovered = true\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n runOpenDelay()\n },\n mouseleave: (e: MouseEvent) => {\n isHovered = false\n runCloseDelay()\n },\n focus: (e: FocusEvent) => {\n if (\n SUPPORTS_FOCUS_VISIBLE &&\n !(e.target as HTMLElement).matches(':focus-visible')\n ) return\n\n isFocused = true\n e.stopPropagation()\n activatorEl.value = (e.currentTarget || e.target) as HTMLElement\n\n runOpenDelay()\n },\n blur: (e: FocusEvent) => {\n isFocused = false\n e.stopPropagation()\n\n runCloseDelay()\n },\n }\n\n const activatorEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (openOnClick.value) {\n events.click = availableEvents.click\n }\n if (props.openOnHover) {\n events.mouseenter = availableEvents.mouseenter\n events.mouseleave = availableEvents.mouseleave\n }\n if (openOnFocus.value) {\n events.focus = availableEvents.focus\n events.blur = availableEvents.blur\n }\n\n return events\n })\n\n const contentEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n\n if (props.openOnHover) {\n events.mouseenter = () => {\n isHovered = true\n runOpenDelay()\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n if (props.closeOnContentClick) {\n const menu = inject(VMenuSymbol, null)\n events.click = () => {\n isActive.value = false\n menu?.closeParents()\n }\n }\n\n return events\n })\n\n const scrimEvents = computed(() => {\n const events: Partial<typeof availableEvents> = {}\n if (props.openOnHover) {\n events.mouseenter = () => {\n if (firstEnter) {\n isHovered = true\n firstEnter = false\n runOpenDelay()\n }\n }\n events.mouseleave = () => {\n isHovered = false\n runCloseDelay()\n }\n }\n\n return events\n })\n\n watch(isTop, val => {\n if (val && (\n (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused)) ||\n (openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))\n )) {\n isActive.value = false\n }\n })\n\n const activatorRef = ref()\n watchEffect(() => {\n if (!activatorRef.value) return\n\n nextTick(() => {\n const activator = activatorRef.value\n activatorEl.value = isComponentInstance(activator) ? activator.$el : activator\n })\n })\n\n const vm = getCurrentInstance('useActivator')\n let scope: EffectScope\n watch(() => !!props.activator, val => {\n if (val && IN_BROWSER) {\n scope = effectScope()\n scope.run(() => {\n _useActivator(props, vm, { activatorEl, activatorEvents })\n })\n } else if (scope) {\n scope.stop()\n }\n }, { flush: 'post', immediate: true })\n\n onScopeDispose(() => {\n scope?.stop()\n })\n\n return { activatorEl, activatorRef, activatorEvents, contentEvents, scrimEvents }\n}\n\nfunction _useActivator (\n props: ActivatorProps,\n vm: ComponentInternalInstance,\n { activatorEl, activatorEvents }: Pick<ReturnType<typeof useActivator>, 'activatorEl' | 'activatorEvents'>\n) {\n watch(() => props.activator, (val, oldVal) => {\n if (oldVal && val !== oldVal) {\n const activator = getActivator(oldVal)\n activator && unbindActivatorProps(activator)\n }\n if (val) {\n nextTick(() => bindActivatorProps())\n }\n }, { immediate: true })\n\n watch(() => props.activatorProps, () => {\n bindActivatorProps()\n })\n\n onScopeDispose(() => {\n unbindActivatorProps()\n })\n\n function bindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.addEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n if (_props[k] == null) {\n el.removeAttribute(k)\n } else {\n el.setAttribute(k, _props[k])\n }\n })\n }\n\n function unbindActivatorProps (el = getActivator(), _props = props.activatorProps) {\n if (!el) return\n\n Object.entries(activatorEvents.value).forEach(([name, cb]) => {\n el.removeEventListener(name, cb as (e: Event) => void)\n })\n\n Object.keys(_props).forEach(k => {\n el.removeAttribute(k)\n })\n }\n\n function getActivator (selector = props.activator): HTMLElement | undefined {\n let activator\n if (selector) {\n if (selector === 'parent') {\n let el = vm?.proxy?.$el?.parentNode\n while (el.hasAttribute('data-no-activator')) {\n el = el.parentNode\n }\n activator = el\n } else if (typeof selector === 'string') {\n // Selector\n activator = document.querySelector(selector)\n } else if ('$el' in selector) {\n // Component (ref)\n activator = selector.$el\n } else {\n // HTMLElement | Element\n activator = selector\n }\n }\n\n // The activator should only be a valid element (Ignore comments and text nodes)\n activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null\n\n return activatorEl.value\n }\n}\n"],"mappings":"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"}
|
|
@@ -114,6 +114,7 @@ export const VProgressLinear = defineComponent({
|
|
|
114
114
|
'--v-progress-linear-height': convertToUnit(height.value)
|
|
115
115
|
},
|
|
116
116
|
"role": "progressbar",
|
|
117
|
+
"aria-hidden": props.active ? 'false' : 'true',
|
|
117
118
|
"aria-valuemin": "0",
|
|
118
119
|
"aria-valuemax": props.max,
|
|
119
120
|
"aria-valuenow": props.indeterminate ? undefined : normalizedValue.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VProgressLinear.mjs","names":["makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","useBackgroundColor","useTextColor","useIntersectionObserver","useProxiedModel","useRtl","computed","Transition","convertToUnit","defineComponent","useRender","VProgressLinear","name","props","active","type","Boolean","default","bgColor","String","bgOpacity","Number","bufferValue","clickable","color","height","indeterminate","max","modelValue","reverse","stream","striped","roundedBar","emits","value","setup","slots","progress","isRtl","themeClasses","textColorClasses","textColorStyles","backgroundColorClasses","backgroundColorStyles","barColorClasses","barColorStyles","roundedClasses","intersectionRef","isIntersecting","parseInt","normalizedBuffer","parseFloat","normalizedValue","isReversed","transition","opacity","handleClick","e","left","right","width","getBoundingClientRect","clientX","Math","round","rounded","undefined","borderTop","top","map","bar","buffer"],"sources":["../../../src/components/VProgressLinear/VProgressLinear.tsx"],"sourcesContent":["// Styles\nimport './VProgressLinear.sass'\n\n// Composables\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/locale'\n\n// Utilities\nimport { computed, Transition } from 'vue'\nimport { convertToUnit, defineComponent, useRender } from '@/util'\n\nexport const VProgressLinear = defineComponent({\n name: 'VProgressLinear',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n bgColor: String,\n bgOpacity: [Number, String],\n bufferValue: {\n type: [Number, String],\n default: 0,\n },\n clickable: Boolean,\n color: String,\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n reverse: Boolean,\n stream: Boolean,\n striped: Boolean,\n roundedBar: Boolean,\n\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const progress = useProxiedModel(props, 'modelValue')\n const { isRtl } = useRtl()\n const { themeClasses } = provideTheme(props)\n const { textColorClasses, textColorStyles } = useTextColor(props, 'color')\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => props.bgColor || props.color))\n const { backgroundColorClasses: barColorClasses, backgroundColorStyles: barColorStyles } = useBackgroundColor(props, 'color')\n const { roundedClasses } = useRounded(props)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const max = computed(() => parseInt(props.max, 10))\n const height = computed(() => parseInt(props.height, 10))\n const normalizedBuffer = computed(() => parseFloat(props.bufferValue) / max.value * 100)\n const normalizedValue = computed(() => parseFloat(progress.value) / max.value * 100)\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition')\n const opacity = computed(() => {\n return props.bgOpacity == null\n ? props.bgOpacity\n : parseFloat(props.bgOpacity)\n })\n\n function handleClick (e: MouseEvent) {\n if (!intersectionRef.value) return\n\n const { left, right, width } = intersectionRef.value.getBoundingClientRect()\n const value = isReversed.value ? (width - e.clientX) + (right - width) : e.clientX - left\n\n progress.value = Math.round(value / width * max.value)\n }\n\n useRender(() => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-linear',\n {\n 'v-progress-linear--active': props.active && isIntersecting.value,\n 'v-progress-linear--reverse': isReversed.value,\n 'v-progress-linear--rounded': props.rounded,\n 'v-progress-linear--rounded-bar': props.roundedBar,\n 'v-progress-linear--striped': props.striped,\n },\n roundedClasses.value,\n themeClasses.value,\n ]}\n style={{\n height: props.active ? convertToUnit(height.value) : 0,\n '--v-progress-linear-height': convertToUnit(height.value),\n }}\n role=\"progressbar\"\n aria-valuemin=\"0\"\n aria-valuemax={ props.max }\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n onClick={ props.clickable && handleClick }\n >\n { props.stream && (\n <div\n key=\"stream\"\n class={[\n 'v-progress-linear__stream',\n textColorClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),\n borderTop: `${convertToUnit(height.value / 2)} dotted`,\n opacity: opacity.value,\n top: `calc(50% - ${convertToUnit(height.value / 4)})`,\n width: convertToUnit(100 - normalizedBuffer.value, '%'),\n '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1)),\n }}\n />\n ) }\n\n <div\n class={[\n 'v-progress-linear__background',\n backgroundColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n {\n opacity: opacity.value,\n width: convertToUnit((!props.stream ? 100 : normalizedBuffer.value), '%'),\n },\n ]}\n />\n\n <Transition name={ transition.value }>\n { !props.indeterminate ? (\n <div\n class={[\n 'v-progress-linear__determinate',\n barColorClasses.value,\n ]}\n style={[\n barColorStyles.value,\n { width: convertToUnit(normalizedValue.value, '%') },\n ]}\n />\n ) : (\n <div class=\"v-progress-linear__indeterminate\">\n { ['long', 'short'].map(bar => (\n <div\n key={ bar }\n class={[\n 'v-progress-linear__indeterminate',\n bar,\n barColorClasses.value,\n ]}\n style={ barColorStyles.value }\n />\n )) }\n </div>\n ) }\n </Transition>\n\n { slots.default && (\n <div class=\"v-progress-linear__content\">\n { slots.default({ value: normalizedValue.value, buffer: normalizedBuffer.value }) }\n </div>\n ) }\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressLinear = InstanceType<typeof VProgressLinear>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VProgressLinear.mjs","names":["makeRoundedProps","useRounded","makeTagProps","makeThemeProps","provideTheme","useBackgroundColor","useTextColor","useIntersectionObserver","useProxiedModel","useRtl","computed","Transition","convertToUnit","defineComponent","useRender","VProgressLinear","name","props","active","type","Boolean","default","bgColor","String","bgOpacity","Number","bufferValue","clickable","color","height","indeterminate","max","modelValue","reverse","stream","striped","roundedBar","emits","value","setup","slots","progress","isRtl","themeClasses","textColorClasses","textColorStyles","backgroundColorClasses","backgroundColorStyles","barColorClasses","barColorStyles","roundedClasses","intersectionRef","isIntersecting","parseInt","normalizedBuffer","parseFloat","normalizedValue","isReversed","transition","opacity","handleClick","e","left","right","width","getBoundingClientRect","clientX","Math","round","rounded","undefined","borderTop","top","map","bar","buffer"],"sources":["../../../src/components/VProgressLinear/VProgressLinear.tsx"],"sourcesContent":["// Styles\nimport './VProgressLinear.sass'\n\n// Composables\nimport { makeRoundedProps, useRounded } from '@/composables/rounded'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRtl } from '@/composables/locale'\n\n// Utilities\nimport { computed, Transition } from 'vue'\nimport { convertToUnit, defineComponent, useRender } from '@/util'\n\nexport const VProgressLinear = defineComponent({\n name: 'VProgressLinear',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n bgColor: String,\n bgOpacity: [Number, String],\n bufferValue: {\n type: [Number, String],\n default: 0,\n },\n clickable: Boolean,\n color: String,\n height: {\n type: [Number, String],\n default: 4,\n },\n indeterminate: Boolean,\n max: {\n type: [Number, String],\n default: 100,\n },\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n reverse: Boolean,\n stream: Boolean,\n striped: Boolean,\n roundedBar: Boolean,\n\n ...makeRoundedProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const progress = useProxiedModel(props, 'modelValue')\n const { isRtl } = useRtl()\n const { themeClasses } = provideTheme(props)\n const { textColorClasses, textColorStyles } = useTextColor(props, 'color')\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => props.bgColor || props.color))\n const { backgroundColorClasses: barColorClasses, backgroundColorStyles: barColorStyles } = useBackgroundColor(props, 'color')\n const { roundedClasses } = useRounded(props)\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n const max = computed(() => parseInt(props.max, 10))\n const height = computed(() => parseInt(props.height, 10))\n const normalizedBuffer = computed(() => parseFloat(props.bufferValue) / max.value * 100)\n const normalizedValue = computed(() => parseFloat(progress.value) / max.value * 100)\n const isReversed = computed(() => isRtl.value !== props.reverse)\n const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition')\n const opacity = computed(() => {\n return props.bgOpacity == null\n ? props.bgOpacity\n : parseFloat(props.bgOpacity)\n })\n\n function handleClick (e: MouseEvent) {\n if (!intersectionRef.value) return\n\n const { left, right, width } = intersectionRef.value.getBoundingClientRect()\n const value = isReversed.value ? (width - e.clientX) + (right - width) : e.clientX - left\n\n progress.value = Math.round(value / width * max.value)\n }\n\n useRender(() => (\n <props.tag\n ref={ intersectionRef }\n class={[\n 'v-progress-linear',\n {\n 'v-progress-linear--active': props.active && isIntersecting.value,\n 'v-progress-linear--reverse': isReversed.value,\n 'v-progress-linear--rounded': props.rounded,\n 'v-progress-linear--rounded-bar': props.roundedBar,\n 'v-progress-linear--striped': props.striped,\n },\n roundedClasses.value,\n themeClasses.value,\n ]}\n style={{\n height: props.active ? convertToUnit(height.value) : 0,\n '--v-progress-linear-height': convertToUnit(height.value),\n }}\n role=\"progressbar\"\n aria-hidden={ props.active ? 'false' : 'true' }\n aria-valuemin=\"0\"\n aria-valuemax={ props.max }\n aria-valuenow={ props.indeterminate ? undefined : normalizedValue.value }\n onClick={ props.clickable && handleClick }\n >\n { props.stream && (\n <div\n key=\"stream\"\n class={[\n 'v-progress-linear__stream',\n textColorClasses.value,\n ]}\n style={{\n ...textColorStyles.value,\n [isReversed.value ? 'left' : 'right']: convertToUnit(-height.value),\n borderTop: `${convertToUnit(height.value / 2)} dotted`,\n opacity: opacity.value,\n top: `calc(50% - ${convertToUnit(height.value / 4)})`,\n width: convertToUnit(100 - normalizedBuffer.value, '%'),\n '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1)),\n }}\n />\n ) }\n\n <div\n class={[\n 'v-progress-linear__background',\n backgroundColorClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n {\n opacity: opacity.value,\n width: convertToUnit((!props.stream ? 100 : normalizedBuffer.value), '%'),\n },\n ]}\n />\n\n <Transition name={ transition.value }>\n { !props.indeterminate ? (\n <div\n class={[\n 'v-progress-linear__determinate',\n barColorClasses.value,\n ]}\n style={[\n barColorStyles.value,\n { width: convertToUnit(normalizedValue.value, '%') },\n ]}\n />\n ) : (\n <div class=\"v-progress-linear__indeterminate\">\n { ['long', 'short'].map(bar => (\n <div\n key={ bar }\n class={[\n 'v-progress-linear__indeterminate',\n bar,\n barColorClasses.value,\n ]}\n style={ barColorStyles.value }\n />\n )) }\n </div>\n ) }\n </Transition>\n\n { slots.default && (\n <div class=\"v-progress-linear__content\">\n { slots.default({ value: normalizedValue.value, buffer: normalizedBuffer.value }) }\n </div>\n ) }\n </props.tag>\n ))\n\n return {}\n },\n})\n\nexport type VProgressLinear = InstanceType<typeof VProgressLinear>\n"],"mappings":"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"}
|
|
@@ -166,8 +166,8 @@ declare const VRadioGroup: vue.DefineComponent<{
|
|
|
166
166
|
messages: string | string[];
|
|
167
167
|
density: Density;
|
|
168
168
|
ripple: boolean;
|
|
169
|
-
errorMessages: string | string[];
|
|
170
169
|
focused: boolean;
|
|
170
|
+
errorMessages: string | string[];
|
|
171
171
|
maxErrors: string | number;
|
|
172
172
|
rules: ValidationRule[];
|
|
173
173
|
falseIcon: IconValue;
|
|
@@ -231,8 +231,8 @@ declare const VRangeSlider: vue.DefineComponent<{
|
|
|
231
231
|
rounded: string | number | boolean;
|
|
232
232
|
density: Density;
|
|
233
233
|
modelValue: number[];
|
|
234
|
-
errorMessages: string | string[];
|
|
235
234
|
focused: boolean;
|
|
235
|
+
errorMessages: string | string[];
|
|
236
236
|
maxErrors: string | number;
|
|
237
237
|
rules: ValidationRule[];
|
|
238
238
|
showTicks: boolean | "always";
|
|
@@ -12,7 +12,7 @@ import { makeThemeProps, provideTheme } from "../../composables/theme.mjs";
|
|
|
12
12
|
import { useLocale } from "../../composables/locale.mjs";
|
|
13
13
|
import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
|
|
14
14
|
import { computed, ref } from 'vue';
|
|
15
|
-
import { createRange, genericComponent, getUid, useRender } from "../../util/index.mjs"; // Types
|
|
15
|
+
import { clamp, createRange, genericComponent, getUid, useRender } from "../../util/index.mjs"; // Types
|
|
16
16
|
export const VRating = genericComponent()({
|
|
17
17
|
name: 'VRating',
|
|
18
18
|
props: {
|
|
@@ -41,7 +41,7 @@ export const VRating = genericComponent()({
|
|
|
41
41
|
},
|
|
42
42
|
readonly: Boolean,
|
|
43
43
|
modelValue: {
|
|
44
|
-
type: Number,
|
|
44
|
+
type: [Number, String],
|
|
45
45
|
default: 0
|
|
46
46
|
},
|
|
47
47
|
itemLabels: Array,
|
|
@@ -70,6 +70,7 @@ export const VRating = genericComponent()({
|
|
|
70
70
|
themeClasses
|
|
71
71
|
} = provideTheme(props);
|
|
72
72
|
const rating = useProxiedModel(props, 'modelValue');
|
|
73
|
+
const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, +props.length));
|
|
73
74
|
const range = computed(() => createRange(Number(props.length), 1));
|
|
74
75
|
const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
|
|
75
76
|
const hoverIndex = ref(-1);
|
|
@@ -78,7 +79,7 @@ export const VRating = genericComponent()({
|
|
|
78
79
|
let isClicking = false;
|
|
79
80
|
const itemState = computed(() => increments.value.map(value => {
|
|
80
81
|
const isHovering = props.hover && hoverIndex.value > -1;
|
|
81
|
-
const isFilled =
|
|
82
|
+
const isFilled = normalizedValue.value >= value;
|
|
82
83
|
const isHovered = hoverIndex.value >= value;
|
|
83
84
|
const isFullIcon = isHovering ? isHovered : isFilled;
|
|
84
85
|
const icon = isFullIcon ? props.fullIcon : props.emptyIcon;
|
|
@@ -99,7 +100,7 @@ export const VRating = genericComponent()({
|
|
|
99
100
|
hoverIndex.value = -1;
|
|
100
101
|
}
|
|
101
102
|
function onFocus() {
|
|
102
|
-
if (value === 0 &&
|
|
103
|
+
if (value === 0 && normalizedValue.value === 0) {
|
|
103
104
|
var _firstRef$value;
|
|
104
105
|
(_firstRef$value = firstRef.value) == null ? void 0 : _firstRef$value.focus();
|
|
105
106
|
} else {
|
|
@@ -111,7 +112,7 @@ export const VRating = genericComponent()({
|
|
|
111
112
|
}
|
|
112
113
|
function onClick() {
|
|
113
114
|
if (props.disabled || props.readonly) return;
|
|
114
|
-
rating.value =
|
|
115
|
+
rating.value = normalizedValue.value === value && props.clearable ? 0 : value;
|
|
115
116
|
}
|
|
116
117
|
return {
|
|
117
118
|
onMouseenter: props.hover ? onMouseenter : undefined,
|
|
@@ -176,7 +177,7 @@ export const VRating = genericComponent()({
|
|
|
176
177
|
"id": id,
|
|
177
178
|
"type": "radio",
|
|
178
179
|
"value": value,
|
|
179
|
-
"checked":
|
|
180
|
+
"checked": normalizedValue.value === value,
|
|
180
181
|
"onClick": onClick,
|
|
181
182
|
"onFocus": onFocus,
|
|
182
183
|
"onBlur": onBlur,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VRating.mjs","names":["VBtn","IconValue","makeDensityProps","makeSizeProps","makeTagProps","makeThemeProps","provideTheme","useLocale","useProxiedModel","computed","ref","createRange","genericComponent","getUid","useRender","VRating","name","props","String","itemAriaLabel","type","default","activeColor","color","clearable","Boolean","disabled","emptyIcon","fullIcon","halfIncrements","hover","length","Number","readonly","modelValue","itemLabels","Array","itemLabelPosition","validator","v","includes","ripple","emits","value","setup","slots","t","themeClasses","rating","range","increments","flatMap","hoverIndex","focusIndex","firstRef","isClicking","itemState","map","isHovering","isFilled","isHovered","isFullIcon","icon","eventState","onMouseenter","onMouseleave","onFocus","focus","onBlur","onClick","undefined","onMousedown","onMouseup","VRatingItem","index","showStar","id","replace","btnProps","density","size","tag","variant","item","createLabel","labelProps","label","hasLabels","i","Math","ceil"],"sources":["../../../src/components/VRating/VRating.tsx"],"sourcesContent":["// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { createRange, genericComponent, getUid, useRender } from '@/util'\n\n// Types\nimport type { SlotsToProps } from '@/util'\nimport type { Prop } from 'vue'\nimport type { Variant } from '@/composables/variant'\n\ntype VRatingItemSlot = {\n value: number\n index: number\n isFilled: boolean\n isHovered: boolean\n icon: IconValue\n color?: string\n props: Record<string, unknown>\n}\n\ntype VRatingItemLabelSlot = {\n value: number\n index: number\n label?: string\n}\n\nexport const VRating = genericComponent<new <T>() => {\n $props: SlotsToProps<{\n item: [VRatingItemSlot]\n 'item-label': [VRatingItemLabelSlot]\n }>\n}>()({\n name: 'VRating',\n\n props: {\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: IconValue,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: IconValue,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: Number,\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = ref(-1)\n const focusIndex = ref(-1)\n const firstRef = ref<HTMLElement>()\n let isClicking = false\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = rating.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onFocus () {\n if (value === 0 && rating.value === 0) {\n firstRef.value?.focus()\n } else {\n focusIndex.value = value\n }\n }\n\n function onBlur () {\n if (!isClicking) focusIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = rating.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onFocus,\n onBlur,\n onClick,\n }\n }))\n\n function onMousedown () {\n isClicking = true\n }\n\n function onMouseup () {\n isClicking = false\n }\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onFocus, onBlur, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n tag: 'span',\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMousedown={ onMousedown }\n onMouseup={ onMouseup }\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value[index],\n props: btnProps,\n value,\n index,\n })\n : (\n <VBtn { ...btnProps } />\n )\n }\n </label>\n\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ rating.value === value }\n onClick={ onClick }\n onFocus={ onFocus }\n onBlur={ onBlur }\n ref={ index === 0 ? firstRef : undefined }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n function createLabel (labelProps: { value: number, index: number, label?: string }) {\n if (slots['item-label']) return slots['item-label'](labelProps)\n\n if (labelProps.label) return <span>{ labelProps.label }</span>\n\n return <span> </span>\n }\n\n useRender(() => {\n const hasLabels = !!props.itemLabels?.length || slots['item-label']\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n ]}\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n hasLabels && props.itemLabelPosition === 'top'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n <div\n class={[\n 'v-rating__item',\n {\n 'v-rating__item--focused': Math.ceil(focusIndex.value) === value,\n },\n ]}\n >\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n ) }\n </div>\n {\n hasLabels && props.itemLabelPosition === 'bottom'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n </div>\n )) }\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VRating.mjs","names":["VBtn","IconValue","makeDensityProps","makeSizeProps","makeTagProps","makeThemeProps","provideTheme","useLocale","useProxiedModel","computed","ref","clamp","createRange","genericComponent","getUid","useRender","VRating","name","props","String","itemAriaLabel","type","default","activeColor","color","clearable","Boolean","disabled","emptyIcon","fullIcon","halfIncrements","hover","length","Number","readonly","modelValue","itemLabels","Array","itemLabelPosition","validator","v","includes","ripple","emits","value","setup","slots","t","themeClasses","rating","normalizedValue","parseFloat","range","increments","flatMap","hoverIndex","focusIndex","firstRef","isClicking","itemState","map","isHovering","isFilled","isHovered","isFullIcon","icon","eventState","onMouseenter","onMouseleave","onFocus","focus","onBlur","onClick","undefined","onMousedown","onMouseup","VRatingItem","index","showStar","id","replace","btnProps","density","size","tag","variant","item","createLabel","labelProps","label","hasLabels","i","Math","ceil"],"sources":["../../../src/components/VRating/VRating.tsx"],"sourcesContent":["// Styles\nimport './VRating.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\n\n// Composables\nimport { IconValue } from '@/composables/icons'\nimport { makeDensityProps } from '@/composables/density'\nimport { makeSizeProps } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useLocale } from '@/composables/locale'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed, ref } from 'vue'\nimport { clamp, createRange, genericComponent, getUid, useRender } from '@/util'\n\n// Types\nimport type { SlotsToProps } from '@/util'\nimport type { Prop } from 'vue'\nimport type { Variant } from '@/composables/variant'\n\ntype VRatingItemSlot = {\n value: number\n index: number\n isFilled: boolean\n isHovered: boolean\n icon: IconValue\n color?: string\n props: Record<string, unknown>\n}\n\ntype VRatingItemLabelSlot = {\n value: number\n index: number\n label?: string\n}\n\nexport const VRating = genericComponent<new <T>() => {\n $props: SlotsToProps<{\n item: [VRatingItemSlot]\n 'item-label': [VRatingItemLabelSlot]\n }>\n}>()({\n name: 'VRating',\n\n props: {\n name: String,\n itemAriaLabel: {\n type: String,\n default: '$vuetify.rating.ariaLabel.item',\n },\n activeColor: String,\n color: String,\n clearable: Boolean,\n disabled: Boolean,\n emptyIcon: {\n type: IconValue,\n default: '$ratingEmpty',\n },\n fullIcon: {\n type: IconValue,\n default: '$ratingFull',\n },\n halfIncrements: Boolean,\n hover: Boolean,\n length: {\n type: [Number, String],\n default: 5,\n },\n readonly: Boolean,\n modelValue: {\n type: [Number, String],\n default: 0,\n },\n itemLabels: Array as Prop<string[]>,\n itemLabelPosition: {\n type: String,\n default: 'top',\n validator: (v: any) => ['top', 'bottom'].includes(v),\n },\n ripple: Boolean,\n\n ...makeDensityProps(),\n ...makeSizeProps(),\n ...makeTagProps(),\n ...makeThemeProps(),\n },\n\n emits: {\n 'update:modelValue': (value: number | string) => true,\n },\n\n setup (props, { slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const rating = useProxiedModel(props, 'modelValue')\n const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, +props.length))\n\n const range = computed(() => createRange(Number(props.length), 1))\n const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]))\n const hoverIndex = ref(-1)\n const focusIndex = ref(-1)\n const firstRef = ref<HTMLElement>()\n let isClicking = false\n\n const itemState = computed(() => increments.value.map(value => {\n const isHovering = props.hover && hoverIndex.value > -1\n const isFilled = normalizedValue.value >= value\n const isHovered = hoverIndex.value >= value\n const isFullIcon = isHovering ? isHovered : isFilled\n const icon = isFullIcon ? props.fullIcon : props.emptyIcon\n const activeColor = props.activeColor ?? props.color\n const color = (isFilled || isHovered) ? activeColor : props.color\n\n return { isFilled, isHovered, icon, color }\n }))\n\n const eventState = computed(() => [0, ...increments.value].map(value => {\n function onMouseenter () {\n hoverIndex.value = value\n }\n\n function onMouseleave () {\n hoverIndex.value = -1\n }\n\n function onFocus () {\n if (value === 0 && normalizedValue.value === 0) {\n firstRef.value?.focus()\n } else {\n focusIndex.value = value\n }\n }\n\n function onBlur () {\n if (!isClicking) focusIndex.value = -1\n }\n\n function onClick () {\n if (props.disabled || props.readonly) return\n rating.value = normalizedValue.value === value && props.clearable ? 0 : value\n }\n\n return {\n onMouseenter: props.hover ? onMouseenter : undefined,\n onMouseleave: props.hover ? onMouseleave : undefined,\n onFocus,\n onBlur,\n onClick,\n }\n }))\n\n function onMousedown () {\n isClicking = true\n }\n\n function onMouseup () {\n isClicking = false\n }\n\n const name = computed(() => props.name ?? `v-rating-${getUid()}`)\n\n function VRatingItem ({ value, index, showStar = true }: { value: number, index: number, showStar?: boolean }) {\n const { onMouseenter, onMouseleave, onFocus, onBlur, onClick } = eventState.value[index + 1]\n const id = `${name.value}-${String(value).replace('.', '-')}`\n const btnProps = {\n color: itemState.value[index]?.color,\n density: props.density,\n disabled: props.disabled,\n icon: itemState.value[index]?.icon,\n ripple: props.ripple,\n size: props.size,\n tag: 'span',\n variant: 'plain' as Variant,\n }\n\n return (\n <>\n <label\n for={ id }\n class={{\n 'v-rating__item--half': props.halfIncrements && value % 1 > 0,\n 'v-rating__item--full': props.halfIncrements && value % 1 === 0,\n }}\n onMousedown={ onMousedown }\n onMouseup={ onMouseup }\n onMouseenter={ onMouseenter }\n onMouseleave={ onMouseleave }\n >\n <span class=\"v-rating__hidden\">{ t(props.itemAriaLabel, value, props.length) }</span>\n {\n !showStar ? undefined\n : slots.item ? slots.item({\n ...itemState.value[index],\n props: btnProps,\n value,\n index,\n })\n : (\n <VBtn { ...btnProps } />\n )\n }\n </label>\n\n <input\n class=\"v-rating__hidden\"\n name={ name.value }\n id={ id }\n type=\"radio\"\n value={ value }\n checked={ normalizedValue.value === value }\n onClick={ onClick }\n onFocus={ onFocus }\n onBlur={ onBlur }\n ref={ index === 0 ? firstRef : undefined }\n readonly={ props.readonly }\n disabled={ props.disabled }\n />\n </>\n )\n }\n\n function createLabel (labelProps: { value: number, index: number, label?: string }) {\n if (slots['item-label']) return slots['item-label'](labelProps)\n\n if (labelProps.label) return <span>{ labelProps.label }</span>\n\n return <span> </span>\n }\n\n useRender(() => {\n const hasLabels = !!props.itemLabels?.length || slots['item-label']\n\n return (\n <props.tag\n class={[\n 'v-rating',\n {\n 'v-rating--hover': props.hover,\n 'v-rating--readonly': props.readonly,\n },\n themeClasses.value,\n ]}\n >\n <VRatingItem value={ 0 } index={ -1 } showStar={ false } />\n\n { range.value.map((value, i) => (\n <div class=\"v-rating__wrapper\">\n {\n hasLabels && props.itemLabelPosition === 'top'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n <div\n class={[\n 'v-rating__item',\n {\n 'v-rating__item--focused': Math.ceil(focusIndex.value) === value,\n },\n ]}\n >\n { props.halfIncrements ? (\n <>\n <VRatingItem value={ value - 0.5 } index={ i * 2 } />\n <VRatingItem value={ value } index={ (i * 2) + 1 } />\n </>\n ) : (\n <VRatingItem value={ value } index={ i } />\n ) }\n </div>\n {\n hasLabels && props.itemLabelPosition === 'bottom'\n ? createLabel({ value, index: i, label: props.itemLabels?.[i] })\n : undefined\n }\n </div>\n )) }\n </props.tag>\n )\n })\n\n return {}\n },\n})\n\nexport type VRating = InstanceType<typeof VRating>\n"],"mappings":"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"}
|
|
@@ -46,7 +46,7 @@ declare const VRating: {
|
|
|
46
46
|
readonly: boolean;
|
|
47
47
|
tag: string;
|
|
48
48
|
density: Density;
|
|
49
|
-
modelValue: number;
|
|
49
|
+
modelValue: string | number;
|
|
50
50
|
ripple: boolean;
|
|
51
51
|
clearable: boolean;
|
|
52
52
|
hover: boolean;
|
|
@@ -95,7 +95,7 @@ declare const VRating: {
|
|
|
95
95
|
};
|
|
96
96
|
readonly: BooleanConstructor;
|
|
97
97
|
modelValue: {
|
|
98
|
-
type: NumberConstructor;
|
|
98
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
99
99
|
default: number;
|
|
100
100
|
};
|
|
101
101
|
itemLabels: Prop<string[], string[]>;
|
|
@@ -106,7 +106,7 @@ declare const VRating: {
|
|
|
106
106
|
};
|
|
107
107
|
ripple: BooleanConstructor;
|
|
108
108
|
}, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
|
|
109
|
-
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
109
|
+
"onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
|
|
110
110
|
} & vue.VNodeProps & vue.AllowedComponentProps & vue.ComponentCustomProps, "length" | "disabled" | "size" | "readonly" | "tag" | "density" | "modelValue" | "ripple" | "clearable" | "hover" | "halfIncrements" | "itemAriaLabel" | "emptyIcon" | "fullIcon" | "itemLabelPosition">;
|
|
111
111
|
$attrs: {
|
|
112
112
|
[x: string]: unknown;
|
|
@@ -119,7 +119,7 @@ declare const VRating: {
|
|
|
119
119
|
}>;
|
|
120
120
|
$root: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
|
|
121
121
|
$parent: vue.ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, vue.ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}>> | null;
|
|
122
|
-
$emit: (event: "update:modelValue", value: number) => void;
|
|
122
|
+
$emit: (event: "update:modelValue", value: string | number) => void;
|
|
123
123
|
$el: any;
|
|
124
124
|
$options: vue.ComponentOptionsBase<Readonly<vue.ExtractPropTypes<Omit<{
|
|
125
125
|
theme: StringConstructor;
|
|
@@ -161,7 +161,7 @@ declare const VRating: {
|
|
|
161
161
|
};
|
|
162
162
|
readonly: BooleanConstructor;
|
|
163
163
|
modelValue: {
|
|
164
|
-
type: NumberConstructor;
|
|
164
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
165
165
|
default: number;
|
|
166
166
|
};
|
|
167
167
|
itemLabels: Prop<string[], string[]>;
|
|
@@ -172,9 +172,9 @@ declare const VRating: {
|
|
|
172
172
|
};
|
|
173
173
|
ripple: BooleanConstructor;
|
|
174
174
|
}, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
|
|
175
|
-
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
175
|
+
"onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
|
|
176
176
|
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
|
|
177
|
-
'update:modelValue': (value: number) => boolean;
|
|
177
|
+
'update:modelValue': (value: number | string) => boolean;
|
|
178
178
|
}, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">, string, {
|
|
179
179
|
length: string | number;
|
|
180
180
|
disabled: boolean;
|
|
@@ -182,7 +182,7 @@ declare const VRating: {
|
|
|
182
182
|
readonly: boolean;
|
|
183
183
|
tag: string;
|
|
184
184
|
density: Density;
|
|
185
|
-
modelValue: number;
|
|
185
|
+
modelValue: string | number;
|
|
186
186
|
ripple: boolean;
|
|
187
187
|
clearable: boolean;
|
|
188
188
|
hover: boolean;
|
|
@@ -251,7 +251,7 @@ declare const VRating: {
|
|
|
251
251
|
};
|
|
252
252
|
readonly: BooleanConstructor;
|
|
253
253
|
modelValue: {
|
|
254
|
-
type: NumberConstructor;
|
|
254
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
255
255
|
default: number;
|
|
256
256
|
};
|
|
257
257
|
itemLabels: Prop<string[], string[]>;
|
|
@@ -262,7 +262,7 @@ declare const VRating: {
|
|
|
262
262
|
};
|
|
263
263
|
ripple: BooleanConstructor;
|
|
264
264
|
}, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
|
|
265
|
-
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
265
|
+
"onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
|
|
266
266
|
} & vue.ShallowUnwrapRef<{}> & {} & vue.ComponentCustomProperties;
|
|
267
267
|
__isFragment?: undefined;
|
|
268
268
|
__isTeleport?: undefined;
|
|
@@ -307,7 +307,7 @@ declare const VRating: {
|
|
|
307
307
|
};
|
|
308
308
|
readonly: BooleanConstructor;
|
|
309
309
|
modelValue: {
|
|
310
|
-
type: NumberConstructor;
|
|
310
|
+
type: (StringConstructor | NumberConstructor)[];
|
|
311
311
|
default: number;
|
|
312
312
|
};
|
|
313
313
|
itemLabels: Prop<string[], string[]>;
|
|
@@ -318,9 +318,9 @@ declare const VRating: {
|
|
|
318
318
|
};
|
|
319
319
|
ripple: BooleanConstructor;
|
|
320
320
|
}, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">>> & {
|
|
321
|
-
"onUpdate:modelValue"?: ((value: number) => any) | undefined;
|
|
321
|
+
"onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
|
|
322
322
|
}, {}, unknown, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, Omit<{
|
|
323
|
-
'update:modelValue': (value: number) => boolean;
|
|
323
|
+
'update:modelValue': (value: number | string) => boolean;
|
|
324
324
|
}, "$children" | "v-slots" | "v-slot:item" | "v-slot:item-label">, string, {
|
|
325
325
|
length: string | number;
|
|
326
326
|
disabled: boolean;
|
|
@@ -328,7 +328,7 @@ declare const VRating: {
|
|
|
328
328
|
readonly: boolean;
|
|
329
329
|
tag: string;
|
|
330
330
|
density: Density;
|
|
331
|
-
modelValue: number;
|
|
331
|
+
modelValue: string | number;
|
|
332
332
|
ripple: boolean;
|
|
333
333
|
clearable: boolean;
|
|
334
334
|
hover: boolean;
|
|
@@ -3,10 +3,11 @@ import { createTextVNode as _createTextVNode, mergeProps as _mergeProps, createV
|
|
|
3
3
|
import "./VSelect.css";
|
|
4
4
|
|
|
5
5
|
// Components
|
|
6
|
-
import {
|
|
6
|
+
import { filterVTextFieldProps, makeVTextFieldProps } from "../VTextField/VTextField.mjs";
|
|
7
7
|
import { VCheckboxBtn } from "../VCheckbox/index.mjs";
|
|
8
8
|
import { VChip } from "../VChip/index.mjs";
|
|
9
9
|
import { VDefaultsProvider } from "../VDefaultsProvider/index.mjs";
|
|
10
|
+
import { VDialogTransition } from "../transitions/index.mjs";
|
|
10
11
|
import { VList, VListItem } from "../VList/index.mjs";
|
|
11
12
|
import { VMenu } from "../VMenu/index.mjs";
|
|
12
13
|
import { VTextField } from "../VTextField/index.mjs"; // Composables
|
|
@@ -17,7 +18,7 @@ import { useLocale } from "../../composables/locale.mjs";
|
|
|
17
18
|
import { useProxiedModel } from "../../composables/proxiedModel.mjs";
|
|
18
19
|
import { IconValue } from "../../composables/icons.mjs"; // Utility
|
|
19
20
|
import { computed, mergeProps, ref } from 'vue';
|
|
20
|
-
import { genericComponent, propsFactory, useRender, wrapInArray } from "../../util/index.mjs"; // Types
|
|
21
|
+
import { genericComponent, omit, propsFactory, useRender, wrapInArray } from "../../util/index.mjs"; // Types
|
|
21
22
|
export const makeSelectProps = propsFactory({
|
|
22
23
|
chips: Boolean,
|
|
23
24
|
closableChips: Boolean,
|
|
@@ -32,22 +33,23 @@ export const makeSelectProps = propsFactory({
|
|
|
32
33
|
menuProps: {
|
|
33
34
|
type: Object
|
|
34
35
|
},
|
|
35
|
-
modelValue: null,
|
|
36
36
|
multiple: Boolean,
|
|
37
37
|
noDataText: {
|
|
38
38
|
type: String,
|
|
39
39
|
default: '$vuetify.noDataText'
|
|
40
40
|
},
|
|
41
41
|
openOnClear: Boolean,
|
|
42
|
-
readonly: Boolean,
|
|
43
42
|
...makeItemsProps({
|
|
44
43
|
itemChildren: false
|
|
45
44
|
})
|
|
46
|
-
}, 'select');
|
|
45
|
+
}, 'v-select');
|
|
47
46
|
export const VSelect = genericComponent()({
|
|
48
47
|
name: 'VSelect',
|
|
49
48
|
props: {
|
|
50
49
|
...makeSelectProps(),
|
|
50
|
+
...omit(makeVTextFieldProps({
|
|
51
|
+
modelValue: null
|
|
52
|
+
}), ['validationValue', 'dirty', 'appendInnerIcon']),
|
|
51
53
|
...makeTransitionProps({
|
|
52
54
|
transition: {
|
|
53
55
|
component: VDialogTransition
|
|
@@ -96,6 +98,7 @@ export const VSelect = genericComponent()({
|
|
|
96
98
|
function onKeydown(e) {
|
|
97
99
|
if (props.readonly) return;
|
|
98
100
|
if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
|
|
101
|
+
e.preventDefault();
|
|
99
102
|
menu.value = true;
|
|
100
103
|
}
|
|
101
104
|
if (['Escape', 'Tab'].includes(e.key)) {
|
|
@@ -106,12 +109,15 @@ export const VSelect = genericComponent()({
|
|
|
106
109
|
(_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
|
|
107
110
|
} else if (e.key === 'ArrowUp') {
|
|
108
111
|
var _listRef$value2;
|
|
112
|
+
e.preventDefault();
|
|
109
113
|
(_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
|
|
110
114
|
} else if (e.key === 'Home') {
|
|
111
115
|
var _listRef$value3;
|
|
116
|
+
e.preventDefault();
|
|
112
117
|
(_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
|
|
113
118
|
} else if (e.key === 'End') {
|
|
114
119
|
var _listRef$value4;
|
|
120
|
+
e.preventDefault();
|
|
115
121
|
(_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
|
|
116
122
|
}
|
|
117
123
|
}
|
|
@@ -144,8 +150,10 @@ export const VSelect = genericComponent()({
|
|
|
144
150
|
}
|
|
145
151
|
useRender(() => {
|
|
146
152
|
const hasChips = !!(props.chips || slots.chip);
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
const [textFieldProps] = filterVTextFieldProps(props);
|
|
154
|
+
return _createVNode(VTextField, _mergeProps({
|
|
155
|
+
"ref": vTextFieldRef
|
|
156
|
+
}, textFieldProps, {
|
|
149
157
|
"modelValue": model.value.map(v => v.props.value).join(', '),
|
|
150
158
|
"onUpdate:modelValue": v => {
|
|
151
159
|
if (v == null) model.value = [];
|
|
@@ -164,7 +172,7 @@ export const VSelect = genericComponent()({
|
|
|
164
172
|
"onClick:control": onClickControl,
|
|
165
173
|
"onBlur": onBlur,
|
|
166
174
|
"onKeydown": onKeydown
|
|
167
|
-
}, {
|
|
175
|
+
}), {
|
|
168
176
|
...slots,
|
|
169
177
|
default: () => {
|
|
170
178
|
var _slots$noData, _slots$prependItem, _slots$appendItem;
|