vuetify 3.3.16 → 3.3.18

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 (120) hide show
  1. package/dist/json/attributes.json +1274 -1266
  2. package/dist/json/importMap.json +12 -12
  3. package/dist/json/tags.json +14 -7
  4. package/dist/json/web-types.json +2041 -2437
  5. package/dist/vuetify-labs.css +59 -30
  6. package/dist/vuetify-labs.d.ts +1717 -3099
  7. package/dist/vuetify-labs.esm.js +157 -100
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +156 -99
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +221 -227
  12. package/dist/vuetify.d.ts +53 -53
  13. package/dist/vuetify.esm.js +63 -41
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +63 -41
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +36 -32
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/blueprints/md3.mjs +3 -0
  21. package/lib/blueprints/md3.mjs.map +1 -1
  22. package/lib/components/VApp/VApp.mjs +1 -2
  23. package/lib/components/VApp/VApp.mjs.map +1 -1
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +4 -2
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.mts +12 -12
  27. package/lib/components/VCombobox/VCombobox.mjs +4 -2
  28. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  29. package/lib/components/VCombobox/index.d.mts +12 -12
  30. package/lib/components/VList/VList.mjs +2 -1
  31. package/lib/components/VList/VList.mjs.map +1 -1
  32. package/lib/components/VList/VListChildren.mjs +10 -3
  33. package/lib/components/VList/VListChildren.mjs.map +1 -1
  34. package/lib/components/VList/index.d.mts +10 -10
  35. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -2
  36. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  37. package/lib/components/VSelect/VSelect.mjs +3 -1
  38. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  39. package/lib/components/VSelect/index.d.mts +12 -12
  40. package/lib/components/VSelectionControl/VSelectionControl.css +0 -1
  41. package/lib/components/VSelectionControl/VSelectionControl.sass +0 -1
  42. package/lib/components/VSlider/VSlider.mjs +2 -2
  43. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  44. package/lib/components/VTable/VTable.css +4 -2
  45. package/lib/components/VTable/VTable.sass +3 -1
  46. package/lib/components/VTable/_variables.scss +1 -1
  47. package/lib/components/VTabs/VTabs.mjs +4 -4
  48. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  49. package/lib/components/VTabs/index.d.mts +1 -1
  50. package/lib/components/VTextField/VTextField.mjs +2 -2
  51. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  52. package/lib/components/VTextField/index.d.mts +6 -6
  53. package/lib/components/VTimeline/VTimeline.css +15 -22
  54. package/lib/components/VTimeline/VTimeline.sass +15 -25
  55. package/lib/components/index.d.mts +50 -50
  56. package/lib/composables/color.mjs +7 -4
  57. package/lib/composables/color.mjs.map +1 -1
  58. package/lib/composables/layout.mjs +1 -1
  59. package/lib/composables/layout.mjs.map +1 -1
  60. package/lib/composables/theme.mjs +0 -11
  61. package/lib/composables/theme.mjs.map +1 -1
  62. package/lib/entry-bundler.mjs +1 -1
  63. package/lib/framework.mjs +1 -1
  64. package/lib/index.d.mts +3 -3
  65. package/lib/labs/VBottomSheet/VBottomSheet.mjs +3 -2
  66. package/lib/labs/VBottomSheet/VBottomSheet.mjs.map +1 -1
  67. package/lib/labs/VBottomSheet/index.d.mts +3 -11
  68. package/lib/labs/VDataIterator/index.d.mts +66 -48
  69. package/lib/labs/VDataTable/VDataTableRow.mjs +8 -6
  70. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  71. package/lib/labs/VDataTable/VDataTableRows.mjs +4 -2
  72. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  73. package/lib/labs/VDataTable/VDataTableServer.mjs +1 -2
  74. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  75. package/lib/labs/VDataTable/VDataTableVirtual.mjs +1 -2
  76. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  77. package/lib/labs/VDataTable/composables/headers.mjs +5 -7
  78. package/lib/labs/VDataTable/composables/headers.mjs.map +1 -1
  79. package/lib/labs/VDataTable/composables/items.mjs +1 -1
  80. package/lib/labs/VDataTable/composables/items.mjs.map +1 -1
  81. package/lib/labs/VDataTable/composables/select.mjs +15 -9
  82. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  83. package/lib/labs/VDataTable/composables/sort.mjs +1 -0
  84. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  85. package/lib/labs/VDataTable/index.d.mts +1135 -2614
  86. package/lib/labs/VDataTable/types.mjs.map +1 -1
  87. package/lib/labs/VDateInput/index.d.mts +6 -6
  88. package/lib/labs/VDatePicker/VDatePicker.mjs +17 -7
  89. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  90. package/lib/labs/VDatePicker/VDatePickerControls.css +29 -2
  91. package/lib/labs/VDatePicker/VDatePickerControls.mjs +18 -17
  92. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
  93. package/lib/labs/VDatePicker/VDatePickerControls.sass +30 -2
  94. package/lib/labs/VDatePicker/VDatePickerHeader.css +10 -1
  95. package/lib/labs/VDatePicker/VDatePickerHeader.mjs +12 -4
  96. package/lib/labs/VDatePicker/VDatePickerHeader.mjs.map +1 -1
  97. package/lib/labs/VDatePicker/VDatePickerHeader.sass +11 -1
  98. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +1 -2
  99. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  100. package/lib/labs/VDatePicker/VDatePickerYears.mjs +1 -1
  101. package/lib/labs/VDatePicker/VDatePickerYears.mjs.map +1 -1
  102. package/lib/labs/VDatePicker/index.d.mts +184 -101
  103. package/lib/labs/VDateRangePicker/index.d.mts +67 -61
  104. package/lib/labs/VOtpInput/VOtpInput.mjs +1 -1
  105. package/lib/labs/VOtpInput/VOtpInput.mjs.map +1 -1
  106. package/lib/labs/VPicker/VPicker.css +0 -1
  107. package/lib/labs/VPicker/VPicker.mjs +16 -5
  108. package/lib/labs/VPicker/VPicker.mjs.map +1 -1
  109. package/lib/labs/VPicker/VPicker.sass +1 -1
  110. package/lib/labs/VPicker/index.d.mts +47 -35
  111. package/lib/labs/components.d.mts +3460 -4841
  112. package/lib/labs/date/adapters/vuetify.mjs +7 -2
  113. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  114. package/lib/locale/pl.mjs +14 -14
  115. package/lib/locale/pl.mjs.map +1 -1
  116. package/lib/util/colorUtils.mjs +11 -0
  117. package/lib/util/colorUtils.mjs.map +1 -1
  118. package/lib/util/helpers.mjs +2 -1
  119. package/lib/util/helpers.mjs.map +1 -1
  120. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.3.16
