vuetify 3.5.9 → 3.5.11

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 (147) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +106 -6
  3. package/dist/json/importMap-labs.json +10 -6
  4. package/dist/json/importMap.json +128 -128
  5. package/dist/json/tags.json +30 -0
  6. package/dist/json/web-types.json +582 -15
  7. package/dist/vuetify-labs.css +3076 -3034
  8. package/dist/vuetify-labs.d.ts +2711 -1996
  9. package/dist/vuetify-labs.esm.js +518 -40
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +518 -39
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +1609 -1604
  14. package/dist/vuetify.d.ts +1885 -1832
  15. package/dist/vuetify.esm.js +605 -330
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +604 -328
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +1106 -1098
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VAlert/index.d.mts +15 -15
  23. package/lib/components/VApp/index.d.mts +8 -8
  24. package/lib/components/VAppBar/index.d.mts +7 -7
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs +4 -4
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/index.d.mts +94 -94
  28. package/lib/components/VAvatar/index.d.mts +8 -8
  29. package/lib/components/VBadge/index.d.mts +7 -7
  30. package/lib/components/VBanner/index.d.mts +20 -20
  31. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  32. package/lib/components/VBreadcrumbs/index.d.mts +27 -26
  33. package/lib/components/VBtnGroup/index.d.mts +8 -8
  34. package/lib/components/VCard/index.d.mts +32 -32
  35. package/lib/components/VCarousel/index.d.mts +6 -6
  36. package/lib/components/VCheckbox/index.d.mts +44 -44
  37. package/lib/components/VChip/index.d.mts +7 -7
  38. package/lib/components/VCode/index.d.mts +8 -8
  39. package/lib/components/VCombobox/VCombobox.mjs +5 -4
  40. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  41. package/lib/components/VCombobox/index.d.mts +94 -94
  42. package/lib/components/VDataTable/index.d.mts +6 -6
  43. package/lib/components/VDatePicker/VDatePickerMonth.mjs +10 -4
  44. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  45. package/lib/components/VDatePicker/index.d.mts +10 -10
  46. package/lib/components/VDefaultsProvider/index.d.mts +8 -8
  47. package/lib/components/VDialog/index.d.mts +12 -6
  48. package/lib/components/VDivider/index.d.mts +8 -8
  49. package/lib/components/VExpansionPanel/index.d.mts +19 -19
  50. package/lib/components/VField/VField.css +2 -0
  51. package/lib/components/VField/VField.mjs +1 -1
  52. package/lib/components/VField/VField.mjs.map +1 -1
  53. package/lib/components/VField/VField.sass +2 -0
  54. package/lib/components/VField/index.d.mts +28 -28
  55. package/lib/components/VFileInput/index.d.mts +133 -133
  56. package/lib/components/VFooter/index.d.mts +8 -8
  57. package/lib/components/VGrid/index.d.mts +32 -32
  58. package/lib/components/VIcon/VIcon.css +4 -0
  59. package/lib/components/VIcon/VIcon.mjs +7 -3
  60. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  61. package/lib/components/VIcon/VIcon.sass +4 -0
  62. package/lib/components/VIcon/_variables.scss +1 -0
  63. package/lib/components/VIcon/index.d.mts +25 -16
  64. package/lib/components/VImg/index.d.mts +4 -4
  65. package/lib/components/VInput/index.d.mts +21 -21
  66. package/lib/components/VKbd/index.d.mts +8 -8
  67. package/lib/components/VLabel/index.d.mts +8 -8
  68. package/lib/components/VLayout/index.d.mts +16 -16
  69. package/lib/components/VLazy/index.d.mts +8 -8
  70. package/lib/components/VList/VListItem.mjs +2 -2
  71. package/lib/components/VList/VListItem.mjs.map +1 -1
  72. package/lib/components/VList/index.d.mts +48 -48
  73. package/lib/components/VLocaleProvider/index.d.mts +12 -12
  74. package/lib/components/VMain/index.d.mts +8 -8
  75. package/lib/components/VMenu/VMenu.mjs +3 -0
  76. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  77. package/lib/components/VMenu/index.d.mts +14 -8
  78. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +1 -1
  79. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +22 -8
  80. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  81. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +2 -1
  82. package/lib/components/VNavigationDrawer/index.d.mts +11 -11
  83. package/lib/components/VOtpInput/VOtpInput.mjs +7 -2
  84. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  85. package/lib/components/VOtpInput/index.d.mts +31 -31
  86. package/lib/components/VOverlay/VOverlay.mjs +8 -3
  87. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  88. package/lib/components/VOverlay/index.d.mts +3 -0
  89. package/lib/components/VOverlay/scrollStrategies.mjs +2 -2
  90. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  91. package/lib/components/VPagination/index.d.mts +7 -7
  92. package/lib/components/VProgressLinear/VProgressLinear.css +0 -1
  93. package/lib/components/VProgressLinear/VProgressLinear.sass +0 -1
  94. package/lib/components/VProgressLinear/index.d.mts +7 -7
  95. package/lib/components/VRadioGroup/index.d.mts +44 -44
  96. package/lib/components/VRangeSlider/index.d.mts +47 -47
  97. package/lib/components/VRating/index.d.mts +7 -7
  98. package/lib/components/VResponsive/index.d.mts +8 -8
  99. package/lib/components/VSelect/index.d.mts +94 -94
  100. package/lib/components/VSheet/index.d.mts +8 -8
  101. package/lib/components/VSkeletonLoader/index.d.mts +8 -8
  102. package/lib/components/VSlider/index.d.mts +47 -47
  103. package/lib/components/VSnackbar/index.d.mts +25 -19
  104. package/lib/components/VStepper/index.d.mts +41 -41
  105. package/lib/components/VSwitch/index.d.mts +39 -39
  106. package/lib/components/VSystemBar/index.d.mts +8 -8
  107. package/lib/components/VTabs/index.d.mts +15 -15
  108. package/lib/components/VTextField/index.d.mts +173 -173
  109. package/lib/components/VTextarea/index.d.mts +119 -119
  110. package/lib/components/VThemeProvider/index.d.mts +8 -8
  111. package/lib/components/VTimeline/index.d.mts +8 -8
  112. package/lib/components/VToolbar/index.d.mts +8 -8
  113. package/lib/components/VTooltip/index.d.mts +14 -8
  114. package/lib/components/VWindow/index.d.mts +10 -10
  115. package/lib/components/index.d.mts +1869 -1832
  116. package/lib/components/transitions/index.d.mts +128 -128
  117. package/lib/composables/date/adapters/vuetify.mjs +1 -1
  118. package/lib/composables/date/adapters/vuetify.mjs.map +1 -1
  119. package/lib/composables/theme.mjs +1 -1
  120. package/lib/composables/theme.mjs.map +1 -1
  121. package/lib/entry-bundler.mjs +3 -2
  122. package/lib/entry-bundler.mjs.map +1 -1
  123. package/lib/framework.mjs +1 -1
  124. package/lib/framework.mjs.map +1 -1
  125. package/lib/index.d.mts +40 -39
  126. package/lib/labs/VCalendar/index.d.mts +32 -32
  127. package/lib/labs/VFab/index.d.mts +15 -15
  128. package/lib/labs/VNumberInput/VNumberInput.css +38 -0
  129. package/lib/labs/VNumberInput/VNumberInput.mjs +209 -0
  130. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -0
  131. package/lib/labs/VNumberInput/VNumberInput.sass +47 -0
  132. package/lib/labs/VNumberInput/_variables.scss +1 -0
  133. package/lib/labs/VNumberInput/index.d.mts +607 -0
  134. package/lib/labs/VNumberInput/index.mjs +2 -0
  135. package/lib/labs/VNumberInput/index.mjs.map +1 -0
  136. package/lib/labs/VPicker/index.d.mts +8 -8
  137. package/lib/labs/VSparkline/index.d.mts +7 -7
  138. package/lib/labs/VSpeedDial/VSpeedDial.mjs +9 -5
  139. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -1
  140. package/lib/labs/VSpeedDial/index.d.mts +120 -24
  141. package/lib/labs/VTreeview/index.d.mts +8 -8
  142. package/lib/labs/components.d.mts +788 -95
  143. package/lib/labs/components.mjs +1 -0
  144. package/lib/labs/components.mjs.map +1 -1
  145. package/lib/locale/no.mjs +1 -1
  146. package/lib/locale/no.mjs.map +1 -1
  147. package/package.json +3 -3
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.9
2
+ * Vuetify v3.5.11
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -10,77 +10,6 @@
10
10
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Vuetify = {}, global.Vue));
11
11
  })(this, (function (exports, vue) { 'use strict';
12
12
 
13
- // Types
14
- // eslint-disable-line vue/prefer-import-from-vue
15
-
16
- /**
17
- * Creates a factory function for props definitions.
18
- * This is used to define props in a composable then override
19
- * default values in an implementing component.
20
- *
21
- * @example Simplified signature
22
- * (props: Props) => (defaults?: Record<keyof props, any>) => Props
23
- *
24
- * @example Usage
25
- * const makeProps = propsFactory({
26
- * foo: String,
27
- * })
28
- *
29
- * defineComponent({
30
- * props: {
31
- * ...makeProps({
32
- * foo: 'a',
33
- * }),
34
- * },
35
- * setup (props) {
36
- * // would be "string | undefined", now "string" because a default has been provided
37
- * props.foo
38
- * },
39
- * }
40
- */
41
-
42
- function propsFactory(props, source) {
43
- return defaults => {
44
- return Object.keys(props).reduce((obj, prop) => {
45
- const isObjectDefinition = typeof props[prop] === 'object' && props[prop] != null && !Array.isArray(props[prop]);
46
- const definition = isObjectDefinition ? props[prop] : {
47
- type: props[prop]
48
- };
49
- if (defaults && prop in defaults) {
50
- obj[prop] = {
51
- ...definition,
52
- default: defaults[prop]
53
- };
54
- } else {
55
- obj[prop] = definition;
56
- }
57
- if (source && !obj[prop].source) {
58
- obj[prop].source = source;
59
- }
60
- return obj;
61
- }, {});
62
- };
63
- }
64
-
65
- /**
66
- * Like `Partial<T>` but doesn't care what the value is
67
- */
68
-
69
- // Copied from Vue
70
-
71
- // Utilities
72
-
73
- // Types
74
-
75
- // Composables
76
- const makeComponentProps = propsFactory({
77
- class: [String, Array],
78
- style: {
79
- type: [String, Array, Object],
80
- default: null
81
- }
82
- }, 'component');
83
-
84
13
  const IN_BROWSER = typeof window !== 'undefined';
85
14
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
86
15
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
@@ -1231,6 +1160,77 @@
1231
1160
  return whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000';
1232
1161
  }
1233
1162
 
1163
+ // Types
1164
+ // eslint-disable-line vue/prefer-import-from-vue
1165
+
1166
+ /**
1167
+ * Creates a factory function for props definitions.
1168
+ * This is used to define props in a composable then override
1169
+ * default values in an implementing component.
1170
+ *
1171
+ * @example Simplified signature
1172
+ * (props: Props) => (defaults?: Record<keyof props, any>) => Props
1173
+ *
1174
+ * @example Usage
1175
+ * const makeProps = propsFactory({
1176
+ * foo: String,
1177
+ * })
1178
+ *
1179
+ * defineComponent({
1180
+ * props: {
1181
+ * ...makeProps({
1182
+ * foo: 'a',
1183
+ * }),
1184
+ * },
1185
+ * setup (props) {
1186
+ * // would be "string | undefined", now "string" because a default has been provided
1187
+ * props.foo
1188
+ * },
1189
+ * }
1190
+ */
1191
+
1192
+ function propsFactory(props, source) {
1193
+ return defaults => {
1194
+ return Object.keys(props).reduce((obj, prop) => {
1195
+ const isObjectDefinition = typeof props[prop] === 'object' && props[prop] != null && !Array.isArray(props[prop]);
1196
+ const definition = isObjectDefinition ? props[prop] : {
1197
+ type: props[prop]
1198
+ };
1199
+ if (defaults && prop in defaults) {
1200
+ obj[prop] = {
1201
+ ...definition,
1202
+ default: defaults[prop]
1203
+ };
1204
+ } else {
1205
+ obj[prop] = definition;
1206
+ }
1207
+ if (source && !obj[prop].source) {
1208
+ obj[prop].source = source;
1209
+ }
1210
+ return obj;
1211
+ }, {});
1212
+ };
1213
+ }
1214
+
1215
+ /**
1216
+ * Like `Partial<T>` but doesn't care what the value is
1217
+ */
1218
+
1219
+ // Copied from Vue
1220
+
1221
+ // Utilities
1222
+
1223
+ // Types
1224
+
1225
+ // Composables
1226
+ const makeComponentProps = propsFactory({
1227
+ class: [String, Array],
1228
+ style: {
1229
+ type: [String, Array, Object],
1230
+ default: null
1231
+ }
1232
+ }, 'component');
1233
+
1234
1234
  // Utilities
1235
1235
 
1236
1236
  // Types
@@ -1537,19 +1537,464 @@
1537
1537
  if (window.getComputedStyle(el).position === 'fixed') {
1538
1538
  return true;
1539
1539
  }
1540
- el = el.offsetParent;
1540
+ el = el.offsetParent;
1541
+ }
1542
+ return false;
1543
+ }
1544
+
1545
+ // Utilities
1546
+
1547
+ // Types
1548
+
1549
+ function useRender(render) {
1550
+ const vm = getCurrentInstance('useRender');
1551
+ vm.render = render;
1552
+ }
1553
+
1554
+ // Types
1555
+
1556
+ const IconValue = [String, Function, Object, Array];
1557
+ const IconSymbol = Symbol.for('vuetify:icons');
1558
+ const makeIconProps = propsFactory({
1559
+ icon: {
1560
+ type: IconValue
1561
+ },
1562
+ // Could not remove this and use makeTagProps, types complained because it is not required
1563
+ tag: {
1564
+ type: String,
1565
+ required: true
1566
+ }
1567
+ }, 'icon');
1568
+ const VComponentIcon = genericComponent()({
1569
+ name: 'VComponentIcon',
1570
+ props: makeIconProps(),
1571
+ setup(props, _ref) {
1572
+ let {
1573
+ slots
1574
+ } = _ref;
1575
+ return () => {
1576
+ const Icon = props.icon;
1577
+ return vue.createVNode(props.tag, null, {
1578
+ default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
1579
+ });
1580
+ };
1581
+ }
1582
+ });
1583
+ const VSvgIcon = defineComponent({
1584
+ name: 'VSvgIcon',
1585
+ inheritAttrs: false,
1586
+ props: makeIconProps(),
1587
+ setup(props, _ref2) {
1588
+ let {
1589
+ attrs
1590
+ } = _ref2;
1591
+ return () => {
1592
+ return vue.createVNode(props.tag, vue.mergeProps(attrs, {
1593
+ "style": null
1594
+ }), {
1595
+ default: () => [vue.createVNode("svg", {
1596
+ "class": "v-icon__svg",
1597
+ "xmlns": "http://www.w3.org/2000/svg",
1598
+ "viewBox": "0 0 24 24",
1599
+ "role": "img",
1600
+ "aria-hidden": "true"
1601
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
1602
+ "d": path[0],
1603
+ "fill-opacity": path[1]
1604
+ }, null) : vue.createVNode("path", {
1605
+ "d": path
1606
+ }, null)) : vue.createVNode("path", {
1607
+ "d": props.icon
1608
+ }, null)])]
1609
+ });
1610
+ };
1611
+ }
1612
+ });
1613
+ const VLigatureIcon = defineComponent({
1614
+ name: 'VLigatureIcon',
1615
+ props: makeIconProps(),
1616
+ setup(props) {
1617
+ return () => {
1618
+ return vue.createVNode(props.tag, null, {
1619
+ default: () => [props.icon]
1620
+ });
1621
+ };
1622
+ }
1623
+ });
1624
+ const VClassIcon = defineComponent({
1625
+ name: 'VClassIcon',
1626
+ props: makeIconProps(),
1627
+ setup(props) {
1628
+ return () => {
1629
+ return vue.createVNode(props.tag, {
1630
+ "class": props.icon
1631
+ }, null);
1632
+ };
1633
+ }
1634
+ });
1635
+ function genDefaults$3() {
1636
+ return {
1637
+ svg: {
1638
+ component: VSvgIcon
1639
+ },
1640
+ class: {
1641
+ component: VClassIcon
1642
+ }
1643
+ };
1644
+ }
1645
+
1646
+ // Composables
1647
+ function createIcons(options) {
1648
+ const sets = genDefaults$3();
1649
+ const defaultSet = options?.defaultSet ?? 'mdi';
1650
+ if (defaultSet === 'mdi' && !sets.mdi) {
1651
+ sets.mdi = mdi;
1652
+ }
1653
+ return mergeDeep({
1654
+ defaultSet,
1655
+ sets,
1656
+ aliases: {
1657
+ ...aliases,
1658
+ /* eslint-disable max-len */
1659
+ vuetify: ['M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z', ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6]],
1660
+ 'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z'
1661
+ /* eslint-enable max-len */
1662
+ }
1663
+ }, options);
1664
+ }
1665
+ const useIcon = props => {
1666
+ const icons = vue.inject(IconSymbol);
1667
+ if (!icons) throw new Error('Missing Vuetify Icons provide!');
1668
+ const iconData = vue.computed(() => {
1669
+ const iconAlias = vue.unref(props);
1670
+ if (!iconAlias) return {
1671
+ component: VComponentIcon
1672
+ };
1673
+ let icon = iconAlias;
1674
+ if (typeof icon === 'string') {
1675
+ icon = icon.trim();
1676
+ if (icon.startsWith('$')) {
1677
+ icon = icons.aliases?.[icon.slice(1)];
1678
+ }
1679
+ }
1680
+ if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
1681
+ if (Array.isArray(icon)) {
1682
+ return {
1683
+ component: VSvgIcon,
1684
+ icon
1685
+ };
1686
+ } else if (typeof icon !== 'string') {
1687
+ return {
1688
+ component: VComponentIcon,
1689
+ icon
1690
+ };
1691
+ }
1692
+ const iconSetName = Object.keys(icons.sets).find(setName => typeof icon === 'string' && icon.startsWith(`${setName}:`));
1693
+ const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;
1694
+ const iconSet = icons.sets[iconSetName ?? icons.defaultSet];
1695
+ return {
1696
+ component: iconSet.component,
1697
+ icon: iconName
1698
+ };
1699
+ });
1700
+ return {
1701
+ iconData
1702
+ };
1703
+ };
1704
+
1705
+ // Composables
1706
+
1707
+ // Types
1708
+
1709
+ const aliases = {
1710
+ collapse: 'mdi-chevron-up',
1711
+ complete: 'mdi-check',
1712
+ cancel: 'mdi-close-circle',
1713
+ close: 'mdi-close',
1714
+ delete: 'mdi-close-circle',
1715
+ // delete (e.g. v-chip close)
1716
+ clear: 'mdi-close-circle',
1717
+ success: 'mdi-check-circle',
1718
+ info: 'mdi-information',
1719
+ warning: 'mdi-alert-circle',
1720
+ error: 'mdi-close-circle',
1721
+ prev: 'mdi-chevron-left',
1722
+ next: 'mdi-chevron-right',
1723
+ checkboxOn: 'mdi-checkbox-marked',
1724
+ checkboxOff: 'mdi-checkbox-blank-outline',
1725
+ checkboxIndeterminate: 'mdi-minus-box',
1726
+ delimiter: 'mdi-circle',
1727
+ // for carousel
1728
+ sortAsc: 'mdi-arrow-up',
1729
+ sortDesc: 'mdi-arrow-down',
1730
+ expand: 'mdi-chevron-down',
1731
+ menu: 'mdi-menu',
1732
+ subgroup: 'mdi-menu-down',
1733
+ dropdown: 'mdi-menu-down',
1734
+ radioOn: 'mdi-radiobox-marked',
1735
+ radioOff: 'mdi-radiobox-blank',
1736
+ edit: 'mdi-pencil',
1737
+ ratingEmpty: 'mdi-star-outline',
1738
+ ratingFull: 'mdi-star',
1739
+ ratingHalf: 'mdi-star-half-full',
1740
+ loading: 'mdi-cached',
1741
+ first: 'mdi-page-first',
1742
+ last: 'mdi-page-last',
1743
+ unfold: 'mdi-unfold-more-horizontal',
1744
+ file: 'mdi-paperclip',
1745
+ plus: 'mdi-plus',
1746
+ minus: 'mdi-minus',
1747
+ calendar: 'mdi-calendar',
1748
+ treeviewCollapse: 'mdi-menu-down',
1749
+ treeviewExpand: 'mdi-menu-right',
1750
+ eyeDropper: 'mdi-eyedropper'
1751
+ };
1752
+ const mdi = {
1753
+ // Not using mergeProps here, functional components merge props by default (?)
1754
+ component: props => vue.h(VClassIcon, {
1755
+ ...props,
1756
+ class: 'mdi'
1757
+ })
1758
+ };
1759
+
1760
+ // Icons
1761
+
1762
+ // Types
1763
+
1764
+ const md1 = {
1765
+ defaults: {
1766
+ global: {
1767
+ rounded: 'sm'
1768
+ },
1769
+ VAvatar: {
1770
+ rounded: 'circle'
1771
+ },
1772
+ VAutocomplete: {
1773
+ variant: 'underlined'
1774
+ },
1775
+ VBanner: {
1776
+ color: 'primary'
1777
+ },
1778
+ VBtn: {
1779
+ color: 'primary',
1780
+ rounded: 0
1781
+ },
1782
+ VCheckbox: {
1783
+ color: 'secondary'
1784
+ },
1785
+ VCombobox: {
1786
+ variant: 'underlined'
1787
+ },
1788
+ VSelect: {
1789
+ variant: 'underlined'
1790
+ },
1791
+ VSlider: {
1792
+ color: 'primary'
1793
+ },
1794
+ VTabs: {
1795
+ color: 'primary'
1796
+ },
1797
+ VTextarea: {
1798
+ variant: 'underlined'
1799
+ },
1800
+ VTextField: {
1801
+ variant: 'underlined'
1802
+ },
1803
+ VToolbar: {
1804
+ VBtn: {
1805
+ color: null
1806
+ }
1807
+ }
1808
+ },
1809
+ icons: {
1810
+ defaultSet: 'mdi',
1811
+ sets: {
1812
+ mdi
1813
+ }
1814
+ },
1815
+ theme: {
1816
+ themes: {
1817
+ light: {
1818
+ colors: {
1819
+ primary: '#3F51B5',
1820
+ 'primary-darken-1': '#303F9F',
1821
+ 'primary-lighten-1': '#C5CAE9',
1822
+ secondary: '#FF4081',
1823
+ 'secondary-darken-1': '#F50057',
1824
+ 'secondary-lighten-1': '#FF80AB',
1825
+ accent: '#009688'
1826
+ }
1827
+ }
1828
+ }
1829
+ }
1830
+ };
1831
+
1832
+ // Icons
1833
+
1834
+ // Types
1835
+
1836
+ const md2 = {
1837
+ defaults: {
1838
+ global: {
1839
+ rounded: 'md'
1840
+ },
1841
+ VAvatar: {
1842
+ rounded: 'circle'
1843
+ },
1844
+ VAutocomplete: {
1845
+ variant: 'filled'
1846
+ },
1847
+ VBanner: {
1848
+ color: 'primary'
1849
+ },
1850
+ VBtn: {
1851
+ color: 'primary'
1852
+ },
1853
+ VCheckbox: {
1854
+ color: 'secondary'
1855
+ },
1856
+ VCombobox: {
1857
+ variant: 'filled'
1858
+ },
1859
+ VSelect: {
1860
+ variant: 'filled'
1861
+ },
1862
+ VSlider: {
1863
+ color: 'primary'
1864
+ },
1865
+ VTabs: {
1866
+ color: 'primary'
1867
+ },
1868
+ VTextarea: {
1869
+ variant: 'filled'
1870
+ },
1871
+ VTextField: {
1872
+ variant: 'filled'
1873
+ },
1874
+ VToolbar: {
1875
+ VBtn: {
1876
+ color: null
1877
+ }
1878
+ }
1879
+ },
1880
+ icons: {
1881
+ defaultSet: 'mdi',
1882
+ sets: {
1883
+ mdi
1884
+ }
1885
+ },
1886
+ theme: {
1887
+ themes: {
1888
+ light: {
1889
+ colors: {
1890
+ primary: '#6200EE',
1891
+ 'primary-darken-1': '#3700B3',
1892
+ secondary: '#03DAC6',
1893
+ 'secondary-darken-1': '#018786',
1894
+ error: '#B00020'
1895
+ }
1896
+ }
1897
+ }
1898
+ }
1899
+ };
1900
+
1901
+ // Icons
1902
+
1903
+ // Types
1904
+
1905
+ const md3 = {
1906
+ defaults: {
1907
+ VAppBar: {
1908
+ flat: true
1909
+ },
1910
+ VAutocomplete: {
1911
+ variant: 'filled'
1912
+ },
1913
+ VBanner: {
1914
+ color: 'primary'
1915
+ },
1916
+ VBottomSheet: {
1917
+ contentClass: 'rounded-t-xl overflow-hidden'
1918
+ },
1919
+ VBtn: {
1920
+ color: 'primary',
1921
+ rounded: 'xl'
1922
+ },
1923
+ VBtnGroup: {
1924
+ rounded: 'xl',
1925
+ VBtn: {
1926
+ rounded: null
1927
+ }
1928
+ },
1929
+ VCard: {
1930
+ rounded: 'lg'
1931
+ },
1932
+ VCheckbox: {
1933
+ color: 'secondary',
1934
+ inset: true
1935
+ },
1936
+ VChip: {
1937
+ rounded: 'sm'
1938
+ },
1939
+ VCombobox: {
1940
+ variant: 'filled'
1941
+ },
1942
+ VNavigationDrawer: {
1943
+ // VList: {
1944
+ // nav: true,
1945
+ // VListItem: {
1946
+ // rounded: 'xl',
1947
+ // },
1948
+ // },
1949
+ },
1950
+ VSelect: {
1951
+ variant: 'filled'
1952
+ },
1953
+ VSlider: {
1954
+ color: 'primary'
1955
+ },
1956
+ VTabs: {
1957
+ color: 'primary'
1958
+ },
1959
+ VTextarea: {
1960
+ variant: 'filled'
1961
+ },
1962
+ VTextField: {
1963
+ variant: 'filled'
1964
+ },
1965
+ VToolbar: {
1966
+ VBtn: {
1967
+ color: null
1968
+ }
1969
+ }
1970
+ },
1971
+ icons: {
1972
+ defaultSet: 'mdi',
1973
+ sets: {
1974
+ mdi
1975
+ }
1976
+ },
1977
+ theme: {
1978
+ themes: {
1979
+ light: {
1980
+ colors: {
1981
+ primary: '#6750a4',
1982
+ secondary: '#b4b0bb',
1983
+ tertiary: '#7d5260',
1984
+ error: '#b3261e',
1985
+ surface: '#fffbfe'
1986
+ }
1987
+ }
1988
+ }
1541
1989
  }
1542
- return false;
1543
- }
1544
-
1545
- // Utilities
1546
-
1547
- // Types
1990
+ };
1548
1991
 
