vuetify 3.7.11 → 3.7.12

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 (59) hide show
  1. package/dist/json/attributes.json +2977 -2989
  2. package/dist/json/importMap-labs.json +24 -24
  3. package/dist/json/importMap.json +160 -160
  4. package/dist/json/tags.json +0 -3
  5. package/dist/json/web-types.json +5639 -5666
  6. package/dist/vuetify-labs.css +4359 -4358
  7. package/dist/vuetify-labs.d.ts +90 -165
  8. package/dist/vuetify-labs.esm.js +134 -58
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +134 -58
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +5092 -5091
  13. package/dist/vuetify.d.ts +130 -190
  14. package/dist/vuetify.esm.js +119 -52
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +119 -52
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +1041 -1028
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +2 -2
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VAutocomplete/index.d.mts +25 -47
  24. package/lib/components/VCombobox/VCombobox.mjs +3 -3
  25. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  26. package/lib/components/VCombobox/index.d.mts +25 -47
  27. package/lib/components/VDatePicker/VDatePickerMonth.mjs +2 -2
  28. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  29. package/lib/components/VDatePicker/index.d.mts +12 -24
  30. package/lib/components/VList/VList.mjs +1 -4
  31. package/lib/components/VList/VList.mjs.map +1 -1
  32. package/lib/components/VList/index.d.mts +7 -16
  33. package/lib/components/VOverlay/VOverlay.css +2 -1
  34. package/lib/components/VOverlay/VOverlay.sass +2 -1
  35. package/lib/components/VOverlay/_variables.scss +1 -1
  36. package/lib/components/VSelect/VSelect.mjs +4 -4
  37. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  38. package/lib/components/VSelect/index.d.mts +25 -47
  39. package/lib/components/VSlider/slider.mjs +25 -12
  40. package/lib/components/VSlider/slider.mjs.map +1 -1
  41. package/lib/components/index.d.mts +73 -133
  42. package/lib/composables/calendar.mjs.map +1 -1
  43. package/lib/composables/list-items.mjs +70 -17
  44. package/lib/composables/list-items.mjs.map +1 -1
  45. package/lib/composables/nested/selectStrategies.mjs +6 -7
  46. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  47. package/lib/directives/ripple/index.mjs +7 -5
  48. package/lib/directives/ripple/index.mjs.map +1 -1
  49. package/lib/entry-bundler.mjs +1 -1
  50. package/lib/framework.mjs +1 -1
  51. package/lib/index.d.mts +57 -57
  52. package/lib/labs/VDateInput/VDateInput.mjs +17 -7
  53. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  54. package/lib/labs/VDateInput/index.d.mts +11 -17
  55. package/lib/labs/VTreeview/index.d.mts +7 -16
  56. package/lib/labs/components.d.mts +18 -33
  57. package/lib/util/helpers.mjs +3 -0
  58. package/lib/util/helpers.mjs.map +1 -1
  59. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.11
2
+ * Vuetify v3.7.12
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -500,6 +500,9 @@ function checkPrintable(e) {
500
500
  const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
501
501
  return isPrintableChar && noModifier;
502
502
  }
503
+ function isPrimitive(value) {
504
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
505
+ }
503
506
 
504
507
  // Utilities
505
508
  const block = ['top', 'bottom'];
@@ -5578,11 +5581,13 @@ const ripples = {
5578
5581
  animation.classList.add('v-ripple__animation--visible');
5579
5582
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
5580
5583
  animation.dataset.activated = String(performance.now());
5581
- setTimeout(() => {
5582
- animation.classList.remove('v-ripple__animation--enter');
5583
- animation.classList.add('v-ripple__animation--in');
5584
- transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5585
- }, 0);
5584
+ requestAnimationFrame(() => {
5585
+ requestAnimationFrame(() => {
5586
+ animation.classList.remove('v-ripple__animation--enter');
5587
+ animation.classList.add('v-ripple__animation--in');
5588
+ transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5589
+ });
5590
+ });
5586
5591
  },
