vuetify 3.1.0 → 3.1.2

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 (108) hide show
  1. package/dist/json/attributes.json +46 -34
  2. package/dist/json/importMap.json +46 -46
  3. package/dist/json/tags.json +3 -0
  4. package/dist/json/web-types.json +144 -37
  5. package/dist/vuetify-labs.css +25749 -0
  6. package/dist/vuetify-labs.d.ts +25980 -38
  7. package/dist/vuetify-labs.esm.js +20181 -0
  8. package/dist/vuetify-labs.esm.js.map +1 -0
  9. package/dist/vuetify-labs.js +17271 -6823
  10. package/dist/vuetify-labs.min.css +12 -0
  11. package/dist/vuetify.css +8 -2
  12. package/dist/vuetify.d.ts +65 -17
  13. package/dist/vuetify.esm.js +203 -119
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +203 -119
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +410 -408
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAppBar/VAppBarTitle.mjs +4 -4
  21. package/lib/components/VAppBar/VAppBarTitle.mjs.map +1 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs +17 -7
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  24. package/lib/components/VAutocomplete/index.d.ts +1 -0
  25. package/lib/components/VBtn/VBtn.mjs +9 -3
  26. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  27. package/lib/components/VCard/VCard.mjs +5 -2
  28. package/lib/components/VCard/VCard.mjs.map +1 -1
  29. package/lib/components/VCard/index.d.ts +8 -2
  30. package/lib/components/VCheckbox/VCheckbox.mjs +2 -0
  31. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  32. package/lib/components/VChip/VChip.mjs +18 -4
  33. package/lib/components/VChip/VChip.mjs.map +1 -1
  34. package/lib/components/VChip/index.d.ts +15 -2
  35. package/lib/components/VChipGroup/VChipGroup.mjs +1 -0
  36. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  37. package/lib/components/VCombobox/VCombobox.mjs +18 -8
  38. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  39. package/lib/components/VCombobox/index.d.ts +1 -0
  40. package/lib/components/VField/VField.mjs +3 -1
  41. package/lib/components/VField/VField.mjs.map +1 -1
  42. package/lib/components/VField/index.d.ts +1 -0
  43. package/lib/components/VFileInput/VFileInput.css +1 -0
  44. package/lib/components/VFileInput/VFileInput.mjs +2 -0
  45. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  46. package/lib/components/VFileInput/VFileInput.sass +1 -0
  47. package/lib/components/VFileInput/index.d.ts +1 -0
  48. package/lib/components/VGrid/VGrid.css +5 -0
  49. package/lib/components/VGrid/VGrid.sass +5 -0
  50. package/lib/components/VInput/VInput.mjs +3 -0
  51. package/lib/components/VInput/VInput.mjs.map +1 -1
  52. package/lib/components/VInput/index.d.ts +1 -0
  53. package/lib/components/VList/VListItem.css +1 -1
  54. package/lib/components/VList/VListItem.mjs +5 -1
  55. package/lib/components/VList/VListItem.mjs.map +1 -1
  56. package/lib/components/VList/VListItem.sass +1 -1
  57. package/lib/components/VList/index.d.ts +20 -1
  58. package/lib/components/VMessages/VMessages.mjs +3 -1
  59. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  60. package/lib/components/VProgressLinear/VProgressLinear.mjs +13 -1
  61. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  62. package/lib/components/VProgressLinear/index.d.ts +18 -0
  63. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -0
  64. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  65. package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -1
  66. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  67. package/lib/components/VSelect/VSelect.mjs +19 -9
  68. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  69. package/lib/components/VSelect/index.d.ts +1 -0
  70. package/lib/components/VSlider/VSlider.mjs +4 -1
  71. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  72. package/lib/components/VSlider/VSliderThumb.mjs +5 -1
  73. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  74. package/lib/components/VSwitch/VSwitch.mjs +2 -0
  75. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  76. package/lib/components/VTextField/index.d.ts +1 -0
  77. package/lib/components/VTextarea/index.d.ts +1 -0
  78. package/lib/components/index.d.ts +53 -5
  79. package/lib/components/transitions/dialog-transition.mjs +3 -9
  80. package/lib/components/transitions/dialog-transition.mjs.map +1 -1
  81. package/lib/composables/filter.mjs +3 -3
  82. package/lib/composables/filter.mjs.map +1 -1
  83. package/lib/composables/teleport.mjs +6 -7
  84. package/lib/composables/teleport.mjs.map +1 -1
  85. package/lib/entry-bundler.mjs +1 -1
  86. package/lib/framework.mjs +1 -1
  87. package/lib/index.d.ts +12 -12
  88. package/lib/labs/VDataTable/VDataTable.mjs +8 -5
  89. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  90. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs +3 -3
  91. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -1
  92. package/lib/labs/VDataTable/VDataTableRows.mjs +36 -8
  93. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  94. package/lib/labs/VDataTable/VDataTableServer.mjs +4 -4
  95. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  96. package/lib/labs/VDataTable/VDataTableVirtual.mjs +4 -1
  97. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  98. package/lib/labs/VDataTable/composables/group.mjs +9 -4
  99. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  100. package/lib/labs/VDataTable/composables/sort.mjs +3 -5
  101. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  102. package/lib/labs/allComponents.mjs +3 -0
  103. package/lib/labs/allComponents.mjs.map +1 -0
  104. package/lib/labs/entry-bundler.mjs +14 -0
  105. package/lib/labs/entry-bundler.mjs.map +1 -0
  106. package/lib/util/defineComponent.mjs +1 -1
  107. package/lib/util/defineComponent.mjs.map +1 -1
  108. package/package.json +2 -2
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.1.0
2
+ * Vuetify v3.1.2
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -994,7 +994,7 @@
994
994
  // Utils
