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

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 (45) hide show
  1. package/CHANGELOG.md +13 -3
  2. package/dist/json/attributes.json +3162 -3138
  3. package/dist/json/importMap-labs.json +32 -32
  4. package/dist/json/importMap.json +162 -162
  5. package/dist/json/tags.json +6 -0
  6. package/dist/json/web-types.json +5516 -5456
  7. package/dist/vuetify-labs.cjs +138 -33
  8. package/dist/vuetify-labs.css +4436 -4411
  9. package/dist/vuetify-labs.d.ts +286 -199
  10. package/dist/vuetify-labs.esm.js +139 -34
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +138 -33
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +138 -33
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +4010 -3985
  17. package/dist/vuetify.d.ts +258 -199
  18. package/dist/vuetify.esm.js +139 -34
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +138 -33
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +848 -840
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VDatePicker/VDatePicker.d.ts +50 -0
  26. package/lib/components/VDatePicker/VDatePickerMonth.css +25 -0
  27. package/lib/components/VDatePicker/VDatePickerMonth.d.ts +53 -0
  28. package/lib/components/VDatePicker/VDatePickerMonth.js +57 -4
  29. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  30. package/lib/components/VDatePicker/VDatePickerMonth.sass +22 -0
  31. package/lib/components/VDatePicker/_variables.scss +5 -0
  32. package/lib/components/VOverlay/locationStrategies.js +19 -11
  33. package/lib/components/VOverlay/locationStrategies.js.map +1 -1
  34. package/lib/components/VOverlay/useActivator.js +0 -1
  35. package/lib/components/VOverlay/useActivator.js.map +1 -1
  36. package/lib/composables/nested/nested.js +7 -1
  37. package/lib/composables/nested/nested.js.map +1 -1
  38. package/lib/entry-bundler.js +1 -1
  39. package/lib/framework.d.ts +62 -62
  40. package/lib/framework.js +1 -1
  41. package/lib/labs/VDateInput/VDateInput.d.ts +50 -0
  42. package/lib/util/helpers.d.ts +8 -1
  43. package/lib/util/helpers.js +40 -9
  44. package/lib/util/helpers.js.map +1 -1
  45. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.10.7-dev.2025-10-23
2
+ * Vuetify v3.10.7-dev.2025-10-25
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, toValue, watch, onBeforeUnmount, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
7
+ import { warn, shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, camelize, isVNode, Comment, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, toValue, watch, onBeforeUnmount, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -77,6 +77,19 @@ const makeComponentProps = propsFactory({
77
77
  }
78
78
  }, 'component');
79
79
 
80
+ /* eslint-disable no-console */
81
+
82
+ function consoleWarn(message) {
83
+ warn(`Vuetify: ${message}`);
84
+ }
85
+ function consoleError(message) {
86
+ warn(`Vuetify error: ${message}`);
87
+ }
88
+ function deprecate(original, replacement) {
89
+ replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
90
+ warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
91
+ }
92
+
80
93
  const IN_BROWSER = typeof window !== 'undefined';
81
94
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
82
95
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
@@ -279,6 +292,39 @@ function debounce(fn, delay) {
279
292
  wrap.immediate = fn;
280
293
  return wrap;
281
294
  }