5587
5592
  hide(el) {
5588
5593
  if (!el?._ripple?.enabled) return;
@@ -8577,12 +8582,12 @@ const independentSelectStrategy = mandatory => {
8577
8582
  return selected;
8578
8583
  },
8579
8584
  in: (v, children, parents) => {
8580
- let map = new Map();
8585
+ const map = new Map();
8581
8586
  for (const id of v || []) {
8582
- map = strategy.select({
8587
+ strategy.select({
8583
8588
  id,
8584
8589
  value: true,
8585
- selected: new Map(map),
8590
+ selected: map,
8586
8591
  children,
8587
8592
  parents
8588
8593
  });
@@ -8617,11 +8622,10 @@ const independentSingleSelectStrategy = mandatory => {
8617
8622
  });
8618
8623
  },
8619
8624
  in: (v, children, parents) => {
8620
- let map = new Map();
8621
8625
  if (v?.length) {
8622
- map = parentStrategy.in(v.slice(0, 1), children, parents);
8626
+ return parentStrategy.in(v.slice(0, 1), children, parents);
8623
8627
  }
8624
- return map;
8628
+ return new Map();
8625
8629
  },
8626
8630
  out: (v, children, parents) => {
8627
8631
  return parentStrategy.out(v, children, parents);
@@ -8724,7 +8728,7 @@ const classicSelectStrategy = mandatory => {
8724
8728
  map = strategy.select({
8725
8729
  id,
8726
8730
  value: true,
8727
- selected: new Map(map),
8731
+ selected: map,
8728
8732
  children,
8729
8733
  parents
8730
8734
  });
@@ -9608,10 +9612,7 @@ const makeItemsProps = propsFactory({
9608
9612
  default: 'props'
9609
9613
  },
9610
9614
  returnObject: Boolean,
9611
- valueComparator: {
9612
- type: Function,
9613
- default: deepEqual
9614
- }
9615
+ valueComparator: Function
9615
9616
  }, 'list-items');
9616
9617
  function transformItem$3(props, item) {
9617
9618
  const title = getPropertyFromItem(item, props.itemTitle, item);
@@ -9632,29 +9633,85 @@ function transformItem$3(props, item) {
9632
9633
  };
9633
9634
  }
9634
9635
  function transformItems$3(props, items) {
9636
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9635
9637
  const array = [];
9636
9638
  for (const item of items) {
9637
- array.push(transformItem$3(props, item));
9639
+ array.push(transformItem$3(_props, item));
9638
9640
  }
9639
9641
  return array;
9640
9642
  }
9641
9643
  function useItems(props) {
9642
9644
  const items = computed(() => transformItems$3(props, props.items));
9643
9645
  const hasNullItem = computed(() => items.value.some(item => item.value === null));
9646
+ const itemsMap = shallowRef(new Map());
9647
+ const keylessItems = shallowRef([]);
9648
+ watchEffect(() => {
9649
+ const _items = items.value;
9650
+ const map = new Map();
9651
+ const keyless = [];
9652
+ for (let i = 0; i < _items.length; i++) {
9653
+ const item = _items[i];
9654
+ if (isPrimitive(item.value) || item.value === null) {
9655
+ let values = map.get(item.value);
9656
+ if (!values) {
9657
+ values = [];
9658
+ map.set(item.value, values);
9659
+ }
9660
+ values.push(item);
9661
+ } else {
9662
+ keyless.push(item);
9663
+ }
9664
+ }
9665
+ itemsMap.value = map;
9666
+ keylessItems.value = keyless;
9667
+ });
9644
9668
  function transformIn(value) {
9645
- if (!hasNullItem.value) {
9669
+ // Cache unrefed values outside the loop,
9670
+ // proxy getters can be slow when you call them a billion times
9671
+ const _value = toRaw(value);
9672
+ const _items = itemsMap.value;
9673
+ const _allItems = items.value;
9674
+ const _keylessItems = keylessItems.value;
9675
+ const _hasNullItem = hasNullItem.value;
9676
+ const _returnObject = props.returnObject;
9677
+ const hasValueComparator = !!props.valueComparator;
9678
+ const valueComparator = props.valueComparator || deepEqual;
9679
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9680
+ const returnValue = [];
9681
+ main: for (const v of _value) {
9646
9682
  // When the model value is null, return an InternalItem
9647
9683
  // based on null only if null is one of the items
9648
- value = value.filter(v => v !== null);
9649
- }
9650
- return value.map(v => {
9651
- if (props.returnObject && typeof v === 'string') {
9652
- // String model value means value is a custom input value from combobox
9653
- // Don't look up existing items if the model value is a string
9654
- return transformItem$3(props, v);
9684
+ if (!_hasNullItem && v === null) continue;
9685
+
9686
+ // String model value means value is a custom input value from combobox
9687
+ // Don't look up existing items if the model value is a string
9688
+ if (_returnObject && typeof v === 'string') {
9689
+ returnValue.push(transformItem$3(_props, v));
9690
+ continue;
9655
9691
  }
9656
- return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$3(props, v);
9657
- });
9692
+
9693
+ // Fast path, items with primitive values and no
9694
+ // custom valueComparator can use a constant-time
9695
+ // map lookup instead of searching the items array
9696
+ const fastItems = _items.get(v);
9697
+
9698
+ // Slow path, always use valueComparator.
9699
+ // This is O(n^2) so we really don't want to
9700
+ // do it for more than a couple hundred items.
9701
+ if (hasValueComparator || !fastItems) {
9702
+ for (const item of hasValueComparator ? _allItems : _keylessItems) {
9703
+ if (valueComparator(v, item.value)) {
9704
+ returnValue.push(item);
9705
+ continue main;
9706
+ }
9707
+ }
9708
+ // Not an existing item, construct it from the model (#4000)
9709
+ returnValue.push(transformItem$3(_props, v));
9710
+ continue;
9711
+ }
9712
+ returnValue.push(...fastItems);
9713
+ }
9714
+ return returnValue;
9658
9715
  }
9659
9716
  function transformOut(value) {
9660
9717
  return props.returnObject ? value.map(_ref => {
@@ -9678,9 +9735,6 @@ function useItems(props) {
9678
9735
 
9679
9736
  // Types
9680
9737
 
9681
- function isPrimitive(value) {
9682
- return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
9683
- }
9684
9738
  function transformItem$2(props, item) {
9685
9739
  const type = getPropertyFromItem(item, props.itemType, 'item');
9686
9740
  const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
@@ -12729,7 +12783,7 @@ const VSelect = genericComponent()({
12729
12783
  let keyboardLookupLastTime;
12730
12784
  const displayItems = computed(() => {
12731
12785
  if (props.hideSelected) {
12732
- return items.value.filter(item => !model.value.some(s => props.valueComparator(s, item)));
12786
+ return items.value.filter(item => !model.value.some(s => (props.valueComparator || deepEqual)(s, item)));
12733
12787
  }
12734
12788
  return items.value;
12735
12789
  });
@@ -12801,7 +12855,7 @@ const VSelect = genericComponent()({
12801
12855
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12802
12856
  if (item.props.disabled) return;
12803
12857
  if (props.multiple) {
12804
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12858
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
12805
12859
  const add = set == null ? !~index : set;
12806
12860
  if (~index) {
12807
12861
  const value = add ? [...model.value, item] : [...model.value];
@@ -12848,7 +12902,7 @@ const VSelect = genericComponent()({
12848
12902
  }
12849
12903
  watch(menu, () => {
12850
12904
  if (!props.hideSelected && menu.value && model.value.length) {
12851
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12905
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
12852
12906
  IN_BROWSER && window.requestAnimationFrame(() => {
12853
12907
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12854
12908
  });
@@ -13380,7 +13434,7 @@ const VAutocomplete = genericComponent()({
13380
13434
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
13381
13435
  if (!item || item.props.disabled) return;
13382
13436
  if (props.multiple) {
13383
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
13437
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
13384
13438
  const add = set == null ? !~index : set;
13385
13439
  if (~index) {
13386
13440
  const value = add ? [...model.value, item] : [...model.value];
@@ -15769,6 +15823,8 @@ const useSlider = _ref => {
15769
15823
  const trackContainerRef = ref();
15770
15824
  const activeThumbRef = ref();
15771
15825
  function parseMouseMove(e) {
15826
+ const el = trackContainerRef.value?.$el;
15827
+ if (!el) return;
15772
15828
  const vertical = props.direction === 'vertical';
15773
15829
  const start = vertical ? 'top' : 'left';
15774
15830
  const length = vertical ? 'height' : 'width';
@@ -15776,7 +15832,7 @@ const useSlider = _ref => {
15776
15832
  const {
15777
15833
  [start]: trackStart,
15778
15834
  [length]: trackLength
15779
- } = trackContainerRef.value?.$el.getBoundingClientRect();
15835
+ } = el.getBoundingClientRect();
15780
15836
  const clickOffset = getPosition(e, position);
15781
15837
 
15782
15838
  // It is possible for left to be NaN, force to number
@@ -15785,13 +15841,17 @@ const useSlider = _ref => {
15785
15841
  return roundValue(min.value + clickPos * (max.value - min.value));
15786
15842
  }
15787
15843
  const handleStop = e => {
15788
- onSliderEnd({
15789
- value: parseMouseMove(e)
15790
- });
15844
+ const value = parseMouseMove(e);
15845
+ if (value != null) {
15846
+ onSliderEnd({
15847
+ value
15848
+ });
15849
+ }
15791
15850
  mousePressed.value = false;
15792
15851
  startOffset.value = 0;
15793
15852
  };
15794
15853
  const handleStart = e => {
15854
+ const value = parseMouseMove(e);
15795
15855
  activeThumbRef.value = getActiveThumb(e);
15796
15856
  if (!activeThumbRef.value) return;
15797
15857
  mousePressed.value = true;
@@ -15799,13 +15859,17 @@ const useSlider = _ref => {
15799
15859
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
15800
15860
  } else {
15801
15861
  startOffset.value = 0;
15802
- onSliderMove({
15803
- value: parseMouseMove(e)
15862
+ if (value != null) {
15863
+ onSliderMove({
15864
+ value
15865
+ });
15866
+ }
15867
+ }
15868
+ if (value != null) {
15869
+ onSliderStart({
15870
+ value
15804
15871
  });
15805
15872
  }
15806
- onSliderStart({
15807
- value: parseMouseMove(e)
15808
- });
15809
15873
  nextTick(() => activeThumbRef.value?.focus());
15810
15874
  };
15811
15875
  const moveListenerOptions = {
@@ -15813,9 +15877,12 @@ const useSlider = _ref => {
15813
15877
  capture: true
15814
15878
  };
15815
15879
  function onMouseMove(e) {
15816
- onSliderMove({
15817
- value: parseMouseMove(e)
15818
- });
15880
+ const value = parseMouseMove(e);
15881
+ if (value != null) {
15882
+ onSliderMove({
15883
+ value
15884
+ });
15885
+ }
15819
15886
  }
15820
15887
  function onSliderMouseUp(e) {
15821
15888
  e.stopPropagation();
@@ -17254,7 +17321,7 @@ const VCombobox = genericComponent()({
17254
17321
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
17255
17322
  if (!item || item.props.disabled) return;
17256
17323
  if (props.multiple) {
17257
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
17324
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
17258
17325
  const add = set == null ? !~index : set;
17259
17326
  if (~index) {
17260
17327
  const value = add ? [...model.value, item] : [...model.value];
@@ -17314,7 +17381,7 @@ const VCombobox = genericComponent()({
17314
17381
  });
17315
17382
  watch(menu, () => {
17316
17383
  if (!props.hideSelected && menu.value && model.value.length) {
17317
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
17384
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
17318
17385
  IN_BROWSER && window.requestAnimationFrame(() => {
17319
17386
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
17320
17387
  });
@@ -21948,7 +22015,7 @@ const makeVDatePickerMonthProps = propsFactory({
21948
22015
  type: String,
21949
22016
  default: 'picker-reverse-transition'
21950
22017
  },
21951
- ...makeCalendarProps()
22018
+ ...omit(makeCalendarProps(), ['displayValue'])
21952
22019
  }, 'VDatePickerMonth');
21953
22020
  const VDatePickerMonth = genericComponent()({
21954
22021
  name: 'VDatePickerMonth',
@@ -28329,7 +28396,7 @@ function createVuetify$1() {
28329
28396
  goTo
28330
28397
  };
28331
28398
  }
28332
- const version$1 = "3.7.11";
28399
+ const version$1 = "3.7.12";
28333
28400
  createVuetify$1.version = version$1;
28334
28401
 
28335
28402
  // Vue's inject() can only be used in setup
@@ -28354,7 +28421,7 @@ const createVuetify = function () {
28354
28421
  ...options
28355
28422
  });
28356
28423
  };
28357
- const version = "3.7.11";
28424
+ const version = "3.7.12";
28358
28425
  createVuetify.version = version;
28359
28426
 
28360
28427
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };