vuetify 3.9.5 → 3.9.7

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 (107) hide show
  1. package/dist/json/attributes.json +3244 -3236
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +162 -162
  4. package/dist/json/tags.json +2 -0
  5. package/dist/json/web-types.json +6419 -6311
  6. package/dist/vuetify-labs.cjs +183 -127
  7. package/dist/vuetify-labs.css +3841 -3706
  8. package/dist/vuetify-labs.d.ts +173 -75
  9. package/dist/vuetify-labs.esm.js +183 -127
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +183 -127
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +78 -44
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +2171 -2039
  16. package/dist/vuetify.d.ts +70 -70
  17. package/dist/vuetify.esm.js +78 -44
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +78 -44
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +67 -60
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VAlert/VAlert.css +12 -0
  25. package/lib/components/VAlert/VAlert.sass +13 -0
  26. package/lib/components/VAutocomplete/VAutocomplete.css +2 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.sass +3 -2
  28. package/lib/components/VBtn/VBtn.css +10 -0
  29. package/lib/components/VBtn/VBtn.sass +9 -0
  30. package/lib/components/VCard/VCard.css +11 -0
  31. package/lib/components/VCard/VCard.sass +9 -0
  32. package/lib/components/VChip/VChip.css +6 -0
  33. package/lib/components/VChip/VChip.sass +5 -0
  34. package/lib/components/VChipGroup/VChipGroup.css +25 -0
  35. package/lib/components/VChipGroup/VChipGroup.sass +23 -0
  36. package/lib/components/VCombobox/VCombobox.css +2 -1
  37. package/lib/components/VCombobox/VCombobox.sass +3 -2
  38. package/lib/components/VDatePicker/VDatePicker.js +10 -4
  39. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  40. package/lib/components/VDatePicker/VDatePickerYears.js +18 -8
  41. package/lib/components/VDatePicker/VDatePickerYears.js.map +1 -1
  42. package/lib/components/VFileInput/VFileInput.js +4 -2
  43. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  44. package/lib/components/VList/VListItem.css +30 -0
  45. package/lib/components/VList/VListItem.d.ts +3 -3
  46. package/lib/components/VList/VListItem.sass +29 -0
  47. package/lib/components/VNumberInput/VNumberInput.js +6 -6
  48. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  49. package/lib/components/VOtpInput/VOtpInput.js +9 -2
  50. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  51. package/lib/components/VProgressLinear/VProgressLinear.css +3 -3
  52. package/lib/components/VProgressLinear/VProgressLinear.js +5 -6
  53. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  54. package/lib/components/VProgressLinear/VProgressLinear.sass +3 -3
  55. package/lib/components/VSelect/VSelect.css +5 -1
  56. package/lib/components/VSelect/VSelect.sass +6 -2
  57. package/lib/components/VSlideGroup/VSlideGroup.js +5 -4
  58. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  59. package/lib/components/VSnackbar/VSnackbar.css +5 -0
  60. package/lib/components/VSnackbar/VSnackbar.sass +3 -0
  61. package/lib/components/VSparkline/VBarline.js +2 -2
  62. package/lib/components/VSparkline/VBarline.js.map +1 -1
  63. package/lib/components/VSparkline/VTrendline.js +3 -0
  64. package/lib/components/VSparkline/VTrendline.js.map +1 -1
  65. package/lib/components/VTextField/VTextField.js +2 -2
  66. package/lib/components/VTextField/VTextField.js.map +1 -1
  67. package/lib/components/VTextarea/VTextarea.js +4 -2
  68. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  69. package/lib/components/VTimeline/VTimeline.css +22 -0
  70. package/lib/components/VTimeline/VTimeline.sass +12 -0
  71. package/lib/components/VTreeview/VTreeviewItem.css +13 -8
  72. package/lib/components/VTreeview/VTreeviewItem.d.ts +9 -9
  73. package/lib/components/VTreeview/VTreeviewItem.sass +12 -8
  74. package/lib/composables/filter.js +3 -1
  75. package/lib/composables/filter.js.map +1 -1
  76. package/lib/composables/nested/nested.d.ts +1 -1
  77. package/lib/composables/nested/nested.js +5 -2
  78. package/lib/composables/nested/nested.js.map +1 -1
  79. package/lib/composables/rounded.js +3 -3
  80. package/lib/composables/rounded.js.map +1 -1
  81. package/lib/directives/touch/index.js +2 -2
  82. package/lib/directives/touch/index.js.map +1 -1
  83. package/lib/entry-bundler.js +1 -1
  84. package/lib/framework.d.ts +58 -58
  85. package/lib/framework.js +1 -1
  86. package/lib/labs/VDateInput/VDateInput.d.ts +78 -3
  87. package/lib/labs/VDateInput/VDateInput.js +3 -1
  88. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  89. package/lib/labs/VIconBtn/VIconBtn.js +1 -1
  90. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  91. package/lib/labs/VPie/VPie.css +3 -0
  92. package/lib/labs/VPie/VPie.js +71 -29
  93. package/lib/labs/VPie/VPie.js.map +1 -1
  94. package/lib/labs/VPie/VPie.sass +3 -0
  95. package/lib/labs/VPie/VPieSegment.d.ts +25 -2
  96. package/lib/labs/VPie/VPieSegment.js +11 -6
  97. package/lib/labs/VPie/VPieSegment.js.map +1 -1
  98. package/lib/labs/VPie/VPieTooltip.d.ts +10 -0
  99. package/lib/labs/VPie/VPieTooltip.js +4 -22
  100. package/lib/labs/VPie/VPieTooltip.js.map +1 -1
  101. package/lib/labs/VPie/types.d.ts +1 -0
  102. package/lib/labs/VPie/types.js.map +1 -1
  103. package/lib/labs/VVideo/VVideo.css +4 -4
  104. package/lib/labs/VVideo/VVideo.js +24 -33
  105. package/lib/labs/VVideo/VVideo.js.map +1 -1
  106. package/lib/labs/VVideo/VVideo.sass +4 -4
  107. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.5
2
+ * Vuetify v3.9.7
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -3501,14 +3501,14 @@
3501
3501
  const rounded = vue.isRef(props) ? props.value : props.rounded;
3502
3502
  const tile = vue.isRef(props) ? props.value : props.tile;
3503
3503
  const classes = [];
3504
- if (rounded === true || rounded === '') {
3504
+ if (tile || rounded === false) {
3505
+ classes.push('rounded-0');
3506
+ } else if (rounded === true || rounded === '') {
3505
3507
  classes.push(`${name}--rounded`);
3506
3508
  } else if (typeof rounded === 'string' || rounded === 0) {
3507
3509
  for (const value of String(rounded).split(' ')) {
3508
3510
  classes.push(`rounded-${value}`);
3509
3511
  }
3510
- } else if (tile || rounded === false) {
3511
- classes.push('rounded-0');
3512
3512
  }
3513
3513
  return classes;
3514
3514
  });
@@ -5368,7 +5368,6 @@
5368
5368
  const normalizedValue = vue.computed(() => clamp(parseFloat(progress.value) / max.value * 100, 0, 100));
5369
5369
  const isReversed = vue.computed(() => isRtl.value !== props.reverse);
5370
5370
  const transition = vue.computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
5371
- const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
5372
5371
  function handleClick(e) {
5373
5372
  if (!intersectionRef.value) return;
5374
5373
  const {
@@ -5417,13 +5416,13 @@
5417
5416
  '--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1))
5418
5417
  }
5419
5418
  }, null), vue.createElementVNode("div", {
5420
- "class": vue.normalizeClass(['v-progress-linear__background', !isForcedColorsModeActive ? backgroundColorClasses.value : undefined]),
5419
+ "class": vue.normalizeClass(['v-progress-linear__background', backgroundColorClasses.value]),
5421
5420
  "style": vue.normalizeStyle([backgroundColorStyles.value, {
5422
5421
  opacity: parseFloat(props.bgOpacity),
5423
5422
  width: props.stream ? 0 : undefined
5424
5423
  }])
5425
5424
  }, null), vue.createElementVNode("div", {
5426
- "class": vue.normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
5425
+ "class": vue.normalizeClass(['v-progress-linear__buffer', bufferColorClasses.value]),
5427
5426
  "style": vue.normalizeStyle([bufferColorStyles.value, {
5428
5427
  opacity: parseFloat(props.bufferOpacity),
5429
5428
  width: convertToUnit(normalizedBuffer.value, '%')
@@ -5432,7 +5431,7 @@
5432
5431
  "name": transition.value
5433
5432
  }, {
5434
5433
  default: () => [!props.indeterminate ? vue.createElementVNode("div", {
5435
- "class": vue.normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
5434
+ "class": vue.normalizeClass(['v-progress-linear__determinate', barColorClasses.value]),
5436
5435
  "style": vue.normalizeStyle([barColorStyles.value, {
5437
5436
  width: convertToUnit(normalizedValue.value, '%')
5438
5437
  }])
@@ -5440,7 +5439,7 @@
5440
5439
  "class": "v-progress-linear__indeterminate"
5441
5440
  }, [['long', 'short'].map(bar => vue.createElementVNode("div", {
5442
5441
  "key": bar,
5443
- "class": vue.normalizeClass(['v-progress-linear__indeterminate', bar, !isForcedColorsModeActive ? barColorClasses.value : undefined]),
5442
+ "class": vue.normalizeClass(['v-progress-linear__indeterminate', bar, barColorClasses.value]),
5444
5443
  "style": vue.normalizeStyle(barColorStyles.value)
5445
5444
  }, null))])]
5446
5445
  }), slots.default && vue.createElementVNode("div", {
@@ -8212,6 +8211,7 @@
8212
8211
  select: group.select,
8213
8212
  isSelected: group.isSelected
8214
8213
  }));
8214
+ const hasOverflowOrScroll = vue.computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0);
8215
8215
  const hasAffixes = vue.computed(() => {
8216
8216
  switch (props.showArrows) {
8217
8217
  // Always show arrows on desktop & mobile
@@ -8225,17 +8225,17 @@
8225
8225
  // Show arrows on mobile when overflowing.
8226
8226
  // This matches the default 2.2 behavior
8227
8227
  case true:
8228
- return isOverflowing.value || Math.abs(scrollOffset.value) > 0;
8228
+ return hasOverflowOrScroll.value;
8229
8229
 
8230
8230
  // Always show on mobile
8231
8231
  case 'mobile':
8232
- return mobile.value || isOverflowing.value || Math.abs(scrollOffset.value) > 0;
8232
+ return mobile.value || hasOverflowOrScroll.value;
8233
8233
 
8234
8234
  // https://material.io/components/tabs#scrollable-tabs
8235
8235
  // Always show arrows when
8236
8236
  // overflowed on desktop
8237
8237
  default:
8238
- return !mobile.value && (isOverflowing.value || Math.abs(scrollOffset.value) > 0);
8238
+ return !mobile.value && hasOverflowOrScroll.value;
8239
8239
  }
8240
8240
  });
8241
8241
  const hasPrev = vue.computed(() => {
@@ -8243,7 +8243,7 @@
8243
8243
  return Math.abs(scrollOffset.value) > 1;
8244
8244
  });
8245
8245
  const hasNext = vue.computed(() => {
8246
- if (!containerRef.value) return false;
8246
+ if (!containerRef.value || !hasOverflowOrScroll.value) return false;
8247
8247
  const scrollSize = getScrollSize(isHorizontal.value, containerRef.el);
8248
8248
  const clientSize = getClientSize(isHorizontal.value, containerRef.el);
8249
8249
  const scrollSizeMax = scrollSize - clientSize;
@@ -9240,7 +9240,7 @@
9240
9240
  function getPath(id) {
9241
9241
  const path = [];
9242
9242
  let parent = vue.toRaw(id);
9243
- while (parent != null) {
9243
+ while (parent !== undefined) {
9244
9244
  path.unshift(parent);
9245
9245
  parent = parents.value.get(parent);
9246
9246
  }
@@ -9386,7 +9386,10 @@
9386
9386
  const useNestedItem = (id, isDisabled, isGroup) => {
9387
9387
  const parent = vue.inject(VNestedSymbol, emptyNested);
9388
9388
  const uidSymbol = Symbol('nested item');
9389
- const computedId = vue.computed(() => vue.toRaw(vue.toValue(id)) ?? uidSymbol);
9389
+ const computedId = vue.computed(() => {
9390
+ const idValue = vue.toRaw(vue.toValue(id));
9391
+ return idValue !== undefined ? idValue : uidSymbol;
9392
+ });
9390
9393
  const item = {
9391
9394
  ...parent,
9392
9395
  id: computedId,
@@ -12546,7 +12549,7 @@
12546
12549
  "onClick:prependInner": props['onClick:prependInner'],
12547
12550
  "onClick:appendInner": props['onClick:appendInner'],
12548
12551
  "role": props.role
12549
- }, fieldProps, {
12552
+ }, omit(fieldProps, ['onClick:clear']), {
12550
12553
  "id": id.value,
12551
12554
  "active": isActive.value || isDirty.value,
12552
12555
  "dirty": isDirty.value || props.dirty,
@@ -13597,11 +13600,13 @@
13597
13600
  const defaultMatches = {};
13598
13601
  let match = -1;
13599
13602
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13603
+ let hasOnlyCustomFilters = false;
13600
13604
  if (typeof item === 'object') {
13601
13605
  if (item.type === 'divider' || item.type === 'subheader') {
13602
13606
  continue;
13603
13607
  }
13604
13608
  const filterKeys = keys || Object.keys(transformed);
13609
+ hasOnlyCustomFilters = filterKeys.length === customFiltersLength;
13605
13610
  for (const key of filterKeys) {
13606
13611
  const value = getPropertyFromItem(transformed, key);
13607
13612
  const keyFilter = options?.customKeyFilter?.[key];
@@ -13622,7 +13627,7 @@
13622
13627
  const customMatchesLength = Object.keys(customMatches).length;
13623
13628
  if (!defaultMatchesLength && !customMatchesLength) continue;
13624
13629
  if (options?.filterMode === 'union' && customMatchesLength !== customFiltersLength && !defaultMatchesLength) continue;
13625
- if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength)) continue;
13630
+ if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength && customFiltersLength > 0 && !hasOnlyCustomFilters)) continue;
13626
13631
  }
13627
13632
  array.push({
13628
13633
  index: i,
@@ -15296,7 +15301,7 @@
15296
15301
  };
15297
15302
  const uid = binding.instance?.$.uid; // TODO: use custom uid generator
15298
15303
 
15299
- if (!target || !uid) return;
15304
+ if (!target || uid === undefined) return;
15300
15305
  const handlers = createHandlers(binding.value);
15301
15306
  target._touchHandlers = target._touchHandlers ?? Object.create(null);
15302
15307
  target._touchHandlers[uid] = handlers;
@@ -15307,7 +15312,7 @@
15307
15312
  function unmounted$3(el, binding) {
15308
15313
  const target = binding.value?.parent ? el.parentElement : el;
15309
15314
  const uid = binding.instance?.$.uid;
15310
- if (!target?._touchHandlers || !uid) return;
15315
+ if (!target?._touchHandlers || uid === undefined) return;
15311
15316
  const handlers = target._touchHandlers[uid];
15312
15317
  keys(handlers).forEach(eventName => {
15313
15318
  target.removeEventListener(eventName, handlers[eventName]);
@@ -23320,6 +23325,9 @@
23320
23325
  const VDatePickerYears = genericComponent()({
23321
23326
  name: 'VDatePickerYears',
23322
23327
  props: makeVDatePickerYearsProps(),
23328
+ directives: {
23329
+ vIntersect: Intersect
23330
+ },
23323
23331
  emits: {
23324
23332
  'update:modelValue': year => true
23325
23333
  },
@@ -23356,10 +23364,12 @@
23356
23364
  model.value = model.value ?? adapter.getYear(adapter.date());
23357
23365
  });
23358
23366
  const yearRef = templateRef();
23359
- vue.onMounted(async () => {
23360
- await vue.nextTick();
23367
+ function focusSelectedYear() {
23361
23368
  yearRef.el?.focus();
23362
- });
23369
+ yearRef.el?.scrollIntoView({
23370
+ block: 'center'
23371
+ });
23372
+ }
23363
23373
  function isYearAllowed(year) {
23364
23374
  if (Array.isArray(props.allowedYears) && props.allowedYears.length) {
23365
23375
  return props.allowedYears.includes(year);
@@ -23369,7 +23379,7 @@
23369
23379
  }
23370
23380
  return true;
23371
23381
  }
23372
- useRender(() => vue.createElementVNode("div", {
23382
+ useRender(() => vue.withDirectives(vue.createElementVNode("div", {
23373
23383
  "class": "v-date-picker-years",
23374
23384
  "style": {
23375
23385
  height: convertToUnit(props.height)
@@ -23400,7 +23410,11 @@
23400
23410
  }) ?? vue.createVNode(VBtn, vue.mergeProps({
23401
23411
  "key": "month"
23402
23412
  }, btnProps), null);
23403
- })])]));
23413
+ })])]), [[Intersect, {
23414
+ handler: focusSelectedYear
23415
+ }, null, {
23416
+ once: true
23417
+ }]]));
23404
23418
  return {};
