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
  */
@@ -581,6 +581,9 @@
581
581
  const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
582
582
  return isPrintableChar && noModifier;
583
583
  }
584
+ function isPrimitive(value) {
585
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
586
+ }
584
587
 
585
588
  // Utilities
586
589
  const block = ['top', 'bottom'];
@@ -5349,11 +5352,13 @@
5349
5352
  animation.classList.add('v-ripple__animation--visible');
5350
5353
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
5351
5354
  animation.dataset.activated = String(performance.now());
5352
- setTimeout(() => {
5353
- animation.classList.remove('v-ripple__animation--enter');
5354
- animation.classList.add('v-ripple__animation--in');
5355
- transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5356
- }, 0);
5355
+ requestAnimationFrame(() => {
5356
+ requestAnimationFrame(() => {
5357
+ animation.classList.remove('v-ripple__animation--enter');
5358
+ animation.classList.add('v-ripple__animation--in');
5359
+ transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5360
+ });
5361
+ });
5357
5362
  },
5358
5363
  hide(el) {
5359
5364
  if (!el?._ripple?.enabled) return;
@@ -8348,12 +8353,12 @@
8348
8353
  return selected;
8349
8354
  },
8350
8355
  in: (v, children, parents) => {
8351
- let map = new Map();
8356
+ const map = new Map();
8352
8357
  for (const id of v || []) {
8353
- map = strategy.select({
8358
+ strategy.select({
8354
8359
  id,
8355
8360
  value: true,
8356
- selected: new Map(map),
8361
+ selected: map,
8357
8362
  children,
8358
8363
  parents
8359
8364
  });
@@ -8388,11 +8393,10 @@
8388
8393
  });
8389
8394
  },
8390
8395
  in: (v, children, parents) => {
8391
- let map = new Map();
8392
8396
  if (v?.length) {
8393
- map = parentStrategy.in(v.slice(0, 1), children, parents);
8397
+ return parentStrategy.in(v.slice(0, 1), children, parents);
8394
8398
  }
8395
- return map;
8399
+ return new Map();
8396
8400
  },
8397
8401
  out: (v, children, parents) => {
8398
8402
  return parentStrategy.out(v, children, parents);
@@ -8495,7 +8499,7 @@
8495
8499
  map = strategy.select({
8496
8500
  id,
8497
8501
  value: true,
8498
- selected: new Map(map),
8502
+ selected: map,
8499
8503
  children,
8500
8504
  parents
8501
8505
  });
@@ -9379,10 +9383,7 @@
9379
9383
  default: 'props'
9380
9384
  },
9381
9385
  returnObject: Boolean,
9382
- valueComparator: {
9383
- type: Function,
9384
- default: deepEqual
9385
- }
9386
+ valueComparator: Function
9386
9387
  }, 'list-items');
9387
9388
  function transformItem$3(props, item) {
9388
9389
  const title = getPropertyFromItem(item, props.itemTitle, item);
@@ -9403,29 +9404,85 @@
9403
9404
  };
9404
9405
  }
9405
9406
  function transformItems$3(props, items) {
9407
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9406
9408
  const array = [];
9407
9409
  for (const item of items) {
9408
- array.push(transformItem$3(props, item));
9410
+ array.push(transformItem$3(_props, item));
9409
9411
  }
9410
9412
  return array;
9411
9413
  }
