vuetify 3.5.8 → 3.5.9

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 (81) hide show
  1. package/dist/json/attributes.json +419 -7
  2. package/dist/json/importMap-labs.json +20 -8
  3. package/dist/json/importMap.json +150 -150
  4. package/dist/json/tags.json +118 -0
  5. package/dist/json/web-types.json +1315 -8
  6. package/dist/vuetify-labs.css +1437 -1420
  7. package/dist/vuetify-labs.d.ts +3021 -692
  8. package/dist/vuetify-labs.esm.js +790 -230
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +790 -230
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +592 -591
  13. package/dist/vuetify.d.ts +569 -68
  14. package/dist/vuetify.esm.js +220 -20
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +220 -20
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +486 -466
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +5 -3
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VAutocomplete/index.d.mts +138 -6
  24. package/lib/components/VColorPicker/VColorPickerPreview.css +1 -0
  25. package/lib/components/VColorPicker/VColorPickerPreview.sass +1 -0
  26. package/lib/components/VColorPicker/_variables.scss +1 -0
  27. package/lib/components/VCombobox/VCombobox.mjs +5 -3
  28. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  29. package/lib/components/VCombobox/index.d.mts +138 -6
  30. package/lib/components/VDatePicker/VDatePickerControls.mjs +1 -0
  31. package/lib/components/VDatePicker/VDatePickerControls.mjs.map +1 -1
  32. package/lib/components/VList/VList.mjs +8 -2
  33. package/lib/components/VList/VList.mjs.map +1 -1
  34. package/lib/components/VList/VListGroup.mjs +3 -1
  35. package/lib/components/VList/VListGroup.mjs.map +1 -1
  36. package/lib/components/VList/VListItem.mjs +17 -4
  37. package/lib/components/VList/VListItem.mjs.map +1 -1
  38. package/lib/components/VList/index.d.mts +108 -6
  39. package/lib/components/VSelect/VSelect.mjs +5 -3
  40. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  41. package/lib/components/VSelect/index.d.mts +138 -6
  42. package/lib/components/index.d.mts +522 -24
  43. package/lib/composables/nested/activeStrategies.mjs +121 -0
  44. package/lib/composables/nested/activeStrategies.mjs.map +1 -0
  45. package/lib/composables/nested/nested.mjs +50 -1
  46. package/lib/composables/nested/nested.mjs.map +1 -1
  47. package/lib/composables/nested/selectStrategies.mjs +4 -2
  48. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  49. package/lib/entry-bundler.mjs +1 -1
  50. package/lib/framework.mjs +1 -1
  51. package/lib/iconsets/fa.mjs +2 -0
  52. package/lib/iconsets/fa.mjs.map +1 -1
  53. package/lib/iconsets/fa4.mjs +2 -0
  54. package/lib/iconsets/fa4.mjs.map +1 -1
  55. package/lib/iconsets/md.mjs +2 -0
  56. package/lib/iconsets/md.mjs.map +1 -1
  57. package/lib/iconsets/mdi-svg.mjs +2 -0
  58. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  59. package/lib/iconsets/mdi.mjs +2 -0
  60. package/lib/iconsets/mdi.mjs.map +1 -1
  61. package/lib/index.d.mts +47 -44
  62. package/lib/labs/VTreeview/VTreeview.mjs +154 -0
  63. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -0
  64. package/lib/labs/VTreeview/VTreeviewChildren.mjs +98 -0
  65. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -0
  66. package/lib/labs/VTreeview/VTreeviewGroup.mjs +48 -0
  67. package/lib/labs/VTreeview/VTreeviewGroup.mjs.map +1 -0
  68. package/lib/labs/VTreeview/VTreeviewItem.css +17 -0
  69. package/lib/labs/VTreeview/VTreeviewItem.mjs +86 -0
  70. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -0
  71. package/lib/labs/VTreeview/VTreeviewItem.sass +19 -0
  72. package/lib/labs/VTreeview/index.d.mts +1975 -0
  73. package/lib/labs/VTreeview/index.mjs +4 -0
  74. package/lib/labs/VTreeview/index.mjs.map +1 -0
  75. package/lib/labs/VTreeview/shared.mjs +4 -0
  76. package/lib/labs/VTreeview/shared.mjs.map +1 -0
  77. package/lib/labs/VTreeview/variables.scss +8 -0
  78. package/lib/labs/components.d.mts +3708 -1773
  79. package/lib/labs/components.mjs +3 -2
  80. package/lib/labs/components.mjs.map +1 -1
  81. package/package.json +2 -2
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.8
2
+ * Vuetify v3.5.9
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -4370,6 +4370,8 @@
4370
4370
  plus: 'mdi-plus',
