vuetify 3.5.4 → 3.5.6
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 +2811 -2523
- package/dist/json/importMap-labs.json +12 -8
- package/dist/json/importMap.json +120 -116
- package/dist/json/tags.json +251 -169
- package/dist/json/web-types.json +3509 -2563
- package/dist/vuetify-labs.css +1757 -1737
- package/dist/vuetify-labs.d.ts +1475 -152
- package/dist/vuetify-labs.esm.js +566 -72
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +566 -72
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +864 -844
- package/dist/vuetify.d.ts +1140 -191
- package/dist/vuetify.esm.js +132 -71
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +132 -71
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +645 -642
- 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 +5 -2
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/index.d.mts +33 -6
- 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/index.d.mts +9 -0
- package/lib/components/VCombobox/VCombobox.mjs +3 -1
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- 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 +569 -118
- package/lib/components/VDataTable/index.mjs +1 -0
- package/lib/components/VDataTable/index.mjs.map +1 -1
- package/lib/components/VDataTable/types.mjs.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.css +2 -21
- package/lib/components/VDatePicker/VDatePicker.mjs +14 -10
- 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 +18 -7
- package/lib/components/VExpansionPanel/VExpansionPanel.sass +18 -3
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +2 -0
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanels.mjs +11 -2
- package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
- package/lib/components/VExpansionPanel/index.d.mts +54 -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 +5 -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/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 +1098 -152
- package/lib/composables/filter.mjs +1 -1
- package/lib/composables/filter.mjs.map +1 -1
- 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 +41 -39
- package/lib/labs/VCalendar/VCalendar.mjs +1 -1
- package/lib/labs/VCalendar/VCalendar.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.6
|
|
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 */
|
|
@@ -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,11 @@
|
|
|
11820
11849
|
}
|
|
11821
11850
|
}
|
|
11822
11851
|
function select(item) {
|
|
11852
|
+
let add = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
11823
11853
|
if (props.multiple) {
|
|
11824
11854
|
const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
|
|
11825
|
-
|
|
11855
|
+
add = index === -1;
|
|
11856
|
+
if (add) {
|
|
11826
11857
|
model.value = [...model.value, item];
|
|
11827
11858
|
} else {
|
|
11828
11859
|
const value = [...model.value];
|
|
@@ -11830,7 +11861,7 @@
|
|
|
11830
11861
|
model.value = value;
|
|
11831
11862
|
}
|
|
11832
11863
|
} else {
|
|
11833
|
-
model.value = [item];
|
|
11864
|
+
model.value = add ? [item] : [];
|
|
11834
11865
|
menu.value = false;
|
|
11835
11866
|
}
|
|
11836
11867
|
}
|
|
@@ -11982,7 +12013,7 @@
|
|
|
11982
12013
|
function onChipClose(e) {
|
|
11983
12014
|
e.stopPropagation();
|
|
11984
12015
|
e.preventDefault();
|
|
11985
|
-
select(item);
|
|
12016
|
+
select(item, false);
|
|
11986
12017
|
}
|
|
11987
12018
|
const slotProps = {
|
|
11988
12019
|
'onClick:close': onChipClose,
|
|
@@ -12092,7 +12123,7 @@
|
|
|
12092
12123
|
if (typeof item === 'object') {
|
|
12093
12124
|
const filterKeys = keys || Object.keys(transformed);
|
|
12094
12125
|
for (const key of filterKeys) {
|
|
12095
|
-
const value = getPropertyFromItem(transformed, key
|
|
12126
|
+
const value = getPropertyFromItem(transformed, key);
|
|
12096
12127
|
const keyFilter = options?.customKeyFilter?.[key];
|
|
12097
12128
|
match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
|
|
12098
12129
|
if (match !== -1 && match !== false) {
|
|
@@ -12371,7 +12402,8 @@
|
|
|
12371
12402
|
if (item.props.disabled) return;
|
|
12372
12403
|
if (props.multiple) {
|
|
12373
12404
|
const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
|
|
12374
|
-
|
|
12405
|
+
add = index === -1;
|
|
12406
|
+
if (add) {
|
|
12375
12407
|
model.value = [...model.value, item];
|
|
12376
12408
|
} else {
|
|
12377
12409
|
const value = [...model.value];
|
|
@@ -12513,7 +12545,9 @@
|
|
|
12513
12545
|
item,
|
|
12514
12546
|
index,
|
|
12515
12547
|
props: itemProps
|
|
12516
|
-
}) ?? vue.createVNode(VListItem, itemProps, {
|
|
12548
|
+
}) ?? vue.createVNode(VListItem, vue.mergeProps(itemProps, {
|
|
12549
|
+
"role": "option"
|
|
12550
|
+
}), {
|
|
12517
12551
|
prepend: _ref4 => {
|
|
12518
12552
|
let {
|
|
12519
12553
|
isSelected
|
|
@@ -16303,7 +16337,9 @@
|
|
|
16303
16337
|
item,
|
|
16304
16338
|
index,
|
|
16305
16339
|
props: itemProps
|
|
16306
|
-
}) ?? vue.createVNode(VListItem, itemProps, {
|
|
16340
|
+
}) ?? vue.createVNode(VListItem, vue.mergeProps(itemProps, {
|
|
16341
|
+
"role": "option"
|
|
16342
|
+
}), {
|
|
16307
16343
|
prepend: _ref4 => {
|
|
16308
16344
|
let {
|
|
16309
16345
|
isSelected
|
|
@@ -17621,7 +17657,8 @@
|
|
|
17621
17657
|
};
|
|
17622
17658
|
}
|
|
17623
17659
|
async function scrollTo(_target, _options, horizontal, goTo) {
|
|
17624
|
-
const
|
|
17660
|
+
const property = horizontal ? 'scrollLeft' : 'scrollTop';
|
|
17661
|
+
const options = mergeDeep(goTo?.options ?? genDefaults(), _options);
|
|
17625
17662
|
const rtl = goTo?.rtl.value;
|
|
17626
17663
|
const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
|
|
17627
17664
|
const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
|
|
@@ -17639,25 +17676,22 @@
|
|
|
17639
17676
|
}
|
|
17640
17677
|
}
|
|
17641
17678
|
targetLocation += options.offset;
|
|
17642
|
-
const startLocation =
|
|
17679
|
+
const startLocation = container[property] ?? 0;
|
|
17643
17680
|
if (targetLocation === startLocation) return Promise.resolve(targetLocation);
|
|
17644
17681
|
const startTime = performance.now();
|
|
17645
17682
|
return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
|
|
17646
17683
|
const timeElapsed = currentTime - startTime;
|
|
17647
|
-
const progress =
|
|
17648
|
-
const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress));
|
|
17649
|
-
container[
|
|
17650
|
-
|
|
17651
|
-
|
|
17652
|
-
|
|
17653
|
-
|
|
17654
|
-
|
|
17655
|
-
|
|
17656
|
-
|
|
17657
|
-
|
|
17658
|
-
clientSize = container === document.body ? document.documentElement.clientWidth : container.clientWidth;
|
|
17659
|
-
reachEnd = clientSize + container.scrollLeft >= container.scrollWidth;
|
|
17660
|
-
if (targetLocation > container.scrollLeft && reachEnd) return resolve(targetLocation);
|
|
17684
|
+
const progress = timeElapsed / options.duration;
|
|
17685
|
+
const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(clamp(progress, 0, 1)));
|
|
17686
|
+
container[property] = location;
|
|
17687
|
+
|
|
17688
|
+
// Allow for some jitter if target time has elapsed
|
|
17689
|
+
if (progress >= 1 && Math.abs(location - container[property]) < 10) {
|
|
17690
|
+
return resolve(targetLocation);
|
|
17691
|
+
} else if (progress > 2) {
|
|
17692
|
+
// The target might not be reachable
|
|
17693
|
+
consoleWarn('Scroll target is not reachable');
|
|
17694
|
+
return resolve(container[property]);
|
|
17661
17695
|
}
|
|
17662
17696
|
requestAnimationFrame(step);
|
|
17663
17697
|
}));
|
|
@@ -20594,12 +20628,13 @@
|
|
|
20594
20628
|
}, [(props.showAdjacentMonths || !item.isAdjacent) && vue.createVNode(VDefaultsProvider, {
|
|
20595
20629
|
"defaults": {
|
|
20596
20630
|
VBtn: {
|
|
20631
|
+
class: 'v-date-picker-month__day-btn',
|
|
20597
20632
|
color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
|
|
20598
20633
|
disabled: item.isDisabled,
|
|
20599
20634
|
icon: true,
|
|
20600
20635
|
ripple: false,
|
|
20601
20636
|
text: item.localized,
|
|
20602
|
-
variant: item.isDisabled ? 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
|
|
20637
|
+
variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
|
|
20603
20638
|
onClick: () => onClick(item.date)
|
|
20604
20639
|
}
|
|
20605
20640
|
}
|
|
@@ -20625,6 +20660,7 @@
|
|
|
20625
20660
|
},
|
|
20626
20661
|
setup(props, _ref) {
|
|
20627
20662
|
let {
|
|
20663
|
+
emit,
|
|
20628
20664
|
slots
|
|
20629
20665
|
} = _ref;
|
|
20630
20666
|
const adapter = useDate();
|
|
@@ -20660,6 +20696,10 @@
|
|
|
20660
20696
|
onClick: () => onClick(i)
|
|
20661
20697
|
};
|
|
20662
20698
|
function onClick(i) {
|
|
20699
|
+
if (model.value === i) {
|
|
20700
|
+
emit('update:modelValue', model.value);
|
|
20701
|
+
return;
|
|
20702
|
+
}
|
|
20663
20703
|
model.value = i;
|
|
20664
20704
|
}
|
|
20665
20705
|
return slots.month?.({
|
|
@@ -20668,9 +20708,7 @@
|
|
|
20668
20708
|
props: btnProps
|
|
20669
20709
|
}) ?? vue.createVNode(VBtn, vue.mergeProps({
|
|
20670
20710
|
"key": "month"
|
|
20671
|
-
}, btnProps,
|
|
20672
|
-
"onClick": () => onClick(i)
|
|
20673
|
-
}), null);
|
|
20711
|
+
}, btnProps), null);
|
|
20674
20712
|
})])]));
|
|
20675
20713
|
return {};
|
|
20676
20714
|
}
|
|
@@ -20695,6 +20733,7 @@
|
|
|
20695
20733
|
},
|
|
20696
20734
|
setup(props, _ref) {
|
|
20697
20735
|
let {
|
|
20736
|
+
emit,
|
|
20698
20737
|
slots
|
|
20699
20738
|
} = _ref;
|
|
20700
20739
|
const adapter = useDate();
|
|
@@ -20745,7 +20784,13 @@
|
|
|
20745
20784
|
rounded: true,
|
|
20746
20785
|
text: year.text,
|
|
20747
20786
|
variant: model.value === year.value ? 'flat' : 'text',
|
|
20748
|
-
onClick: () =>
|
|
20787
|
+
onClick: () => {
|
|
20788
|
+
if (model.value === year.value) {
|
|
20789
|
+
emit('update:modelValue', model.value);
|
|
20790
|
+
return;
|
|
20791
|
+
}
|
|
20792
|
+
model.value = year.value;
|
|
20793
|
+
}
|
|
20749
20794
|
};
|
|
20750
20795
|
return slots.year?.({
|
|
20751
20796
|
year,
|
|
@@ -20938,7 +20983,9 @@
|
|
|
20938
20983
|
} else {
|
|
20939
20984
|
year.value++;
|
|
20940
20985
|
month.value = 0;
|
|
20986
|
+
onUpdateYear(year.value);
|
|
20941
20987
|
}
|
|
20988
|
+
onUpdateMonth(month.value);
|
|
20942
20989
|
}
|
|
20943
20990
|
function onClickPrev() {
|
|
20944
20991
|
if (month.value > 0) {
|
|
@@ -20946,7 +20993,9 @@
|
|
|
20946
20993
|
} else {
|
|
20947
20994
|
year.value--;
|
|
20948
20995
|
month.value = 11;
|
|
20996
|
+
onUpdateYear(year.value);
|
|
20949
20997
|
}
|
|
20998
|
+
onUpdateMonth(month.value);
|
|
20950
20999
|
}
|
|
20951
21000
|
function onClickDate() {
|
|
20952
21001
|
viewMode.value = 'month';
|
|
@@ -20957,14 +21006,14 @@
|
|
|
20957
21006
|
function onClickYear() {
|
|
20958
21007
|
viewMode.value = viewMode.value === 'year' ? 'month' : 'year';
|
|
20959
21008
|
}
|
|
20960
|
-
|
|
21009
|
+
function onUpdateMonth(value) {
|
|
20961
21010
|
if (viewMode.value === 'months') onClickMonth();
|
|
20962
|
-
emit('update:month',
|
|
20963
|
-
}
|
|
20964
|
-
|
|
21011
|
+
emit('update:month', value);
|
|
21012
|
+
}
|
|
21013
|
+
function onUpdateYear(value) {
|
|
20965
21014
|
if (viewMode.value === 'year') onClickYear();
|
|
20966
|
-
emit('update:year',
|
|
20967
|
-
}
|
|
21015
|
+
emit('update:year', value);
|
|
21016
|
+
}
|
|
20968
21017
|
vue.watch(model, (val, oldVal) => {
|
|
20969
21018
|
const before = adapter.date(wrapInArray(val)[0]);
|
|
20970
21019
|
const after = adapter.date(wrapInArray(oldVal)[0]);
|
|
@@ -21020,14 +21069,14 @@
|
|
|
21020
21069
|
"key": "date-picker-months"
|
|
21021
21070
|
}, datePickerMonthsProps, {
|
|
21022
21071
|
"modelValue": month.value,
|
|
21023
|
-
"onUpdate:modelValue": $event => month.value = $event,
|
|
21072
|
+
"onUpdate:modelValue": [$event => month.value = $event, onUpdateMonth],
|
|
21024
21073
|
"min": minDate.value,
|
|
21025
21074
|
"max": maxDate.value
|
|
21026
21075
|
}), null) : viewMode.value === 'year' ? vue.createVNode(VDatePickerYears, vue.mergeProps({
|
|
21027
21076
|
"key": "date-picker-years"
|
|
21028
21077
|
}, datePickerYearsProps, {
|
|
21029
21078
|
"modelValue": year.value,
|
|
21030
|
-
"onUpdate:modelValue": $event => year.value = $event,
|
|
21079
|
+
"onUpdate:modelValue": [$event => year.value = $event, onUpdateYear],
|
|
21031
21080
|
"min": minDate.value,
|
|
21032
21081
|
"max": maxDate.value
|
|
21033
21082
|
}), null) : vue.createVNode(VDatePickerMonth, vue.mergeProps({
|
|
@@ -21036,9 +21085,9 @@
|
|
|
21036
21085
|
"modelValue": model.value,
|
|
21037
21086
|
"onUpdate:modelValue": $event => model.value = $event,
|
|
21038
21087
|
"month": month.value,
|
|
21039
|
-
"onUpdate:month": $event => month.value = $event,
|
|
21088
|
+
"onUpdate:month": [$event => month.value = $event, onUpdateMonth],
|
|
21040
21089
|
"year": year.value,
|
|
21041
|
-
"onUpdate:year": $event => year.value = $event,
|
|
21090
|
+
"onUpdate:year": [$event => year.value = $event, onUpdateYear],
|
|
21042
21091
|
"min": minDate.value,
|
|
21043
21092
|
"max": maxDate.value
|
|
21044
21093
|
}), null)]
|
|
@@ -21056,7 +21105,10 @@
|
|
|
21056
21105
|
const allowedVariants = ['default', 'accordion', 'inset', 'popout'];
|
|
21057
21106
|
const makeVExpansionPanelsProps = propsFactory({
|
|
21058
21107
|
color: String,
|
|
21108
|
+
flat: Boolean,
|
|
21109
|
+
focusable: Boolean,
|
|
21059
21110
|
static: Boolean,
|
|
21111
|
+
tile: Boolean,
|
|
21060
21112
|
variant: {
|
|
21061
21113
|
type: String,
|
|
21062
21114
|
default: 'default',
|
|
@@ -21086,12 +21138,18 @@
|
|
|
21086
21138
|
provideDefaults({
|
|
21087
21139
|
VExpansionPanel: {
|
|
21088
21140
|
color: vue.toRef(props, 'color'),
|
|
21089
|
-
readonly: vue.toRef(props, 'readonly')
|
|
21141
|
+
readonly: vue.toRef(props, 'readonly')
|
|
21142
|
+
},
|
|
21143
|
+
VExpansionPanelTitle: {
|
|
21144
|
+
focusable: vue.toRef(props, 'focusable'),
|
|
21090
21145
|
static: vue.toRef(props, 'static')
|
|
21091
21146
|
}
|
|
21092
21147
|
});
|
|
21093
21148
|
useRender(() => vue.createVNode(props.tag, {
|
|
21094
|
-
"class": ['v-expansion-panels',
|
|
21149
|
+
"class": ['v-expansion-panels', {
|
|
21150
|
+
'v-expansion-panels--flat': props.flat,
|
|
21151
|
+
'v-expansion-panels--tile': props.tile
|
|
21152
|
+
}, themeClasses.value, variantClass.value, props.class],
|
|
21095
21153
|
"style": props.style
|
|
21096
21154
|
}, slots));
|
|
21097
21155
|
return {};
|
|
@@ -21142,6 +21200,7 @@
|
|
|
21142
21200
|
default: '$collapse'
|
|
21143
21201
|
},
|
|
21144
21202
|
hideActions: Boolean,
|
|
21203
|
+
focusable: Boolean,
|
|
21145
21204
|
static: Boolean,
|
|
21146
21205
|
ripple: {
|
|
21147
21206
|
type: [Boolean, Object],
|
|
@@ -21176,6 +21235,7 @@
|
|
|
21176
21235
|
useRender(() => vue.withDirectives(vue.createVNode("button", {
|
|
21177
21236
|
"class": ['v-expansion-panel-title', {
|
|
21178
21237
|
'v-expansion-panel-title--active': expansionPanel.isSelected.value,
|
|
21238
|
+
'v-expansion-panel-title--focusable': props.focusable,
|
|
21179
21239
|
'v-expansion-panel-title--static': props.static
|
|
21180
21240
|
}, backgroundColorClasses.value, props.class],
|
|
21181
21241
|
"style": [backgroundColorStyles.value, props.style],
|
|
@@ -21375,7 +21435,7 @@
|
|
|
21375
21435
|
if (!isFocused.value) focus();
|
|
21376
21436
|
}
|
|
21377
21437
|
function onClickPrepend(e) {
|
|
21378
|
-
|
|
21438
|
+
inputRef.value?.click();
|
|
21379
21439
|
}
|
|
21380
21440
|
function onControlMousedown(e) {
|
|
21381
21441
|
emit('mousedown:control', e);
|
|
@@ -25817,7 +25877,7 @@
|
|
|
25817
25877
|
}, [!props.hideWeekNumber ? vue.createVNode("div", {
|
|
25818
25878
|
"key": "weekNumber0",
|
|
25819
25879
|
"class": "v-calendar-weekly__head-weeknumber"
|
|
25820
|
-
}, null) : '', props.weekdays.
|
|
25880
|
+
}, null) : '', props.weekdays.map(weekday => vue.createVNode("div", {
|
|
25821
25881
|
"class": `v-calendar-weekly__head-weekday${!props.hideWeekNumber ? '-with-weeknumber' : ''}`
|
|
25822
25882
|
}, [dayNames[weekday]]))]), props.viewMode === 'month' && vue.createVNode("div", {
|
|
25823
25883
|
"key": "VCalendarMonth",
|
|
@@ -25846,6 +25906,438 @@
|
|
|
25846
25906
|
}
|
|
25847
25907
|
});
|
|
25848
25908
|
|
|
25909
|
+
// Utilities
|
|
25910
|
+
|
|
25911
|
+
// Types
|
|
25912
|
+
|
|
25913
|
+
const makeLineProps = propsFactory({
|
|
25914
|
+
autoDraw: Boolean,
|
|
25915
|
+
autoDrawDuration: [Number, String],
|
|
25916
|
+
autoDrawEasing: {
|
|
25917
|
+
type: String,
|
|
25918
|
+
default: 'ease'
|
|
25919
|
+
},
|
|
25920
|
+
color: String,
|
|
25921
|
+
gradient: {
|
|
25922
|
+
type: Array,
|
|
25923
|
+
default: () => []
|
|
25924
|
+
},
|
|
25925
|
+
gradientDirection: {
|
|
25926
|
+
type: String,
|
|
25927
|
+
validator: val => ['top', 'bottom', 'left', 'right'].includes(val),
|
|
25928
|
+
default: 'top'
|
|
25929
|
+
},
|
|
25930
|
+
height: {
|
|
25931
|
+
type: [String, Number],
|
|
25932
|
+
default: 75
|
|
25933
|
+
},
|
|
25934
|
+
labels: {
|
|
25935
|
+
type: Array,
|
|
25936
|
+
default: () => []
|
|
25937
|
+
},
|
|
25938
|
+
labelSize: {
|
|
25939
|
+
type: [Number, String],
|
|
25940
|
+
default: 7
|
|
25941
|
+
},
|
|
25942
|
+
lineWidth: {
|
|
25943
|
+
type: [String, Number],
|
|
25944
|
+
default: 4
|
|
25945
|
+
},
|
|
25946
|
+
id: String,
|
|
25947
|
+
modelValue: {
|
|
25948
|
+
type: Array,
|
|
25949
|
+
default: () => []
|
|
25950
|
+
},
|
|
25951
|
+
padding: {
|
|
25952
|
+
type: [String, Number],
|
|
25953
|
+
default: 8
|
|
25954
|
+
},
|
|
25955
|
+
showLabels: Boolean,
|
|
25956
|
+
smooth: Boolean,
|
|
25957
|
+
width: {
|
|
25958
|
+
type: [Number, String],
|
|
25959
|
+
default: 300
|
|
25960
|
+
}
|
|
25961
|
+
}, 'Line');
|
|
25962
|
+
|
|
25963
|
+
// Types
|
|
25964
|
+
|
|
25965
|
+
const makeVBarlineProps = propsFactory({
|
|
25966
|
+
autoLineWidth: Boolean,
|
|
25967
|
+
...makeLineProps()
|
|
25968
|
+
}, 'VBarline');
|
|
25969
|
+
const VBarline = genericComponent()({
|
|
25970
|
+
name: 'VBarline',
|
|
25971
|
+
props: makeVBarlineProps(),
|
|
25972
|
+
setup(props, _ref) {
|
|
25973
|
+
let {
|
|
25974
|
+
slots
|
|
25975
|
+
} = _ref;
|
|
25976
|
+
const uid = getUid();
|
|
25977
|
+
const id = vue.computed(() => props.id || `barline-${uid}`);
|
|
25978
|
+
const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || 500);
|
|
25979
|
+
const hasLabels = vue.computed(() => {
|
|
25980
|
+
return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
|
|
25981
|
+
});
|
|
25982
|
+
const lineWidth = vue.computed(() => parseFloat(props.lineWidth) || 4);
|
|
25983
|
+
const totalWidth = vue.computed(() => Math.max(props.modelValue.length * lineWidth.value, Number(props.width)));
|
|
25984
|
+
const boundary = vue.computed(() => {
|
|
25985
|
+
return {
|
|
25986
|
+
minX: 0,
|
|
25987
|
+
maxX: totalWidth.value,
|
|
25988
|
+
minY: 0,
|
|
25989
|
+
maxY: parseInt(props.height, 10)
|
|
25990
|
+
};
|
|
25991
|
+
});
|
|
25992
|
+
function genBars(values, boundary) {
|
|
25993
|
+
const {
|
|
25994
|
+
minX,
|
|
25995
|
+
maxX,
|
|
25996
|
+
minY,
|
|
25997
|
+
maxY
|
|
25998
|
+
} = boundary;
|
|
25999
|
+
const totalValues = values.length;
|
|
26000
|
+
let maxValue = Math.max(...values);
|
|
26001
|
+
let minValue = Math.min(...values);
|
|
26002
|
+
if (minValue > 0) minValue = 0;
|
|
26003
|
+
if (maxValue < 0) maxValue = 0;
|
|
26004
|
+
const gridX = maxX / totalValues;
|
|
26005
|
+
const gridY = (maxY - minY) / (maxValue - minValue || 1);
|
|
26006
|
+
const horizonY = maxY - Math.abs(minValue * gridY);
|
|
26007
|
+
return values.map((value, index) => {
|
|
26008
|
+
const height = Math.abs(gridY * value);
|
|
26009
|
+
return {
|
|
26010
|
+
x: minX + index * gridX,
|
|
26011
|
+
y: horizonY - height + +(value < 0) * height,
|
|
26012
|
+
height,
|
|
26013
|
+
value
|
|
26014
|
+
};
|
|
26015
|
+
});
|
|
26016
|
+
}
|
|
26017
|
+
const parsedLabels = vue.computed(() => {
|
|
26018
|
+
const labels = [];
|
|
26019
|
+
const points = genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
|
|
26020
|
+
const len = points.length;
|
|
26021
|
+
for (let i = 0; labels.length < len; i++) {
|
|
26022
|
+
const item = points[i];
|
|
26023
|
+
let value = props.labels[i];
|
|
26024
|
+
if (!value) {
|
|
26025
|
+
value = typeof item === 'object' ? item.value : item;
|
|
26026
|
+
}
|
|
26027
|
+
labels.push({
|
|
26028
|
+
x: item.x,
|
|
26029
|
+
value: String(value)
|
|
26030
|
+
});
|
|
26031
|
+
}
|
|
26032
|
+
return labels;
|
|
26033
|
+
});
|
|
26034
|
+
const bars = vue.computed(() => genBars(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value));
|
|
26035
|
+
const offsetX = vue.computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
|
|
26036
|
+
useRender(() => {
|
|
26037
|
+
const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
|
|
26038
|
+
return vue.createVNode("svg", {
|
|
26039
|
+
"display": "block"
|
|
26040
|
+
}, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
|
|
26041
|
+
"id": id.value,
|
|
26042
|
+
"gradientUnits": "userSpaceOnUse",
|
|
26043
|
+
"x1": props.gradientDirection === 'left' ? '100%' : '0',
|
|
26044
|
+
"y1": props.gradientDirection === 'top' ? '100%' : '0',
|
|
26045
|
+
"x2": props.gradientDirection === 'right' ? '100%' : '0',
|
|
26046
|
+
"y2": props.gradientDirection === 'bottom' ? '100%' : '0'
|
|
26047
|
+
}, [gradientData.map((color, index) => vue.createVNode("stop", {
|
|
26048
|
+
"offset": index / Math.max(gradientData.length - 1, 1),
|
|
26049
|
+
"stop-color": color || 'currentColor'
|
|
26050
|
+
}, null))])]), vue.createVNode("clipPath", {
|
|
26051
|
+
"id": `${id.value}-clip`
|
|
26052
|
+
}, [bars.value.map(item => vue.createVNode("rect", {
|
|
26053
|
+
"x": item.x + offsetX.value,
|
|
26054
|
+
"y": item.y,
|
|
26055
|
+
"width": lineWidth.value,
|
|
26056
|
+
"height": item.height,
|
|
26057
|
+
"rx": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0,
|
|
26058
|
+
"ry": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0
|
|
26059
|
+
}, [props.autoDraw && vue.createVNode(vue.Fragment, null, [vue.createVNode("animate", {
|
|
26060
|
+
"attributeName": "y",
|
|
26061
|
+
"from": item.y + item.height,
|
|
26062
|
+
"to": item.y,
|
|
26063
|
+
"dur": `${autoDrawDuration.value}ms`,
|
|
26064
|
+
"fill": "freeze"
|
|
26065
|
+
}, null), vue.createVNode("animate", {
|
|
26066
|
+
"attributeName": "height",
|
|
26067
|
+
"from": "0",
|
|
26068
|
+
"to": item.height,
|
|
26069
|
+
"dur": `${autoDrawDuration.value}ms`,
|
|
26070
|
+
"fill": "freeze"
|
|
26071
|
+
}, null)])]))]), hasLabels.value && vue.createVNode("g", {
|
|
26072
|
+
"key": "labels",
|
|
26073
|
+
"style": {
|
|
26074
|
+
textAnchor: 'middle',
|
|
26075
|
+
dominantBaseline: 'mathematical',
|
|
26076
|
+
fill: 'currentColor'
|
|
26077
|
+
}
|
|
26078
|
+
}, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
|
|
26079
|
+
"x": item.x + offsetX.value + lineWidth.value / 2,
|
|
26080
|
+
"y": parseInt(props.height, 10) - 2 + (parseInt(props.labelSize, 10) || 7 * 0.75),
|
|
26081
|
+
"font-size": Number(props.labelSize) || 7
|
|
26082
|
+
}, [slots.label?.({
|
|
26083
|
+
index: i,
|
|
26084
|
+
value: item.value
|
|
26085
|
+
}) ?? item.value]))]), vue.createVNode("g", {
|
|
26086
|
+
"clip-path": `url(#${id.value}-clip)`,
|
|
26087
|
+
"fill": `url(#${id.value})`
|
|
26088
|
+
}, [vue.createVNode("rect", {
|
|
26089
|
+
"x": 0,
|
|
26090
|
+
"y": 0,
|
|
26091
|
+
"width": Math.max(props.modelValue.length * lineWidth.value, Number(props.width)),
|
|
26092
|
+
"height": props.height
|
|
26093
|
+
}, null)])]);
|
|
26094
|
+
});
|
|
26095
|
+
}
|
|
26096
|
+
});
|
|
26097
|
+
|
|
26098
|
+
// @ts-nocheck
|
|
26099
|
+
/* eslint-disable */
|
|
26100
|
+
|
|
26101
|
+
// import { checkCollinear, getDistance, moveTo } from './math'
|
|
26102
|
+
|
|
26103
|
+
/**
|
|
26104
|
+
* From https://github.com/unsplash/react-trend/blob/master/src/helpers/DOM.helpers.js#L18
|
|
26105
|
+
*/
|
|
26106
|
+
function genPath(points, radius) {
|
|
26107
|
+
let fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
26108
|
+
let height = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 75;
|
|
26109
|
+
if (points.length === 0) return '';
|
|
26110
|
+
const start = points.shift();
|
|
26111
|
+
const end = points[points.length - 1];
|
|
26112
|
+
return (fill ? `M${start.x} ${height - start.x + 2} L${start.x} ${start.y}` : `M${start.x} ${start.y}`) + points.map((point, index) => {
|
|
26113
|
+
const next = points[index + 1];
|
|
26114
|
+
const prev = points[index - 1] || start;
|
|
26115
|
+
const isCollinear = next && checkCollinear(next, point, prev);
|
|
26116
|
+
if (!next || isCollinear) {
|
|
26117
|
+
return `L${point.x} ${point.y}`;
|
|
26118
|
+
}
|
|
26119
|
+
const threshold = Math.min(getDistance(prev, point), getDistance(next, point));
|
|
26120
|
+
const isTooCloseForRadius = threshold / 2 < radius;
|
|
26121
|
+
const radiusForPoint = isTooCloseForRadius ? threshold / 2 : radius;
|
|
26122
|
+
const before = moveTo(prev, point, radiusForPoint);
|
|
26123
|
+
const after = moveTo(next, point, radiusForPoint);
|
|
26124
|
+
return `L${before.x} ${before.y}S${point.x} ${point.y} ${after.x} ${after.y}`;
|
|
26125
|
+
}).join('') + (fill ? `L${end.x} ${height - start.x + 2} Z` : '');
|
|
26126
|
+
}
|
|
26127
|
+
function int(value) {
|
|
26128
|
+
return parseInt(value, 10);
|
|
26129
|
+
}
|
|
26130
|
+
|
|
26131
|
+
/**
|
|
26132
|
+
* https://en.wikipedia.org/wiki/Collinearity
|
|
26133
|
+
* x=(x1+x2)/2
|
|
26134
|
+
* y=(y1+y2)/2
|
|
26135
|
+
*/
|
|
26136
|
+
function checkCollinear(p0, p1, p2) {
|
|
26137
|
+
return int(p0.x + p2.x) === int(2 * p1.x) && int(p0.y + p2.y) === int(2 * p1.y);
|
|
26138
|
+
}
|
|
26139
|
+
function getDistance(p1, p2) {
|
|
26140
|
+
return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
|
|
26141
|
+
}
|
|
26142
|
+
function moveTo(to, from, radius) {
|
|
26143
|
+
const vector = {
|
|
26144
|
+
x: to.x - from.x,
|
|
26145
|
+
y: to.y - from.y
|
|
26146
|
+
};
|
|
26147
|
+
const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
|
|
26148
|
+
const unitVector = {
|
|
26149
|
+
x: vector.x / length,
|
|
26150
|
+
y: vector.y / length
|
|
26151
|
+
};
|
|
26152
|
+
return {
|
|
26153
|
+
x: from.x + unitVector.x * radius,
|
|
26154
|
+
y: from.y + unitVector.y * radius
|
|
26155
|
+
};
|
|
26156
|
+
}
|
|
26157
|
+
|
|
26158
|
+
// Types
|
|
26159
|
+
|
|
26160
|
+
const makeVTrendlineProps = propsFactory({
|
|
26161
|
+
fill: Boolean,
|
|
26162
|
+
...makeLineProps()
|
|
26163
|
+
}, 'VTrendline');
|
|
26164
|
+
const VTrendline = genericComponent()({
|
|
26165
|
+
name: 'VTrendline',
|
|
26166
|
+
props: makeVTrendlineProps(),
|
|
26167
|
+
setup(props, _ref) {
|
|
26168
|
+
let {
|
|
26169
|
+
slots
|
|
26170
|
+
} = _ref;
|
|
26171
|
+
const uid = getUid();
|
|
26172
|
+
const id = vue.computed(() => props.id || `trendline-${uid}`);
|
|
26173
|
+
const autoDrawDuration = vue.computed(() => Number(props.autoDrawDuration) || (props.fill ? 500 : 2000));
|
|
26174
|
+
const lastLength = vue.ref(0);
|
|
26175
|
+
const path = vue.ref(null);
|
|
26176
|
+
function genPoints(values, boundary) {
|
|
26177
|
+
const {
|
|
26178
|
+
minX,
|
|
26179
|
+
maxX,
|
|
26180
|
+
minY,
|
|
26181
|
+
maxY
|
|
26182
|
+
} = boundary;
|
|
26183
|
+
const totalValues = values.length;
|
|
26184
|
+
const maxValue = Math.max(...values);
|
|
26185
|
+
const minValue = Math.min(...values);
|
|
26186
|
+
const gridX = (maxX - minX) / (totalValues - 1);
|
|
26187
|
+
const gridY = (maxY - minY) / (maxValue - minValue || 1);
|
|
26188
|
+
return values.map((value, index) => {
|
|
26189
|
+
return {
|
|
26190
|
+
x: minX + index * gridX,
|
|
26191
|
+
y: maxY - (value - minValue) * gridY,
|
|
26192
|
+
value
|
|
26193
|
+
};
|
|
26194
|
+
});
|
|
26195
|
+
}
|
|
26196
|
+
const hasLabels = vue.computed(() => {
|
|
26197
|
+
return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
|
|
26198
|
+
});
|
|
26199
|
+
const lineWidth = vue.computed(() => {
|
|
26200
|
+
return parseFloat(props.lineWidth) || 4;
|
|
26201
|
+
});
|
|
26202
|
+
const totalWidth = vue.computed(() => Number(props.width));
|
|
26203
|
+
const boundary = vue.computed(() => {
|
|
26204
|
+
const padding = Number(props.padding);
|
|
26205
|
+
return {
|
|
26206
|
+
minX: padding,
|
|
26207
|
+
maxX: totalWidth.value - padding,
|
|
26208
|
+
minY: padding,
|
|
26209
|
+
maxY: parseInt(props.height, 10) - padding
|
|
26210
|
+
};
|
|
26211
|
+
});
|
|
26212
|
+
const parsedLabels = vue.computed(() => {
|
|
26213
|
+
const labels = [];
|
|
26214
|
+
const points = genPoints(props.modelValue.map(item => typeof item === 'number' ? item : item.value), boundary.value);
|
|
26215
|
+
const len = points.length;
|
|
26216
|
+
for (let i = 0; labels.length < len; i++) {
|
|
26217
|
+
const item = points[i];
|
|
26218
|
+
let value = props.labels[i];
|
|
26219
|
+
if (!value) {
|
|
26220
|
+
value = typeof item === 'object' ? item.value : item;
|
|
26221
|
+
}
|
|
26222
|
+
labels.push({
|
|
26223
|
+
x: item.x,
|
|
26224
|
+
value: String(value)
|
|
26225
|
+
});
|
|
26226
|
+
}
|
|
26227
|
+
return labels;
|
|
26228
|
+
});
|
|
26229
|
+
vue.watch(() => props.modelValue, async () => {
|
|
26230
|
+
await vue.nextTick();
|
|
26231
|
+
if (!props.autoDraw || !path.value) return;
|
|
26232
|
+
const pathRef = path.value;
|
|
26233
|
+
const length = pathRef.getTotalLength();
|
|
26234
|
+
if (!props.fill) {
|
|
26235
|
+
// Initial setup to "hide" the line by using the stroke dash array
|
|
26236
|
+
pathRef.style.strokeDasharray = `${length}`;
|
|
26237
|
+
pathRef.style.strokeDashoffset = `${length}`;
|
|
26238
|
+
|
|
26239
|
+
// Force reflow to ensure the transition starts from this state
|
|
26240
|
+
pathRef.getBoundingClientRect();
|
|
26241
|
+
|
|
26242
|
+
// Animate the stroke dash offset to "draw" the line
|
|
26243
|
+
pathRef.style.transition = `stroke-dashoffset ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
|
|
26244
|
+
pathRef.style.strokeDashoffset = '0';
|
|
26245
|
+
} else {
|
|
26246
|
+
// Your existing logic for filled paths remains the same
|
|
26247
|
+
pathRef.style.transformOrigin = 'bottom center';
|
|
26248
|
+
pathRef.style.transition = 'none';
|
|
26249
|
+
pathRef.style.transform = `scaleY(0)`;
|
|
26250
|
+
pathRef.getBoundingClientRect();
|
|
26251
|
+
pathRef.style.transition = `transform ${autoDrawDuration.value}ms ${props.autoDrawEasing}`;
|
|
26252
|
+
pathRef.style.transform = `scaleY(1)`;
|
|
26253
|
+
}
|
|
26254
|
+
lastLength.value = length;
|
|
26255
|
+
}, {
|
|
26256
|
+
immediate: true
|
|
26257
|
+
});
|
|
26258
|
+
useRender(() => {
|
|
26259
|
+
const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
|
|
26260
|
+
return vue.createVNode("svg", {
|
|
26261
|
+
"display": "block",
|
|
26262
|
+
"stroke-width": parseFloat(props.lineWidth) ?? 4
|
|
26263
|
+
}, [vue.createVNode("defs", null, [vue.createVNode("linearGradient", {
|
|
26264
|
+
"id": id.value,
|
|
26265
|
+
"gradientUnits": "userSpaceOnUse",
|
|
26266
|
+
"x1": props.gradientDirection === 'left' ? '100%' : '0',
|
|
26267
|
+
"y1": props.gradientDirection === 'top' ? '100%' : '0',
|
|
26268
|
+
"x2": props.gradientDirection === 'right' ? '100%' : '0',
|
|
26269
|
+
"y2": props.gradientDirection === 'bottom' ? '100%' : '0'
|
|
26270
|
+
}, [gradientData.map((color, index) => vue.createVNode("stop", {
|
|
26271
|
+
"offset": index / Math.max(gradientData.length - 1, 1),
|
|
26272
|
+
"stop-color": color || 'currentColor'
|
|
26273
|
+
}, null))])]), hasLabels.value && vue.createVNode("g", {
|
|
26274
|
+
"key": "labels",
|
|
26275
|
+
"style": {
|
|
26276
|
+
textAnchor: 'middle',
|
|
26277
|
+
dominantBaseline: 'mathematical',
|
|
26278
|
+
fill: 'currentColor'
|
|
26279
|
+
}
|
|
26280
|
+
}, [parsedLabels.value.map((item, i) => vue.createVNode("text", {
|
|
26281
|
+
"x": item.x + lineWidth.value / 2 + lineWidth.value / 2,
|
|
26282
|
+
"y": parseInt(props.height, 10) - 4 + (parseInt(props.labelSize, 10) || 7 * 0.75),
|
|
26283
|
+
"font-size": Number(props.labelSize) || 7
|
|
26284
|
+
}, [slots.label?.({
|
|
26285
|
+
index: i,
|
|
26286
|
+
value: item.value
|
|
26287
|
+
}) ?? item.value]))]), vue.createVNode("path", {
|
|
26288
|
+
"ref": path,
|
|
26289
|
+
"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)),
|
|
26290
|
+
"fill": props.fill ? `url(#${id.value})` : 'none',
|
|
26291
|
+
"stroke": props.fill ? 'none' : `url(#${id.value})`
|
|
26292
|
+
}, null)]);
|
|
26293
|
+
});
|
|
26294
|
+
}
|
|
26295
|
+
});
|
|
26296
|
+
|
|
26297
|
+
// Types
|
|
26298
|
+
|
|
26299
|
+
// Types
|
|
26300
|
+
|
|
26301
|
+
const makeVSparklineProps = propsFactory({
|
|
26302
|
+
type: {
|
|
26303
|
+
type: String,
|
|
26304
|
+
default: 'trend'
|
|
26305
|
+
},
|
|
26306
|
+
...makeVBarlineProps(),
|
|
26307
|
+
...makeVTrendlineProps()
|
|
26308
|
+
}, 'VSparkline');
|
|
26309
|
+
const VSparkline = genericComponent()({
|
|
26310
|
+
name: 'VSparkline',
|
|
26311
|
+
props: makeVSparklineProps(),
|
|
26312
|
+
setup(props, _ref) {
|
|
26313
|
+
let {
|
|
26314
|
+
slots
|
|
26315
|
+
} = _ref;
|
|
26316
|
+
const {
|
|
26317
|
+
textColorClasses,
|
|
26318
|
+
textColorStyles
|
|
26319
|
+
} = useTextColor(vue.toRef(props, 'color'));
|
|
26320
|
+
const hasLabels = vue.computed(() => {
|
|
26321
|
+
return Boolean(props.showLabels || props.labels.length > 0 || !!slots?.label);
|
|
26322
|
+
});
|
|
26323
|
+
const totalHeight = vue.computed(() => {
|
|
26324
|
+
let height = parseInt(props.height, 10);
|
|
26325
|
+
if (hasLabels.value) height += parseInt(props.labelSize, 10) * 1.5;
|
|
26326
|
+
return height;
|
|
26327
|
+
});
|
|
26328
|
+
useRender(() => {
|
|
26329
|
+
const Tag = props.type === 'trend' ? VTrendline : VBarline;
|
|
26330
|
+
const lineProps = props.type === 'trend' ? VTrendline.filterProps(props) : VBarline.filterProps(props);
|
|
26331
|
+
return vue.createVNode(Tag, vue.mergeProps({
|
|
26332
|
+
"key": props.type,
|
|
26333
|
+
"class": textColorClasses.value,
|
|
26334
|
+
"style": textColorStyles.value,
|
|
26335
|
+
"viewBox": `0 0 ${props.width} ${parseInt(totalHeight.value, 10)}`
|
|
26336
|
+
}, lineProps), slots);
|
|
26337
|
+
});
|
|
26338
|
+
}
|
|
26339
|
+
});
|
|
26340
|
+
|
|
25849
26341
|
var components = /*#__PURE__*/Object.freeze({
|
|
25850
26342
|
__proto__: null,
|
|
25851
26343
|
VAlert: VAlert,
|
|
@@ -25898,6 +26390,7 @@
|
|
|
25898
26390
|
VDataIterator: VDataIterator,
|
|
25899
26391
|
VDataTable: VDataTable,
|
|
25900
26392
|
VDataTableFooter: VDataTableFooter,
|
|
26393
|
+
VDataTableHeaders: VDataTableHeaders,
|
|
25901
26394
|
VDataTableRow: VDataTableRow,
|
|
25902
26395
|
VDataTableRows: VDataTableRows,
|
|
25903
26396
|
VDataTableServer: VDataTableServer,
|
|
@@ -25988,6 +26481,7 @@
|
|
|
25988
26481
|
VSlider: VSlider,
|
|
25989
26482
|
VSnackbar: VSnackbar,
|
|
25990
26483
|
VSpacer: VSpacer,
|
|
26484
|
+
VSparkline: VSparkline,
|
|
25991
26485
|
VStepper: VStepper,
|
|
25992
26486
|
VStepperActions: VStepperActions,
|
|
25993
26487
|
VStepperHeader: VStepperHeader,
|
|
@@ -26235,7 +26729,7 @@
|
|
|
26235
26729
|
goTo
|
|
26236
26730
|
};
|
|
26237
26731
|
}
|
|
26238
|
-
const version$1 = "3.5.
|
|
26732
|
+
const version$1 = "3.5.6";
|
|
26239
26733
|
createVuetify$1.version = version$1;
|
|
26240
26734
|
|
|
26241
26735
|
// Vue's inject() can only be used in setup
|
|
@@ -26249,7 +26743,7 @@
|
|
|
26249
26743
|
|
|
26250
26744
|
/* eslint-disable local-rules/sort-imports */
|
|
26251
26745
|
|
|
26252
|
-
const version = "3.5.
|
|
26746
|
+
const version = "3.5.6";
|
|
26253
26747
|
|
|
26254
26748
|
/* eslint-disable local-rules/sort-imports */
|
|
26255
26749
|
|