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
package/dist/vuetify.js CHANGED
@@ -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
  */
@@ -504,6 +504,9 @@
504
504
  const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
505
505
  return isPrintableChar && noModifier;
506
506
  }
507
+ function isPrimitive(value) {
508
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
509
+ }
507
510
 
508
511
  // Utilities
509
512
  const block = ['top', 'bottom'];
@@ -5582,11 +5585,13 @@
5582
5585
  animation.classList.add('v-ripple__animation--visible');
5583
5586
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
5584
5587
  animation.dataset.activated = String(performance.now());
5585
- setTimeout(() => {
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
- }, 0);
5588
+ requestAnimationFrame(() => {
5589
+ requestAnimationFrame(() => {
5590
+ animation.classList.remove('v-ripple__animation--enter');
5591
+ animation.classList.add('v-ripple__animation--in');
5592
+ transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5593
+ });
5594
+ });
5590
5595
  },
5591
5596
  hide(el) {
5592
5597
  if (!el?._ripple?.enabled) return;
@@ -8581,12 +8586,12 @@
8581
8586
  return selected;
8582
8587
  },
8583
8588
  in: (v, children, parents) => {
8584
- let map = new Map();
8589
+ const map = new Map();
8585
8590
  for (const id of v || []) {
8586
- map = strategy.select({
8591
+ strategy.select({
8587
8592
  id,
8588
8593
  value: true,
8589
- selected: new Map(map),
8594
+ selected: map,
8590
8595
  children,
8591
8596
  parents
8592
8597
  });
@@ -8621,11 +8626,10 @@
8621
8626
  });
8622
8627
  },
8623
8628
  in: (v, children, parents) => {
8624
- let map = new Map();
8625
8629
  if (v?.length) {
8626
- map = parentStrategy.in(v.slice(0, 1), children, parents);
8630
+ return parentStrategy.in(v.slice(0, 1), children, parents);
8627
8631
  }
8628
- return map;
8632
+ return new Map();
8629
8633
  },
8630
8634
  out: (v, children, parents) => {
8631
8635
  return parentStrategy.out(v, children, parents);
@@ -8728,7 +8732,7 @@
8728
8732
  map = strategy.select({
8729
8733
  id,
8730
8734
  value: true,
8731
- selected: new Map(map),
8735
+ selected: map,
8732
8736
  children,
8733
8737
  parents
8734
8738
  });
@@ -9612,10 +9616,7 @@
9612
9616
  default: 'props'
9613
9617
  },
9614
9618
  returnObject: Boolean,
9615
- valueComparator: {
9616
- type: Function,
9617
- default: deepEqual
9618
- }
9619
+ valueComparator: Function
9619
9620
  }, 'list-items');
9620
9621
  function transformItem$3(props, item) {
9621
9622
  const title = getPropertyFromItem(item, props.itemTitle, item);
@@ -9636,29 +9637,85 @@
9636
9637
  };
9637
9638
  }
9638
9639
  function transformItems$3(props, items) {
9640
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9639
9641
  const array = [];
9640
9642
  for (const item of items) {
9641
- array.push(transformItem$3(props, item));
9643
+ array.push(transformItem$3(_props, item));
9642
9644
  }
9643
9645
  return array;
9644
9646
  }