995
995
  function propIsDefined(vnode, prop) {
996
996
  var _vnode$props, _vnode$props2;
997
- return ((_vnode$props = vnode.props) == null ? void 0 : _vnode$props.hasOwnProperty(prop)) || ((_vnode$props2 = vnode.props) == null ? void 0 : _vnode$props2.hasOwnProperty(toKebabCase(prop)));
997
+ return typeof ((_vnode$props = vnode.props) == null ? void 0 : _vnode$props[prop]) !== 'undefined' || typeof ((_vnode$props2 = vnode.props) == null ? void 0 : _vnode$props2[toKebabCase(prop)]) !== 'undefined';
998
998
  }
999
999
  const defineComponent = function defineComponent(options) {
1000
1000
  options._setup = options._setup ?? options.setup;
@@ -2370,9 +2370,7 @@
2370
2370
  const animation = animate(el, [{
2371
2371
  transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,
2372
2372
  opacity: 0
2373
- }, {
2374
- transform: ''
2375
- }], {
2373
+ }, {}], {
2376
2374
  duration: 225 * speed,
2377
2375
  easing: deceleratedEasing
2378
2376
  });
@@ -2382,9 +2380,7 @@
2382
2380
  }, {
2383
2381
  opacity: 0,
2384
2382
  offset: 0.33
2385
- }, {
2386
- opacity: 1
2387
- }], {
2383
+ }, {}], {
2388
2384
  duration: 225 * 2 * speed,
2389
2385
  easing: standardEasing
2390
2386
  });
@@ -2407,9 +2403,7 @@
2407
2403
  sy,
2408
2404
  speed
2409
2405
  } = getDimensions(props.target, el);
