vuetify 3.5.8 → 3.5.10

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 (189) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +525 -13
  3. package/dist/json/importMap-labs.json +24 -8
  4. package/dist/json/importMap.json +130 -130
  5. package/dist/json/tags.json +148 -0
  6. package/dist/json/web-types.json +2021 -147
  7. package/dist/vuetify-labs.css +2819 -2760
  8. package/dist/vuetify-labs.d.ts +5860 -2816
  9. package/dist/vuetify-labs.esm.js +1286 -248
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1286 -247
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +553 -547
  14. package/dist/vuetify.d.ts +2835 -2281
  15. package/dist/vuetify.esm.js +883 -408
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +882 -406
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +1137 -1109
  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 +9 -7
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/index.d.mts +232 -100
  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/VColorPicker/VColorPickerPreview.css +1 -0
  40. package/lib/components/VColorPicker/VColorPickerPreview.sass +1 -0
  41. package/lib/components/VColorPicker/_variables.scss +1 -0
  42. package/lib/components/VCombobox/VCombobox.mjs +10 -7
  43. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  44. package/lib/components/VCombobox/index.d.mts +232 -100
  45. package/lib/components/VDataTable/index.d.mts +6 -6
  46. package/lib/components/VDatePicker/VDatePickerControls.mjs +1 -0
  47. package/lib/components/VDatePicker/VDatePickerControls.mjs.map +1 -1
  48. package/lib/components/VDatePicker/VDatePickerMonth.mjs +10 -4
  49. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  50. package/lib/components/VDatePicker/index.d.mts +10 -10
  51. package/lib/components/VDefaultsProvider/index.d.mts +8 -8
  52. package/lib/components/VDialog/index.d.mts +12 -6
  53. package/lib/components/VDivider/index.d.mts +8 -8
  54. package/lib/components/VExpansionPanel/index.d.mts +19 -19
  55. package/lib/components/VField/VField.css +2 -0
  56. package/lib/components/VField/VField.mjs +1 -1
  57. package/lib/components/VField/VField.mjs.map +1 -1
  58. package/lib/components/VField/VField.sass +2 -0
  59. package/lib/components/VField/index.d.mts +28 -28
  60. package/lib/components/VFileInput/index.d.mts +133 -133
  61. package/lib/components/VFooter/index.d.mts +8 -8
  62. package/lib/components/VGrid/index.d.mts +32 -32
  63. package/lib/components/VIcon/VIcon.css +4 -0
  64. package/lib/components/VIcon/VIcon.mjs +7 -3
  65. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  66. package/lib/components/VIcon/VIcon.sass +4 -0
  67. package/lib/components/VIcon/_variables.scss +1 -0
  68. package/lib/components/VIcon/index.d.mts +25 -16
  69. package/lib/components/VImg/index.d.mts +4 -4
  70. package/lib/components/VInput/index.d.mts +21 -21
  71. package/lib/components/VKbd/index.d.mts +8 -8
  72. package/lib/components/VLabel/index.d.mts +8 -8
  73. package/lib/components/VLayout/index.d.mts +16 -16
  74. package/lib/components/VLazy/index.d.mts +8 -8
  75. package/lib/components/VList/VList.mjs +8 -2
  76. package/lib/components/VList/VList.mjs.map +1 -1
  77. package/lib/components/VList/VListGroup.mjs +3 -1
  78. package/lib/components/VList/VListGroup.mjs.map +1 -1
  79. package/lib/components/VList/VListItem.mjs +17 -4
  80. package/lib/components/VList/VListItem.mjs.map +1 -1
  81. package/lib/components/VList/index.d.mts +156 -54
  82. package/lib/components/VLocaleProvider/index.d.mts +12 -12
  83. package/lib/components/VMain/index.d.mts +8 -8
  84. package/lib/components/VMenu/VMenu.mjs +3 -0
  85. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  86. package/lib/components/VMenu/index.d.mts +14 -8
  87. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +1 -1
  88. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +22 -8
  89. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  90. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +2 -1
  91. package/lib/components/VNavigationDrawer/index.d.mts +11 -11
  92. package/lib/components/VOtpInput/VOtpInput.mjs +7 -2
  93. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  94. package/lib/components/VOtpInput/index.d.mts +31 -31
  95. package/lib/components/VOverlay/VOverlay.mjs +8 -3
  96. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  97. package/lib/components/VOverlay/index.d.mts +3 -0
  98. package/lib/components/VOverlay/scrollStrategies.mjs +2 -2
  99. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  100. package/lib/components/VPagination/index.d.mts +7 -7
  101. package/lib/components/VProgressLinear/VProgressLinear.css +0 -1
  102. package/lib/components/VProgressLinear/VProgressLinear.sass +0 -1
  103. package/lib/components/VProgressLinear/index.d.mts +7 -7
  104. package/lib/components/VRadioGroup/index.d.mts +44 -44
  105. package/lib/components/VRangeSlider/index.d.mts +47 -47
  106. package/lib/components/VRating/index.d.mts +7 -7
  107. package/lib/components/VResponsive/index.d.mts +8 -8
  108. package/lib/components/VSelect/VSelect.mjs +5 -3
  109. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  110. package/lib/components/VSelect/index.d.mts +232 -100
  111. package/lib/components/VSheet/index.d.mts +8 -8
  112. package/lib/components/VSkeletonLoader/index.d.mts +8 -8
  113. package/lib/components/VSlider/index.d.mts +47 -47
  114. package/lib/components/VSnackbar/index.d.mts +25 -19
  115. package/lib/components/VStepper/index.d.mts +41 -41
  116. package/lib/components/VSwitch/index.d.mts +39 -39
  117. package/lib/components/VSystemBar/index.d.mts +8 -8
  118. package/lib/components/VTabs/index.d.mts +15 -15
  119. package/lib/components/VTextField/index.d.mts +173 -173
  120. package/lib/components/VTextarea/index.d.mts +119 -119
  121. package/lib/components/VThemeProvider/index.d.mts +8 -8
  122. package/lib/components/VTimeline/index.d.mts +8 -8
  123. package/lib/components/VToolbar/index.d.mts +8 -8
  124. package/lib/components/VTooltip/index.d.mts +14 -8
  125. package/lib/components/VWindow/index.d.mts +10 -10
  126. package/lib/components/index.d.mts +2478 -1943
  127. package/lib/components/transitions/index.d.mts +128 -128
  128. package/lib/composables/date/adapters/vuetify.mjs +1 -1
  129. package/lib/composables/date/adapters/vuetify.mjs.map +1 -1
  130. package/lib/composables/nested/activeStrategies.mjs +121 -0
  131. package/lib/composables/nested/activeStrategies.mjs.map +1 -0
  132. package/lib/composables/nested/nested.mjs +50 -1
  133. package/lib/composables/nested/nested.mjs.map +1 -1
  134. package/lib/composables/nested/selectStrategies.mjs +4 -2
  135. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  136. package/lib/composables/theme.mjs +1 -1
  137. package/lib/composables/theme.mjs.map +1 -1
  138. package/lib/entry-bundler.mjs +3 -2
  139. package/lib/entry-bundler.mjs.map +1 -1
  140. package/lib/framework.mjs +1 -1
  141. package/lib/framework.mjs.map +1 -1
  142. package/lib/iconsets/fa.mjs +2 -0
  143. package/lib/iconsets/fa.mjs.map +1 -1
  144. package/lib/iconsets/fa4.mjs +2 -0
  145. package/lib/iconsets/fa4.mjs.map +1 -1
  146. package/lib/iconsets/md.mjs +2 -0
  147. package/lib/iconsets/md.mjs.map +1 -1
  148. package/lib/iconsets/mdi-svg.mjs +2 -0
  149. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  150. package/lib/iconsets/mdi.mjs +2 -0
  151. package/lib/iconsets/mdi.mjs.map +1 -1
  152. package/lib/index.d.mts +48 -44
  153. package/lib/labs/VCalendar/index.d.mts +32 -32
  154. package/lib/labs/VFab/index.d.mts +15 -15
  155. package/lib/labs/VNumberInput/VNumberInput.css +38 -0
  156. package/lib/labs/VNumberInput/VNumberInput.mjs +209 -0
  157. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -0
  158. package/lib/labs/VNumberInput/VNumberInput.sass +47 -0
  159. package/lib/labs/VNumberInput/_variables.scss +1 -0
  160. package/lib/labs/VNumberInput/index.d.mts +607 -0
  161. package/lib/labs/VNumberInput/index.mjs +2 -0
  162. package/lib/labs/VNumberInput/index.mjs.map +1 -0
  163. package/lib/labs/VPicker/index.d.mts +8 -8
  164. package/lib/labs/VSparkline/index.d.mts +7 -7
  165. package/lib/labs/VSpeedDial/VSpeedDial.mjs +9 -5
  166. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -1
  167. package/lib/labs/VSpeedDial/index.d.mts +120 -24
  168. package/lib/labs/VTreeview/VTreeview.mjs +154 -0
  169. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -0
  170. package/lib/labs/VTreeview/VTreeviewChildren.mjs +98 -0
  171. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -0
  172. package/lib/labs/VTreeview/VTreeviewGroup.mjs +48 -0
  173. package/lib/labs/VTreeview/VTreeviewGroup.mjs.map +1 -0
  174. package/lib/labs/VTreeview/VTreeviewItem.css +17 -0
  175. package/lib/labs/VTreeview/VTreeviewItem.mjs +86 -0
  176. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -0
  177. package/lib/labs/VTreeview/VTreeviewItem.sass +19 -0
  178. package/lib/labs/VTreeview/index.d.mts +1975 -0
  179. package/lib/labs/VTreeview/index.mjs +4 -0
  180. package/lib/labs/VTreeview/index.mjs.map +1 -0
  181. package/lib/labs/VTreeview/shared.mjs +4 -0
  182. package/lib/labs/VTreeview/shared.mjs.map +1 -0
  183. package/lib/labs/VTreeview/variables.scss +8 -0
  184. package/lib/labs/components.d.mts +4553 -1925
  185. package/lib/labs/components.mjs +4 -2
  186. package/lib/labs/components.mjs.map +1 -1
  187. package/lib/locale/no.mjs +1 -1
  188. package/lib/locale/no.mjs.map +1 -1
  189. package/package.json +2 -2
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.8
2
+ * Vuetify v3.5.10
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));
@@ -4256,280 +4701,76 @@
4256
4701
  }
