@vuetify/nightly 3.10.7-dev.2025-10-23 → 3.10.7-dev.2025-10-24

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.10.7-dev.2025-10-23
2
+ * Vuetify v3.10.7-dev.2025-10-24
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -81,6 +81,19 @@
81
81
  }
82
82
  }, 'component');
83
83
 
84
+ /* eslint-disable no-console */
85
+
86
+ function consoleWarn(message) {
87
+ vue.warn(`Vuetify: ${message}`);
88
+ }
89
+ function consoleError(message) {
90
+ vue.warn(`Vuetify error: ${message}`);
91
+ }
92
+ function deprecate(original, replacement) {
93
+ replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
94
+ vue.warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
95
+ }
96
+
84
97
  const IN_BROWSER = typeof window !== 'undefined';
85
98
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
86
99
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
@@ -283,6 +296,39 @@
283
296
  wrap.immediate = fn;
284
297
  return wrap;
285
298
  }
299
+ function throttle(fn, delay) {
300
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
301
+ leading: true,
302
+ trailing: true
303
+ };
304
+ let timeoutId = 0;
305
+ let lastExec = 0;
306
+ let throttling = false;
307
+ const wrap = function () {
308
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
309
+ args[_key2] = arguments[_key2];
310
+ }
311
+ clearTimeout(timeoutId);
312
+ const now = Date.now();
313
+ const elapsed = now - lastExec;
314
+ if (!throttling || elapsed >= delay) {
315
+ lastExec = now;
316
+ }
317
+ if (!throttling && options.leading || elapsed >= delay) {
318
+ window.setTimeout(() => fn(...args)); // ignore 'fn' executin errors
319
+ }
320
+ throttling = true;
321
+ timeoutId = window.setTimeout(() => {
322
+ throttling = false;
323
+ if (options.trailing) {
324
+ fn(...args);
325
+ }
326
+ }, delay);
327
+ };
328
+ wrap.clear = () => clearTimeout(timeoutId);
329
+ wrap.immediate = fn;
330
+ return wrap;
331
+ }
286
332
  function clamp(value) {
287
333
  let min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
288
334
  let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -459,8 +505,8 @@
459
505
  return !!(props[name] || props[`${name}Once`] || props[`${name}Capture`] || props[`${name}OnceCapture`] || props[`${name}CaptureOnce`]);
460
506
  }
461
507
  function callEvent(handler) {
462
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
463
- args[_key2 - 1] = arguments[_key2];
508
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
509
+ args[_key3 - 1] = arguments[_key3];
464
510
  }