2410
- const animation = animate(el, [{
2411
- transform: ''
2412
- }, {
2406
+ const animation = animate(el, [{}, {
2413
2407
  transform: `translate(${x}px, ${y}px) scale(${sx}, ${sy})`,
2414
2408
  opacity: 0
2415
2409
  }], {
@@ -4390,9 +4384,69 @@
4390
4384
  updated: updated$1
4391
4385
  };
4392
4386
 
4387
+ // Composables
4388
+
4389
+ // Types
4390
+
4391
+ const oppositeMap = {
4392
+ center: 'center',
4393
+ top: 'bottom',
4394
+ bottom: 'top',
4395
+ left: 'right',
4396
+ right: 'left'
4397
+ };
4398
+ const makeLocationProps = propsFactory({
4399
+ location: String
4400
+ }, 'location');
4401
+ function useLocation(props) {
4402
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4403
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
4404
+ const {
4405
+ isRtl
4406
+ } = useRtl();
4407
+ const locationStyles = vue.computed(() => {
4408
+ if (!props.location) return {};
4409
+ const {
4410
+ side,
4411
+ align
4412
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4413
+ function getOffset(side) {
4414
+ return offset ? offset(side) : 0;
4415
+ }
4416
+ const styles = {};
4417
+ if (side !== 'center') {
4418
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4419
+ }
4420
+ if (align !== 'center') {
4421
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4422
+ } else {
4423
+ if (side === 'center') styles.top = styles.left = '50%';else {
4424
+ styles[{
4425
+ top: 'left',
4426
+ bottom: 'left',
4427
+ left: 'top',
4428
+ right: 'top'
4429
+ }[side]] = '50%';
4430
+ }
4431
+ styles.transform = {
4432
+ top: 'translateX(-50%)',
4433
+ bottom: 'translateX(-50%)',
4434
+ left: 'translateY(-50%)',
4435
+ right: 'translateY(-50%)',
4436
+ center: 'translate(-50%, -50%)'
4437
+ }[side];
4438
+ }
4439
+ return styles;
4440
+ });
4441
+ return {
4442
+ locationStyles
4443
+ };
4444
+ }
4445
+
4393
4446
  const VProgressLinear = defineComponent({
4394
4447
  name: 'VProgressLinear',
4395
4448
  props: {
4449
+ absolute: Boolean,
4396
4450
  active: {
4397
4451
  type: Boolean,
4398
4452
  default: true
@@ -4422,6 +4476,9 @@
4422
4476
  stream: Boolean,
4423
4477
  striped: Boolean,
4424
4478
  roundedBar: Boolean,
4479
+ ...makeLocationProps({
4480
+ location: 'top'
4481
+ }),
4425
4482
  ...makeRoundedProps(),
4426
4483
  ...makeTagProps(),
4427
4484
  ...makeThemeProps()
@@ -4440,6 +4497,9 @@
4440
4497
  const {
4441
4498
  themeClasses
4442
4499
  } = provideTheme(props);
4500
+ const {
4501
+ locationStyles
4502
+ } = useLocation(props);
4443
4503
  const {
4444
4504
  textColorClasses,
4445
4505
  textColorStyles
@@ -4481,6 +4541,7 @@
4481
4541
  useRender(() => vue.createVNode(props.tag, {
4482
4542
  "ref": intersectionRef,
4483
4543
  "class": ['v-progress-linear', {
4544
+ 'v-progress-linear--absolute': props.absolute,
4484
4545
  'v-progress-linear--active': props.active && isIntersecting.value,
4485
4546
  'v-progress-linear--reverse': isReversed.value,
4486
4547
  'v-progress-linear--rounded': props.rounded,
@@ -4488,8 +4549,11 @@
4488
4549
  'v-progress-linear--striped': props.striped
4489
4550
  }, roundedClasses.value, themeClasses.value],
4490
4551
  "style": {
4552
+ bottom: props.location === 'bottom' ? 0 : undefined,
4553
+ top: props.location === 'top' ? 0 : undefined,
4491
4554
  height: props.active ? convertToUnit(height.value) : 0,
4492
- '--v-progress-linear-height': convertToUnit(height.value)
4555
+ '--v-progress-linear-height': convertToUnit(height.value),
4556
+ ...locationStyles.value
4493
4557
  },
4494
4558
  "role": "progressbar",
4495
4559
  "aria-hidden": props.active ? 'false' : 'true',
@@ -4575,65 +4639,6 @@
4575
4639
  }, null)]);
4576
4640
  }
4577
4641
 
4578
- // Composables
4579
-
4580
- // Types
4581
-
4582
- const oppositeMap = {
4583
- center: 'center',
4584
- top: 'bottom',
4585
- bottom: 'top',
4586
- left: 'right',
4587
- right: 'left'
4588
- };
4589
- const makeLocationProps = propsFactory({
4590
- location: String
4591
- }, 'location');
4592
- function useLocation(props) {
4593
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4594
- let offset = arguments.length > 2 ? arguments[2] : undefined;
4595
- const {
4596
- isRtl
4597
- } = useRtl();
4598
- const locationStyles = vue.computed(() => {
4599
- if (!props.location) return {};
4600
- const {
4601
- side,
4602
- align
4603
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4604
- function getOffset(side) {
4605
- return offset ? offset(side) : 0;
4606
- }
4607
- const styles = {};
4608
- if (side !== 'center') {
4609
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4610
- }
4611
- if (align !== 'center') {
4612
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4613
- } else {
4614
- if (side === 'center') styles.top = styles.left = '50%';else {
4615
- styles[{
4616
- top: 'left',
4617
- bottom: 'left',
4618
- left: 'top',
4619
- right: 'top'
4620
- }[side]] = '50%';
4621
- }
4622
- styles.transform = {
4623
- top: 'translateX(-50%)',
4624
- bottom: 'translateX(-50%)',
4625
- left: 'translateY(-50%)',
4626
- right: 'translateY(-50%)',
4627
- center: 'translate(-50%, -50%)'
4628
- }[side];
4629
- }
4630
- return styles;
4631
- });
4632
- return {
4633
- locationStyles
4634
- };
4635
- }
4636
-
4637
4642
  // Utilities
4638
4643
 
4639
4644
  // Types
@@ -4839,8 +4844,14 @@
4839
4844
  const group = useGroupItem(props, props.symbol, false);
4840
4845
  const link = useLink(props, attrs);
4841
4846
  const isActive = vue.computed(() => {
4842
- var _link$isActive;
4843
- return props.active !== false && (props.active || ((_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value) || (group == null ? void 0 : group.isSelected.value));
4847
+ if (props.active !== undefined) {
4848
+ return props.active;
4849
+ }
4850
+ if (link.isLink.value) {
4851
+ var _link$isActive;
4852
+ return (_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value;
4853
+ }
4854
+ return group == null ? void 0 : group.isSelected.value;
4844
4855
  });
4845
4856
  const isDisabled = vue.computed(() => (group == null ? void 0 : group.disabled.value) || props.disabled);
4846
4857
  const isElevated = vue.computed(() => {
@@ -4850,7 +4861,7 @@
4850
4861
  useRender(() => {
4851
4862
  var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4852
4863
  const Tag = link.isLink.value ? 'a' : props.tag;
4853
- const hasColor = !group || group.isSelected.value;
4864
+ const hasColor = !group || isActive.value;
4854
4865
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4855
4866
  const hasAppend = !!(props.appendIcon || slots.append);
4856
4867
  const hasIcon = !!(props.icon && props.icon !== true);
@@ -4978,13 +4989,13 @@
4978
4989
  props: {
4979
4990
  ...VToolbarTitle.props
4980
4991
  },
4981
- setup(_, _ref) {
4992
+ setup(props, _ref) {
4982
4993
  let {
4983
4994
  slots
4984
4995
  } = _ref;
4985
- useRender(() => vue.createVNode(VToolbarTitle, {
4996
+ useRender(() => vue.createVNode(VToolbarTitle, vue.mergeProps(props, {
4986
4997
  "class": "v-app-bar-title"
4987
- }, slots));
4998
+ }), slots));
4988
4999
  return {};
4989
5000
  }
4990
5001
  });
@@ -5330,6 +5341,7 @@
5330
5341
  const hasLabel = vue.computed(() => !props.singleLine && !!(props.label || slots.label));
5331
5342
  const uid = getUid();
5332
5343
  const id = vue.computed(() => props.id || `input-${uid}`);
5344
+ const messagesId = vue.computed(() => `${id.value}-messages`);
5333
5345
  const labelRef = vue.ref();
5334
5346
  const floatingLabelRef = vue.ref();
5335
5347
  const controlRef = vue.ref();
@@ -5454,7 +5466,8 @@
5454
5466
  ...slotProps.value,
5455
5467
  props: {
5456
5468
  id: id.value,
5457
- class: 'v-field__input'
5469
+ class: 'v-field__input',
5470
+ 'aria-describedby': messagesId.value
5458
5471
  },
5459
5472
  focus,
5460
5473
  blur
@@ -5537,7 +5550,9 @@
5537
5550
  "transition": props.transition,
5538
5551
  "tag": "div",
5539
5552
  "class": ['v-messages', textColorClasses.value],
5540
- "style": textColorStyles.value
5553
+ "style": textColorStyles.value,
5554
+ "role": "alert",
5555
+ "aria-live": "polite"
5541
5556
  }, {
5542
5557
  default: () => [props.active && messages.value.map((message, i) => vue.createVNode("div", {
5543
5558
  "class": "v-messages__message",
@@ -5855,6 +5870,7 @@
5855
5870
  } = useInputIcon(props);
5856
5871
  const uid = getUid();
5857
5872
  const id = vue.computed(() => props.id || `input-${uid}`);
5873
+ const messagesId = vue.computed(() => `${id.value}-messages`);
5858
5874
  const {
5859
5875
  errorMessages,
5860
5876
  isDirty,
@@ -5870,6 +5886,7 @@
5870
5886
  } = useValidation(props, 'v-input', id);
5871
5887
  const slotProps = vue.computed(() => ({
5872
5888
  id,
5889
+ messagesId,
5873
5890
  isDirty,
5874
5891
  isDisabled,
5875
5892
  isReadonly,
@@ -5905,6 +5922,7 @@
5905
5922
  }, null), (_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value)]), hasDetails && vue.createVNode("div", {
5906
5923
  "class": "v-input__details"
5907
5924
  }, [vue.createVNode(VMessages, {
5925
+ "id": messagesId.value,
5908
5926
  "active": hasMessages,
5909
5927
  "messages": errorMessages.value.length > 0 ? errorMessages.value : props.messages
5910
5928
  }, {
@@ -6576,11 +6594,13 @@
6576
6594
  default: _ref2 => {
6577
6595
  let {
6578
6596
  id,
6597
+ messagesId,
6579
6598
  isDisabled,
6580
6599
  isReadonly
6581
6600
  } = _ref2;
6582
6601
  return vue.createVNode(VCheckboxBtn, vue.mergeProps(checkboxProps, {
6583
6602
  "id": id.value,
6603
+ "aria-describedby": messagesId.value,
6584
6604
  "disabled": isDisabled.value,
6585
6605
  "readonly": isReadonly.value
6586
6606
  }, controlAttrs, {
@@ -6698,6 +6718,7 @@
6698
6718
  provideDefaults({
6699
6719
  VChip: {
6700
6720
  color: vue.toRef(props, 'color'),
6721
+ disabled: vue.toRef(props, 'disabled'),
6701
6722
  filter: vue.toRef(props, 'filter'),
6702
6723
  variant: vue.toRef(props, 'variant')
6703
6724
  }
@@ -6747,7 +6768,10 @@
6747
6768
  default: '$complete'
6748
6769
  },
6749
6770
  label: Boolean,
6750
- link: Boolean,
6771
+ link: {
6772
+ type: Boolean,
6773
+ default: undefined
6774
+ },
6751
6775
  pill: Boolean,
6752
6776
  prependAvatar: String,
6753
6777
  prependIcon: IconValue,
@@ -6760,6 +6784,8 @@
6760
6784
  type: Boolean,
6761
6785
  default: true
6762
6786
  },
6787
+ onClick: EventProp,
6788
+ onClickOnce: EventProp,
6763
6789
  ...makeBorderProps(),
6764
6790
  ...makeDensityProps(),
6765
6791
  ...makeElevationProps(),
@@ -6813,7 +6839,8 @@
6813
6839
  const isActive = useProxiedModel(props, 'modelValue');
6814
6840
  const group = useGroupItem(props, VChipGroupSymbol, false);
6815
6841
  const link = useLink(props, attrs);
6816
- const isClickable = vue.computed(() => !props.disabled && (!!group || link.isClickable.value || props.link));
6842
+ const isLink = vue.computed(() => props.link !== false && link.isLink.value);
6843
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6817
6844
  function onCloseClick(e) {
6818
6845
  isActive.value = false;
6819
6846
  emit('click:close', e);
@@ -6825,6 +6852,12 @@
6825
6852
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
6826
6853
  group == null ? void 0 : group.toggle();
6827
6854
  }
6855
+ function onKeyDown(e) {
6856
+ if (e.key === 'Enter' || e.key === ' ') {
6857
+ e.preventDefault();
6858
+ onClick(e);
6859
+ }
6860
+ }
6828
6861
  return () => {
6829
6862
  var _slots$default;
6830
6863
  const Tag = link.isLink.value ? 'a' : props.tag;
@@ -6845,7 +6878,9 @@
6845
6878
  "disabled": props.disabled || undefined,
6846
6879
  "draggable": props.draggable,
6847
6880
  "href": link.href.value,
6848
- "onClick": onClick
6881
+ "tabindex": isClickable.value ? 0 : undefined,
6882
+ "onClick": onClick,
6883
+ "onKeydown": isClickable.value && !isLink.value && onKeyDown
6849
6884
  }, {
6850
6885
  default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && vue.createVNode(VDefaultsProvider, {
6851
6886
  "key": "filter",
@@ -7561,6 +7596,10 @@
7561
7596
  nav: Boolean,
7562
7597
  prependAvatar: String,
7563
7598
  prependIcon: IconValue,
7599
+ ripple: {
7600
+ type: Boolean,
7601
+ default: true
7602
+ },
7564
7603
  subtitle: [String, Number, Boolean],
7565
7604
  title: [String, Number, Boolean],
7566
7605
  value: null,
@@ -7752,7 +7791,7 @@
7752
7791
  "key": "append-avatar"
7753
7792
  }, null)])]
7754
7793
  })]
7755
- }), [[vue.resolveDirective("ripple"), isClickable.value]]);
7794
+ }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7756
7795
  });
7757
7796
  return {};
7758
7797
  }
@@ -9293,19 +9332,18 @@
9293
9332
  vue.warn(`Unable to locate target ${_target}`);
9294
9333
  return undefined;
9295
9334
  }
9296
- if (!useTeleport.cache.has(targetElement)) {
9297
- const el = document.createElement('div');
9298
- el.className = 'v-overlay-container';
9299
- targetElement.appendChild(el);
9300
- useTeleport.cache.set(targetElement, el);
9335
+ let container = targetElement.querySelector('.v-overlay-container');
9336
+ if (!container) {
9337
+ container = document.createElement('div');
9338
+ container.className = 'v-overlay-container';
9339
+ targetElement.appendChild(container);
9301
9340
  }
9302
- return useTeleport.cache.get(targetElement);
9341
+ return container;
9303
9342
  });
9304
9343
  return {
9305
9344
  teleportTarget
9306
9345
  };
9307
9346
  }
9308
- useTeleport.cache = new WeakMap();
9309
9347
 
9310
9348
  function defaultConditional() {
9311
9349
  return true;
@@ -9809,12 +9847,19 @@
9809
9847
  const transformed = transformOut(v);
9810
9848
  return props.multiple ? transformed : transformed[0] ?? null;
9811
9849
  });
9850
+ const form = useForm();
9812
9851
  const selections = vue.computed(() => {
9813
9852
  return model.value.map(v => {
9814
9853
  return items.value.find(item => props.valueComparator(item.value, v.value)) || v;
9815
9854
  });
9816
9855
  });
9817
9856
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
9857
+ const displayItems = vue.computed(() => {
9858
+ if (props.hideSelected) {
9859
+ return items.value.filter(item => !selections.value.some(s => s === item));
9860
+ }
9861
+ return items.value;
9862
+ });
9818
9863
  const listRef = vue.ref();
9819
9864
  function onClear(e) {
9820
9865
  model.value = [];
@@ -9823,11 +9868,11 @@
9823
9868
  }
9824
9869
  }
9825
9870
  function onClickControl() {
9826
- if (props.hideNoData && !items.value.length || props.readonly) return;
9871
+ if (props.hideNoData && !items.value.length || props.readonly || form != null && form.isReadonly.value) return;
9827
9872
  menu.value = !menu.value;
9828
9873
  }
9829
9874
  function onKeydown(e) {
9830
- if (props.readonly) return;
9875
+ if (props.readonly || form != null && form.isReadonly.value) return;
9831
9876
  if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9832
9877
  e.preventDefault();
9833
9878
  menu.value = true;
@@ -9854,7 +9899,7 @@
9854
9899
  }
9855
9900
  function select(item) {
9856
9901
  if (props.multiple) {
9857
- const index = selected.value.findIndex(selection => selection === item.value);
9902
+ const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
9858
9903
  if (index === -1) {
9859
9904
  model.value = [...model.value, item];
9860
9905
  } else {
@@ -9881,6 +9926,7 @@
9881
9926
  }
9882
9927
  useRender(() => {
9883
9928
  const hasChips = !!(props.chips || slots.chip);
9929
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
9884
9930
  const [textFieldProps] = filterVTextFieldProps(props);
9885
9931
  return vue.createVNode(VTextField, vue.mergeProps({
9886
9932
  "ref": vTextFieldRef
@@ -9913,20 +9959,21 @@
9913
9959
  "activator": "parent",
9914
9960
  "contentClass": "v-select__content",
9915
9961
  "eager": props.eager,
9962
+ "maxHeight": 310,
9916
9963
  "openOnClick": false,
9917
9964
  "closeOnContentClick": false,
9918
9965
  "transition": props.transition
9919
9966
  }, props.menuProps), {
9920
- default: () => [vue.createVNode(VList, {
9967
+ default: () => [hasList && vue.createVNode(VList, {
9921
9968
  "ref": listRef,
9922
9969
  "selected": selected.value,
9923
9970
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
9924
9971
  "onMousedown": e => e.preventDefault(),
9925
9972
  "onFocusout": onFocusout
9926
9973
  }, {
9927
- default: () => [!items.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
9974
+ default: () => [!displayItems.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
9928
9975
  "title": t(props.noDataText)
9929
- }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), items.value.map((item, index) => {
9976
+ }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), displayItems.value.map((item, index) => {
9930
9977
  if (slots.item) {
9931
9978
  var _slots$item;
9932
9979
  return (_slots$item = slots.item) == null ? void 0 : _slots$item.call(slots, {
@@ -10028,7 +10075,7 @@
10028
10075
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10029
10076
  if (!(items != null && items.length)) return array;
10030
10077
  loop: for (let i = 0; i < items.length; i++) {
10031
- const item = items[i].raw;
10078
+ const item = items[i];
10032
10079
  const customMatches = {};
10033
10080
  const defaultMatches = {};
10034
10081
  let match = -1;
@@ -10068,7 +10115,7 @@
10068
10115
  }
10069
10116
  return array;
10070
10117
  }
10071
- function useFilter(props, items, query) {
10118
+ function useFilter(props, items, query, options) {
10072
10119
  const strQuery = vue.computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10073
10120
  const filteredItems = vue.ref([]);
10074
10121
  const filteredMatches = vue.ref(new Map());
@@ -10079,7 +10126,7 @@
10079
10126
  const results = filterItems(transformedItems, strQuery.value, {
10080
10127
  customKeyFilter: props.customKeyFilter,
10081
10128
  default: props.customFilter,
10082
- filterKeys: props.filterKeys,
10129
+ filterKeys: vue.unref(options == null ? void 0 : options.filterKeys) ?? props.filterKeys,
10083
10130
  filterMode: props.filterMode,
10084
10131
  noFilter: props.noFilter
10085
10132
  });
@@ -10159,6 +10206,7 @@
10159
10206
  const transformed = transformOut(v);
10160
10207
  return props.multiple ? transformed : transformed[0] ?? null;
10161
10208
  });
10209
+ const form = useForm();
10162
10210
  const {
10163
10211
  filteredItems,
10164
10212
  getMatches
@@ -10168,6 +10216,12 @@
10168
10216
  return items.value.find(item => props.valueComparator(item.value, v.value)) || v;
10169
10217
  });
10170
10218
  });
10219
+ const displayItems = vue.computed(() => {
10220
+ if (props.hideSelected) {
10221
+ return filteredItems.value.filter(filteredItem => !selections.value.some(s => s.value === filteredItem.value));
10222
+ }
10223
+ return filteredItems.value;
10224
+ });
10171
10225
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
10172
10226
  const listRef = vue.ref();
10173
10227
  function onClear(e) {
@@ -10178,11 +10232,11 @@
10178
10232
  search.value = '';
10179
10233
  }
10180
10234
  function onClickControl() {
10181
- if (props.hideNoData && !items.value.length || props.readonly) return;
10235
+ if (props.hideNoData && !items.value.length || props.readonly || form != null && form.isReadonly.value) return;
10182
10236
  menu.value = true;
10183
10237
  }
10184
10238
  function onKeydown(e) {
10185
- if (props.readonly) return;
10239
+ if (props.readonly || form != null && form.isReadonly.value) return;
10186
10240
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10187
10241
  menu.value = true;
10188
10242
  }
@@ -10220,7 +10274,7 @@
10220
10274
  const isSelecting = vue.ref(false);
10221
10275
  function select(item) {
10222
10276
  if (props.multiple) {
10223
- const index = selected.value.findIndex(selection => selection === item.value);
10277
+ const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
10224
10278
  if (index === -1) {
10225
10279
  model.value = [...model.value, item];
10226
10280
  search.value = '';
@@ -10259,6 +10313,7 @@
10259
10313
  });
10260
10314
  useRender(() => {
10261
10315
  const hasChips = !!(props.chips || slots.chip);
10316
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10262
10317
  const [textFieldProps] = filterVTextFieldProps(props);
10263
10318
  return vue.createVNode(VTextField, vue.mergeProps({
10264
10319
  "ref": vTextFieldRef
@@ -10294,12 +10349,13 @@
10294
10349
  "activator": "parent",
10295
10350
  "contentClass": "v-autocomplete__content",
10296
10351
  "eager": props.eager,
10352
+ "maxHeight": 310,
10297
10353
  "openOnClick": false,
10298
10354
  "closeOnContentClick": false,
10299
10355
  "transition": props.transition,
10300
10356
  "onAfterLeave": onAfterLeave
10301
10357
  }, props.menuProps), {
10302
- default: () => [vue.createVNode(VList, {
10358
+ default: () => [hasList && vue.createVNode(VList, {
10303
10359
  "ref": listRef,
10304
10360
  "selected": selected.value,
10305
10361
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
@@ -10307,9 +10363,9 @@
10307
10363
  "onFocusin": onFocusin,
10308
10364
  "onFocusout": onFocusout
10309
10365
  }, {
10310
- default: () => [!filteredItems.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
10366
+ default: () => [!displayItems.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
10311
10367
  "title": t(props.noDataText)
10312
- }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), filteredItems.value.map((item, index) => {
10368
+ }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), displayItems.value.map((item, index) => {
10313
10369
  var _slots$item;
10314
10370
  return ((_slots$item = slots.item) == null ? void 0 : _slots$item.call(slots, {
10315
10371
  item,
@@ -11002,7 +11058,10 @@
11002
11058
  },
11003
11059
  prependAvatar: String,
11004
11060
  prependIcon: IconValue,
11005
- ripple: Boolean,
11061
+ ripple: {
11062
+ type: Boolean,
11063
+ default: true
11064
+ },
11006
11065
  subtitle: String,
11007
11066
  text: String,
11008
11067
  title: String,
@@ -11123,7 +11182,7 @@
11123
11182
  }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), slots.actions && vue.createVNode(VCardActions, null, {
11124
11183
  default: slots.actions
11125
11184
  }), genOverlays(isClickable.value, 'v-card')]
11126
- }), [[vue.resolveDirective("ripple"), isClickable.value]]);
11185
+ }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
11127
11186
  });
11128
11187
  return {};
11129
11188
  }
@@ -12416,6 +12475,10 @@
12416
12475
  position: {
12417
12476
  type: Number,
12418
12477
  required: true
12478
+ },
12479
+ ripple: {
12480
+ type: Boolean,
12481
+ default: true
12419
12482
  }
12420
12483
  },
12421
12484
  emits: {
@@ -12516,7 +12579,7 @@
12516
12579
  }, null), vue.withDirectives(vue.createVNode("div", {
12517
12580
  "class": ['v-slider-thumb__ripple', textColorClasses.value],
12518
12581
  "style": textColorStyles.value
12519
- }, null), [[vue.resolveDirective("ripple"), true, null, {
12582
+ }, null), [[vue.resolveDirective("ripple"), props.ripple, null, {
12520
12583
  circle: true,
12521
12584
  center: true
12522
12585
  }]]), vue.createVNode(VScaleTransition, {
@@ -12719,13 +12782,15 @@
12719
12782
  prepend: hasPrepend ? slotProps => {
12720
12783
  var _slots$label, _slots$prepend;
12721
12784
  return vue.createVNode(vue.Fragment, null, [((_slots$label = slots.label) == null ? void 0 : _slots$label.call(slots, slotProps)) ?? props.label ? vue.createVNode(VLabel, {
12785
+ "id": slotProps.id,
12722
12786
  "class": "v-slider__label",
12723
12787
  "text": props.label
12724
12788
  }, null) : undefined, (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps)]);
12725
12789
  } : undefined,
12726
12790
  default: _ref2 => {
12727
12791
  let {
12728
- id
12792
+ id,
12793
+ messagesId
12729
12794
  } = _ref2;
12730
12795
  return vue.createVNode("div", {
12731
12796
  "class": "v-slider__container",
@@ -12746,6 +12811,7 @@
12746
12811
  'tick-label': slots['tick-label']
12747
12812
  }), vue.createVNode(VSliderThumb, {
12748
12813
  "ref": thumbContainerRef,
12814
+ "aria-describedby": messagesId.value,
12749
12815
  "focused": isFocused.value,
12750
12816
  "min": min.value,
12751
12817
  "max": max.value,
@@ -13447,6 +13513,7 @@
13447
13513
  const transformed = transformOut(v);
13448
13514
  return props.multiple ? transformed : transformed[0] ?? null;
13449
13515
  });
13516
+ const form = useForm();
13450
13517
  const _search = vue.ref(!props.multiple ? ((_model$value$ = model.value[0]) == null ? void 0 : _model$value$.title) ?? '' : '');
13451
13518
  const search = vue.computed({
13452
13519
  get: () => {
@@ -13491,6 +13558,12 @@
13491
13558
  return items.value.find(item => props.valueComparator(item.value, v.value)) || v;
13492
13559
  });
13493
13560
  });
13561
+ const displayItems = vue.computed(() => {
13562
+ if (props.hideSelected) {
13563
+ return filteredItems.value.filter(filteredItem => !selections.value.some(s => s.value === filteredItem.value));
13564
+ }
13565
+ return filteredItems.value;
13566
+ });
13494
13567
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
13495
13568
  const selection = vue.computed(() => selections.value[selectionIndex.value]);
13496
13569
  const listRef = vue.ref();
@@ -13501,11 +13574,11 @@
13501
13574
  }
13502
13575
  }
13503
13576
  function onClickControl() {
13504
- if (props.hideNoData && !items.value.length || props.readonly) return;
13577
+ if (props.hideNoData && !items.value.length || props.readonly || form != null && form.isReadonly.value) return;
13505
13578
  menu.value = true;
13506
13579
  }
13507
13580
  function onKeydown(e) {
13508
- if (props.readonly) return;
13581
+ if (props.readonly || form != null && form.isReadonly.value) return;
13509
13582
  const selectionStart = vTextFieldRef.value.selectionStart;
13510
13583
  const length = selected.value.length;
13511
13584
  if (selectionIndex.value > -1) e.preventDefault();
@@ -13558,7 +13631,7 @@
13558
13631
  vTextFieldRef.value.setSelectionRange(0, 0);
13559
13632
  }
13560
13633
  }
13561
- if (e.key === 'Enter') {
13634
+ if (e.key === 'Enter' && search.value) {
13562
13635
  select(transformItem$1(props, search.value));
13563
13636
  search.value = '';
13564
13637
  }
@@ -13568,7 +13641,7 @@
13568
13641
  }
13569
13642
  function select(item) {
13570
13643
  if (props.multiple) {
13571
- const index = selected.value.findIndex(selection => selection === item.value);
13644
+ const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
13572
13645
  if (index === -1) {
13573
13646
  model.value = [...model.value, item];
13574
13647
  } else {
@@ -13612,6 +13685,7 @@
13612
13685
  });
13613
13686
  useRender(() => {
13614
13687
  const hasChips = !!(props.chips || slots.chip);
13688
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
13615
13689
  const [textFieldProps] = filterVTextFieldProps(props);
13616
13690
  return vue.createVNode(VTextField, vue.mergeProps({
13617
13691
  "ref": vTextFieldRef
@@ -13646,12 +13720,13 @@
13646
13720
  "activator": "parent",
13647
13721
  "contentClass": "v-combobox__content",
13648
13722
  "eager": props.eager,
13723
+ "maxHeight": 310,
13649
13724
  "openOnClick": false,
13650
13725
  "closeOnContentClick": false,
13651
13726
  "transition": props.transition,
13652
13727
  "onAfterLeave": onAfterLeave
13653
13728
  }, props.menuProps), {
13654
- default: () => [vue.createVNode(VList, {
13729
+ default: () => [hasList && vue.createVNode(VList, {
13655
13730
  "ref": listRef,
13656
13731
  "selected": selected.value,
13657
13732
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
@@ -13659,9 +13734,9 @@
13659
13734
  "onFocusin": onFocusin,
13660
13735
  "onFocusout": onFocusout
13661
13736
  }, {
13662
- default: () => [!filteredItems.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
13737
+ default: () => [!displayItems.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
13663
13738
  "title": t(props.noDataText)
13664
- }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), filteredItems.value.map((item, index) => {
13739
+ }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), displayItems.value.map((item, index) => {
13665
13740
  var _slots$item;
13666
13741
  return ((_slots$item = slots.item) == null ? void 0 : _slots$item.call(slots, {
13667
13742
  item,
@@ -14211,6 +14286,7 @@
14211
14286
  ...slots,
14212
14287
  default: _ref3 => {
14213
14288
  let {
14289
+ id,
14214
14290
  isDisabled,
14215
14291
  isDirty,
14216
14292
  isReadonly,
@@ -14224,6 +14300,7 @@
14224
14300
  "onClick:prependInner": props['onClick:prependInner'],
14225
14301
  "onClick:appendInner": props['onClick:appendInner']
14226
14302
  }, fieldProps, {
14303
+ "id": id.value,
14227
14304
  "active": isDirty.value || isFocused.value,
14228
14305
  "dirty": isDirty.value,
14229
14306
  "focused": isFocused.value,
@@ -16004,6 +16081,7 @@
16004
16081
  default: _ref2 => {
16005
16082
  let {
16006
16083
  id,
16084
+ messagesId,
16007
16085
  isDisabled,
16008
16086
  isReadonly
16009
16087
  } = _ref2;
@@ -16013,6 +16091,7 @@
16013
16091
  default: () => [label]
16014
16092
  }), vue.createVNode(VSelectionControlGroup, vue.mergeProps(controlProps, {
16015
16093
  "id": id.value,
16094
+ "aria-describedby": messagesId.value,
16016
16095
  "defaultsTarget": "VRadio",
16017
16096
  "trueIcon": props.trueIcon,
16018
16097
  "falseIcon": props.falseIcon,
@@ -16136,7 +16215,8 @@
16136
16215
  default: _ref2 => {
16137
16216
  var _startThumbRef$value4, _stopThumbRef$value4;
16138
16217
  let {
16139
- id
16218
+ id,
16219
+ messagesId
16140
16220
  } = _ref2;
16141
16221
  return vue.createVNode("div", {
16142
16222
  "class": "v-slider__container",
@@ -16164,6 +16244,7 @@
16164
16244
  'tick-label': slots['tick-label']
16165
16245
  }), vue.createVNode(VSliderThumb, {
16166
16246
  "ref": startThumbRef,
16247
+ "aria-describedby": messagesId.value,
16167
16248
  "focused": isFocused && activeThumbRef.value === ((_startThumbRef$value4 = startThumbRef.value) == null ? void 0 : _startThumbRef$value4.$el),
16168
16249
  "modelValue": model.value[0],
16169
16250
  "onUpdate:modelValue": v => model.value = [v, model.value[1]],
@@ -16193,6 +16274,7 @@
16193
16274
  'thumb-label': slots['thumb-label']
16194
16275
  }), vue.createVNode(VSliderThumb, {
16195
16276
  "ref": stopThumbRef,
16277
+ "aria-describedby": messagesId.value,
16196
16278
  "focused": isFocused && activeThumbRef.value === ((_stopThumbRef$value4 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value4.$el),
16197
16279
  "modelValue": model.value[1],
16198
16280
  "onUpdate:modelValue": v => model.value = [model.value[0], v],
@@ -17030,6 +17112,7 @@
17030
17112
  default: _ref2 => {
17031
17113
  let {
17032
17114
  id,
17115
+ messagesId,
17033
17116
  isDisabled,
17034
17117
  isReadonly,
17035
17118
  isValid
@@ -17040,6 +17123,7 @@
17040
17123
  "modelValue": model.value,
17041
17124
  "onUpdate:modelValue": [$event => model.value = $event, onChange],
17042
17125
  "id": id.value,
17126
+ "aria-describedby": messagesId.value,
17043
17127
  "type": "checkbox",
17044
17128
  "aria-checked": indeterminate.value ? 'mixed' : undefined,
17045
17129
  "disabled": isDisabled.value,
@@ -18310,7 +18394,7 @@
18310
18394
  locale
18311
18395
  };
18312
18396
  }
18313
- const version$1 = "3.1.0";
18397
+ const version$1 = "3.1.2";
18314
18398
  createVuetify$1.version = version$1;
18315
18399
 
18316
18400
  // Vue's inject() can only be used in setup
@@ -18331,7 +18415,7 @@
18331
18415
  ...options
18332
18416
  });
18333
18417
  };
18334
- const version = "3.1.0";
18418
+ const version = "3.1.2";
18335
18419
  createVuetify.version = version;
18336
18420
 
18337
18421
  exports.components = components;