4371
4371
  minus: 'mdi-minus',
4372
4372
  calendar: 'mdi-calendar',
4373
+ treeviewCollapse: 'mdi-menu-down',
4374
+ treeviewExpand: 'mdi-menu-right',
4373
4375
  eyeDropper: 'mdi-eyedropper'
4374
4376
  };
4375
4377
  const mdi = {
@@ -7756,6 +7758,126 @@
7756
7758
  return vue.inject(ListKey, null);
7757
7759
  }
7758
7760
 
7761
+ /* eslint-disable sonarjs/no-identical-functions */
7762
+ // Utilities
7763
+ const independentActiveStrategy = mandatory => {
7764
+ const strategy = {
7765
+ activate: _ref => {
7766
+ let {
7767
+ id,
7768
+ value,
7769
+ activated
7770
+ } = _ref;
7771
+ id = vue.toRaw(id);
7772
+
7773
+ // When mandatory and we're trying to deselect when id
7774
+ // is the only currently selected item then do nothing
7775
+ if (mandatory && !value && activated.size === 1 && activated.has(id)) return activated;
7776
+ if (value) {
7777
+ activated.add(id);
7778
+ } else {
7779
+ activated.delete(id);
7780
+ }
7781
+ return activated;
7782
+ },
7783
+ in: (v, children, parents) => {
7784
+ let set = new Set();
7785
+ for (const id of v || []) {
7786
+ set = strategy.activate({
7787
+ id,
7788
+ value: true,
7789
+ activated: new Set(set),
7790
+ children,
7791
+ parents
7792
+ });
7793
+ }
7794
+ return set;
7795
+ },
7796
+ out: v => {
7797
+ return Array.from(v);
7798
+ }
7799
+ };
7800
+ return strategy;
7801
+ };
7802
+ const independentSingleActiveStrategy = mandatory => {
7803
+ const parentStrategy = independentActiveStrategy(mandatory);
7804
+ const strategy = {
7805
+ activate: _ref2 => {
7806
+ let {
7807
+ activated,
7808
+ id,
7809
+ ...rest
7810
+ } = _ref2;
7811
+ id = vue.toRaw(id);
7812
+ const singleSelected = activated.has(id) ? new Set([id]) : new Set();
7813
+ return parentStrategy.activate({
7814
+ ...rest,
7815
+ id,
7816
+ activated: singleSelected
7817
+ });
7818
+ },
7819
+ in: (v, children, parents) => {
7820
+ let set = new Set();
7821
+ if (v?.length) {
7822
+ set = parentStrategy.in(v.slice(0, 1), children, parents);
7823
+ }
7824
+ return set;
7825
+ },
7826
+ out: (v, children, parents) => {
7827
+ return parentStrategy.out(v, children, parents);
7828
+ }
7829
+ };
7830
+ return strategy;
7831
+ };
7832
+ const leafActiveStrategy = mandatory => {
7833
+ const parentStrategy = independentActiveStrategy(mandatory);
7834
+ const strategy = {
7835
+ activate: _ref3 => {
7836
+ let {
7837
+ id,
7838
+ activated,
7839
+ children,
7840
+ ...rest
7841
+ } = _ref3;
7842
+ id = vue.toRaw(id);
7843
+ if (children.has(id)) return activated;
7844
+ return parentStrategy.activate({
7845
+ id,
7846
+ activated,
7847
+ children,
7848
+ ...rest
7849
+ });
7850
+ },
7851
+ in: parentStrategy.in,
7852
+ out: parentStrategy.out
7853
+ };
7854
+ return strategy;
7855
+ };
7856
+ const leafSingleActiveStrategy = mandatory => {
7857
+ const parentStrategy = independentSingleActiveStrategy(mandatory);
7858
+ const strategy = {
7859
+ activate: _ref4 => {
7860
+ let {
7861
+ id,
7862
+ activated,
7863
+ children,
7864
+ ...rest
7865
+ } = _ref4;
7866
+ id = vue.toRaw(id);
7867
+ if (children.has(id)) return activated;
7868
+ return parentStrategy.activate({
7869
+ id,
7870
+ activated,
7871
+ children,
7872
+ ...rest
7873
+ });
7874
+ },
7875
+ in: parentStrategy.in,
7876
+ out: parentStrategy.out
7877
+ };
7878
+ return strategy;
7879
+ };
7880
+
7759
7881
  const singleOpenStrategy = {
7760
7882
  open: _ref => {
7761
7883
  let {
@@ -7840,7 +7962,8 @@
7840
7962
  if (mandatory && !value) {
7841
7963
  const on = Array.from(selected.entries()).reduce((arr, _ref2) => {
7842
7964
  let [key, value] = _ref2;
7843
- return value === 'on' ? [...arr, key] : arr;
7965
+ if (value === 'on') arr.push(key);
7966
+ return arr;
7844
7967
  }, []);
7845
7968
  if (on.length === 1 && on[0] === id) return selected;
7846
7969
  }
@@ -7982,7 +8105,8 @@
7982
8105
  if (mandatory && !value) {
7983
8106
  const on = Array.from(selected.entries()).reduce((arr, _ref7) => {
7984
8107
  let [key, value] = _ref7;
7985
- return value === 'on' ? [...arr, key] : arr;
8108
+ if (value === 'on') arr.push(key);
8109
+ return arr;
7986
8110
  }, []);
7987
8111
  if (on.length === 0) return original;
7988
8112
  }
@@ -8026,16 +8150,24 @@
8026
8150
  children: vue.ref(new Map()),
8027
8151
  open: () => null,
8028
8152
  openOnSelect: () => null,
8153
+ activate: () => null,
8029
8154
  select: () => null,
8155
+ activatable: vue.ref(false),
8156
+ selectable: vue.ref(false),
8030
8157
  opened: vue.ref(new Set()),
8158
+ activated: vue.ref(new Set()),
8031
8159
  selected: vue.ref(new Map()),
8032
8160
  selectedValues: vue.ref([])
8033
8161
  }
8034
8162
  };
8035
8163
  const makeNestedProps = propsFactory({
8164
+ activatable: Boolean,
8165
+ selectable: Boolean,
8166
+ activeStrategy: [String, Function],
8036
8167
  selectStrategy: [String, Function],
8037
8168
  openStrategy: [String, Object],
8038
8169
  opened: Array,
8170
+ activated: Array,
8039
8171
  selected: Array,
8040
8172
  mandatory: Boolean
8041
8173
  }, 'nested');
@@ -8044,6 +8176,20 @@
8044
8176
  const children = vue.ref(new Map());
8045
8177
  const parents = vue.ref(new Map());
8046
8178
  const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
8179
+ const activeStrategy = vue.computed(() => {
8180
+ if (typeof props.activeStrategy === 'object') return props.activeStrategy;
8181
+ switch (props.activeStrategy) {
8182
+ case 'leaf':
8183
+ return leafActiveStrategy(props.mandatory);
8184
+ case 'single-leaf':
8185
+ return leafSingleActiveStrategy(props.mandatory);
8186
+ case 'independent':
8187
+ return independentActiveStrategy(props.mandatory);
8188
+ case 'single-independent':
8189
+ default:
8190
+ return independentSingleActiveStrategy(props.mandatory);
8191
+ }
8192
+ });
8047
8193
  const selectStrategy = vue.computed(() => {
8048
8194
  if (typeof props.selectStrategy === 'object') return props.selectStrategy;
8049
8195
  switch (props.selectStrategy) {
@@ -8072,6 +8218,7 @@
8072
8218
  return multipleOpenStrategy;
8073
8219
  }
8074
8220
  });
8221
+ const activated = useProxiedModel(props, 'activated', props.activated, v => activeStrategy.value.in(v, children.value, parents.value), v => activeStrategy.value.out(v, children.value, parents.value));
8075
8222
  const selected = useProxiedModel(props, 'selected', props.selected, v => selectStrategy.value.in(v, children.value, parents.value), v => selectStrategy.value.out(v, children.value, parents.value));
8076
8223
  vue.onBeforeUnmount(() => {
8077
8224
  isUnmounted = true;
@@ -8090,6 +8237,9 @@
8090
8237
  id: vue.shallowRef(),
8091
8238
  root: {
8092
8239
  opened,
8240
+ activatable: vue.toRef(props, 'activatable'),
8241
+ selectable: vue.toRef(props, 'selectable'),
8242
+ activated,
8093
8243
  selected,
8094
8244
  selectedValues: vue.computed(() => {
8095
8245
  const arr = [];
@@ -8163,6 +8313,26 @@
8163
8313
  newSelected && (selected.value = newSelected);
8164
8314
  nested.root.openOnSelect(id, value, event);
8165
8315
  },
8316
+ activate: (id, value, event) => {
8317
+ if (!props.activatable) {
8318
+ return nested.root.select(id, true, event);
8319
+ }
8320
+ vm.emit('click:activate', {
8321
+ id,
8322
+ value,
8323
+ path: getPath(id),
8324
+ event
8325
+ });
8326
+ const newActivated = activeStrategy.value.activate({
8327
+ id,
8328
+ value,
8329
+ activated: new Set(activated.value),
8330
+ children: children.value,
8331
+ parents: parents.value,
8332
+ event
8333
+ });
8334
+ newActivated && (activated.value = newActivated);
8335
+ },
8166
8336
  children,
8167
8337
  parents
8168
8338
  }
@@ -8181,6 +8351,8 @@
8181
8351
  openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
8182
8352
  isOpen: vue.computed(() => parent.root.opened.value.has(computedId.value)),
8183
8353
  parent: vue.computed(() => parent.root.parents.value.get(computedId.value)),
8354
+ activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
8355
+ isActivated: vue.computed(() => parent.root.activated.value.has(vue.toRaw(computedId.value))),
8184
8356
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
8185
8357
  isSelected: vue.computed(() => parent.root.selected.value.get(vue.toRaw(computedId.value)) === 'on'),
8186
8358
  isIndeterminate: vue.computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
@@ -8303,7 +8475,9 @@
8303
8475
  }, [slots.default?.()]), [[vue.vShow, isOpen.value]])]