1549
- function useRender(render) {
1550
- const vm = getCurrentInstance('useRender');
1551
- vm.render = render;
1552
- }
1992
+ var index = /*#__PURE__*/Object.freeze({
1993
+ __proto__: null,
1994
+ md1: md1,
1995
+ md2: md2,
1996
+ md3: md3
1997
+ });
1553
1998
 
1554
1999
  // Utilities
1555
2000
 
@@ -2164,7 +2609,7 @@
2164
2609
  vue.provide(LocaleSymbol, data);
2165
2610
  return data;
2166
2611
  }
2167
- function genDefaults$3() {
2612
+ function genDefaults$2() {
2168
2613
  return {
2169
2614
  af: false,
2170
2615
  ar: true,
@@ -2211,7 +2656,7 @@
2211
2656
  };
2212
2657
  }
2213
2658
  function createRtl(i18n, options) {
2214
- const rtl = vue.ref(options?.rtl ?? genDefaults$3());
2659
+ const rtl = vue.ref(options?.rtl ?? genDefaults$2());
2215
2660
  const isRtl = vue.computed(() => rtl.value[i18n.current.value] ?? false);
2216
2661
  return {
2217
2662
  isRtl,
@@ -2244,7 +2689,7 @@
2244
2689
  const makeThemeProps = propsFactory({
2245
2690
  theme: String
2246
2691
  }, 'theme');
2247
- function genDefaults$2() {
2692
+ function genDefaults$1() {
2248
2693
  return {
2249
2694
  defaultTheme: 'light',
2250
2695
  variations: {
@@ -2331,8 +2776,8 @@
2331
2776
  };
2332
2777
  }
2333
2778
  function parseThemeOptions() {
2334
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$2();
2335
- const defaults = genDefaults$2();
2779
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$1();
2780
+ const defaults = genDefaults$1();
2336
2781
  if (!options) return {
2337
2782
  ...defaults,
2338
2783
  isDisabled: true
@@ -2386,7 +2831,7 @@
2386
2831
  const current = vue.computed(() => computedThemes.value[name.value]);
2387
2832
  const styles = vue.computed(() => {
2388
2833
  const lines = [];
2389
- if (current.value.dark) {
2834
+ if (current.value?.dark) {
2390
2835
  createCssClass(lines, ':root', ['color-scheme: dark']);
2391
2836
  }
2392
2837
  createCssClass(lines, ':root', genCssVariables(current.value));
@@ -4327,212 +4772,6 @@
4327
4772
  }
4328
4773
  });
4329
4774
 
4330
- // Composables
4331
-
4332
- // Types
4333
-
4334
- const aliases = {
4335
- collapse: 'mdi-chevron-up',
4336
- complete: 'mdi-check',
4337
- cancel: 'mdi-close-circle',
4338
- close: 'mdi-close',
4339
- delete: 'mdi-close-circle',
4340
- // delete (e.g. v-chip close)
4341
- clear: 'mdi-close-circle',
4342
- success: 'mdi-check-circle',
4343
- info: 'mdi-information',
4344
- warning: 'mdi-alert-circle',
4345
- error: 'mdi-close-circle',
4346
- prev: 'mdi-chevron-left',
4347
- next: 'mdi-chevron-right',
4348
- checkboxOn: 'mdi-checkbox-marked',
4349
- checkboxOff: 'mdi-checkbox-blank-outline',
4350
- checkboxIndeterminate: 'mdi-minus-box',
4351
- delimiter: 'mdi-circle',
4352
- // for carousel
4353
- sortAsc: 'mdi-arrow-up',
4354
- sortDesc: 'mdi-arrow-down',
4355
- expand: 'mdi-chevron-down',
4356
- menu: 'mdi-menu',
4357
- subgroup: 'mdi-menu-down',
4358
- dropdown: 'mdi-menu-down',
4359
- radioOn: 'mdi-radiobox-marked',
4360
- radioOff: 'mdi-radiobox-blank',
4361
- edit: 'mdi-pencil',
4362
- ratingEmpty: 'mdi-star-outline',
4363
- ratingFull: 'mdi-star',
4364
- ratingHalf: 'mdi-star-half-full',
4365
- loading: 'mdi-cached',
4366
- first: 'mdi-page-first',
4367
- last: 'mdi-page-last',
4368
- unfold: 'mdi-unfold-more-horizontal',
4369
- file: 'mdi-paperclip',
4370
- plus: 'mdi-plus',
4371
- minus: 'mdi-minus',
4372
- calendar: 'mdi-calendar',
4373
- treeviewCollapse: 'mdi-menu-down',
4374
- treeviewExpand: 'mdi-menu-right',
4375
- eyeDropper: 'mdi-eyedropper'
4376
- };
4377
- const mdi = {
4378
- // Not using mergeProps here, functional components merge props by default (?)
4379
- component: props => vue.h(VClassIcon, {
4380
- ...props,
4381
- class: 'mdi'
4382
- })
4383
- };
4384
-
4385
- // Types
4386
-
4387
- const IconValue = [String, Function, Object, Array];
4388
- const IconSymbol = Symbol.for('vuetify:icons');
4389
- const makeIconProps = propsFactory({
4390
- icon: {
4391
- type: IconValue
4392
- },
4393
- // Could not remove this and use makeTagProps, types complained because it is not required
4394
- tag: {
4395
- type: String,
4396
- required: true
4397
- }
4398
- }, 'icon');
4399
- const VComponentIcon = genericComponent()({
4400
- name: 'VComponentIcon',
4401
- props: makeIconProps(),
4402
- setup(props, _ref) {
4403
- let {
4404
- slots
4405
- } = _ref;
4406
- return () => {
4407
- const Icon = props.icon;
4408
- return vue.createVNode(props.tag, null, {
4409
- default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
4410
- });
4411
- };
4412
- }
4413
- });
4414
- const VSvgIcon = defineComponent({
4415
- name: 'VSvgIcon',
4416
- inheritAttrs: false,
4417
- props: makeIconProps(),
4418
- setup(props, _ref2) {
4419
- let {
4420
- attrs
4421
- } = _ref2;
4422
- return () => {
4423
- return vue.createVNode(props.tag, vue.mergeProps(attrs, {
4424
- "style": null
4425
- }), {
4426
- default: () => [vue.createVNode("svg", {
4427
- "class": "v-icon__svg",
4428
- "xmlns": "http://www.w3.org/2000/svg",
4429
- "viewBox": "0 0 24 24",
4430
- "role": "img",
4431
- "aria-hidden": "true"
4432
- }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4433
- "d": path[0],
4434
- "fill-opacity": path[1]
4435
- }, null) : vue.createVNode("path", {
4436
- "d": path
4437
- }, null)) : vue.createVNode("path", {
4438
- "d": props.icon
4439
- }, null)])]
4440
- });
4441
- };
4442
- }
4443
- });
4444
- const VLigatureIcon = defineComponent({
4445
- name: 'VLigatureIcon',
4446
- props: makeIconProps(),
4447
- setup(props) {
4448
- return () => {
4449
- return vue.createVNode(props.tag, null, {
4450
- default: () => [props.icon]
4451
- });
4452
- };
4453
- }
4454
- });
4455
- const VClassIcon = defineComponent({
4456
- name: 'VClassIcon',
4457
- props: makeIconProps(),
4458
- setup(props) {
4459
- return () => {
4460
- return vue.createVNode(props.tag, {
4461
- "class": props.icon
4462
- }, null);
4463
- };
4464
- }
4465
- });
4466
- function genDefaults$1() {
4467
- return {
4468
- svg: {
4469
- component: VSvgIcon
4470
- },
4471
- class: {
4472
- component: VClassIcon
4473
- }
4474
- };
4475
- }
4476
-
4477
- // Composables
4478
- function createIcons(options) {
4479
- const sets = genDefaults$1();
4480
- const defaultSet = options?.defaultSet ?? 'mdi';
4481
- if (defaultSet === 'mdi' && !sets.mdi) {
4482
- sets.mdi = mdi;
4483
- }
4484
- return mergeDeep({
4485
- defaultSet,
4486
- sets,
4487
- aliases: {
4488
- ...aliases,
4489
- /* eslint-disable max-len */
4490
- vuetify: ['M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z', ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6]],
4491
- 'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z'
4492
- /* eslint-enable max-len */
4493
- }
4494
- }, options);
4495
- }
4496
- const useIcon = props => {
4497
- const icons = vue.inject(IconSymbol);
4498
- if (!icons) throw new Error('Missing Vuetify Icons provide!');
4499
- const iconData = vue.computed(() => {
4500
- const iconAlias = vue.unref(props);
4501
- if (!iconAlias) return {
4502
- component: VComponentIcon
4503
- };
4504
- let icon = iconAlias;
4505
- if (typeof icon === 'string') {
4506
- icon = icon.trim();
4507
- if (icon.startsWith('$')) {
4508
- icon = icons.aliases?.[icon.slice(1)];
4509
- }
4510
- }
4511
- if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4512
- if (Array.isArray(icon)) {
4513
- return {
4514
- component: VSvgIcon,
4515
- icon
4516
- };
4517
- } else if (typeof icon !== 'string') {
4518
- return {
4519
- component: VComponentIcon,
4520
- icon
4521
- };
4522
- }
4523
- const iconSetName = Object.keys(icons.sets).find(setName => typeof icon === 'string' && icon.startsWith(`${setName}:`));
4524
- const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;
4525
- const iconSet = icons.sets[iconSetName ?? icons.defaultSet];
4526
- return {
4527
- component: iconSet.component,
4528
- icon: iconName
4529
- };
4530
- });
4531
- return {
4532
- iconData
4533
- };
4534
- };
4535
-
4536
4775
  // Utilities
4537
4776
 
4538
4777
  // Types
@@ -4566,6 +4805,7 @@
4566
4805
 
4567
4806
  const makeVIconProps = propsFactory({
4568
4807
  color: String,
4808
+ disabled: Boolean,
4569
4809
  start: Boolean,
4570
4810
  end: Boolean,
4571
4811
  icon: IconValue,
@@ -4603,11 +4843,13 @@
4603
4843
  if (slotValue) {
4604
4844
  slotIcon.value = flattenFragments(slotValue).filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]?.children;
4605
4845
  }
4846
+ const hasClick = !!(attrs.onClick || attrs.onClickOnce);
4606
4847
  return vue.createVNode(iconData.value.component, {
4607
4848
  "tag": props.tag,
4608
4849
  "icon": iconData.value.icon,
4609
4850
  "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
4610
- 'v-icon--clickable': !!attrs.onClick,
4851
+ 'v-icon--clickable': hasClick,
4852
+ 'v-icon--disabled': props.disabled,
4611
4853
  'v-icon--start': props.start,
4612
4854
  'v-icon--end': props.end
4613
4855
  }, props.class],
@@ -4616,8 +4858,9 @@
4616
4858
  height: convertToUnit(props.size),
4617
4859
  width: convertToUnit(props.size)
4618
4860
  } : undefined, textColorStyles.value, props.style],
4619
- "role": attrs.onClick ? 'button' : undefined,
4620
- "aria-hidden": !attrs.onClick
4861
+ "role": hasClick ? 'button' : undefined,
4862
+ "aria-hidden": !hasClick,
4863
+ "tabindex": hasClick ? props.disabled ? -1 : 0 : undefined
4621
4864
  }, {
4622
4865
  default: () => [slotValue]
4623
4866
  });
