@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,23 @@
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, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, normalizeStyle, TransitionGroup, Transition, 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, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, normalizeStyle, TransitionGroup, Transition, 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
+
9
+ /* eslint-disable no-console */
10
+
11
+ function consoleWarn(message) {
12
+ warn(`Vuetify: ${message}`);
13
+ }
14
+ function consoleError(message) {
15
+ warn(`Vuetify error: ${message}`);
16
+ }
17
+ function deprecate(original, replacement) {
18
+ replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
19
+ warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
20
+ }
8
21
 
9
22
  const IN_BROWSER = typeof window !== 'undefined';
10
23
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -208,6 +221,39 @@ function debounce(fn, delay) {
208
221
  wrap.immediate = fn;
209
222
  return wrap;
210
223
  }
224
+ function throttle(fn, delay) {
225
+ let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
226
+ leading: true,
227
+ trailing: true
228
+ };
229
+ let timeoutId = 0;
230
+ let lastExec = 0;
231
+ let throttling = false;
232
+ const wrap = function () {
233
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
234
+ args[_key2] = arguments[_key2];
235
+ }
236
+ clearTimeout(timeoutId);
237
+ const now = Date.now();
238
+ const elapsed = now - lastExec;
239
+ if (!throttling || elapsed >= delay) {
240
+ lastExec = now;
241
+ }
242
+ if (!throttling && options.leading || elapsed >= delay) {
243
+ window.setTimeout(() => fn(...args)); // ignore 'fn' executin errors
244
+ }
245
+ throttling = true;
246
+ timeoutId = window.setTimeout(() => {
247
+ throttling = false;
248
+ if (options.trailing) {
249
+ fn(...args);
250
+ }
251
+ }, delay);
252
+ };
253
+ wrap.clear = () => clearTimeout(timeoutId);
254
+ wrap.immediate = fn;
255
+ return wrap;
256
+ }
211
257
  function clamp(value) {
212
258
  let min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
213
259
  let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
@@ -384,8 +430,8 @@ function hasEvent(props, name) {
384
430
  return !!(props[name] || props[`${name}Once`] || props[`${name}Capture`] || props[`${name}OnceCapture`] || props[`${name}CaptureOnce`]);
385
431
  }
386
432
  function callEvent(handler) {
387
- for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
388
- args[_key2 - 1] = arguments[_key2];
433
+ for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
434
+ args[_key3 - 1] = arguments[_key3];
389
435
  }
390
436
  if (Array.isArray(handler)) {
391
437
  for (const h of handler) {
@@ -398,7 +444,14 @@ function callEvent(handler) {
398
444
  function focusableChildren(el) {
399
445
  let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
400
446
  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(', ');
401
- return [...el.querySelectorAll(targets)].filter(x => !x.closest('[inert]')) // does not have inert parent
447
+ let elements;
448
+ try {
449
+ elements = [...el.querySelectorAll(targets)];
450
+ } catch (err) {
451
+ consoleError(String(err));
452
+ return [];
453
+ }
454
+ return elements.filter(x => !x.closest('[inert]')) // does not have inert parent
402
455
  .filter(x => !!x.offsetParent || x.getClientRects().length > 0) // is rendered
403
456
  .filter(x => !x.parentElement?.closest('details:not([open])') || x.tagName === 'SUMMARY' && x.parentElement?.tagName === 'DETAILS');
404
457
  }
@@ -865,19 +918,6 @@ function APCAcontrast(text, background) {
865
918
  return outputContrast * 100;
866
919
  }
867
920
 
868
- /* eslint-disable no-console */
869
-
870
- function consoleWarn(message) {
871
- warn(`Vuetify: ${message}`);
872
- }
873
- function consoleError(message) {
874
- warn(`Vuetify error: ${message}`);
875
- }
876
- function deprecate(original, replacement) {
877
- replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
878
- warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
879
- }
880
-
881
921
  // Types
882
922
 
883
923
  const delta = 0.20689655172413793; // 6÷29
@@ -9655,6 +9695,10 @@ const useNested = props => {
9655
9695
  }
9656
9696
  const vm = getCurrentInstance('nested');
9657
9697
  const nodeIds = new Set();
9698
+ const itemsUpdatePropagation = throttle(() => {
9699
+ children.value = new Map(children.value);
9700
+ parents.value = new Map(parents.value);
9701
+ }, 100);
9658
9702
  const nested = {
9659
9703
  id: shallowRef(),
9660
9704
  root: {
@@ -9685,6 +9729,7 @@ const useNested = props => {
9685
9729
  if (parentId != null) {
9686
9730
  children.value.set(parentId, [...(children.value.get(parentId) || []), id]);
9687
9731
  }
9732
+ itemsUpdatePropagation();
9688
9733
  },
9689
9734
  unregister: id => {
9690
9735
  if (isUnmounted) return;
@@ -9697,6 +9742,7 @@ const useNested = props => {
9697
9742
  children.value.set(parent, list.filter(child => child !== id));
9698
9743
  }
9699
9744
  parents.value.delete(id);
9745
+ itemsUpdatePropagation();
9700
9746
  },
9701
9747
  open: (id, value, event) => {
9702
9748
  vm.emit('click:open', {
@@ -11084,7 +11130,8 @@ function connectedLocationStrategy(data, props, contentStyles) {
11084
11130
 
11085
11131
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
11086
11132
  const scrollParents = getScrollParents(data.contentEl.value);
11087
- const viewportMargin = 12;
11133
+ const viewportMargin = props.stickToTarget ? 0 : 12; // TOOD: prop.viewportMargin
11134
+
11088
11135
  if (!scrollParents.length) {
11089
11136
  scrollParents.push(document.documentElement);
11090
11137
  if (!(data.contentEl.value.style.top && data.contentEl.value.style.left)) {
@@ -11104,10 +11151,17 @@ function connectedLocationStrategy(data, props, contentStyles) {
11104
11151
  }
11105
11152
  return scrollBox;
11106
11153
  }, undefined);
11107
- viewport.x += viewportMargin;
11108
- viewport.y += viewportMargin;
11109
- viewport.width -= viewportMargin * 2;
11110
- viewport.height -= viewportMargin * 2;
11154
+ if (props.stickToTarget) {
11155
+ viewport.x += Math.min(0, targetBox.x);
11156
+ viewport.y += Math.min(0, targetBox.y);
11157
+ viewport.width = Math.max(viewport.width, targetBox.x + targetBox.width);
11158
+ viewport.height = Math.max(viewport.height, targetBox.y + targetBox.height);
11159
+ } else {
11160
+ viewport.x += viewportMargin;
11161
+ viewport.y += viewportMargin;
11162
+ viewport.width -= viewportMargin * 2;
11163
+ viewport.height -= viewportMargin * 2;
11164
+ }
11111
11165
  let placement = {
11112
11166
  anchor: preferredAnchor.value,
11113
11167
  origin: preferredOrigin.value
@@ -11218,19 +11272,19 @@ function connectedLocationStrategy(data, props, contentStyles) {
11218
11272
 
11219
11273
  // shift
11220
11274
  if (overflows.x.before) {
11221
- if (!props.stickToTarget) x += overflows.x.before;
11275
+ x += overflows.x.before;
11222
11276
  contentBox.x += overflows.x.before;
11223
11277
  }
11224
11278
  if (overflows.x.after) {
11225
- if (!props.stickToTarget) x -= overflows.x.after;
11279
+ x -= overflows.x.after;
11226
11280
  contentBox.x -= overflows.x.after;
11227
11281
  }
11228
11282
  if (overflows.y.before) {
11229
- if (!props.stickToTarget) y += overflows.y.before;
11283
+ y += overflows.y.before;
11230
11284
  contentBox.y += overflows.y.before;
11231
11285
  }
11232
11286
  if (overflows.y.after) {
11233
- if (!props.stickToTarget) y -= overflows.y.after;
11287
+ y -= overflows.y.after;
11234
11288
  contentBox.y -= overflows.y.after;
11235
11289
  }
11236
11290
 
@@ -11239,9 +11293,9 @@ function connectedLocationStrategy(data, props, contentStyles) {
11239
11293
  const overflows = getOverflow(contentBox, viewport);
11240
11294
  available.x = viewport.width - overflows.x.before - overflows.x.after;
11241
11295
  available.y = viewport.height - overflows.y.before - overflows.y.after;
11242
- if (!props.stickToTarget) x += overflows.x.before;
11296
+ x += overflows.x.before;
11243
11297
  contentBox.x += overflows.x.before;
11244
- if (!props.stickToTarget) y += overflows.y.before;
11298
+ y += overflows.y.before;
11245
11299
  contentBox.y += overflows.y.before;
11246
11300
  }
11247
11301
  break;
@@ -11551,7 +11605,6 @@ function useActivator(props, _ref) {
11551
11605
  isActive.value = !isActive.value;
11552
11606
  },
11553
11607
  onMouseenter: e => {
11554
- if (e.sourceCapabilities?.firesTouchEvents) return;
11555
11608
  isHovered = true;
11556
11609
  activatorEl.value = e.currentTarget || e.target;
11557
11610
  runOpenDelay();
@@ -23992,6 +24045,14 @@ const makeVDatePickerMonthProps = propsFactory({
23992
24045
  type: String,
23993
24046
  default: 'picker-reverse-transition'
23994
24047
  },
24048
+ events: {
24049
+ type: [Array, Function, Object],
24050
+ default: () => null
24051
+ },
24052
+ eventColor: {
24053
+ type: [Array, Function, Object, String],
24054
+ default: () => null
24055
+ },
23995
24056
  ...omit(makeCalendarProps(), ['displayValue'])
23996
24057
  }, 'VDatePickerMonth');
23997
24058
  const VDatePickerMonth = genericComponent()({
@@ -24091,6 +24152,49 @@ const VDatePickerMonth = genericComponent()({
24091
24152
  model.value = [value];
24092
24153
  }
24093
24154
  }
24155
+ function getEventColors(date) {
24156
+ const {
24157
+ events,
24158
+ eventColor
24159
+ } = props;
24160
+ let eventData;
24161
+ let eventColors = [];
24162
+ if (Array.isArray(events)) {
24163
+ eventData = events.includes(date);
24164
+ } else if (events instanceof Function) {
24165
+ eventData = events(date) || false;
24166
+ } else if (events) {
24167
+ eventData = events[date] || false;
24168
+ } else {
24169
+ eventData = false;
24170
+ }
24171
+ if (!eventData) {
24172
+ return [];
24173
+ } else if (eventData !== true) {
24174
+ eventColors = wrapInArray(eventData);
24175
+ } else if (typeof eventColor === 'string') {
24176
+ eventColors = [eventColor];
24177
+ } else if (typeof eventColor === 'function') {
24178
+ eventColors = wrapInArray(eventColor(date));
24179
+ } else if (Array.isArray(eventColor)) {
24180
+ eventColors = eventColor;
24181
+ } else if (typeof eventColor === 'object' && eventColor !== null) {
24182
+ eventColors = wrapInArray(eventColor[date]);
24183
+ }
24184
+
24185
+ // Fallback to default color if no color is found
24186
+ return !eventColors.length ? ['surface-variant'] : eventColors.filter(Boolean).map(color => typeof color === 'string' ? color : 'surface-variant');
24187
+ }
24188
+ function genEvents(date) {
24189
+ const eventColors = getEventColors(date);
24190
+ if (!eventColors.length) return null;
24191
+ return createElementVNode("div", {
24192
+ "class": "v-date-picker-month__events"
24193
+ }, [eventColors.map(color => createVNode(VBadge, {
24194
+ "dot": true,
24195
+ "color": color
24196
+ }, null))]);
24197
+ }
24094
24198
  useRender(() => createElementVNode("div", {
24095
24199
  "class": "v-date-picker-month",
24096
24200
  "style": {
@@ -24121,7 +24225,6 @@ const VDatePickerMonth = genericComponent()({
24121
24225
  disabled: item.isDisabled,
24122
24226
  icon: true,
24123
24227
  ripple: false,
24124
- text: item.localized,
24125
24228
  variant: item.isSelected ? 'flat' : item.isToday ? 'outlined' : 'text',
24126
24229
  'aria-label': getDateAriaLabel(item),
24127
24230
  'aria-current': item.isToday ? 'date' : undefined,
@@ -24142,7 +24245,9 @@ const VDatePickerMonth = genericComponent()({
24142
24245
  'v-date-picker-month__day--week-start': item.isWeekStart
24143
24246
  }]),
24144
24247
  "data-v-date": !item.isDisabled ? item.isoDate : undefined
24145
- }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, null))]);
24248
+ }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, {
24249
+ default: () => [item.localized, genEvents(item.isoDate)]
24250
+ }))]);
24146
24251
  })])]
24147
24252
  })]));
24148
24253
  }
@@ -32523,7 +32628,7 @@ function createVuetify$1() {
32523
32628
  };
32524
32629
  });
32525
32630
  }
32526
- const version$1 = "3.10.7-dev.2025-10-23";
32631
+ const version$1 = "3.10.7-dev.2025-10-25";
32527
32632
  createVuetify$1.version = version$1;
32528
32633
 
32529
32634
  // Vue's inject() can only be used in setup
@@ -32548,7 +32653,7 @@ const createVuetify = function () {
32548
32653
  ...options
32549
32654
  });
32550
32655
  };
32551
- const version = "3.10.7-dev.2025-10-23";
32656
+ const version = "3.10.7-dev.2025-10-25";
32552
32657
  createVuetify.version = version;
32553
32658
 
32554
32659
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useMask, useRtl, useTheme, version };