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.
Files changed (114) hide show
  1. package/dist/json/attributes.json +488 -524
  2. package/dist/json/importMap.json +64 -60
  3. package/dist/json/tags.json +0 -9
  4. package/dist/json/web-types.json +790 -898
  5. package/dist/vuetify.css +141 -142
  6. package/dist/vuetify.d.ts +4398 -3687
  7. package/dist/vuetify.esm.js +2400 -2345
  8. package/dist/vuetify.esm.js.map +1 -1
  9. package/dist/vuetify.js +2399 -2344
  10. package/dist/vuetify.js.map +1 -1
  11. package/dist/vuetify.min.css +2 -2
  12. package/dist/vuetify.min.js +798 -788
  13. package/dist/vuetify.min.js.map +1 -1
  14. package/lib/components/VAutocomplete/VAutocomplete.mjs +12 -4
  15. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  16. package/lib/components/VAutocomplete/index.d.ts +392 -158
  17. package/lib/components/VAvatar/VAvatar.mjs +1 -1
  18. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  19. package/lib/components/VBreadcrumbs/index.d.ts +2 -0
  20. package/lib/components/VBtn/index.d.ts +1 -0
  21. package/lib/components/VCard/VCard.css +0 -3
  22. package/lib/components/VCard/VCard.mjs +2 -1
  23. package/lib/components/VCard/VCard.mjs.map +1 -1
  24. package/lib/components/VCard/VCard.sass +0 -3
  25. package/lib/components/VCard/VCardItem.mjs +1 -2
  26. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  27. package/lib/components/VCard/index.d.ts +1 -0
  28. package/lib/components/VCheckbox/VCheckboxBtn.mjs +1 -1
  29. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  30. package/lib/components/VCheckbox/index.d.ts +1 -1
  31. package/lib/components/VChip/VChip.mjs +0 -1
  32. package/lib/components/VChip/VChip.mjs.map +1 -1
  33. package/lib/components/VChip/index.d.ts +1 -2
  34. package/lib/components/VCombobox/VCombobox.mjs +12 -4
  35. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  36. package/lib/components/VCombobox/index.d.ts +392 -158
  37. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs +1 -1
  38. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs.map +1 -1
  39. package/lib/components/VExpansionPanel/VExpansionPanel.css +2 -2
  40. package/lib/components/VExpansionPanel/VExpansionPanel.sass +2 -2
  41. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +1 -1
  42. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  43. package/lib/components/VField/index.d.ts +5 -5
  44. package/lib/components/VFileInput/index.d.ts +6 -6
  45. package/lib/components/VInput/VInput.mjs +1 -1
  46. package/lib/components/VInput/VInput.mjs.map +1 -1
  47. package/lib/components/VInput/index.d.ts +4 -4
  48. package/lib/components/VList/VList.mjs +3 -0
  49. package/lib/components/VList/VList.mjs.map +1 -1
  50. package/lib/components/VList/VListGroup.mjs +1 -1
  51. package/lib/components/VList/VListGroup.mjs.map +1 -1
  52. package/lib/components/VList/VListItem.mjs +3 -1
  53. package/lib/components/VList/VListItem.mjs.map +1 -1
  54. package/lib/components/VList/index.d.ts +19 -8
  55. package/lib/components/VNoSsr/VNoSsr.mjs +1 -3
  56. package/lib/components/VNoSsr/VNoSsr.mjs.map +1 -1
  57. package/lib/components/VOverlay/VOverlay.mjs +3 -1
  58. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  59. package/lib/components/VOverlay/locationStrategies.mjs +17 -19
  60. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  61. package/lib/components/VOverlay/scrollStrategies.mjs +5 -1
  62. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  63. package/lib/components/VOverlay/useActivator.mjs +5 -1
  64. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  65. package/lib/components/VProgressLinear/VProgressLinear.mjs +1 -0
  66. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  67. package/lib/components/VRadioGroup/index.d.ts +1 -1
  68. package/lib/components/VRangeSlider/index.d.ts +1 -1
  69. package/lib/components/VRating/VRating.mjs +7 -6
  70. package/lib/components/VRating/VRating.mjs.map +1 -1
  71. package/lib/components/VRating/index.d.ts +14 -14
  72. package/lib/components/VSelect/VSelect.mjs +16 -8
  73. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  74. package/lib/components/VSelect/index.d.ts +392 -158
  75. package/lib/components/VSelectionControl/VSelectionControl.mjs +1 -1
  76. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  77. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +1 -1
  78. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  79. package/lib/components/VSlideGroup/VSlideGroup.css +1 -0
  80. package/lib/components/VSlideGroup/VSlideGroup.sass +1 -0
  81. package/lib/components/VSlider/index.d.ts +1 -1
  82. package/lib/components/VSwitch/index.d.ts +1 -1
  83. package/lib/components/VTable/VTable.css +9 -9
  84. package/lib/components/VTable/VTable.sass +20 -15
  85. package/lib/components/VTabs/index.d.ts +1 -0
  86. package/lib/components/VTextField/VTextField.mjs +23 -19
  87. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  88. package/lib/components/VTextField/index.d.ts +58 -58
  89. package/lib/components/VTextarea/index.d.ts +6 -6
  90. package/lib/components/VToolbar/VToolbar.css +1 -0
  91. package/lib/components/VToolbar/VToolbar.sass +1 -0
  92. package/lib/components/VValidation/index.d.ts +1 -1
  93. package/lib/components/index.d.ts +4145 -3435
  94. package/lib/components/transitions/index.mjs +1 -1
  95. package/lib/components/transitions/index.mjs.map +1 -1
  96. package/lib/composables/hydration.mjs +8 -4
  97. package/lib/composables/hydration.mjs.map +1 -1
  98. package/lib/composables/icons.mjs +6 -3
  99. package/lib/composables/icons.mjs.map +1 -1
  100. package/lib/composables/nested/nested.mjs +2 -2
  101. package/lib/composables/nested/nested.mjs.map +1 -1
  102. package/lib/composables/router.mjs +2 -2
  103. package/lib/composables/router.mjs.map +1 -1
  104. package/lib/composables/toggleScope.mjs +6 -2
  105. package/lib/composables/toggleScope.mjs.map +1 -1
  106. package/lib/entry-bundler.mjs +1 -1
  107. package/lib/framework.mjs +16 -10
  108. package/lib/framework.mjs.map +1 -1
  109. package/lib/index.d.ts +17 -16
  110. package/lib/util/defineComponent.mjs +10 -15
  111. package/lib/util/defineComponent.mjs.map +1 -1
  112. package/lib/util/helpers.mjs +10 -2
  113. package/lib/util/helpers.mjs.map +1 -1
  114. 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 = rating.value >= value;
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 && rating.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 = rating.value === value && props.clearable ? 0 : 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": rating.value === value,
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>&nbsp;</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":";AAAA;AACA;;AAEA;AAAA,SACSA,IAAI,6BAEb;AAAA,SACSC,SAAS;AAAA,SACTC,gBAAgB;AAAA,SAChBC,aAAa;AAAA,SACbC,YAAY;AAAA,SACZC,cAAc,EAAEC,YAAY;AAAA,SAC5BC,SAAS;AAAA,SACTC,eAAe,8CAExB;AACA,SAASC,QAAQ,EAAEC,GAAG,QAAQ,KAAK;AAAA,SAC1BC,WAAW,EAAEC,gBAAgB,EAAEC,MAAM,EAAEC,SAAS,gCAEzD;AAqBA,OAAO,MAAMC,OAAO,GAAGH,gBAAgB,EAKnC,CAAC;EACHI,IAAI,EAAE,SAAS;EAEfC,KAAK,EAAE;IACLD,IAAI,EAAEE,MAAM;IACZC,aAAa,EAAE;MACbC,IAAI,EAAEF,MAAM;MACZG,OAAO,EAAE;IACX,CAAC;IACDC,WAAW,EAAEJ,MAAM;IACnBK,KAAK,EAAEL,MAAM;IACbM,SAAS,EAAEC,OAAO;IAClBC,QAAQ,EAAED,OAAO;IACjBE,SAAS,EAAE;MACTP,IAAI,EAAEnB,SAAS;MACfoB,OAAO,EAAE;IACX,CAAC;IACDO,QAAQ,EAAE;MACRR,IAAI,EAAEnB,SAAS;MACfoB,OAAO,EAAE;IACX,CAAC;IACDQ,cAAc,EAAEJ,OAAO;IACvBK,KAAK,EAAEL,OAAO;IACdM,MAAM,EAAE;MACNX,IAAI,EAAE,CAACY,MAAM,EAAEd,MAAM,CAAC;MACtBG,OAAO,EAAE;IACX,CAAC;IACDY,QAAQ,EAAER,OAAO;IACjBS,UAAU,EAAE;MACVd,IAAI,EAAEY,MAAM;MACZX,OAAO,EAAE;IACX,CAAC;IACDc,UAAU,EAAEC,KAAuB;IACnCC,iBAAiB,EAAE;MACjBjB,IAAI,EAAEF,MAAM;MACZG,OAAO,EAAE,KAAK;MACdiB,SAAS,EAAGC,CAAM,IAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAACC,QAAQ,CAACD,CAAC;IACrD,CAAC;IACDE,MAAM,EAAEhB,OAAO;IAEf,GAAGvB,gBAAgB,EAAE;IACrB,GAAGC,aAAa,EAAE;IAClB,GAAGC,YAAY,EAAE;IACjB,GAAGC,cAAc;EACnB,CAAC;EAEDqC,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAa,IAAK;EAC1C,CAAC;EAEDC,KAAK,CAAE3B,KAAK,QAAa;IAAA,IAAX;MAAE4B;IAAM,CAAC;IACrB,MAAM;MAAEC;IAAE,CAAC,GAAGvC,SAAS,EAAE;IACzB,MAAM;MAAEwC;IAAa,CAAC,GAAGzC,YAAY,CAACW,KAAK,CAAC;IAC5C,MAAM+B,MAAM,GAAGxC,eAAe,CAACS,KAAK,EAAE,YAAY,CAAC;IAEnD,MAAMgC,KAAK,GAAGxC,QAAQ,CAAC,MAAME,WAAW,CAACqB,MAAM,CAACf,KAAK,CAACc,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,MAAMmB,UAAU,GAAGzC,QAAQ,CAAC,MAAMwC,KAAK,CAACN,KAAK,CAACQ,OAAO,CAACZ,CAAC,IAAItB,KAAK,CAACY,cAAc,GAAG,CAACU,CAAC,GAAG,GAAG,EAAEA,CAAC,CAAC,GAAG,CAACA,CAAC,CAAC,CAAC,CAAC;IACtG,MAAMa,UAAU,GAAG1C,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM2C,UAAU,GAAG3C,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM4C,QAAQ,GAAG5C,GAAG,EAAe;IACnC,IAAI6C,UAAU,GAAG,KAAK;IAEtB,MAAMC,SAAS,GAAG/C,QAAQ,CAAC,MAAMyC,UAAU,CAACP,KAAK,CAACc,GAAG,CAACd,KAAK,IAAI;MAC7D,MAAMe,UAAU,GAAGzC,KAAK,CAACa,KAAK,IAAIsB,UAAU,CAACT,KAAK,GAAG,CAAC,CAAC;MACvD,MAAMgB,QAAQ,GAAGX,MAAM,CAACL,KAAK,IAAIA,KAAK;MACtC,MAAMiB,SAAS,GAAGR,UAAU,CAACT,KAAK,IAAIA,KAAK;MAC3C,MAAMkB,UAAU,GAAGH,UAAU,GAAGE,SAAS,GAAGD,QAAQ;MACpD,MAAMG,IAAI,GAAGD,UAAU,GAAG5C,KAAK,CAACW,QAAQ,GAAGX,KAAK,CAACU,SAAS;MAC1D,MAAML,WAAW,GAAGL,KAAK,CAACK,WAAW,IAAIL,KAAK,CAACM,KAAK;MACpD,MAAMA,KAAK,GAAIoC,QAAQ,IAAIC,SAAS,GAAItC,WAAW,GAAGL,KAAK,CAACM,KAAK;MAEjE,OAAO;QAAEoC,QAAQ;QAAEC,SAAS;QAAEE,IAAI;QAAEvC;MAAM,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,MAAMwC,UAAU,GAAGtD,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAGyC,UAAU,CAACP,KAAK,CAAC,CAACc,GAAG,CAACd,KAAK,IAAI;MACtE,SAASqB,YAAY,GAAI;QACvBZ,UAAU,CAACT,KAAK,GAAGA,KAAK;MAC1B;MAEA,SAASsB,YAAY,GAAI;QACvBb,UAAU,CAACT,KAAK,GAAG,CAAC,CAAC;MACvB;MAEA,SAASuB,OAAO,GAAI;QAClB,IAAIvB,KAAK,KAAK,CAAC,IAAIK,MAAM,CAACL,KAAK,KAAK,CAAC,EAAE;UAAA;UACrC,mBAAAW,QAAQ,CAACX,KAAK,qBAAd,gBAAgBwB,KAAK,EAAE;QACzB,CAAC,MAAM;UACLd,UAAU,CAACV,KAAK,GAAGA,KAAK;QAC1B;MACF;MAEA,SAASyB,MAAM,GAAI;QACjB,IAAI,CAACb,UAAU,EAAEF,UAAU,CAACV,KAAK,GAAG,CAAC,CAAC;MACxC;MAEA,SAAS0B,OAAO,GAAI;QAClB,IAAIpD,KAAK,CAACS,QAAQ,IAAIT,KAAK,CAACgB,QAAQ,EAAE;QACtCe,MAAM,CAACL,KAAK,GAAGK,MAAM,CAACL,KAAK,KAAKA,KAAK,IAAI1B,KAAK,CAACO,SAAS,GAAG,CAAC,GAAGmB,KAAK;MACtE;MAEA,OAAO;QACLqB,YAAY,EAAE/C,KAAK,CAACa,KAAK,GAAGkC,YAAY,GAAGM,SAAS;QACpDL,YAAY,EAAEhD,KAAK,CAACa,KAAK,GAAGmC,YAAY,GAAGK,SAAS;QACpDJ,OAAO;QACPE,MAAM;QACNC;MACF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAASE,WAAW,GAAI;MACtBhB,UAAU,GAAG,IAAI;IACnB;IAEA,SAASiB,SAAS,GAAI;MACpBjB,UAAU,GAAG,KAAK;IACpB;IAEA,MAAMvC,IAAI,GAAGP,QAAQ,CAAC,MAAMQ,KAAK,CAACD,IAAI,IAAK,YAAWH,MAAM,EAAG,EAAC,CAAC;IAEjE,SAAS4D,WAAW,QAA2F;MAAA;MAAA,IAAzF;QAAE9B,KAAK;QAAE+B,KAAK;QAAEC,QAAQ,GAAG;MAA2D,CAAC;MAC3G,MAAM;QAAEX,YAAY;QAAEC,YAAY;QAAEC,OAAO;QAAEE,MAAM;QAAEC;MAAQ,CAAC,GAAGN,UAAU,CAACpB,KAAK,CAAC+B,KAAK,GAAG,CAAC,CAAC;MAC5F,MAAME,EAAE,GAAI,GAAE5D,IAAI,CAAC2B,KAAM,IAAGzB,MAAM,CAACyB,KAAK,CAAC,CAACkC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAE,EAAC;MAC7D,MAAMC,QAAQ,GAAG;QACfvD,KAAK,2BAAEiC,SAAS,CAACb,KAAK,CAAC+B,KAAK,CAAC,qBAAtB,sBAAwBnD,KAAK;QACpCwD,OAAO,EAAE9D,KAAK,CAAC8D,OAAO;QACtBrD,QAAQ,EAAET,KAAK,CAACS,QAAQ;QACxBoC,IAAI,4BAAEN,SAAS,CAACb,KAAK,CAAC+B,KAAK,CAAC,qBAAtB,uBAAwBZ,IAAI;QAClCrB,MAAM,EAAExB,KAAK,CAACwB,MAAM;QACpBuC,IAAI,EAAE/D,KAAK,CAAC+D,IAAI;QAChBC,GAAG,EAAE,MAAM;QACXC,OAAO,EAAE;MACX,CAAC;MAED;QAAA,OAGYN,EAAE;QAAA,SACD;UACL,sBAAsB,EAAE3D,KAAK,CAACY,cAAc,IAAIc,KAAK,GAAG,CAAC,GAAG,CAAC;UAC7D,sBAAsB,EAAE1B,KAAK,CAACY,cAAc,IAAIc,KAAK,GAAG,CAAC,KAAK;QAChE,CAAC;QAAA,eACa4B,WAAW;QAAA,aACbC,SAAS;QAAA,gBACNR,YAAY;QAAA,gBACZC;MAAY;QAAA,SAEf;MAAkB,IAAGnB,CAAC,CAAC7B,KAAK,CAACE,aAAa,EAAEwB,KAAK,EAAE1B,KAAK,CAACc,MAAM,CAAC,IAE1E,CAAC4C,QAAQ,GAAGL,SAAS,GACnBzB,KAAK,CAACsC,IAAI,GAAGtC,KAAK,CAACsC,IAAI,CAAC;QACxB,GAAG3B,SAAS,CAACb,KAAK,CAAC+B,KAAK,CAAC;QACzBzD,KAAK,EAAE6D,QAAQ;QACfnC,KAAK;QACL+B;MACF,CAAC,CAAC,sBAEWI,QAAQ,OACpB;QAAA,SAKG,kBAAkB;QAAA,QACjB9D,IAAI,CAAC2B,KAAK;QAAA,MACZiC,EAAE;QAAA,QACF,OAAO;QAAA,SACJjC,KAAK;QAAA,WACHK,MAAM,CAACL,KAAK,KAAKA,KAAK;QAAA,WACtB0B,OAAO;QAAA,WACPH,OAAO;QAAA,UACRE,MAAM;QAAA,OACTM,KAAK,KAAK,CAAC,GAAGpB,QAAQ,GAAGgB,SAAS;QAAA,YAC7BrD,KAAK,CAACgB,QAAQ;QAAA,YACdhB,KAAK,CAACS;MAAQ;IAIjC;IAEA,SAAS0D,WAAW,CAAEC,UAA4D,EAAE;MAClF,IAAIxC,KAAK,CAAC,YAAY,CAAC,EAAE,OAAOA,KAAK,CAAC,YAAY,CAAC,CAACwC,UAAU,CAAC;MAE/D,IAAIA,UAAU,CAACC,KAAK,EAAE,mCAAeD,UAAU,CAACC,KAAK;MAErD;IACF;IAEAxE,SAAS,CAAC,MAAM;MAAA;MACd,MAAMyE,SAAS,GAAG,CAAC,uBAACtE,KAAK,CAACkB,UAAU,aAAhB,kBAAkBJ,MAAM,KAAIc,KAAK,CAAC,YAAY,CAAC;MAEnE;QAAA,SAEW,CACL,UAAU,EACV;UACE,iBAAiB,EAAE5B,KAAK,CAACa,KAAK;UAC9B,oBAAoB,EAAEb,KAAK,CAACgB;QAC9B,CAAC,EACDc,YAAY,CAACJ,KAAK;MACnB;QAAA;UAAA,SAEoB,CAAC;UAAA,SAAW,CAAC,CAAC;UAAA,YAAc;QAAK,UAEpDM,KAAK,CAACN,KAAK,CAACc,GAAG,CAAC,CAACd,KAAK,EAAE6C,CAAC;UAAA;UAAA;YAAA,SACd;UAAmB,IAE1BD,SAAS,IAAItE,KAAK,CAACoB,iBAAiB,KAAK,KAAK,GAC1C+C,WAAW,CAAC;YAAEzC,KAAK;YAAE+B,KAAK,EAAEc,CAAC;YAAEF,KAAK,wBAAErE,KAAK,CAACkB,UAAU,qBAAhB,mBAAmBqD,CAAC;UAAE,CAAC,CAAC,GAC9DlB,SAAS;YAAA,SAGN,CACL,gBAAgB,EAChB;cACE,yBAAyB,EAAEmB,IAAI,CAACC,IAAI,CAACrC,UAAU,CAACV,KAAK,CAAC,KAAKA;YAC7D,CAAC;UACF,IAEC1B,KAAK,CAACY,cAAc;YAAA,SAEGc,KAAK,GAAG,GAAG;YAAA,SAAW6C,CAAC,GAAG;UAAC;YAAA,SAC3B7C,KAAK;YAAA,SAAY6C,CAAC,GAAG,CAAC,GAAI;UAAC;YAAA,SAG7B7C,KAAK;YAAA,SAAW6C;UAAC,QACvC,IAGDD,SAAS,IAAItE,KAAK,CAACoB,iBAAiB,KAAK,QAAQ,GAC7C+C,WAAW,CAAC;YAAEzC,KAAK;YAAE+B,KAAK,EAAEc,CAAC;YAAEF,KAAK,wBAAErE,KAAK,CAACkB,UAAU,qBAAhB,mBAAmBqD,CAAC;UAAE,CAAC,CAAC,GAC9DlB,SAAS;QAAA,CAGlB,CAAC;MAAA;IAGR,CAAC,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}
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>&nbsp;</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 { VDialogTransition } from "../transitions/index.mjs";
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
- return _createVNode(VTextField, {
148
- "ref": vTextFieldRef,
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;