4257
4702
  function getIds(items, modelValue) {
4258
4703
  const ids = [];
4259
- modelValue.forEach(value => {
4260
- const item = items.find(item => deepEqual(value, item.value));
4261
- const itemByIndex = items[value];
4262
- if (item?.value != null) {
4263
- ids.push(item.id);
4264
- } else if (itemByIndex != null) {
4265
- ids.push(itemByIndex.id);
4266
- }
4267
- });
4268
- return ids;
4269
- }
4270
- function getValues(items, ids) {
4271
- const values = [];
4272
- ids.forEach(id => {
4273
- const itemIndex = items.findIndex(item => item.id === id);
4274
- if (~itemIndex) {
4275
- const item = items[itemIndex];
4276
- values.push(item.value != null ? item.value : itemIndex);
4277
- }
4278
- });
4279
- return values;
4280
- }
4281
-
4282
- // Types
4283
-
4284
- const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
4285
- const makeVBtnToggleProps = propsFactory({
4286
- ...makeVBtnGroupProps(),
4287
- ...makeGroupProps()
4288
- }, 'VBtnToggle');
4289
- const VBtnToggle = genericComponent()({
4290
- name: 'VBtnToggle',
4291
- props: makeVBtnToggleProps(),
4292
- emits: {
4293
- 'update:modelValue': value => true
4294
- },
4295
- setup(props, _ref) {
4296
- let {
4297
- slots
4298
- } = _ref;
4299
- const {
4300
- isSelected,
4301
- next,
4302
- prev,
4303
- select,
4304
- selected
4305
- } = useGroup(props, VBtnToggleSymbol);
4306
- useRender(() => {
4307
- const btnGroupProps = VBtnGroup.filterProps(props);
4308
- return vue.createVNode(VBtnGroup, vue.mergeProps({
4309
- "class": ['v-btn-toggle', props.class]
4310
- }, btnGroupProps, {
4311
- "style": props.style
4312
- }), {
4313
- default: () => [slots.default?.({
4314
- isSelected,
4315
- next,
4316
- prev,
4317
- select,
4318
- selected
4319
- })]
4320
- });
4321
- });
4322
- return {
4323
- next,
4324
- prev,
4325
- select
4326
- };
4327
- }
4328
- });
4329
-
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
- eyeDropper: 'mdi-eyedropper'
4374
- };
4375
- const mdi = {
4376
- // Not using mergeProps here, functional components merge props by default (?)
4377
- component: props => vue.h(VClassIcon, {
4378
- ...props,
4379
- class: 'mdi'
4380
- })
4381
- };
4382
-
4383
- // Types
4384
-
4385
- const IconValue = [String, Function, Object, Array];
4386
- const IconSymbol = Symbol.for('vuetify:icons');
4387
- const makeIconProps = propsFactory({
4388
- icon: {
4389
- type: IconValue
4390
- },
4391
- // Could not remove this and use makeTagProps, types complained because it is not required
4392
- tag: {
4393
- type: String,
4394
- required: true
4395
- }
4396
- }, 'icon');
4397
- const VComponentIcon = genericComponent()({
4398
- name: 'VComponentIcon',
4399
- props: makeIconProps(),
4400
- setup(props, _ref) {
4401
- let {
4402
- slots
4403
- } = _ref;
4404
- return () => {
4405
- const Icon = props.icon;
4406
- return vue.createVNode(props.tag, null, {
4407
- default: () => [props.icon ? vue.createVNode(Icon, null, null) : slots.default?.()]
4408
- });
4409
- };
4410
- }
4411
- });
4412
- const VSvgIcon = defineComponent({
4413
- name: 'VSvgIcon',
4414
- inheritAttrs: false,
4415
- props: makeIconProps(),
4416
- setup(props, _ref2) {
4417
- let {
4418
- attrs
4419
- } = _ref2;
4420
- return () => {
4421
- return vue.createVNode(props.tag, vue.mergeProps(attrs, {
4422
- "style": null
4423
- }), {
4424
- default: () => [vue.createVNode("svg", {
4425
- "class": "v-icon__svg",
4426
- "xmlns": "http://www.w3.org/2000/svg",
4427
- "viewBox": "0 0 24 24",
4428
- "role": "img",
4429
- "aria-hidden": "true"
4430
- }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? vue.createVNode("path", {
4431
- "d": path[0],
4432
- "fill-opacity": path[1]
4433
- }, null) : vue.createVNode("path", {
4434
- "d": path
4435
- }, null)) : vue.createVNode("path", {
4436
- "d": props.icon
4437
- }, null)])]
4438
- });
4439
- };
4440
- }
4441
- });
4442
- const VLigatureIcon = defineComponent({
4443
- name: 'VLigatureIcon',
4444
- props: makeIconProps(),
4445
- setup(props) {
4446
- return () => {
4447
- return vue.createVNode(props.tag, null, {
4448
- default: () => [props.icon]
4449
- });
4450
- };
4451
- }
4452
- });
4453
- const VClassIcon = defineComponent({
4454
- name: 'VClassIcon',
4455
- props: makeIconProps(),
4456
- setup(props) {
4457
- return () => {
4458
- return vue.createVNode(props.tag, {
4459
- "class": props.icon
4460
- }, null);
4461
- };
4462
- }
4463
- });
4464
- function genDefaults$1() {
4465
- return {
4466
- svg: {
4467
- component: VSvgIcon
4468
- },
4469
- class: {
4470
- component: VClassIcon
4471
- }
4472
- };
4473
- }
4474
-
4475
- // Composables
4476
- function createIcons(options) {
4477
- const sets = genDefaults$1();
4478
- const defaultSet = options?.defaultSet ?? 'mdi';
4479
- if (defaultSet === 'mdi' && !sets.mdi) {
4480
- sets.mdi = mdi;
4481
- }
4482
- return mergeDeep({
4483
- defaultSet,
4484
- sets,
4485
- aliases: {
4486
- ...aliases,
4487
- /* eslint-disable max-len */
4488
- 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]],
4489
- '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'
4490
- /* eslint-enable max-len */
4704
+ modelValue.forEach(value => {
4705
+ const item = items.find(item => deepEqual(value, item.value));
4706
+ const itemByIndex = items[value];
4707
+ if (item?.value != null) {
4708
+ ids.push(item.id);
4709
+ } else if (itemByIndex != null) {
4710
+ ids.push(itemByIndex.id);
4491
4711
  }
4492
- }, options);
4712
+ });
4713
+ return ids;
4493
4714
  }
