@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.
package/dist/vuetify.js CHANGED
@@ -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
  */
@@ -10,6 +10,19 @@
10
10
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Vuetify = {}, global.Vue));
11
11
  })(this, (function (exports, vue) { 'use strict';
12
12
 
13
+ /* eslint-disable no-console */
14
+
15
+ function consoleWarn(message) {
16
+ vue.warn(`Vuetify: ${message}`);
17
+ }
18
+ function consoleError(message) {
19
+ vue.warn(`Vuetify error: ${message}`);
20
+ }
21
+ function deprecate(original, replacement) {
22
+ replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
23
+ vue.warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
24
+ }
25
+
13
26
  const IN_BROWSER = typeof window !== 'undefined';
14
27
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
15
28
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
@@ -212,6 +225,39 @@
212
225
  wrap.immediate = fn;
213
226
  return wrap;
214
227
  }
228
+ function throttle(fn, delay) {
229
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
230
+ leading: true,
231
+ trailing: true
232
+ };
233
+ let timeoutId = 0;
234
+ let lastExec = 0;
235
+ let throttling = false;
236
+ const wrap = function () {
237
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
238
+ args[_key2] = arguments[_key2];
239
+ }
240
+ clearTimeout(timeoutId);
241
+ const now = Date.now();
242
+ const elapsed = now - lastExec;
243
+ if (!throttling || elapsed >= delay) {
244
+ lastExec = now;
245
+ }
246
+ if (!throttling && options.leading || elapsed >= delay) {
247
+ window.setTimeout(() => fn(...args)); // ignore 'fn' executin errors
248
+ }
249
+ throttling = true;
250
+ timeoutId = window.setTimeout(() => {
251
+ throttling = false;
252
+ if (options.trailing) {
253
+ fn(...args);
254
+ }
255
+ }, delay);
256
+ };
257
+ wrap.clear = () => clearTimeout(timeoutId);
258
+ wrap.immediate = fn;
259
+ return wrap;
260
+ }
215
261
  function clamp(value) {
216
262
  let min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
217
263
  let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -388,8 +434,8 @@
388
434
  return !!(props[name] || props[`${name}Once`] || props[`${name}Capture`] || props[`${name}OnceCapture`] || props[`${name}CaptureOnce`]);
389
435
  }
390
436
  function callEvent(handler) {
391
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
392
- args[_key2 - 1] = arguments[_key2];
437
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
438
+ args[_key3 - 1] = arguments[_key3];
393
439
  }
394
440
  if (Array.isArray(handler)) {
395
441
  for (const h of handler) {
@@ -402,7 +448,14 @@
402
448
  function focusableChildren(el) {
403
449
  let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
404
450
  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(', ');
405
- return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
451
+ let elements;
452
+ try {
453
+ elements = [...el.querySelectorAll(targets)];
454
+ } catch (err) {
455
+ consoleError(String(err));
456
+ return [];
457
+ }
458
+ return elements.filter(x => !x.closest('[inert]')) // does not have inert parent
406
459
  .filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
407
460
  .filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
408
461
  }
@@ -869,19 +922,6 @@
869
922
  return outputContrast * 100;
870
923
  }
871
924
 
872
- /* eslint-disable no-console */
873
-
874
- function consoleWarn(message) {
875
- vue.warn(`Vuetify: ${message}`);
876
- }
877
- function consoleError(message) {
878
- vue.warn(`Vuetify error: ${message}`);
879
- }
880
- function deprecate(original, replacement) {
881
- replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
882
- vue.warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
883
- }
884
-
885
925
  // Types
886
926
 
887
927
  const delta = 0.20689655172413793; // 6÷29
@@ -9659,6 +9699,10 @@
9659
9699
  }
9660
9700
  const vm = getCurrentInstance('nested');
9661
9701
  const nodeIds = new Set();
9702
+ const itemsUpdatePropagation = throttle(() => {
9703
+ children.value = new Map(children.value);
9704
+ parents.value = new Map(parents.value);
9705
+ }, 100);
9662
9706
  const nested = {
9663
9707
  id: vue.shallowRef(),
9664
9708
  root: {
@@ -9689,6 +9733,7 @@
9689
9733
  if (parentId != null) {
9690
9734
  children.value.set(parentId, [...(children.value.get(parentId) || []), id]);
9691
9735
  }
9736
+ itemsUpdatePropagation();
9692
9737
  },
9693
9738
  unregister: id => {
9694
9739
  if (isUnmounted) return;
@@ -9701,6 +9746,7 @@
9701
9746
  children.value.set(parent, list.filter(child => child !== id));
9702
9747
  }
9703
9748
  parents.value.delete(id);
9749
+ itemsUpdatePropagation();
9704
9750
  },