9412
9414
  function useItems(props) {
9413
9415
  const items = vue.computed(() => transformItems$3(props, props.items));
9414
9416
  const hasNullItem = vue.computed(() => items.value.some(item => item.value === null));
9417
+ const itemsMap = vue.shallowRef(new Map());
9418
+ const keylessItems = vue.shallowRef([]);
9419
+ vue.watchEffect(() => {
9420
+ const _items = items.value;
9421
+ const map = new Map();
9422
+ const keyless = [];
9423
+ for (let i = 0; i < _items.length; i++) {
9424
+ const item = _items[i];
9425
+ if (isPrimitive(item.value) || item.value === null) {
9426
+ let values = map.get(item.value);
9427
+ if (!values) {
9428
+ values = [];
9429
+ map.set(item.value, values);
9430
+ }
9431
+ values.push(item);
9432
+ } else {
9433
+ keyless.push(item);
9434
+ }
9435
+ }
9436
+ itemsMap.value = map;
9437
+ keylessItems.value = keyless;
9438
+ });
9415
9439
  function transformIn(value) {
9416
- if (!hasNullItem.value) {
9440
+ // Cache unrefed values outside the loop,
9441
+ // proxy getters can be slow when you call them a billion times
9442
+ const _value = vue.toRaw(value);
9443
+ const _items = itemsMap.value;
9444
+ const _allItems = items.value;
9445
+ const _keylessItems = keylessItems.value;
9446
+ const _hasNullItem = hasNullItem.value;
9447
+ const _returnObject = props.returnObject;
9448
+ const hasValueComparator = !!props.valueComparator;
9449
+ const valueComparator = props.valueComparator || deepEqual;
9450
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9451
+ const returnValue = [];
9452
+ main: for (const v of _value) {
9417
9453
  // When the model value is null, return an InternalItem
9418
9454
  // based on null only if null is one of the items
9419
- value = value.filter(v => v !== null);
9420
- }
9421
- return value.map(v => {
9422
- if (props.returnObject && typeof v === 'string') {
9423
- // String model value means value is a custom input value from combobox
9424
- // Don't look up existing items if the model value is a string
9425
- return transformItem$3(props, v);
9455
+ if (!_hasNullItem && v === null) continue;
9456
+
9457
+ // String model value means value is a custom input value from combobox
9458
+ // Don't look up existing items if the model value is a string
9459
+ if (_returnObject && typeof v === 'string') {
9460
+ returnValue.push(transformItem$3(_props, v));
9461
+ continue;
9426
9462
  }
9427
- return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$3(props, v);
9428
- });
9463
+
9464
+ // Fast path, items with primitive values and no
9465
+ // custom valueComparator can use a constant-time
9466
+ // map lookup instead of searching the items array
9467
+ const fastItems = _items.get(v);
9468
+
9469
+ // Slow path, always use valueComparator.
9470
+ // This is O(n^2) so we really don't want to
9471
+ // do it for more than a couple hundred items.
9472
+ if (hasValueComparator || !fastItems) {
9473
+ for (const item of hasValueComparator ? _allItems : _keylessItems) {
9474
+ if (valueComparator(v, item.value)) {
9475
+ returnValue.push(item);
9476
+ continue main;
9477
+ }
9478
+ }
9479
+ // Not an existing item, construct it from the model (#4000)
9480
+ returnValue.push(transformItem$3(_props, v));
9481
+ continue;
9482
+ }
9483
+ returnValue.push(...fastItems);
9484
+ }
9485
+ return returnValue;
9429
9486
  }
9430
9487
  function transformOut(value) {
9431
9488
  return props.returnObject ? value.map(_ref => {
@@ -9449,9 +9506,6 @@
9449
9506
 
9450
9507
  // Types
9451
9508
 
9452
- function isPrimitive(value) {
9453
- return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
9454
- }
9455
9509
  function transformItem$2(props, item) {
9456
9510
  const type = getPropertyFromItem(item, props.itemType, 'item');
9457
9511
  const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
@@ -12500,7 +12554,7 @@
12500
12554
  let keyboardLookupLastTime;
12501
12555
  const displayItems = vue.computed(() => {
12502
12556
  if (props.hideSelected) {
12503
- return items.value.filter(item => !model.value.some(s => props.valueComparator(s, item)));
12557
+ return items.value.filter(item => !model.value.some(s => (props.valueComparator || deepEqual)(s, item)));
12504
12558
  }
12505
12559
  return items.value;
12506
12560
  });
@@ -12572,7 +12626,7 @@
12572
12626
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12573
12627
  if (item.props.disabled) return;
12574
12628
  if (props.multiple) {
12575
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12629
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
12576
12630
  const add = set == null ? !~index : set;
12577
12631
  if (~index) {
12578
12632
  const value = add ? [...model.value, item] : [...model.value];
@@ -12619,7 +12673,7 @@
12619
12673
  }
12620
12674
  vue.watch(menu, () => {
12621
12675
  if (!props.hideSelected && menu.value && model.value.length) {
12622
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12676
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
12623
12677
  IN_BROWSER && window.requestAnimationFrame(() => {
12624
12678
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12625
12679
  });
@@ -13151,7 +13205,7 @@
13151
13205
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
13152
13206
  if (!item || item.props.disabled) return;
13153
13207
  if (props.multiple) {
13154
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
13208
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
13155
13209
  const add = set == null ? !~index : set;
13156
13210
  if (~index) {
13157
13211
  const value = add ? [...model.value, item] : [...model.value];
@@ -15540,6 +15594,8 @@
15540
15594
  const trackContainerRef = vue.ref();
15541
15595
  const activeThumbRef = vue.ref();
15542
15596
  function parseMouseMove(e) {
15597
+ const el = trackContainerRef.value?.$el;
15598
+ if (!el) return;
15543
15599
  const vertical = props.direction === 'vertical';
15544
15600
  const start = vertical ? 'top' : 'left';
15545
15601
  const length = vertical ? 'height' : 'width';
@@ -15547,7 +15603,7 @@
15547
15603
  const {
15548
15604
  [start]: trackStart,
15549
15605
  [length]: trackLength
15550
- } = trackContainerRef.value?.$el.getBoundingClientRect();
15606
+ } = el.getBoundingClientRect();
15551
15607
  const clickOffset = getPosition(e, position);
15552
15608
 
15553
15609
  // It is possible for left to be NaN, force to number
@@ -15556,13 +15612,17 @@
15556
15612
  return roundValue(min.value + clickPos * (max.value - min.value));
15557
15613
  }
15558
15614
  const handleStop = e => {
15559
- onSliderEnd({
15560
- value: parseMouseMove(e)
15561
- });
15615
+ const value = parseMouseMove(e);
15616
+ if (value != null) {
15617
+ onSliderEnd({
15618
+ value
15619
+ });
15620
+ }
15562
15621
  mousePressed.value = false;
15563
15622
  startOffset.value = 0;
15564
15623
  };
15565
15624
  const handleStart = e => {
15625
+ const value = parseMouseMove(e);
15566
15626
  activeThumbRef.value = getActiveThumb(e);
15567
15627
  if (!activeThumbRef.value) return;
15568
15628
  mousePressed.value = true;
@@ -15570,13 +15630,17 @@
15570
15630
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
15571
15631
  } else {
15572
15632
  startOffset.value = 0;
15573
- onSliderMove({
15574
- value: parseMouseMove(e)
15633
+ if (value != null) {
15634
+ onSliderMove({
15635
+ value
15636
+ });
15637
+ }
15638
+ }
15639
+ if (value != null) {
15640
+ onSliderStart({
15641
+ value
15575
15642
  });
15576
15643
  }
15577
- onSliderStart({
15578
- value: parseMouseMove(e)
15579
- });
15580
15644
  vue.nextTick(() => activeThumbRef.value?.focus());
15581
15645
  };
15582
15646
  const moveListenerOptions = {
@@ -15584,9 +15648,12 @@
15584
15648
  capture: true
15585
15649
  };
15586
15650
  function onMouseMove(e) {
15587
- onSliderMove({
15588
- value: parseMouseMove(e)
15589
- });
15651
+ const value = parseMouseMove(e);
15652
+ if (value != null) {
15653
+ onSliderMove({
15654
+ value
15655
+ });
15656
+ }
15590
15657
  }
15591
15658
  function onSliderMouseUp(e) {
15592
15659
  e.stopPropagation();
@@ -17025,7 +17092,7 @@
17025
17092
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
17026
17093
  if (!item || item.props.disabled) return;
17027
17094
  if (props.multiple) {
17028
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
17095
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
17029
17096
  const add = set == null ? !~index : set;
17030
17097
  if (~index) {
17031
17098
  const value = add ? [...model.value, item] : [...model.value];
@@ -17085,7 +17152,7 @@
17085
17152
  });
17086
17153
  vue.watch(menu, () => {
17087
17154
  if (!props.hideSelected && menu.value && model.value.length) {
17088
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
17155
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
17089
17156
  IN_BROWSER && window.requestAnimationFrame(() => {
17090
17157
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
17091
17158
  });
@@ -21719,7 +21786,7 @@
21719
21786
  type: String,
21720
21787
  default: 'picker-reverse-transition'
21721
21788
  },
21722
- ...makeCalendarProps()
21789
+ ...omit(makeCalendarProps(), ['displayValue'])
21723
21790
  }, 'VDatePickerMonth');
21724
21791
  const VDatePickerMonth = genericComponent()({
21725
21792
  name: 'VDatePickerMonth',
@@ -28128,7 +28195,7 @@
28128
28195
  ...omit(makeVDatePickerProps({
28129
28196
  weeksInMonth: 'dynamic',
28130
28197
  hideHeader: true
28131
- }), ['active', 'location'])
28198
+ }), ['active', 'location', 'rounded'])
28132
28199
  }, 'VDateInput');
28133
28200
  const VDateInput = genericComponent()({
28134
28201
  name: 'VDateInput',
@@ -28149,8 +28216,9 @@
28149
28216
  focus,
28150
28217
  blur
28151
28218
  } = useFocus(props);
28152
- const model = useProxiedModel(props, 'modelValue', props.multiple ? [] : null);
28219
+ const model = useProxiedModel(props, 'modelValue', props.multiple ? [] : null, val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val, val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val);
28153
28220
  const menu = vue.shallowRef(false);
28221
+ const vDateInputRef = vue.ref();
28154
28222
  const display = vue.computed(() => {
28155
28223
  const value = wrapInArray(model.value);
28156
28224
  if (!value.length) return null;
@@ -28172,7 +28240,7 @@
28172
28240
  return;
28173
28241
  }
28174
28242
  const target = e.target;
28175
- model.value = adapter.date(target.value);
28243
+ model.value = target.value;
28176
28244
  }
28177
28245
  function onClick(e) {
28178
28246
  e.preventDefault();
@@ -28182,11 +28250,17 @@
28182
28250
  function onSave() {
28183
28251
  menu.value = false;
28184
28252
  }
28253
+ function onUpdateModel(value) {
28254
+ if (value != null) return;
28255
+ model.value = null;
28256
+ }
28185
28257
  useRender(() => {
28186
28258
  const confirmEditProps = VConfirmEdit.filterProps(props);
28187
- const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location']));
28259
+ const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
28188
28260
  const textFieldProps = VTextField.filterProps(props);
28189
- return vue.createVNode(VTextField, vue.mergeProps(textFieldProps, {
28261
+ return vue.createVNode(VTextField, vue.mergeProps({
28262
+ "ref": vDateInputRef
28263
+ }, textFieldProps, {
28190
28264
  "class": props.class,
28191
28265
  "style": props.style,
28192
28266
  "modelValue": display.value,
@@ -28195,7 +28269,8 @@
28195
28269
  "onFocus": focus,
28196
28270
  "onBlur": blur,
28197
28271
  "onClick:control": isInteractive.value ? onClick : undefined,
28198
- "onClick:prepend": isInteractive.value ? onClick : undefined
28272
+ "onClick:prepend": isInteractive.value ? onClick : undefined,
28273
+ "onUpdate:modelValue": onUpdateModel
28199
28274
  }), {
28200
28275
  default: () => [vue.createVNode(VMenu, {
28201
28276
  "modelValue": menu.value,
@@ -28243,6 +28318,7 @@
28243
28318
  }), slots.default?.()]
28244
28319
  });
28245
28320
  });
28321
+ return forwardRefs({}, vDateInputRef);
28246
28322
  }
28247
28323
  });
28248
28324
 
@@ -30821,7 +30897,7 @@
30821
30897
  goTo
30822
30898
  };
30823
30899
  }
30824
- const version$1 = "3.7.11";
30900
+ const version$1 = "3.7.12";
30825
30901
  createVuetify$1.version = version$1;
30826
30902
 
30827
30903
  // Vue's inject() can only be used in setup
@@ -31074,7 +31150,7 @@
31074
31150
 
31075
31151
  /* eslint-disable local-rules/sort-imports */
31076
31152
 
31077
- const version = "3.7.11";
31153
+ const version = "3.7.12";
31078
31154
 
31079
31155
  /* eslint-disable local-rules/sort-imports */
31080
31156