4494
- const useIcon = props => {
4495
- const icons = vue.inject(IconSymbol);
4496
- if (!icons) throw new Error('Missing Vuetify Icons provide!');
4497
- const iconData = vue.computed(() => {
4498
- const iconAlias = vue.unref(props);
4499
- if (!iconAlias) return {
4500
- component: VComponentIcon
4501
- };
4502
- let icon = iconAlias;
4503
- if (typeof icon === 'string') {
4504
- icon = icon.trim();
4505
- if (icon.startsWith('$')) {
4506
- icon = icons.aliases?.[icon.slice(1)];
4507
- }
4508
- }
4509
- if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4510
- if (Array.isArray(icon)) {
4511
- return {
4512
- component: VSvgIcon,
4513
- icon
4514
- };
4515
- } else if (typeof icon !== 'string') {
4516
- return {
4517
- component: VComponentIcon,
4518
- icon
4519
- };
4715
+ function getValues(items, ids) {
4716
+ const values = [];
4717
+ ids.forEach(id => {
4718
+ const itemIndex = items.findIndex(item => item.id === id);
4719
+ if (~itemIndex) {
4720
+ const item = items[itemIndex];
4721
+ values.push(item.value != null ? item.value : itemIndex);
4520
4722
  }
4521
- const iconSetName = Object.keys(icons.sets).find(setName => typeof icon === 'string' && icon.startsWith(`${setName}:`));
4522
- const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;
4523
- const iconSet = icons.sets[iconSetName ?? icons.defaultSet];
4723
+ });
4724
+ return values;
4725
+ }
4726
+
4727
+ // Types
4728
+
4729
+ const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
4730
+ const makeVBtnToggleProps = propsFactory({
4731
+ ...makeVBtnGroupProps(),
4732
+ ...makeGroupProps()
4733
+ }, 'VBtnToggle');
4734
+ const VBtnToggle = genericComponent()({
4735
+ name: 'VBtnToggle',
4736
+ props: makeVBtnToggleProps(),
4737
+ emits: {
4738
+ 'update:modelValue': value => true
4739
+ },
4740
+ setup(props, _ref) {
4741
+ let {
4742
+ slots
4743
+ } = _ref;
4744
+ const {
4745
+ isSelected,
4746
+ next,
4747
+ prev,
4748
+ select,
4749
+ selected
4750
+ } = useGroup(props, VBtnToggleSymbol);
4751
+ useRender(() => {
4752
+ const btnGroupProps = VBtnGroup.filterProps(props);
4753
+ return vue.createVNode(VBtnGroup, vue.mergeProps({
4754
+ "class": ['v-btn-toggle', props.class]
4755
+ }, btnGroupProps, {
4756
+ "style": props.style
4757
+ }), {
4758
+ default: () => [slots.default?.({
4759
+ isSelected,
4760
+ next,
4761
+ prev,
4762
+ select,
4763
+ selected
4764
+ })]
4765
+ });
4766
+ });
4524
4767
  return {
4525
- component: iconSet.component,
4526
- icon: iconName
4768
+ next,
4769
+ prev,
4770
+ select
4527
4771
  };
4528
- });
4529
- return {
4530
- iconData
4531
- };
4532
- };
4772
+ }
4773
+ });
4533
4774
 
4534
4775
  // Utilities
4535
4776
 
@@ -4564,6 +4805,7 @@
4564
4805
 
4565
4806
  const makeVIconProps = propsFactory({
4566
4807
  color: String,
4808
+ disabled: Boolean,
4567
4809
  start: Boolean,
4568
4810
  end: Boolean,
4569
4811
  icon: IconValue,
@@ -4601,11 +4843,13 @@
4601
4843
  if (slotValue) {
4602
4844
  slotIcon.value = flattenFragments(slotValue).filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]?.children;
4603
4845
  }
4846
+ const hasClick = !!(attrs.onClick || attrs.onClickOnce);
4604
4847
  return vue.createVNode(iconData.value.component, {
4605
4848
  "tag": props.tag,
4606
4849
  "icon": iconData.value.icon,
4607
4850
  "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
4608
- 'v-icon--clickable': !!attrs.onClick,
4851
+ 'v-icon--clickable': hasClick,
4852
+ 'v-icon--disabled': props.disabled,
4609
4853
  'v-icon--start': props.start,
4610
4854
  'v-icon--end': props.end
4611
4855
  }, props.class],
@@ -4614,8 +4858,9 @@
4614
4858
  height: convertToUnit(props.size),
4615
4859
  width: convertToUnit(props.size)
4616
4860
  } : undefined, textColorStyles.value, props.style],
4617
- "role": attrs.onClick ? 'button' : undefined,
4618
- "aria-hidden": !attrs.onClick
4861
+ "role": hasClick ? 'button' : undefined,
4862
+ "aria-hidden": !hasClick,
4863
+ "tabindex": hasClick ? props.disabled ? -1 : 0 : undefined
4619
4864
  }, {
4620
4865
  default: () => [slotValue]
4621
4866
  });
@@ -7756,6 +8001,126 @@
7756
8001
  return vue.inject(ListKey, null);
7757
8002
  }
7758
8003
 
8004
+ /* eslint-disable sonarjs/no-identical-functions */
8005
+ // Utilities
8006
+ const independentActiveStrategy = mandatory => {
8007
+ const strategy = {
8008
+ activate: _ref => {
8009
+ let {
8010
+ id,
8011
+ value,
8012
+ activated
8013
+ } = _ref;
8014
+ id = vue.toRaw(id);
8015
+
8016
+ // When mandatory and we're trying to deselect when id
8017
+ // is the only currently selected item then do nothing
8018
+ if (mandatory && !value && activated.size === 1 && activated.has(id)) return activated;
8019
+ if (value) {
8020
+ activated.add(id);
8021
+ } else {
8022
+ activated.delete(id);
8023
+ }
8024
+ return activated;
8025
+ },
8026
+ in: (v, children, parents) => {
8027
+ let set = new Set();
8028
+ for (const id of v || []) {
8029
+ set = strategy.activate({
8030
+ id,
8031
+ value: true,
8032
+ activated: new Set(set),
8033
+ children,
8034
+ parents
8035
+ });
8036
+ }
8037
+ return set;
8038
+ },
8039
+ out: v => {
8040
+ return Array.from(v);
8041
+ }
8042
+ };
8043
+ return strategy;
8044
+ };
8045
+ const independentSingleActiveStrategy = mandatory => {
8046
+ const parentStrategy = independentActiveStrategy(mandatory);
8047
+ const strategy = {
8048
+ activate: _ref2 => {
8049
+ let {
8050
+ activated,
8051
+ id,
8052
+ ...rest
8053
+ } = _ref2;
8054
+ id = vue.toRaw(id);
8055
+ const singleSelected = activated.has(id) ? new Set([id]) : new Set();
8056
+ return parentStrategy.activate({
8057
+ ...rest,
8058
+ id,
8059
+ activated: singleSelected
8060
+ });
8061
+ },
8062
+ in: (v, children, parents) => {
8063
+ let set = new Set();
8064
+ if (v?.length) {
8065
+ set = parentStrategy.in(v.slice(0, 1), children, parents);
8066
+ }
8067
+ return set;
8068
+ },
8069
+ out: (v, children, parents) => {
8070
+ return parentStrategy.out(v, children, parents);
8071
+ }
8072
+ };
8073
+ return strategy;
8074
+ };
8075
+ const leafActiveStrategy = mandatory => {
8076
+ const parentStrategy = independentActiveStrategy(mandatory);
8077
+ const strategy = {
8078
+ activate: _ref3 => {
8079
+ let {
8080
+ id,
8081
+ activated,
8082
+ children,
8083
+ ...rest
8084
+ } = _ref3;
8085
+ id = vue.toRaw(id);
8086
+ if (children.has(id)) return activated;
8087
+ return parentStrategy.activate({
8088
+ id,
8089
+ activated,
8090
+ children,
8091
+ ...rest
8092
+ });
8093
+ },
8094
+ in: parentStrategy.in,
8095
+ out: parentStrategy.out
8096
+ };
8097
+ return strategy;
8098
+ };
8099
+ const leafSingleActiveStrategy = mandatory => {
8100
+ const parentStrategy = independentSingleActiveStrategy(mandatory);
8101
+ const strategy = {
8102
+ activate: _ref4 => {
8103
+ let {
8104
+ id,
8105
+ activated,
8106
+ children,
8107
+ ...rest
8108
+ } = _ref4;
8109
+ id = vue.toRaw(id);
8110
+ if (children.has(id)) return activated;
8111
+ return parentStrategy.activate({
8112
+ id,
8113
+ activated,
8114
+ children,
8115
+ ...rest
8116
+ });
8117
+ },
8118
+ in: parentStrategy.in,
8119
+ out: parentStrategy.out
8120
+ };
8121
+ return strategy;
8122
+ };
8123
+
7759
8124
  const singleOpenStrategy = {
7760
8125
  open: _ref => {
7761
8126
  let {
@@ -7840,7 +8205,8 @@
7840
8205
  if (mandatory && !value) {
7841
8206
  const on = Array.from(selected.entries()).reduce((arr, _ref2) => {
7842
8207
  let [key, value] = _ref2;
7843
- return value === 'on' ? [...arr, key] : arr;
8208
+ if (value === 'on') arr.push(key);
8209
+ return arr;
7844
8210
  }, []);
7845
8211
  if (on.length === 1 && on[0] === id) return selected;
7846
8212
  }
@@ -7982,7 +8348,8 @@
7982
8348
  if (mandatory && !value) {
7983
8349
  const on = Array.from(selected.entries()).reduce((arr, _ref7) => {
7984
8350
  let [key, value] = _ref7;
7985
- return value === 'on' ? [...arr, key] : arr;
8351
+ if (value === 'on') arr.push(key);
8352
+ return arr;
7986
8353
  }, []);
7987
8354
  if (on.length === 0) return original;
7988
8355
  }
@@ -8026,16 +8393,24 @@
8026
8393
  children: vue.ref(new Map()),
8027
8394
  open: () => null,
8028
8395
  openOnSelect: () => null,
8396
+ activate: () => null,
8029
8397
  select: () => null,
8398
+ activatable: vue.ref(false),
8399
+ selectable: vue.ref(false),
8030
8400
  opened: vue.ref(new Set()),
8401
+ activated: vue.ref(new Set()),
8031
8402
  selected: vue.ref(new Map()),
8032
8403
  selectedValues: vue.ref([])
8033
8404
  }
8034
8405
  };
8035
8406
  const makeNestedProps = propsFactory({
8407
+ activatable: Boolean,
8408
+ selectable: Boolean,
8409
+ activeStrategy: [String, Function],
8036
8410
  selectStrategy: [String, Function],
8037
8411
  openStrategy: [String, Object],
8038
8412
  opened: Array,
8413
+ activated: Array,
8039
8414
  selected: Array,
8040
8415
  mandatory: Boolean
8041
8416
  }, 'nested');
@@ -8044,6 +8419,20 @@
8044
8419
  const children = vue.ref(new Map());
8045
8420
  const parents = vue.ref(new Map());
8046
8421
  const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
8422
+ const activeStrategy = vue.computed(() => {
8423
+ if (typeof props.activeStrategy === 'object') return props.activeStrategy;
8424
+ switch (props.activeStrategy) {
8425
+ case 'leaf':
8426
+ return leafActiveStrategy(props.mandatory);
8427
+ case 'single-leaf':
8428
+ return leafSingleActiveStrategy(props.mandatory);
8429
+ case 'independent':
8430
+ return independentActiveStrategy(props.mandatory);
8431
+ case 'single-independent':
8432
+ default:
8433
+ return independentSingleActiveStrategy(props.mandatory);
8434
+ }
8435
+ });
8047
8436
  const selectStrategy = vue.computed(() => {
8048
8437
  if (typeof props.selectStrategy === 'object') return props.selectStrategy;
8049
8438
  switch (props.selectStrategy) {
@@ -8072,6 +8461,7 @@
8072
8461
  return multipleOpenStrategy;
8073
8462
  }
8074
8463
  });
8464
+ const activated = useProxiedModel(props, 'activated', props.activated, v => activeStrategy.value.in(v, children.value, parents.value), v => activeStrategy.value.out(v, children.value, parents.value));
8075
8465
  const selected = useProxiedModel(props, 'selected', props.selected, v => selectStrategy.value.in(v, children.value, parents.value), v => selectStrategy.value.out(v, children.value, parents.value));
8076
8466
  vue.onBeforeUnmount(() => {
8077
8467
  isUnmounted = true;
@@ -8090,6 +8480,9 @@
8090
8480
  id: vue.shallowRef(),
8091
8481
  root: {
8092
8482
  opened,
8483
+ activatable: vue.toRef(props, 'activatable'),
8484
+ selectable: vue.toRef(props, 'selectable'),
8485
+ activated,
8093
8486
  selected,
8094
8487
  selectedValues: vue.computed(() => {
8095
8488
  const arr = [];
@@ -8163,6 +8556,26 @@
8163
8556
  newSelected && (selected.value = newSelected);
8164
8557
  nested.root.openOnSelect(id, value, event);
8165
8558
  },
8559
+ activate: (id, value, event) => {
8560
+ if (!props.activatable) {
8561
+ return nested.root.select(id, true, event);
8562
+ }
8563
+ vm.emit('click:activate', {
8564
+ id,
8565
+ value,
8566
+ path: getPath(id),
8567
+ event
8568
+ });
8569
+ const newActivated = activeStrategy.value.activate({
8570
+ id,
8571
+ value,
8572
+ activated: new Set(activated.value),
8573
+ children: children.value,
8574
+ parents: parents.value,
8575
+ event
8576
+ });
8577
+ newActivated && (activated.value = newActivated);
8578
+ },
8166
8579
  children,
8167
8580
  parents
8168
8581
  }
@@ -8181,6 +8594,8 @@
8181
8594
  openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
8182
8595
  isOpen: vue.computed(() => parent.root.opened.value.has(computedId.value)),
8183
8596
  parent: vue.computed(() => parent.root.parents.value.get(computedId.value)),
8597
+ activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
8598
+ isActivated: vue.computed(() => parent.root.activated.value.has(vue.toRaw(computedId.value))),
8184
8599
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
8185
8600
  isSelected: vue.computed(() => parent.root.selected.value.get(vue.toRaw(computedId.value)) === 'on'),
8186
8601
  isIndeterminate: vue.computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
@@ -8303,7 +8718,9 @@
8303
8718
  }, [slots.default?.()]), [[vue.vShow, isOpen.value]])]
8304
8719
  })]
8305
8720
  }));
8306
- return {};
8721
+ return {
8722
+ isOpen
8723
+ };
8307
8724
  }
8308
8725
  });
8309
8726
 
@@ -8376,6 +8793,8 @@
8376
8793
  const link = useLink(props, attrs);
8377
8794
  const id = vue.computed(() => props.value === undefined ? link.href.value : props.value);
8378
8795
  const {
8796
+ activate,
8797
+ isActivated,
8379
8798
  select,
8380
8799
  isSelected,
8381
8800
  isIndeterminate,
@@ -8385,9 +8804,9 @@
8385
8804
  openOnSelect
8386
8805
  } = useNestedItem(id, false);
8387
8806
  const list = useList();
8388
- const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || isSelected.value));
8807
+ const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));
8389
8808
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
8390
- const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!list));
8809
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || !!list && (root.selectable.value || root.activatable.value || props.value != null)));
8391
8810
  const roundedProps = vue.computed(() => props.rounded || props.nav);
8392
8811
  const color = vue.computed(() => props.color ?? props.activeColor);
8393
8812
  const variantProps = vue.computed(() => ({
@@ -8438,7 +8857,13 @@
8438
8857
  emit('click', e);
8439
8858
  if (isGroupActivator || !isClickable.value) return;
8440
8859
  link.navigate?.(e);
8441
- props.value != null && select(!isSelected.value, e);
8860
+ if (root.activatable.value) {
8861
+ activate(!isActivated.value, e);
8862
+ } else if (root.selectable.value) {
8863
+ select(!isSelected.value, e);
8864
+ } else if (props.value != null) {
8865
+ select(!isSelected.value, e);
8866
+ }
8442
8867
  }
8443
8868
  function onKeyDown(e) {
8444
8869
  if (e.key === 'Enter' || e.key === ' ') {
@@ -8554,7 +8979,12 @@
8554
8979
  }, null)])]
8555
8980
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
8556
8981
  });
8557
- return {};
8982
+ return {
8983
+ isGroupActivator,
8984
+ isSelected,
8985
+ list,
8986
+ select
8987
+ };
8558
8988
  }
8559
8989
  });
8560
8990
 
@@ -8896,8 +9326,10 @@
8896
9326
  props: makeVListProps(),
8897
9327
  emits: {
8898
9328
  'update:selected': value => true,
9329
+ 'update:activated': value => true,
8899
9330
  'update:opened': value => true,
8900
9331
  'click:open': value => true,
9332
+ 'click:activate': value => true,
8901
9333
  'click:select': value => true
8902
9334
  },
8903
9335
  setup(props, _ref) {
@@ -8930,7 +9362,9 @@
8930
9362
  roundedClasses
8931
9363
  } = useRounded(props);
8932
9364
  const {
9365
+ children,
8933
9366
  open,
9367
+ parents,
8934
9368
  select
8935
9369
  } = useNested(props);
8936
9370
  const lineClasses = vue.computed(() => props.lines ? `v-list--${props.lines}-line` : undefined);
@@ -9020,7 +9454,9 @@
9020
9454
  return {
9021
9455
  open,
9022
9456
  select,
9023
- focus
9457
+ focus,
9458
+ children,
9459
+ parents
9024
9460
  };
9025
9461
  }
9026
9462
  });
@@ -9562,7 +9998,7 @@
9562
9998
  scope?.stop();
9563
9999
  if (!(data.isActive.value && props.scrollStrategy)) return;
9564
10000
  scope = vue.effectScope();