@@ -8614,9 +8857,9 @@
8614
8857
  emit('click', e);
8615
8858
  if (isGroupActivator || !isClickable.value) return;
8616
8859
  link.navigate?.(e);
8617
- if (root.activatable) {
8860
+ if (root.activatable.value) {
8618
8861
  activate(!isActivated.value, e);
8619
- } else if (root.selectable) {
8862
+ } else if (root.selectable.value) {
8620
8863
  select(!isSelected.value, e);
8621
8864
  } else if (props.value != null) {
8622
8865
  select(!isSelected.value, e);
@@ -9755,7 +9998,7 @@
9755
9998
  scope?.stop();
9756
9999
  if (!(data.isActive.value && props.scrollStrategy)) return;
9757
10000
  scope = vue.effectScope();
9758
- await vue.nextTick();
10001
+ await new Promise(resolve => setTimeout(resolve));
9759
10002
  scope.active && scope.run(() => {
9760
10003
  if (typeof props.scrollStrategy === 'function') {
9761
10004
  props.scrollStrategy(data, props, scope);
@@ -10504,6 +10747,7 @@
10504
10747
  if (v) isActive.value = false;
10505
10748
  });
10506
10749
  const root = vue.ref();
10750
+ const scrimEl = vue.ref();
10507
10751
  const contentEl = vue.ref();
10508
10752
  const {
10509
10753
  contentStyles,
@@ -10525,8 +10769,10 @@
10525
10769
  emit('click:outside', e);
10526
10770
  if (!props.persistent) isActive.value = false;else animateClick();
10527
10771
  }
10528
- function closeConditional() {
10529
- return isActive.value && globalTop.value;
10772
+ function closeConditional(e) {
10773
+ return isActive.value && globalTop.value && (
10774
+ // If using scrim, only close if clicking on it rather than anything opened on top
10775
+ !props.scrim || e.target === scrimEl.value);
10530
10776
  }
10531
10777
  IN_BROWSER && vue.watch(isActive, val => {
10532
10778
  if (val) {
@@ -10613,7 +10859,8 @@
10613
10859
  "ref": root
10614
10860
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
10615
10861
  "color": scrimColor,
10616
- "modelValue": isActive.value && !!props.scrim
10862
+ "modelValue": isActive.value && !!props.scrim,
10863
+ "ref": scrimEl
10617
10864
  }, scrimEvents.value), null), vue.createVNode(MaybeTransition, {
10618
10865
  "appear": true,
10619
10866
  "persisted": true,
@@ -10636,6 +10883,7 @@
10636
10883
  })]));
10637
10884
  return {
10638
10885
  activatorEl,
10886
+ scrimEl,
10639
10887
  target,
10640
10888
  animateClick,
10641
10889
  contentEl,
@@ -10831,6 +11079,9 @@
10831
11079
  isActive.value = false;
10832
11080
  overlay.value?.activatorEl?.focus();
10833
11081
  }
11082
+ } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11083
+ isActive.value = false;
11084
+ parent?.closeParents();
10834
11085
  }
