vuetify 3.3.8 → 3.3.9

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 (75) hide show
  1. package/dist/json/attributes.json +2 -2
  2. package/dist/json/importMap.json +42 -42
  3. package/dist/json/web-types.json +152 -152
  4. package/dist/vuetify-labs.css +522 -575
  5. package/dist/vuetify-labs.d.ts +65 -64
  6. package/dist/vuetify-labs.esm.js +85 -20
  7. package/dist/vuetify-labs.esm.js.map +1 -1
  8. package/dist/vuetify-labs.js +85 -20
  9. package/dist/vuetify-labs.min.css +2 -2
  10. package/dist/vuetify.css +61 -120
  11. package/dist/vuetify.d.ts +11 -11
  12. package/dist/vuetify.esm.js +28 -7
  13. package/dist/vuetify.esm.js.map +1 -1
  14. package/dist/vuetify.js +28 -7
  15. package/dist/vuetify.js.map +1 -1
  16. package/dist/vuetify.min.css +2 -2
  17. package/dist/vuetify.min.js +27 -24
  18. package/dist/vuetify.min.js.map +1 -1
  19. package/lib/components/VAutocomplete/VAutocomplete.css +2 -2
  20. package/lib/components/VAutocomplete/VAutocomplete.sass +2 -2
  21. package/lib/components/VColorPicker/VColorPickerEdit.css +1 -0
  22. package/lib/components/VColorPicker/VColorPickerEdit.sass +1 -0
  23. package/lib/components/VColorPicker/VColorPickerPreview.css +1 -1
  24. package/lib/components/VColorPicker/_variables.scss +2 -1
  25. package/lib/components/VCombobox/VCombobox.css +2 -2
  26. package/lib/components/VCombobox/VCombobox.sass +2 -2
  27. package/lib/components/VField/VField.css +7 -70
  28. package/lib/components/VField/VField.mjs +1 -1
  29. package/lib/components/VField/VField.mjs.map +1 -1
  30. package/lib/components/VField/VField.sass +4 -8
  31. package/lib/components/VField/_variables.scss +3 -3
  32. package/lib/components/VList/VListItem.css +3 -0
  33. package/lib/components/VList/VListItem.sass +10 -3
  34. package/lib/components/VOverlay/locationStrategies.mjs +6 -0
  35. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  36. package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -2
  37. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  38. package/lib/components/VTextField/VTextField.css +1 -1
  39. package/lib/entry-bundler.mjs +1 -1
  40. package/lib/framework.mjs +1 -1
  41. package/lib/index.d.mts +11 -11
  42. package/lib/labs/VDataIterator/index.d.mts +1 -0
  43. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  44. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  45. package/lib/labs/VDataTable/composables/items.mjs +1 -0
  46. package/lib/labs/VDataTable/composables/items.mjs.map +1 -1
  47. package/lib/labs/VDataTable/index.d.mts +47 -46
  48. package/lib/labs/VDataTable/types.mjs.map +1 -1
  49. package/lib/labs/VDateInput/composables.mjs +1 -1
  50. package/lib/labs/VDateInput/composables.mjs.map +1 -1
  51. package/lib/labs/VDateInput/index.d.mts +16 -16
  52. package/lib/labs/VDatePicker/VDatePicker.mjs +8 -7
  53. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  54. package/lib/labs/VDatePicker/VDatePickerControls.css +7 -0
  55. package/lib/labs/VDatePicker/VDatePickerControls.mjs +1 -0
  56. package/lib/labs/VDatePicker/VDatePickerControls.mjs.map +1 -1
  57. package/lib/labs/VDatePicker/VDatePickerControls.sass +8 -0
  58. package/lib/labs/VDatePicker/composables.mjs +15 -2
  59. package/lib/labs/VDatePicker/composables.mjs.map +1 -1
  60. package/lib/labs/VDatePicker/index.d.mts +18 -18
  61. package/lib/labs/VDateRangePicker/VDateRangePicker.mjs +2 -4
  62. package/lib/labs/VDateRangePicker/VDateRangePicker.mjs.map +1 -1
  63. package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs +4 -5
  64. package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs.map +1 -1
  65. package/lib/labs/VDateRangePicker/index.d.mts +59 -51
  66. package/lib/labs/VPicker/VPicker.css +0 -1
  67. package/lib/labs/VPicker/VPicker.sass +0 -1
  68. package/lib/labs/components.d.mts +65 -64
  69. package/lib/labs/date/adapters/vuetify.mjs +14 -1
  70. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  71. package/lib/labs/date/date.mjs +3 -3
  72. package/lib/labs/date/date.mjs.map +1 -1
  73. package/lib/labs/date/index.d.mts +25 -1
  74. package/package.json +2 -2
  75. package/lib/components/VField/_mixins.sass +0 -7
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.3.8
2
+ * Vuetify v3.3.9
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -8338,6 +8338,12 @@
8338
8338
  // el.style.removeProperty('max-width')