9565
- await vue.nextTick();
10001
+ await new Promise(resolve => setTimeout(resolve));
9566
10002
  scope.active && scope.run(() => {
9567
10003
  if (typeof props.scrollStrategy === 'function') {
9568
10004
  props.scrollStrategy(data, props, scope);
@@ -10311,6 +10747,7 @@
10311
10747
  if (v) isActive.value = false;
10312
10748
  });
10313
10749
  const root = vue.ref();
10750
+ const scrimEl = vue.ref();
10314
10751
  const contentEl = vue.ref();
10315
10752
  const {
10316
10753
  contentStyles,
@@ -10332,8 +10769,10 @@
10332
10769
  emit('click:outside', e);
10333
10770
  if (!props.persistent) isActive.value = false;else animateClick();
10334
10771
  }
10335
- function closeConditional() {
10336
- 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);
10337
10776
  }
10338
10777
  IN_BROWSER && vue.watch(isActive, val => {
10339
10778
  if (val) {
@@ -10420,7 +10859,8 @@
10420
10859
  "ref": root
10421
10860
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
10422
10861
  "color": scrimColor,
10423
- "modelValue": isActive.value && !!props.scrim
10862
+ "modelValue": isActive.value && !!props.scrim,
10863
+ "ref": scrimEl
10424
10864
  }, scrimEvents.value), null), vue.createVNode(MaybeTransition, {
10425
10865
  "appear": true,
10426
10866
  "persisted": true,
@@ -10443,6 +10883,7 @@
10443
10883
  })]));
10444
10884
  return {
10445
10885
  activatorEl,
10886
+ scrimEl,
10446
10887
  target,
10447
10888
  animateClick,
10448
10889
  contentEl,
@@ -10638,6 +11079,9 @@
10638
11079
  isActive.value = false;
10639
11080
  overlay.value?.activatorEl?.focus();
10640
11081
  }
11082
+ } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11083
+ isActive.value = false;
11084
+ parent?.closeParents();
10641
11085
  }
10642
11086
  }
10643
11087
  function onActivatorKeydown(e) {
@@ -10915,7 +11359,7 @@
10915
11359
  }
10916
11360
  useRender(() => {
10917
11361
  const isOutlined = props.variant === 'outlined';
10918
- const hasPrepend = slots['prepend-inner'] || props.prependInnerIcon;
11362
+ const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon);
10919
11363
  const hasClear = !!(props.clearable || slots.clear);
10920
11364
  const hasAppend = !!(slots['append-inner'] || props.appendInnerIcon || hasClear);
10921
11365
  const label = () => slots.label ? slots.label({
@@ -11900,9 +12344,11 @@
11900
12344
  });
11901
12345
  }
11902
12346
  });
11903
- vue.watch(() => props.items, val => {
11904
- if (!isFocused.value || !val.length || menu.value) return;
11905
- menu.value = true;
12347
+ vue.watch(() => props.items, (newVal, oldVal) => {
12348
+ if (menu.value) return;
12349
+ if (isFocused.value && !oldVal.length && newVal.length) {
12350
+ menu.value = true;
12351
+ }
11906
12352
  });
11907
12353
  useRender(() => {
11908
12354
  const hasChips = !!(props.chips || slots.chip);
@@ -12337,8 +12783,8 @@
12337
12783
  if (e.key === 'ArrowDown' && highlightFirst.value) {
12338
12784
  listRef.value?.focus('next');
12339
12785
  }
12340
- if (!props.multiple) return;
12341
12786
  if (['Backspace', 'Delete'].includes(e.key)) {
12787
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12342
12788
  if (selectionIndex.value < 0) {
12343
12789
  if (e.key === 'Backspace' && !search.value) {
12344
12790
  selectionIndex.value = length - 1;
@@ -12346,10 +12792,10 @@
12346
12792
  return;
12347
12793
  }
12348
12794
  const originalSelectionIndex = selectionIndex.value;
12349
- const selectedItem = model.value[selectionIndex.value];
12350
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12795
+ select(model.value[selectionIndex.value], false);
12351
12796
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12352
12797
  }
12798
+ if (!props.multiple) return;
12353
12799
  if (e.key === 'ArrowLeft') {
12354
12800
  if (selectionIndex.value < 0 && selectionStart > 0) return;
12355
12801
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -12402,7 +12848,7 @@
12402
12848
  /** @param set - null means toggle */
12403
12849
  function select(item) {
12404
12850
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12405
- if (item.props.disabled) return;
12851
+ if (!item || item.props.disabled) return;
12406
12852
  if (props.multiple) {
12407
12853
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12408
12854
  const add = set == null ? !~index : set;
@@ -12462,9 +12908,11 @@
12462
12908
  });
12463
12909
  }
12464
12910
  });
12465
- vue.watch(() => props.items, val => {
12466
- if (!isFocused.value || !val.length || menu.value) return;
12467
- menu.value = true;
12911
+ vue.watch(() => props.items, (newVal, oldVal) => {
12912
+ if (menu.value) return;
12913
+ if (isFocused.value && !oldVal.length && newVal.length) {
12914
+ menu.value = true;
12915
+ }
12468
12916
  });
12469
12917
  useRender(() => {
12470
12918
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -16121,6 +16569,7 @@
16121
16569
  }
16122
16570
  menu.value = !menu.value;
16123
16571
  }
16572
+ // eslint-disable-next-line complexity
16124
16573
  function onKeydown(e) {
16125
16574
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
16126
16575
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -16147,8 +16596,8 @@
16147
16596
  select(transformItem$3(props, search.value));
16148
16597
  if (hasSelectionSlot.value) _search.value = '';
16149
16598
  }
16150
- if (!props.multiple) return;
16151
16599
  if (['Backspace', 'Delete'].includes(e.key)) {
16600
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16152
16601
  if (selectionIndex.value < 0) {
16153
16602
  if (e.key === 'Backspace' && !search.value) {
16154
16603
  selectionIndex.value = length - 1;
@@ -16156,10 +16605,10 @@
16156
16605
  return;
16157
16606
  }
16158
16607
  const originalSelectionIndex = selectionIndex.value;
16159
- const selectedItem = model.value[selectionIndex.value];
16160
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
16608
+ select(model.value[selectionIndex.value], false);
16161
16609
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16162
16610
  }
16611
+ if (!props.multiple) return;
16163
16612
  if (e.key === 'ArrowLeft') {
16164
16613
  if (selectionIndex.value < 0 && selectionStart > 0) return;
16165
16614
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -16190,7 +16639,7 @@
16190
16639
  /** @param set - null means toggle */
16191
16640
  function select(item) {
16192
16641
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16193
- if (item.props.disabled) return;
16642
+ if (!item || item.props.disabled) return;
16194
16643
  if (props.multiple) {
16195
16644
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16196
16645
  const add = set == null ? !~index : set;
@@ -16267,9 +16716,11 @@
16267
16716
  });
16268
16717
  }
16269
16718
  });
16270
- vue.watch(() => props.items, val => {
16271
- if (!isFocused.value || !val.length || menu.value) return;
16272
- menu.value = true;
16719
+ vue.watch(() => props.items, (newVal, oldVal) => {
16720
+ if (menu.value) return;
16721
+ if (isFocused.value && !oldVal.length && newVal.length) {
16722
+ menu.value = true;
16723
+ }
16273
16724
  });
16274
16725
  useRender(() => {
16275
16726
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -17416,7 +17867,7 @@
17416
17867
  return d;
17417
17868
  }
17418
17869
  function startOfDay(date) {
17419
- return new Date(date.getFullYear(), date.getMonth(), date.getDate());
17870
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);
17420
17871
  }
17421
17872
  function endOfDay(date) {
17422
17873
  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
@@ -20290,6 +20741,7 @@
20290
20741
  emit('click:month');
20291
20742
  }
20292
20743
  useRender(() => {
20744
+ // TODO: add slot support and scope defaults
20293
20745
  return vue.createVNode("div", {
20294
20746
  "class": ['v-date-picker-controls']
20295
20747
  }, [vue.createVNode(VBtn, {
@@ -20568,6 +21020,12 @@
20568
21020
  const adapter = useDate();
20569
21021
  const rangeStart = vue.shallowRef();
20570
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
+ }
20571
21029
  const atMax = vue.computed(() => {
20572
21030
  const max = ['number', 'string'].includes(typeof props.multiple) ? Number(props.multiple) : Infinity;
20573
21031
  return model.value.length >= max;
@@ -20578,15 +21036,15 @@
20578
21036
  rangeStart.value = _value;
20579
21037
  model.value = [rangeStart.value];
20580
21038
  } else if (!rangeStop.value) {
20581
- if (adapter.isSameDay(value, rangeStart.value)) {
21039
+ if (adapter.isSameDay(_value, rangeStart.value)) {
20582
21040
  rangeStart.value = undefined;
20583
21041
  model.value = [];
20584
21042
  return;
20585
- } else if (adapter.isBefore(value, rangeStart.value)) {
20586
- rangeStop.value = rangeStart.value;
21043
+ } else if (adapter.isBefore(_value, rangeStart.value)) {
21044
+ rangeStop.value = adapter.endOfDay(rangeStart.value);
20587
21045
  rangeStart.value = _value;
20588
21046
  } else {
20589
- rangeStop.value = _value;
21047
+ rangeStop.value = adapter.endOfDay(_value);
20590
21048
  }
20591
21049
  const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
20592
21050
  const datesInRange = [rangeStart.value];
@@ -22753,12 +23211,24 @@
22753
23211
  default: () => [hasImage && vue.createVNode("div", {
22754
23212
  "key": "image",
22755
23213
  "class": "v-navigation-drawer__img"
22756
- }, [slots.image ? slots.image?.({
22757
- image: props.image
22758
- }) : vue.createVNode("img", {
22759
- "src": props.image,
22760
- "alt": ""
22761
- }, 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", {
22762
23232
  "class": "v-navigation-drawer__prepend"
22763
23233
  }, [slots.prepend?.()]), vue.createVNode("div", {
22764
23234
  "class": "v-navigation-drawer__content"
@@ -22859,7 +23329,7 @@
22859
23329
  function onInput() {
22860
23330
  // The maxlength attribute doesn't work for the number type input, so the text type is used.
22861
23331
  // The following logic simulates the behavior of a number input.
22862
- if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
23332
+ if (isValidNumber(current.value.value)) {
22863
23333
  current.value.value = '';
22864
23334
  return;
22865
23335
  }
@@ -22905,7 +23375,9 @@
22905
23375
  function onPaste(index, e) {
22906
23376
  e.preventDefault();
22907
23377
  e.stopPropagation();
22908
- model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
23378
+ const clipboardText = e?.clipboardData?.getData('Text') ?? '';
23379
+ if (!isValidNumber(clipboardText)) return;
23380
+ model.value = clipboardText.split('');
22909
23381
  inputRef.value?.[index].blur();
22910
23382
  }
22911
23383
  function reset() {
@@ -22919,6 +23391,9 @@
22919
23391
  blur();
22920
23392
  focusIndex.value = -1;
22921
23393
  }
23394
+ function isValidNumber(value) {
23395
+ return props.type === 'number' && !isNaN(Number(value));
23396
+ }
22922
23397
  provideDefaults({
22923
23398
  VField: {
22924
23399
  color: vue.computed(() => props.color),
@@ -25777,7 +26252,7 @@
25777
26252
  goTo
25778
26253
  };
25779
26254
  }
25780
- const version$1 = "3.5.8";
26255
+ const version$1 = "3.5.10";
25781
26256
  createVuetify$1.version = version$1;
25782
26257
 
25783
26258
  // Vue's inject() can only be used in setup
@@ -25802,9 +26277,10 @@
25802
26277
  ...options
25803
26278
  });
25804
26279
  };
25805
- const version = "3.5.8";
26280
+ const version = "3.5.10";
25806
26281
  createVuetify.version = version;
25807
26282
 
26283
+ exports.blueprints = index;
25808
26284
  exports.components = components;
25809
26285
  exports.createVuetify = createVuetify;
25810
26286
  exports.directives = directives;