2
+ * Vuetify v3.3.18
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, warn, ref, unref, 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, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onBeforeUpdate, vModelText, withModifiers } from 'vue';
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, warn, ref, unref, 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, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onBeforeUpdate, vModelText, withModifiers, toDisplayString } from 'vue';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -123,7 +123,8 @@ function getObjectValueByPath(obj, path, fallback) {
123
123
  return getNestedValue(obj, path.split('.'), fallback);
124
124
  }
125
125
  function getPropertyFromItem(item, property, fallback) {
126
- if (property == null) return item === undefined ? fallback : item;
126
+ if (property === true) return item === undefined ? fallback : item;
127
+ if (property == null || typeof property === 'boolean') return fallback;
127
128
  if (item !== Object(item)) {
128
129
  if (typeof property !== 'function') return fallback;
129
130
  const value = property(item, fallback);
@@ -1113,6 +1114,17 @@ function getContrast(first, second) {
1113
1114
  function getForeground(color) {
1114
1115
  const blackContrast = Math.abs(APCAcontrast(parseColor(0), parseColor(color)));
1115
1116
  const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), parseColor(color)));
1117
+
1118
+ // TODO: warn about poor color selections
1119
+ // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))
1120
+ // const minContrast = Math.max(blackContrast, whiteContrast)
1121
+ // if (minContrast < 60) {
1122
+ // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)
1123
+ // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {
1124
+ // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)
1125
+ // }
1126
+
1127
+ // Prefer white text if both have an acceptable contrast ratio
1116
1128
  return whiteContrast > Math.min(blackContrast, 50) ? '#fff' : '#000';
1117
1129
  }
1118
1130
 
@@ -1710,7 +1722,7 @@ function createLayout(props) {
1710
1722
  'v-layout--full-height': props.fullHeight
1711
1723
  }]);
1712
1724
  const layoutStyles = computed(() => ({
1713
- zIndex: rootZIndex.value,
1725
+ zIndex: parentLayout ? rootZIndex.value : undefined,
1714
1726
  position: parentLayout ? 'relative' : undefined,
1715
1727
  overflow: parentLayout ? 'hidden' : undefined
1716
1728
  }));
@@ -2231,17 +2243,6 @@ function createTheme(options) {
2231
2243
  if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
2232
2244
  const onColor = `on-${color}`;
2233
2245
  const colorVal = parseColor(theme.colors[color]);
2234
-
2235
- // TODO: warn about poor color selections
2236
- // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))
2237
- // const minContrast = Math.max(blackContrast, whiteContrast)
2238
- // if (minContrast < 60) {
2239
- // consoleInfo(`${key} theme color ${color} has poor contrast (${minContrast.toFixed()}%)`)
2240
- // } else if (contrastAsText < 60 && !['background', 'surface'].includes(color)) {
2241
- // consoleInfo(`${key} theme color ${color} has poor contrast as text (${contrastAsText.toFixed()}%)`)
2242
- // }
2243
-
2244
- // Prefer white text if both have an acceptable contrast ratio
2245
2246
  theme.colors[onColor] = getForeground(colorVal);
2246
2247
  }
2247
2248
  }
@@ -2401,7 +2402,6 @@ const VApp = genericComponent()({
2401
2402
  const theme = provideTheme(props);
2402
2403
  const {
2403
2404
  layoutClasses,
2404
- layoutStyles,
2405
2405
  getLayoutItem,
2406
2406
  items,
2407
2407
  layoutRef
@@ -2412,7 +2412,7 @@ const VApp = genericComponent()({
2412
2412
  useRender(() => createVNode("div", {
2413
2413
  "ref": layoutRef,
2414
2414
  "class": ['v-application', theme.themeClasses.value, layoutClasses.value, rtlClasses.value, props.class],
2415
- "style": [layoutStyles.value, props.style]
2415
+ "style": [props.style]
2416
2416
  }, [createVNode("div", {
2417
2417
  "class": "v-application__wrap"
2418
2418
  }, [slots.default?.()])]));
@@ -3274,9 +3274,12 @@ function useColor(colors) {
3274
3274
  if (isCssColor(colors.value.background)) {
3275
3275
  styles.backgroundColor = colors.value.background;
3276
3276
  if (!colors.value.text) {
3277
- const textColor = getForeground(styles.backgroundColor);
3278
- styles.color = textColor;
3279
- styles.caretColor = textColor;
3277
+ const backgroundColor = parseColor(colors.value.background);
3278
+ if (backgroundColor.a == null || backgroundColor.a === 1) {
3279
+ const textColor = getForeground(backgroundColor);
3280
+ styles.color = textColor;
3281
+ styles.caretColor = textColor;
3282
+ }
3280
3283
  }
3281
3284
  } else {
3282
3285
  classes.push(`bg-${colors.value.background}`);
@@ -7885,7 +7888,8 @@ const VDivider = genericComponent()({
7885
7888
  // Types
7886
7889
 
7887
7890
  const makeVListChildrenProps = propsFactory({
7888
- items: Array
7891
+ items: Array,
7892
+ returnObject: Boolean
7889
7893
  }, 'VListChildren');
7890
7894
  const VListChildren = genericComponent()({
7891
7895
  name: 'VListChildren',
@@ -7943,14 +7947,20 @@ const VListChildren = genericComponent()({
7943
7947
  ...itemProps,
7944
7948
  ...activatorProps
7945
7949
  }
7946
- }) : createVNode(VListItem, mergeProps(itemProps, activatorProps), slotsWithItem);
7950
+ }) : createVNode(VListItem, mergeProps({
7951
+ "title": itemProps.title,
7952
+ "value": props.returnObject ? item : itemProps.value
7953
+ }, activatorProps), slotsWithItem);
7947
7954
  },
7948
7955
  default: () => createVNode(VListChildren, {
7949
7956
  "items": children
7950
7957
  }, slots)
7951
7958
  }) : slots.item ? slots.item({
7952
7959
  props: itemProps
7953
- }) : createVNode(VListItem, itemProps, slotsWithItem);
7960
+ }) : createVNode(VListItem, {
7961
+ "title": itemProps.title,
7962
+ "value": props.returnObject ? item : itemProps.value
7963
+ }, slotsWithItem);
7954
7964
  });
7955
7965
  }
7956
7966
  });
@@ -8234,7 +8244,8 @@ const VList = genericComponent()({
8234
8244
  "onKeydown": onKeydown
8235
8245
  }, {
8236
8246
  default: () => [createVNode(VListChildren, {
8237
- "items": items.value
8247
+ "items": items.value,
8248
+ "returnObject": props.returnObject
8238
8249
  }, slots)]
8239
8250
  });
8240
8251
  });
@@ -10351,7 +10362,7 @@ const activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week',
10351
10362
  const makeVTextFieldProps = propsFactory({
10352
10363
  autofocus: Boolean,
10353
10364
  counter: [Boolean, Number, String],
10354
- counterValue: Function,
10365
+ counterValue: [Number, Function],
10355
10366
  prefix: String,
10356
10367
  placeholder: String,
10357
10368
  persistentPlaceholder: Boolean,
@@ -10392,7 +10403,7 @@ const VTextField = genericComponent()({
10392
10403
  blur
10393
10404
  } = useFocus(props);
10394
10405
  const counterValue = computed(() => {
10395
- return typeof props.counterValue === 'function' ? props.counterValue(model.value) : (model.value ?? '').toString().length;
10406
+ return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : (model.value ?? '').toString().length;
10396
10407
  });
10397
10408
  const max = computed(() => {
10398
10409
  if (attrs.maxlength) return attrs.maxlength;
@@ -11046,6 +11057,7 @@ const VSelect = genericComponent()({
11046
11057
  "focused": isFocused.value,
11047
11058
  "onUpdate:focused": $event => isFocused.value = $event,
11048
11059
  "validationValue": model.externalValue,
11060
+ "counterValue": model.value.length,
11049
11061
  "dirty": isDirty,
11050
11062
  "class": ['v-select', {
11051
11063
  'v-select--active-menu': menu.value,
@@ -11152,7 +11164,8 @@ const VSelect = genericComponent()({
11152
11164
  "key": "chip",
11153
11165
  "closable": props.closableChips,
11154
11166
  "size": "small",
11155
- "text": item.title
11167
+ "text": item.title,
11168
+ "disabled": item.props.disabled
11156
11169
  }, slotProps), null) : createVNode(VDefaultsProvider, {
11157
11170
  "key": "chip-defaults",
11158
11171
  "defaults": {
@@ -11449,7 +11462,7 @@ const VAutocomplete = genericComponent()({
11449
11462
  }
11450
11463
  const originalSelectionIndex = selectionIndex.value;
11451
11464
  const selectedItem = model.value[selectionIndex.value];
11452
- if (selectedItem) select(selectedItem);
11465
+ if (selectedItem && !selectedItem.props.disabled) select(selectedItem);
11453
11466
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
11454
11467
  }
11455
11468
  if (e.key === 'ArrowLeft') {
@@ -11569,6 +11582,7 @@ const VAutocomplete = genericComponent()({
11569
11582
  "focused": isFocused.value,
11570
11583
  "onUpdate:focused": $event => isFocused.value = $event,
11571
11584
  "validationValue": model.externalValue,
11585
+ "counterValue": model.value.length,
11572
11586
  "dirty": isDirty,
11573
11587
  "onInput": onInput,
11574
11588
  "onChange": onChange,
@@ -11679,7 +11693,8 @@ const VAutocomplete = genericComponent()({
11679
11693
  "key": "chip",
11680
11694
  "closable": props.closableChips,
11681
11695
  "size": "small",
11682
- "text": item.title
11696
+ "text": item.title,
11697
+ "disabled": item.props.disabled
11683
11698
  }, slotProps), null) : createVNode(VDefaultsProvider, {
11684
11699
  "key": "chip-defaults",
11685
11700
  "defaults": {
@@ -14140,11 +14155,11 @@ const VSlider = genericComponent()({
14140
14155
  "focused": isFocused.value
14141
14156
  }), {
14142
14157
  ...slots,
14143
- prepend: hasPrepend ? slotProps => createVNode(Fragment, null, [slots.label?.(slotProps) ?? props.label ? createVNode(VLabel, {
14158
+ prepend: hasPrepend ? slotProps => createVNode(Fragment, null, [slots.label?.(slotProps) ?? (props.label ? createVNode(VLabel, {
14144
14159
  "id": slotProps.id.value,
14145
14160
  "class": "v-slider__label",
14146
14161
  "text": props.label
14147
- }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
14162
+ }, null) : undefined), slots.prepend?.(slotProps)]) : undefined,
14148
14163
  default: _ref4 => {
14149
14164
  let {
14150
14165
  id,
@@ -15018,7 +15033,7 @@ const VCombobox = genericComponent()({
15018
15033
  }
15019
15034
  const originalSelectionIndex = selectionIndex.value;
15020
15035
  const selectedItem = model.value[selectionIndex.value];
15021
- if (selectedItem) select(selectedItem);
15036
+ if (selectedItem && !selectedItem.props.disabled) select(selectedItem);
15022
15037
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
15023
15038
  }
15024
15039
  if (e.key === 'ArrowLeft') {
@@ -15126,6 +15141,7 @@ const VCombobox = genericComponent()({
15126
15141
  "focused": isFocused.value,
15127
15142
  "onUpdate:focused": $event => isFocused.value = $event,
15128
15143
  "validationValue": model.externalValue,
15144
+ "counterValue": props.multiple ? model.value.length : search.value.length,
15129
15145
  "dirty": isDirty,
15130
15146
  "class": ['v-combobox', {
15131
15147
  'v-combobox--active-menu': menu.value,
@@ -15235,7 +15251,8 @@ const VCombobox = genericComponent()({
15235
15251
  "key": "chip",
15236
15252
  "closable": props.closableChips,
15237
15253
  "size": "small",
15238
- "text": item.title
15254
+ "text": item.title,
15255
+ "disabled": item.props.disabled
15239
15256
  }, slotProps), null) : createVNode(VDefaultsProvider, {
15240
15257
  "key": "chip-defaults",
15241
15258
  "defaults": {
@@ -17725,10 +17742,10 @@ const VRangeSlider = genericComponent()({
17725
17742
  "focused": isFocused.value
17726
17743
  }), {
17727
17744
  ...slots,
17728
- prepend: hasPrepend ? slotProps => createVNode(Fragment, null, [slots.label?.(slotProps) ?? props.label ? createVNode(VLabel, {
17745
+ prepend: hasPrepend ? slotProps => createVNode(Fragment, null, [slots.label?.(slotProps) ?? (props.label ? createVNode(VLabel, {
17729
17746
  "class": "v-slider__label",
17730
17747
  "text": props.label
17731
- }, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
17748
+ }, null) : undefined), slots.prepend?.(slotProps)]) : undefined,
17732
17749
  default: _ref4 => {
17733
17750
  let {
17734
17751
  id,
@@ -18813,8 +18830,8 @@ const VTab = genericComponent()({
18813
18830
  function parseItems(items) {
18814
18831
  if (!items) return [];
18815
18832
  return items.map(item => {
18816
- if (typeof item === 'string') return {
18817
- title: item,
18833
+ if (!isObject(item)) return {
18834
+ text: item,
18818
18835
  value: item
18819
18836
  };
18820
18837
  return item;
@@ -18892,7 +18909,7 @@ const VTabs = genericComponent()({
18892
18909
  "symbol": VTabsSymbol
18893
18910
  }), {
18894
18911
  default: () => [slots.default ? slots.default() : parsedItems.value.map(item => createVNode(VTab, mergeProps(item, {
18895
- "key": item.title
18912
+ "key": item.text
18896
18913
  }), null))]
18897
18914
  });
18898
18915
  });
@@ -19585,7 +19602,6 @@ const VValidation = genericComponent()({
19585
19602
  const makeVBottomSheetProps = propsFactory({
19586
19603
  inset: Boolean,
19587
19604
  ...makeVDialogProps({
19588
- contentClass: 'v-bottom-sheet__content',
19589
19605
  transition: 'bottom-sheet-transition'
19590
19606
  })
19591
19607
  }, 'VBottomSheet');
@@ -19603,11 +19619,13 @@ const VBottomSheet = genericComponent()({
19603
19619
  useRender(() => {
19604
19620
  const [dialogProps] = VDialog.filterProps(props);
19605
19621
  return createVNode(VDialog, mergeProps(dialogProps, {
19622
+ "contentClass": ['v-bottom-sheet__content', props.contentClass],
19606
19623
  "modelValue": isActive.value,
19607
19624
  "onUpdate:modelValue": $event => isActive.value = $event,
19608
19625
  "class": ['v-bottom-sheet', {
19609
19626
  'v-bottom-sheet--inset': props.inset
19610
- }]
19627
+ }, props.class],
19628
+ "style": props.style
19611
19629
  }), slots);
19612
19630
  });
19613
19631
  return {};
@@ -19994,7 +20012,7 @@ const singleSelectStrategy = {
19994
20012
  items,
19995
20013
  value
19996
20014
  } = _ref;
19997
- return new Set(value ? [items[0]?.value] : []);
20015
+ return new Set(value ? [toRaw(items[0]?.value)] : []);
19998
20016
  },
19999
20017
  selectAll: _ref2 => {
20000
20018
  let {
@@ -20018,7 +20036,7 @@ const pageSelectStrategy = {
20018
20036
  selected
20019
20037
  } = _ref4;
20020
20038
  for (const item of items) {
20021
- if (value) selected.add(item.value);else selected.delete(item.value);
20039
+ if (value) selected.add(toRaw(item.value));else selected.delete(toRaw(item.value));
20022
20040
  }
20023
20041
  return selected;
20024
20042
  },
@@ -20050,7 +20068,7 @@ const allSelectStrategy = {
20050
20068
  selected
20051
20069
  } = _ref7;
20052
20070
  for (const item of items) {
20053
- if (value) selected.add(item.value);else selected.delete(item.value);
20071
+ if (value) selected.add(toRaw(item.value));else selected.delete(toRaw(item.value));
20054
20072
  }
20055
20073
  return selected;
20056
20074
  },
@@ -20076,6 +20094,10 @@ const makeDataTableSelectProps = propsFactory({
20076
20094
  modelValue: {
20077
20095
  type: Array,
20078
20096
  default: () => []
20097
+ },
20098
+ valueComparator: {
20099
+ type: Function,
20100
+ default: deepEqual
20079
20101
  }
20080
20102
  }, 'DataTable-select');
20081
20103
  const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
@@ -20085,7 +20107,9 @@ function provideSelection(props, _ref9) {
20085
20107
  currentPage
20086
20108
  } = _ref9;
20087
20109
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
20088
- return new Set(v);
20110
+ return new Set(wrapInArray(v).map(v => {
20111
+ return allItems.value.find(item => props.valueComparator(v, item.value))?.value ?? v;
20112
+ }));
20089
20113
  }, v => {
20090
20114
  return [...v.values()];
20091
20115
  });
@@ -20104,10 +20128,10 @@ function provideSelection(props, _ref9) {
20104
20128
  }
20105
20129
  });
20106
20130
  function isSelected(items) {
20107
- return wrapInArray(items).every(item => selected.value.has(item.value));
20131
+ return wrapInArray(items).every(item => selected.value.has(toRaw(item.value)));
20108
20132
  }
20109
20133
  function isSomeSelected(items) {
20110
- return wrapInArray(items).some(item => selected.value.has(item.value));
20134
+ return wrapInArray(items).some(item => selected.value.has(toRaw(item.value)));
20111
20135
  }
20112
20136
  function select(items, value) {
20113
20137
  const newSelected = selectStrategy.value.select({
@@ -20135,7 +20159,7 @@ function provideSelection(props, _ref9) {
20135
20159
  allItems: allSelectable.value,
20136
20160
  currentPage: currentPageSelectable.value
20137
20161
  });
20138
- return isSelected(items);
20162
+ return !!items.length && isSelected(items);
20139
20163
  });
20140
20164
  const data = {
20141
20165
  toggleSelect,
@@ -20188,6 +20212,7 @@ function provideSort(options) {
20188
20212
  page
20189
20213
  } = options;
20190
20214
  const toggleSort = column => {
20215
+ if (column.key == null) return;
20191
20216
  let newSortBy = sortBy.value.map(x => ({
20192
20217
  ...x
20193
20218
  })) ?? [];
@@ -20698,17 +20723,15 @@ function createHeaders(props, options) {
20698
20723
  column,
20699
20724
  row
20700
20725
  } = _ref4;
20701
- let key = column.key;
20702
- if (key == null) {
20703
- consoleWarn('The header key value must not be null or undefined');
20704
- key = '';
20705
- }
20726
+ const key = column.key ?? (typeof column.value === 'string' ? column.value : null);
20727
+ const value = column.value ?? column.key ?? null;
20706
20728
  for (let i = row; i <= row + (column.rowspan ?? 1) - 1; i++) {
20707
20729
  fixedRows[i].push({
20708
20730
  ...column,
20709
20731
  key,
20732
+ value,
20710
20733
  fixedOffset: fixedOffsets[i],
20711
- sortable: column.sortable ?? !!column.key
20734
+ sortable: column.sortable ?? key != null
20712
20735
  });
20713
20736
  fixedOffsets[i] += Number(column.width ?? 0);
20714
20737
  }
@@ -20987,7 +21010,7 @@ const makeVDataTableRowProps = propsFactory({
20987
21010
  item: Object,
20988
21011
  onClick: Function
20989
21012
  }, 'VDataTableRow');
20990
- const VDataTableRow = defineComponent({
21013
+ const VDataTableRow = genericComponent()({
20991
21014
  name: 'VDataTableRow',
20992
21015
  props: makeVDataTableRowProps(),
20993
21016
  setup(props, _ref) {
@@ -21023,8 +21046,10 @@ const VDataTableRow = defineComponent({
21023
21046
  const slotName = `item.${column.key}`;
21024
21047
  const slotProps = {
21025
21048
  index: props.index,
21026
- item: props.item,
21027
- columns: columns.value,
21049
+ item: item.raw,
21050
+ internalItem: item,
21051
+ value: getObjectValueByPath(item.columns, column.key),
21052
+ column,
21028
21053
  isSelected,
21029
21054
  toggleSelect,
21030
21055
  isExpanded,
@@ -21046,7 +21071,7 @@ const VDataTableRow = defineComponent({
21046
21071
  "onClick": withModifiers(() => toggleExpand(item), ['stop'])
21047
21072
  }, null);
21048
21073
  }
21049
- return getPropertyFromItem(item.columns, column.key);
21074
+ return toDisplayString(slotProps.value);
21050
21075
  }
21051
21076
  }))]));
21052
21077
  }
@@ -21135,7 +21160,8 @@ const VDataTableRows = genericComponent()({
21135
21160
  }
21136
21161
  const slotProps = {
21137
21162
  index,
21138
- item,
21163
+ item: item.raw,
21164
+ internalItem: item,
21139
21165
  columns: columns.value,
21140
21166
  isExpanded,
21141
21167
  toggleExpand,
@@ -21151,7 +21177,8 @@ const VDataTableRows = genericComponent()({
21151
21177
  toggleExpand(item);
21152
21178
  }
21153
21179
  props['onClick:row']?.(event, {
21154
- item
21180
+ item: item.raw,
21181
+ internalItem: item
21155
21182
  });
21156
21183
  } : undefined,
21157
21184
  index,
@@ -21189,7 +21216,7 @@ function transformItem(props, item, index, columns) {
21189
21216
  const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue);
21190
21217
  const selectable = getPropertyFromItem(item, props.itemSelectable, true);
21191
21218
  const itemColumns = columns.reduce((obj, column) => {
21192
- obj[column.key] = getPropertyFromItem(item, column.value ?? column.key);
21219
+ if (column.key != null) obj[column.key] = getPropertyFromItem(item, column.value);
21193
21220
  return obj;
21194
21221
  }, {});
21195
21222
  return {
@@ -21416,8 +21443,7 @@ const VDataTableVirtual = genericComponent()({
21416
21443
  'update:sortBy': value => true,
21417
21444
  'update:options': value => true,
21418
21445
  'update:groupBy': value => true,
21419
- 'update:expanded': value => true,
21420
- 'click:row': (e, value) => true
21446
+ 'update:expanded': value => true
21421
21447
  },
21422
21448
  setup(props, _ref) {
21423
21449
  let {
@@ -21623,8 +21649,7 @@ const VDataTableServer = genericComponent()({
21623
21649
  'update:sortBy': sortBy => true,
21624
21650
  'update:options': options => true,
21625
21651
  'update:expanded': options => true,
21626
- 'update:groupBy': value => true,
21627
- 'click:row': (e, value) => true
21652
+ 'update:groupBy': value => true
21628
21653
  },
21629
21654
  setup(props, _ref) {
21630
21655
  let {
@@ -21787,13 +21812,13 @@ const makeVDatePickerControlsProps = propsFactory({
21787
21812
  type: [String],
21788
21813
  default: '$prev'
21789
21814
  },
21790
- expandIcon: {
21815
+ modeIcon: {
21791
21816
  type: [String],
21792
- default: '$expand'
21817
+ default: '$subgroup'
21793
21818
  },
21794
- collapseIcon: {
21795
- type: [String],
21796
- default: '$collapse'
21819
+ variant: {
21820
+ type: String,
21821
+ default: 'modern'
21797
21822
  },
21798
21823
  viewMode: {
21799
21824
  type: String,
@@ -21812,9 +21837,6 @@ const VDatePickerControls = genericComponent()({
21812
21837
  let {
21813
21838
  emit
21814
21839
  } = _ref;
21815
- const modeIcon = computed(() => {
21816
- return props.viewMode === 'month' ? props.expandIcon : props.collapseIcon;
21817
- });
21818
21840
  const disableMode = computed(() => {
21819
21841
  return Array.isArray(props.disabled) ? props.disabled.includes('mode') : !!props.disabled;
21820
21842
  });
@@ -21834,17 +21856,21 @@ const VDatePickerControls = genericComponent()({
21834
21856
  emit('click:mode');
21835
21857
  }
21836
21858
  useRender(() => {
21837
- return createVNode("div", {
21838
- "class": "v-date-picker-controls"
21839
- }, [createVNode("div", {
21859
+ const displayDate = createVNode("div", {
21840
21860
  "class": "v-date-picker-controls__date"
21841
- }, [props.displayDate]), createVNode(VBtn, {
21861
+ }, [props.displayDate]);
21862
+ return createVNode("div", {
21863
+ "class": ['v-date-picker-controls', `v-date-picker-controls--variant-${props.variant}`]
21864
+ }, [props.variant === 'modern' && createVNode(Fragment, null, [displayDate, createVNode(VBtn, {
21865
+ "key": "mode-btn",
21842
21866
  "disabled": disableMode.value,
21843
- "key": "expand-btn",
21844
- "icon": modeIcon.value,
21867
+ "density": "comfortable",
21868
+ "icon": props.modeIcon,
21845
21869
  "variant": "text",
21846
21870
  "onClick": onClickMode
21847
- }, null), createVNode(VSpacer, null, null), createVNode("div", {
21871
+ }, null), createVNode(VSpacer, {
21872
+ "key": "mode-spacer"
21873
+ }, null)]), createVNode("div", {
21848
21874
  "key": "month-buttons",
21849
21875
  "class": "v-date-picker-controls__month"
21850
21876
  }, [createVNode(VBtn, {
@@ -21852,7 +21878,7 @@ const VDatePickerControls = genericComponent()({
21852
21878
  "icon": props.prevIcon,
21853
21879
  "variant": "text",
21854
21880
  "onClick": onClickPrev
21855
- }, null), createVNode(VBtn, {
21881
+ }, null), props.variant === 'classic' && displayDate, createVNode(VBtn, {
21856
21882
  "disabled": disableNext.value,
21857
21883
  "icon": props.nextIcon,
21858
21884
  "variant": "text",
@@ -22025,8 +22051,8 @@ function getWeekArray(date, locale) {
22025
22051
  let currentWeek = [];
22026
22052
  const firstDayOfMonth = startOfMonth(date);
22027
22053
  const lastDayOfMonth = endOfMonth(date);
22028
- const firstDayWeekIndex = firstDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()];
22029
- const lastDayWeekIndex = lastDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()];
22054
+ const firstDayWeekIndex = (firstDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
22055
+ const lastDayWeekIndex = (lastDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
22030
22056
  for (let i = 0; i < firstDayWeekIndex; i++) {
22031
22057
  const adjacentDay = new Date(firstDayOfMonth);
22032
22058
  adjacentDay.setDate(adjacentDay.getDate() - (firstDayWeekIndex - i));
@@ -22129,6 +22155,11 @@ function format(value, formatString, locale) {
22129
22155
  day: 'numeric'
22130
22156
  };
22131
22157
  break;
22158
+ case 'shortDate':
22159
+ options = {
22160
+ year: 'numeric'
22161
+ };
22162
+ break;
22132
22163
  default:
22133
22164
  options = {
22134
22165
  timeZone: 'UTC',
@@ -22754,8 +22785,7 @@ const VDatePickerMonth = genericComponent()({
22754
22785
  "key": "in-hover",
22755
22786
  "class": "v-date-picker-month__day--hover"
22756
22787
  }, null), (props.showAdjacentMonths || !item.isAdjacent) && createVNode(VBtn, {
22757
- "active": item.isSelected,
22758
- "color": color,
22788
+ "color": !item.isToday || item.isSelected ? color : undefined,
22759
22789
  "disabled": item.isDisabled,
22760
22790
  "icon": true,
22761
22791
  "ripple": false,
@@ -22790,7 +22820,7 @@ const VDatePickerYears = genericComponent()({
22790
22820
  const years = computed(() => {
22791
22821
  const min = props.min ? adapter.date(props.min).getFullYear() : displayYear.value - 100;
22792
22822
  const max = props.max ? adapter.date(props.max).getFullYear() : displayYear.value + 50;
22793
- return createRange(max - min, min);
22823
+ return createRange(max - min + 1, min);
22794
22824
  });
22795
22825
  const yearRef = ref();
22796
22826
  onMounted(() => {
@@ -22928,12 +22958,14 @@ const makeVDatePickerHeaderProps = propsFactory({
22928
22958
  appendIcon: String,
22929
22959
  color: String,
22930
22960
  header: String,
22931
- transition: String
22961
+ transition: String,
22962
+ onClick: EventProp()
22932
22963
  }, 'VDatePickerHeader');
22933
22964
  const VDatePickerHeader = genericComponent()({
22934
22965
  name: 'VDatePickerHeader',
22935
22966
  props: makeVDatePickerHeaderProps(),
22936
22967
  emits: {
22968
+ click: () => true,
22937
22969
  'click:append': () => true
22938
22970
  },
22939
22971
  setup(props, _ref) {
@@ -22945,6 +22977,9 @@ const VDatePickerHeader = genericComponent()({
22945
22977
  backgroundColorClasses,
22946
22978
  backgroundColorStyles
22947
22979
  } = useBackgroundColor(props, 'color');
22980
+ function onClick() {
22981
+ emit('click');
22982
+ }
22948
22983
  function onClickAppend() {
22949
22984
  emit('click:append');
22950
22985
  }
@@ -22952,8 +22987,11 @@ const VDatePickerHeader = genericComponent()({
22952
22987
  const hasContent = !!(slots.default || props.header);
22953
22988
  const hasAppend = !!(slots.append || props.appendIcon);
22954
22989
  return createVNode("div", {
22955
- "class": ['v-date-picker-header', backgroundColorClasses.value],
22956
- "style": backgroundColorStyles.value
22990
+ "class": ['v-date-picker-header', {
22991
+ 'v-date-picker-header--clickable': !!props.onClick
22992
+ }, backgroundColorClasses.value],
22993
+ "style": backgroundColorStyles.value,
22994
+ "onClick": onClick
22957
22995
  }, [slots.prepend && createVNode("div", {
22958
22996
  "key": "prepend",
22959
22997
  "class": "v-date-picker-header__prepend"
@@ -22995,9 +23033,10 @@ const VPickerTitle = createSimpleFunctional('v-picker-title');
22995
23033
  // Types
22996
23034
 
22997
23035
  const makeVPickerProps = propsFactory({
23036
+ bgColor: String,
22998
23037
  landscape: Boolean,
22999
23038
  title: String,
23000
- ...omit(makeVSheetProps(), ['color'])
23039
+ ...makeVSheetProps()
23001
23040
  }, 'VPicker');
23002
23041
  const VPicker = genericComponent()({
23003
23042
  name: 'VPicker',
@@ -23006,23 +23045,31 @@ const VPicker = genericComponent()({
23006
23045
  let {
23007
23046
  slots
23008
23047
  } = _ref;
23048
+ const {
23049
+ backgroundColorClasses,
23050
+ backgroundColorStyles
23051
+ } = useBackgroundColor(toRef(props, 'color'));
23009
23052
  useRender(() => {
23010
23053
  const [sheetProps] = VSheet.filterProps(props);
23011
23054
  const hasTitle = !!(props.title || slots.title);
23012
23055
  return createVNode(VSheet, mergeProps(sheetProps, {
23056
+ "color": props.bgColor,
23013
23057
  "class": ['v-picker', {
23014
23058
  'v-picker--landscape': props.landscape,
23015
23059
  'v-picker--with-actions': !!slots.actions
23016
23060
  }, props.class],
23017
23061
  "style": props.style
23018
23062
  }), {
23019
- default: () => [hasTitle && createVNode(VPickerTitle, {
23063
+ default: () => [createVNode("div", {
23064
+ "class": [backgroundColorClasses.value],
23065
+ "style": [backgroundColorStyles.value]
23066
+ }, [hasTitle && createVNode(VPickerTitle, {
23020
23067
  "key": "picker-title"
23021
23068
  }, {
23022
23069
  default: () => [slots.title?.() ?? props.title]
23023
23070
  }), slots.header && createVNode("div", {
23024
23071
  "class": "v-picker__header"
23025
- }, [slots.header()]), createVNode("div", {
23072
+ }, [slots.header()])]), createVNode("div", {
23026
23073
  "class": "v-picker__body"
23027
23074
  }, [slots.default?.()]), slots.actions?.()[0]?.children && createVNode("div", {
23028
23075
  "class": "v-picker__actions"
@@ -23100,7 +23147,9 @@ const VDatePicker = genericComponent()({
23100
23147
  const isReversing = shallowRef(false);
23101
23148
  const inputModel = ref(model.value.map(date => adapter.format(date, 'keyboardDate')));
23102
23149
  const temporaryModel = ref(model.value);
23103
- const title = computed(() => t(props.title));
23150
+ const title = computed(() => {
23151
+ return props.variant === 'modern' ? t(props.title) : adapter.format(displayDate.value, 'shortDate');
23152
+ });
23104
23153
  const header = computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header));
23105
23154
  const headerIcon = computed(() => inputMode.value === 'calendar' ? props.keyboardIcon : props.calendarIcon);
23106
23155
  const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
@@ -23172,6 +23221,9 @@ const VDatePicker = genericComponent()({
23172
23221
  function onClickMode() {
23173
23222
  viewMode.value = viewMode.value === 'month' ? 'year' : 'month';
23174
23223
  }
23224
+ function onClickHeader() {
23225
+ viewMode.value = 'month';
23226
+ }
23175
23227
  const headerSlotProps = computed(() => ({
23176
23228
  header: header.value,
23177
23229
  appendIcon: headerIcon.value,
@@ -23184,15 +23236,20 @@ const VDatePicker = genericComponent()({
23184
23236
  const [datePickerMonthProps] = VDatePickerMonth.filterProps(props);
23185
23237
  const [datePickerYearsProps] = VDatePickerYears.filterProps(props);
23186
23238
  return createVNode(VPicker, mergeProps(pickerProps, {
23187
- "class": ['v-date-picker', props.class],
23239
+ "class": ['v-date-picker', `v-date-picker--${viewMode.value}`, props.class],
23188
23240
  "style": props.style,
23189
- "title": title.value,
23190
23241
  "width": props.showWeek ? 408 : 360
23191
23242
  }), {
23243
+ title: () => slots.title?.() ?? createVNode("div", {
23244
+ "class": "v-date-picker__title",
23245
+ "onClick": props.variant === 'classic' ? onClickMode : undefined
23246
+ }, [title.value]),
23192
23247
  header: () => slots.header?.(headerSlotProps.value) ?? createVNode(VDatePickerHeader, mergeProps({
23193
23248
  "key": "header"
23194
- }, headerSlotProps.value), null),
23195
- default: () => inputMode.value === 'calendar' ? createVNode(Fragment, null, [createVNode(VDatePickerControls, mergeProps(datePickerControlsProps, {
23249
+ }, headerSlotProps.value, {
23250
+ "onClick": viewMode.value === 'year' ? onClickHeader : undefined
23251
+ }), null),
23252
+ default: () => inputMode.value === 'calendar' ? createVNode(Fragment, null, [(props.variant !== 'classic' || viewMode.value !== 'year') && createVNode(VDatePickerControls, mergeProps(datePickerControlsProps, {
23196
23253
  "disabled": disabled.value,
23197
23254
  "displayDate": adapter.format(displayDate.value, 'monthAndYear'),
23198
23255
  "onClick:next": onClickNext,
@@ -23226,7 +23283,7 @@ const VDatePicker = genericComponent()({
23226
23283
  "label": t(props.inputText),
23227
23284
  "placeholder": props.inputPlaceholder
23228
23285
  }, null)]),
23229
- actions: () => !props.hideActions ? createVNode("div", null, [createVNode(VBtn, {
23286
+ actions: () => !props.hideActions ? slots.actions?.() ?? createVNode("div", null, [createVNode(VBtn, {
23230
23287
  "variant": "text",
23231
23288
  "color": props.color,
23232
23289
  "onClick": onClickCancel,
@@ -23601,7 +23658,7 @@ const VOtpInput = genericComponent()({
23601
23658
  scoped: true
23602
23659
  });
23603
23660
  watch(model, val => {
23604
- if (val.length === props.length) emit('finish', val.join(''));
23661
+ if (val.length === Number(props.length)) emit('finish', val.join(''));
23605
23662
  }, {
23606
23663
  deep: true
23607
23664
  });
@@ -24559,7 +24616,7 @@ function createVuetify$1() {
24559
24616
  date
24560
24617
  };
24561
24618
  }
24562
- const version$1 = "3.3.16";
24619
+ const version$1 = "3.3.18";
24563
24620
  createVuetify$1.version = version$1;
24564
24621
 
24565
24622
  // Vue's inject() can only be used in setup
@@ -24573,7 +24630,7 @@ function inject(key) {
24573
24630
 
24574
24631
  /* eslint-disable local-rules/sort-imports */
24575
24632
 
24576
- const version = "3.3.16";
24633
+ const version = "3.3.18";
24577
24634
 
24578
24635
  /* eslint-disable local-rules/sort-imports */
24579
24636