8339
8339
  // el.style.removeProperty('max-height')
8340
8340
 
8341
+ if (isRtl) {
8342
+ el.style.removeProperty('left');
8343
+ } else {
8344
+ el.style.removeProperty('right');
8345
+ }
8346
+
8341
8347
  /* eslint-disable-next-line sonarjs/prefer-immediate-return */
8342
8348
  const contentBox = nullifyTransforms(el);
8343
8349
  if (isRtl) {
@@ -10125,7 +10131,7 @@
10125
10131
  }, null), vue.createVNode(LoaderSlot, {
10126
10132
  "name": "v-field",
10127
10133
  "active": !!props.loading,
10128
- "color": props.error ? 'error' : props.color
10134
+ "color": props.error ? 'error' : typeof props.loading === 'string' ? props.loading : props.color
10129
10135
  }, {
10130
10136
  default: slots.loader
10131
10137
  }), hasPrepend && vue.createVNode("div", {
@@ -17491,8 +17497,10 @@
17491
17497
  value
17492
17498
  } = _ref2;
17493
17499
  const newValue = activeThumbRef.value === startThumbRef.value?.$el ? [value, model.value[1]] : [model.value[0], value];
17494
- model.value = newValue;
17495
- emit('end', newValue);
17500
+ if (!props.strict && newValue[0] < newValue[1]) {
17501
+ model.value = newValue;
17502
+ }
17503
+ emit('end', model.value);
17496
17504
  },
17497
17505
  onSliderMove: _ref3 => {
17498
17506
  let {
@@ -20936,7 +20944,7 @@
20936
20944
  const itemSlotProps = {
20937
20945
  ...slotProps,
20938
20946
  props: {
20939
- key: `item_${item.value}`,
20947
+ key: `item_${item.key ?? item.index}`,
20940
20948
  onClick: expandOnClick.value || props['onClick:row'] ? event => {
20941
20949
  if (expandOnClick.value) {
20942
20950
  toggleExpand(item);
@@ -20985,6 +20993,7 @@
20985
20993
  }, {});
20986
20994
  return {
20987
20995
  type: 'item',
20996
+ key: props.returnObject ? getPropertyFromItem(item, props.itemValue) : value,
20988
20997
  index,
20989
20998
  value,
20990
20999
  selectable,
@@ -21756,11 +21765,24 @@
21756
21765
  function endOfMonth(date) {
21757
21766
  return new Date(date.getFullYear(), date.getMonth() + 1, 0);
21758
21767
  }
21768
+ function formatYyyyMmDd(value) {
21769
+ const formattedValue = value.split('-').map(d => d.padStart(2, '0')).join('-');
21770
+ const offsetMin = new Date().getTimezoneOffset() / -60;
21771
+ const offsetSign = offsetMin < 0 ? '-' : '+';
21772
+ const offsetValue = Math.abs(offsetMin).toString().padStart(2, '0');
21773
+ return `${formattedValue}T00:00:00.000${offsetSign}${offsetValue}:00`;
21774
+ }
21775
+ const _YYYMMDD = /([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))/;
21759
21776
  function date(value) {
21760
21777
  if (value == null) return new Date();
21761
21778
  if (value instanceof Date) return value;
21762
21779
  if (typeof value === 'string') {
21763
- const parsed = Date.parse(value);
21780
+ let parsed;
21781
+ if (_YYYMMDD.test(value)) {
21782
+ parsed = Date.parse(formatYyyyMmDd(value));
21783
+ } else {
21784
+ parsed = Date.parse(value);
21785
+ }
21764
21786
  if (!isNaN(parsed)) return new Date(parsed);
21765
21787
  }
21766
21788
  return null;
@@ -22009,11 +22031,11 @@
22009
22031
  const date = vue.inject(DateAdapterSymbol);
22010
22032
  const locale = useLocale();
22011
22033
  if (!date) throw new Error('[Vuetify] Could not find injected date');
22012
- const instance = typeof date.adapter === 'function'
22034
+ const instance = vue.reactive(typeof date.adapter === 'function'
22013
22035
  // eslint-disable-next-line new-cap
22014
22036
  ? new date.adapter({
22015
22037
  locale: date.locale?.[locale.current.value] ?? locale.current.value
22016
- }) : date.adapter;
22038
+ }) : date.adapter);
22017
22039
  vue.watch(locale.current, value => {
22018
22040
  const newLocale = date.locale ? date.locale[value] : value;
22019
22041
  instance.locale = newLocale ?? instance.locale;
@@ -22059,7 +22081,7 @@
22059
22081
  },
22060
22082
  displayDate: {
22061
22083
  type: null,
22062
- default: new Date()
22084
+ default: null
22063
22085
  },
22064
22086
  inputMode: {
22065
22087
  type: String,
@@ -22078,6 +22100,34 @@
22078
22100
  'update:inputMode': inputMode => true,
22079
22101
  'update:viewMode': viewMode => true
22080
22102
  };
22103
+ function createDateInput(props, isRange) {
22104
+ const adapter = useDate();
22105
+ const model = useProxiedModel(props, 'modelValue', [], v => {
22106
+ if (v == null) return [];
22107
+ const arr = wrapInArray(v).filter(v => !!v);
22108
+ return arr.map(adapter.date);
22109
+ }, v => {
22110
+ const arr = wrapInArray(v);
22111
+ const formatted = props.format ? arr.map(d => adapter.format(d, props.format)) : arr;
22112
+ if (isRange) return formatted;
22113
+ return formatted[0];
22114
+ });
22115
+ const inputMode = useProxiedModel(props, 'inputMode');
22116
+ const viewMode = useProxiedModel(props, 'viewMode');
22117
+ const displayDate = useProxiedModel(props, 'displayDate', model.value.length ? model.value[0] : adapter.date());
22118
+ function parseKeyboardDate(input, fallback) {
22119
+ const date = adapter.date(input);
22120
+ return adapter.isValid(date) ? date : fallback;
22121
+ }
22122
+ return {
22123
+ model,
22124
+ adapter,
22125
+ inputMode,
22126
+ viewMode,
22127
+ displayDate,
22128
+ parseKeyboardDate
22129
+ };
22130
+ }
22081
22131
 
22082
22132
  const makeVDatePickerControlsProps = propsFactory({
22083
22133
  nextIcon: {
@@ -22141,6 +22191,7 @@
22141
22191
  "icon": props.viewMode === 'month' ? props.expandIcon : props.collapseIcon,
22142
22192
  "onClick": () => emit('update:viewMode', props.viewMode === 'month' ? 'year' : 'month')
22143
22193
  }, null), vue.createVNode(VSpacer, null, null), props.viewMode === 'month' && !props.range && vue.createVNode("div", {
22194
+ "class": "v-date-picker-controls__month",
22144
22195
  "key": "month-buttons"
22145
22196
  }, [prevBtn, nextBtn]), props.viewMode === 'month' && props.range === 'end' && nextBtn]);
22146
22197
  });
@@ -22148,7 +22199,7 @@
22148
22199
  }
22149
22200
  });