8304
8476
  })]
8305
8477
  }));
8306
- return {};
8478
+ return {
8479
+ isOpen
8480
+ };
8307
8481
  }
8308
8482
  });
8309
8483
 
@@ -8376,6 +8550,8 @@
8376
8550
  const link = useLink(props, attrs);
8377
8551
  const id = vue.computed(() => props.value === undefined ? link.href.value : props.value);
8378
8552
  const {
8553
+ activate,
8554
+ isActivated,
8379
8555
  select,
8380
8556
  isSelected,
8381
8557
  isIndeterminate,
@@ -8385,9 +8561,9 @@
8385
8561
  openOnSelect
8386
8562
  } = useNestedItem(id, false);
8387
8563
  const list = useList();
8388
- const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || isSelected.value));
8564
+ const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));
8389
8565
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
8390
- const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!list));
8566
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || !!list && (root.selectable.value || root.activatable.value || props.value != null)));
8391
8567
  const roundedProps = vue.computed(() => props.rounded || props.nav);
8392
8568
  const color = vue.computed(() => props.color ?? props.activeColor);
8393
8569
  const variantProps = vue.computed(() => ({
@@ -8438,7 +8614,13 @@
8438
8614
  emit('click', e);
8439
8615
  if (isGroupActivator || !isClickable.value) return;
8440
8616
  link.navigate?.(e);
8441
- props.value != null && select(!isSelected.value, e);
8617
+ if (root.activatable) {
8618
+ activate(!isActivated.value, e);
8619
+ } else if (root.selectable) {
8620
+ select(!isSelected.value, e);
8621
+ } else if (props.value != null) {
8622
+ select(!isSelected.value, e);
8623
+ }
8442
8624
  }
8443
8625
  function onKeyDown(e) {
8444
8626
  if (e.key === 'Enter' || e.key === ' ') {
@@ -8554,7 +8736,12 @@
8554
8736
  }, null)])]