9705
9751
  open: (id, value, event) => {
9706
9752
  vm.emit('click:open', {
@@ -11088,7 +11134,8 @@
11088
11134
 
11089
11135
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
11090
11136
  const scrollParents = getScrollParents(data.contentEl.value);
11091
- const viewportMargin = 12;
11137
+ const viewportMargin = props.stickToTarget ? 0 : 12; // TOOD: prop.viewportMargin
11138
+
11092
11139
  if (!scrollParents.length) {
11093
11140
  scrollParents.push(document.documentElement);
11094
11141
  if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) {
@@ -11108,10 +11155,17 @@
11108
11155
  }
11109
11156
  return scrollBox;
11110
11157
  }, undefined);
11111
- viewport.x += viewportMargin;
11112
- viewport.y += viewportMargin;
11113
- viewport.width -= viewportMargin * 2;
11114
- viewport.height -= viewportMargin * 2;
11158
+ if (props.stickToTarget) {
11159
+ viewport.x += Math.min(0, targetBox.x);
11160
+ viewport.y += Math.min(0, targetBox.y);
11161
+ viewport.width = Math.max(viewport.width, targetBox.x + targetBox.width);
11162
+ viewport.height = Math.max(viewport.height, targetBox.y + targetBox.height);
11163
+ } else {
11164
+ viewport.x += viewportMargin;
11165
+ viewport.y += viewportMargin;
11166
+ viewport.width -= viewportMargin * 2;
11167
+ viewport.height -= viewportMargin * 2;
11168
+ }
11115
11169
  let placement = {
11116
11170
  anchor: preferredAnchor.value,
11117
11171
  origin: preferredOrigin.value
@@ -11222,19 +11276,19 @@
11222
11276
 
11223
11277
  // shift
11224
11278
  if (overflows.x.before) {
11225
- if (!props.stickToTarget) x += overflows.x.before;
11279
+ x += overflows.x.before;
11226
11280
  contentBox.x += overflows.x.before;
11227
11281
  }
11228
11282
  if (overflows.x.after) {
11229
- if (!props.stickToTarget) x -= overflows.x.after;
11283
+ x -= overflows.x.after;
11230
11284
  contentBox.x -= overflows.x.after;
11231
11285
  }
11232
11286
  if (overflows.y.before) {
11233
- if (!props.stickToTarget) y += overflows.y.before;
11287
+ y += overflows.y.before;
11234
11288
  contentBox.y += overflows.y.before;
11235
11289
  }
11236
11290
  if (overflows.y.after) {
11237
- if (!props.stickToTarget) y -= overflows.y.after;
11291
+ y -= overflows.y.after;
11238
11292
  contentBox.y -= overflows.y.after;
11239
11293
  }
11240
11294
 
@@ -11243,9 +11297,9 @@
11243
11297
  const overflows = getOverflow(contentBox, viewport);
11244
11298
  available.x = viewport.width - overflows.x.before - overflows.x.after;
11245
11299
  available.y = viewport.height - overflows.y.before - overflows.y.after;
11246
- if (!props.stickToTarget) x += overflows.x.before;
11300
+ x += overflows.x.before;
11247
11301
  contentBox.x += overflows.x.before;
11248
- if (!props.stickToTarget) y += overflows.y.before;
11302
+ y += overflows.y.before;
11249
11303
  contentBox.y += overflows.y.before;
11250
11304
  }
11251
11305
  break;
@@ -11555,7 +11609,6 @@
11555
11609
  isActive.value = !isActive.value;
11556
11610
  },
11557
11611
  onMouseenter: e => {
11558
- if (e.sourceCapabilities?.firesTouchEvents) return;
11559
11612
  isHovered = true;
11560
11613
  activatorEl.value = e.currentTarget || e.target;
11561
11614
  runOpenDelay();
@@ -32527,7 +32580,7 @@
32527
32580
  };
32528
32581
  });
32529
32582
  }
32530
- const version$1 = "3.10.7-dev.2025-10-23";
32583
+ const version$1 = "3.10.7-dev.2025-10-24";
32531
32584
  createVuetify$1.version = version$1;
32532
32585
 
32533
32586
  // Vue's inject() can only be used in setup
@@ -32552,7 +32605,7 @@
32552
32605
  ...options
32553
32606
  });
32554
32607
  };
32555
- const version = "3.10.7-dev.2025-10-23";
32608
+ const version = "3.10.7-dev.2025-10-24";
32556
32609
  createVuetify.version = version;
32557
32610
 
32558
32611
  exports.blueprints = index;