@vuetify/nightly 4.0.0-dev-20230419.0 → 4.0.0-dev-20230421.0
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/CHANGELOG.md +7 -2
- package/dist/json/attributes.json +172 -108
- package/dist/json/importMap.json +34 -34
- package/dist/json/tags.json +16 -0
- package/dist/json/web-types.json +522 -220
- package/dist/vuetify-labs.css +293 -130
- package/dist/vuetify-labs.d.ts +620 -171
- package/dist/vuetify-labs.esm.js +867 -186
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +867 -185
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.css +166 -3
- package/dist/vuetify.d.ts +577 -160
- package/dist/vuetify.esm.js +809 -138
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +809 -137
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +802 -736
- package/dist/vuetify.min.js.map +1 -1
- package/lib/adapters/date-adapter.mjs +2 -0
- package/lib/adapters/date-adapter.mjs.map +1 -0
- package/lib/adapters/vuetify.mjs +399 -0
- package/lib/adapters/vuetify.mjs.map +1 -0
- package/lib/blueprints/index.d.ts +34 -0
- package/lib/blueprints/md1.d.ts +34 -0
- package/lib/blueprints/md2.d.ts +34 -0
- package/lib/blueprints/md3.d.ts +34 -0
- package/lib/components/VAppBar/VAppBar.mjs +62 -10
- package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
- package/lib/components/VAppBar/index.d.ts +26 -0
- package/lib/components/VAutocomplete/VAutocomplete.css +9 -0
- package/lib/components/VAutocomplete/VAutocomplete.mjs +50 -6
- package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.sass +10 -0
- package/lib/components/VAutocomplete/index.d.ts +29 -17
- package/lib/components/VBtn/_mixins.scss +1 -1
- package/lib/components/VCard/VCard.mjs.map +1 -1
- package/lib/components/VCard/index.d.ts +21 -16
- package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
- package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
- package/lib/components/VCheckbox/index.d.ts +22 -1
- package/lib/components/VCombobox/VCombobox.css +1 -1
- package/lib/components/VCombobox/VCombobox.mjs +6 -4
- package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
- package/lib/components/VCombobox/VCombobox.sass +1 -1
- package/lib/components/VCombobox/index.d.ts +29 -17
- package/lib/components/VField/index.d.ts +6 -0
- package/lib/components/VFileInput/VFileInput.mjs +13 -17
- package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
- package/lib/components/VFileInput/index.d.ts +68 -23
- package/lib/components/VInput/VInput.mjs +14 -7
- package/lib/components/VInput/VInput.mjs.map +1 -1
- package/lib/components/VInput/index.d.ts +22 -1
- package/lib/components/VOverlay/locationStrategies.mjs +9 -4
- package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
- package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
- package/lib/components/VRadioGroup/index.d.ts +22 -1
- package/lib/components/VRangeSlider/VRangeSlider.mjs +33 -22
- package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
- package/lib/components/VRangeSlider/index.d.ts +39 -6
- package/lib/components/VSelect/VSelect.mjs +6 -0
- package/lib/components/VSelect/VSelect.mjs.map +1 -1
- package/lib/components/VSelect/index.d.ts +32 -17
- package/lib/components/VSlider/VSlider.mjs +33 -15
- package/lib/components/VSlider/VSlider.mjs.map +1 -1
- package/lib/components/VSlider/index.d.ts +39 -6
- package/lib/components/VSlider/slider.mjs +47 -24
- package/lib/components/VSlider/slider.mjs.map +1 -1
- package/lib/components/VSwitch/VSwitch.mjs +5 -3
- package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
- package/lib/components/VSwitch/index.d.ts +43 -1
- package/lib/components/VTextField/VTextField.mjs +4 -12
- package/lib/components/VTextField/VTextField.mjs.map +1 -1
- package/lib/components/VTextField/index.d.ts +70 -22
- package/lib/components/VTextarea/VTextarea.mjs +4 -12
- package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
- package/lib/components/VTextarea/index.d.ts +61 -22
- package/lib/components/VToolbar/VToolbar.css +3 -1
- package/lib/components/VToolbar/VToolbar.sass +3 -1
- package/lib/components/VValidation/index.d.ts +10 -1
- package/lib/components/index.d.ts +525 -150
- package/lib/composables/date.mjs +39 -0
- package/lib/composables/date.mjs.map +1 -0
- package/lib/composables/focus.mjs +3 -2
- package/lib/composables/focus.mjs.map +1 -1
- package/lib/composables/index.mjs +1 -0
- package/lib/composables/index.mjs.map +1 -1
- package/lib/composables/items.mjs +7 -2
- package/lib/composables/items.mjs.map +1 -1
- package/lib/composables/scroll.mjs +3 -0
- package/lib/composables/scroll.mjs.map +1 -1
- package/lib/entry-bundler.mjs +1 -1
- package/lib/framework.mjs +8 -3
- package/lib/framework.mjs.map +1 -1
- package/lib/iconsets/mdi-svg.mjs +2 -2
- package/lib/iconsets/mdi-svg.mjs.map +1 -1
- package/lib/index.d.ts +52 -10
- package/lib/labs/VDataTable/VDataTable.mjs +2 -2
- package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableRows.mjs +52 -44
- package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableServer.mjs +2 -1
- package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
- package/lib/labs/VDataTable/VDataTableVirtual.mjs +0 -1
- package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
- package/lib/labs/VDataTable/composables/options.mjs +2 -1
- package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
- package/lib/labs/VDataTable/index.d.ts +44 -11
- package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs +1 -0
- package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
- package/lib/labs/VSkeletonLoader/index.d.ts +9 -9
- package/lib/labs/components.d.ts +53 -20
- package/lib/styles/main.css +152 -0
- package/lib/styles/settings/_utilities.scss +11 -1
- package/lib/util/helpers.mjs +4 -0
- package/lib/util/helpers.mjs.map +1 -1
- package/package.json +2 -2
package/dist/vuetify-labs.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v4.0.0-dev-
|
2
|
+
* Vuetify v4.0.0-dev-20230421.0
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -207,10 +207,6 @@
|
|
207
207
|
let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
208
208
|
return Math.max(min, Math.min(max, value));
|
209
209
|
}
|
210
|
-
function getDecimals(value) {
|
211
|
-
const trimmedStr = value.toString().trim();
|
212
|
-
return trimmedStr.includes('.') ? trimmedStr.length - trimmedStr.indexOf('.') - 1 : 0;
|
213
|
-
}
|
214
210
|
function padEnd(str, length) {
|
215
211
|
let char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
|
216
212
|
return str + char.repeat(Math.max(0, length - str.length));
|
@@ -3257,6 +3253,98 @@
|
|
3257
3253
|
|
3258
3254
|
// Utilities
|
3259
3255
|
|
3256
|
+
// Types
|
3257
|
+
|
3258
|
+
// Composables
|
3259
|
+
const makeScrollProps = propsFactory({
|
3260
|
+
scrollTarget: {
|
3261
|
+
type: String
|
3262
|
+
},
|
3263
|
+
scrollThreshold: {
|
3264
|
+
type: [String, Number]
|
3265
|
+
}
|
3266
|
+
}, 'scroll');
|
3267
|
+
function useScroll(props) {
|
3268
|
+
let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
3269
|
+
const {
|
3270
|
+
thresholdMetCallback,
|
3271
|
+
scrollThreshold,
|
3272
|
+
canScroll
|
3273
|
+
} = args;
|
3274
|
+
let previousScroll = 0;
|
3275
|
+
const target = vue.ref(null);
|
3276
|
+
const currentScroll = vue.ref(0);
|
3277
|
+
const savedScroll = vue.ref(0);
|
3278
|
+
const currentThreshold = vue.ref(0);
|
3279
|
+
const isScrollActive = vue.ref(false);
|
3280
|
+
const isScrollingUp = vue.ref(false);
|
3281
|
+
const computedScrollThreshold = vue.computed(() => {
|
3282
|
+
return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
|
3283
|
+
});
|
3284
|
+
const onScroll = () => {
|
3285
|
+
const targetEl = target.value;
|
3286
|
+
if (!targetEl || canScroll && !canScroll.value) return;
|
3287
|
+
previousScroll = currentScroll.value;
|
3288
|
+
currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
|
3289
|
+
isScrollingUp.value = currentScroll.value < previousScroll;
|
3290
|
+
currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
|
3291
|
+
};
|
3292
|
+
vue.watch(isScrollingUp, () => {
|
3293
|
+
savedScroll.value = savedScroll.value || currentScroll.value;
|
3294
|
+
});
|
3295
|
+
vue.watch(isScrollActive, () => {
|
3296
|
+
savedScroll.value = 0;
|
3297
|
+
});
|
3298
|
+
vue.onMounted(() => {
|
3299
|
+
vue.watch(() => props.scrollTarget, scrollTarget => {
|
3300
|
+
const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
|
3301
|
+
if (!newTarget) {
|
3302
|
+
consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, vue.getCurrentInstance());
|
3303
|
+
return;
|
3304
|
+
}
|
3305
|
+
if (newTarget === target.value) return;
|
3306
|
+
target.value?.removeEventListener('scroll', onScroll);
|
3307
|
+
target.value = newTarget;
|
3308
|
+
target.value.addEventListener('scroll', onScroll, {
|
3309
|
+
passive: true
|
3310
|
+
});
|
3311
|
+
}, {
|
3312
|
+
immediate: true
|
3313
|
+
});
|
3314
|
+
});
|
3315
|
+
vue.onBeforeUnmount(() => {
|
3316
|
+
target.value?.removeEventListener('scroll', onScroll);
|
3317
|
+
});
|
3318
|
+
thresholdMetCallback && vue.watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
|
3319
|
+
thresholdMet && thresholdMetCallback({
|
3320
|
+
currentThreshold: currentThreshold.value,
|
3321
|
+
isScrollingUp: isScrollingUp.value,
|
3322
|
+
savedScroll
|
3323
|
+
});
|
3324
|
+
}, {
|
3325
|
+
immediate: true
|
3326
|
+
});
|
3327
|
+
|
3328
|
+
// Do we need this? If yes - seems that
|
3329
|
+
// there's no need to expose onScroll
|
3330
|
+
canScroll && vue.watch(canScroll, onScroll, {
|
3331
|
+
immediate: true
|
3332
|
+
});
|
3333
|
+
return {
|
3334
|
+
computedScrollThreshold,
|
3335
|
+
currentScroll,
|
3336
|
+
currentThreshold,
|
3337
|
+
isScrollActive,
|
3338
|
+
// required only for testing
|
3339
|
+
// probably can be removed
|
3340
|
+
// later (2 chars chlng)
|
3341
|
+
isScrollingUp,
|
3342
|
+
savedScroll
|
3343
|
+
};
|
3344
|
+
}
|
3345
|
+
|
3346
|
+
// Utilities
|
3347
|
+
|
3260
3348
|
// Composables
|
3261
3349
|
function useSsrBoot() {
|
3262
3350
|
const isBooted = vue.ref(false);
|
@@ -3279,13 +3367,7 @@
|
|
3279
3367
|
const VAppBar = genericComponent()({
|
3280
3368
|
name: 'VAppBar',
|
3281
3369
|
props: {
|
3282
|
-
|
3283
|
-
// hideOnScroll: Boolean
|
3284
|
-
// invertedScroll: Boolean
|
3285
|
-
// collapseOnScroll: Boolean
|
3286
|
-
// elevateOnScroll: Boolean
|
3287
|
-
// shrinkOnScroll: Boolean
|
3288
|
-
// fadeImageOnScroll: Boolean
|
3370
|
+
scrollBehavior: String,
|
3289
3371
|
modelValue: {
|
3290
3372
|
type: Boolean,
|
3291
3373
|
default: true
|
@@ -3297,6 +3379,7 @@
|
|
3297
3379
|
},
|
3298
3380
|
...makeVToolbarProps(),
|
3299
3381
|
...makeLayoutItemProps(),
|
3382
|
+
...makeScrollProps(),
|
3300
3383
|
height: {
|
3301
3384
|
type: [Number, String],
|
3302
3385
|
default: 64
|
@@ -3311,11 +3394,63 @@
|
|
3311
3394
|
} = _ref;
|
3312
3395
|
const vToolbarRef = vue.ref();
|
3313
3396
|
const isActive = useProxiedModel(props, 'modelValue');
|
3397
|
+
const scrollBehavior = vue.computed(() => {
|
3398
|
+
const behavior = new Set(props.scrollBehavior?.split(' ') ?? []);
|
3399
|
+
return {
|
3400
|
+
hide: behavior.has('hide'),
|
3401
|
+
// fullyHide: behavior.has('fully-hide'),
|
3402
|
+
inverted: behavior.has('inverted'),
|
3403
|
+
collapse: behavior.has('collapse'),
|
3404
|
+
elevate: behavior.has('elevate'),
|
3405
|
+
fadeImage: behavior.has('fade-image')
|
3406
|
+
// shrink: behavior.has('shrink'),
|
3407
|
+
};
|
3408
|
+
});
|
3409
|
+
|
3410
|
+
const canScroll = vue.computed(() => {
|
3411
|
+
const behavior = scrollBehavior.value;
|
3412
|
+
return behavior.hide ||
|
3413
|
+
// behavior.fullyHide ||
|
3414
|
+
behavior.inverted || behavior.collapse || behavior.elevate || behavior.fadeImage ||
|
3415
|
+
// behavior.shrink ||
|
3416
|
+
!isActive.value;
|
3417
|
+
});
|
3418
|
+
const {
|
3419
|
+
currentScroll,
|
3420
|
+
currentThreshold,
|
3421
|
+
computedScrollThreshold,
|
3422
|
+
isScrollingUp
|
3423
|
+
} = useScroll(props, {
|
3424
|
+
canScroll
|
3425
|
+
});
|
3426
|
+
const isCollapsed = vue.computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
|
3427
|
+
const isFlat = vue.computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
|
3428
|
+
const scrollRatio = vue.computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
|
3429
|
+
const opacity = vue.computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
|
3314
3430
|
const height = vue.computed(() => {
|
3431
|
+
if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
|
3315
3432
|
const height = vToolbarRef.value?.contentHeight ?? 0;
|
3316
3433
|
const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
|
3317
3434
|
return height + extensionHeight;
|
3318
3435
|
});
|
3436
|
+
function setActive() {
|
3437
|
+
const val = currentScroll.value;
|
3438
|
+
if (scrollBehavior.value.hide) {
|
3439
|
+
if (scrollBehavior.value.inverted) {
|
3440
|
+
isActive.value = val > computedScrollThreshold.value;
|
3441
|
+
} else {
|
3442
|
+
isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
|
3443
|
+
}
|
3444
|
+
} else if (scrollBehavior.value.inverted) {
|
3445
|
+
isActive.value = currentScroll.value === 0;
|
3446
|
+
} else {
|
3447
|
+
isActive.value = true;
|
3448
|
+
}
|
3449
|
+
}
|
3450
|
+
vue.watch(currentScroll, setActive, {
|
3451
|
+
immediate: true
|
3452
|
+
});
|
3453
|
+
vue.watch(scrollBehavior, setActive);
|
3319
3454
|
const {
|
3320
3455
|
ssrBootStyles
|
3321
3456
|
} = useSsrBoot();
|
@@ -3326,7 +3461,7 @@
|
|
3326
3461
|
order: vue.computed(() => parseInt(props.order, 10)),
|
3327
3462
|
position: vue.toRef(props, 'location'),
|
3328
3463
|
layoutSize: height,
|
3329
|
-
elementSize:
|
3464
|
+
elementSize: vue.ref(undefined),
|
3330
3465
|
active: isActive,
|
3331
3466
|
absolute: vue.toRef(props, 'absolute')
|
3332
3467
|
});
|
@@ -3339,10 +3474,14 @@
|
|
3339
3474
|
}],
|
3340
3475
|
"style": {
|
3341
3476
|
...layoutItemStyles.value,
|
3477
|
+
'--v-toolbar-image-opacity': opacity.value,
|
3342
3478
|
height: undefined,
|
3343
3479
|
...ssrBootStyles.value
|
3344
3480
|
}
|
3345
|
-
}, toolbarProps
|
3481
|
+
}, toolbarProps, {
|
3482
|
+
"collapse": isCollapsed.value,
|
3483
|
+
"flat": isFlat.value
|
3484
|
+
}), slots);
|
3346
3485
|
});
|
3347
3486
|
return {};
|
3348
3487
|
}
|
@@ -5300,7 +5439,8 @@
|
|
5300
5439
|
|
5301
5440
|
// Composables
|
5302
5441
|
const makeFocusProps = propsFactory({
|
5303
|
-
focused: Boolean
|
5442
|
+
focused: Boolean,
|
5443
|
+
'onUpdate:focused': EventProp()
|
5304
5444
|
}, 'focus');
|
5305
5445
|
function useFocus(props) {
|
5306
5446
|
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
|
@@ -5895,6 +6035,8 @@
|
|
5895
6035
|
appendIcon: IconValue,
|
5896
6036
|
prependIcon: IconValue,
|
5897
6037
|
hideDetails: [Boolean, String],
|
6038
|
+
hint: String,
|
6039
|
+
persistentHint: Boolean,
|
5898
6040
|
messages: {
|
5899
6041
|
type: [Array, String],
|
5900
6042
|
default: () => []
|
@@ -5958,10 +6100,19 @@
|
|
5958
6100
|
resetValidation,
|
5959
6101
|
validate
|
5960
6102
|
}));
|
6103
|
+
const messages = vue.computed(() => {
|
6104
|
+
if (errorMessages.value.length > 0) {
|
6105
|
+
return errorMessages.value;
|
6106
|
+
} else if (props.hint && (props.persistentHint || props.focused)) {
|
6107
|
+
return props.hint;
|
6108
|
+
} else {
|
6109
|
+
return props.messages;
|
6110
|
+
}
|
6111
|
+
});
|
5961
6112
|
useRender(() => {
|
5962
6113
|
const hasPrepend = !!(slots.prepend || props.prependIcon);
|
5963
6114
|
const hasAppend = !!(slots.append || props.appendIcon);
|
5964
|
-
const hasMessages =
|
6115
|
+
const hasMessages = messages.value.length > 0;
|
5965
6116
|
const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
|
5966
6117
|
return vue.createVNode("div", {
|
5967
6118
|
"class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
|
@@ -5984,7 +6135,7 @@
|
|
5984
6135
|
}, [vue.createVNode(VMessages, {
|
5985
6136
|
"id": messagesId.value,
|
5986
6137
|
"active": hasMessages,
|
5987
|
-
"messages":
|
6138
|
+
"messages": messages.value
|
5988
6139
|
}, {
|
5989
6140
|
message: slots.message
|
5990
6141
|
}), slots.details?.(slotProps.value)])]);
|
@@ -5996,10 +6147,6 @@
|
|
5996
6147
|
};
|
5997
6148
|
}
|
5998
6149
|
});
|
5999
|
-
function filterInputProps(props) {
|
6000
|
-
const keys = Object.keys(VInput.props).filter(k => !isOn(k));
|
6001
|
-
return pick(props, keys);
|
6002
|
-
}
|
6003
6150
|
|
6004
6151
|
const VCounter = genericComponent()({
|
6005
6152
|
name: 'VCounter',
|
@@ -6125,8 +6272,6 @@
|
|
6125
6272
|
autofocus: Boolean,
|
6126
6273
|
counter: [Boolean, Number, String],
|
6127
6274
|
counterValue: Function,
|
6128
|
-
hint: String,
|
6129
|
-
persistentHint: Boolean,
|
6130
6275
|
prefix: String,
|
6131
6276
|
placeholder: String,
|
6132
6277
|
persistentPlaceholder: Boolean,
|
@@ -6181,9 +6326,6 @@
|
|
6181
6326
|
const vFieldRef = vue.ref();
|
6182
6327
|
const inputRef = vue.ref();
|
6183
6328
|
const isActive = vue.computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value);
|
6184
|
-
const messages = vue.computed(() => {
|
6185
|
-
return props.messages.length ? props.messages : isFocused.value || props.persistentHint ? props.hint : '';
|
6186
|
-
});
|
6187
6329
|
function onFocus() {
|
6188
6330
|
if (inputRef.value !== document.activeElement) {
|
6189
6331
|
inputRef.value?.focus();
|
@@ -6226,7 +6368,7 @@
|
|
6226
6368
|
const [{
|
6227
6369
|
modelValue: _,
|
6228
6370
|
...inputProps
|
6229
|
-
}] =
|
6371
|
+
}] = VInput.filterProps(props);
|
6230
6372
|
const [fieldProps] = filterFieldProps(props);
|
6231
6373
|
return vue.createVNode(VInput, vue.mergeProps({
|
6232
6374
|
"ref": vInputRef,
|
@@ -6236,12 +6378,9 @@
|
|
6236
6378
|
'v-text-field--prefixed': props.prefix,
|
6237
6379
|
'v-text-field--suffixed': props.suffix,
|
6238
6380
|
'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
|
6239
|
-
}]
|
6240
|
-
"onClick:prepend": props['onClick:prepend'],
|
6241
|
-
"onClick:append": props['onClick:append']
|
6381
|
+
}]
|
6242
6382
|
}, rootAttrs, inputProps, {
|
6243
|
-
"focused": isFocused.value
|
6244
|
-
"messages": messages.value
|
6383
|
+
"focused": isFocused.value
|
6245
6384
|
}), {
|
6246
6385
|
...slots,
|
6247
6386
|
default: _ref2 => {
|
@@ -6650,7 +6789,7 @@
|
|
6650
6789
|
const id = vue.computed(() => props.id || `checkbox-${uid}`);
|
6651
6790
|
useRender(() => {
|
6652
6791
|
const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
|
6653
|
-
const [inputProps, _1] =
|
6792
|
+
const [inputProps, _1] = VInput.filterProps(props);
|
6654
6793
|
const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
|
6655
6794
|
return vue.createVNode(VInput, vue.mergeProps({
|
6656
6795
|
"class": "v-checkbox"
|
@@ -8062,7 +8201,12 @@
|
|
8062
8201
|
function useItems(props) {
|
8063
8202
|
const items = vue.computed(() => transformItems$1(props, props.items));
|
8064
8203
|
function transformIn(value) {
|
8065
|
-
return value.map(
|
8204
|
+
return value.map(v => {
|
8205
|
+
const existingItem = items.value.find(item => deepEqual(v, item.value));
|
8206
|
+
// Nullish existingItem means value is a custom input value from combobox
|
8207
|
+
// In this case, use transformItem to create an InternalItem based on value
|
8208
|
+
return existingItem ?? transformItem$1(props, v);
|
8209
|
+
});
|
8066
8210
|
}
|
8067
8211
|
function transformOut(value) {
|
8068
8212
|
return value.map(_ref => {
|
@@ -8740,7 +8884,7 @@
|
|
8740
8884
|
}
|
8741
8885
|
|
8742
8886
|
/** Get size of element ignoring max-width/max-height */
|
8743
|
-
function getIntrinsicSize(el) {
|
8887
|
+
function getIntrinsicSize(el, isRtl) {
|
8744
8888
|
// const scrollables = new Map<Element, [number, number]>()
|
8745
8889
|
// el.querySelectorAll('*').forEach(el => {
|
8746
8890
|
// const x = el.scrollLeft
|
@@ -8757,7 +8901,11 @@
|
|
8757
8901
|
|
8758
8902
|
/* eslint-disable-next-line sonarjs/prefer-immediate-return */
|
8759
8903
|
const contentBox = nullifyTransforms(el);
|
8760
|
-
|
8904
|
+
if (isRtl) {
|
8905
|
+
contentBox.x += parseFloat(el.style.right || 0);
|
8906
|
+
} else {
|
8907
|
+
contentBox.x -= parseFloat(el.style.left || 0);
|
8908
|
+
}
|
8761
8909
|
contentBox.y -= parseFloat(el.style.top || 0);
|
8762
8910
|
|
8763
8911
|
// el.style.maxWidth = initialMaxWidth
|
@@ -8838,7 +8986,7 @@
|
|
8838
8986
|
});
|
8839
8987
|
if (!data.activatorEl.value || !data.contentEl.value) return;
|
8840
8988
|
const targetBox = data.activatorEl.value.getBoundingClientRect();
|
8841
|
-
const contentBox = getIntrinsicSize(data.contentEl.value);
|
8989
|
+
const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
|
8842
8990
|
const scrollParents = getScrollParents(data.contentEl.value);
|
8843
8991
|
const viewportMargin = 12;
|
8844
8992
|
if (!scrollParents.length) {
|
@@ -9014,7 +9162,8 @@
|
|
9014
9162
|
transformOrigin: `${placement.origin.side} ${placement.origin.align}`,
|
9015
9163
|
// transform: `translate(${pixelRound(x)}px, ${pixelRound(y)}px)`,
|
9016
9164
|
top: convertToUnit(pixelRound(y)),
|
9017
|
-
left: convertToUnit(pixelRound(x)),
|
9165
|
+
left: data.isRtl.value ? undefined : convertToUnit(pixelRound(x)),
|
9166
|
+
right: data.isRtl.value ? convertToUnit(pixelRound(-x)) : undefined,
|
9018
9167
|
minWidth: convertToUnit(axis === 'y' ? Math.min(minWidth.value, targetBox.width) : minWidth.value),
|
9019
9168
|
maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
|
9020
9169
|
maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
|
@@ -9909,6 +10058,7 @@
|
|
9909
10058
|
})
|
9910
10059
|
},
|
9911
10060
|
emits: {
|
10061
|
+
'update:focused': focused => true,
|
9912
10062
|
'update:modelValue': val => true,
|
9913
10063
|
'update:menu': val => true
|
9914
10064
|
},
|
@@ -10025,6 +10175,9 @@
|
|
10025
10175
|
menu.value = false;
|
10026
10176
|
}
|
10027
10177
|
}
|
10178
|
+
function onFocusin(e) {
|
10179
|
+
isFocused.value = true;
|
10180
|
+
}
|
10028
10181
|
function onFocusout(e) {
|
10029
10182
|
if (e.relatedTarget == null) {
|
10030
10183
|
vTextFieldRef.value?.focus();
|
@@ -10079,6 +10232,7 @@
|
|
10079
10232
|
"selected": selected.value,
|
10080
10233
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
10081
10234
|
"onMousedown": e => e.preventDefault(),
|
10235
|
+
"onFocusin": onFocusin,
|
10082
10236
|
"onFocusout": onFocusout
|
10083
10237
|
}, {
|
10084
10238
|
default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
|
@@ -10157,6 +10311,7 @@
|
|
10157
10311
|
});
|
10158
10312
|
});
|
10159
10313
|
return forwardRefs({
|
10314
|
+
isFocused,
|
10160
10315
|
menu,
|
10161
10316
|
select
|
10162
10317
|
}, vTextFieldRef);
|
@@ -10295,6 +10450,7 @@
|
|
10295
10450
|
})
|
10296
10451
|
},
|
10297
10452
|
emits: {
|
10453
|
+
'update:focused': focused => true,
|
10298
10454
|
'update:search': val => true,
|
10299
10455
|
'update:modelValue': val => true,
|
10300
10456
|
'update:menu': val => true
|
@@ -10318,11 +10474,17 @@
|
|
10318
10474
|
_menu.value = v;
|
10319
10475
|
}
|
10320
10476
|
});
|
10477
|
+
const selectionIndex = vue.ref(-1);
|
10478
|
+
const color = vue.computed(() => vTextFieldRef.value?.color);
|
10321
10479
|
const {
|
10322
10480
|
items,
|
10323
10481
|
transformIn,
|
10324
10482
|
transformOut
|
10325
10483
|
} = useItems(props);
|
10484
|
+
const {
|
10485
|
+
textColorClasses,
|
10486
|
+
textColorStyles
|
10487
|
+
} = useTextColor(color);
|
10326
10488
|
const search = useProxiedModel(props, 'search', '');
|
10327
10489
|
const model = useProxiedModel(props, 'modelValue', [], v => transformIn(wrapInArray(v)), v => {
|
10328
10490
|
const transformed = transformOut(v);
|
@@ -10345,6 +10507,7 @@
|
|
10345
10507
|
return filteredItems.value;
|
10346
10508
|
});
|
10347
10509
|
const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
|
10510
|
+
const selection = vue.computed(() => selections.value[selectionIndex.value]);
|
10348
10511
|
const listRef = vue.ref();
|
10349
10512
|
function onClear(e) {
|
10350
10513
|
if (props.openOnClear) {
|
@@ -10358,7 +10521,9 @@
|
|
10358
10521
|
}
|
10359
10522
|
function onKeydown(e) {
|
10360
10523
|
if (props.readonly || form?.isReadonly.value) return;
|
10361
|
-
|
10524
|
+
const selectionStart = vTextFieldRef.value.selectionStart;
|
10525
|
+
const length = selected.value.length;
|
10526
|
+
if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
|
10362
10527
|
e.preventDefault();
|
10363
10528
|
}
|
10364
10529
|
if (['Enter', 'ArrowDown'].includes(e.key)) {
|
@@ -10375,6 +10540,38 @@
|
|
10375
10540
|
} else if (e.key === 'ArrowUp') {
|
10376
10541
|
listRef.value?.focus('prev');
|
10377
10542
|
}
|
10543
|
+
if (!props.multiple) return;
|
10544
|
+
if (['Backspace', 'Delete'].includes(e.key)) {
|
10545
|
+
if (selectionIndex.value < 0) {
|
10546
|
+
if (e.key === 'Backspace' && !search.value) {
|
10547
|
+
selectionIndex.value = length - 1;
|
10548
|
+
}
|
10549
|
+
return;
|
10550
|
+
}
|
10551
|
+
const originalSelectionIndex = selectionIndex.value;
|
10552
|
+
if (selection.value) select(selection.value);
|
10553
|
+
selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
|
10554
|
+
}
|
10555
|
+
if (e.key === 'ArrowLeft') {
|
10556
|
+
if (selectionIndex.value < 0 && selectionStart > 0) return;
|
10557
|
+
const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
|
10558
|
+
if (selections.value[prev]) {
|
10559
|
+
selectionIndex.value = prev;
|
10560
|
+
} else {
|
10561
|
+
selectionIndex.value = -1;
|
10562
|
+
vTextFieldRef.value.setSelectionRange(search.value?.length, search.value?.length);
|
10563
|
+
}
|
10564
|
+
}
|
10565
|
+
if (e.key === 'ArrowRight') {
|
10566
|
+
if (selectionIndex.value < 0) return;
|
10567
|
+
const next = selectionIndex.value + 1;
|
10568
|
+
if (selections.value[next]) {
|
10569
|
+
selectionIndex.value = next;
|
10570
|
+
} else {
|
10571
|
+
selectionIndex.value = -1;
|
10572
|
+
vTextFieldRef.value.setSelectionRange(0, 0);
|
10573
|
+
}
|
10574
|
+
}
|
10378
10575
|
}
|
10379
10576
|
function onInput(e) {
|
10380
10577
|
search.value = e.target.value;
|
@@ -10396,7 +10593,6 @@
|
|
10396
10593
|
const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
|
10397
10594
|
if (index === -1) {
|
10398
10595
|
model.value = [...model.value, item];
|
10399
|
-
search.value = '';
|
10400
10596
|
} else {
|
10401
10597
|
const value = [...model.value];
|
10402
10598
|
value.splice(index, 1);
|
@@ -10441,12 +10637,15 @@
|
|
10441
10637
|
"onUpdate:modelValue": v => {
|
10442
10638
|
if (v == null) model.value = [];
|
10443
10639
|
},
|
10640
|
+
"focused": isFocused.value,
|
10641
|
+
"onUpdate:focused": $event => isFocused.value = $event,
|
10444
10642
|
"validationValue": model.externalValue,
|
10445
10643
|
"dirty": isDirty,
|
10446
10644
|
"onInput": onInput,
|
10447
10645
|
"class": ['v-autocomplete', {
|
10448
10646
|
'v-autocomplete--active-menu': menu.value,
|
10449
10647
|
'v-autocomplete--chips': !!props.chips,
|
10648
|
+
'v-autocomplete--selecting-index': selectionIndex.value > -1,
|
10450
10649
|
[`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
|
10451
10650
|
'v-autocomplete--selection-slot': !!slots.selection
|
10452
10651
|
}],
|
@@ -10455,8 +10654,6 @@
|
|
10455
10654
|
"placeholder": isDirty ? undefined : props.placeholder,
|
10456
10655
|
"onClick:clear": onClear,
|
10457
10656
|
"onMousedown:control": onMousedownControl,
|
10458
|
-
"onFocus": () => isFocused.value = true,
|
10459
|
-
"onBlur": () => isFocused.value = false,
|
10460
10657
|
"onKeydown": onKeydown
|
10461
10658
|
}), {
|
10462
10659
|
...slots,
|
@@ -10521,7 +10718,8 @@
|
|
10521
10718
|
};
|
10522
10719
|
return vue.createVNode("div", {
|
10523
10720
|
"key": item.value,
|
10524
|
-
"class":
|
10721
|
+
"class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
|
10722
|
+
"style": index === selectionIndex.value ? textColorStyles.value : {}
|
10525
10723
|
}, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
|
10526
10724
|
"key": "chip",
|
10527
10725
|
"closable": props.closableChips,
|
@@ -12416,11 +12614,36 @@
|
|
12416
12614
|
elevation: 2
|
12417
12615
|
})
|
12418
12616
|
}, 'slider');
|
12617
|
+
const useSteps = props => {
|
12618
|
+
const min = vue.computed(() => parseFloat(props.min));
|
12619
|
+
const max = vue.computed(() => parseFloat(props.max));
|
12620
|
+
const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
|
12621
|
+
const decimals = vue.computed(() => {
|
12622
|
+
const trimmedStep = step.value.toString().trim();
|
12623
|
+
return trimmedStep.includes('.') ? trimmedStep.length - trimmedStep.indexOf('.') - 1 : 0;
|
12624
|
+
});
|
12625
|
+
function roundValue(value) {
|
12626
|
+
if (step.value <= 0) return value;
|
12627
|
+
const clamped = clamp(value, min.value, max.value);
|
12628
|
+
const offset = min.value % step.value;
|
12629
|
+
const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
|
12630
|
+
return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
|
12631
|
+
}
|
12632
|
+
return {
|
12633
|
+
min,
|
12634
|
+
max,
|
12635
|
+
step,
|
12636
|
+
decimals,
|
12637
|
+
roundValue
|
12638
|
+
};
|
12639
|
+
};
|
12419
12640
|
const useSlider = _ref => {
|
12420
12641
|
let {
|
12421
12642
|
props,
|
12422
|
-
|
12423
|
-
|
12643
|
+
steps,
|
12644
|
+
onSliderStart,
|
12645
|
+
onSliderMove,
|
12646
|
+
onSliderEnd,
|
12424
12647
|
getActiveThumb
|
12425
12648
|
} = _ref;
|
12426
12649
|
const {
|
@@ -12434,10 +12657,13 @@
|
|
12434
12657
|
}
|
12435
12658
|
return hd;
|
12436
12659
|
});
|
12437
|
-
const
|
12438
|
-
|
12439
|
-
|
12440
|
-
|
12660
|
+
const {
|
12661
|
+
min,
|
12662
|
+
max,
|
12663
|
+
step,
|
12664
|
+
decimals,
|
12665
|
+
roundValue
|
12666
|
+
} = steps;
|
12441
12667
|
const thumbSize = vue.computed(() => parseInt(props.thumbSize, 10));
|
12442
12668
|
const tickSize = vue.computed(() => parseInt(props.tickSize, 10));
|
12443
12669
|
const trackSize = vue.computed(() => parseInt(props.trackSize, 10));
|
@@ -12451,13 +12677,6 @@
|
|
12451
12677
|
const startOffset = vue.ref(0);
|
12452
12678
|
const trackContainerRef = vue.ref();
|
12453
12679
|
const activeThumbRef = vue.ref();
|
12454
|
-
function roundValue(value) {
|
12455
|
-
if (step.value <= 0) return value;
|
12456
|
-
const clamped = clamp(value, min.value, max.value);
|
12457
|
-
const offset = min.value % step.value;
|
12458
|
-
const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
|
12459
|
-
return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
|
12460
|
-
}
|
12461
12680
|
function parseMouseMove(e) {
|
12462
12681
|
const vertical = props.direction === 'vertical';
|
12463
12682
|
const start = vertical ? 'top' : 'left';
|
@@ -12474,14 +12693,11 @@
|
|
12474
12693
|
if (vertical || horizontalDirection.value === 'rtl') clickPos = 1 - clickPos;
|
12475
12694
|
return roundValue(min.value + clickPos * (max.value - min.value));
|
12476
12695
|
}
|
12477
|
-
let thumbMoved = false;
|
12478
12696
|
const handleStop = e => {
|
12479
|
-
|
12480
|
-
|
12481
|
-
|
12482
|
-
}
|
12697
|
+
onSliderEnd({
|
12698
|
+
value: parseMouseMove(e)
|
12699
|
+
});
|
12483
12700
|
mousePressed.value = false;
|
12484
|
-
thumbMoved = false;
|
12485
12701
|
startOffset.value = 0;
|
12486
12702
|
};
|
12487
12703
|
const handleStart = e => {
|
@@ -12490,20 +12706,25 @@
|
|
12490
12706
|
activeThumbRef.value.focus();
|
12491
12707
|
mousePressed.value = true;
|
12492
12708
|
if (activeThumbRef.value.contains(e.target)) {
|
12493
|
-
thumbMoved = true;
|
12494
12709
|
startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
|
12495
12710
|
} else {
|
12496
12711
|
startOffset.value = 0;
|
12497
|
-
|
12712
|
+
onSliderMove({
|
12713
|
+
value: parseMouseMove(e)
|
12714
|
+
});
|
12498
12715
|
}
|
12716
|
+
onSliderStart({
|
12717
|
+
value: parseMouseMove(e)
|
12718
|
+
});
|
12499
12719
|
};
|
12500
12720
|
const moveListenerOptions = {
|
12501
12721
|
passive: true,
|
12502
12722
|
capture: true
|
12503
12723
|
};
|
12504
12724
|
function onMouseMove(e) {
|
12505
|
-
|
12506
|
-
|
12725
|
+
onSliderMove({
|
12726
|
+
value: parseMouseMove(e)
|
12727
|
+
});
|
12507
12728
|
}
|
12508
12729
|
function onSliderMouseUp(e) {
|
12509
12730
|
e.stopPropagation();
|
@@ -12879,13 +13100,21 @@
|
|
12879
13100
|
},
|
12880
13101
|
emits: {
|
12881
13102
|
'update:focused': value => true,
|
12882
|
-
'update:modelValue': v => true
|
13103
|
+
'update:modelValue': v => true,
|
13104
|
+
start: value => true,
|
13105
|
+
end: value => true
|
12883
13106
|
},
|
12884
13107
|
setup(props, _ref) {
|
12885
13108
|
let {
|
12886
|
-
slots
|
13109
|
+
slots,
|
13110
|
+
emit
|
12887
13111
|
} = _ref;
|
12888
13112
|
const thumbContainerRef = vue.ref();
|
13113
|
+
const steps = useSteps(props);
|
13114
|
+
const model = useProxiedModel(props, 'modelValue', undefined, v => {
|
13115
|
+
const value = typeof v === 'string' ? parseFloat(v) : v == null ? steps.min.value : v;
|
13116
|
+
return steps.roundValue(value);
|
13117
|
+
});
|
12889
13118
|
const {
|
12890
13119
|
min,
|
12891
13120
|
max,
|
@@ -12899,16 +13128,26 @@
|
|
12899
13128
|
readonly
|
12900
13129
|
} = useSlider({
|
12901
13130
|
props,
|
12902
|
-
|
12903
|
-
|
12904
|
-
|
12905
|
-
|
13131
|
+
steps,
|
13132
|
+
onSliderStart: () => {
|
13133
|
+
emit('start', model.value);
|
13134
|
+
},
|
13135
|
+
onSliderEnd: _ref2 => {
|
13136
|
+
let {
|
13137
|
+
value
|
13138
|
+
} = _ref2;
|
13139
|
+
const roundedValue = roundValue(value);
|
13140
|
+
model.value = roundedValue;
|
13141
|
+
emit('end', roundedValue);
|
13142
|
+
},
|
13143
|
+
onSliderMove: _ref3 => {
|
13144
|
+
let {
|
13145
|
+
value
|
13146
|
+
} = _ref3;
|
13147
|
+
return model.value = roundValue(value);
|
13148
|
+
},
|
12906
13149
|
getActiveThumb: () => thumbContainerRef.value?.$el
|
12907
13150
|
});
|
12908
|
-
const model = useProxiedModel(props, 'modelValue', undefined, v => {
|
12909
|
-
const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v;
|
12910
|
-
return roundValue(value);
|
12911
|
-
});
|
12912
13151
|
const {
|
12913
13152
|
isFocused,
|
12914
13153
|
focus,
|
@@ -12916,7 +13155,7 @@
|
|
12916
13155
|
} = useFocus(props);
|
12917
13156
|
const trackStop = vue.computed(() => position(model.value));
|
12918
13157
|
useRender(() => {
|
12919
|
-
const [inputProps, _] =
|
13158
|
+
const [inputProps, _] = VInput.filterProps(props);
|
12920
13159
|
const hasPrepend = !!(props.label || slots.label || slots.prepend);
|
12921
13160
|
return vue.createVNode(VInput, vue.mergeProps({
|
12922
13161
|
"class": ['v-slider', {
|
@@ -12934,11 +13173,11 @@
|
|
12934
13173
|
"class": "v-slider__label",
|
12935
13174
|
"text": props.label
|
12936
13175
|
}, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
|
12937
|
-
default:
|
13176
|
+
default: _ref4 => {
|
12938
13177
|
let {
|
12939
13178
|
id,
|
12940
13179
|
messagesId
|
12941
|
-
} =
|
13180
|
+
} = _ref4;
|
12942
13181
|
return vue.createVNode("div", {
|
12943
13182
|
"class": "v-slider__container",
|
12944
13183
|
"onMousedown": !readonly.value ? onSliderMousedown : undefined,
|
@@ -13580,6 +13819,7 @@
|
|
13580
13819
|
})
|
13581
13820
|
},
|
13582
13821
|
emits: {
|
13822
|
+
'update:focused': focused => true,
|
13583
13823
|
'update:modelValue': val => true,
|
13584
13824
|
'update:search': val => true,
|
13585
13825
|
'update:menu': val => true
|
@@ -13717,8 +13957,9 @@
|
|
13717
13957
|
}
|
13718
13958
|
return;
|
13719
13959
|
}
|
13720
|
-
|
13721
|
-
|
13960
|
+
const originalSelectionIndex = selectionIndex.value;
|
13961
|
+
if (selection.value) select(selection.value);
|
13962
|
+
selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
|
13722
13963
|
}
|
13723
13964
|
if (e.key === 'ArrowLeft') {
|
13724
13965
|
if (selectionIndex.value < 0 && selectionStart > 0) return;
|
@@ -13803,6 +14044,8 @@
|
|
13803
14044
|
"onUpdate:modelValue": [$event => search.value = $event, v => {
|
13804
14045
|
if (v == null) model.value = [];
|
13805
14046
|
}],
|
14047
|
+
"focused": isFocused.value,
|
14048
|
+
"onUpdate:focused": $event => isFocused.value = $event,
|
13806
14049
|
"validationValue": model.externalValue,
|
13807
14050
|
"dirty": isDirty,
|
13808
14051
|
"class": ['v-combobox', {
|
@@ -13816,8 +14059,6 @@
|
|
13816
14059
|
"placeholder": isDirty ? undefined : props.placeholder,
|
13817
14060
|
"onClick:clear": onClear,
|
13818
14061
|
"onMousedown:control": onMousedownControl,
|
13819
|
-
"onFocus": () => isFocused.value = true,
|
13820
|
-
"onBlur": () => isFocused.value = false,
|
13821
14062
|
"onKeydown": onKeydown
|
13822
14063
|
}), {
|
13823
14064
|
...slots,
|
@@ -14269,8 +14510,6 @@
|
|
14269
14510
|
default: '$vuetify.fileInput.counter'
|
14270
14511
|
},
|
14271
14512
|
multiple: Boolean,
|
14272
|
-
hint: String,
|
14273
|
-
persistentHint: Boolean,
|
14274
14513
|
showSize: {
|
14275
14514
|
type: [Boolean, Number],
|
14276
14515
|
default: false,
|
@@ -14295,6 +14534,7 @@
|
|
14295
14534
|
emits: {
|
14296
14535
|
'click:control': e => true,
|
14297
14536
|
'mousedown:control': e => true,
|
14537
|
+
'update:focused': focused => true,
|
14298
14538
|
'update:modelValue': files => true
|
14299
14539
|
},
|
14300
14540
|
setup(props, _ref) {
|
@@ -14307,6 +14547,11 @@
|
|
14307
14547
|
t
|
14308
14548
|
} = useLocale();
|
14309
14549
|
const model = useProxiedModel(props, 'modelValue');
|
14550
|
+
const {
|
14551
|
+
isFocused,
|
14552
|
+
focus,
|
14553
|
+
blur
|
14554
|
+
} = useFocus(props);
|
14310
14555
|
const base = vue.computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined);
|
14311
14556
|
const totalBytes = vue.computed(() => (model.value ?? []).reduce((bytes, _ref2) => {
|
14312
14557
|
let {
|
@@ -14328,21 +14573,14 @@
|
|
14328
14573
|
});
|
14329
14574
|
const vInputRef = vue.ref();
|
14330
14575
|
const vFieldRef = vue.ref();
|
14331
|
-
const isFocused = vue.ref(false);
|
14332
14576
|
const inputRef = vue.ref();
|
14333
|
-
const messages = vue.computed(() => {
|
14334
|
-
return props.messages.length ? props.messages : props.persistentHint ? props.hint : '';
|
14335
|
-
});
|
14336
14577
|
function onFocus() {
|
14337
14578
|
if (inputRef.value !== document.activeElement) {
|
14338
14579
|
inputRef.value?.focus();
|
14339
14580
|
}
|
14340
|
-
if (!isFocused.value)
|
14341
|
-
isFocused.value = true;
|
14342
|
-
}
|
14581
|
+
if (!isFocused.value) focus();
|
14343
14582
|
}
|
14344
14583
|
function onClickPrepend(e) {
|
14345
|
-
callEvent(props['onClick:prepend'], e);
|
14346
14584
|
onControlClick(e);
|
14347
14585
|
}
|
14348
14586
|
function onControlMousedown(e) {
|
@@ -14373,18 +14611,16 @@
|
|
14373
14611
|
const [{
|
14374
14612
|
modelValue: _,
|
14375
14613
|
...inputProps
|
14376
|
-
}] =
|
14614
|
+
}] = VInput.filterProps(props);
|
14377
14615
|
const [fieldProps] = filterFieldProps(props);
|
14378
14616
|
return vue.createVNode(VInput, vue.mergeProps({
|
14379
14617
|
"ref": vInputRef,
|
14380
14618
|
"modelValue": model.value,
|
14381
14619
|
"onUpdate:modelValue": $event => model.value = $event,
|
14382
14620
|
"class": "v-file-input",
|
14383
|
-
"onClick:prepend": onClickPrepend
|
14384
|
-
"onClick:append": props['onClick:append']
|
14621
|
+
"onClick:prepend": onClickPrepend
|
14385
14622
|
}, rootAttrs, inputProps, {
|
14386
|
-
"focused": isFocused.value
|
14387
|
-
"messages": messages.value
|
14623
|
+
"focused": isFocused.value
|
14388
14624
|
}), {
|
14389
14625
|
...slots,
|
14390
14626
|
default: _ref3 => {
|
@@ -14436,7 +14672,7 @@
|
|
14436
14672
|
model.value = [...(target.files ?? [])];
|
14437
14673
|
},
|
14438
14674
|
"onFocus": onFocus,
|
14439
|
-
"onBlur":
|
14675
|
+
"onBlur": blur
|
14440
14676
|
}, slotProps, inputAttrs), null), vue.createVNode("div", {
|
14441
14677
|
"class": fieldClass
|
14442
14678
|
}, [!!model.value?.length && (slots.selection ? slots.selection({
|
@@ -15127,6 +15363,432 @@
|
|
15127
15363
|
}
|
15128
15364
|
});
|
15129
15365
|
|
15366
|
+
// Utilities
|
15367
|
+
|
15368
|
+
// Types
|
15369
|
+
|
15370
|
+
function getWeekArray(date) {
|
15371
|
+
let currentWeek = [];
|
15372
|
+
const weeks = [];
|
15373
|
+
const firstDayOfMonth = startOfMonth(date);
|
15374
|
+
const lastDayOfMonth = endOfMonth(date);
|
15375
|
+
for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
|
15376
|
+
currentWeek.push(null);
|
15377
|
+
}
|
15378
|
+
for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
|
15379
|
+
const day = new Date(date.getFullYear(), date.getMonth(), i);
|
15380
|
+
|
15381
|
+
// Add the day to the current week
|
15382
|
+
currentWeek.push(day);
|
15383
|
+
|
15384
|
+
// If the current week has 7 days, add it to the weeks array and start a new week
|
15385
|
+
if (currentWeek.length === 7) {
|
15386
|
+
weeks.push(currentWeek);
|
15387
|
+
currentWeek = [];
|
15388
|
+
}
|
15389
|
+
}
|
15390
|
+
for (let i = currentWeek.length; i < 7; i++) {
|
15391
|
+
currentWeek.push(null);
|
15392
|
+
}
|
15393
|
+
weeks.push(currentWeek);
|
15394
|
+
return weeks;
|
15395
|
+
}
|
15396
|
+
function startOfMonth(date) {
|
15397
|
+
return new Date(date.getFullYear(), date.getMonth(), 1);
|
15398
|
+
}
|
15399
|
+
function endOfMonth(date) {
|
15400
|
+
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
15401
|
+
}
|
15402
|
+
function date(value) {
|
15403
|
+
if (value == null) return null;
|
15404
|
+
if (value instanceof Date) return value;
|
15405
|
+
if (typeof value === 'string') {
|
15406
|
+
const parsed = Date.parse(value);
|
15407
|
+
if (!isNaN(parsed)) return new Date(parsed);
|
15408
|
+
}
|
15409
|
+
return null;
|
15410
|
+
}
|
15411
|
+
const firstDay = {
|
15412
|
+
'001': 1,
|
15413
|
+
AD: 1,
|
15414
|
+
AE: 6,
|
15415
|
+
AF: 6,
|
15416
|
+
AG: 0,
|
15417
|
+
AI: 1,
|
15418
|
+
AL: 1,
|
15419
|
+
AM: 1,
|
15420
|
+
AN: 1,
|
15421
|
+
AR: 1,
|
15422
|
+
AS: 0,
|
15423
|
+
AT: 1,
|
15424
|
+
AU: 0,
|
15425
|
+
AX: 1,
|
15426
|
+
AZ: 1,
|
15427
|
+
BA: 1,
|
15428
|
+
BD: 0,
|
15429
|
+
BE: 1,
|
15430
|
+
BG: 1,
|
15431
|
+
BH: 6,
|
15432
|
+
BM: 1,
|
15433
|
+
BN: 1,
|
15434
|
+
BR: 0,
|
15435
|
+
BS: 0,
|
15436
|
+
BT: 0,
|
15437
|
+
BW: 0,
|
15438
|
+
BY: 1,
|
15439
|
+
BZ: 0,
|
15440
|
+
CA: 0,
|
15441
|
+
CH: 1,
|
15442
|
+
CL: 1,
|
15443
|
+
CM: 1,
|
15444
|
+
CN: 0,
|
15445
|
+
CO: 0,
|
15446
|
+
CR: 1,
|
15447
|
+
CY: 1,
|
15448
|
+
CZ: 1,
|
15449
|
+
DE: 1,
|
15450
|
+
DJ: 6,
|
15451
|
+
DK: 1,
|
15452
|
+
DM: 0,
|
15453
|
+
DO: 0,
|
15454
|
+
DZ: 6,
|
15455
|
+
EC: 1,
|
15456
|
+
EE: 1,
|
15457
|
+
EG: 6,
|
15458
|
+
ES: 1,
|
15459
|
+
ET: 0,
|
15460
|
+
FI: 1,
|
15461
|
+
FJ: 1,
|
15462
|
+
FO: 1,
|
15463
|
+
FR: 1,
|
15464
|
+
GB: 1,
|
15465
|
+
'GB-alt-variant': 0,
|
15466
|
+
GE: 1,
|
15467
|
+
GF: 1,
|
15468
|
+
GP: 1,
|
15469
|
+
GR: 1,
|
15470
|
+
GT: 0,
|
15471
|
+
GU: 0,
|
15472
|
+
HK: 0,
|
15473
|
+
HN: 0,
|
15474
|
+
HR: 1,
|
15475
|
+
HU: 1,
|
15476
|
+
ID: 0,
|
15477
|
+
IE: 1,
|
15478
|
+
IL: 0,
|
15479
|
+
IN: 0,
|
15480
|
+
IQ: 6,
|
15481
|
+
IR: 6,
|
15482
|
+
IS: 1,
|
15483
|
+
IT: 1,
|
15484
|
+
JM: 0,
|
15485
|
+
JO: 6,
|
15486
|
+
JP: 0,
|
15487
|
+
KE: 0,
|
15488
|
+
KG: 1,
|
15489
|
+
KH: 0,
|
15490
|
+
KR: 0,
|
15491
|
+
KW: 6,
|
15492
|
+
KZ: 1,
|
15493
|
+
LA: 0,
|
15494
|
+
LB: 1,
|
15495
|
+
LI: 1,
|
15496
|
+
LK: 1,
|
15497
|
+
LT: 1,
|
15498
|
+
LU: 1,
|
15499
|
+
LV: 1,
|
15500
|
+
LY: 6,
|
15501
|
+
MC: 1,
|
15502
|
+
MD: 1,
|
15503
|
+
ME: 1,
|
15504
|
+
MH: 0,
|
15505
|
+
MK: 1,
|
15506
|
+
MM: 0,
|
15507
|
+
MN: 1,
|
15508
|
+
MO: 0,
|
15509
|
+
MQ: 1,
|
15510
|
+
MT: 0,
|
15511
|
+
MV: 5,
|
15512
|
+
MX: 0,
|
15513
|
+
MY: 1,
|
15514
|
+
MZ: 0,
|
15515
|
+
NI: 0,
|
15516
|
+
NL: 1,
|
15517
|
+
NO: 1,
|
15518
|
+
NP: 0,
|
15519
|
+
NZ: 1,
|
15520
|
+
OM: 6,
|
15521
|
+
PA: 0,
|
15522
|
+
PE: 0,
|
15523
|
+
PH: 0,
|
15524
|
+
PK: 0,
|
15525
|
+
PL: 1,
|
15526
|
+
PR: 0,
|
15527
|
+
PT: 0,
|
15528
|
+
PY: 0,
|
15529
|
+
QA: 6,
|
15530
|
+
RE: 1,
|
15531
|
+
RO: 1,
|
15532
|
+
RS: 1,
|
15533
|
+
RU: 1,
|
15534
|
+
SA: 0,
|
15535
|
+
SD: 6,
|
15536
|
+
SE: 1,
|
15537
|
+
SG: 0,
|
15538
|
+
SI: 1,
|
15539
|
+
SK: 1,
|
15540
|
+
SM: 1,
|
15541
|
+
SV: 0,
|
15542
|
+
SY: 6,
|
15543
|
+
TH: 0,
|
15544
|
+
TJ: 1,
|
15545
|
+
TM: 1,
|
15546
|
+
TR: 1,
|
15547
|
+
TT: 0,
|
15548
|
+
TW: 0,
|
15549
|
+
UA: 1,
|
15550
|
+
UM: 0,
|
15551
|
+
US: 0,
|
15552
|
+
UY: 1,
|
15553
|
+
UZ: 1,
|
15554
|
+
VA: 1,
|
15555
|
+
VE: 0,
|
15556
|
+
VI: 0,
|
15557
|
+
VN: 1,
|
15558
|
+
WS: 0,
|
15559
|
+
XK: 1,
|
15560
|
+
YE: 0,
|
15561
|
+
ZA: 0,
|
15562
|
+
ZW: 0
|
15563
|
+
};
|
15564
|
+
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
15565
|
+
function getWeekdays(locale) {
|
15566
|
+
const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
|
15567
|
+
return createRange(7).map(i => {
|
15568
|
+
const weekday = new Date(sundayJanuarySecond2000);
|
15569
|
+
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
15570
|
+
return new Intl.DateTimeFormat(locale, {
|
15571
|
+
weekday: 'long'
|
15572
|
+
}).format(weekday);
|
15573
|
+
});
|
15574
|
+
}
|
15575
|
+
function format(value, formatString, locale) {
|
15576
|
+
const date = new Date(value);
|
15577
|
+
let options = {};
|
15578
|
+
switch (formatString) {
|
15579
|
+
case 'fullDateWithWeekday':
|
15580
|
+
options = {
|
15581
|
+
weekday: 'long',
|
15582
|
+
day: 'numeric',
|
15583
|
+
month: 'long',
|
15584
|
+
year: 'numeric'
|
15585
|
+
};
|
15586
|
+
break;
|
15587
|
+
case 'normalDateWithWeekday':
|
15588
|
+
options = {
|
15589
|
+
weekday: 'short',
|
15590
|
+
day: 'numeric',
|
15591
|
+
month: 'short',
|
15592
|
+
year: 'numeric'
|
15593
|
+
};
|
15594
|
+
break;
|
15595
|
+
case 'keyboardDate':
|
15596
|
+
options = {};
|
15597
|
+
break;
|
15598
|
+
case 'monthAndDate':
|
15599
|
+
options = {
|
15600
|
+
month: 'long',
|
15601
|
+
day: 'numeric'
|
15602
|
+
};
|
15603
|
+
break;
|
15604
|
+
case 'monthAndYear':
|
15605
|
+
options = {
|
15606
|
+
month: 'long',
|
15607
|
+
year: 'numeric'
|
15608
|
+
};
|
15609
|
+
break;
|
15610
|
+
default:
|
15611
|
+
options = {
|
15612
|
+
timeZone: 'UTC',
|
15613
|
+
timeZoneName: 'short'
|
15614
|
+
};
|
15615
|
+
}
|
15616
|
+
return new Intl.DateTimeFormat(locale, options).format(date);
|
15617
|
+
}
|
15618
|
+
function addDays(date, amount) {
|
15619
|
+
const d = new Date(date);
|
15620
|
+
d.setDate(d.getDate() + amount);
|
15621
|
+
return d;
|
15622
|
+
}
|
15623
|
+
function addMonths(date, amount) {
|
15624
|
+
const d = new Date(date);
|
15625
|
+
d.setMonth(d.getMonth() + amount);
|
15626
|
+
return d;
|
15627
|
+
}
|
15628
|
+
function getYear(date) {
|
15629
|
+
return date.getFullYear();
|
15630
|
+
}
|
15631
|
+
function getMonth(date) {
|
15632
|
+
return date.getMonth();
|
15633
|
+
}
|
15634
|
+
function startOfYear(date) {
|
15635
|
+
return new Date(date.getFullYear(), 0, 1);
|
15636
|
+
}
|
15637
|
+
function endOfYear(date) {
|
15638
|
+
return new Date(date.getFullYear(), 11, 31);
|
15639
|
+
}
|
15640
|
+
function getMondayOfFirstWeekOfYear(year) {
|
15641
|
+
return new Date(year, 0, 1);
|
15642
|
+
}
|
15643
|
+
|
15644
|
+
// https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
|
15645
|
+
function getWeek(date) {
|
15646
|
+
let year = date.getFullYear();
|
15647
|
+
let d1w1 = getMondayOfFirstWeekOfYear(year);
|
15648
|
+
if (date < d1w1) {
|
15649
|
+
year = year - 1;
|
15650
|
+
d1w1 = getMondayOfFirstWeekOfYear(year);
|
15651
|
+
} else {
|
15652
|
+
const tv = getMondayOfFirstWeekOfYear(year + 1);
|
15653
|
+
if (date >= tv) {
|
15654
|
+
year = year + 1;
|
15655
|
+
d1w1 = tv;
|
15656
|
+
}
|
15657
|
+
}
|
15658
|
+
const diffTime = Math.abs(date.getTime() - d1w1.getTime());
|
15659
|
+
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
15660
|
+
return Math.floor(diffDays / 7) + 1;
|
15661
|
+
}
|
15662
|
+
function isWithinRange(date, range) {
|
15663
|
+
return isAfter(date, range[0]) && isBefore(date, range[1]);
|
15664
|
+
}
|
15665
|
+
function isValid(date) {
|
15666
|
+
const d = new Date(date);
|
15667
|
+
return d instanceof Date && !isNaN(d.getTime());
|
15668
|
+
}
|
15669
|
+
function isAfter(date, comparing) {
|
15670
|
+
return date.getTime() > comparing.getTime();
|
15671
|
+
}
|
15672
|
+
function isBefore(date, comparing) {
|
15673
|
+
return date.getTime() < comparing.getTime();
|
15674
|
+
}
|
15675
|
+
function isEqual(date, comparing) {
|
15676
|
+
return date.getTime() === comparing.getTime();
|
15677
|
+
}
|
15678
|
+
function isSameDay(date, comparing) {
|
15679
|
+
return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
|
15680
|
+
}
|
15681
|
+
function isSameMonth(date, comparing) {
|
15682
|
+
return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
|
15683
|
+
}
|
15684
|
+
function getDiff(date, comparing, unit) {
|
15685
|
+
const d = new Date(date);
|
15686
|
+
const c = new Date(comparing);
|
15687
|
+
if (unit === 'month') {
|
15688
|
+
return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
|
15689
|
+
}
|
15690
|
+
return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
|
15691
|
+
}
|
15692
|
+
function setYear(date, year) {
|
15693
|
+
const d = new Date(date);
|
15694
|
+
d.setFullYear(year);
|
15695
|
+
return d;
|
15696
|
+
}
|
15697
|
+
class VuetifyDateAdapter {
|
15698
|
+
constructor() {
|
15699
|
+
let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
|
15700
|
+
this.locale = locale;
|
15701
|
+
}
|
15702
|
+
date(value) {
|
15703
|
+
return date(value);
|
15704
|
+
}
|
15705
|
+
addDays(date, amount) {
|
15706
|
+
return addDays(date, amount);
|
15707
|
+
}
|
15708
|
+
addMonths(date, amount) {
|
15709
|
+
return addMonths(date, amount);
|
15710
|
+
}
|
15711
|
+
getWeekArray(date) {
|
15712
|
+
return getWeekArray(date);
|
15713
|
+
}
|
15714
|
+
startOfMonth(date) {
|
15715
|
+
return startOfMonth(date);
|
15716
|
+
}
|
15717
|
+
endOfMonth(date) {
|
15718
|
+
return endOfMonth(date);
|
15719
|
+
}
|
15720
|
+
format(date, formatString) {
|
15721
|
+
return format(date, formatString, this.locale);
|
15722
|
+
}
|
15723
|
+
isEqual(date, comparing) {
|
15724
|
+
return isEqual(date, comparing);
|
15725
|
+
}
|
15726
|
+
isValid(date) {
|
15727
|
+
return isValid(date);
|
15728
|
+
}
|
15729
|
+
isWithinRange(date, range) {
|
15730
|
+
return isWithinRange(date, range);
|
15731
|
+
}
|
15732
|
+
isAfter(date, comparing) {
|
15733
|
+
return isAfter(date, comparing);
|
15734
|
+
}
|
15735
|
+
isSameDay(date, comparing) {
|
15736
|
+
return isSameDay(date, comparing);
|
15737
|
+
}
|
15738
|
+
isSameMonth(date, comparing) {
|
15739
|
+
return isSameMonth(date, comparing);
|
15740
|
+
}
|
15741
|
+
setYear(date, year) {
|
15742
|
+
return setYear(date, year);
|
15743
|
+
}
|
15744
|
+
getDiff(date, comparing, unit) {
|
15745
|
+
return getDiff(date, comparing, unit);
|
15746
|
+
}
|
15747
|
+
getWeek(date) {
|
15748
|
+
return getWeek(date);
|
15749
|
+
}
|
15750
|
+
getWeekdays() {
|
15751
|
+
return getWeekdays(this.locale);
|
15752
|
+
}
|
15753
|
+
getYear(date) {
|
15754
|
+
return getYear(date);
|
15755
|
+
}
|
15756
|
+
getMonth(date) {
|
15757
|
+
return getMonth(date);
|
15758
|
+
}
|
15759
|
+
startOfYear(date) {
|
15760
|
+
return startOfYear(date);
|
15761
|
+
}
|
15762
|
+
endOfYear(date) {
|
15763
|
+
return endOfYear(date);
|
15764
|
+
}
|
15765
|
+
}
|
15766
|
+
|
15767
|
+
// Composables
|
15768
|
+
|
15769
|
+
// Types
|
15770
|
+
|
15771
|
+
const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
|
15772
|
+
function createDate(options) {
|
15773
|
+
return options ?? {
|
15774
|
+
adapter: VuetifyDateAdapter
|
15775
|
+
};
|
15776
|
+
}
|
15777
|
+
function useDate(props) {
|
15778
|
+
const date = vue.inject(DateAdapterSymbol);
|
15779
|
+
const locale = useLocale();
|
15780
|
+
if (!date) throw new Error('[Vuetify] Could not find injected date');
|
15781
|
+
|
15782
|
+
// eslint-disable-next-line new-cap
|
15783
|
+
const instance = new date.adapter(locale.current.value);
|
15784
|
+
vue.watch(locale.current, val => {
|
15785
|
+
instance.locale = val;
|
15786
|
+
}, {
|
15787
|
+
immediate: true
|
15788
|
+
});
|
15789
|
+
return instance;
|
15790
|
+
}
|
15791
|
+
|
15130
15792
|
function useSticky(_ref) {
|
15131
15793
|
let {
|
15132
15794
|
rootEl,
|
@@ -16131,7 +16793,7 @@
|
|
16131
16793
|
const model = useProxiedModel(props, 'modelValue');
|
16132
16794
|
useRender(() => {
|
16133
16795
|
const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
|
16134
|
-
const [inputProps, _1] =
|
16796
|
+
const [inputProps, _1] = VInput.filterProps(props);
|
16135
16797
|
const [controlProps, _2] = VSelectionControl.filterProps(props);
|
16136
16798
|
const label = slots.label ? slots.label({
|
16137
16799
|
label: props.label,
|
@@ -16196,11 +16858,14 @@
|
|
16196
16858
|
},
|
16197
16859
|
emits: {
|
16198
16860
|
'update:focused': value => true,
|
16199
|
-
'update:modelValue': value => true
|
16861
|
+
'update:modelValue': value => true,
|
16862
|
+
end: value => true,
|
16863
|
+
start: value => true
|
16200
16864
|
},
|
16201
16865
|
setup(props, _ref) {
|
16202
16866
|
let {
|
16203
|
-
slots
|
16867
|
+
slots,
|
16868
|
+
emit
|
16204
16869
|
} = _ref;
|
16205
16870
|
const startThumbRef = vue.ref();
|
16206
16871
|
const stopThumbRef = vue.ref();
|
@@ -16213,6 +16878,11 @@
|
|
16213
16878
|
const b = Math.abs(stopOffset);
|
16214
16879
|
return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
|
16215
16880
|
}
|
16881
|
+
const steps = useSteps(props);
|
16882
|
+
const model = useProxiedModel(props, 'modelValue', undefined, arr => {
|
16883
|
+
if (!arr?.length) return [0, 0];
|
16884
|
+
return arr.map(value => steps.roundValue(value));
|
16885
|
+
});
|
16216
16886
|
const {
|
16217
16887
|
activeThumbRef,
|
16218
16888
|
hasLabels,
|
@@ -16222,34 +16892,37 @@
|
|
16222
16892
|
onSliderMousedown,
|
16223
16893
|
onSliderTouchstart,
|
16224
16894
|
position,
|
16225
|
-
roundValue,
|
16226
16895
|
trackContainerRef
|
16227
16896
|
} = useSlider({
|
16228
|
-
/* eslint-disable @typescript-eslint/no-use-before-define */
|
16229
16897
|
props,
|
16230
|
-
|
16231
|
-
|
16898
|
+
steps,
|
16899
|
+
onSliderStart: () => {
|
16900
|
+
emit('start', model.value);
|
16901
|
+
},
|
16902
|
+
onSliderEnd: _ref2 => {
|
16903
|
+
let {
|
16904
|
+
value
|
16905
|
+
} = _ref2;
|
16906
|
+
const newValue = activeThumbRef.value === startThumbRef.value?.$el ? [value, model.value[1]] : [model.value[0], value];
|
16907
|
+
model.value = newValue;
|
16908
|
+
emit('end', newValue);
|
16232
16909
|
},
|
16233
|
-
|
16910
|
+
onSliderMove: _ref3 => {
|
16911
|
+
let {
|
16912
|
+
value
|
16913
|
+
} = _ref3;
|
16234
16914
|
const [start, stop] = model.value;
|
16235
16915
|
if (!props.strict && start === stop && start !== min.value) {
|
16236
|
-
activeThumbRef.value =
|
16916
|
+
activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
|
16237
16917
|
activeThumbRef.value?.focus();
|
16238
16918
|
}
|
16239
16919
|
if (activeThumbRef.value === startThumbRef.value?.$el) {
|
16240
|
-
model.value = [Math.min(
|
16920
|
+
model.value = [Math.min(value, stop), stop];
|
16241
16921
|
} else {
|
16242
|
-
model.value = [start, Math.max(start,
|
16922
|
+
model.value = [start, Math.max(start, value)];
|
16243
16923
|
}
|
16244
16924
|
},
|
16245
16925
|
getActiveThumb
|
16246
|
-
/* eslint-enable @typescript-eslint/no-use-before-define */
|
16247
|
-
});
|
16248
|
-
|
16249
|
-
const model = useProxiedModel(props, 'modelValue', undefined, arr => {
|
16250
|
-
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain
|
16251
|
-
if (!arr || !arr.length) return [0, 0];
|
16252
|
-
return arr.map(value => roundValue(value));
|
16253
16926
|
});
|
16254
16927
|
const {
|
16255
16928
|
isFocused,
|
@@ -16259,7 +16932,7 @@
|
|
16259
16932
|
const trackStart = vue.computed(() => position(model.value[0]));
|
16260
16933
|
const trackStop = vue.computed(() => position(model.value[1]));
|
16261
16934
|
useRender(() => {
|
16262
|
-
const [inputProps, _] =
|
16935
|
+
const [inputProps, _] = VInput.filterProps(props);
|
16263
16936
|
const hasPrepend = !!(props.label || slots.label || slots.prepend);
|
16264
16937
|
return vue.createVNode(VInput, vue.mergeProps({
|
16265
16938
|
"class": ['v-slider', 'v-range-slider', {
|
@@ -16277,11 +16950,11 @@
|
|
16277
16950
|
"class": "v-slider__label",
|
16278
16951
|
"text": props.label
|
16279
16952
|
}, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
|
16280
|
-
default:
|
16953
|
+
default: _ref4 => {
|
16281
16954
|
let {
|
16282
16955
|
id,
|
16283
16956
|
messagesId
|
16284
|
-
} =
|
16957
|
+
} = _ref4;
|
16285
16958
|
return vue.createVNode("div", {
|
16286
16959
|
"class": "v-slider__container",
|
16287
16960
|
"onMousedown": onSliderMousedown,
|
@@ -17104,10 +17777,12 @@
|
|
17104
17777
|
}
|
17105
17778
|
useRender(() => {
|
17106
17779
|
const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
|
17107
|
-
const [inputProps, _1] =
|
17780
|
+
const [inputProps, _1] = VInput.filterProps(props);
|
17108
17781
|
const [controlProps, _2] = VSelectionControl.filterProps(props);
|
17109
17782
|
const control = vue.ref();
|
17110
|
-
function onClick() {
|
17783
|
+
function onClick(e) {
|
17784
|
+
e.stopPropagation();
|
17785
|
+
e.preventDefault();
|
17111
17786
|
control.value?.input?.click();
|
17112
17787
|
}
|
17113
17788
|
return vue.createVNode(VInput, vue.mergeProps({
|
@@ -17468,8 +18143,6 @@
|
|
17468
18143
|
autofocus: Boolean,
|
17469
18144
|
counter: [Boolean, Number, String],
|
17470
18145
|
counterValue: Function,
|
17471
|
-
hint: String,
|
17472
|
-
persistentHint: Boolean,
|
17473
18146
|
prefix: String,
|
17474
18147
|
placeholder: String,
|
17475
18148
|
persistentPlaceholder: Boolean,
|
@@ -17524,9 +18197,6 @@
|
|
17524
18197
|
const controlHeight = vue.ref('');
|
17525
18198
|
const textareaRef = vue.ref();
|
17526
18199
|
const isActive = vue.computed(() => isFocused.value || props.persistentPlaceholder);
|
17527
|
-
const messages = vue.computed(() => {
|
17528
|
-
return props.messages.length ? props.messages : isFocused.value || props.persistentHint ? props.hint : '';
|
17529
|
-
});
|
17530
18200
|
function onFocus() {
|
17531
18201
|
if (textareaRef.value !== document.activeElement) {
|
17532
18202
|
textareaRef.value?.focus();
|
@@ -17598,7 +18268,7 @@
|
|
17598
18268
|
const [{
|
17599
18269
|
modelValue: _,
|
17600
18270
|
...inputProps
|
17601
|
-
}] =
|
18271
|
+
}] = VInput.filterProps(props);
|
17602
18272
|
const [fieldProps] = filterFieldProps(props);
|
17603
18273
|
return vue.createVNode(VInput, vue.mergeProps({
|
17604
18274
|
"ref": vInputRef,
|
@@ -17612,12 +18282,9 @@
|
|
17612
18282
|
'v-textarea--auto-grow': props.autoGrow,
|
17613
18283
|
'v-textarea--no-resize': props.noResize || props.autoGrow,
|
17614
18284
|
'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
|
17615
|
-
}]
|
17616
|
-
"onClick:prepend": props['onClick:prepend'],
|
17617
|
-
"onClick:append": props['onClick:append']
|
18285
|
+
}]
|
17618
18286
|
}, rootAttrs, inputProps, {
|
17619
|
-
"focused": isFocused.value
|
17620
|
-
"messages": messages.value
|
18287
|
+
"focused": isFocused.value
|
17621
18288
|
}), {
|
17622
18289
|
...slots,
|
17623
18290
|
default: _ref2 => {
|
@@ -19099,56 +19766,64 @@
|
|
19099
19766
|
const {
|
19100
19767
|
t
|
19101
19768
|
} = useLocale();
|
19102
|
-
useRender(() =>
|
19103
|
-
|
19104
|
-
|
19105
|
-
|
19106
|
-
|
19107
|
-
|
19108
|
-
|
19109
|
-
|
19110
|
-
|
19111
|
-
|
19112
|
-
|
19113
|
-
|
19114
|
-
|
19769
|
+
useRender(() => {
|
19770
|
+
if (props.loading && slots.loading) {
|
19771
|
+
return vue.createVNode("tr", {
|
19772
|
+
"class": "v-data-table-rows-no-data",
|
19773
|
+
"key": "loading"
|
19774
|
+
}, [vue.createVNode("td", {
|
19775
|
+
"colspan": columns.value.length
|
19776
|
+
}, [slots.loading()])]);
|
19777
|
+
}
|
19778
|
+
if (!props.loading && !props.items.length && !props.hideNoData && slots['no-data']) {
|
19779
|
+
return vue.createVNode("tr", {
|
19780
|
+
"class": "v-data-table-rows-no-data",
|
19781
|
+
"key": "no-data"
|
19782
|
+
}, [vue.createVNode("td", {
|
19783
|
+
"colspan": columns.value.length
|
19784
|
+
}, [slots['no-data']?.() ?? t(props.noDataText)])]);
|
19785
|
+
}
|
19786
|
+
return vue.createVNode(vue.Fragment, null, [props.items.map((item, index) => {
|
19787
|
+
if (item.type === 'group-header') {
|
19788
|
+
return slots['group-header'] ? slots['group-header']({
|
19789
|
+
index,
|
19790
|
+
item,
|
19791
|
+
columns: columns.value,
|
19792
|
+
isExpanded,
|
19793
|
+
toggleExpand,
|
19794
|
+
isSelected,
|
19795
|
+
toggleSelect,
|
19796
|
+
toggleGroup,
|
19797
|
+
isGroupOpen
|
19798
|
+
}) : vue.createVNode(VDataTableGroupHeaderRow, {
|
19799
|
+
"key": `group-header_${item.id}`,
|
19800
|
+
"item": item
|
19801
|
+
}, slots);
|
19802
|
+
}
|
19803
|
+
const slotProps = {
|
19115
19804
|
index,
|
19116
19805
|
item,
|
19117
19806
|
columns: columns.value,
|
19118
19807
|
isExpanded,
|
19119
19808
|
toggleExpand,
|
19120
19809
|
isSelected,
|
19121
|
-
toggleSelect
|
19122
|
-
|
19123
|
-
|
19124
|
-
|
19125
|
-
"
|
19810
|
+
toggleSelect
|
19811
|
+
};
|
19812
|
+
return vue.createVNode(vue.Fragment, null, [slots.item ? slots.item(slotProps) : vue.createVNode(VDataTableRow, {
|
19813
|
+
"key": `item_${item.value}`,
|
19814
|
+
"onClick": expandOnClick.value || props['onClick:row'] ? event => {
|
19815
|
+
if (expandOnClick.value) {
|
19816
|
+
toggleExpand(item);
|
19817
|
+
}
|
19818
|
+
props['onClick:row']?.(event, {
|
19819
|
+
item
|
19820
|
+
});
|
19821
|
+
} : undefined,
|
19822
|
+
"index": index,
|
19126
19823
|
"item": item
|
19127
|
-
}, slots);
|
19128
|
-
}
|
19129
|
-
|
19130
|
-
index,
|
19131
|
-
item,
|
19132
|
-
columns: columns.value,
|
19133
|
-
isExpanded,
|
19134
|
-
toggleExpand,
|
19135
|
-
isSelected,
|
19136
|
-
toggleSelect
|
19137
|
-
};
|
19138
|
-
return vue.createVNode(vue.Fragment, null, [slots.item ? slots.item(slotProps) : vue.createVNode(VDataTableRow, {
|
19139
|
-
"key": `item_${item.value}`,
|
19140
|
-
"onClick": expandOnClick.value || props['onClick:row'] ? event => {
|
19141
|
-
if (expandOnClick.value) {
|
19142
|
-
toggleExpand(item);
|
19143
|
-
}
|
19144
|
-
props['onClick:row']?.(event, {
|
19145
|
-
item
|
19146
|
-
});
|
19147
|
-
} : undefined,
|
19148
|
-
"index": index,
|
19149
|
-
"item": item
|
19150
|
-
}, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);
|
19151
|
-
})]));
|
19824
|
+
}, slots), isExpanded(item) && slots['expanded-row']?.(slotProps)]);
|
19825
|
+
})]);
|
19826
|
+
});
|
19152
19827
|
return {};
|
19153
19828
|
}
|
19154
19829
|
});
|
@@ -19423,7 +20098,8 @@
|
|
19423
20098
|
page: page.value,
|
19424
20099
|
itemsPerPage: itemsPerPage.value,
|
19425
20100
|
sortBy: sortBy.value,
|
19426
|
-
groupBy: groupBy.value
|
20101
|
+
groupBy: groupBy.value,
|
20102
|
+
search: search.value
|
19427
20103
|
}));
|
19428
20104
|
|
19429
20105
|
// Reset page when searching
|
@@ -19456,12 +20132,12 @@
|
|
19456
20132
|
width: [String, Number],
|
19457
20133
|
fixedHeader: Boolean,
|
19458
20134
|
fixedFooter: Boolean,
|
19459
|
-
'onClick:row': Function
|
20135
|
+
'onClick:row': Function,
|
20136
|
+
search: String
|
19460
20137
|
}, 'v-data-table');
|
19461
20138
|
const VDataTable = genericComponent()({
|
19462
20139
|
name: 'VDataTable',
|
19463
20140
|
props: {
|
19464
|
-
search: String,
|
19465
20141
|
...makeVDataTableProps(),
|
19466
20142
|
...makeDataTableExpandProps(),
|
19467
20143
|
...makeDataTableGroupProps(),
|
@@ -19676,7 +20352,6 @@
|
|
19676
20352
|
const VDataTableVirtual = genericComponent()({
|
19677
20353
|
name: 'VDataTableVirtual',
|
19678
20354
|
props: {
|
19679
|
-
search: String,
|
19680
20355
|
...makeVDataTableProps(),
|
19681
20356
|
...makeVDataTableProps(),
|
19682
20357
|
...makeDataTableGroupProps(),
|
@@ -19915,7 +20590,8 @@
|
|
19915
20590
|
page,
|
19916
20591
|
itemsPerPage,
|
19917
20592
|
sortBy,
|
19918
|
-
groupBy
|
20593
|
+
groupBy,
|
20594
|
+
search: vue.toRef(props, 'search')
|
19919
20595
|
});
|
19920
20596
|
vue.provide('v-data-table', {
|
19921
20597
|
toggleSort,
|
@@ -19975,6 +20651,7 @@
|
|
19975
20651
|
'date-picker': 'list-item, heading, divider, date-picker-options, date-picker-days, actions',
|
19976
20652
|
'date-picker-options': 'text, avatar@2',
|
19977
20653
|
'date-picker-days': 'avatar@28',
|
20654
|
+
divider: 'divider',
|
19978
20655
|
heading: 'heading',
|
19979
20656
|
image: 'image',
|
19980
20657
|
'list-item': 'text',
|
@@ -20382,6 +21059,7 @@
|
|
20382
21059
|
const theme = createTheme(options.theme);
|
20383
21060
|
const icons = createIcons(options.icons);
|
20384
21061
|
const locale = createLocale(options.locale);
|
21062
|
+
const date = createDate(options.date);
|
20385
21063
|
const install = app => {
|
20386
21064
|
for (const key in directives) {
|
20387
21065
|
app.directive(key, directives[key]);
|
@@ -20402,6 +21080,7 @@
|
|
20402
21080
|
app.provide(ThemeSymbol, theme);
|
20403
21081
|
app.provide(IconSymbol, icons);
|
20404
21082
|
app.provide(LocaleSymbol, locale);
|
21083
|
+
app.provide(DateAdapterSymbol, date);
|
20405
21084
|
if (IN_BROWSER && options.ssr) {
|
20406
21085
|
if (app.$nuxt) {
|
20407
21086
|
app.$nuxt.hook('app:suspense:resolve', () => {
|
@@ -20429,7 +21108,8 @@
|
|
20429
21108
|
display: inject.call(this, DisplaySymbol),
|
20430
21109
|
theme: inject.call(this, ThemeSymbol),
|
20431
21110
|
icons: inject.call(this, IconSymbol),
|
20432
|
-
locale: inject.call(this, LocaleSymbol)
|
21111
|
+
locale: inject.call(this, LocaleSymbol),
|
21112
|
+
date: inject.call(this, DateAdapterSymbol)
|
20433
21113
|
});
|
20434
21114
|
}
|
20435
21115
|
}
|
@@ -20442,10 +21122,11 @@
|
|
20442
21122
|
display,
|
20443
21123
|
theme,
|
20444
21124
|
icons,
|
20445
|
-
locale
|
21125
|
+
locale,
|
21126
|
+
date
|
20446
21127
|
};
|
20447
21128
|
}
|
20448
|
-
const version$1 = "4.0.0-dev-
|
21129
|
+
const version$1 = "4.0.0-dev-20230421.0";
|
20449
21130
|
createVuetify$1.version = version$1;
|
20450
21131
|
|
20451
21132
|
// Vue's inject() can only be used in setup
|
@@ -20457,7 +21138,7 @@
|
|
20457
21138
|
}
|
20458
21139
|
}
|
20459
21140
|
|
20460
|
-
const version = "4.0.0-dev-
|
21141
|
+
const version = "4.0.0-dev-20230421.0";
|
20461
21142
|
|
20462
21143
|
const createVuetify = function () {
|
20463
21144
|
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
@@ -20471,6 +21152,7 @@
|
|
20471
21152
|
exports.components = components;
|
20472
21153
|
exports.createVuetify = createVuetify;
|
20473
21154
|
exports.directives = directives;
|
21155
|
+
exports.useDate = useDate;
|
20474
21156
|
exports.useDisplay = useDisplay;
|
20475
21157
|
exports.useLayout = useLayout;
|
20476
21158
|
exports.useLocale = useLocale;
|