8555
8737
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
8556
8738
  });
8557
- return {};
8739
+ return {
8740
+ isGroupActivator,
8741
+ isSelected,
8742
+ list,
8743
+ select
8744
+ };
8558
8745
  }
8559
8746
  });
8560
8747
 
@@ -8896,8 +9083,10 @@
8896
9083
  props: makeVListProps(),
8897
9084
  emits: {
8898
9085
  'update:selected': value => true,
9086
+ 'update:activated': value => true,
8899
9087
  'update:opened': value => true,
8900
9088
  'click:open': value => true,
9089
+ 'click:activate': value => true,
8901
9090
  'click:select': value => true
8902
9091
  },
8903
9092
  setup(props, _ref) {
@@ -8930,7 +9119,9 @@
8930
9119
  roundedClasses
8931
9120
  } = useRounded(props);
8932
9121
  const {
9122
+ children,
8933
9123
  open,
9124
+ parents,
8934
9125
  select
8935
9126
  } = useNested(props);
8936
9127
  const lineClasses = vue.computed(() => props.lines ? `v-list--${props.lines}-line` : undefined);
@@ -9020,7 +9211,9 @@
9020
9211
  return {
9021
9212
  open,
9022
9213
  select,
9023
- focus
9214
+ focus,
9215
+ children,
9216
+ parents
9024
9217
  };