10835
11086
  }
10836
11087
  function onActivatorKeydown(e) {
@@ -11108,7 +11359,7 @@
11108
11359
  }
11109
11360
  useRender(() => {
11110
11361
  const isOutlined = props.variant === 'outlined';
11111
- const hasPrepend = slots['prepend-inner'] || props.prependInnerIcon;
11362
+ const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon);
11112
11363
  const hasClear = !!(props.clearable || slots.clear);
11113
11364
  const hasAppend = !!(slots['append-inner'] || props.appendInnerIcon || hasClear);
11114
11365
  const label = () => slots.label ? slots.label({
@@ -12532,8 +12783,8 @@
12532
12783
  if (e.key === 'ArrowDown' && highlightFirst.value) {
12533
12784
  listRef.value?.focus('next');
12534
12785
  }
12535
- if (!props.multiple) return;
12536
12786
  if (['Backspace', 'Delete'].includes(e.key)) {
12787
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12537
12788
  if (selectionIndex.value < 0) {
12538
12789
  if (e.key === 'Backspace' && !search.value) {
12539
12790
  selectionIndex.value = length - 1;
@@ -12541,10 +12792,10 @@
12541
12792
  return;
12542
12793
  }
12543
12794
  const originalSelectionIndex = selectionIndex.value;
12544
- const selectedItem = model.value[selectionIndex.value];
12545
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12795
+ select(model.value[selectionIndex.value], false);
12546
12796
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12547
12797
  }
12798
+ if (!props.multiple) return;
12548
12799
  if (e.key === 'ArrowLeft') {
12549
12800
  if (selectionIndex.value < 0 && selectionStart > 0) return;
12550
12801
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -12597,7 +12848,7 @@
12597
12848
  /** @param set - null means toggle */
12598
12849
  function select(item) {
12599
12850
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12600
- if (item.props.disabled) return;
12851
+ if (!item || item.props.disabled) return;
12601
12852
  if (props.multiple) {
12602
12853
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12603
12854
  const add = set == null ? !~index : set;
@@ -16318,6 +16569,7 @@
16318
16569
  }
16319
16570
  menu.value = !menu.value;
16320
16571
  }
16572
+ // eslint-disable-next-line complexity
16321
16573
  function onKeydown(e) {
16322
16574
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
16323
16575
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -16344,8 +16596,8 @@
16344
16596
  select(transformItem$3(props, search.value));
16345
16597
  if (hasSelectionSlot.value) _search.value = '';
16346
16598
  }
16347
- if (!props.multiple) return;
16348
16599
  if (['Backspace', 'Delete'].includes(e.key)) {
16600
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16349
16601
  if (selectionIndex.value < 0) {
16350
16602
  if (e.key === 'Backspace' && !search.value) {
16351
16603
  selectionIndex.value = length - 1;
@@ -16353,10 +16605,10 @@
16353
16605
  return;
16354
16606
  }
16355
16607
  const originalSelectionIndex = selectionIndex.value;
16356
- const selectedItem = model.value[selectionIndex.value];
16357
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
16608
+ select(model.value[selectionIndex.value], false);
16358
16609
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16359
16610
  }
16611
+ if (!props.multiple) return;
16360
16612
  if (e.key === 'ArrowLeft') {
16361
16613
  if (selectionIndex.value < 0 && selectionStart > 0) return;
16362
16614
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -16387,7 +16639,7 @@
16387
16639
  /** @param set - null means toggle */
16388
16640
  function select(item) {
16389
16641
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16390
- if (item.props.disabled) return;
16642
+ if (!item || item.props.disabled) return;
16391
16643
  if (props.multiple) {
16392
16644
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16393
16645
  const add = set == null ? !~index : set;
@@ -17615,7 +17867,7 @@
17615
17867
  return d;
17616
17868
  }
17617
17869
  function startOfDay(date) {
17618
- return new Date(date.getFullYear(), date.getMonth(), date.getDate());
17870
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);
17619
17871
  }
17620
17872
  function endOfDay(date) {
17621
17873
  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
@@ -20768,6 +21020,12 @@
20768
21020
  const adapter = useDate();
20769
21021
  const rangeStart = vue.shallowRef();
20770
21022
  const rangeStop = vue.shallowRef();
21023
+ if (props.multiple === 'range' && model.value.length > 0) {
21024
+ rangeStart.value = model.value[0];
21025
+ if (model.value.length > 1) {
21026
+ rangeStop.value = model.value[model.value.length - 1];
21027
+ }
21028
+ }
20771
21029
  const atMax = vue.computed(() => {
20772
21030
  const max = ['number', 'string'].includes(typeof props.multiple) ? Number(props.multiple) : Infinity;
20773
21031
  return model.value.length >= max;
@@ -20778,15 +21036,15 @@
20778
21036
  rangeStart.value = _value;
20779
21037
  model.value = [rangeStart.value];
20780
21038
  } else if (!rangeStop.value) {
20781
- if (adapter.isSameDay(value, rangeStart.value)) {
21039
+ if (adapter.isSameDay(_value, rangeStart.value)) {
20782
21040
  rangeStart.value = undefined;
20783
21041
  model.value = [];
20784
21042
  return;
20785
- } else if (adapter.isBefore(value, rangeStart.value)) {
20786
- rangeStop.value = rangeStart.value;
21043
+ } else if (adapter.isBefore(_value, rangeStart.value)) {
21044
+ rangeStop.value = adapter.endOfDay(rangeStart.value);
20787
21045
  rangeStart.value = _value;
20788
21046
  } else {
20789
- rangeStop.value = _value;
21047
+ rangeStop.value = adapter.endOfDay(_value);
20790
21048
  }
20791
21049
  const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
20792
21050
  const datesInRange = [rangeStart.value];
@@ -22953,12 +23211,24 @@
22953
23211
  default: () => [hasImage && vue.createVNode("div", {
22954
23212
  "key": "image",
22955
23213
  "class": "v-navigation-drawer__img"
22956
- }, [slots.image ? slots.image?.({
22957
- image: props.image
22958
- }) : vue.createVNode("img", {
22959
- "src": props.image,
22960
- "alt": ""
22961
- }, null)]), slots.prepend && vue.createVNode("div", {
23214
+ }, [!slots.image ? vue.createVNode(VImg, {
23215
+ "key": "image-img",
23216
+ "alt": "",
23217
+ "cover": true,
23218
+ "height": "inherit",
23219
+ "src": props.image
23220
+ }, null) : vue.createVNode(VDefaultsProvider, {
23221
+ "key": "image-defaults",
23222
+ "disabled": !props.image,
23223
+ "defaults": {
23224
+ VImg: {
23225
+ alt: '',
23226
+ cover: true,
23227
+ height: 'inherit',
23228
+ src: props.image
23229
+ }
23230
+ }
23231
+ }, slots.image)]), slots.prepend && vue.createVNode("div", {
22962
23232
  "class": "v-navigation-drawer__prepend"
22963
23233
  }, [slots.prepend?.()]), vue.createVNode("div", {
22964
23234
  "class": "v-navigation-drawer__content"
@@ -23059,7 +23329,7 @@
23059
23329
  function onInput() {
23060
23330
  // The maxlength attribute doesn't work for the number type input, so the text type is used.
23061
23331
  // The following logic simulates the behavior of a number input.
23062
- if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
23332
+ if (isValidNumber(current.value.value)) {
23063
23333
  current.value.value = '';
23064
23334
  return;
23065
23335
  }
@@ -23105,7 +23375,9 @@
23105
23375
  function onPaste(index, e) {
23106
23376
  e.preventDefault();
23107
23377
  e.stopPropagation();
23108
- model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
23378
+ const clipboardText = e?.clipboardData?.getData('Text') ?? '';
23379
+ if (isValidNumber(clipboardText)) return;
23380
+ model.value = clipboardText.split('');
23109
23381
  inputRef.value?.[index].blur();
23110
23382
  }
23111
23383
  function reset() {
@@ -23119,6 +23391,9 @@
23119
23391
  blur();
23120
23392
  focusIndex.value = -1;
23121
23393
  }
23394
+ function isValidNumber(value) {
23395
+ return props.type === 'number' && /[^0-9]/g.test(value);
23396
+ }
23122
23397
  provideDefaults({
23123
23398
  VField: {
23124
23399
  color: vue.computed(() => props.color),
@@ -25977,7 +26252,7 @@
25977
26252
  goTo
25978
26253
  };
25979
26254
  }
25980
- const version$1 = "3.5.9";
26255
+ const version$1 = "3.5.11";
25981
26256
  createVuetify$1.version = version$1;
25982
26257
 
25983
26258
  // Vue's inject() can only be used in setup
@@ -26002,9 +26277,10 @@
26002
26277
  ...options
26003
26278
  });
26004
26279
  };
26005
- const version = "3.5.9";
26280
+ const version = "3.5.11";
26006
26281
  createVuetify.version = version;
26007
26282
 
26283
+ exports.blueprints = index;
26008
26284
  exports.components = components;
26009
26285
  exports.createVuetify = createVuetify;
26010
26286
  exports.directives = directives;