295
+ function throttle(fn, delay) {
296
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
297
+ leading: true,
298
+ trailing: true
299
+ };
300
+ let timeoutId = 0;
301
+ let lastExec = 0;
302
+ let throttling = false;
303
+ const wrap = function () {
304
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
305
+ args[_key2] = arguments[_key2];
306
+ }
307
+ clearTimeout(timeoutId);
308
+ const now = Date.now();
309
+ const elapsed = now - lastExec;
310
+ if (!throttling || elapsed >= delay) {
311
+ lastExec = now;
312
+ }
313
+ if (!throttling && options.leading || elapsed >= delay) {
314
+ window.setTimeout(() => fn(...args)); // ignore 'fn' executin errors
315
+ }
316
+ throttling = true;
317
+ timeoutId = window.setTimeout(() => {
318
+ throttling = false;
319
+ if (options.trailing) {
320
+ fn(...args);
321
+ }
322
+ }, delay);
323
+ };
324
+ wrap.clear = () => clearTimeout(timeoutId);
325
+ wrap.immediate = fn;
326
+ return wrap;
327
+ }
282
328
  function clamp(value) {
283
329
  let min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
284
330
  let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -455,8 +501,8 @@ function hasEvent(props, name) {
455
501
  return !!(props[name] || props[`${name}Once`] || props[`${name}Capture`] || props[`${name}OnceCapture`] || props[`${name}CaptureOnce`]);
456
502
  }
457
503
  function callEvent(handler) {
458
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
459
- args[_key2 - 1] = arguments[_key2];
504
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
505
+ args[_key3 - 1] = arguments[_key3];
460
506
  }
461
507
  if (Array.isArray(handler)) {
462
508
  for (const h of handler) {
@@ -469,7 +515,14 @@ function callEvent(handler) {
469
515
  function focusableChildren(el) {
470
516
  let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
471
517
  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(', ');
472
- return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
518
+ let elements;
519
+ try {
520
+ elements = [...el.querySelectorAll(targets)];
521
+ } catch (err) {
522
+ consoleError(String(err));
523
+ return [];
524
+ }
525
+ return elements.filter(x => !x.closest('[inert]')) // does not have inert parent
473
526
  .filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
474
527
  .filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
475
528
  }
@@ -936,19 +989,6 @@ function APCAcontrast(text, background) {
936
989
  return outputContrast * 100;
937
990
  }
938
991
 
939
- /* eslint-disable no-console */
940
-
941
- function consoleWarn(message) {
942
- warn(`Vuetify: ${message}`);
943
- }
944
- function consoleError(message) {
945
- warn(`Vuetify error: ${message}`);
946
- }
947
- function deprecate(original, replacement) {
948
- replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
949
- warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
950
- }
951
-
952
992
  // Types
953
993
 
954
994
  const delta = 0.20689655172413793; // 6÷29
@@ -9331,6 +9371,10 @@ const useNested = props => {
9331
9371
  }
9332
9372
  const vm = getCurrentInstance('nested');
9333
9373
  const nodeIds = new Set();
9374
+ const itemsUpdatePropagation = throttle(() => {
9375
+ children.value = new Map(children.value);
9376
+ parents.value = new Map(parents.value);
9377
+ }, 100);
9334
9378
  const nested = {
9335
9379
  id: shallowRef(),
9336
9380
  root: {
@@ -9361,6 +9405,7 @@ const useNested = props => {
9361
9405
  if (parentId != null) {
9362
9406
  children.value.set(parentId, [...(children.value.get(parentId) || []), id]);
9363
9407
  }
9408
+ itemsUpdatePropagation();
9364
9409
  },
9365
9410
  unregister: id => {
9366
9411
  if (isUnmounted) return;
@@ -9373,6 +9418,7 @@ const useNested = props => {
9373
9418
  children.value.set(parent, list.filter(child => child !== id));
9374
9419
  }
9375
9420
  parents.value.delete(id);
9421
+ itemsUpdatePropagation();
9376
9422
  },
9377
9423
  open: (id, value, event) => {
9378
9424
  vm.emit('click:open', {
@@ -10760,7 +10806,8 @@ function connectedLocationStrategy(data, props, contentStyles) {
10760
10806
 
10761
10807
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
10762
10808
  const scrollParents = getScrollParents(data.contentEl.value);
10763
- const viewportMargin = 12;
10809
+ const viewportMargin = props.stickToTarget ? 0 : 12; // TOOD: prop.viewportMargin
10810
+
10764
10811
  if (!scrollParents.length) {
10765
10812
  scrollParents.push(document.documentElement);
10766
10813
  if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) {
@@ -10780,10 +10827,17 @@ function connectedLocationStrategy(data, props, contentStyles) {
10780
10827
  }
10781
10828
  return scrollBox;
10782
10829
  }, undefined);
10783
- viewport.x += viewportMargin;
10784
- viewport.y += viewportMargin;
10785
- viewport.width -= viewportMargin * 2;
10786
- viewport.height -= viewportMargin * 2;
10830
+ if (props.stickToTarget) {
10831
+ viewport.x += Math.min(0, targetBox.x);
10832
+ viewport.y += Math.min(0, targetBox.y);
10833
+ viewport.width = Math.max(viewport.width, targetBox.x + targetBox.width);
10834
+ viewport.height = Math.max(viewport.height, targetBox.y + targetBox.height);
10835
+ } else {
10836
+ viewport.x += viewportMargin;
10837
+ viewport.y += viewportMargin;
10838
+ viewport.width -= viewportMargin * 2;
10839
+ viewport.height -= viewportMargin * 2;
10840
+ }
10787
10841
  let placement = {
10788
10842
  anchor: preferredAnchor.value,
10789
10843
  origin: preferredOrigin.value
@@ -10894,19 +10948,19 @@ function connectedLocationStrategy(data, props, contentStyles) {
10894
10948
 
10895
10949
  // shift
10896
10950
  if (overflows.x.before) {
10897
- if (!props.stickToTarget) x += overflows.x.before;
10951
+ x += overflows.x.before;
10898
10952
  contentBox.x += overflows.x.before;
10899
10953
  }
10900
10954
  if (overflows.x.after) {
10901
- if (!props.stickToTarget) x -= overflows.x.after;
10955
+ x -= overflows.x.after;
10902
10956
  contentBox.x -= overflows.x.after;
10903
10957
  }
10904
10958
  if (overflows.y.before) {
10905
- if (!props.stickToTarget) y += overflows.y.before;
10959
+ y += overflows.y.before;
10906
10960
  contentBox.y += overflows.y.before;
10907
10961
  }
10908
10962
  if (overflows.y.after) {
10909
- if (!props.stickToTarget) y -= overflows.y.after;
10963
+ y -= overflows.y.after;
10910
10964
  contentBox.y -= overflows.y.after;
10911
10965
  }
10912
10966
 
@@ -10915,9 +10969,9 @@ function connectedLocationStrategy(data, props, contentStyles) {
10915
10969
  const overflows = getOverflow(contentBox, viewport);
10916
10970
  available.x = viewport.width - overflows.x.before - overflows.x.after;
10917
10971
  available.y = viewport.height - overflows.y.before - overflows.y.after;
10918
- if (!props.stickToTarget) x += overflows.x.before;
10972
+ x += overflows.x.before;
10919
10973
  contentBox.x += overflows.x.before;
10920
- if (!props.stickToTarget) y += overflows.y.before;
10974
+ y += overflows.y.before;
10921
10975
  contentBox.y += overflows.y.before;
10922
10976
  }
10923
10977
  break;
@@ -11227,7 +11281,6 @@ function useActivator(props, _ref) {
11227
11281
  isActive.value = !isActive.value;
11228
11282
  },
11229
11283
  onMouseenter: e => {
11230
- if (e.sourceCapabilities?.firesTouchEvents) return;
11231
11284
  isHovered = true;
11232
11285
  activatorEl.value = e.currentTarget || e.target;
11233
11286
  runOpenDelay();
@@ -23677,6 +23730,14 @@ const makeVDatePickerMonthProps = propsFactory({
23677
23730
  type: String,
23678
23731
  default: 'picker-reverse-transition'
23679
23732
  },
23733
+ events: {
23734
+ type: [Array, Function, Object],
23735
+ default: () => null
23736
+ },
23737
+ eventColor: {
23738
+ type: [Array, Function, Object, String],
23739
+ default: () => null
23740
+ },
23680
23741
  ...omit(makeCalendarProps(), ['displayValue'])
23681
23742
  }, 'VDatePickerMonth');
23682
23743
  const VDatePickerMonth = genericComponent()({
@@ -23776,6 +23837,49 @@ const VDatePickerMonth = genericComponent()({
23776
23837
  model.value = [value];
23777
23838
  }
23778
23839
  }
23840
+ function getEventColors(date) {
23841
+ const {
23842
+ events,
23843
+ eventColor
23844
+ } = props;
23845
+ let eventData;
23846
+ let eventColors = [];
23847
+ if (Array.isArray(events)) {
23848
+ eventData = events.includes(date);
23849
+ } else if (events instanceof Function) {
23850
+ eventData = events(date) || false;
23851
+ } else if (events) {
23852
+ eventData = events[date] || false;
23853
+ } else {
23854
+ eventData = false;
23855
+ }
23856
+ if (!eventData) {
23857
+ return [];
23858
+ } else if (eventData !== true) {
23859
+ eventColors = wrapInArray(eventData);
23860
+ } else if (typeof eventColor === 'string') {
23861
+ eventColors = [eventColor];
23862
+ } else if (typeof eventColor === 'function') {
23863
+ eventColors = wrapInArray(eventColor(date));
23864
+ } else if (Array.isArray(eventColor)) {
23865
+ eventColors = eventColor;
23866
+ } else if (typeof eventColor === 'object' && eventColor !== null) {
23867
+ eventColors = wrapInArray(eventColor[date]);
23868
+ }
23869
+
23870
+ // Fallback to default color if no color is found
23871
+ return !eventColors.length ? ['surface-variant'] : eventColors.filter(Boolean).map(color => typeof color === 'string' ? color : 'surface-variant');
23872
+ }
23873
+ function genEvents(date) {
23874
+ const eventColors = getEventColors(date);
23875
+ if (!eventColors.length) return null;
23876
+ return createElementVNode("div", {
23877
+ "class": "v-date-picker-month__events"
23878
+ }, [eventColors.map(color => createVNode(VBadge, {
23879
+ "dot": true,
23880
+ "color": color
23881
+ }, null))]);
23882
+ }
23779
23883
  useRender(() => createElementVNode("div", {
23780
23884
  "class": "v-date-picker-month",
23781
23885
  "style": {
@@ -23806,7 +23910,6 @@ const VDatePickerMonth = genericComponent()({
23806
23910
  disabled: item.isDisabled,
23807
23911
  icon: true,
23808
23912
  ripple: false,
23809
- text: item.localized,
23810
23913
  variant: item.isSelected ? 'flat' : item.isToday ? 'outlined' : 'text',
23811
23914
  'aria-label': getDateAriaLabel(item),
23812
23915
  'aria-current': item.isToday ? 'date' : undefined,
@@ -23827,7 +23930,9 @@ const VDatePickerMonth = genericComponent()({
23827
23930
  'v-date-picker-month__day--week-start': item.isWeekStart
23828
23931
  }]),
23829
23932
  "data-v-date": !item.isDisabled ? item.isoDate : undefined
23830
- }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, null))]);
23933
+ }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, {
23934
+ default: () => [item.localized, genEvents(item.isoDate)]
23935
+ }))]);
23831
23936
  })])]
23832
23937
  })]));
23833
23938
  }
@@ -38158,7 +38263,7 @@ function createVuetify$1() {
38158
38263
  };
38159
38264
  });
38160
38265
  }
38161
- const version$1 = "3.10.7-dev.2025-10-23";
38266
+ const version$1 = "3.10.7-dev.2025-10-25";
38162
38267
  createVuetify$1.version = version$1;
38163
38268
 
38164
38269
  // Vue's inject() can only be used in setup
@@ -38456,7 +38561,7 @@ var index = /*#__PURE__*/Object.freeze({
38456
38561
 
38457
38562
  /* eslint-disable local-rules/sort-imports */
38458
38563
 
38459
- const version = "3.10.7-dev.2025-10-23";
38564
+ const version = "3.10.7-dev.2025-10-25";
38460
38565
 
38461
38566
  /* eslint-disable local-rules/sort-imports */
38462
38567