9025
9218
  }
9026
9219
  });
@@ -11900,9 +12093,11 @@
11900
12093
  });
11901
12094
  }
11902
12095
  });
11903
- vue.watch(() => props.items, val => {
11904
- if (!isFocused.value || !val.length || menu.value) return;
11905
- menu.value = true;
12096
+ vue.watch(() => props.items, (newVal, oldVal) => {
12097
+ if (menu.value) return;
12098
+ if (isFocused.value && !oldVal.length && newVal.length) {
12099
+ menu.value = true;
12100
+ }
11906
12101
  });
11907
12102
  useRender(() => {
11908
12103
  const hasChips = !!(props.chips || slots.chip);
@@ -12462,9 +12657,11 @@
12462
12657
  });
12463
12658
  }
12464
12659
  });
12465
- vue.watch(() => props.items, val => {
12466
- if (!isFocused.value || !val.length || menu.value) return;
12467
- menu.value = true;
12660
+ vue.watch(() => props.items, (newVal, oldVal) => {
12661
+ if (menu.value) return;
12662
+ if (isFocused.value && !oldVal.length && newVal.length) {
12663
+ menu.value = true;
12664
+ }
12468
12665
  });
12469
12666
  useRender(() => {
12470
12667
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -16267,9 +16464,11 @@
16267
16464
  });
16268
16465
  }
16269
16466
  });
16270
- vue.watch(() => props.items, val => {
16271
- if (!isFocused.value || !val.length || menu.value) return;
16272
- menu.value = true;
16467
+ vue.watch(() => props.items, (newVal, oldVal) => {
16468
+ if (menu.value) return;
16469
+ if (isFocused.value && !oldVal.length && newVal.length) {
16470
+ menu.value = true;
16471
+ }
16273
16472
  });
16274
16473
  useRender(() => {
16275
16474
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -20290,6 +20489,7 @@
20290
20489
  emit('click:month');
20291
20490
  }
20292
20491
  useRender(() => {
20492
+ // TODO: add slot support and scope defaults
20293
20493
  return vue.createVNode("div", {
20294
20494
  "class": ['v-date-picker-controls']
20295
20495
  }, [vue.createVNode(VBtn, {
@@ -25777,7 +25977,7 @@
25777
25977
  goTo
25778
25978
  };
25779
25979
  }
25780
- const version$1 = "3.5.8";
25980
+ const version$1 = "3.5.9";
25781
25981
  createVuetify$1.version = version$1;
25782
25982
 
25783
25983
  // Vue's inject() can only be used in setup
@@ -25802,7 +26002,7 @@
25802
26002
  ...options
25803
26003
  });
25804
26004
  };
25805
- const version = "3.5.8";
26005
+ const version = "3.5.9";
25806
26006
  createVuetify.version = version;
25807
26007
 
25808
26008
  exports.components = components;