22150
22201
 
22151
- // Utilities
22202
+ // Composables
22152
22203
 
22153
22204
  // Types
22154
22205
 
@@ -22166,12 +22217,24 @@
22166
22217
  dragHandle,
22167
22218
  hasScrolled
22168
22219
  });
22220
+
22221
+ // TODO: This composable should probably not live in DateInput
22222
+ const {
22223
+ model,
22224
+ displayDate,
22225
+ viewMode,
22226
+ inputMode
22227
+ } = createDateInput(props, !!props.multiple);
22169
22228
  return {
22170
22229
  hoverDate,
22171
22230
  hoverMonth,
22172
22231
  isDragging,
22173
22232
  dragHandle,
22174
- hasScrolled
22233
+ hasScrolled,
22234
+ model,
22235
+ displayDate,
22236
+ viewMode,
22237
+ inputMode
22175
22238
  };
22176
22239
  }
22177
22240
  function useDatePicker() {
@@ -22549,7 +22612,7 @@
22549
22612
  const {
22550
22613
  t
22551
22614
  } = useLocale();
22552
- createDatePicker();
22615
+ createDatePicker(props);
22553
22616
  function onDisplayUpdate(val) {
22554
22617
  emit('update:displayDate', val);
22555
22618
  }
@@ -22765,12 +22828,13 @@
22765
22828
  const {
22766
22829
  t
22767
22830
  } = useLocale();
22768
- createDatePicker();
22769
- const model = vue.ref(props.modelValue ?? []);
22831
+ const {
22832
+ model,
22833
+ displayDate,
22834
+ viewMode,
22835
+ inputMode
22836
+ } = createDatePicker(props);
22770
22837
  const isReversing = vue.ref(false);
22771
- const displayDate = useProxiedModel(props, 'displayDate', props.displayDate);
22772
- const inputMode = useProxiedModel(props, 'inputMode', props.inputMode);
22773
- const viewMode = useProxiedModel(props, 'viewMode', props.viewMode);
22774
22838
  const inputModel = vue.computed(() => model.value.length ? adapter.format(model.value[0], 'keyboardDate') : '');
22775
22839
  const title = vue.computed(() => t(props.title));
22776
22840
  const header = vue.computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header));
@@ -22815,7 +22879,8 @@
22815
22879
  return vue.createVNode(VPicker, vue.mergeProps(pickerProps, {
22816
22880
  "class": ['v-date-picker', props.class],
22817
22881
  "style": props.style,
22818
- "title": title.value
22882
+ "title": title.value,
22883
+ "width": props.showWeek ? 408 : 360
22819
22884
  }), {
22820
22885
  header: () => slots.header?.(headerSlotProps.value) ?? vue.createVNode(VDatePickerHeader, vue.mergeProps({
22821
22886
  "key": "header"
@@ -23602,7 +23667,7 @@
23602
23667
  date
23603
23668
  };
23604
23669
  }
23605
- const version$1 = "3.3.8";
23670
+ const version$1 = "3.3.9";
23606
23671
  createVuetify$1.version = version$1;
23607
23672
 
23608
23673
  // Vue's inject() can only be used in setup
@@ -23616,7 +23681,7 @@
23616
23681
 
23617
23682
  /* eslint-disable local-rules/sort-imports */
23618
23683
 
23619
- const version = "3.3.8";
23684
+ const version = "3.3.9";
23620
23685
 
23621
23686
  /* eslint-disable local-rules/sort-imports */
23622
23687