23405
23419
  }
23406
23420
  });
@@ -23541,6 +23555,12 @@
23541
23555
  }
23542
23556
  return targets;
23543
23557
  });
23558
+ const allowedYears = vue.computed(() => {
23559
+ return props.allowedYears || isYearAllowed;
23560
+ });
23561
+ const allowedMonths = vue.computed(() => {
23562
+ return props.allowedMonths || isMonthAllowed;
23563
+ });
23544
23564
  function isAllowedInRange(start, end) {
23545
23565
  const allowedDates = props.allowedDates;
23546
23566
  if (typeof allowedDates !== 'function') return true;
@@ -23550,7 +23570,7 @@
23550
23570
  }
23551
23571
  return false;
23552
23572
  }
23553
- function allowedYears(year) {
23573
+ function isYearAllowed(year) {
23554
23574
  if (typeof props.allowedDates === 'function') {
23555
23575
  const startOfYear = adapter.parseISO(`${year}-01-01`);
23556
23576
  return isAllowedInRange(startOfYear, adapter.endOfYear(startOfYear));
@@ -23563,7 +23583,7 @@
23563
23583
  }
23564
23584
  return true;
23565
23585
  }
23566
- function allowedMonths(month) {
23586
+ function isMonthAllowed(month) {
23567
23587
  if (typeof props.allowedDates === 'function') {
23568
23588
  const monthTwoDigits = String(month + 1).padStart(2, '0');
23569
23589
  const startOfMonth = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);
@@ -23691,7 +23711,7 @@
23691
23711
  "min": minDate.value,
23692
23712
  "max": maxDate.value,
23693
23713
  "year": year.value,
23694
- "allowedMonths": allowedMonths
23714
+ "allowedMonths": allowedMonths.value
23695
23715
  }), {
23696
23716
  month: slots.month
23697
23717
  }) : viewMode.value === 'year' ? vue.createVNode(VDatePickerYears, vue.mergeProps({
@@ -23701,7 +23721,7 @@
23701
23721
  "onUpdate:modelValue": [$event => year.value = $event, onUpdateYear],
23702
23722
  "min": minDate.value,
23703
23723
  "max": maxDate.value,
23704
- "allowedYears": allowedYears
23724
+ "allowedYears": allowedYears.value
23705
23725
  }), {
23706
23726
  year: slots.year
23707
23727
  }) : vue.createVNode(VDatePickerMonth, vue.mergeProps({
@@ -24436,7 +24456,10 @@
24436
24456
  modelValue: _,
24437
24457
  ...inputProps
24438
24458
  } = VInput.filterProps(props);
24439
- const fieldProps = VField.filterProps(props);
24459
+ const fieldProps = {
24460
+ ...VField.filterProps(props),
24461
+ 'onClick:clear': onClear
24462
+ };
24440
24463
  return vue.createVNode(VInput, vue.mergeProps({
24441
24464
  "ref": vInputRef,
24442
24465
  "modelValue": props.multiple ? model.value : model.value[0],
@@ -24467,7 +24490,6 @@
24467
24490
  "prependIcon": props.prependIcon,
24468
24491
  "onMousedown": onControlMousedown,
24469
24492
  "onClick": onControlClick,
24470
- "onClick:clear": onClear,
24471
24493
  "onClick:prependInner": props['onClick:prependInner'],
24472
24494
  "onClick:appendInner": props['onClick:appendInner']
24473
24495
  }, fieldProps, {
@@ -26158,7 +26180,6 @@
26158
26180
  "aria-hidden": "true",
26159
26181
  "data-testid": "increment",
26160
26182
  "disabled": !canIncrease.value,
26161
- "flat": true,
26162
26183
  "height": controlNodeDefaultHeight.value,
26163
26184
  "icon": incrementIcon.value,
26164
26185
  "key": "increment-btn",
@@ -26167,16 +26188,17 @@
26167
26188
  "onPointerup": onControlMouseup,
26168
26189
  "onPointercancel": onControlMouseup,
26169
26190
  "size": controlNodeSize.value,
26191
+ "variant": "text",
26170
26192
  "tabindex": "-1"
26171
26193
  }, null) : vue.createVNode(VDefaultsProvider, {
26172
26194
  "key": "increment-defaults",
26173
26195
  "defaults": {
26174
26196
  VBtn: {
26175
26197
  disabled: !canIncrease.value,
26176
- flat: true,
26177
26198
  height: controlNodeDefaultHeight.value,
26178
26199
  size: controlNodeSize.value,
26179
- icon: incrementIcon.value
26200
+ icon: incrementIcon.value,
26201
+ variant: 'text'
26180
26202
  }
26181
26203
  }
26182
26204
  }, {
@@ -26188,7 +26210,6 @@
26188
26210
  "aria-hidden": "true",
26189
26211
  "data-testid": "decrement",
26190
26212
  "disabled": !canDecrease.value,
26191
- "flat": true,
26192
26213
  "height": controlNodeDefaultHeight.value,
26193
26214
  "icon": decrementIcon.value,
26194
26215
  "key": "decrement-btn",
@@ -26197,16 +26218,17 @@
26197
26218
  "onPointerup": onControlMouseup,
26198
26219
  "onPointercancel": onControlMouseup,
26199
26220
  "size": controlNodeSize.value,
26221
+ "variant": "text",
26200
26222
  "tabindex": "-1"
26201
26223
  }, null) : vue.createVNode(VDefaultsProvider, {
26202
26224
  "key": "decrement-defaults",
26203
26225
  "defaults": {
26204
26226
  VBtn: {
26205
26227
  disabled: !canDecrease.value,
26206
- flat: true,
26207
26228
  height: controlNodeDefaultHeight.value,
26208
26229
  size: controlNodeSize.value,
26209
- icon: decrementIcon.value
26230
+ icon: decrementIcon.value,
26231
+ variant: 'text'
26210
26232
  }
26211
26233
  }
26212
26234
  }, {
@@ -26342,6 +26364,7 @@
26342
26364
  const contentRef = vue.ref();
26343
26365
  const inputRef = vue.ref([]);
26344
26366
  const current = vue.computed(() => inputRef.value[focusIndex.value]);
26367
+ let _isComposing = false;
26345
26368
  useToggleScope(() => props.autofocus, () => {
26346
26369
  const intersectScope = vue.effectScope();
26347
26370
  intersectScope.run(() => {
@@ -26366,6 +26389,7 @@
26366
26389
  current.value.value = '';
26367
26390
  return;
26368
26391
  }
26392
+ if (_isComposing) return;
26369
26393
  const array = model.value.slice();
26370
26394
  const value = current.value.value;
26371
26395
  array[focusIndex.value] = value;
@@ -26378,6 +26402,10 @@
26378
26402
  model.value = array;
26379
26403
  if (target) focusChild(contentRef.value, target);
26380
26404
  }
26405
+ function onCompositionend() {
26406
+ _isComposing = false;
26407
+ onInput();
26408
+ }
26381
26409
  function onKeydown(e) {
26382
26410
  const array = model.value.slice();
26383
26411
  const index = focusIndex.value;
@@ -26412,7 +26440,7 @@
26412
26440
  const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
26413
26441
  if (isValidNumber(clipboardText)) return;
26414
26442
  model.value = clipboardText.split('');
26415
- inputRef.value?.[finalIndex].focus();
26443
+ focusIndex.value = finalIndex;
26416
26444
  }
26417
26445
  function reset() {
26418
26446
  model.value = [];
@@ -26442,7 +26470,6 @@
26442
26470
  });
26443
26471
  vue.watch(model, val => {
26444
26472
  if (val.length === length.value) {
26445
- focusIndex.value = length.value - 1;
26446
26473
  emit('finish', val.join(''));
26447
26474
  }
26448
26475
  }, {
@@ -26491,6 +26518,8 @@
26491
26518
  "onFocus": e => onFocus(e, i),
26492
26519
  "onBlur": onBlur,
26493
26520
  "onKeydown": onKeydown,
26521
+ "onCompositionstart": () => _isComposing = true,
26522
+ "onCompositionend": onCompositionend,
26494
26523
  "onPaste": event => onPaste(i, event)
26495
26524
  }, null);
26496
26525
  }
@@ -27715,7 +27744,7 @@
27715
27744
  let minValue = props.min != null ? Number(props.min) : Math.min(...values);
27716
27745
  if (minValue > 0 && props.min == null) minValue = 0;
27717
27746
  if (maxValue < 0 && props.max == null) maxValue = 0;
27718
- const gridX = maxX / totalValues;
27747
+ const gridX = maxX / (totalValues === 1 ? 2 : totalValues);
27719
27748
  const gridY = (maxY - minY) / (maxValue - minValue || 1);
27720
27749
  const horizonY = maxY - Math.abs(minValue * gridY);
27721
27750
  return values.map((value, index) => {
@@ -27746,7 +27775,7 @@
27746
27775
  return labels;
27747
27776
  });
27748
27777
  const bars = vue.computed(() => genBars(items.value, boundary.value));
27749
- const offsetX = vue.computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
27778
+ const offsetX = vue.computed(() => bars.value.length === 1 ? (boundary.value.maxX - lineWidth.value) / 2 : (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
27750
27779
  const smooth = vue.computed(() => typeof props.smooth === 'boolean' ? props.smooth ? 2 : 0 : Number(props.smooth));
27751
27780
  useRender(() => {
27752
27781
  const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
@@ -27897,6 +27926,9 @@
27897
27926
  minY,
27898
27927
  maxY
27899
27928
  } = boundary;
27929
+ if (values.length === 1) {
27930
+ values = [values[0], values[0]];
27931
+ }
27900
27932
  const totalValues = values.length;
27901
27933
  const maxValue = props.max != null ? Number(props.max) : Math.max(...values);
27902
27934
  const minValue = props.min != null ? Number(props.min) : Math.min(...values);
@@ -29211,7 +29243,10 @@
29211
29243
  modelValue: _,
29212
29244
  ...inputProps
29213
29245
  } = VInput.filterProps(props);
29214
- const fieldProps = VField.filterProps(props);
29246
+ const fieldProps = {
29247
+ ...VField.filterProps(props),
29248
+ 'onClick:clear': onClear
29249
+ };
29215
29250
  return vue.createVNode(VInput, vue.mergeProps({
29216
29251
  "ref": vInputRef,
29217
29252
  "modelValue": model.value,
@@ -29247,7 +29282,6 @@
29247
29282
  },
29248
29283
  "onClick": onControlClick,
29249
29284
  "onMousedown": onControlMousedown,
29250
- "onClick:clear": onClear,
29251
29285
  "onClick:prependInner": props['onClick:prependInner'],
29252
29286
  "onClick:appendInner": props['onClick:appendInner']
29253
29287
  }, fieldProps, {
@@ -31835,6 +31869,7 @@
31835
31869
  useRender(() => {
31836
31870
  const confirmEditProps = VConfirmEdit.filterProps(props);
31837
31871
  const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
31872
+ const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year']);
31838
31873
  const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']));
31839
31874
  return vue.createVNode(VTextField, vue.mergeProps({
31840
31875
  "ref": vTextFieldRef
@@ -31897,6 +31932,7 @@
31897
31932
  "onUpdate:modelValue": value => onUpdateModel(value),
31898
31933
  "onMousedown": e => e.preventDefault()
31899
31934
  }), {
31935
+ ...datePickerSlots,
31900
31936
  actions: !props.hideActions ? () => slots.actions?.({
31901
31937
  save,
31902
31938
  cancel,
@@ -32331,7 +32367,7 @@
32331
32367
  const iconProps = {
32332
32368
  icon,
32333
32369
  size: iconSize.value,
32334
- iconColor: props.iconColor,
32370
+ color: props.iconColor,
32335
32371
  opacity: props.opacity
32336
32372
  };
32337
32373
  return vue.createVNode(props.tag, {
@@ -32786,6 +32822,7 @@
32786
32822
  // Types
32787
32823
 
32788
32824
  const makeVPieSegmentProps = propsFactory({
32825
+ active: Boolean,
32789
32826
  rotate: [Number, String],
32790
32827
  value: {
32791
32828
  type: Number,
@@ -32810,8 +32847,11 @@
32810
32847
  const VPieSegment = genericComponent()({
32811
32848
  name: 'VPieSegment',
32812
32849
  props: makeVPieSegmentProps(),
32850
+ emits: {
32851
+ 'update:active': val => true
32852
+ },
32813
32853
  setup(props) {
32814
- const isHovering = vue.shallowRef(false);
32854
+ const isActive = useProxiedModel(props, 'active');
32815
32855
  const {
32816
32856
  state: revealState,
32817
32857
  duration: revealDuration
@@ -32832,12 +32872,12 @@
32832
32872
  outerX,
32833
32873
  outerY,
32834
32874
  arcWidth
32835
- } = usePieArc(props, isHovering);
32875
+ } = usePieArc(props, isActive);
32836
32876
  const arcSize = vue.toRef(() => revealState.value === 'initial' ? 0 : normalizedValue.value);
32837
32877
  const currentArcSize = useTransition(arcSize, transitionConfig);
32838
32878
  const angle = vue.toRef(() => revealState.value === 'initial' ? 0 : Number(props.rotate ?? 0) + Number(props.gap ?? 0) / 2);
32839
32879
  const currentAngle = useTransition(angle, transitionConfig);
32840
- const arcRadius = vue.toRef(() => 50 * (isHovering.value ? 1 : 1 - hoverZoomRatio.value));
32880
+ const arcRadius = vue.toRef(() => 50 * (isActive.value ? 1 : 1 - hoverZoomRatio.value));
32841
32881
  const currentArcRadius = useTransition(arcRadius, transitionConfig);
32842
32882
  const currentArcWidth = useTransition(arcWidth, transitionConfig);
32843
32883
  const outerSlicePath = useOuterSlicePath({
@@ -32876,8 +32916,8 @@
32876
32916
  "transform": `rotate(${currentAngle.value} 50 50)`,
32877
32917
  "class": "v-pie-segment__overlay",
32878
32918
  "d": overlayPath.value,
32879
- "onMouseenter": () => isHovering.value = true,
32880
- "onMouseleave": () => isHovering.value = false
32919
+ "onMouseenter": () => isActive.value = true,
32920
+ "onMouseleave": () => isActive.value = false
32881
32921
  }, null)]);
32882
32922
  }
32883
32923
  });
@@ -32886,6 +32926,7 @@
32886
32926
 
32887
32927
  const makeVPieTooltipProps = propsFactory({
32888
32928
  modelValue: Boolean,
32929
+ target: Object,
32889
32930
  item: {
32890
32931
  type: Object,
32891
32932
  default: null
@@ -32908,25 +32949,6 @@
32908
32949
  let {
32909
32950
  slots
32910
32951
  } = _ref;
32911
- const target = vue.shallowRef([0, 0]);
32912
- const vm = getCurrentInstance('VPieTooltip');
32913
- let frame = -1;
32914
- function onMouseMove(_ref2) {
32915
- let {
32916
- clientX,
32917
- clientY
32918
- } = _ref2;
32919
- cancelAnimationFrame(frame);
32920
- frame = requestAnimationFrame(() => {
32921
- target.value = [clientX, clientY];
32922
- });
32923
- }
32924
- vue.onMounted(() => {
32925
- vm.proxy.$el.parentNode.addEventListener('mousemove', onMouseMove);
32926
- });
32927
- vue.onBeforeUnmount(() => {
32928
- vm.proxy.$el.parentNode.removeEventListener('mousemove', onMouseMove);
32929
- });
32930
32952
  const tooltipTitleFormatFunction = vue.toRef(() => segment => {
32931
32953
  return typeof props.titleFormat === 'function' ? props.titleFormat(segment) : formatTextTemplate(props.titleFormat, segment);
32932
32954
  });
@@ -32936,7 +32958,7 @@
32936
32958
  return () => vue.createVNode(VTooltip, {
32937
32959
  "offset": props.offset,
32938
32960
  "modelValue": props.modelValue,
32939
- "target": target.value,
32961
+ "target": props.target,
32940
32962
  "contentClass": "v-pie__tooltip-content"
32941
32963
  }, {
32942
32964
  default: () => [!!props.item && (slots.default?.({
@@ -33004,6 +33026,9 @@
33004
33026
  }, 'VPie');
33005
33027
  const VPie = genericComponent()({
33006
33028
  name: 'VPie',
33029
+ directives: {
33030
+ vClickOutside: ClickOutside
33031
+ },
33007
33032
  props: makeVPieProps(),
33008
33033
  setup(props, _ref) {
33009
33034
  let {
@@ -33055,7 +33080,7 @@
33055
33080
  const visibleItems = vue.computed(() => {
33056
33081
  // hidden items get (value: 0) to trigger disappearing animation
33057
33082
  return arcs.value.map(item => {
33058
- return isActive(item) ? item : {
33083
+ return isVisible(item) ? item : {
33059
33084
  ...item,
33060
33085
  value: 0
33061
33086
  };
@@ -33081,11 +33106,11 @@
33081
33106
  const paletteItem = props.palette[index % props.palette.length];
33082
33107
  return typeof paletteItem === 'object' ? paletteItem.pattern : undefined;
33083
33108
  }
33084
- function isActive(item) {
33109
+ function isVisible(item) {
33085
33110
  return visibleItemsKeys.value.includes(item.key);
33086
33111
  }
33087
33112
  function toggle(item) {
33088
- if (isActive(item)) {
33113
+ if (isVisible(item)) {
33089
33114
  visibleItemsKeys.value = visibleItemsKeys.value.filter(x => x !== item.key);
33090
33115
  } else {
33091
33116
  visibleItemsKeys.value = [...visibleItemsKeys.value, item.key];
@@ -33093,24 +33118,55 @@
33093
33118
  }
33094
33119
  const tooltipItem = vue.shallowRef(null);
33095
33120
  const tooltipVisible = vue.shallowRef(false);
33121
+ const tooltipTarget = vue.shallowRef([0, 0]);
33096
33122
  let mouseLeaveTimeout = null;
33097
- function onMouseenter(item) {
33098
- if (!props.tooltip) return;
33099
- clearTimeout(mouseLeaveTimeout);
33100
- tooltipVisible.value = true;
33101
- tooltipItem.value = item;
33123
+ function setItemActive(item, active) {
33124
+ arcs.value.forEach(a => a.isActive = a.key === item.key && active);
33125
+ if (props.tooltip) {
33126
+ setTooltip(item, active);
33127
+ }
33102
33128
  }
33103
- function onMouseleave() {
33104
- if (!props.tooltip) return;
33129
+ function setTooltip(item, active) {
33105
33130
  clearTimeout(mouseLeaveTimeout);
33106
- mouseLeaveTimeout = setTimeout(() => {
33107
- tooltipVisible.value = false;
33108
-
33109
- // intentionally reusing timeout here
33131
+ if (active) {
33132
+ tooltipVisible.value = true;
33133
+ tooltipItem.value = item;
33134
+ } else {
33110
33135
  mouseLeaveTimeout = setTimeout(() => {
33111
- tooltipItem.value = null;
33112
- }, 500);
33113
- }, 100);
33136
+ tooltipVisible.value = false;
33137
+
33138
+ // intentionally reusing timeout here
33139
+ mouseLeaveTimeout = setTimeout(() => {
33140
+ tooltipItem.value = null;
33141
+ }, 500);
33142
+ }, 100);
33143
+ }
33144
+ }
33145
+ let frame = -1;
33146
+ function onSvgMousemove(_ref2) {
33147
+ let {
33148
+ clientX,
33149
+ clientY
33150
+ } = _ref2;
33151
+ cancelAnimationFrame(frame);
33152
+ frame = requestAnimationFrame(() => {
33153
+ tooltipTarget.value = [clientX, clientY];
33154
+ });
33155
+ }
33156
+ function onSvgTouchstart(_ref3) {
33157
+ let {
33158
+ touches
33159
+ } = _ref3;
33160
+ if (!touches) return;
33161
+ const {
33162
+ clientX,
33163
+ clientY
33164
+ } = touches[0];
33165
+ tooltipTarget.value = [clientX, clientY];
33166
+ }
33167
+ function onSvgClickOutside() {
33168
+ arcs.value.forEach(a => a.isActive = false);
33169
+ tooltipVisible.value = false;
33114
33170
  }
33115
33171
  return () => {
33116
33172
  const segmentProps = pick(props, ['animation', 'gap', 'rounded', 'hideSlice', 'reveal', 'innerCut', 'hoverScale']);
@@ -33124,7 +33180,8 @@
33124
33180
  titleFormat: typeof props.tooltip === 'object' ? props.tooltip.titleFormat : '[title]',
33125
33181
  subtitleFormat: typeof props.tooltip === 'object' ? props.tooltip.subtitleFormat : '[value]',
33126
33182
  transition: typeof props.tooltip === 'object' ? props.tooltip.transition : defaultTooltipTransition,
33127
- offset: typeof props.tooltip === 'object' ? props.tooltip.offset : 16
33183
+ offset: typeof props.tooltip === 'object' ? props.tooltip.offset : 16,
33184
+ target: tooltipTarget.value
33128
33185
  };
33129
33186
  const legendDefaults = {
33130
33187
  VChipGroup: {
@@ -33142,10 +33199,10 @@
33142
33199
  size: typeof props.tooltip === 'object' ? props.tooltip.avatarSize : 28
33143
33200
  }
33144
33201
  };
33145
- const avatarSlot = _ref2 => {
33202
+ const avatarSlot = _ref4 => {
33146
33203
  let {
33147
33204
  item
33148
- } = _ref2;
33205
+ } = _ref4;
33149
33206
  return vue.createVNode(VAvatar, {
33150
33207
  "color": item.color,
33151
33208
  "start": true
@@ -33176,18 +33233,24 @@
33176
33233
  }, [vue.createElementVNode("div", {
33177
33234
  "class": vue.normalizeClass(['v-pie__content-underlay', colorClasses.value]),
33178
33235
  "style": vue.normalizeStyle(colorStyles.value)
33179
- }, null), vue.createElementVNode("svg", {
33236
+ }, null), vue.withDirectives(vue.createElementVNode("svg", {
33180
33237
  "xmlns": "http://www.w3.org/2000/svg",
33181
- "viewBox": "0 0 100 100"
33238
+ "viewBox": "0 0 100 100",
33239
+ "class": "v-pie__segments",
33240
+ "onMousemove": onSvgMousemove,
33241
+ "onTouchstart": onSvgTouchstart
33182
33242
  }, [arcs.value.map((item, index) => vue.createVNode(VPieSegment, vue.mergeProps(segmentProps, {
33183
33243
  "key": item.key,
33244
+ "active": item.isActive,
33184
33245
  "color": item.color,
33185
- "value": isActive(item) ? arcSize(item.value) : 0,
33246
+ "value": isVisible(item) ? arcSize(item.value) : 0,
33186
33247
  "rotate": arcOffset(index),
33187
33248
  "pattern": item.pattern,
33188
- "onMouseenter": () => onMouseenter(item),
33189
- "onMouseleave": () => onMouseleave()
33190
- }), null))]), vue.createElementVNode("div", {
33249
+ "onUpdate:active": val => setItemActive(item, val),
33250
+ "onTouchend": () => setItemActive(item, true)
33251
+ }), null))]), [[ClickOutside, {
33252
+ handler: onSvgClickOutside
33253
+ }]]), vue.createElementVNode("div", {
33191
33254
  "class": "v-pie__center-content",
33192
33255
  "style": {
33193
33256
  transform: `translate(-50%, -50%)
@@ -33203,7 +33266,7 @@
33203
33266
  default: () => [vue.createElementVNode("div", {
33204
33267
  "class": "v-pie__legend"
33205
33268
  }, [slots.legend?.({
33206
- isActive,
33269
+ isActive: isVisible,
33207
33270
  toggle,
33208
33271
  items: arcs.value,
33209
33272
  total: total.value
@@ -34683,11 +34746,6 @@
34683
34746
  useRender(() => {
34684
34747
  const showControls = state.value === 'loaded' && props.variant === 'player' && props.controlsVariant !== 'hidden';
34685
34748
  const posterTransition = props.variant === 'background' ? 'poster-fade-out' : 'fade-transition';
34686
- const overlayProps = {
34687
- contained: true,
34688
- persistent: true,
34689
- contentClass: 'v-video__overlay-fill'
34690
- };
34691
34749
  const controlsProps = {
34692
34750
  ...VVideoControls.filterProps(omit(props, ['variant', 'rounded', 'hideVolume'])),
34693
34751
  rounded: Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded,
@@ -34723,8 +34781,14 @@
34723
34781
  "color": "#fff",
34724
34782
  "variant": "outlined",
34725
34783
  "iconSize": "50",
34726
- "class": "v-video__center-icon"
34784
+ "class": "v-video__center-icon",
34785
+ "onClick": onVideoClick
34727
34786
  }, null);
34787
+ const activeOverlays = {
34788
+ playIcon: props.variant === 'player' && state.value === 'loaded' && !props.hideOverlay && !playing.value,
34789
+ poster: state.value !== 'loaded',
34790
+ loading: props.variant === 'player' && (state.value === 'loading' || waiting.value)
34791
+ };
34728
34792
  return vue.createElementVNode("div", {
34729
34793
  "ref": containerRef,
34730
34794
  "class": vue.normalizeClass(['v-video', `v-video--variant-${props.variant}`, `v-video--${state.value}`, {
@@ -34758,39 +34822,31 @@
34758
34822
  }), [slots.sources?.() ?? vue.createElementVNode("source", {
34759
34823
  "src": props.src,
34760
34824
  "type": props.type
34761
- }, null)]), props.variant === 'player' && !props.hideOverlay && vue.createVNode(VOverlay, vue.mergeProps({
34762
- "key": "pause-overlay",
34763
- "modelValue": state.value === 'loaded',
34764
- "opacity": "0"
34765
- }, overlayProps), {
34766
- default: () => [vue.createVNode(VSpacer, null, null), vue.createVNode(MaybeTransition, {
34767
- "name": "fade-transition"
34768
- }, {
34769
- default: () => [!playing.value && overlayPlayIcon]
34770
- }), vue.createVNode(VSpacer, null, null)]
34771
- }), props.variant === 'player' && !!slots.header ? vue.createElementVNode("div", {
34825
+ }, null)]), vue.createVNode(vue.Transition, {
34826
+ "name": "fade-transition"
34827
+ }, {
34828
+ default: () => [activeOverlays.playIcon && vue.createElementVNode("div", {
34829
+ "class": "v-video__overlay-fill"
34830
+ }, [overlayPlayIcon])]
34831
+ }), props.variant === 'player' && !!slots.header && vue.createElementVNode("div", {
34772
34832
  "key": "header",
34773
34833
  "class": "v-video__header"
34774
- }, [slots.header()]) : '', vue.createVNode(VOverlay, vue.mergeProps({
34775
- "key": "poster-overlay",
34776
- "modelValue": state.value !== 'loaded',
34834
+ }, [slots.header()]), vue.createVNode(MaybeTransition, {
34777
34835
  "transition": posterTransition
34778
- }, overlayProps), {
34779
- default: () => [vue.createVNode(VImg, {
34836
+ }, {
34837
+ default: () => [activeOverlays.poster && vue.createElementVNode("div", {
34838
+ "class": "v-video__overlay-fill"
34839
+ }, [vue.createVNode(VImg, {
34780
34840
  "cover": true,
34781
34841
  "src": props.image
34782
34842
  }, {
34783
34843
  default: () => [vue.createElementVNode("div", {
34784
34844
  "class": vue.normalizeClass(['v-video__overlay-fill', ...roundedContainerClasses.value])
34785
34845
  }, [props.variant === 'player' && overlayPlayIcon])]
34786
- })]
34787
- }), props.variant === 'player' && vue.createVNode(VOverlay, vue.mergeProps({
34788
- "key": "loading-overlay",
34789
- "modelValue": state.value === 'loading' || waiting.value,
34790
- "opacity": ".1"
34791
- }, overlayProps), {
34792
- default: () => [loadingIndicator]
34793
- })]), vue.createVNode(MaybeTransition, {
34846
+ })])]
34847
+ }), activeOverlays.loading && vue.createElementVNode("div", {
34848
+ "class": "v-video__overlay-fill"
34849
+ }, [loadingIndicator])]), vue.createVNode(MaybeTransition, {
34794
34850
  "key": "actions",
34795
34851
  "transition": props.controlsTransition
34796
34852
  }, {
@@ -35246,7 +35302,7 @@
35246
35302
  };
35247
35303
  });
35248
35304
  }
35249
- const version$1 = "3.9.5";
35305
+ const version$1 = "3.9.7";
35250
35306
  createVuetify$1.version = version$1;
35251
35307
 
35252
35308
  // Vue's inject() can only be used in setup
@@ -35544,7 +35600,7 @@
35544
35600
 
35545
35601
  /* eslint-disable local-rules/sort-imports */
35546
35602
 
35547
- const version = "3.9.5";
35603
+ const version = "3.9.7";
35548
35604
 
35549
35605
  /* eslint-disable local-rules/sort-imports */
35550
35606