465
511
  if (Array.isArray(handler)) {
466
512
  for (const h of handler) {
@@ -473,7 +519,14 @@
473
519
  function focusableChildren(el) {
474
520
  let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
475
521
  const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', 'details:not(:has(> summary))', 'details > summary', '[tabindex]', '[contenteditable]:not([contenteditable="false"])', 'audio[controls]', 'video[controls]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled], [inert])`).join(', ');
476
- return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
522
+ let elements;
523
+ try {
524
+ elements = [...el.querySelectorAll(targets)];
525
+ } catch (err) {
526
+ consoleError(String(err));
527
+ return [];
528
+ }
529
+ return elements.filter(x => !x.closest('[inert]')) // does not have inert parent
477
530
  .filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
478
531
  .filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
479
532
  }
@@ -940,19 +993,6 @@
940
993
  return outputContrast * 100;
941
994
  }
942
995
 
943
- /* eslint-disable no-console */
944
-
945
- function consoleWarn(message) {
946
- vue.warn(`Vuetify: ${message}`);
947
- }
948
- function consoleError(message) {
949
- vue.warn(`Vuetify error: ${message}`);
950
- }
951
- function deprecate(original, replacement) {
952
- replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
953
- vue.warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
954
- }
955
-
956
996
  // Types
957
997
 
958
998
  const delta = 0.20689655172413793; // 6÷29
@@ -9335,6 +9375,10 @@
9335
9375
  }
9336
9376
  const vm = getCurrentInstance('nested');
9337
9377
  const nodeIds = new Set();
9378
+ const itemsUpdatePropagation = throttle(() => {
9379
+ children.value = new Map(children.value);
9380
+ parents.value = new Map(parents.value);
9381
+ }, 100);
9338
9382
  const nested = {
9339
9383
  id: vue.shallowRef(),
9340
9384
  root: {
@@ -9365,6 +9409,7 @@
9365
9409
  if (parentId != null) {
9366
9410
  children.value.set(parentId, [...(children.value.get(parentId) || []), id]);
9367
9411
  }
9412
+ itemsUpdatePropagation();
9368
9413
  },
9369
9414
  unregister: id => {
9370
9415
  if (isUnmounted) return;
@@ -9377,6 +9422,7 @@
9377
9422
  children.value.set(parent, list.filter(child => child !== id));
9378
9423
  }
9379
9424
  parents.value.delete(id);
9425
+ itemsUpdatePropagation();
9380
9426
  },
9381
9427
  open: (id, value, event) => {
9382
9428
  vm.emit('click:open', {
@@ -10764,7 +10810,8 @@
10764
10810
 
10765
10811
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
10766
10812
  const scrollParents = getScrollParents(data.contentEl.value);
10767
- const viewportMargin = 12;
10813
+ const viewportMargin = props.stickToTarget ? 0 : 12; // TOOD: prop.viewportMargin
10814
+
10768
10815
  if (!scrollParents.length) {
10769
10816
  scrollParents.push(document.documentElement);
10770
10817
  if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) {
@@ -10784,10 +10831,17 @@
10784
10831
  }
10785
10832
  return scrollBox;
10786
10833
  }, undefined);
10787
- viewport.x += viewportMargin;
10788
- viewport.y += viewportMargin;
10789
- viewport.width -= viewportMargin * 2;
10790
- viewport.height -= viewportMargin * 2;
10834
+ if (props.stickToTarget) {
10835
+ viewport.x += Math.min(0, targetBox.x);
10836
+ viewport.y += Math.min(0, targetBox.y);
10837
+ viewport.width = Math.max(viewport.width, targetBox.x + targetBox.width);
10838
+ viewport.height = Math.max(viewport.height, targetBox.y + targetBox.height);
10839
+ } else {
10840
+ viewport.x += viewportMargin;
10841
+ viewport.y += viewportMargin;
10842
+ viewport.width -= viewportMargin * 2;
10843
+ viewport.height -= viewportMargin * 2;
10844
+ }
10791
10845
  let placement = {
10792
10846
  anchor: preferredAnchor.value,
10793
10847
  origin: preferredOrigin.value
@@ -10898,19 +10952,19 @@
10898
10952
 
10899
10953
  // shift
10900
10954
  if (overflows.x.before) {
10901
- if (!props.stickToTarget) x += overflows.x.before;
10955
+ x += overflows.x.before;
10902
10956
  contentBox.x += overflows.x.before;
10903
10957
  }
10904
10958
  if (overflows.x.after) {
10905
- if (!props.stickToTarget) x -= overflows.x.after;
10959
+ x -= overflows.x.after;
10906
10960
  contentBox.x -= overflows.x.after;
10907
10961
  }
10908
10962
  if (overflows.y.before) {
10909
- if (!props.stickToTarget) y += overflows.y.before;
10963
+ y += overflows.y.before;
10910
10964
  contentBox.y += overflows.y.before;
10911
10965
  }
10912
10966
  if (overflows.y.after) {
10913
- if (!props.stickToTarget) y -= overflows.y.after;
10967
+ y -= overflows.y.after;
10914
10968
  contentBox.y -= overflows.y.after;
10915
10969
  }
10916
10970
 
@@ -10919,9 +10973,9 @@
10919
10973
  const overflows = getOverflow(contentBox, viewport);
10920
10974
  available.x = viewport.width - overflows.x.before - overflows.x.after;
10921
10975
  available.y = viewport.height - overflows.y.before - overflows.y.after;
10922
- if (!props.stickToTarget) x += overflows.x.before;
10976
+ x += overflows.x.before;
10923
10977
  contentBox.x += overflows.x.before;
10924
- if (!props.stickToTarget) y += overflows.y.before;
10978
+ y += overflows.y.before;
10925
10979
  contentBox.y += overflows.y.before;
10926
10980
  }
10927
10981
  break;
@@ -11231,7 +11285,6 @@
11231
11285
  isActive.value = !isActive.value;
11232
11286
  },
11233
11287
  onMouseenter: e => {
11234
- if (e.sourceCapabilities?.firesTouchEvents) return;
11235
11288
  isHovered = true;
11236
11289
  activatorEl.value = e.currentTarget || e.target;
11237
11290
  runOpenDelay();
@@ -38162,7 +38215,7 @@
38162
38215
  };
38163
38216
  });
38164
38217
  }
38165
- const version$1 = "3.10.7-dev.2025-10-23";
38218
+ const version$1 = "3.10.7-dev.2025-10-24";
38166
38219
  createVuetify$1.version = version$1;
38167
38220
 
38168
38221
  // Vue's inject() can only be used in setup
@@ -38460,7 +38513,7 @@
38460
38513
 
38461
38514
  /* eslint-disable local-rules/sort-imports */
38462
38515
 
38463
- const version = "3.10.7-dev.2025-10-23";
38516
+ const version = "3.10.7-dev.2025-10-24";
38464
38517
 
38465
38518
  /* eslint-disable local-rules/sort-imports */
38466
38519