9645
9647
  function useItems(props) {
9646
9648
  const items = vue.computed(() => transformItems$3(props, props.items));
9647
9649
  const hasNullItem = vue.computed(() => items.value.some(item => item.value === null));
9650
+ const itemsMap = vue.shallowRef(new Map());
9651
+ const keylessItems = vue.shallowRef([]);
9652
+ vue.watchEffect(() => {
9653
+ const _items = items.value;
9654
+ const map = new Map();
9655
+ const keyless = [];
9656
+ for (let i = 0; i < _items.length; i++) {
9657
+ const item = _items[i];
9658
+ if (isPrimitive(item.value) || item.value === null) {
9659
+ let values = map.get(item.value);
9660
+ if (!values) {
9661
+ values = [];
9662
+ map.set(item.value, values);
9663
+ }
9664
+ values.push(item);
9665
+ } else {
9666
+ keyless.push(item);
9667
+ }
9668
+ }
9669
+ itemsMap.value = map;
9670
+ keylessItems.value = keyless;
9671
+ });
9648
9672
  function transformIn(value) {
9649
- if (!hasNullItem.value) {
9673
+ // Cache unrefed values outside the loop,
9674
+ // proxy getters can be slow when you call them a billion times
9675
+ const _value = vue.toRaw(value);
9676
+ const _items = itemsMap.value;
9677
+ const _allItems = items.value;
9678
+ const _keylessItems = keylessItems.value;
9679
+ const _hasNullItem = hasNullItem.value;
9680
+ const _returnObject = props.returnObject;
9681
+ const hasValueComparator = !!props.valueComparator;
9682
+ const valueComparator = props.valueComparator || deepEqual;
9683
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9684
+ const returnValue = [];
9685
+ main: for (const v of _value) {
9650
9686
  // When the model value is null, return an InternalItem
9651
9687
  // based on null only if null is one of the items
9652
- value = value.filter(v => v !== null);
9653
- }
9654
- return value.map(v => {
9655
- if (props.returnObject && typeof v === 'string') {
9656
- // String model value means value is a custom input value from combobox
9657
- // Don't look up existing items if the model value is a string
9658
- return transformItem$3(props, v);
9688
+ if (!_hasNullItem && v === null) continue;
9689
+
9690
+ // String model value means value is a custom input value from combobox
9691
+ // Don't look up existing items if the model value is a string
9692
+ if (_returnObject && typeof v === 'string') {
9693
+ returnValue.push(transformItem$3(_props, v));
9694
+ continue;
9659
9695
  }
9660
- return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$3(props, v);
9661
- });
9696
+
9697
+ // Fast path, items with primitive values and no
9698
+ // custom valueComparator can use a constant-time
9699
+ // map lookup instead of searching the items array
9700
+ const fastItems = _items.get(v);
9701
+
9702
+ // Slow path, always use valueComparator.
9703
+ // This is O(n^2) so we really don't want to
9704
+ // do it for more than a couple hundred items.
9705
+ if (hasValueComparator || !fastItems) {
9706
+ for (const item of hasValueComparator ? _allItems : _keylessItems) {
9707
+ if (valueComparator(v, item.value)) {
9708
+ returnValue.push(item);
9709
+ continue main;
9710
+ }
9711
+ }
9712
+ // Not an existing item, construct it from the model (#4000)
9713
+ returnValue.push(transformItem$3(_props, v));
9714
+ continue;
9715
+ }
9716
+ returnValue.push(...fastItems);
9717
+ }
9718
+ return returnValue;
9662
9719
  }
9663
9720
  function transformOut(value) {
9664
9721
  return props.returnObject ? value.map(_ref => {
@@ -9682,9 +9739,6 @@
9682
9739
 
9683
9740
  // Types
9684
9741
 
9685
- function isPrimitive(value) {
9686
- return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
9687
- }
9688
9742
  function transformItem$2(props, item) {
9689
9743
  const type = getPropertyFromItem(item, props.itemType, 'item');
9690
9744
  const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
@@ -12733,7 +12787,7 @@
12733
12787
  let keyboardLookupLastTime;
12734
12788
  const displayItems = vue.computed(() => {
12735
12789
  if (props.hideSelected) {
12736
- return items.value.filter(item => !model.value.some(s => props.valueComparator(s, item)));
12790
+ return items.value.filter(item => !model.value.some(s => (props.valueComparator || deepEqual)(s, item)));
12737
12791
  }
12738
12792
  return items.value;
12739
12793
  });
@@ -12805,7 +12859,7 @@
12805
12859
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12806
12860
  if (item.props.disabled) return;
12807
12861
  if (props.multiple) {
12808
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12862
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
12809
12863
  const add = set == null ? !~index : set;
12810
12864
  if (~index) {
12811
12865
  const value = add ? [...model.value, item] : [...model.value];
@@ -12852,7 +12906,7 @@
12852
12906
  }
12853
12907
  vue.watch(menu, () => {
12854
12908
  if (!props.hideSelected && menu.value && model.value.length) {
12855
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12909
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
12856
12910
  IN_BROWSER && window.requestAnimationFrame(() => {
12857
12911
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12858
12912
  });
@@ -13384,7 +13438,7 @@
13384
13438
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
13385
13439
  if (!item || item.props.disabled) return;
13386
13440
  if (props.multiple) {
13387
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
13441
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
13388
13442
  const add = set == null ? !~index : set;
13389
13443
  if (~index) {
13390
13444
  const value = add ? [...model.value, item] : [...model.value];
@@ -15773,6 +15827,8 @@
15773
15827
  const trackContainerRef = vue.ref();
15774
15828
  const activeThumbRef = vue.ref();
15775
15829
  function parseMouseMove(e) {
15830
+ const el = trackContainerRef.value?.$el;
15831
+ if (!el) return;
15776
15832
  const vertical = props.direction === 'vertical';
15777
15833
  const start = vertical ? 'top' : 'left';
15778
15834
  const length = vertical ? 'height' : 'width';
@@ -15780,7 +15836,7 @@
15780
15836
  const {
15781
15837
  [start]: trackStart,
15782
15838
  [length]: trackLength
15783
- } = trackContainerRef.value?.$el.getBoundingClientRect();
15839
+ } = el.getBoundingClientRect();
15784
15840
  const clickOffset = getPosition(e, position);
15785
15841
 
15786
15842
  // It is possible for left to be NaN, force to number
@@ -15789,13 +15845,17 @@
15789
15845
  return roundValue(min.value + clickPos * (max.value - min.value));
15790
15846
  }
15791
15847
  const handleStop = e => {
15792
- onSliderEnd({
15793
- value: parseMouseMove(e)
15794
- });
15848
+ const value = parseMouseMove(e);
15849
+ if (value != null) {
15850
+ onSliderEnd({
15851
+ value
15852
+ });
15853
+ }
15795
15854
  mousePressed.value = false;
15796
15855
  startOffset.value = 0;
15797
15856
  };
15798
15857
  const handleStart = e => {
15858
+ const value = parseMouseMove(e);
15799
15859
  activeThumbRef.value = getActiveThumb(e);
15800
15860
  if (!activeThumbRef.value) return;
15801
15861
  mousePressed.value = true;
@@ -15803,13 +15863,17 @@
15803
15863
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
15804
15864
  } else {
15805
15865
  startOffset.value = 0;
15806
- onSliderMove({
15807
- value: parseMouseMove(e)
15866
+ if (value != null) {
15867
+ onSliderMove({
15868
+ value
15869
+ });
15870
+ }
15871
+ }
15872
+ if (value != null) {
15873
+ onSliderStart({
15874
+ value
15808
15875
  });
15809
15876
  }
15810
- onSliderStart({
15811
- value: parseMouseMove(e)
15812
- });
15813
15877
  vue.nextTick(() => activeThumbRef.value?.focus());
15814
15878
  };
15815
15879
  const moveListenerOptions = {
@@ -15817,9 +15881,12 @@
15817
15881
  capture: true
15818
15882
  };
15819
15883
  function onMouseMove(e) {
15820
- onSliderMove({
15821
- value: parseMouseMove(e)
15822
- });
15884
+ const value = parseMouseMove(e);
15885
+ if (value != null) {
15886
+ onSliderMove({
15887
+ value
15888
+ });
15889
+ }
15823
15890
  }
15824
15891
  function onSliderMouseUp(e) {
15825
15892
  e.stopPropagation();
@@ -17258,7 +17325,7 @@
17258
17325
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
17259
17326
  if (!item || item.props.disabled) return;
17260
17327
  if (props.multiple) {
17261
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
17328
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
17262
17329
  const add = set == null ? !~index : set;
17263
17330
  if (~index) {
17264
17331
  const value = add ? [...model.value, item] : [...model.value];
@@ -17318,7 +17385,7 @@
17318
17385
  });
17319
17386
  vue.watch(menu, () => {
17320
17387
  if (!props.hideSelected && menu.value && model.value.length) {
17321
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
17388
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
17322
17389
  IN_BROWSER && window.requestAnimationFrame(() => {
17323
17390
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
17324
17391
  });
@@ -21952,7 +22019,7 @@
21952
22019
  type: String,
21953
22020
  default: 'picker-reverse-transition'
21954
22021
  },
21955
- ...makeCalendarProps()
22022
+ ...omit(makeCalendarProps(), ['displayValue'])
21956
22023
  }, 'VDatePickerMonth');
21957
22024
  const VDatePickerMonth = genericComponent()({
21958
22025
  name: 'VDatePickerMonth',
@@ -28333,7 +28400,7 @@
28333
28400
  goTo
28334
28401
  };
28335
28402
  }
28336
- const version$1 = "3.7.11";
28403
+ const version$1 = "3.7.12";
28337
28404
  createVuetify$1.version = version$1;
28338
28405
 
28339
28406
  // Vue's inject() can only be used in setup
@@ -28358,7 +28425,7 @@
28358
28425
  ...options
28359
28426
  });
28360
28427
  };
28361
- const version = "3.7.11";
28428
+ const version = "3.7.12";
28362
28429
  createVuetify.version = version;
28363
28430
 
28364
28431
  exports.blueprints = index;