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
@@ -1,81 +1,10 @@
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
  */
6
6
 
7
- import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, ref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText } from 'vue';
8
-
9
- // Types
10
- // eslint-disable-line vue/prefer-import-from-vue
11
-
12
- /**
13
- * Creates a factory function for props definitions.
14
- * This is used to define props in a composable then override
15
- * default values in an implementing component.
16
- *
17
- * @example Simplified signature
18
- * (props: Props) => (defaults?: Record<keyof props, any>) => Props
19
- *
20
- * @example Usage
21
- * const makeProps = propsFactory({
22
- * foo: String,
23
- * })
24
- *
25
- * defineComponent({
26
- * props: {
27
- * ...makeProps({
28
- * foo: 'a',
29
- * }),
30
- * },
31
- * setup (props) {
32
- * // would be "string | undefined", now "string" because a default has been provided
33
- * props.foo
34
- * },
35
- * }
36
- */
37
-
38
- function propsFactory(props, source) {
39
- return defaults => {
40
- return Object.keys(props).reduce((obj, prop) => {
41
- const isObjectDefinition = typeof props[prop] === 'object' && props[prop] != null && !Array.isArray(props[prop]);
42
- const definition = isObjectDefinition ? props[prop] : {
43
- type: props[prop]
44
- };
45
- if (defaults && prop in defaults) {
46
- obj[prop] = {
47
- ...definition,
48
- default: defaults[prop]
49
- };
50
- } else {
51
- obj[prop] = definition;
52
- }
53
- if (source && !obj[prop].source) {
54
- obj[prop].source = source;
55
- }
56
- return obj;
57
- }, {});
58
- };
59
- }
60
-
61
- /**
62
- * Like `Partial<T>` but doesn't care what the value is
63
- */
64
-
65
- // Copied from Vue
66
-
67
- // Utilities
68
-
69
- // Types
70
-
71
- // Composables
72
- const makeComponentProps = propsFactory({
73
- class: [String, Array],
74
- style: {
75
- type: [String, Array, Object],
76
- default: null
77
- }
78
- }, 'component');
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, ref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText } from 'vue';
79
8
 
80
9
  const IN_BROWSER = typeof window !== 'undefined';
81
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -1227,6 +1156,77 @@ function getForeground(color) {
1227
1156
  return whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000';
1228
1157
  }
1229
1158
 
1159
+ // Types
1160
+ // eslint-disable-line vue/prefer-import-from-vue
1161
+
1162
+ /**
1163
+ * Creates a factory function for props definitions.
1164
+ * This is used to define props in a composable then override
1165
+ * default values in an implementing component.
1166
+ *
1167
+ * @example Simplified signature
1168
+ * (props: Props) => (defaults?: Record<keyof props, any>) => Props
1169
+ *
1170
+ * @example Usage
1171
+ * const makeProps = propsFactory({
1172
+ * foo: String,
1173
+ * })
1174
+ *
1175
+ * defineComponent({
1176
+ * props: {
1177
+ * ...makeProps({
1178
+ * foo: 'a',
1179
+ * }),
1180
+ * },
1181
+ * setup (props) {
1182
+ * // would be "string | undefined", now "string" because a default has been provided
1183
+ * props.foo
1184
+ * },
1185
+ * }
1186
+ */
1187
+
1188
+ function propsFactory(props, source) {
1189
+ return defaults => {
1190
+ return Object.keys(props).reduce((obj, prop) => {
1191
+ const isObjectDefinition = typeof props[prop] === 'object' && props[prop] != null && !Array.isArray(props[prop]);
1192
+ const definition = isObjectDefinition ? props[prop] : {
1193
+ type: props[prop]
1194
+ };
1195
+ if (defaults && prop in defaults) {
1196
+ obj[prop] = {
1197
+ ...definition,
1198
+ default: defaults[prop]
1199
+ };
1200
+ } else {
1201
+ obj[prop] = definition;
1202
+ }
1203
+ if (source && !obj[prop].source) {
1204
+ obj[prop].source = source;
1205
+ }
1206
+ return obj;
1207
+ }, {});
1208
+ };
1209
+ }
1210
+
1211
+ /**
1212
+ * Like `Partial<T>` but doesn't care what the value is
1213
+ */
1214
+
1215
+ // Copied from Vue
1216
+
1217
+ // Utilities
1218
+
1219
+ // Types
1220
+
1221
+ // Composables
1222
+ const makeComponentProps = propsFactory({
1223
+ class: [String, Array],
1224
+ style: {
1225
+ type: [String, Array, Object],
1226
+ default: null
1227
+ }
1228
+ }, 'component');
1229
+
1230
1230
  // Utilities
1231
1231
 
1232
1232
  // Types
@@ -1533,19 +1533,464 @@ function isFixedPosition(el) {
1533
1533
  if (window.getComputedStyle(el).position === 'fixed') {
1534
1534
  return true;
1535
1535
  }
1536
- el = el.offsetParent;
1536
+ el = el.offsetParent;
1537
+ }
1538
+ return false;
1539
+ }
1540
+
1541
+ // Utilities
1542
+
1543
+ // Types
1544
+
1545
+ function useRender(render) {
1546
+ const vm = getCurrentInstance('useRender');
1547
+ vm.render = render;
1548
+ }
1549
+
1550
+ // Types
1551
+
1552
+ const IconValue = [String, Function, Object, Array];
1553
+ const IconSymbol = Symbol.for('vuetify:icons');
1554
+ const makeIconProps = propsFactory({
1555
+ icon: {
1556
+ type: IconValue
1557
+ },
1558
+ // Could not remove this and use makeTagProps, types complained because it is not required
1559
+ tag: {
1560
+ type: String,
1561
+ required: true
1562
+ }
1563
+ }, 'icon');
1564
+ const VComponentIcon = genericComponent()({
1565
+ name: 'VComponentIcon',
1566
+ props: makeIconProps(),
1567
+ setup(props, _ref) {
1568
+ let {
1569
+ slots
1570
+ } = _ref;
1571
+ return () => {
1572
+ const Icon = props.icon;
1573
+ return createVNode(props.tag, null, {
1574
+ default: () => [props.icon ? createVNode(Icon, null, null) : slots.default?.()]
1575
+ });
1576
+ };
1577
+ }
1578
+ });
1579
+ const VSvgIcon = defineComponent({
1580
+ name: 'VSvgIcon',
1581
+ inheritAttrs: false,
1582
+ props: makeIconProps(),
1583
+ setup(props, _ref2) {
1584
+ let {
1585
+ attrs
1586
+ } = _ref2;
1587
+ return () => {
1588
+ return createVNode(props.tag, mergeProps(attrs, {
1589
+ "style": null
1590
+ }), {
1591
+ default: () => [createVNode("svg", {
1592
+ "class": "v-icon__svg",
1593
+ "xmlns": "http://www.w3.org/2000/svg",
1594
+ "viewBox": "0 0 24 24",
1595
+ "role": "img",
1596
+ "aria-hidden": "true"
1597
+ }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? createVNode("path", {
1598
+ "d": path[0],
1599
+ "fill-opacity": path[1]
1600
+ }, null) : createVNode("path", {
1601
+ "d": path
1602
+ }, null)) : createVNode("path", {
1603
+ "d": props.icon
1604
+ }, null)])]
1605
+ });
1606
+ };
1607
+ }
1608
+ });
1609
+ const VLigatureIcon = defineComponent({
1610
+ name: 'VLigatureIcon',
1611
+ props: makeIconProps(),
1612
+ setup(props) {
1613
+ return () => {
1614
+ return createVNode(props.tag, null, {
1615
+ default: () => [props.icon]
1616
+ });
1617
+ };
1618
+ }
1619
+ });
1620
+ const VClassIcon = defineComponent({
1621
+ name: 'VClassIcon',
1622
+ props: makeIconProps(),
1623
+ setup(props) {
1624
+ return () => {
1625
+ return createVNode(props.tag, {
1626
+ "class": props.icon
1627
+ }, null);
1628
+ };
1629
+ }
1630
+ });
1631
+ function genDefaults$3() {
1632
+ return {
1633
+ svg: {
1634
+ component: VSvgIcon
1635
+ },
1636
+ class: {
1637
+ component: VClassIcon
1638
+ }
1639
+ };
1640
+ }
1641
+
1642
+ // Composables
1643
+ function createIcons(options) {
1644
+ const sets = genDefaults$3();
1645
+ const defaultSet = options?.defaultSet ?? 'mdi';
1646
+ if (defaultSet === 'mdi' && !sets.mdi) {
1647
+ sets.mdi = mdi;
1648
+ }
1649
+ return mergeDeep({
1650
+ defaultSet,
1651
+ sets,
1652
+ aliases: {
1653
+ ...aliases,
1654
+ /* eslint-disable max-len */
1655
+ 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]],
1656
+ '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'
1657
+ /* eslint-enable max-len */
1658
+ }
1659
+ }, options);
1660
+ }
1661
+ const useIcon = props => {
1662
+ const icons = inject$1(IconSymbol);
1663
+ if (!icons) throw new Error('Missing Vuetify Icons provide!');
1664
+ const iconData = computed(() => {
1665
+ const iconAlias = unref(props);
1666
+ if (!iconAlias) return {
1667
+ component: VComponentIcon
1668
+ };
1669
+ let icon = iconAlias;
1670
+ if (typeof icon === 'string') {
1671
+ icon = icon.trim();
1672
+ if (icon.startsWith('$')) {
1673
+ icon = icons.aliases?.[icon.slice(1)];
1674
+ }
1675
+ }
1676
+ if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
1677
+ if (Array.isArray(icon)) {
1678
+ return {
1679
+ component: VSvgIcon,
1680
+ icon
1681
+ };
1682
+ } else if (typeof icon !== 'string') {
1683
+ return {
1684
+ component: VComponentIcon,
1685
+ icon
1686
+ };
1687
+ }
1688
+ const iconSetName = Object.keys(icons.sets).find(setName => typeof icon === 'string' && icon.startsWith(`${setName}:`));
1689
+ const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;
1690
+ const iconSet = icons.sets[iconSetName ?? icons.defaultSet];
1691
+ return {
1692
+ component: iconSet.component,
1693
+ icon: iconName
1694
+ };
1695
+ });
1696
+ return {
1697
+ iconData
1698
+ };
1699
+ };
1700
+
1701
+ // Composables
1702
+
1703
+ // Types
1704
+
1705
+ const aliases = {
1706
+ collapse: 'mdi-chevron-up',
1707
+ complete: 'mdi-check',
1708
+ cancel: 'mdi-close-circle',
1709
+ close: 'mdi-close',
1710
+ delete: 'mdi-close-circle',
1711
+ // delete (e.g. v-chip close)
1712
+ clear: 'mdi-close-circle',
1713
+ success: 'mdi-check-circle',
1714
+ info: 'mdi-information',
1715
+ warning: 'mdi-alert-circle',
1716
+ error: 'mdi-close-circle',
1717
+ prev: 'mdi-chevron-left',
1718
+ next: 'mdi-chevron-right',
1719
+ checkboxOn: 'mdi-checkbox-marked',
1720
+ checkboxOff: 'mdi-checkbox-blank-outline',
1721
+ checkboxIndeterminate: 'mdi-minus-box',
1722
+ delimiter: 'mdi-circle',
1723
+ // for carousel
1724
+ sortAsc: 'mdi-arrow-up',
1725
+ sortDesc: 'mdi-arrow-down',
1726
+ expand: 'mdi-chevron-down',
1727
+ menu: 'mdi-menu',
1728
+ subgroup: 'mdi-menu-down',
1729
+ dropdown: 'mdi-menu-down',
1730
+ radioOn: 'mdi-radiobox-marked',
1731
+ radioOff: 'mdi-radiobox-blank',
1732
+ edit: 'mdi-pencil',
1733
+ ratingEmpty: 'mdi-star-outline',
1734
+ ratingFull: 'mdi-star',
1735
+ ratingHalf: 'mdi-star-half-full',
1736
+ loading: 'mdi-cached',
1737
+ first: 'mdi-page-first',
1738
+ last: 'mdi-page-last',
1739
+ unfold: 'mdi-unfold-more-horizontal',
1740
+ file: 'mdi-paperclip',
1741
+ plus: 'mdi-plus',
1742
+ minus: 'mdi-minus',
1743
+ calendar: 'mdi-calendar',
1744
+ treeviewCollapse: 'mdi-menu-down',
1745
+ treeviewExpand: 'mdi-menu-right',
1746
+ eyeDropper: 'mdi-eyedropper'
1747
+ };
1748
+ const mdi = {
1749
+ // Not using mergeProps here, functional components merge props by default (?)
1750
+ component: props => h(VClassIcon, {
1751
+ ...props,
1752
+ class: 'mdi'
1753
+ })
1754
+ };
1755
+
1756
+ // Icons
1757
+
1758
+ // Types
1759
+
1760
+ const md1 = {
1761
+ defaults: {
1762
+ global: {
1763
+ rounded: 'sm'
1764
+ },
1765
+ VAvatar: {
1766
+ rounded: 'circle'
1767
+ },
1768
+ VAutocomplete: {
1769
+ variant: 'underlined'
1770
+ },
1771
+ VBanner: {
1772
+ color: 'primary'
1773
+ },
1774
+ VBtn: {
1775
+ color: 'primary',
1776
+ rounded: 0
1777
+ },
1778
+ VCheckbox: {
1779
+ color: 'secondary'
1780
+ },
1781
+ VCombobox: {
1782
+ variant: 'underlined'
1783
+ },
1784
+ VSelect: {
1785
+ variant: 'underlined'
1786
+ },
1787
+ VSlider: {
1788
+ color: 'primary'
1789
+ },
1790
+ VTabs: {
1791
+ color: 'primary'
1792
+ },
1793
+ VTextarea: {
1794
+ variant: 'underlined'
1795
+ },
1796
+ VTextField: {
1797
+ variant: 'underlined'
1798
+ },
1799
+ VToolbar: {
1800
+ VBtn: {
1801
+ color: null
1802
+ }
1803
+ }
1804
+ },
1805
+ icons: {
1806
+ defaultSet: 'mdi',
1807
+ sets: {
1808
+ mdi
1809
+ }
1810
+ },
1811
+ theme: {
1812
+ themes: {
1813
+ light: {
1814
+ colors: {
1815
+ primary: '#3F51B5',
1816
+ 'primary-darken-1': '#303F9F',
1817
+ 'primary-lighten-1': '#C5CAE9',
1818
+ secondary: '#FF4081',
1819
+ 'secondary-darken-1': '#F50057',
1820
+ 'secondary-lighten-1': '#FF80AB',
1821
+ accent: '#009688'
1822
+ }
1823
+ }
1824
+ }
1825
+ }
1826
+ };
1827
+
1828
+ // Icons
1829
+
1830
+ // Types
1831
+
1832
+ const md2 = {
1833
+ defaults: {
1834
+ global: {
1835
+ rounded: 'md'
1836
+ },
1837
+ VAvatar: {
1838
+ rounded: 'circle'
1839
+ },
1840
+ VAutocomplete: {
1841
+ variant: 'filled'
1842
+ },
1843
+ VBanner: {
1844
+ color: 'primary'
1845
+ },
1846
+ VBtn: {
1847
+ color: 'primary'
1848
+ },
1849
+ VCheckbox: {
1850
+ color: 'secondary'
1851
+ },
1852
+ VCombobox: {
1853
+ variant: 'filled'
1854
+ },
1855
+ VSelect: {
1856
+ variant: 'filled'
1857
+ },
1858
+ VSlider: {
1859
+ color: 'primary'
1860
+ },
1861
+ VTabs: {
1862
+ color: 'primary'
1863
+ },
1864
+ VTextarea: {
1865
+ variant: 'filled'
1866
+ },
1867
+ VTextField: {
1868
+ variant: 'filled'
1869
+ },
1870
+ VToolbar: {
1871
+ VBtn: {
1872
+ color: null
1873
+ }
1874
+ }
1875
+ },
1876
+ icons: {
1877
+ defaultSet: 'mdi',
1878
+ sets: {
1879
+ mdi
1880
+ }
1881
+ },
1882
+ theme: {
1883
+ themes: {
1884
+ light: {
1885
+ colors: {
1886
+ primary: '#6200EE',
1887
+ 'primary-darken-1': '#3700B3',
1888
+ secondary: '#03DAC6',
1889
+ 'secondary-darken-1': '#018786',
1890
+ error: '#B00020'
1891
+ }
1892
+ }
1893
+ }
1894
+ }
1895
+ };
1896
+
1897
+ // Icons
1898
+
1899
+ // Types
1900
+
1901
+ const md3 = {
1902
+ defaults: {
1903
+ VAppBar: {
1904
+ flat: true
1905
+ },
1906
+ VAutocomplete: {
1907
+ variant: 'filled'
1908
+ },
1909
+ VBanner: {
1910
+ color: 'primary'
1911
+ },
1912
+ VBottomSheet: {
1913
+ contentClass: 'rounded-t-xl overflow-hidden'
1914
+ },
1915
+ VBtn: {
1916
+ color: 'primary',
1917
+ rounded: 'xl'
1918
+ },
1919
+ VBtnGroup: {
1920
+ rounded: 'xl',
1921
+ VBtn: {
1922
+ rounded: null
1923
+ }
1924
+ },
1925
+ VCard: {
1926
+ rounded: 'lg'
1927
+ },
1928
+ VCheckbox: {
1929
+ color: 'secondary',
1930
+ inset: true
1931
+ },
1932
+ VChip: {
1933
+ rounded: 'sm'
1934
+ },
1935
+ VCombobox: {
1936
+ variant: 'filled'
1937
+ },
1938
+ VNavigationDrawer: {
1939
+ // VList: {
1940
+ // nav: true,
1941
+ // VListItem: {
1942
+ // rounded: 'xl',
1943
+ // },
1944
+ // },
1945
+ },
1946
+ VSelect: {
1947
+ variant: 'filled'
1948
+ },
1949
+ VSlider: {
1950
+ color: 'primary'
1951
+ },
1952
+ VTabs: {
1953
+ color: 'primary'
1954
+ },
1955
+ VTextarea: {
1956
+ variant: 'filled'
1957
+ },
1958
+ VTextField: {
1959
+ variant: 'filled'
1960
+ },
1961
+ VToolbar: {
1962
+ VBtn: {
1963
+ color: null
1964
+ }
1965
+ }
1966
+ },
1967
+ icons: {
1968
+ defaultSet: 'mdi',
1969
+ sets: {
1970
+ mdi
1971
+ }
1972
+ },
1973
+ theme: {
1974
+ themes: {
1975
+ light: {
1976
+ colors: {
1977
+ primary: '#6750a4',
1978
+ secondary: '#b4b0bb',
1979
+ tertiary: '#7d5260',
1980
+ error: '#b3261e',
1981
+ surface: '#fffbfe'
1982
+ }
1983
+ }
1984
+ }
1537
1985
  }
1538
- return false;
1539
- }
1540
-
1541
- // Utilities
1542
-
1543
- // Types
1986
+ };
1544
1987
 
1545
- function useRender(render) {
1546
- const vm = getCurrentInstance('useRender');
1547
- vm.render = render;
1548
- }
1988
+ var index = /*#__PURE__*/Object.freeze({
1989
+ __proto__: null,
1990
+ md1: md1,
1991
+ md2: md2,
1992
+ md3: md3
1993
+ });
1549
1994
 
1550
1995
  // Utilities
1551
1996
 
@@ -2160,7 +2605,7 @@ function provideLocale(props) {
2160
2605
  provide(LocaleSymbol, data);
2161
2606
  return data;
2162
2607
  }
2163
- function genDefaults$3() {
2608
+ function genDefaults$2() {
2164
2609
  return {
2165
2610
  af: false,
2166
2611
  ar: true,
@@ -2207,7 +2652,7 @@ function genDefaults$3() {
2207
2652
  };
2208
2653
  }
2209
2654
  function createRtl(i18n, options) {
2210
- const rtl = ref(options?.rtl ?? genDefaults$3());
2655
+ const rtl = ref(options?.rtl ?? genDefaults$2());
2211
2656
  const isRtl = computed(() => rtl.value[i18n.current.value] ?? false);
2212
2657
  return {
2213
2658
  isRtl,
@@ -2240,7 +2685,7 @@ const ThemeSymbol = Symbol.for('vuetify:theme');
2240
2685
  const makeThemeProps = propsFactory({
2241
2686
  theme: String
2242
2687
  }, 'theme');
2243
- function genDefaults$2() {
2688
+ function genDefaults$1() {
2244
2689
  return {
2245
2690
  defaultTheme: 'light',
2246
2691
  variations: {
@@ -2327,8 +2772,8 @@ function genDefaults$2() {
2327
2772
  };
2328
2773
  }
2329
2774
  function parseThemeOptions() {
2330
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$2();
2331
- const defaults = genDefaults$2();
2775
+ let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$1();
2776
+ const defaults = genDefaults$1();
2332
2777
  if (!options) return {
2333
2778
  ...defaults,
2334
2779
  isDisabled: true
@@ -2382,7 +2827,7 @@ function createTheme(options) {
2382
2827
  const current = computed(() => computedThemes.value[name.value]);
2383
2828
  const styles = computed(() => {
2384
2829
  const lines = [];
2385
- if (current.value.dark) {
2830
+ if (current.value?.dark) {
2386
2831
  createCssClass(lines, ':root', ['color-scheme: dark']);
2387
2832
  }
2388
2833
  createCssClass(lines, ':root', genCssVariables(current.value));
@@ -4252,280 +4697,76 @@ function getItemIndex(items, value) {
4252
4697
  }
4253
4698
  function getIds(items, modelValue) {
4254
4699
  const ids = [];
4255
- modelValue.forEach(value => {
4256
- const item = items.find(item => deepEqual(value, item.value));
4257
- const itemByIndex = items[value];
4258
- if (item?.value != null) {
4259
- ids.push(item.id);
4260
- } else if (itemByIndex != null) {
4261
- ids.push(itemByIndex.id);
4262
- }
4263
- });
4264
- return ids;
4265
- }
4266
- function getValues(items, ids) {
4267
- const values = [];
4268
- ids.forEach(id => {
4269
- const itemIndex = items.findIndex(item => item.id === id);
4270
- if (~itemIndex) {
4271
- const item = items[itemIndex];
4272
- values.push(item.value != null ? item.value : itemIndex);
4273
- }
4274
- });
4275
- return values;
4276
- }
4277
-
4278
- // Types
4279
-
4280
- const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
4281
- const makeVBtnToggleProps = propsFactory({
4282
- ...makeVBtnGroupProps(),
4283
- ...makeGroupProps()
4284
- }, 'VBtnToggle');
4285
- const VBtnToggle = genericComponent()({
4286
- name: 'VBtnToggle',
4287
- props: makeVBtnToggleProps(),
4288
- emits: {
4289
- 'update:modelValue': value => true
4290
- },
4291
- setup(props, _ref) {
4292
- let {
4293
- slots
4294
- } = _ref;
4295
- const {
4296
- isSelected,
4297
- next,
4298
- prev,
4299
- select,
4300
- selected
4301
- } = useGroup(props, VBtnToggleSymbol);
4302
- useRender(() => {
4303
- const btnGroupProps = VBtnGroup.filterProps(props);
4304
- return createVNode(VBtnGroup, mergeProps({
4305
- "class": ['v-btn-toggle', props.class]
4306
- }, btnGroupProps, {
4307
- "style": props.style
4308
- }), {
4309
- default: () => [slots.default?.({
4310
- isSelected,
4311
- next,
4312
- prev,
4313
- select,
4314
- selected
4315
- })]
4316
- });
4317
- });
4318
- return {
4319
- next,
4320
- prev,
4321
- select
4322
- };
4323
- }
4324
- });
4325
-
4326
- // Composables
4327
-
4328
- // Types
4329
-
4330
- const aliases = {
4331
- collapse: 'mdi-chevron-up',
4332
- complete: 'mdi-check',
4333
- cancel: 'mdi-close-circle',
4334
- close: 'mdi-close',
4335
- delete: 'mdi-close-circle',
4336
- // delete (e.g. v-chip close)
4337
- clear: 'mdi-close-circle',
4338
- success: 'mdi-check-circle',
4339
- info: 'mdi-information',
4340
- warning: 'mdi-alert-circle',
4341
- error: 'mdi-close-circle',
4342
- prev: 'mdi-chevron-left',
4343
- next: 'mdi-chevron-right',
4344
- checkboxOn: 'mdi-checkbox-marked',
4345
- checkboxOff: 'mdi-checkbox-blank-outline',
4346
- checkboxIndeterminate: 'mdi-minus-box',
4347
- delimiter: 'mdi-circle',
4348
- // for carousel
4349
- sortAsc: 'mdi-arrow-up',
4350
- sortDesc: 'mdi-arrow-down',
4351
- expand: 'mdi-chevron-down',
4352
- menu: 'mdi-menu',
4353
- subgroup: 'mdi-menu-down',
4354
- dropdown: 'mdi-menu-down',
4355
- radioOn: 'mdi-radiobox-marked',
4356
- radioOff: 'mdi-radiobox-blank',
4357
- edit: 'mdi-pencil',
4358
- ratingEmpty: 'mdi-star-outline',
4359
- ratingFull: 'mdi-star',
4360
- ratingHalf: 'mdi-star-half-full',
4361
- loading: 'mdi-cached',
4362
- first: 'mdi-page-first',
4363
- last: 'mdi-page-last',
4364
- unfold: 'mdi-unfold-more-horizontal',
4365
- file: 'mdi-paperclip',
4366
- plus: 'mdi-plus',
4367
- minus: 'mdi-minus',
4368
- calendar: 'mdi-calendar',
4369
- eyeDropper: 'mdi-eyedropper'
4370
- };
4371
- const mdi = {
4372
- // Not using mergeProps here, functional components merge props by default (?)
4373
- component: props => h(VClassIcon, {
4374
- ...props,
4375
- class: 'mdi'
4376
- })
4377
- };
4378
-
4379
- // Types
4380
-
4381
- const IconValue = [String, Function, Object, Array];
4382
- const IconSymbol = Symbol.for('vuetify:icons');
4383
- const makeIconProps = propsFactory({
4384
- icon: {
4385
- type: IconValue
4386
- },
4387
- // Could not remove this and use makeTagProps, types complained because it is not required
4388
- tag: {
4389
- type: String,
4390
- required: true
4391
- }
4392
- }, 'icon');
4393
- const VComponentIcon = genericComponent()({
4394
- name: 'VComponentIcon',
4395
- props: makeIconProps(),
4396
- setup(props, _ref) {
4397
- let {
4398
- slots
4399
- } = _ref;
4400
- return () => {
4401
- const Icon = props.icon;
4402
- return createVNode(props.tag, null, {
4403
- default: () => [props.icon ? createVNode(Icon, null, null) : slots.default?.()]
4404
- });
4405
- };
4406
- }
4407
- });
4408
- const VSvgIcon = defineComponent({
4409
- name: 'VSvgIcon',
4410
- inheritAttrs: false,
4411
- props: makeIconProps(),
4412
- setup(props, _ref2) {
4413
- let {
4414
- attrs
4415
- } = _ref2;
4416
- return () => {
4417
- return createVNode(props.tag, mergeProps(attrs, {
4418
- "style": null
4419
- }), {
4420
- default: () => [createVNode("svg", {
4421
- "class": "v-icon__svg",
4422
- "xmlns": "http://www.w3.org/2000/svg",
4423
- "viewBox": "0 0 24 24",
4424
- "role": "img",
4425
- "aria-hidden": "true"
4426
- }, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? createVNode("path", {
4427
- "d": path[0],
4428
- "fill-opacity": path[1]
4429
- }, null) : createVNode("path", {
4430
- "d": path
4431
- }, null)) : createVNode("path", {
4432
- "d": props.icon
4433
- }, null)])]
4434
- });
4435
- };
4436
- }
4437
- });
4438
- const VLigatureIcon = defineComponent({
4439
- name: 'VLigatureIcon',
4440
- props: makeIconProps(),
4441
- setup(props) {
4442
- return () => {
4443
- return createVNode(props.tag, null, {
4444
- default: () => [props.icon]
4445
- });
4446
- };
4447
- }
4448
- });
4449
- const VClassIcon = defineComponent({
4450
- name: 'VClassIcon',
4451
- props: makeIconProps(),
4452
- setup(props) {
4453
- return () => {
4454
- return createVNode(props.tag, {
4455
- "class": props.icon
4456
- }, null);
4457
- };
4458
- }
4459
- });
4460
- function genDefaults$1() {
4461
- return {
4462
- svg: {
4463
- component: VSvgIcon
4464
- },
4465
- class: {
4466
- component: VClassIcon
4467
- }
4468
- };
4469
- }
4470
-
4471
- // Composables
4472
- function createIcons(options) {
4473
- const sets = genDefaults$1();
4474
- const defaultSet = options?.defaultSet ?? 'mdi';
4475
- if (defaultSet === 'mdi' && !sets.mdi) {
4476
- sets.mdi = mdi;
4477
- }
4478
- return mergeDeep({
4479
- defaultSet,
4480
- sets,
4481
- aliases: {
4482
- ...aliases,
4483
- /* eslint-disable max-len */
4484
- 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]],
4485
- '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'
4486
- /* eslint-enable max-len */
4700
+ modelValue.forEach(value => {
4701
+ const item = items.find(item => deepEqual(value, item.value));
4702
+ const itemByIndex = items[value];
4703
+ if (item?.value != null) {
4704
+ ids.push(item.id);
4705
+ } else if (itemByIndex != null) {
4706
+ ids.push(itemByIndex.id);
4487
4707
  }
4488
- }, options);
4708
+ });
4709
+ return ids;
4489
4710
  }
4490
- const useIcon = props => {
4491
- const icons = inject$1(IconSymbol);
4492
- if (!icons) throw new Error('Missing Vuetify Icons provide!');
4493
- const iconData = computed(() => {
4494
- const iconAlias = unref(props);
4495
- if (!iconAlias) return {
4496
- component: VComponentIcon
4497
- };
4498
- let icon = iconAlias;
4499
- if (typeof icon === 'string') {
4500
- icon = icon.trim();
4501
- if (icon.startsWith('$')) {
4502
- icon = icons.aliases?.[icon.slice(1)];
4503
- }
4504
- }
4505
- if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
4506
- if (Array.isArray(icon)) {
4507
- return {
4508
- component: VSvgIcon,
4509
- icon
4510
- };
4511
- } else if (typeof icon !== 'string') {
4512
- return {
4513
- component: VComponentIcon,
4514
- icon
4515
- };
4711
+ function getValues(items, ids) {
4712
+ const values = [];
4713
+ ids.forEach(id => {
4714
+ const itemIndex = items.findIndex(item => item.id === id);
4715
+ if (~itemIndex) {
4716
+ const item = items[itemIndex];
4717
+ values.push(item.value != null ? item.value : itemIndex);
4516
4718
  }
4517
- const iconSetName = Object.keys(icons.sets).find(setName => typeof icon === 'string' && icon.startsWith(`${setName}:`));
4518
- const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;
4519
- const iconSet = icons.sets[iconSetName ?? icons.defaultSet];
4719
+ });
4720
+ return values;
4721
+ }
4722
+
4723
+ // Types
4724
+
4725
+ const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
4726
+ const makeVBtnToggleProps = propsFactory({
4727
+ ...makeVBtnGroupProps(),
4728
+ ...makeGroupProps()
4729
+ }, 'VBtnToggle');
4730
+ const VBtnToggle = genericComponent()({
4731
+ name: 'VBtnToggle',
4732
+ props: makeVBtnToggleProps(),
4733
+ emits: {
4734
+ 'update:modelValue': value => true
4735
+ },
4736
+ setup(props, _ref) {
4737
+ let {
4738
+ slots
4739
+ } = _ref;
4740
+ const {
4741
+ isSelected,
4742
+ next,
4743
+ prev,
4744
+ select,
4745
+ selected
4746
+ } = useGroup(props, VBtnToggleSymbol);
4747
+ useRender(() => {
4748
+ const btnGroupProps = VBtnGroup.filterProps(props);
4749
+ return createVNode(VBtnGroup, mergeProps({
4750
+ "class": ['v-btn-toggle', props.class]
4751
+ }, btnGroupProps, {
4752
+ "style": props.style
4753
+ }), {
4754
+ default: () => [slots.default?.({
4755
+ isSelected,
4756
+ next,
4757
+ prev,
4758
+ select,
4759
+ selected
4760
+ })]
4761
+ });
4762
+ });
4520
4763
  return {
4521
- component: iconSet.component,
4522
- icon: iconName
4764
+ next,
4765
+ prev,
4766
+ select
4523
4767
  };
4524
- });
4525
- return {
4526
- iconData
4527
- };
4528
- };
4768
+ }
4769
+ });
4529
4770
 
4530
4771
  // Utilities
4531
4772
 
@@ -4560,6 +4801,7 @@ function useSize(props) {
4560
4801
 
4561
4802
  const makeVIconProps = propsFactory({
4562
4803
  color: String,
4804
+ disabled: Boolean,
4563
4805
  start: Boolean,
4564
4806
  end: Boolean,
4565
4807
  icon: IconValue,
@@ -4597,11 +4839,13 @@ const VIcon = genericComponent()({
4597
4839
  if (slotValue) {
4598
4840
  slotIcon.value = flattenFragments(slotValue).filter(node => node.type === Text && node.children && typeof node.children === 'string')[0]?.children;
4599
4841
  }
4842
+ const hasClick = !!(attrs.onClick || attrs.onClickOnce);
4600
4843
  return createVNode(iconData.value.component, {
4601
4844
  "tag": props.tag,
4602
4845
  "icon": iconData.value.icon,
4603
4846
  "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
4604
- 'v-icon--clickable': !!attrs.onClick,
4847
+ 'v-icon--clickable': hasClick,
4848
+ 'v-icon--disabled': props.disabled,
4605
4849
  'v-icon--start': props.start,
4606
4850
  'v-icon--end': props.end
4607
4851
  }, props.class],
@@ -4610,8 +4854,9 @@ const VIcon = genericComponent()({
4610
4854
  height: convertToUnit(props.size),
4611
4855
  width: convertToUnit(props.size)
4612
4856
  } : undefined, textColorStyles.value, props.style],
4613
- "role": attrs.onClick ? 'button' : undefined,
4614
- "aria-hidden": !attrs.onClick
4857
+ "role": hasClick ? 'button' : undefined,
4858
+ "aria-hidden": !hasClick,
4859
+ "tabindex": hasClick ? props.disabled ? -1 : 0 : undefined
4615
4860
  }, {
4616
4861
  default: () => [slotValue]
4617
4862
  });
@@ -7752,6 +7997,126 @@ function useList() {
7752
7997
  return inject$1(ListKey, null);
7753
7998
  }
7754
7999
 
8000
+ /* eslint-disable sonarjs/no-identical-functions */
8001
+ // Utilities
8002
+ const independentActiveStrategy = mandatory => {
8003
+ const strategy = {
8004
+ activate: _ref => {
8005
+ let {
8006
+ id,
8007
+ value,
8008
+ activated
8009
+ } = _ref;
8010
+ id = toRaw(id);
8011
+
8012
+ // When mandatory and we're trying to deselect when id
8013
+ // is the only currently selected item then do nothing
8014
+ if (mandatory && !value && activated.size === 1 && activated.has(id)) return activated;
8015
+ if (value) {
8016
+ activated.add(id);
8017
+ } else {
8018
+ activated.delete(id);
8019
+ }
8020
+ return activated;
8021
+ },
8022
+ in: (v, children, parents) => {
8023
+ let set = new Set();
8024
+ for (const id of v || []) {
8025
+ set = strategy.activate({
8026
+ id,
8027
+ value: true,
8028
+ activated: new Set(set),
8029
+ children,
8030
+ parents
8031
+ });
8032
+ }
8033
+ return set;
8034
+ },
8035
+ out: v => {
8036
+ return Array.from(v);
8037
+ }
8038
+ };
8039
+ return strategy;
8040
+ };
8041
+ const independentSingleActiveStrategy = mandatory => {
8042
+ const parentStrategy = independentActiveStrategy(mandatory);
8043
+ const strategy = {
8044
+ activate: _ref2 => {
8045
+ let {
8046
+ activated,
8047
+ id,
8048
+ ...rest
8049
+ } = _ref2;
8050
+ id = toRaw(id);
8051
+ const singleSelected = activated.has(id) ? new Set([id]) : new Set();
8052
+ return parentStrategy.activate({
8053
+ ...rest,
8054
+ id,
8055
+ activated: singleSelected
8056
+ });
8057
+ },
8058
+ in: (v, children, parents) => {
8059
+ let set = new Set();
8060
+ if (v?.length) {
8061
+ set = parentStrategy.in(v.slice(0, 1), children, parents);
8062
+ }
8063
+ return set;
8064
+ },
8065
+ out: (v, children, parents) => {
8066
+ return parentStrategy.out(v, children, parents);
8067
+ }
8068
+ };
8069
+ return strategy;
8070
+ };
8071
+ const leafActiveStrategy = mandatory => {
8072
+ const parentStrategy = independentActiveStrategy(mandatory);
8073
+ const strategy = {
8074
+ activate: _ref3 => {
8075
+ let {
8076
+ id,
8077
+ activated,
8078
+ children,
8079
+ ...rest
8080
+ } = _ref3;
8081
+ id = toRaw(id);
8082
+ if (children.has(id)) return activated;
8083
+ return parentStrategy.activate({
8084
+ id,
8085
+ activated,
8086
+ children,
8087
+ ...rest
8088
+ });
8089
+ },
8090
+ in: parentStrategy.in,
8091
+ out: parentStrategy.out
8092
+ };
8093
+ return strategy;
8094
+ };
8095
+ const leafSingleActiveStrategy = mandatory => {
8096
+ const parentStrategy = independentSingleActiveStrategy(mandatory);
8097
+ const strategy = {
8098
+ activate: _ref4 => {
8099
+ let {
8100
+ id,
8101
+ activated,
8102
+ children,
8103
+ ...rest
8104
+ } = _ref4;
8105
+ id = toRaw(id);
8106
+ if (children.has(id)) return activated;
8107
+ return parentStrategy.activate({
8108
+ id,
8109
+ activated,
8110
+ children,
8111
+ ...rest
8112
+ });
8113
+ },
8114
+ in: parentStrategy.in,
8115
+ out: parentStrategy.out
8116
+ };
8117
+ return strategy;
8118
+ };
8119
+
7755
8120
  const singleOpenStrategy = {
7756
8121
  open: _ref => {
7757
8122
  let {
@@ -7836,7 +8201,8 @@ const independentSelectStrategy = mandatory => {
7836
8201
  if (mandatory && !value) {
7837
8202
  const on = Array.from(selected.entries()).reduce((arr, _ref2) => {
7838
8203
  let [key, value] = _ref2;
7839
- return value === 'on' ? [...arr, key] : arr;
8204
+ if (value === 'on') arr.push(key);
8205
+ return arr;
7840
8206
  }, []);
7841
8207
  if (on.length === 1 && on[0] === id) return selected;
7842
8208
  }
@@ -7978,7 +8344,8 @@ const classicSelectStrategy = mandatory => {
7978
8344
  if (mandatory && !value) {
7979
8345
  const on = Array.from(selected.entries()).reduce((arr, _ref7) => {
7980
8346
  let [key, value] = _ref7;
7981
- return value === 'on' ? [...arr, key] : arr;
8347
+ if (value === 'on') arr.push(key);
8348
+ return arr;
7982
8349
  }, []);
7983
8350
  if (on.length === 0) return original;
7984
8351
  }
@@ -8022,16 +8389,24 @@ const emptyNested = {
8022
8389
  children: ref(new Map()),
8023
8390
  open: () => null,
8024
8391
  openOnSelect: () => null,
8392
+ activate: () => null,
8025
8393
  select: () => null,
8394
+ activatable: ref(false),
8395
+ selectable: ref(false),
8026
8396
  opened: ref(new Set()),
8397
+ activated: ref(new Set()),
8027
8398
  selected: ref(new Map()),
8028
8399
  selectedValues: ref([])
8029
8400
  }
8030
8401
  };
8031
8402
  const makeNestedProps = propsFactory({
8403
+ activatable: Boolean,
8404
+ selectable: Boolean,
8405
+ activeStrategy: [String, Function],
8032
8406
  selectStrategy: [String, Function],
8033
8407
  openStrategy: [String, Object],
8034
8408
  opened: Array,
8409
+ activated: Array,
8035
8410
  selected: Array,
8036
8411
  mandatory: Boolean
8037
8412
  }, 'nested');
@@ -8040,6 +8415,20 @@ const useNested = props => {
8040
8415
  const children = ref(new Map());
8041
8416
  const parents = ref(new Map());
8042
8417
  const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
8418
+ const activeStrategy = computed(() => {
8419
+ if (typeof props.activeStrategy === 'object') return props.activeStrategy;
8420
+ switch (props.activeStrategy) {
8421
+ case 'leaf':
8422
+ return leafActiveStrategy(props.mandatory);
8423
+ case 'single-leaf':
8424
+ return leafSingleActiveStrategy(props.mandatory);
8425
+ case 'independent':
8426
+ return independentActiveStrategy(props.mandatory);
8427
+ case 'single-independent':
8428
+ default:
8429
+ return independentSingleActiveStrategy(props.mandatory);
8430
+ }
8431
+ });
8043
8432
  const selectStrategy = computed(() => {
8044
8433
  if (typeof props.selectStrategy === 'object') return props.selectStrategy;
8045
8434
  switch (props.selectStrategy) {
@@ -8068,6 +8457,7 @@ const useNested = props => {
8068
8457
  return multipleOpenStrategy;
8069
8458
  }
8070
8459
  });
8460
+ 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));
8071
8461
  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));
8072
8462
  onBeforeUnmount(() => {
8073
8463
  isUnmounted = true;
@@ -8086,6 +8476,9 @@ const useNested = props => {
8086
8476
  id: shallowRef(),
8087
8477
  root: {
8088
8478
  opened,
8479
+ activatable: toRef(props, 'activatable'),
8480
+ selectable: toRef(props, 'selectable'),
8481
+ activated,
8089
8482
  selected,
8090
8483
  selectedValues: computed(() => {
8091
8484
  const arr = [];
@@ -8159,6 +8552,26 @@ const useNested = props => {
8159
8552
  newSelected && (selected.value = newSelected);
8160
8553
  nested.root.openOnSelect(id, value, event);
8161
8554
  },
8555
+ activate: (id, value, event) => {
8556
+ if (!props.activatable) {
8557
+ return nested.root.select(id, true, event);
8558
+ }
8559
+ vm.emit('click:activate', {
8560
+ id,
8561
+ value,
8562
+ path: getPath(id),
8563
+ event
8564
+ });
8565
+ const newActivated = activeStrategy.value.activate({
8566
+ id,
8567
+ value,
8568
+ activated: new Set(activated.value),
8569
+ children: children.value,
8570
+ parents: parents.value,
8571
+ event
8572
+ });
8573
+ newActivated && (activated.value = newActivated);
8574
+ },
8162
8575
  children,
8163
8576
  parents
8164
8577
  }
@@ -8177,6 +8590,8 @@ const useNestedItem = (id, isGroup) => {
8177
8590
  openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
8178
8591
  isOpen: computed(() => parent.root.opened.value.has(computedId.value)),
8179
8592
  parent: computed(() => parent.root.parents.value.get(computedId.value)),
8593
+ activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
8594
+ isActivated: computed(() => parent.root.activated.value.has(toRaw(computedId.value))),
8180
8595
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
8181
8596
  isSelected: computed(() => parent.root.selected.value.get(toRaw(computedId.value)) === 'on'),
8182
8597
  isIndeterminate: computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
@@ -8299,7 +8714,9 @@ const VListGroup = genericComponent()({
8299
8714
  }, [slots.default?.()]), [[vShow, isOpen.value]])]
8300
8715
  })]
8301
8716
  }));
8302
- return {};
8717
+ return {
8718
+ isOpen
8719
+ };
8303
8720
  }
8304
8721
  });
8305
8722
 
@@ -8372,6 +8789,8 @@ const VListItem = genericComponent()({
8372
8789
  const link = useLink(props, attrs);
8373
8790
  const id = computed(() => props.value === undefined ? link.href.value : props.value);
8374
8791
  const {
8792
+ activate,
8793
+ isActivated,
8375
8794
  select,
8376
8795
  isSelected,
8377
8796
  isIndeterminate,
@@ -8381,9 +8800,9 @@ const VListItem = genericComponent()({
8381
8800
  openOnSelect
8382
8801
  } = useNestedItem(id, false);
8383
8802
  const list = useList();
8384
- const isActive = computed(() => props.active !== false && (props.active || link.isActive?.value || isSelected.value));
8803
+ const isActive = computed(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));
8385
8804
  const isLink = computed(() => props.link !== false && link.isLink.value);
8386
- const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!list));
8805
+ const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || !!list && (root.selectable.value || root.activatable.value || props.value != null)));
8387
8806
  const roundedProps = computed(() => props.rounded || props.nav);
8388
8807
  const color = computed(() => props.color ?? props.activeColor);
8389
8808
  const variantProps = computed(() => ({
@@ -8434,7 +8853,13 @@ const VListItem = genericComponent()({
8434
8853
  emit('click', e);
8435
8854
  if (isGroupActivator || !isClickable.value) return;
8436
8855
  link.navigate?.(e);
8437
- props.value != null && select(!isSelected.value, e);
8856
+ if (root.activatable.value) {
8857
+ activate(!isActivated.value, e);
8858
+ } else if (root.selectable.value) {
8859
+ select(!isSelected.value, e);
8860
+ } else if (props.value != null) {
8861
+ select(!isSelected.value, e);
8862
+ }
8438
8863
  }
8439
8864
  function onKeyDown(e) {
8440
8865
  if (e.key === 'Enter' || e.key === ' ') {
@@ -8550,7 +8975,12 @@ const VListItem = genericComponent()({
8550
8975
  }, null)])]
8551
8976
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
8552
8977
  });
8553
- return {};
8978
+ return {
8979
+ isGroupActivator,
8980
+ isSelected,
8981
+ list,
8982
+ select
8983
+ };
8554
8984
  }
8555
8985
  });
8556
8986
 
@@ -8892,8 +9322,10 @@ const VList = genericComponent()({
8892
9322
  props: makeVListProps(),
8893
9323
  emits: {
8894
9324
  'update:selected': value => true,
9325
+ 'update:activated': value => true,
8895
9326
  'update:opened': value => true,
8896
9327
  'click:open': value => true,
9328
+ 'click:activate': value => true,
8897
9329
  'click:select': value => true
8898
9330
  },
8899
9331
  setup(props, _ref) {
@@ -8926,7 +9358,9 @@ const VList = genericComponent()({
8926
9358
  roundedClasses
8927
9359
  } = useRounded(props);
8928
9360
  const {
9361
+ children,
8929
9362
  open,
9363
+ parents,
8930
9364
  select
8931
9365
  } = useNested(props);
8932
9366
  const lineClasses = computed(() => props.lines ? `v-list--${props.lines}-line` : undefined);
@@ -9016,7 +9450,9 @@ const VList = genericComponent()({
9016
9450
  return {
9017
9451
  open,
9018
9452
  select,
9019
- focus
9453
+ focus,
9454
+ children,
9455
+ parents
9020
9456
  };
9021
9457
  }
9022
9458
  });
@@ -9558,7 +9994,7 @@ function useScrollStrategies(props, data) {
9558
9994
  scope?.stop();
9559
9995
  if (!(data.isActive.value && props.scrollStrategy)) return;
9560
9996
  scope = effectScope();
9561
- await nextTick();
9997
+ await new Promise(resolve => setTimeout(resolve));
9562
9998
  scope.active && scope.run(() => {
9563
9999
  if (typeof props.scrollStrategy === 'function') {
9564
10000
  props.scrollStrategy(data, props, scope);
@@ -10307,6 +10743,7 @@ const VOverlay = genericComponent()({
10307
10743
  if (v) isActive.value = false;
10308
10744
  });
10309
10745
  const root = ref();
10746
+ const scrimEl = ref();
10310
10747
  const contentEl = ref();
10311
10748
  const {
10312
10749
  contentStyles,
@@ -10328,8 +10765,10 @@ const VOverlay = genericComponent()({
10328
10765
  emit('click:outside', e);
10329
10766
  if (!props.persistent) isActive.value = false;else animateClick();
10330
10767
  }
10331
- function closeConditional() {
10332
- return isActive.value && globalTop.value;
10768
+ function closeConditional(e) {
10769
+ return isActive.value && globalTop.value && (
10770
+ // If using scrim, only close if clicking on it rather than anything opened on top
10771
+ !props.scrim || e.target === scrimEl.value);
10333
10772
  }
10334
10773
  IN_BROWSER && watch(isActive, val => {
10335
10774
  if (val) {
@@ -10416,7 +10855,8 @@ const VOverlay = genericComponent()({
10416
10855
  "ref": root
10417
10856
  }, scopeId, attrs), [createVNode(Scrim, mergeProps({
10418
10857
  "color": scrimColor,
10419
- "modelValue": isActive.value && !!props.scrim
10858
+ "modelValue": isActive.value && !!props.scrim,
10859
+ "ref": scrimEl
10420
10860
  }, scrimEvents.value), null), createVNode(MaybeTransition, {
10421
10861
  "appear": true,
10422
10862
  "persisted": true,
@@ -10439,6 +10879,7 @@ const VOverlay = genericComponent()({
10439
10879
  })]));
10440
10880
  return {
10441
10881
  activatorEl,
10882
+ scrimEl,
10442
10883
  target,
10443
10884
  animateClick,
10444
10885
  contentEl,
@@ -10634,6 +11075,9 @@ const VMenu = genericComponent()({
10634
11075
  isActive.value = false;
10635
11076
  overlay.value?.activatorEl?.focus();
10636
11077
  }
11078
+ } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11079
+ isActive.value = false;
11080
+ parent?.closeParents();
10637
11081
  }
10638
11082
  }
10639
11083
  function onActivatorKeydown(e) {
@@ -10911,7 +11355,7 @@ const VField = genericComponent()({
10911
11355
  }
10912
11356
  useRender(() => {
10913
11357
  const isOutlined = props.variant === 'outlined';
10914
- const hasPrepend = slots['prepend-inner'] || props.prependInnerIcon;
11358
+ const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon);
10915
11359
  const hasClear = !!(props.clearable || slots.clear);
10916
11360
  const hasAppend = !!(slots['append-inner'] || props.appendInnerIcon || hasClear);
10917
11361
  const label = () => slots.label ? slots.label({
@@ -11896,9 +12340,11 @@ const VSelect = genericComponent()({
11896
12340
  });
11897
12341
  }
11898
12342
  });
11899
- watch(() => props.items, val => {
11900
- if (!isFocused.value || !val.length || menu.value) return;
11901
- menu.value = true;
12343
+ watch(() => props.items, (newVal, oldVal) => {
12344
+ if (menu.value) return;
12345
+ if (isFocused.value && !oldVal.length && newVal.length) {
12346
+ menu.value = true;
12347
+ }
11902
12348
  });
11903
12349
  useRender(() => {
11904
12350
  const hasChips = !!(props.chips || slots.chip);
@@ -12333,8 +12779,8 @@ const VAutocomplete = genericComponent()({
12333
12779
  if (e.key === 'ArrowDown' && highlightFirst.value) {
12334
12780
  listRef.value?.focus('next');
12335
12781
  }
12336
- if (!props.multiple) return;
12337
12782
  if (['Backspace', 'Delete'].includes(e.key)) {
12783
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
12338
12784
  if (selectionIndex.value < 0) {
12339
12785
  if (e.key === 'Backspace' && !search.value) {
12340
12786
  selectionIndex.value = length - 1;
@@ -12342,10 +12788,10 @@ const VAutocomplete = genericComponent()({
12342
12788
  return;
12343
12789
  }
12344
12790
  const originalSelectionIndex = selectionIndex.value;
12345
- const selectedItem = model.value[selectionIndex.value];
12346
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
12791
+ select(model.value[selectionIndex.value], false);
12347
12792
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
12348
12793
  }
12794
+ if (!props.multiple) return;
12349
12795
  if (e.key === 'ArrowLeft') {
12350
12796
  if (selectionIndex.value < 0 && selectionStart > 0) return;
12351
12797
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -12398,7 +12844,7 @@ const VAutocomplete = genericComponent()({
12398
12844
  /** @param set - null means toggle */
12399
12845
  function select(item) {
12400
12846
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12401
- if (item.props.disabled) return;
12847
+ if (!item || item.props.disabled) return;
12402
12848
  if (props.multiple) {
12403
12849
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12404
12850
  const add = set == null ? !~index : set;
@@ -12458,9 +12904,11 @@ const VAutocomplete = genericComponent()({
12458
12904
  });
12459
12905
  }
12460
12906
  });
12461
- watch(() => props.items, val => {
12462
- if (!isFocused.value || !val.length || menu.value) return;
12463
- menu.value = true;
12907
+ watch(() => props.items, (newVal, oldVal) => {
12908
+ if (menu.value) return;
12909
+ if (isFocused.value && !oldVal.length && newVal.length) {
12910
+ menu.value = true;
12911
+ }
12464
12912
  });
12465
12913
  useRender(() => {
12466
12914
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -16117,6 +16565,7 @@ const VCombobox = genericComponent()({
16117
16565
  }
16118
16566
  menu.value = !menu.value;
16119
16567
  }
16568
+ // eslint-disable-next-line complexity
16120
16569
  function onKeydown(e) {
16121
16570
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
16122
16571
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -16143,8 +16592,8 @@ const VCombobox = genericComponent()({
16143
16592
  select(transformItem$3(props, search.value));
16144
16593
  if (hasSelectionSlot.value) _search.value = '';
16145
16594
  }
16146
- if (!props.multiple) return;
16147
16595
  if (['Backspace', 'Delete'].includes(e.key)) {
16596
+ if (!props.multiple && hasSelectionSlot.value && model.value.length > 0) return select(model.value[0], false);
16148
16597
  if (selectionIndex.value < 0) {
16149
16598
  if (e.key === 'Backspace' && !search.value) {
16150
16599
  selectionIndex.value = length - 1;
@@ -16152,10 +16601,10 @@ const VCombobox = genericComponent()({
16152
16601
  return;
16153
16602
  }
16154
16603
  const originalSelectionIndex = selectionIndex.value;
16155
- const selectedItem = model.value[selectionIndex.value];
16156
- if (selectedItem && !selectedItem.props.disabled) select(selectedItem, false);
16604
+ select(model.value[selectionIndex.value], false);
16157
16605
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
16158
16606
  }
16607
+ if (!props.multiple) return;
16159
16608
  if (e.key === 'ArrowLeft') {
16160
16609
  if (selectionIndex.value < 0 && selectionStart > 0) return;
16161
16610
  const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
@@ -16186,7 +16635,7 @@ const VCombobox = genericComponent()({
16186
16635
  /** @param set - null means toggle */
16187
16636
  function select(item) {
16188
16637
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16189
- if (item.props.disabled) return;
16638
+ if (!item || item.props.disabled) return;
16190
16639
  if (props.multiple) {
16191
16640
  const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
16192
16641
  const add = set == null ? !~index : set;
@@ -16263,9 +16712,11 @@ const VCombobox = genericComponent()({
16263
16712
  });
16264
16713
  }
16265
16714
  });
16266
- watch(() => props.items, val => {
16267
- if (!isFocused.value || !val.length || menu.value) return;
16268
- menu.value = true;
16715
+ watch(() => props.items, (newVal, oldVal) => {
16716
+ if (menu.value) return;
16717
+ if (isFocused.value && !oldVal.length && newVal.length) {
16718
+ menu.value = true;
16719
+ }
16269
16720
  });
16270
16721
  useRender(() => {
16271
16722
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -17412,7 +17863,7 @@ function setYear(date, year) {
17412
17863
  return d;
17413
17864
  }
17414
17865
  function startOfDay(date) {
17415
- return new Date(date.getFullYear(), date.getMonth(), date.getDate());
17866
+ return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);
17416
17867
  }
17417
17868
  function endOfDay(date) {
17418
17869
  return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
@@ -20286,6 +20737,7 @@ const VDatePickerControls = genericComponent()({
20286
20737
  emit('click:month');
20287
20738
  }
20288
20739
  useRender(() => {
20740
+ // TODO: add slot support and scope defaults
20289
20741
  return createVNode("div", {
20290
20742
  "class": ['v-date-picker-controls']
20291
20743
  }, [createVNode(VBtn, {
@@ -20564,6 +21016,12 @@ const VDatePickerMonth = genericComponent()({
20564
21016
  const adapter = useDate();
20565
21017
  const rangeStart = shallowRef();
20566
21018
  const rangeStop = shallowRef();
21019
+ if (props.multiple === 'range' && model.value.length > 0) {
21020
+ rangeStart.value = model.value[0];
21021
+ if (model.value.length > 1) {
21022
+ rangeStop.value = model.value[model.value.length - 1];
21023
+ }
21024
+ }
20567
21025
  const atMax = computed(() => {
20568
21026
  const max = ['number', 'string'].includes(typeof props.multiple) ? Number(props.multiple) : Infinity;
20569
21027
  return model.value.length >= max;
@@ -20574,15 +21032,15 @@ const VDatePickerMonth = genericComponent()({
20574
21032
  rangeStart.value = _value;
20575
21033
  model.value = [rangeStart.value];
20576
21034
  } else if (!rangeStop.value) {
20577
- if (adapter.isSameDay(value, rangeStart.value)) {
21035
+ if (adapter.isSameDay(_value, rangeStart.value)) {
20578
21036
  rangeStart.value = undefined;
20579
21037
  model.value = [];
20580
21038
  return;
20581
- } else if (adapter.isBefore(value, rangeStart.value)) {
20582
- rangeStop.value = rangeStart.value;
21039
+ } else if (adapter.isBefore(_value, rangeStart.value)) {
21040
+ rangeStop.value = adapter.endOfDay(rangeStart.value);
20583
21041
  rangeStart.value = _value;
20584
21042
  } else {
20585
- rangeStop.value = _value;
21043
+ rangeStop.value = adapter.endOfDay(_value);
20586
21044
  }
20587
21045
  const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
20588
21046
  const datesInRange = [rangeStart.value];
@@ -22749,12 +23207,24 @@ const VNavigationDrawer = genericComponent()({
22749
23207
  default: () => [hasImage && createVNode("div", {
22750
23208
  "key": "image",
22751
23209
  "class": "v-navigation-drawer__img"
22752
- }, [slots.image ? slots.image?.({
22753
- image: props.image
22754
- }) : createVNode("img", {
22755
- "src": props.image,
22756
- "alt": ""
22757
- }, null)]), slots.prepend && createVNode("div", {
23210
+ }, [!slots.image ? createVNode(VImg, {
23211
+ "key": "image-img",
23212
+ "alt": "",
23213
+ "cover": true,
23214
+ "height": "inherit",
23215
+ "src": props.image
23216
+ }, null) : createVNode(VDefaultsProvider, {
23217
+ "key": "image-defaults",
23218
+ "disabled": !props.image,
23219
+ "defaults": {
23220
+ VImg: {
23221
+ alt: '',
23222
+ cover: true,
23223
+ height: 'inherit',
23224
+ src: props.image
23225
+ }
23226
+ }
23227
+ }, slots.image)]), slots.prepend && createVNode("div", {
22758
23228
  "class": "v-navigation-drawer__prepend"
22759
23229
  }, [slots.prepend?.()]), createVNode("div", {
22760
23230
  "class": "v-navigation-drawer__content"
@@ -22855,7 +23325,7 @@ const VOtpInput = genericComponent()({
22855
23325
  function onInput() {
22856
23326
  // The maxlength attribute doesn't work for the number type input, so the text type is used.
22857
23327
  // The following logic simulates the behavior of a number input.
22858
- if (props.type === 'number' && /[^0-9]/g.test(current.value.value)) {
23328
+ if (isValidNumber(current.value.value)) {
22859
23329
  current.value.value = '';
22860
23330
  return;
22861
23331
  }
@@ -22901,7 +23371,9 @@ const VOtpInput = genericComponent()({
22901
23371
  function onPaste(index, e) {
22902
23372
  e.preventDefault();
22903
23373
  e.stopPropagation();
22904
- model.value = (e?.clipboardData?.getData('Text') ?? '').split('');
23374
+ const clipboardText = e?.clipboardData?.getData('Text') ?? '';
23375
+ if (!isValidNumber(clipboardText)) return;
23376
+ model.value = clipboardText.split('');
22905
23377
  inputRef.value?.[index].blur();
22906
23378
  }
22907
23379
  function reset() {
@@ -22915,6 +23387,9 @@ const VOtpInput = genericComponent()({
22915
23387
  blur();
22916
23388
  focusIndex.value = -1;
22917
23389
  }
23390
+ function isValidNumber(value) {
23391
+ return props.type === 'number' && !isNaN(Number(value));
23392
+ }
22918
23393
  provideDefaults({
22919
23394
  VField: {
22920
23395
  color: computed(() => props.color),
@@ -25773,7 +26248,7 @@ function createVuetify$1() {
25773
26248
  goTo
25774
26249
  };
25775
26250
  }
25776
- const version$1 = "3.5.8";
26251
+ const version$1 = "3.5.10";
25777
26252
  createVuetify$1.version = version$1;
25778
26253
 
25779
26254
  // Vue's inject() can only be used in setup
@@ -25798,8 +26273,8 @@ const createVuetify = function () {
25798
26273
  ...options
25799
26274
  });
25800
26275
  };
25801
- const version = "3.5.8";
26276
+ const version = "3.5.10";
25802
26277
  createVuetify.version = version;
25803
26278
 
25804
- export { components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
26279
+ export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
25805
26280
  //# sourceMappingURL=vuetify.esm.js.map