vuetify 3.5.3 → 3.5.5
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.
- package/dist/json/attributes.json +2771 -2523
- package/dist/json/importMap-labs.json +12 -8
- package/dist/json/importMap.json +100 -100
- package/dist/json/tags.json +236 -169
- package/dist/json/web-types.json +3218 -2563
- package/dist/vuetify-labs.css +2265 -2242
- package/dist/vuetify-labs.d.ts +1234 -152
- package/dist/vuetify-labs.esm.js +582 -88
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +582 -88
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +1316 -1293
- package/dist/vuetify.d.ts +894 -187
- package/dist/vuetify.esm.js +148 -87
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +148 -87
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +652 -647
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/index.d.mts +9 -0
- package/lib/components/VAppBar/index.d.mts +18 -0
- package/lib/components/VAutocomplete/VAutocomplete.mjs +4 -4
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +33 -6
- package/lib/components/VAvatar/VAvatar.mjs +2 -2
- package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
- package/lib/components/VAvatar/index.d.mts +9 -0
- package/lib/components/VBadge/index.d.mts +9 -0
- package/lib/components/VBanner/index.d.mts +9 -0
- package/lib/components/VBottomNavigation/index.d.mts +9 -0
- package/lib/components/VBreadcrumbs/index.d.mts +9 -0
- package/lib/components/VBtn/index.d.mts +9 -0
- package/lib/components/VBtnGroup/index.d.mts +9 -0
- package/lib/components/VBtnToggle/index.d.mts +9 -0
- package/lib/components/VCard/index.d.mts +9 -0
- package/lib/components/VCarousel/index.d.mts +9 -0
- package/lib/components/VChip/index.d.mts +9 -0
- package/lib/components/VColorPicker/VColorPicker.mjs +24 -12
- package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
- package/lib/components/VColorPicker/index.d.mts +9 -0
- package/lib/components/VCombobox/index.d.mts +33 -6
- package/lib/components/VDataIterator/index.d.mts +3 -3
- package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
- package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
- package/lib/components/VDataTable/index.d.mts +355 -117
- package/lib/components/VDataTable/types.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.css +2 -21
- package/lib/components/VDatePicker/VDatePicker.mjs +15 -11
- package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.sass +3 -18
- package/lib/components/VDatePicker/VDatePickerHeader.css +2 -0
- package/lib/components/VDatePicker/VDatePickerHeader.sass +3 -0
- package/lib/components/VDatePicker/VDatePickerMonth.css +11 -5
- package/lib/components/VDatePicker/VDatePickerMonth.mjs +2 -1
- package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.sass +13 -5
- package/lib/components/VDatePicker/VDatePickerMonths.css +2 -3
- package/lib/components/VDatePicker/VDatePickerMonths.mjs +6 -3
- package/lib/components/VDatePicker/VDatePickerMonths.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonths.sass +4 -3
- package/lib/components/VDatePicker/VDatePickerYears.css +2 -2
- package/lib/components/VDatePicker/VDatePickerYears.mjs +8 -1
- package/lib/components/VDatePicker/VDatePickerYears.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePickerYears.sass +4 -2
- package/lib/components/VDatePicker/_variables.scss +14 -34
- package/lib/components/VDatePicker/index.d.mts +13 -4
- package/lib/components/VExpansionPanel/VExpansionPanel.css +14 -0
- package/lib/components/VExpansionPanel/VExpansionPanel.sass +14 -0
- package/lib/components/VExpansionPanel/VExpansionPanels.mjs +9 -2
- package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
- package/lib/components/VExpansionPanel/index.d.mts +27 -0
- package/lib/components/VField/VField.css +20 -1
- package/lib/components/VField/VField.sass +19 -1
- package/lib/components/VField/index.d.mts +9 -0
- package/lib/components/VFileInput/VFileInput.mjs +1 -1
- package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
- package/lib/components/VFileInput/index.d.mts +9 -0
- package/lib/components/VFooter/index.d.mts +9 -0
- package/lib/components/VImg/index.d.mts +9 -0
- package/lib/components/VList/VListItem.css +2 -1
- package/lib/components/VList/VListItem.sass +1 -0
- package/lib/components/VList/_variables.scss +2 -1
- package/lib/components/VList/index.d.mts +18 -0
- package/lib/components/VMenu/VMenu.mjs +5 -5
- package/lib/components/VMenu/VMenu.mjs.map +1 -1
- package/lib/components/VMenu/shared.mjs.map +1 -1
- package/lib/components/VNavigationDrawer/index.d.mts +9 -0
- package/lib/components/VPagination/index.d.mts +9 -0
- package/lib/components/VProgressLinear/index.d.mts +9 -0
- package/lib/components/VRangeSlider/index.d.mts +9 -0
- package/lib/components/VSelect/VSelect.mjs +4 -3
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/index.d.mts +33 -6
- package/lib/components/VSheet/index.d.mts +9 -0
- package/lib/components/VSlider/index.d.mts +9 -0
- package/lib/components/VSnackbar/VSnackbar.mjs +1 -2
- package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
- package/lib/components/VSnackbar/index.d.mts +9 -0
- package/lib/components/VStepper/index.d.mts +9 -0
- package/lib/components/VSystemBar/index.d.mts +9 -0
- package/lib/components/VTabs/index.d.mts +33 -6
- package/lib/components/VTextField/index.d.mts +33 -6
- package/lib/components/VTextarea/index.d.mts +9 -0
- package/lib/components/VTimeline/index.d.mts +9 -0
- package/lib/components/VToolbar/index.d.mts +9 -0
- package/lib/components/VTooltip/VTooltip.css +1 -0
- package/lib/components/VTooltip/VTooltip.sass +1 -0
- package/lib/components/VTooltip/_variables.scss +1 -0
- package/lib/components/index.d.mts +857 -151
- package/lib/composables/form.mjs +2 -1
- package/lib/composables/form.mjs.map +1 -1
- package/lib/composables/goto.mjs +16 -18
- package/lib/composables/goto.mjs.map +1 -1
- package/lib/composables/group.mjs +2 -0
- package/lib/composables/group.mjs.map +1 -1
- package/lib/composables/icons.mjs +17 -13
- package/lib/composables/icons.mjs.map +1 -1
- package/lib/composables/rounded.mjs +5 -1
- package/lib/composables/rounded.mjs.map +1 -1
- package/lib/composables/virtual.mjs +11 -3
- package/lib/composables/virtual.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +1 -1
- package/lib/iconsets/fa-svg.mjs +2 -1
- package/lib/iconsets/fa-svg.mjs.map +1 -1
- package/lib/index.d.mts +37 -36
- package/lib/labs/VCalendar/VCalendar.mjs +1 -1
- package/lib/labs/VCalendar/VCalendar.mjs.map +1 -1
- package/lib/labs/VConfirmEdit/__test__/VConfirmEdit.spec.cy.mjs +1 -1
- package/lib/labs/VConfirmEdit/__test__/VConfirmEdit.spec.cy.mjs.map +1 -1
- package/lib/labs/VPicker/VPicker.css +2 -2
- package/lib/labs/VPicker/VPicker.sass +2 -2
- package/lib/labs/VPicker/_variables.scss +2 -4
- package/lib/labs/VPicker/index.d.mts +9 -0
- package/lib/labs/VSparkline/VBarline.mjs +138 -0
- package/lib/labs/VSparkline/VBarline.mjs.map +1 -0
- package/lib/labs/VSparkline/VSparkline.mjs +49 -0
- package/lib/labs/VSparkline/VSparkline.mjs.map +1 -0
- package/lib/labs/VSparkline/VTrendline.mjs +143 -0
- package/lib/labs/VSparkline/VTrendline.mjs.map +1 -0
- package/lib/labs/VSparkline/index.d.mts +374 -0
- package/lib/labs/VSparkline/index.mjs +2 -0
- package/lib/labs/VSparkline/index.mjs.map +1 -0
- package/lib/labs/VSparkline/util/line.mjs +52 -0
- package/lib/labs/VSparkline/util/line.mjs.map +1 -0
- package/lib/labs/VSparkline/util/path.mjs +60 -0
- package/lib/labs/VSparkline/util/path.mjs.map +1 -0
- package/lib/labs/components.d.mts +376 -1
- package/lib/labs/components.mjs +1 -0
- package/lib/labs/components.mjs.map +1 -1
- package/lib/locale/nl.mjs +1 -1
- package/lib/locale/nl.mjs.map +1 -1
- package/lib/util/helpers.mjs +10 -0
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +2 -2
- package/lib/components/VDatePicker/VDatePickerTitle.mjs +0 -81
- package/lib/components/VDatePicker/VDatePickerTitle.mjs.map +0 -1
- package/lib/components/VDatePicker/VDatePickerTitle.sass +0 -33
package/dist/vuetify-labs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.5.
|
|
2
|
+
* Vuetify v3.5.5
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -549,6 +549,16 @@
|
|
|
549
549
|
const timeoutId = window.setTimeout(cb, timeout);
|
|
550
550
|
return () => window.clearTimeout(timeoutId);
|
|
551
551
|
}
|
|
552
|
+
function isClickInsideElement(event, targetDiv) {
|
|
553
|
+
const mouseX = event.clientX;
|
|
554
|
+
const mouseY = event.clientY;
|
|
555
|
+
const divRect = targetDiv.getBoundingClientRect();
|
|
556
|
+
const divLeft = divRect.left;
|
|
557
|
+
const divTop = divRect.top;
|
|
558
|
+
const divRight = divRect.right;
|
|
559
|
+
const divBottom = divRect.bottom;
|
|
560
|
+
return mouseX >= divLeft && mouseX <= divRight && mouseY >= divTop && mouseY <= divBottom;
|
|
561
|
+
}
|
|
552
562
|
|
|
553
563
|
// Utilities
|
|
554
564
|
const block = ['top', 'bottom'];
|
|
@@ -2160,7 +2170,7 @@
|
|
|
2160
2170
|
vue.provide(LocaleSymbol, data);
|
|
2161
2171
|
return data;
|
|
2162
2172
|
}
|
|
2163
|
-
function genDefaults$
|
|
2173
|
+
function genDefaults$3() {
|
|
2164
2174
|
return {
|
|
2165
2175
|
af: false,
|
|
2166
2176
|
ar: true,
|
|
@@ -2207,7 +2217,7 @@
|
|
|
2207
2217
|
};
|
|
2208
2218
|
}
|
|
2209
2219
|
function createRtl(i18n, options) {
|
|
2210
|
-
const rtl = vue.ref(options?.rtl ?? genDefaults$
|
|
2220
|
+
const rtl = vue.ref(options?.rtl ?? genDefaults$3());
|
|
2211
2221
|
const isRtl = vue.computed(() => rtl.value[i18n.current.value] ?? false);
|
|
2212
2222
|
return {
|
|
2213
2223
|
isRtl,
|
|
@@ -2240,7 +2250,7 @@
|
|
|
2240
2250
|
const makeThemeProps = propsFactory({
|
|
2241
2251
|
theme: String
|
|
2242
2252
|
}, 'theme');
|
|
2243
|
-
function genDefaults$
|
|
2253
|
+
function genDefaults$2() {
|
|
2244
2254
|
return {
|
|
2245
2255
|
defaultTheme: 'light',
|
|
2246
2256
|
variations: {
|
|
@@ -2327,8 +2337,8 @@
|
|
|
2327
2337
|
};
|
|
2328
2338
|
}
|
|
2329
2339
|
function parseThemeOptions() {
|
|
2330
|
-
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$
|
|
2331
|
-
const defaults = genDefaults$
|
|
2340
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults$2();
|
|
2341
|
+
const defaults = genDefaults$2();
|
|
2332
2342
|
if (!options) return {
|
|
2333
2343
|
...defaults,
|
|
2334
2344
|
isDisabled: true
|
|
@@ -3111,12 +3121,14 @@
|
|
|
3111
3121
|
rounded: {
|
|
3112
3122
|
type: [Boolean, Number, String],
|
|
3113
3123
|
default: undefined
|
|
3114
|
-
}
|
|
3124
|
+
},
|
|
3125
|
+
tile: Boolean
|
|
3115
3126
|
}, 'rounded');
|
|
3116
3127
|
function useRounded(props) {
|
|
3117
3128
|
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
|
|
3118
3129
|
const roundedClasses = vue.computed(() => {
|
|
3119
3130
|
const rounded = vue.isRef(props) ? props.value : props.rounded;
|
|
3131
|
+
const tile = vue.isRef(props) ? props.value : props.tile;
|
|
3120
3132
|
const classes = [];
|
|
3121
3133
|
if (rounded === true || rounded === '') {
|
|
3122
3134
|
classes.push(`${name}--rounded`);
|
|
@@ -3124,6 +3136,8 @@
|
|
|
3124
3136
|
for (const value of String(rounded).split(' ')) {
|
|
3125
3137
|
classes.push(`rounded-${value}`);
|
|
3126
3138
|
}
|
|
3139
|
+
} else if (tile) {
|
|
3140
|
+
classes.push('rounded-0');
|
|
3127
3141
|
}
|
|
3128
3142
|
return classes;
|
|
3129
3143
|
});
|
|
@@ -4114,6 +4128,8 @@
|
|
|
4114
4128
|
vm.emit('group:selected', {
|
|
4115
4129
|
value
|
|
4116
4130
|
});
|
|
4131
|
+
}, {
|
|
4132
|
+
flush: 'sync'
|
|
4117
4133
|
});
|
|
4118
4134
|
return {
|
|
4119
4135
|
id,
|
|
@@ -4449,23 +4465,27 @@
|
|
|
4449
4465
|
};
|
|
4450
4466
|
}
|
|
4451
4467
|
});
|
|
4452
|
-
|
|
4453
|
-
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
|
|
4457
|
-
|
|
4458
|
-
|
|
4459
|
-
|
|
4468
|
+
function genDefaults$1() {
|
|
4469
|
+
return {
|
|
4470
|
+
svg: {
|
|
4471
|
+
component: VSvgIcon
|
|
4472
|
+
},
|
|
4473
|
+
class: {
|
|
4474
|
+
component: VClassIcon
|
|
4475
|
+
}
|
|
4476
|
+
};
|
|
4477
|
+
}
|
|
4460
4478
|
|
|
4461
4479
|
// Composables
|
|
4462
4480
|
function createIcons(options) {
|
|
4481
|
+
const sets = genDefaults$1();
|
|
4482
|
+
const defaultSet = options?.defaultSet ?? 'mdi';
|
|
4483
|
+
if (defaultSet === 'mdi' && !sets.mdi) {
|
|
4484
|
+
sets.mdi = mdi;
|
|
4485
|
+
}
|
|
4463
4486
|
return mergeDeep({
|
|
4464
|
-
defaultSet
|
|
4465
|
-
sets
|
|
4466
|
-
...defaultSets,
|
|
4467
|
-
mdi
|
|
4468
|
-
},
|
|
4487
|
+
defaultSet,
|
|
4488
|
+
sets,
|
|
4469
4489
|
aliases: {
|
|
4470
4490
|
...aliases,
|
|
4471
4491
|
/* eslint-disable max-len */
|
|
@@ -5901,7 +5921,7 @@
|
|
|
5901
5921
|
}, null) : props.text : vue.createVNode(VDefaultsProvider, {
|
|
5902
5922
|
"key": "content-defaults",
|
|
5903
5923
|
"defaults": {
|
|
5904
|
-
|
|
5924
|
+
VImg: {
|
|
5905
5925
|
cover: true,
|
|
5906
5926
|
image: props.image
|
|
5907
5927
|
},
|
|
@@ -5910,7 +5930,7 @@
|
|
|
5910
5930
|
}
|
|
5911
5931
|
}
|
|
5912
5932
|
}, {
|
|
5913
|
-
default: () => [slots.default
|
|
5933
|
+
default: () => [slots.default()]
|
|
5914
5934
|
}), genOverlays(false, 'v-avatar')]
|
|
5915
5935
|
}));
|
|
5916
5936
|
return {};
|
|
@@ -6469,7 +6489,8 @@
|
|
|
6469
6489
|
errors.value = results;
|
|
6470
6490
|
model.value = invalid > 0 ? false : valid === items.value.length ? true : null;
|
|
6471
6491
|
}, {
|
|
6472
|
-
deep: true
|
|
6492
|
+
deep: true,
|
|
6493
|
+
flush: 'post'
|
|
6473
6494
|
});
|
|
6474
6495
|
vue.provide(FormKey, {
|
|
6475
6496
|
register: _ref => {
|
|
@@ -10573,9 +10594,9 @@
|
|
|
10573
10594
|
unregister() {
|
|
10574
10595
|
--openChildren.value;
|
|
10575
10596
|
},
|
|
10576
|
-
closeParents() {
|
|
10597
|
+
closeParents(e) {
|
|
10577
10598
|
setTimeout(() => {
|
|
10578
|
-
if (!openChildren.value) {
|
|
10599
|
+
if (!openChildren.value && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
|
|
10579
10600
|
isActive.value = false;
|
|
10580
10601
|
parent?.closeParents();
|
|
10581
10602
|
}
|
|
@@ -10608,8 +10629,8 @@
|
|
|
10608
10629
|
document.removeEventListener('focusin', onFocusIn);
|
|
10609
10630
|
}
|
|
10610
10631
|
});
|
|
10611
|
-
function onClickOutside() {
|
|
10612
|
-
parent?.closeParents();
|
|
10632
|
+
function onClickOutside(e) {
|
|
10633
|
+
parent?.closeParents(e);
|
|
10613
10634
|
}
|
|
10614
10635
|
function onKeydown(e) {
|
|
10615
10636
|
if (props.disabled) return;
|
|
@@ -11343,9 +11364,6 @@
|
|
|
11343
11364
|
});
|
|
11344
11365
|
});
|
|
11345
11366
|
});
|
|
11346
|
-
vue.watch(viewportHeight, (val, oldVal) => {
|
|
11347
|
-
oldVal && calculateVisibleItems();
|
|
11348
|
-
});
|
|
11349
11367
|
vue.onScopeDispose(() => {
|
|
11350
11368
|
updateOffsets.clear();
|
|
11351
11369
|
});
|
|
@@ -11368,6 +11386,17 @@
|
|
|
11368
11386
|
let lastScrollTop = 0;
|
|
11369
11387
|
let scrollVelocity = 0;
|
|
11370
11388
|
let lastScrollTime = 0;
|
|
11389
|
+
vue.watch(viewportHeight, (val, oldVal) => {
|
|
11390
|
+
if (oldVal) {
|
|
11391
|
+
calculateVisibleItems();
|
|
11392
|
+
if (val < oldVal) {
|
|
11393
|
+
requestAnimationFrame(() => {
|
|
11394
|
+
scrollVelocity = 0;
|
|
11395
|
+
calculateVisibleItems();
|
|
11396
|
+
});
|
|
11397
|
+
}
|
|
11398
|
+
}
|
|
11399
|
+
});
|
|
11371
11400
|
function handleScroll() {
|
|
11372
11401
|
if (!containerRef.value || !markerRef.value) return;
|
|
11373
11402
|
const scrollTop = containerRef.value.scrollTop;
|
|
@@ -11820,9 +11849,10 @@
|
|
|
11820
11849
|
}
|
|
11821
11850
|
}
|
|
11822
11851
|
function select(item) {
|
|
11852
|
+
const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
|
|
11853
|
+
const add = index === -1;
|
|
11823
11854
|
if (props.multiple) {
|
|
11824
|
-
|
|
11825
|
-
if (index === -1) {
|
|
11855
|
+
if (add) {
|
|
11826
11856
|
model.value = [...model.value, item];
|
|
11827
11857
|
} else {
|
|
11828
11858
|
const value = [...model.value];
|
|
@@ -11830,7 +11860,7 @@
|
|
|
11830
11860
|
model.value = value;
|
|
11831
11861
|
}
|
|
11832
11862
|
} else {
|
|
11833
|
-
model.value = [item];
|
|
11863
|
+
model.value = add ? [item] : [];
|
|
11834
11864
|
menu.value = false;
|
|
11835
11865
|
}
|
|
11836
11866
|
}
|
|
@@ -12367,11 +12397,11 @@
|
|
|
12367
12397
|
}
|
|
12368
12398
|
const isSelecting = vue.shallowRef(false);
|
|
12369
12399
|
function select(item) {
|
|
12370
|
-
let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
12371
12400
|
if (item.props.disabled) return;
|
|
12401
|
+
const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
|
|
12402
|
+
const add = index === -1;
|
|
12372
12403
|
if (props.multiple) {
|
|
12373
|
-
|
|
12374
|
-
if (index === -1) {
|
|
12404
|
+
if (add) {
|
|
12375
12405
|
model.value = [...model.value, item];
|
|
12376
12406
|
} else {
|
|
12377
12407
|
const value = [...model.value];
|
|
@@ -12540,7 +12570,7 @@
|
|
|
12540
12570
|
function onChipClose(e) {
|
|
12541
12571
|
e.stopPropagation();
|
|
12542
12572
|
e.preventDefault();
|
|
12543
|
-
select(item
|
|
12573
|
+
select(item);
|
|
12544
12574
|
}
|
|
12545
12575
|
const slotProps = {
|
|
12546
12576
|
'onClick:close': onChipClose,
|
|
@@ -15812,8 +15842,8 @@
|
|
|
15812
15842
|
},
|
|
15813
15843
|
setup(props) {
|
|
15814
15844
|
const mode = useProxiedModel(props, 'mode');
|
|
15815
|
-
const
|
|
15816
|
-
const
|
|
15845
|
+
const hue = vue.ref(null);
|
|
15846
|
+
const model = useProxiedModel(props, 'modelValue', undefined, v => {
|
|
15817
15847
|
if (v == null || v === '') return null;
|
|
15818
15848
|
let c;
|
|
15819
15849
|
try {
|
|
@@ -15822,24 +15852,36 @@
|
|
|
15822
15852
|
consoleWarn(err);
|
|
15823
15853
|
return null;
|
|
15824
15854
|
}
|
|
15825
|
-
if (lastPickedColor.value) {
|
|
15826
|
-
c = {
|
|
15827
|
-
...c,
|
|
15828
|
-
h: lastPickedColor.value.h
|
|
15829
|
-
};
|
|
15830
|
-
lastPickedColor.value = null;
|
|
15831
|
-
}
|
|
15832
15855
|
return c;
|
|
15833
15856
|
}, v => {
|
|
15834
15857
|
if (!v) return null;
|
|
15835
15858
|
return extractColor(v, props.modelValue);
|
|
15836
15859
|
});
|
|
15860
|
+
const currentColor = vue.computed(() => {
|
|
15861
|
+
return model.value ? {
|
|
15862
|
+
...model.value,
|
|
15863
|
+
h: hue.value ?? model.value.h
|
|
15864
|
+
} : null;
|
|
15865
|
+
});
|
|
15837
15866
|
const {
|
|
15838
15867
|
rtlClasses
|
|
15839
15868
|
} = useRtl();
|
|
15869
|
+
let externalChange = true;
|
|
15870
|
+
vue.watch(model, v => {
|
|
15871
|
+
if (!externalChange) {
|
|
15872
|
+
// prevent hue shift from rgb conversion inaccuracy
|
|
15873
|
+
externalChange = true;
|
|
15874
|
+
return;
|
|
15875
|
+
}
|
|
15876
|
+
if (!v) return;
|
|
15877
|
+
hue.value = v.h;
|
|
15878
|
+
}, {
|
|
15879
|
+
immediate: true
|
|
15880
|
+
});
|
|
15840
15881
|
const updateColor = hsva => {
|
|
15841
|
-
|
|
15842
|
-
|
|
15882
|
+
externalChange = false;
|
|
15883
|
+
hue.value = hsva.h;
|
|
15884
|
+
model.value = hsva;
|
|
15843
15885
|
};
|
|
15844
15886
|
vue.onMounted(() => {
|
|
15845
15887
|
if (!props.modes.includes(mode.value)) mode.value = props.modes[0];
|
|
@@ -17609,7 +17651,8 @@
|
|
|
17609
17651
|
};
|
|
17610
17652
|
}
|
|
17611
17653
|
async function scrollTo(_target, _options, horizontal, goTo) {
|
|
17612
|
-
const
|
|
17654
|
+
const property = horizontal ? 'scrollLeft' : 'scrollTop';
|
|
17655
|
+
const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
|
|
17613
17656
|
const rtl = goTo?.rtl.value;
|
|
17614
17657
|
const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
|
|
17615
17658
|
const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
|
|
@@ -17627,25 +17670,22 @@
|
|
|
17627
17670
|
}
|
|
17628
17671
|
}
|
|
17629
17672
|
targetLocation += options.offset;
|
|
17630
|
-
const startLocation =
|
|
17673
|
+
const startLocation = container[property] ?? 0;
|
|
17631
17674
|
if (targetLocation === startLocation) return Promise.resolve(targetLocation);
|
|
17632
17675
|
const startTime = performance.now();
|
|
17633
17676
|
return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
|
|
17634
17677
|
const timeElapsed = currentTime - startTime;
|
|
17635
|
-
const progress =
|
|
17636
|
-
const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress));
|
|
17637
|
-
container[
|
|
17638
|
-
|
|
17639
|
-
|
|
17640
|
-
|
|
17641
|
-
|
|
17642
|
-
|
|
17643
|
-
|
|
17644
|
-
|
|
17645
|
-
|
|
17646
|
-
clientSize = container === document.body ? document.documentElement.clientWidth : container.clientWidth;
|
|
17647
|
-
reachEnd = clientSize + container.scrollLeft >= container.scrollWidth;
|
|
17648
|
-
if (targetLocation > container.scrollLeft && reachEnd) return resolve(targetLocation);
|
|
17678
|
+
const progress = timeElapsed / options.duration;
|
|
17679
|
+
const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(Math.max(progress, 1)));
|
|
17680
|
+
container[property] = location;
|
|
17681
|
+
|
|
17682
|
+
// Allow for some jitter if target time has elapsed
|
|
17683
|
+
if (progress >= 1 && Math.abs(location - container[property]) < 10) {
|
|
17684
|
+
return resolve(targetLocation);
|
|
17685
|
+
} else if (progress > 2) {
|
|
17686
|
+
// The target might not be reachable
|
|
17687
|
+
consoleWarn('Scroll target is not reachable');
|
|
17688
|
+
return resolve(container[property]);
|
|
17649
17689
|
}
|
|
17650
17690
|
requestAnimationFrame(step);
|
|
17651
17691
|
}));
|
|
@@ -20582,12 +20622,13 @@
|
|
|
20582
20622
|
}, [(props.showAdjacentMonths || !item.isAdjacent) && vue.createVNode(VDefaultsProvider, {
|
|
20583
20623
|
"defaults": {
|
|
20584
20624
|
VBtn: {
|
|
20625
|
+
class: 'v-date-picker-month__day-btn',
|
|
20585
20626
|
color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
|
|
20586
20627
|
disabled: item.isDisabled,
|
|
20587
20628
|
icon: true,
|
|
20588
20629
|
ripple: false,
|
|
20589
20630
|
text: item.localized,
|
|
20590
|
-
variant: item.isDisabled ? 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
|
|
20631
|
+
variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
|
|
20591
20632
|
onClick: () => onClick(item.date)
|
|
20592
20633
|
}
|
|
20593
20634
|
}
|
|
@@ -20613,6 +20654,7 @@
|
|
|
20613
20654
|
},
|
|
20614
20655
|
setup(props, _ref) {
|
|
20615
20656
|
let {
|
|
20657
|
+
emit,
|
|
20616
20658
|
slots
|
|
20617
20659
|
} = _ref;
|
|
20618
20660
|
const adapter = useDate();
|
|
@@ -20648,6 +20690,10 @@
|
|
|
20648
20690
|
onClick: () => onClick(i)
|
|
20649
20691
|
};
|
|
20650
20692
|
function onClick(i) {
|
|
20693
|
+
if (model.value === i) {
|
|
20694
|
+
emit('update:modelValue', model.value);
|
|
20695
|
+
return;
|
|
20696
|
+
}
|
|
20651
20697
|
model.value = i;
|
|
20652
20698
|
}
|
|
20653
20699
|
return slots.month?.({
|
|
@@ -20656,9 +20702,7 @@
|
|
|
20656
20702
|
props: btnProps
|
|
20657
20703
|
}) ?? vue.createVNode(VBtn, vue.mergeProps({
|
|
20658
20704
|
"key": "month"
|
|
20659
|
-
}, btnProps,
|
|
20660
|
-
"onClick": () => onClick(i)
|
|
20661
|
-
}), null);
|
|
20705
|
+
}, btnProps), null);
|
|
20662
20706
|
})])]));
|
|
20663
20707
|
return {};
|
|
20664
20708
|
}
|
|
@@ -20683,6 +20727,7 @@
|
|
|
20683
20727
|
},
|
|
20684
20728
|
setup(props, _ref) {
|
|
20685
20729
|
let {
|
|
20730
|
+
emit,
|
|
20686
20731
|
slots
|
|
20687
20732
|
} = _ref;
|
|
20688
20733
|
const adapter = useDate();
|
|
@@ -20733,7 +20778,13 @@
|
|
|
20733
20778
|
rounded: true,
|
|
20734
20779
|
text: year.text,
|
|
20735
20780
|
variant: model.value === year.value ? 'flat' : 'text',
|
|
20736
|
-
onClick: () =>
|
|
20781
|
+
onClick: () => {
|
|
20782
|
+
if (model.value === year.value) {
|
|
20783
|
+
emit('update:modelValue', model.value);
|
|
20784
|
+
return;
|
|
20785
|
+
}
|
|
20786
|
+
model.value = year.value;
|
|
20787
|
+
}
|
|
20737
20788
|
};
|
|
20738
20789
|
return slots.year?.({
|
|
20739
20790
|
year,
|
|
@@ -20883,7 +20934,7 @@
|
|
|
20883
20934
|
return props.multiple && model.value.length > 1 ? t('$vuetify.datePicker.itemsSelected', model.value.length) : model.value[0] && adapter.isValid(model.value[0]) ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header);
|
|
20884
20935
|
});
|
|
20885
20936
|
const text = vue.computed(() => {
|
|
20886
|
-
return adapter.format(adapter.
|
|
20937
|
+
return adapter.format(adapter.date(new Date(year.value, month.value, 1)), 'monthAndYear');
|
|
20887
20938
|
});
|
|
20888
20939
|
// const headerIcon = computed(() => props.inputMode === 'calendar' ? props.keyboardIcon : props.calendarIcon)
|
|
20889
20940
|
const headerTransition = vue.computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
|
|
@@ -20926,7 +20977,9 @@
|
|
|
20926
20977
|
} else {
|
|
20927
20978
|
year.value++;
|
|
20928
20979
|
month.value = 0;
|
|
20980
|
+
onUpdateYear(year.value);
|
|
20929
20981
|
}
|
|
20982
|
+
onUpdateMonth(month.value);
|
|
20930
20983
|
}
|
|
20931
20984
|
function onClickPrev() {
|
|
20932
20985
|
if (month.value > 0) {
|
|
@@ -20934,7 +20987,9 @@
|
|
|
20934
20987
|
} else {
|
|
20935
20988
|
year.value--;
|
|
20936
20989
|
month.value = 11;
|
|
20990
|
+
onUpdateYear(year.value);
|
|
20937
20991
|
}
|
|
20992
|
+
onUpdateMonth(month.value);
|
|
20938
20993
|
}
|
|
20939
20994
|
function onClickDate() {
|
|
20940
20995
|
viewMode.value = 'month';
|
|
@@ -20945,14 +21000,14 @@
|
|
|
20945
21000
|
function onClickYear() {
|
|
20946
21001
|
viewMode.value = viewMode.value === 'year' ? 'month' : 'year';
|
|
20947
21002
|
}
|
|
20948
|
-
|
|
21003
|
+
function onUpdateMonth(value) {
|
|
20949
21004
|
if (viewMode.value === 'months') onClickMonth();
|
|
20950
|
-
emit('update:month',
|
|
20951
|
-
}
|
|
20952
|
-
|
|
21005
|
+
emit('update:month', value);
|
|
21006
|
+
}
|
|
21007
|
+
function onUpdateYear(value) {
|
|
20953
21008
|
if (viewMode.value === 'year') onClickYear();
|
|
20954
|
-
emit('update:year',
|
|
20955
|
-
}
|
|
21009
|
+
emit('update:year', value);
|
|
21010
|
+
}
|
|
20956
21011
|
vue.watch(model, (val, oldVal) => {
|
|
20957
21012
|
const before = adapter.date(wrapInArray(val)[0]);
|
|
20958
21013
|
const after = adapter.date(wrapInArray(oldVal)[0]);
|
|
@@ -21008,14 +21063,14 @@
|
|
|
21008
21063
|
"key": "date-picker-months"
|
|
21009
21064
|
}, datePickerMonthsProps, {
|
|
21010
21065
|
"modelValue": month.value,
|
|
21011
|
-
"onUpdate:modelValue": $event => month.value = $event,
|
|
21066
|
+
"onUpdate:modelValue": [$event => month.value = $event, onUpdateMonth],
|
|
21012
21067
|
"min": minDate.value,
|
|
21013
21068
|
"max": maxDate.value
|
|
21014
21069
|
}), null) : viewMode.value === 'year' ? vue.createVNode(VDatePickerYears, vue.mergeProps({
|
|
21015
21070
|
"key": "date-picker-years"
|
|
21016
21071
|
}, datePickerYearsProps, {
|
|
21017
21072
|
"modelValue": year.value,
|
|
21018
|
-
"onUpdate:modelValue": $event => year.value = $event,
|
|
21073
|
+
"onUpdate:modelValue": [$event => year.value = $event, onUpdateYear],
|
|
21019
21074
|
"min": minDate.value,
|
|
21020
21075
|
"max": maxDate.value
|
|
21021
21076
|
}), null) : vue.createVNode(VDatePickerMonth, vue.mergeProps({
|
|
@@ -21024,9 +21079,9 @@
|
|
|
21024
21079
|
"modelValue": model.value,
|
|
21025
21080
|
"onUpdate:modelValue": $event => model.value = $event,
|
|
21026
21081
|
"month": month.value,
|
|
21027
|
-
"onUpdate:month": $event => month.value = $event,
|
|
21082
|
+
"onUpdate:month": [$event => month.value = $event, onUpdateMonth],
|
|
21028
21083
|
"year": year.value,
|
|
21029
|
-
"onUpdate:year": $event => year.value = $event,
|
|
21084
|
+
"onUpdate:year": [$event => year.value = $event, onUpdateYear],
|
|
21030
21085
|
"min": minDate.value,
|
|
21031
21086
|
"max": maxDate.value
|
|
21032
21087
|
}), null)]
|
|
@@ -21044,7 +21099,9 @@
|
|
|
21044
21099
|
const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
|
|
21045
21100
|
const makeVExpansionPanelsProps = propsFactory({
|
|
21046
21101
|
color: String,
|
|
21102
|
+
flat: Boolean,
|
|
21047
21103
|
static: Boolean,
|
|
21104
|
+
tile: Boolean,
|
|
21048
21105
|
variant: {
|
|
21049
21106
|
type: String,
|
|
21050
21107
|
default: 'default',
|
|
@@ -21074,12 +21131,17 @@
|
|
|
21074
21131
|
provideDefaults({
|
|
21075
21132
|
VExpansionPanel: {
|
|
21076
21133
|
color: vue.toRef(props, 'color'),
|
|
21077
|
-
readonly: vue.toRef(props, 'readonly')
|
|
21134
|
+
readonly: vue.toRef(props, 'readonly')
|
|
21135
|
+
},
|
|
21136
|
+
VExpansionPanelTitle: {
|
|
21078
21137
|
static: vue.toRef(props, 'static')
|
|
21079
21138
|
}
|
|
21080
21139
|
});
|
|
21081
21140
|
useRender(() => vue.createVNode(props.tag, {
|
|
21082
|
-
"class": ['v-expansion-panels',
|
|
21141
|
+
"class": ['v-expansion-panels', {
|
|
21142
|
+
'v-expansion-panels--flat': props.flat,
|
|
21143
|
+
'v-expansion-panels--tile': props.tile
|
|
21144
|
+
}, themeClasses.value, variantClass.value, props.class],
|
|
21083
21145
|
"style": props.style
|
|
21084
21146
|
}, slots));
|
|
21085
21147
|
return {};
|
|
@@ -21363,7 +21425,7 @@
|
|
|
21363
21425
|
if (!isFocused.value) focus();
|
|
21364
21426
|
}
|
|
21365
21427
|
function onClickPrepend(e) {
|
|
21366
|
-
|
|
21428
|
+
inputRef.value?.click();
|
|
21367
21429
|
}
|
|
21368
21430
|
function onControlMousedown(e) {
|
|
21369
21431
|
emit('mousedown:control', e);
|
|
@@ -23817,12 +23879,11 @@
|
|
|
23817
23879
|
"scrollStrategy": "none",
|
|
23818
23880
|
"_disableGlobalStack": true
|
|
23819
23881
|
}, scopeId), {
|
|
23820
|
-
default: () => [genOverlays(false, 'v-snackbar'), props.timer && vue.createVNode("div", {
|
|
23882
|
+
default: () => [genOverlays(false, 'v-snackbar'), props.timer && !isHovering.value && vue.createVNode("div", {
|
|
23821
23883
|
"key": "timer",
|
|
23822
23884
|
"class": "v-snackbar__timer"
|
|
23823
23885
|
}, [vue.createVNode(VProgressLinear, {
|
|
23824
23886
|
"ref": timerRef,
|
|
23825
|
-
"active": !isHovering.value,
|
|
23826
23887
|
"color": typeof props.timer === 'string' ? props.timer : 'info',
|
|
23827
23888
|
"max": props.timeout,
|
|
23828
23889
|
"model-value": countdown.time.value
|
|
@@ -25806,7 +25867,7 @@
|
|
|
25806
25867
|
}, [!props.hideWeekNumber ? vue.createVNode("div", {
|
|
25807
25868
|
"key": "weekNumber0",
|
|
25808
25869
|
"class": "v-calendar-weekly__head-weeknumber"
|
|
25809
|
-
}, null) : '', props.weekdays.
|
|
25870
|
+
}, null) : '', props.weekdays.map(weekday => vue.createVNode("div", {
|
|
25810
25871
|
"class": `v-calendar-weekly__head-weekday${!props.hideWeekNumber ? '-with-weeknumber' : ''}`
|
|
25811
25872
|
}, [dayNames[weekday]]))]), props.viewMode === 'month' && vue.createVNode("div", {
|
|
25812
25873
|
"key": "VCalendarMonth",
|
|
@@ -25835,6 +25896,438 @@
|
|
|
25835
25896
|
}
|
|
25836
25897
|
});
|
|
25837
25898
|
|
|
25899
|
+
// Utilities
|
|
25900
|
+
|
|
25901
|
+
// Types
|
|
25902
|
+
|
|
25903
|
+
const makeLineProps = propsFactory({
|
|
25904
|
+
autoDraw: Boolean,
|
|
25905
|
+
autoDrawDuration: [Number, String],
|
|
25906
|
+
autoDrawEasing: {
|
|
25907
|
+
type: String,
|
|
25908
|
+
default: 'ease'
|
|
25909
|
+
},
|
|
25910
|
+
color: String,
|
|
25911
|
+
gradient: {
|
|
25912
|
+
type: Array,
|
|
25913
|
+
default: () => []
|
|
25914
|
+
},
|
|
25915
|
+
gradientDirection: {
|
|
25916
|
+
type: String,
|
|
25917
|
+
validator: val => ['top', 'bottom', 'left', 'right'].includes(val),
|
|
25918
|
+
default: 'top'
|
|
25919
|
+
},
|
|
25920
|
+
height: {
|
|
25921
|
+
type: [String, Number],
|
|
25922
|
+
default: 75
|
|
25923
|
+
},
|
|
25924
|
+
labels: {
|
|
25925
|
+
type: Array,
|
|
25926
|
+
default: () => []
|
|
25927
|
+
},
|
|
25928
|
+
labelSize: {
|
|
25929
|
+
type: [Number, String],
|
|
25930
|
+
default: 7
|
|
25931
|
+
},
|
|
25932
|
+
lineWidth: {
|
|
25933
|
+
type: [String, Number],
|
|
25934
|
+
default: 4
|
|
25935
|
+
},
|
|
25936
|
+
id: String,
|
|
25937
|
+
modelValue: {
|
|
25938
|
+
type: Array,
|
|
25939
|
+
default: () => []
|
|
25940
|
+
},
|
|
25941
|
+
padding: {
|
|
25942
|
+
type: [String, Number],
|
|
25943
|
+
default: 8
|
|
25944
|
+
},
|
|
25945
|
+
showLabels: Boolean,
|
|
25946
|
+
smooth: Boolean,
|
|
25947
|
+
width: {
|
|
25948
|
+
type: [Number, String],
|
|
25949
|
+
default: 300
|
|
25950
|
+
}
|
|
25951
|
+
}, 'Line');
|
|
25952
|
+
|
|
25953
|
+
// Types
|
|
25954
|
+
|
|
25955
|
+
const makeVBarlineProps = propsFactory({
|
|
25956
|
+
autoLineWidth: Boolean,
|
|
25957
|
+
...makeLineProps()
|
|
25958
|
+
}, 'VBarline');
|
|
25959
|
+
const VBarline = genericComponent()({
|
|
25960
|
+
name: 'VBarline',
|
|
25961
|
+
props: makeVBarlineProps(),
|
|
25962
|
+
setup(props, _ref) {
|
|
25963
|
+
let {
|
|
25964
|
+
slots
|
|
25965
|
+
} = _ref;
|
|
25966
|
+
const uid = getUid();
|
|
25967
|
+
const id = vue.computed(() => props.id || `barline-${uid}`);
|
|
25968
|
+
const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || 500);
|
|
25969
|
+
const hasLabels = vue.computed(() => {
|
|
25970
|
+
return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
|
|
25971
|
+
});
|
|
25972
|
+
const lineWidth = vue.computed(() => parseFloat(props.lineWidth) || 4);
|
|
25973
|
+
const totalWidth = vue.computed(() => Math.max(props.modelValue.length * lineWidth.value, Number(props.width)));
|
|
25974
|
+
const boundary = vue.computed(() => {
|
|
25975
|
+
return {
|
|
25976
|
+
minX: 0,
|
|
25977
|
+
maxX: totalWidth.value,
|
|
25978
|
+
minY: 0,
|
|
25979
|
+
maxY: parseInt(props.height, 10)
|
|
25980
|
+
};
|
|
25981
|
+
});
|
|
25982
|
+
function genBars(values, boundary) {
|
|
25983
|
+
const {
|
|
25984
|
+
minX,
|
|
25985
|
+
maxX,
|
|
25986
|
+
minY,
|
|
25987
|
+
maxY
|
|
25988
|
+
} = boundary;
|
|
25989
|
+
const totalValues = values.length;
|
|
25990
|
+
let maxValue = Math.max(...values);
|
|
25991
|
+
let minValue = Math.min(...values);
|
|
25992
|
+
if (minValue > 0) minValue = 0;
|
|
25993
|
+
if (maxValue < 0) maxValue = 0;
|
|
25994
|
+
const gridX = maxX / totalValues;
|
|
25995
|
+
const gridY = (maxY - minY) / (maxValue - minValue || 1);
|
|
25996
|
+
const horizonY = maxY - Math.abs(minValue * gridY);
|
|
25997
|
+
return values.map((value, index) => {
|
|
25998
|
+
const height = Math.abs(gridY * value);
|
|
25999
|
+
return {
|
|
26000
|
+
x: minX + index * gridX,
|
|
26001
|
+
y: horizonY - height + +(value < 0) * height,
|
|
26002
|
+
height,
|
|
26003
|
+
value
|
|
26004
|
+
};
|
|
26005
|
+
});
|
|
26006
|
+
}
|
|
26007
|
+
const parsedLabels = vue.computed(() => {
|
|
26008
|
+
const labels = [];
|
|
26009
|
+
const points = genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
|
|
26010
|
+
const len = points.length;
|
|
26011
|
+
for (let i = 0; labels.length < len; i++) {
|
|
26012
|
+
const item = points[i];
|
|
26013
|
+
let value = props.labels[i];
|
|
26014
|
+
if (!value) {
|
|
26015
|
+
value = typeof item === 'object' ? item.value : item;
|
|
26016
|
+
}
|
|
26017
|
+
labels.push({
|
|
26018
|
+
x: item.x,
|
|
26019
|
+
value: String(value)
|
|
26020
|
+
});
|
|
26021
|
+
}
|
|
26022
|
+
return labels;
|
|
26023
|
+
});
|
|
26024
|
+
const bars = vue.computed(() => genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value));
|
|
26025
|
+
const offsetX = vue.computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
|
|
26026
|
+
useRender(() => {
|
|
26027
|
+
const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
|
|
26028
|
+
return vue.createVNode("svg", {
|
|
26029
|
+
"display": "block"
|
|
26030
|
+
}, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
|
|
26031
|
+
"id": id.value,
|
|
26032
|
+
"gradientUnits": "userSpaceOnUse",
|
|
26033
|
+
"x1": props.gradientDirection === 'left' ? '100%' : '0',
|
|
26034
|
+
"y1": props.gradientDirection === 'top' ? '100%' : '0',
|
|
26035
|
+
"x2": props.gradientDirection === 'right' ? '100%' : '0',
|
|
26036
|
+
"y2": props.gradientDirection === 'bottom' ? '100%' : '0'
|
|
26037
|
+
}, [gradientData.map((color, index) => vue.createVNode("stop", {
|
|
26038
|
+
"offset": index / Math.max(gradientData.length - 1, 1),
|
|
26039
|
+
"stop-color": color || 'currentColor'
|
|
26040
|
+
}, null))])]), vue.createVNode("clipPath", {
|
|
26041
|
+
"id": `${id.value}-clip`
|
|
26042
|
+
}, [bars.value.map(item => vue.createVNode("rect", {
|
|
26043
|
+
"x": item.x + offsetX.value,
|
|
26044
|
+
"y": item.y,
|
|
26045
|
+
"width": lineWidth.value,
|
|
26046
|
+
"height": item.height,
|
|
26047
|
+
"rx": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0,
|
|
26048
|
+
"ry": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0
|
|
26049
|
+
}, [props.autoDraw && vue.createVNode(vue.Fragment, null, [vue.createVNode("animate", {
|
|
26050
|
+
"attributeName": "y",
|
|
26051
|
+
"from": item.y + item.height,
|
|
26052
|
+
"to": item.y,
|
|
26053
|
+
"dur": `${autoDrawDuration.value}ms`,
|
|
26054
|
+
"fill": "freeze"
|
|
26055
|
+
}, null), vue.createVNode("animate", {
|
|
26056
|
+
"attributeName": "height",
|
|
26057
|
+
"from": "0",
|
|
26058
|
+
"to": item.height,
|
|
26059
|
+
"dur": `${autoDrawDuration.value}ms`,
|
|
26060
|
+
"fill": "freeze"
|
|
26061
|
+
}, null)])]))]), hasLabels.value && vue.createVNode("g", {
|
|
26062
|
+
"key": "labels",
|
|
26063
|
+
"style": {
|
|
26064
|
+
textAnchor: 'middle',
|
|
26065
|
+
dominantBaseline: 'mathematical',
|
|
26066
|
+
fill: 'currentColor'
|
|
26067
|
+
}
|
|
26068
|
+
}, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
|
|
26069
|
+
"x": item.x + offsetX.value + lineWidth.value / 2,
|
|
26070
|
+
"y": parseInt(props.height, 10) - 2 + (parseInt(props.labelSize, 10) || 7 * 0.75),
|
|
26071
|
+
"font-size": Number(props.labelSize) || 7
|
|
26072
|
+
}, [slots.label?.({
|
|
26073
|
+
index: i,
|
|
26074
|
+
value: item.value
|
|
26075
|
+
}) ?? item.value]))]), vue.createVNode("g", {
|
|
26076
|
+
"clip-path": `url(#${id.value}-clip)`,
|
|
26077
|
+
"fill": `url(#${id.value})`
|
|
26078
|
+
}, [vue.createVNode("rect", {
|
|
26079
|
+
"x": 0,
|
|
26080
|
+
"y": 0,
|
|
26081
|
+
"width": Math.max(props.modelValue.length * lineWidth.value, Number(props.width)),
|
|
26082
|
+
"height": props.height
|
|
26083
|
+
}, null)])]);
|
|
26084
|
+
});
|
|
26085
|
+
}
|
|
26086
|
+
});
|
|
26087
|
+
|
|
26088
|
+
// @ts-nocheck
|
|
26089
|
+
/* eslint-disable */
|
|
26090
|
+
|
|
26091
|
+
// import { checkCollinear, getDistance, moveTo } from './math'
|
|
26092
|
+
|
|
26093
|
+
/**
|
|
26094
|
+
* From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
|
|
26095
|
+
*/
|
|
26096
|
+
function genPath(points, radius) {
|
|
26097
|
+
let fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
26098
|
+
let height = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 75;
|
|
26099
|
+
if (points.length === 0) return '';
|
|
26100
|
+
const start = points.shift();
|
|
26101
|
+
const end = points[points.length - 1];
|
|
26102
|
+
return (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) + points.map((point, index) => {
|
|
26103
|
+
const next = points[index + 1];
|
|
26104
|
+
const prev = points[index - 1] || start;
|
|
26105
|
+
const isCollinear = next && checkCollinear(next, point, prev);
|
|
26106
|
+
if (!next || isCollinear) {
|
|
26107
|
+
return `L${point.x} ${point.y}`;
|
|
26108
|
+
}
|
|
26109
|
+
const threshold = Math.min(getDistance(prev, point), getDistance(next, point));
|
|
26110
|
+
const isTooCloseForRadius = threshold / 2 < radius;
|
|
26111
|
+
const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
|
|
26112
|
+
const before = moveTo(prev, point, radiusForPoint);
|
|
26113
|
+
const after = moveTo(next, point, radiusForPoint);
|
|
26114
|
+
return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`;
|
|
26115
|
+
}).join('') + (fill ? `L${end.x} ${height - start.x + 2} Z` : '');
|
|
26116
|
+
}
|
|
26117
|
+
function int(value) {
|
|
26118
|
+
return parseInt(value, 10);
|
|
26119
|
+
}
|
|
26120
|
+
|
|
26121
|
+
/**
|
|
26122
|
+
* https://en.wikipedia.org/wiki/Collinearity
|
|
26123
|
+
* x=(x1+x2)/2
|
|
26124
|
+
* y=(y1+y2)/2
|
|
26125
|
+
*/
|
|
26126
|
+
function checkCollinear(p0, p1, p2) {
|
|
26127
|
+
return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
|
|
26128
|
+
}
|
|
26129
|
+
function getDistance(p1, p2) {
|
|
26130
|
+
return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
|
|
26131
|
+
}
|
|
26132
|
+
function moveTo(to, from, radius) {
|
|
26133
|
+
const vector = {
|
|
26134
|
+
x: to.x - from.x,
|
|
26135
|
+
y: to.y - from.y
|
|
26136
|
+
};
|
|
26137
|
+
const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
|
|
26138
|
+
const unitVector = {
|
|
26139
|
+
x: vector.x / length,
|
|
26140
|
+
y: vector.y / length
|
|
26141
|
+
};
|
|
26142
|
+
return {
|
|
26143
|
+
x: from.x + unitVector.x * radius,
|
|
26144
|
+
y: from.y + unitVector.y * radius
|
|
26145
|
+
};
|
|
26146
|
+
}
|
|
26147
|
+
|
|
26148
|
+
// Types
|
|
26149
|
+
|
|
26150
|
+
const makeVTrendlineProps = propsFactory({
|
|
26151
|
+
fill: Boolean,
|
|
26152
|
+
...makeLineProps()
|
|
26153
|
+
}, 'VTrendline');
|
|
26154
|
+
const VTrendline = genericComponent()({
|
|
26155
|
+
name: 'VTrendline',
|
|
26156
|
+
props: makeVTrendlineProps(),
|
|
26157
|
+
setup(props, _ref) {
|
|
26158
|
+
let {
|
|
26159
|
+
slots
|
|
26160
|
+
} = _ref;
|
|
26161
|
+
const uid = getUid();
|
|
26162
|
+
const id = vue.computed(() => props.id || `trendline-${uid}`);
|
|
26163
|
+
const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || (props.fill ? 500 : 2000));
|
|
26164
|
+
const lastLength = vue.ref(0);
|
|
26165
|
+
const path = vue.ref(null);
|
|
26166
|
+
function genPoints(values, boundary) {
|
|
26167
|
+
const {
|
|
26168
|
+
minX,
|
|
26169
|
+
maxX,
|
|
26170
|
+
minY,
|
|
26171
|
+
maxY
|
|
26172
|
+
} = boundary;
|
|
26173
|
+
const totalValues = values.length;
|
|
26174
|
+
const maxValue = Math.max(...values);
|
|
26175
|
+
const minValue = Math.min(...values);
|
|
26176
|
+
const gridX = (maxX - minX) / (totalValues - 1);
|
|
26177
|
+
const gridY = (maxY - minY) / (maxValue - minValue || 1);
|
|
26178
|
+
return values.map((value, index) => {
|
|
26179
|
+
return {
|
|
26180
|
+
x: minX + index * gridX,
|
|
26181
|
+
y: maxY - (value - minValue) * gridY,
|
|
26182
|
+
value
|
|
26183
|
+
};
|
|
26184
|
+
});
|
|
26185
|
+
}
|
|
26186
|
+
const hasLabels = vue.computed(() => {
|
|
26187
|
+
return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
|
|
26188
|
+
});
|
|
26189
|
+
const lineWidth = vue.computed(() => {
|
|
26190
|
+
return parseFloat(props.lineWidth) || 4;
|
|
26191
|
+
});
|
|
26192
|
+
const totalWidth = vue.computed(() => Number(props.width));
|
|
26193
|
+
const boundary = vue.computed(() => {
|
|
26194
|
+
const padding = Number(props.padding);
|
|
26195
|
+
return {
|
|
26196
|
+
minX: padding,
|
|
26197
|
+
maxX: totalWidth.value - padding,
|
|
26198
|
+
minY: padding,
|
|
26199
|
+
maxY: parseInt(props.height, 10) - padding
|
|
26200
|
+
};
|
|
26201
|
+
});
|
|
26202
|
+
const parsedLabels = vue.computed(() => {
|
|
26203
|
+
const labels = [];
|
|
26204
|
+
const points = genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
|
|
26205
|
+
const len = points.length;
|
|
26206
|
+
for (let i = 0; labels.length < len; i++) {
|
|
26207
|
+
const item = points[i];
|
|
26208
|
+
let value = props.labels[i];
|
|
26209
|
+
if (!value) {
|
|
26210
|
+
value = typeof item === 'object' ? item.value : item;
|
|
26211
|
+
}
|
|
26212
|
+
labels.push({
|
|
26213
|
+
x: item.x,
|
|
26214
|
+
value: String(value)
|
|
26215
|
+
});
|
|
26216
|
+
}
|
|
26217
|
+
return labels;
|
|
26218
|
+
});
|
|
26219
|
+
vue.watch(() => props.modelValue, async () => {
|
|
26220
|
+
await vue.nextTick();
|
|
26221
|
+
if (!props.autoDraw || !path.value) return;
|
|
26222
|
+
const pathRef = path.value;
|
|
26223
|
+
const length = pathRef.getTotalLength();
|
|
26224
|
+
if (!props.fill) {
|
|
26225
|
+
// Initial setup to "hide" the line by using the stroke dash array
|
|
26226
|
+
pathRef.style.strokeDasharray = `${length}`;
|
|
26227
|
+
pathRef.style.strokeDashoffset = `${length}`;
|
|
26228
|
+
|
|
26229
|
+
// Force reflow to ensure the transition starts from this state
|
|
26230
|
+
pathRef.getBoundingClientRect();
|
|
26231
|
+
|
|
26232
|
+
// Animate the stroke dash offset to "draw" the line
|
|
26233
|
+
pathRef.style.transition = `stroke-dashoffset ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
|
|
26234
|
+
pathRef.style.strokeDashoffset = '0';
|
|
26235
|
+
} else {
|
|
26236
|
+
// Your existing logic for filled paths remains the same
|
|
26237
|
+
pathRef.style.transformOrigin = 'bottom center';
|
|
26238
|
+
pathRef.style.transition = 'none';
|
|
26239
|
+
pathRef.style.transform = `scaleY(0)`;
|
|
26240
|
+
pathRef.getBoundingClientRect();
|
|
26241
|
+
pathRef.style.transition = `transform ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
|
|
26242
|
+
pathRef.style.transform = `scaleY(1)`;
|
|
26243
|
+
}
|
|
26244
|
+
lastLength.value = length;
|
|
26245
|
+
}, {
|
|
26246
|
+
immediate: true
|
|
26247
|
+
});
|
|
26248
|
+
useRender(() => {
|
|
26249
|
+
const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
|
|
26250
|
+
return vue.createVNode("svg", {
|
|
26251
|
+
"display": "block",
|
|
26252
|
+
"stroke-width": parseFloat(props.lineWidth) ?? 4
|
|
26253
|
+
}, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
|
|
26254
|
+
"id": id.value,
|
|
26255
|
+
"gradientUnits": "userSpaceOnUse",
|
|
26256
|
+
"x1": props.gradientDirection === 'left' ? '100%' : '0',
|
|
26257
|
+
"y1": props.gradientDirection === 'top' ? '100%' : '0',
|
|
26258
|
+
"x2": props.gradientDirection === 'right' ? '100%' : '0',
|
|
26259
|
+
"y2": props.gradientDirection === 'bottom' ? '100%' : '0'
|
|
26260
|
+
}, [gradientData.map((color, index) => vue.createVNode("stop", {
|
|
26261
|
+
"offset": index / Math.max(gradientData.length - 1, 1),
|
|
26262
|
+
"stop-color": color || 'currentColor'
|
|
26263
|
+
}, null))])]), hasLabels.value && vue.createVNode("g", {
|
|
26264
|
+
"key": "labels",
|
|
26265
|
+
"style": {
|
|
26266
|
+
textAnchor: 'middle',
|
|
26267
|
+
dominantBaseline: 'mathematical',
|
|
26268
|
+
fill: 'currentColor'
|
|
26269
|
+
}
|
|
26270
|
+
}, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
|
|
26271
|
+
"x": item.x + lineWidth.value / 2 + lineWidth.value / 2,
|
|
26272
|
+
"y": parseInt(props.height, 10) - 4 + (parseInt(props.labelSize, 10) || 7 * 0.75),
|
|
26273
|
+
"font-size": Number(props.labelSize) || 7
|
|
26274
|
+
}, [slots.label?.({
|
|
26275
|
+
index: i,
|
|
26276
|
+
value: item.value
|
|
26277
|
+
}) ?? item.value]))]), vue.createVNode("path", {
|
|
26278
|
+
"ref": path,
|
|
26279
|
+
"d": genPath(genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value), props.smooth ? 8 : Number(props.smooth), props.fill, parseInt(props.height, 10)),
|
|
26280
|
+
"fill": props.fill ? `url(#${id.value})` : 'none',
|
|
26281
|
+
"stroke": props.fill ? 'none' : `url(#${id.value})`
|
|
26282
|
+
}, null)]);
|
|
26283
|
+
});
|
|
26284
|
+
}
|
|
26285
|
+
});
|
|
26286
|
+
|
|
26287
|
+
// Types
|
|
26288
|
+
|
|
26289
|
+
// Types
|
|
26290
|
+
|
|
26291
|
+
const makeVSparklineProps = propsFactory({
|
|
26292
|
+
type: {
|
|
26293
|
+
type: String,
|
|
26294
|
+
default: 'trend'
|
|
26295
|
+
},
|
|
26296
|
+
...makeVBarlineProps(),
|
|
26297
|
+
...makeVTrendlineProps()
|
|
26298
|
+
}, 'VSparkline');
|
|
26299
|
+
const VSparkline = genericComponent()({
|
|
26300
|
+
name: 'VSparkline',
|
|
26301
|
+
props: makeVSparklineProps(),
|
|
26302
|
+
setup(props, _ref) {
|
|
26303
|
+
let {
|
|
26304
|
+
slots
|
|
26305
|
+
} = _ref;
|
|
26306
|
+
const {
|
|
26307
|
+
textColorClasses,
|
|
26308
|
+
textColorStyles
|
|
26309
|
+
} = useTextColor(vue.toRef(props, 'color'));
|
|
26310
|
+
const hasLabels = vue.computed(() => {
|
|
26311
|
+
return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
|
|
26312
|
+
});
|
|
26313
|
+
const totalHeight = vue.computed(() => {
|
|
26314
|
+
let height = parseInt(props.height, 10);
|
|
26315
|
+
if (hasLabels.value) height += parseInt(props.labelSize, 10) * 1.5;
|
|
26316
|
+
return height;
|
|
26317
|
+
});
|
|
26318
|
+
useRender(() => {
|
|
26319
|
+
const Tag = props.type === 'trend' ? VTrendline : VBarline;
|
|
26320
|
+
const lineProps = props.type === 'trend' ? VTrendline.filterProps(props) : VBarline.filterProps(props);
|
|
26321
|
+
return vue.createVNode(Tag, vue.mergeProps({
|
|
26322
|
+
"key": props.type,
|
|
26323
|
+
"class": textColorClasses.value,
|
|
26324
|
+
"style": textColorStyles.value,
|
|
26325
|
+
"viewBox": `0 0 ${props.width} ${parseInt(totalHeight.value, 10)}`
|
|
26326
|
+
}, lineProps), slots);
|
|
26327
|
+
});
|
|
26328
|
+
}
|
|
26329
|
+
});
|
|
26330
|
+
|
|
25838
26331
|
var components = /*#__PURE__*/Object.freeze({
|
|
25839
26332
|
__proto__: null,
|
|
25840
26333
|
VAlert: VAlert,
|
|
@@ -25977,6 +26470,7 @@
|
|
|
25977
26470
|
VSlider: VSlider,
|
|
25978
26471
|
VSnackbar: VSnackbar,
|
|
25979
26472
|
VSpacer: VSpacer,
|
|
26473
|
+
VSparkline: VSparkline,
|
|
25980
26474
|
VStepper: VStepper,
|
|
25981
26475
|
VStepperActions: VStepperActions,
|
|
25982
26476
|
VStepperHeader: VStepperHeader,
|
|
@@ -26224,7 +26718,7 @@
|
|
|
26224
26718
|
goTo
|
|
26225
26719
|
};
|
|
26226
26720
|
}
|
|
26227
|
-
const version$1 = "3.5.
|
|
26721
|
+
const version$1 = "3.5.5";
|
|
26228
26722
|
createVuetify$1.version = version$1;
|
|
26229
26723
|
|
|
26230
26724
|
// Vue's inject() can only be used in setup
|
|
@@ -26238,7 +26732,7 @@
|
|
|
26238
26732
|
|
|
26239
26733
|
/* eslint-disable local-rules/sort-imports */
|
|
26240
26734
|
|
|
26241
|
-
const version = "3.5.
|
|
26735
|
+
const version = "3.5.5";
|
|
26242
26736
|
|
|
26243
26737
|
/* eslint-disable local-rules/sort-imports */
|
|
26244
26738
|
|