@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.esm.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
|
*/
|
@@ -203,10 +203,6 @@ function clamp(value) {
|
|
203
203
|
let max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
204
204
|
return Math.max(min, Math.min(max, value));
|
205
205
|
}
|
206
|
-
function getDecimals(value) {
|
207
|
-
const trimmedStr = value.toString().trim();
|
208
|
-
return trimmedStr.includes('.') ? trimmedStr.length - trimmedStr.indexOf('.') - 1 : 0;
|
209
|
-
}
|
210
206
|
function padEnd(str, length) {
|
211
207
|
let char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
|
212
208
|
return str + char.repeat(Math.max(0, length - str.length));
|
@@ -3249,6 +3245,98 @@ const VToolbar = genericComponent()({
|
|
3249
3245
|
|
3250
3246
|
// Utilities
|
3251
3247
|
|
3248
|
+
// Types
|
3249
|
+
|
3250
|
+
// Composables
|
3251
|
+
const makeScrollProps = propsFactory({
|
3252
|
+
scrollTarget: {
|
3253
|
+
type: String
|
3254
|
+
},
|
3255
|
+
scrollThreshold: {
|
3256
|
+
type: [String, Number]
|
3257
|
+
}
|
3258
|
+
}, 'scroll');
|
3259
|
+
function useScroll(props) {
|
3260
|
+
let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
3261
|
+
const {
|
3262
|
+
thresholdMetCallback,
|
3263
|
+
scrollThreshold,
|
3264
|
+
canScroll
|
3265
|
+
} = args;
|
3266
|
+
let previousScroll = 0;
|
3267
|
+
const target = ref(null);
|
3268
|
+
const currentScroll = ref(0);
|
3269
|
+
const savedScroll = ref(0);
|
3270
|
+
const currentThreshold = ref(0);
|
3271
|
+
const isScrollActive = ref(false);
|
3272
|
+
const isScrollingUp = ref(false);
|
3273
|
+
const computedScrollThreshold = computed(() => {
|
3274
|
+
return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
|
3275
|
+
});
|
3276
|
+
const onScroll = () => {
|
3277
|
+
const targetEl = target.value;
|
3278
|
+
if (!targetEl || canScroll && !canScroll.value) return;
|
3279
|
+
previousScroll = currentScroll.value;
|
3280
|
+
currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
|
3281
|
+
isScrollingUp.value = currentScroll.value < previousScroll;
|
3282
|
+
currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
|
3283
|
+
};
|
3284
|
+
watch(isScrollingUp, () => {
|
3285
|
+
savedScroll.value = savedScroll.value || currentScroll.value;
|
3286
|
+
});
|
3287
|
+
watch(isScrollActive, () => {
|
3288
|
+
savedScroll.value = 0;
|
3289
|
+
});
|
3290
|
+
onMounted(() => {
|
3291
|
+
watch(() => props.scrollTarget, scrollTarget => {
|
3292
|
+
const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
|
3293
|
+
if (!newTarget) {
|
3294
|
+
consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, getCurrentInstance$1());
|
3295
|
+
return;
|
3296
|
+
}
|
3297
|
+
if (newTarget === target.value) return;
|
3298
|
+
target.value?.removeEventListener('scroll', onScroll);
|
3299
|
+
target.value = newTarget;
|
3300
|
+
target.value.addEventListener('scroll', onScroll, {
|
3301
|
+
passive: true
|
3302
|
+
});
|
3303
|
+
}, {
|
3304
|
+
immediate: true
|
3305
|
+
});
|
3306
|
+
});
|
3307
|
+
onBeforeUnmount(() => {
|
3308
|
+
target.value?.removeEventListener('scroll', onScroll);
|
3309
|
+
});
|
3310
|
+
thresholdMetCallback && watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
|
3311
|
+
thresholdMet && thresholdMetCallback({
|
3312
|
+
currentThreshold: currentThreshold.value,
|
3313
|
+
isScrollingUp: isScrollingUp.value,
|
3314
|
+
savedScroll
|
3315
|
+
});
|
3316
|
+
}, {
|
3317
|
+
immediate: true
|
3318
|
+
});
|
3319
|
+
|
3320
|
+
// Do we need this? If yes - seems that
|
3321
|
+
// there's no need to expose onScroll
|
3322
|
+
canScroll && watch(canScroll, onScroll, {
|
3323
|
+
immediate: true
|
3324
|
+
});
|
3325
|
+
return {
|
3326
|
+
computedScrollThreshold,
|
3327
|
+
currentScroll,
|
3328
|
+
currentThreshold,
|
3329
|
+
isScrollActive,
|
3330
|
+
// required only for testing
|
3331
|
+
// probably can be removed
|
3332
|
+
// later (2 chars chlng)
|
3333
|
+
isScrollingUp,
|
3334
|
+
savedScroll
|
3335
|
+
};
|
3336
|
+
}
|
3337
|
+
|
3338
|
+
// Utilities
|
3339
|
+
|
3252
3340
|
// Composables
|
3253
3341
|
function useSsrBoot() {
|
3254
3342
|
const isBooted = ref(false);
|
@@ -3271,13 +3359,7 @@ function useSsrBoot() {
|
|
3271
3359
|
const VAppBar = genericComponent()({
|
3272
3360
|
name: 'VAppBar',
|
3273
3361
|
props: {
|
3274
|
-
|
3275
|
-
// hideOnScroll: Boolean
|
3276
|
-
// invertedScroll: Boolean
|
3277
|
-
// collapseOnScroll: Boolean
|
3278
|
-
// elevateOnScroll: Boolean
|
3279
|
-
// shrinkOnScroll: Boolean
|
3280
|
-
// fadeImageOnScroll: Boolean
|
3362
|
+
scrollBehavior: String,
|
3281
3363
|
modelValue: {
|
3282
3364
|
type: Boolean,
|
3283
3365
|
default: true
|
@@ -3289,6 +3371,7 @@ const VAppBar = genericComponent()({
|
|
3289
3371
|
},
|
3290
3372
|
...makeVToolbarProps(),
|
3291
3373
|
...makeLayoutItemProps(),
|
3374
|
+
...makeScrollProps(),
|
3292
3375
|
height: {
|
3293
3376
|
type: [Number, String],
|
3294
3377
|
default: 64
|
@@ -3303,11 +3386,63 @@ const VAppBar = genericComponent()({
|
|
3303
3386
|
} = _ref;
|
3304
3387
|
const vToolbarRef = ref();
|
3305
3388
|
const isActive = useProxiedModel(props, 'modelValue');
|
3389
|
+
const scrollBehavior = computed(() => {
|
3390
|
+
const behavior = new Set(props.scrollBehavior?.split(' ') ?? []);
|
3391
|
+
return {
|
3392
|
+
hide: behavior.has('hide'),
|
3393
|
+
// fullyHide: behavior.has('fully-hide'),
|
3394
|
+
inverted: behavior.has('inverted'),
|
3395
|
+
collapse: behavior.has('collapse'),
|
3396
|
+
elevate: behavior.has('elevate'),
|
3397
|
+
fadeImage: behavior.has('fade-image')
|
3398
|
+
// shrink: behavior.has('shrink'),
|
3399
|
+
};
|
3400
|
+
});
|
3401
|
+
|
3402
|
+
const canScroll = computed(() => {
|
3403
|
+
const behavior = scrollBehavior.value;
|
3404
|
+
return behavior.hide ||
|
3405
|
+
// behavior.fullyHide ||
|
3406
|
+
behavior.inverted || behavior.collapse || behavior.elevate || behavior.fadeImage ||
|
3407
|
+
// behavior.shrink ||
|
3408
|
+
!isActive.value;
|
3409
|
+
});
|
3410
|
+
const {
|
3411
|
+
currentScroll,
|
3412
|
+
currentThreshold,
|
3413
|
+
computedScrollThreshold,
|
3414
|
+
isScrollingUp
|
3415
|
+
} = useScroll(props, {
|
3416
|
+
canScroll
|
3417
|
+
});
|
3418
|
+
const isCollapsed = computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
|
3419
|
+
const isFlat = computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
|
3420
|
+
const scrollRatio = computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
|
3421
|
+
const opacity = computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
|
3306
3422
|
const height = computed(() => {
|
3423
|
+
if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
|
3307
3424
|
const height = vToolbarRef.value?.contentHeight ?? 0;
|
3308
3425
|
const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
|
3309
3426
|
return height + extensionHeight;
|
3310
3427
|
});
|
3428
|
+
function setActive() {
|
3429
|
+
const val = currentScroll.value;
|
3430
|
+
if (scrollBehavior.value.hide) {
|
3431
|
+
if (scrollBehavior.value.inverted) {
|
3432
|
+
isActive.value = val > computedScrollThreshold.value;
|
3433
|
+
} else {
|
3434
|
+
isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
|
3435
|
+
}
|
3436
|
+
} else if (scrollBehavior.value.inverted) {
|
3437
|
+
isActive.value = currentScroll.value === 0;
|
3438
|
+
} else {
|
3439
|
+
isActive.value = true;
|
3440
|
+
}
|
3441
|
+
}
|
3442
|
+
watch(currentScroll, setActive, {
|
3443
|
+
immediate: true
|
3444
|
+
});
|
3445
|
+
watch(scrollBehavior, setActive);
|
3311
3446
|
const {
|
3312
3447
|
ssrBootStyles
|
3313
3448
|
} = useSsrBoot();
|
@@ -3318,7 +3453,7 @@ const VAppBar = genericComponent()({
|
|
3318
3453
|
order: computed(() => parseInt(props.order, 10)),
|
3319
3454
|
position: toRef(props, 'location'),
|
3320
3455
|
layoutSize: height,
|
3321
|
-
elementSize:
|
3456
|
+
elementSize: ref(undefined),
|
3322
3457
|
active: isActive,
|
3323
3458
|
absolute: toRef(props, 'absolute')
|
3324
3459
|
});
|
@@ -3331,10 +3466,14 @@ const VAppBar = genericComponent()({
|
|
3331
3466
|
}],
|
3332
3467
|
"style": {
|
3333
3468
|
...layoutItemStyles.value,
|
3469
|
+
'--v-toolbar-image-opacity': opacity.value,
|
3334
3470
|
height: undefined,
|
3335
3471
|
...ssrBootStyles.value
|
3336
3472
|
}
|
3337
|
-
}, toolbarProps
|
3473
|
+
}, toolbarProps, {
|
3474
|
+
"collapse": isCollapsed.value,
|
3475
|
+
"flat": isFlat.value
|
3476
|
+
}), slots);
|
3338
3477
|
});
|
3339
3478
|
return {};
|
3340
3479
|
}
|
@@ -5292,7 +5431,8 @@ const VFieldLabel = genericComponent()({
|
|
5292
5431
|
|
5293
5432
|
// Composables
|
5294
5433
|
const makeFocusProps = propsFactory({
|
5295
|
-
focused: Boolean
|
5434
|
+
focused: Boolean,
|
5435
|
+
'onUpdate:focused': EventProp()
|
5296
5436
|
}, 'focus');
|
5297
5437
|
function useFocus(props) {
|
5298
5438
|
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
|
@@ -5887,6 +6027,8 @@ const makeVInputProps = propsFactory({
|
|
5887
6027
|
appendIcon: IconValue,
|
5888
6028
|
prependIcon: IconValue,
|
5889
6029
|
hideDetails: [Boolean, String],
|
6030
|
+
hint: String,
|
6031
|
+
persistentHint: Boolean,
|
5890
6032
|
messages: {
|
5891
6033
|
type: [Array, String],
|
5892
6034
|
default: () => []
|
@@ -5950,10 +6092,19 @@ const VInput = genericComponent()({
|
|
5950
6092
|
resetValidation,
|
5951
6093
|
validate
|
5952
6094
|
}));
|
6095
|
+
const messages = computed(() => {
|
6096
|
+
if (errorMessages.value.length > 0) {
|
6097
|
+
return errorMessages.value;
|
6098
|
+
} else if (props.hint && (props.persistentHint || props.focused)) {
|
6099
|
+
return props.hint;
|
6100
|
+
} else {
|
6101
|
+
return props.messages;
|
6102
|
+
}
|
6103
|
+
});
|
5953
6104
|
useRender(() => {
|
5954
6105
|
const hasPrepend = !!(slots.prepend || props.prependIcon);
|
5955
6106
|
const hasAppend = !!(slots.append || props.appendIcon);
|
5956
|
-
const hasMessages =
|
6107
|
+
const hasMessages = messages.value.length > 0;
|
5957
6108
|
const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
|
5958
6109
|
return createVNode("div", {
|
5959
6110
|
"class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value]
|
@@ -5976,7 +6127,7 @@ const VInput = genericComponent()({
|
|
5976
6127
|
}, [createVNode(VMessages, {
|
5977
6128
|
"id": messagesId.value,
|
5978
6129
|
"active": hasMessages,
|
5979
|
-
"messages":
|
6130
|
+
"messages": messages.value
|
5980
6131
|
}, {
|
5981
6132
|
message: slots.message
|
5982
6133
|
}), slots.details?.(slotProps.value)])]);
|
@@ -5988,10 +6139,6 @@ const VInput = genericComponent()({
|
|
5988
6139
|
};
|
5989
6140
|
}
|
5990
6141
|
});
|
5991
|
-
function filterInputProps(props) {
|
5992
|
-
const keys = Object.keys(VInput.props).filter(k => !isOn(k));
|
5993
|
-
return pick(props, keys);
|
5994
|
-
}
|
5995
6142
|
|
5996
6143
|
const VCounter = genericComponent()({
|
5997
6144
|
name: 'VCounter',
|
@@ -6117,8 +6264,6 @@ const makeVTextFieldProps = propsFactory({
|
|
6117
6264
|
autofocus: Boolean,
|
6118
6265
|
counter: [Boolean, Number, String],
|
6119
6266
|
counterValue: Function,
|
6120
|
-
hint: String,
|
6121
|
-
persistentHint: Boolean,
|
6122
6267
|
prefix: String,
|
6123
6268
|
placeholder: String,
|
6124
6269
|
persistentPlaceholder: Boolean,
|
@@ -6173,9 +6318,6 @@ const VTextField = genericComponent()({
|
|
6173
6318
|
const vFieldRef = ref();
|
6174
6319
|
const inputRef = ref();
|
6175
6320
|
const isActive = computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value);
|
6176
|
-
const messages = computed(() => {
|
6177
|
-
return props.messages.length ? props.messages : isFocused.value || props.persistentHint ? props.hint : '';
|
6178
|
-
});
|
6179
6321
|
function onFocus() {
|
6180
6322
|
if (inputRef.value !== document.activeElement) {
|
6181
6323
|
inputRef.value?.focus();
|
@@ -6218,7 +6360,7 @@ const VTextField = genericComponent()({
|
|
6218
6360
|
const [{
|
6219
6361
|
modelValue: _,
|
6220
6362
|
...inputProps
|
6221
|
-
}] =
|
6363
|
+
}] = VInput.filterProps(props);
|
6222
6364
|
const [fieldProps] = filterFieldProps(props);
|
6223
6365
|
return createVNode(VInput, mergeProps({
|
6224
6366
|
"ref": vInputRef,
|
@@ -6228,12 +6370,9 @@ const VTextField = genericComponent()({
|
|
6228
6370
|
'v-text-field--prefixed': props.prefix,
|
6229
6371
|
'v-text-field--suffixed': props.suffix,
|
6230
6372
|
'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
|
6231
|
-
}]
|
6232
|
-
"onClick:prepend": props['onClick:prepend'],
|
6233
|
-
"onClick:append": props['onClick:append']
|
6373
|
+
}]
|
6234
6374
|
}, rootAttrs, inputProps, {
|
6235
|
-
"focused": isFocused.value
|
6236
|
-
"messages": messages.value
|
6375
|
+
"focused": isFocused.value
|
6237
6376
|
}), {
|
6238
6377
|
...slots,
|
6239
6378
|
default: _ref2 => {
|
@@ -6642,7 +6781,7 @@ const VCheckbox = genericComponent()({
|
|
6642
6781
|
const id = computed(() => props.id || `checkbox-${uid}`);
|
6643
6782
|
useRender(() => {
|
6644
6783
|
const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
|
6645
|
-
const [inputProps, _1] =
|
6784
|
+
const [inputProps, _1] = VInput.filterProps(props);
|
6646
6785
|
const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
|
6647
6786
|
return createVNode(VInput, mergeProps({
|
6648
6787
|
"class": "v-checkbox"
|
@@ -8054,7 +8193,12 @@ function transformItems$1(props, items) {
|
|
8054
8193
|
function useItems(props) {
|
8055
8194
|
const items = computed(() => transformItems$1(props, props.items));
|
8056
8195
|
function transformIn(value) {
|
8057
|
-
return value.map(
|
8196
|
+
return value.map(v => {
|
8197
|
+
const existingItem = items.value.find(item => deepEqual(v, item.value));
|
8198
|
+
// Nullish existingItem means value is a custom input value from combobox
|
8199
|
+
// In this case, use transformItem to create an InternalItem based on value
|
8200
|
+
return existingItem ?? transformItem$1(props, v);
|
8201
|
+
});
|
8058
8202
|
}
|
8059
8203
|
function transformOut(value) {
|
8060
8204
|
return value.map(_ref => {
|
@@ -8732,7 +8876,7 @@ function staticLocationStrategy() {
|
|
8732
8876
|
}
|
8733
8877
|
|
8734
8878
|
/** Get size of element ignoring max-width/max-height */
|
8735
|
-
function getIntrinsicSize(el) {
|
8879
|
+
function getIntrinsicSize(el, isRtl) {
|
8736
8880
|
// const scrollables = new Map<Element, [number, number]>()
|
8737
8881
|
// el.querySelectorAll('*').forEach(el => {
|
8738
8882
|
// const x = el.scrollLeft
|
@@ -8749,7 +8893,11 @@ function getIntrinsicSize(el) {
|
|
8749
8893
|
|
8750
8894
|
/* eslint-disable-next-line sonarjs/prefer-immediate-return */
|
8751
8895
|
const contentBox = nullifyTransforms(el);
|
8752
|
-
|
8896
|
+
if (isRtl) {
|
8897
|
+
contentBox.x += parseFloat(el.style.right || 0);
|
8898
|
+
} else {
|
8899
|
+
contentBox.x -= parseFloat(el.style.left || 0);
|
8900
|
+
}
|
8753
8901
|
contentBox.y -= parseFloat(el.style.top || 0);
|
8754
8902
|
|
8755
8903
|
// el.style.maxWidth = initialMaxWidth
|
@@ -8830,7 +8978,7 @@ function connectedLocationStrategy(data, props, contentStyles) {
|
|
8830
8978
|
});
|
8831
8979
|
if (!data.activatorEl.value || !data.contentEl.value) return;
|
8832
8980
|
const targetBox = data.activatorEl.value.getBoundingClientRect();
|
8833
|
-
const contentBox = getIntrinsicSize(data.contentEl.value);
|
8981
|
+
const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
|
8834
8982
|
const scrollParents = getScrollParents(data.contentEl.value);
|
8835
8983
|
const viewportMargin = 12;
|
8836
8984
|
if (!scrollParents.length) {
|
@@ -9006,7 +9154,8 @@ function connectedLocationStrategy(data, props, contentStyles) {
|
|
9006
9154
|
transformOrigin: `${placement.origin.side} ${placement.origin.align}`,
|
9007
9155
|
// transform: `translate(${pixelRound(x)}px, ${pixelRound(y)}px)`,
|
9008
9156
|
top: convertToUnit(pixelRound(y)),
|
9009
|
-
left: convertToUnit(pixelRound(x)),
|
9157
|
+
left: data.isRtl.value ? undefined : convertToUnit(pixelRound(x)),
|
9158
|
+
right: data.isRtl.value ? convertToUnit(pixelRound(-x)) : undefined,
|
9010
9159
|
minWidth: convertToUnit(axis === 'y' ? Math.min(minWidth.value, targetBox.width) : minWidth.value),
|
9011
9160
|
maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
|
9012
9161
|
maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
|
@@ -9901,6 +10050,7 @@ const VSelect = genericComponent()({
|
|
9901
10050
|
})
|
9902
10051
|
},
|
9903
10052
|
emits: {
|
10053
|
+
'update:focused': focused => true,
|
9904
10054
|
'update:modelValue': val => true,
|
9905
10055
|
'update:menu': val => true
|
9906
10056
|
},
|
@@ -10017,6 +10167,9 @@ const VSelect = genericComponent()({
|
|
10017
10167
|
menu.value = false;
|
10018
10168
|
}
|
10019
10169
|
}
|
10170
|
+
function onFocusin(e) {
|
10171
|
+
isFocused.value = true;
|
10172
|
+
}
|
10020
10173
|
function onFocusout(e) {
|
10021
10174
|
if (e.relatedTarget == null) {
|
10022
10175
|
vTextFieldRef.value?.focus();
|
@@ -10071,6 +10224,7 @@ const VSelect = genericComponent()({
|
|
10071
10224
|
"selected": selected.value,
|
10072
10225
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
10073
10226
|
"onMousedown": e => e.preventDefault(),
|
10227
|
+
"onFocusin": onFocusin,
|
10074
10228
|
"onFocusout": onFocusout
|
10075
10229
|
}, {
|
10076
10230
|
default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
|
@@ -10149,6 +10303,7 @@ const VSelect = genericComponent()({
|
|
10149
10303
|
});
|
10150
10304
|
});
|
10151
10305
|
return forwardRefs({
|
10306
|
+
isFocused,
|
10152
10307
|
menu,
|
10153
10308
|
select
|
10154
10309
|
}, vTextFieldRef);
|
@@ -10287,6 +10442,7 @@ const VAutocomplete = genericComponent()({
|
|
10287
10442
|
})
|
10288
10443
|
},
|
10289
10444
|
emits: {
|
10445
|
+
'update:focused': focused => true,
|
10290
10446
|
'update:search': val => true,
|
10291
10447
|
'update:modelValue': val => true,
|
10292
10448
|
'update:menu': val => true
|
@@ -10310,11 +10466,17 @@ const VAutocomplete = genericComponent()({
|
|
10310
10466
|
_menu.value = v;
|
10311
10467
|
}
|
10312
10468
|
});
|
10469
|
+
const selectionIndex = ref(-1);
|
10470
|
+
const color = computed(() => vTextFieldRef.value?.color);
|
10313
10471
|
const {
|
10314
10472
|
items,
|
10315
10473
|
transformIn,
|
10316
10474
|
transformOut
|
10317
10475
|
} = useItems(props);
|
10476
|
+
const {
|
10477
|
+
textColorClasses,
|
10478
|
+
textColorStyles
|
10479
|
+
} = useTextColor(color);
|
10318
10480
|
const search = useProxiedModel(props, 'search', '');
|
10319
10481
|
const model = useProxiedModel(props, 'modelValue', [], v => transformIn(wrapInArray(v)), v => {
|
10320
10482
|
const transformed = transformOut(v);
|
@@ -10337,6 +10499,7 @@ const VAutocomplete = genericComponent()({
|
|
10337
10499
|
return filteredItems.value;
|
10338
10500
|
});
|
10339
10501
|
const selected = computed(() => selections.value.map(selection => selection.props.value));
|
10502
|
+
const selection = computed(() => selections.value[selectionIndex.value]);
|
10340
10503
|
const listRef = ref();
|
10341
10504
|
function onClear(e) {
|
10342
10505
|
if (props.openOnClear) {
|
@@ -10350,7 +10513,9 @@ const VAutocomplete = genericComponent()({
|
|
10350
10513
|
}
|
10351
10514
|
function onKeydown(e) {
|
10352
10515
|
if (props.readonly || form?.isReadonly.value) return;
|
10353
|
-
|
10516
|
+
const selectionStart = vTextFieldRef.value.selectionStart;
|
10517
|
+
const length = selected.value.length;
|
10518
|
+
if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
|
10354
10519
|
e.preventDefault();
|
10355
10520
|
}
|
10356
10521
|
if (['Enter', 'ArrowDown'].includes(e.key)) {
|
@@ -10367,6 +10532,38 @@ const VAutocomplete = genericComponent()({
|
|
10367
10532
|
} else if (e.key === 'ArrowUp') {
|
10368
10533
|
listRef.value?.focus('prev');
|
10369
10534
|
}
|
10535
|
+
if (!props.multiple) return;
|
10536
|
+
if (['Backspace', 'Delete'].includes(e.key)) {
|
10537
|
+
if (selectionIndex.value < 0) {
|
10538
|
+
if (e.key === 'Backspace' && !search.value) {
|
10539
|
+
selectionIndex.value = length - 1;
|
10540
|
+
}
|
10541
|
+
return;
|
10542
|
+
}
|
10543
|
+
const originalSelectionIndex = selectionIndex.value;
|
10544
|
+
if (selection.value) select(selection.value);
|
10545
|
+
selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
|
10546
|
+
}
|
10547
|
+
if (e.key === 'ArrowLeft') {
|
10548
|
+
if (selectionIndex.value < 0 && selectionStart > 0) return;
|
10549
|
+
const prev = selectionIndex.value > -1 ? selectionIndex.value - 1 : length - 1;
|
10550
|
+
if (selections.value[prev]) {
|
10551
|
+
selectionIndex.value = prev;
|
10552
|
+
} else {
|
10553
|
+
selectionIndex.value = -1;
|
10554
|
+
vTextFieldRef.value.setSelectionRange(search.value?.length, search.value?.length);
|
10555
|
+
}
|
10556
|
+
}
|
10557
|
+
if (e.key === 'ArrowRight') {
|
10558
|
+
if (selectionIndex.value < 0) return;
|
10559
|
+
const next = selectionIndex.value + 1;
|
10560
|
+
if (selections.value[next]) {
|
10561
|
+
selectionIndex.value = next;
|
10562
|
+
} else {
|
10563
|
+
selectionIndex.value = -1;
|
10564
|
+
vTextFieldRef.value.setSelectionRange(0, 0);
|
10565
|
+
}
|
10566
|
+
}
|
10370
10567
|
}
|
10371
10568
|
function onInput(e) {
|
10372
10569
|
search.value = e.target.value;
|
@@ -10388,7 +10585,6 @@ const VAutocomplete = genericComponent()({
|
|
10388
10585
|
const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
|
10389
10586
|
if (index === -1) {
|
10390
10587
|
model.value = [...model.value, item];
|
10391
|
-
search.value = '';
|
10392
10588
|
} else {
|
10393
10589
|
const value = [...model.value];
|
10394
10590
|
value.splice(index, 1);
|
@@ -10433,12 +10629,15 @@ const VAutocomplete = genericComponent()({
|
|
10433
10629
|
"onUpdate:modelValue": v => {
|
10434
10630
|
if (v == null) model.value = [];
|
10435
10631
|
},
|
10632
|
+
"focused": isFocused.value,
|
10633
|
+
"onUpdate:focused": $event => isFocused.value = $event,
|
10436
10634
|
"validationValue": model.externalValue,
|
10437
10635
|
"dirty": isDirty,
|
10438
10636
|
"onInput": onInput,
|
10439
10637
|
"class": ['v-autocomplete', {
|
10440
10638
|
'v-autocomplete--active-menu': menu.value,
|
10441
10639
|
'v-autocomplete--chips': !!props.chips,
|
10640
|
+
'v-autocomplete--selecting-index': selectionIndex.value > -1,
|
10442
10641
|
[`v-autocomplete--${props.multiple ? 'multiple' : 'single'}`]: true,
|
10443
10642
|
'v-autocomplete--selection-slot': !!slots.selection
|
10444
10643
|
}],
|
@@ -10447,8 +10646,6 @@ const VAutocomplete = genericComponent()({
|
|
10447
10646
|
"placeholder": isDirty ? undefined : props.placeholder,
|
10448
10647
|
"onClick:clear": onClear,
|
10449
10648
|
"onMousedown:control": onMousedownControl,
|
10450
|
-
"onFocus": () => isFocused.value = true,
|
10451
|
-
"onBlur": () => isFocused.value = false,
|
10452
10649
|
"onKeydown": onKeydown
|
10453
10650
|
}), {
|
10454
10651
|
...slots,
|
@@ -10513,7 +10710,8 @@ const VAutocomplete = genericComponent()({
|
|
10513
10710
|
};
|
10514
10711
|
return createVNode("div", {
|
10515
10712
|
"key": item.value,
|
10516
|
-
"class":
|
10713
|
+
"class": ['v-autocomplete__selection', index === selectionIndex.value && ['v-autocomplete__selection--selected', textColorClasses.value]],
|
10714
|
+
"style": index === selectionIndex.value ? textColorStyles.value : {}
|
10517
10715
|
}, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
|
10518
10716
|
"key": "chip",
|
10519
10717
|
"closable": props.closableChips,
|
@@ -12408,11 +12606,36 @@ const makeSliderProps = propsFactory({
|
|
12408
12606
|
elevation: 2
|
12409
12607
|
})
|
12410
12608
|
}, 'slider');
|
12609
|
+
const useSteps = props => {
|
12610
|
+
const min = computed(() => parseFloat(props.min));
|
12611
|
+
const max = computed(() => parseFloat(props.max));
|
12612
|
+
const step = computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
|
12613
|
+
const decimals = computed(() => {
|
12614
|
+
const trimmedStep = step.value.toString().trim();
|
12615
|
+
return trimmedStep.includes('.') ? trimmedStep.length - trimmedStep.indexOf('.') - 1 : 0;
|
12616
|
+
});
|
12617
|
+
function roundValue(value) {
|
12618
|
+
if (step.value <= 0) return value;
|
12619
|
+
const clamped = clamp(value, min.value, max.value);
|
12620
|
+
const offset = min.value % step.value;
|
12621
|
+
const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
|
12622
|
+
return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
|
12623
|
+
}
|
12624
|
+
return {
|
12625
|
+
min,
|
12626
|
+
max,
|
12627
|
+
step,
|
12628
|
+
decimals,
|
12629
|
+
roundValue
|
12630
|
+
};
|
12631
|
+
};
|
12411
12632
|
const useSlider = _ref => {
|
12412
12633
|
let {
|
12413
12634
|
props,
|
12414
|
-
|
12415
|
-
|
12635
|
+
steps,
|
12636
|
+
onSliderStart,
|
12637
|
+
onSliderMove,
|
12638
|
+
onSliderEnd,
|
12416
12639
|
getActiveThumb
|
12417
12640
|
} = _ref;
|
12418
12641
|
const {
|
@@ -12426,10 +12649,13 @@ const useSlider = _ref => {
|
|
12426
12649
|
}
|
12427
12650
|
return hd;
|
12428
12651
|
});
|
12429
|
-
const
|
12430
|
-
|
12431
|
-
|
12432
|
-
|
12652
|
+
const {
|
12653
|
+
min,
|
12654
|
+
max,
|
12655
|
+
step,
|
12656
|
+
decimals,
|
12657
|
+
roundValue
|
12658
|
+
} = steps;
|
12433
12659
|
const thumbSize = computed(() => parseInt(props.thumbSize, 10));
|
12434
12660
|
const tickSize = computed(() => parseInt(props.tickSize, 10));
|
12435
12661
|
const trackSize = computed(() => parseInt(props.trackSize, 10));
|
@@ -12443,13 +12669,6 @@ const useSlider = _ref => {
|
|
12443
12669
|
const startOffset = ref(0);
|
12444
12670
|
const trackContainerRef = ref();
|
12445
12671
|
const activeThumbRef = ref();
|
12446
|
-
function roundValue(value) {
|
12447
|
-
if (step.value <= 0) return value;
|
12448
|
-
const clamped = clamp(value, min.value, max.value);
|
12449
|
-
const offset = min.value % step.value;
|
12450
|
-
const newValue = Math.round((clamped - offset) / step.value) * step.value + offset;
|
12451
|
-
return parseFloat(Math.min(newValue, max.value).toFixed(decimals.value));
|
12452
|
-
}
|
12453
12672
|
function parseMouseMove(e) {
|
12454
12673
|
const vertical = props.direction === 'vertical';
|
12455
12674
|
const start = vertical ? 'top' : 'left';
|
@@ -12466,14 +12685,11 @@ const useSlider = _ref => {
|
|
12466
12685
|
if (vertical || horizontalDirection.value === 'rtl') clickPos = 1 - clickPos;
|
12467
12686
|
return roundValue(min.value + clickPos * (max.value - min.value));
|
12468
12687
|
}
|
12469
|
-
let thumbMoved = false;
|
12470
12688
|
const handleStop = e => {
|
12471
|
-
|
12472
|
-
|
12473
|
-
|
12474
|
-
}
|
12689
|
+
onSliderEnd({
|
12690
|
+
value: parseMouseMove(e)
|
12691
|
+
});
|
12475
12692
|
mousePressed.value = false;
|
12476
|
-
thumbMoved = false;
|
12477
12693
|
startOffset.value = 0;
|
12478
12694
|
};
|
12479
12695
|
const handleStart = e => {
|
@@ -12482,20 +12698,25 @@ const useSlider = _ref => {
|
|
12482
12698
|
activeThumbRef.value.focus();
|
12483
12699
|
mousePressed.value = true;
|
12484
12700
|
if (activeThumbRef.value.contains(e.target)) {
|
12485
|
-
thumbMoved = true;
|
12486
12701
|
startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
|
12487
12702
|
} else {
|
12488
12703
|
startOffset.value = 0;
|
12489
|
-
|
12704
|
+
onSliderMove({
|
12705
|
+
value: parseMouseMove(e)
|
12706
|
+
});
|
12490
12707
|
}
|
12708
|
+
onSliderStart({
|
12709
|
+
value: parseMouseMove(e)
|
12710
|
+
});
|
12491
12711
|
};
|
12492
12712
|
const moveListenerOptions = {
|
12493
12713
|
passive: true,
|
12494
12714
|
capture: true
|
12495
12715
|
};
|
12496
12716
|
function onMouseMove(e) {
|
12497
|
-
|
12498
|
-
|
12717
|
+
onSliderMove({
|
12718
|
+
value: parseMouseMove(e)
|
12719
|
+
});
|
12499
12720
|
}
|
12500
12721
|
function onSliderMouseUp(e) {
|
12501
12722
|
e.stopPropagation();
|
@@ -12871,13 +13092,21 @@ const VSlider = genericComponent()({
|
|
12871
13092
|
},
|
12872
13093
|
emits: {
|
12873
13094
|
'update:focused': value => true,
|
12874
|
-
'update:modelValue': v => true
|
13095
|
+
'update:modelValue': v => true,
|
13096
|
+
start: value => true,
|
13097
|
+
end: value => true
|
12875
13098
|
},
|
12876
13099
|
setup(props, _ref) {
|
12877
13100
|
let {
|
12878
|
-
slots
|
13101
|
+
slots,
|
13102
|
+
emit
|
12879
13103
|
} = _ref;
|
12880
13104
|
const thumbContainerRef = ref();
|
13105
|
+
const steps = useSteps(props);
|
13106
|
+
const model = useProxiedModel(props, 'modelValue', undefined, v => {
|
13107
|
+
const value = typeof v === 'string' ? parseFloat(v) : v == null ? steps.min.value : v;
|
13108
|
+
return steps.roundValue(value);
|
13109
|
+
});
|
12881
13110
|
const {
|
12882
13111
|
min,
|
12883
13112
|
max,
|
@@ -12891,16 +13120,26 @@ const VSlider = genericComponent()({
|
|
12891
13120
|
readonly
|
12892
13121
|
} = useSlider({
|
12893
13122
|
props,
|
12894
|
-
|
12895
|
-
|
12896
|
-
|
12897
|
-
|
13123
|
+
steps,
|
13124
|
+
onSliderStart: () => {
|
13125
|
+
emit('start', model.value);
|
13126
|
+
},
|
13127
|
+
onSliderEnd: _ref2 => {
|
13128
|
+
let {
|
13129
|
+
value
|
13130
|
+
} = _ref2;
|
13131
|
+
const roundedValue = roundValue(value);
|
13132
|
+
model.value = roundedValue;
|
13133
|
+
emit('end', roundedValue);
|
13134
|
+
},
|
13135
|
+
onSliderMove: _ref3 => {
|
13136
|
+
let {
|
13137
|
+
value
|
13138
|
+
} = _ref3;
|
13139
|
+
return model.value = roundValue(value);
|
13140
|
+
},
|
12898
13141
|
getActiveThumb: () => thumbContainerRef.value?.$el
|
12899
13142
|
});
|
12900
|
-
const model = useProxiedModel(props, 'modelValue', undefined, v => {
|
12901
|
-
const value = typeof v === 'string' ? parseFloat(v) : v == null ? min.value : v;
|
12902
|
-
return roundValue(value);
|
12903
|
-
});
|
12904
13143
|
const {
|
12905
13144
|
isFocused,
|
12906
13145
|
focus,
|
@@ -12908,7 +13147,7 @@ const VSlider = genericComponent()({
|
|
12908
13147
|
} = useFocus(props);
|
12909
13148
|
const trackStop = computed(() => position(model.value));
|
12910
13149
|
useRender(() => {
|
12911
|
-
const [inputProps, _] =
|
13150
|
+
const [inputProps, _] = VInput.filterProps(props);
|
12912
13151
|
const hasPrepend = !!(props.label || slots.label || slots.prepend);
|
12913
13152
|
return createVNode(VInput, mergeProps({
|
12914
13153
|
"class": ['v-slider', {
|
@@ -12926,11 +13165,11 @@ const VSlider = genericComponent()({
|
|
12926
13165
|
"class": "v-slider__label",
|
12927
13166
|
"text": props.label
|
12928
13167
|
}, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
|
12929
|
-
default:
|
13168
|
+
default: _ref4 => {
|
12930
13169
|
let {
|
12931
13170
|
id,
|
12932
13171
|
messagesId
|
12933
|
-
} =
|
13172
|
+
} = _ref4;
|
12934
13173
|
return createVNode("div", {
|
12935
13174
|
"class": "v-slider__container",
|
12936
13175
|
"onMousedown": !readonly.value ? onSliderMousedown : undefined,
|
@@ -13572,6 +13811,7 @@ const VCombobox = genericComponent()({
|
|
13572
13811
|
})
|
13573
13812
|
},
|
13574
13813
|
emits: {
|
13814
|
+
'update:focused': focused => true,
|
13575
13815
|
'update:modelValue': val => true,
|
13576
13816
|
'update:search': val => true,
|
13577
13817
|
'update:menu': val => true
|
@@ -13709,8 +13949,9 @@ const VCombobox = genericComponent()({
|
|
13709
13949
|
}
|
13710
13950
|
return;
|
13711
13951
|
}
|
13712
|
-
|
13713
|
-
|
13952
|
+
const originalSelectionIndex = selectionIndex.value;
|
13953
|
+
if (selection.value) select(selection.value);
|
13954
|
+
selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
|
13714
13955
|
}
|
13715
13956
|
if (e.key === 'ArrowLeft') {
|
13716
13957
|
if (selectionIndex.value < 0 && selectionStart > 0) return;
|
@@ -13795,6 +14036,8 @@ const VCombobox = genericComponent()({
|
|
13795
14036
|
"onUpdate:modelValue": [$event => search.value = $event, v => {
|
13796
14037
|
if (v == null) model.value = [];
|
13797
14038
|
}],
|
14039
|
+
"focused": isFocused.value,
|
14040
|
+
"onUpdate:focused": $event => isFocused.value = $event,
|
13798
14041
|
"validationValue": model.externalValue,
|
13799
14042
|
"dirty": isDirty,
|
13800
14043
|
"class": ['v-combobox', {
|
@@ -13808,8 +14051,6 @@ const VCombobox = genericComponent()({
|
|
13808
14051
|
"placeholder": isDirty ? undefined : props.placeholder,
|
13809
14052
|
"onClick:clear": onClear,
|
13810
14053
|
"onMousedown:control": onMousedownControl,
|
13811
|
-
"onFocus": () => isFocused.value = true,
|
13812
|
-
"onBlur": () => isFocused.value = false,
|
13813
14054
|
"onKeydown": onKeydown
|
13814
14055
|
}), {
|
13815
14056
|
...slots,
|
@@ -14261,8 +14502,6 @@ const VFileInput = genericComponent()({
|
|
14261
14502
|
default: '$vuetify.fileInput.counter'
|
14262
14503
|
},
|
14263
14504
|
multiple: Boolean,
|
14264
|
-
hint: String,
|
14265
|
-
persistentHint: Boolean,
|
14266
14505
|
showSize: {
|
14267
14506
|
type: [Boolean, Number],
|
14268
14507
|
default: false,
|
@@ -14287,6 +14526,7 @@ const VFileInput = genericComponent()({
|
|
14287
14526
|
emits: {
|
14288
14527
|
'click:control': e => true,
|
14289
14528
|
'mousedown:control': e => true,
|
14529
|
+
'update:focused': focused => true,
|
14290
14530
|
'update:modelValue': files => true
|
14291
14531
|
},
|
14292
14532
|
setup(props, _ref) {
|
@@ -14299,6 +14539,11 @@ const VFileInput = genericComponent()({
|
|
14299
14539
|
t
|
14300
14540
|
} = useLocale();
|
14301
14541
|
const model = useProxiedModel(props, 'modelValue');
|
14542
|
+
const {
|
14543
|
+
isFocused,
|
14544
|
+
focus,
|
14545
|
+
blur
|
14546
|
+
} = useFocus(props);
|
14302
14547
|
const base = computed(() => typeof props.showSize !== 'boolean' ? props.showSize : undefined);
|
14303
14548
|
const totalBytes = computed(() => (model.value ?? []).reduce((bytes, _ref2) => {
|
14304
14549
|
let {
|
@@ -14320,21 +14565,14 @@ const VFileInput = genericComponent()({
|
|
14320
14565
|
});
|
14321
14566
|
const vInputRef = ref();
|
14322
14567
|
const vFieldRef = ref();
|
14323
|
-
const isFocused = ref(false);
|
14324
14568
|
const inputRef = ref();
|
14325
|
-
const messages = computed(() => {
|
14326
|
-
return props.messages.length ? props.messages : props.persistentHint ? props.hint : '';
|
14327
|
-
});
|
14328
14569
|
function onFocus() {
|
14329
14570
|
if (inputRef.value !== document.activeElement) {
|
14330
14571
|
inputRef.value?.focus();
|
14331
14572
|
}
|
14332
|
-
if (!isFocused.value)
|
14333
|
-
isFocused.value = true;
|
14334
|
-
}
|
14573
|
+
if (!isFocused.value) focus();
|
14335
14574
|
}
|
14336
14575
|
function onClickPrepend(e) {
|
14337
|
-
callEvent(props['onClick:prepend'], e);
|
14338
14576
|
onControlClick(e);
|
14339
14577
|
}
|
14340
14578
|
function onControlMousedown(e) {
|
@@ -14365,18 +14603,16 @@ const VFileInput = genericComponent()({
|
|
14365
14603
|
const [{
|
14366
14604
|
modelValue: _,
|
14367
14605
|
...inputProps
|
14368
|
-
}] =
|
14606
|
+
}] = VInput.filterProps(props);
|
14369
14607
|
const [fieldProps] = filterFieldProps(props);
|
14370
14608
|
return createVNode(VInput, mergeProps({
|
14371
14609
|
"ref": vInputRef,
|
14372
14610
|
"modelValue": model.value,
|
14373
14611
|
"onUpdate:modelValue": $event => model.value = $event,
|
14374
14612
|
"class": "v-file-input",
|
14375
|
-
"onClick:prepend": onClickPrepend
|
14376
|
-
"onClick:append": props['onClick:append']
|
14613
|
+
"onClick:prepend": onClickPrepend
|
14377
14614
|
}, rootAttrs, inputProps, {
|
14378
|
-
"focused": isFocused.value
|
14379
|
-
"messages": messages.value
|
14615
|
+
"focused": isFocused.value
|
14380
14616
|
}), {
|
14381
14617
|
...slots,
|
14382
14618
|
default: _ref3 => {
|
@@ -14428,7 +14664,7 @@ const VFileInput = genericComponent()({
|
|
14428
14664
|
model.value = [...(target.files ?? [])];
|
14429
14665
|
},
|
14430
14666
|
"onFocus": onFocus,
|
14431
|
-
"onBlur":
|
14667
|
+
"onBlur": blur
|
14432
14668
|
}, slotProps, inputAttrs), null), createVNode("div", {
|
14433
14669
|
"class": fieldClass
|
14434
14670
|
}, [!!model.value?.length && (slots.selection ? slots.selection({
|
@@ -15119,6 +15355,432 @@ const VMain = genericComponent()({
|
|
15119
15355
|
}
|
15120
15356
|
});
|
15121
15357
|
|
15358
|
+
// Utilities
|
15359
|
+
|
15360
|
+
// Types
|
15361
|
+
|
15362
|
+
function getWeekArray(date) {
|
15363
|
+
let currentWeek = [];
|
15364
|
+
const weeks = [];
|
15365
|
+
const firstDayOfMonth = startOfMonth(date);
|
15366
|
+
const lastDayOfMonth = endOfMonth(date);
|
15367
|
+
for (let i = 0; i < firstDayOfMonth.getDay(); i++) {
|
15368
|
+
currentWeek.push(null);
|
15369
|
+
}
|
15370
|
+
for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
|
15371
|
+
const day = new Date(date.getFullYear(), date.getMonth(), i);
|
15372
|
+
|
15373
|
+
// Add the day to the current week
|
15374
|
+
currentWeek.push(day);
|
15375
|
+
|
15376
|
+
// If the current week has 7 days, add it to the weeks array and start a new week
|
15377
|
+
if (currentWeek.length === 7) {
|
15378
|
+
weeks.push(currentWeek);
|
15379
|
+
currentWeek = [];
|
15380
|
+
}
|
15381
|
+
}
|
15382
|
+
for (let i = currentWeek.length; i < 7; i++) {
|
15383
|
+
currentWeek.push(null);
|
15384
|
+
}
|
15385
|
+
weeks.push(currentWeek);
|
15386
|
+
return weeks;
|
15387
|
+
}
|
15388
|
+
function startOfMonth(date) {
|
15389
|
+
return new Date(date.getFullYear(), date.getMonth(), 1);
|
15390
|
+
}
|
15391
|
+
function endOfMonth(date) {
|
15392
|
+
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
15393
|
+
}
|
15394
|
+
function date(value) {
|
15395
|
+
if (value == null) return null;
|
15396
|
+
if (value instanceof Date) return value;
|
15397
|
+
if (typeof value === 'string') {
|
15398
|
+
const parsed = Date.parse(value);
|
15399
|
+
if (!isNaN(parsed)) return new Date(parsed);
|
15400
|
+
}
|
15401
|
+
return null;
|
15402
|
+
}
|
15403
|
+
const firstDay = {
|
15404
|
+
'001': 1,
|
15405
|
+
AD: 1,
|
15406
|
+
AE: 6,
|
15407
|
+
AF: 6,
|
15408
|
+
AG: 0,
|
15409
|
+
AI: 1,
|
15410
|
+
AL: 1,
|
15411
|
+
AM: 1,
|
15412
|
+
AN: 1,
|
15413
|
+
AR: 1,
|
15414
|
+
AS: 0,
|
15415
|
+
AT: 1,
|
15416
|
+
AU: 0,
|
15417
|
+
AX: 1,
|
15418
|
+
AZ: 1,
|
15419
|
+
BA: 1,
|
15420
|
+
BD: 0,
|
15421
|
+
BE: 1,
|
15422
|
+
BG: 1,
|
15423
|
+
BH: 6,
|
15424
|
+
BM: 1,
|
15425
|
+
BN: 1,
|
15426
|
+
BR: 0,
|
15427
|
+
BS: 0,
|
15428
|
+
BT: 0,
|
15429
|
+
BW: 0,
|
15430
|
+
BY: 1,
|
15431
|
+
BZ: 0,
|
15432
|
+
CA: 0,
|
15433
|
+
CH: 1,
|
15434
|
+
CL: 1,
|
15435
|
+
CM: 1,
|
15436
|
+
CN: 0,
|
15437
|
+
CO: 0,
|
15438
|
+
CR: 1,
|
15439
|
+
CY: 1,
|
15440
|
+
CZ: 1,
|
15441
|
+
DE: 1,
|
15442
|
+
DJ: 6,
|
15443
|
+
DK: 1,
|
15444
|
+
DM: 0,
|
15445
|
+
DO: 0,
|
15446
|
+
DZ: 6,
|
15447
|
+
EC: 1,
|
15448
|
+
EE: 1,
|
15449
|
+
EG: 6,
|
15450
|
+
ES: 1,
|
15451
|
+
ET: 0,
|
15452
|
+
FI: 1,
|
15453
|
+
FJ: 1,
|
15454
|
+
FO: 1,
|
15455
|
+
FR: 1,
|
15456
|
+
GB: 1,
|
15457
|
+
'GB-alt-variant': 0,
|
15458
|
+
GE: 1,
|
15459
|
+
GF: 1,
|
15460
|
+
GP: 1,
|
15461
|
+
GR: 1,
|
15462
|
+
GT: 0,
|
15463
|
+
GU: 0,
|
15464
|
+
HK: 0,
|
15465
|
+
HN: 0,
|
15466
|
+
HR: 1,
|
15467
|
+
HU: 1,
|
15468
|
+
ID: 0,
|
15469
|
+
IE: 1,
|
15470
|
+
IL: 0,
|
15471
|
+
IN: 0,
|
15472
|
+
IQ: 6,
|
15473
|
+
IR: 6,
|
15474
|
+
IS: 1,
|
15475
|
+
IT: 1,
|
15476
|
+
JM: 0,
|
15477
|
+
JO: 6,
|
15478
|
+
JP: 0,
|
15479
|
+
KE: 0,
|
15480
|
+
KG: 1,
|
15481
|
+
KH: 0,
|
15482
|
+
KR: 0,
|
15483
|
+
KW: 6,
|
15484
|
+
KZ: 1,
|
15485
|
+
LA: 0,
|
15486
|
+
LB: 1,
|
15487
|
+
LI: 1,
|
15488
|
+
LK: 1,
|
15489
|
+
LT: 1,
|
15490
|
+
LU: 1,
|
15491
|
+
LV: 1,
|
15492
|
+
LY: 6,
|
15493
|
+
MC: 1,
|
15494
|
+
MD: 1,
|
15495
|
+
ME: 1,
|
15496
|
+
MH: 0,
|
15497
|
+
MK: 1,
|
15498
|
+
MM: 0,
|
15499
|
+
MN: 1,
|
15500
|
+
MO: 0,
|
15501
|
+
MQ: 1,
|
15502
|
+
MT: 0,
|
15503
|
+
MV: 5,
|
15504
|
+
MX: 0,
|
15505
|
+
MY: 1,
|
15506
|
+
MZ: 0,
|
15507
|
+
NI: 0,
|
15508
|
+
NL: 1,
|
15509
|
+
NO: 1,
|
15510
|
+
NP: 0,
|
15511
|
+
NZ: 1,
|
15512
|
+
OM: 6,
|
15513
|
+
PA: 0,
|
15514
|
+
PE: 0,
|
15515
|
+
PH: 0,
|
15516
|
+
PK: 0,
|
15517
|
+
PL: 1,
|
15518
|
+
PR: 0,
|
15519
|
+
PT: 0,
|
15520
|
+
PY: 0,
|
15521
|
+
QA: 6,
|
15522
|
+
RE: 1,
|
15523
|
+
RO: 1,
|
15524
|
+
RS: 1,
|
15525
|
+
RU: 1,
|
15526
|
+
SA: 0,
|
15527
|
+
SD: 6,
|
15528
|
+
SE: 1,
|
15529
|
+
SG: 0,
|
15530
|
+
SI: 1,
|
15531
|
+
SK: 1,
|
15532
|
+
SM: 1,
|
15533
|
+
SV: 0,
|
15534
|
+
SY: 6,
|
15535
|
+
TH: 0,
|
15536
|
+
TJ: 1,
|
15537
|
+
TM: 1,
|
15538
|
+
TR: 1,
|
15539
|
+
TT: 0,
|
15540
|
+
TW: 0,
|
15541
|
+
UA: 1,
|
15542
|
+
UM: 0,
|
15543
|
+
US: 0,
|
15544
|
+
UY: 1,
|
15545
|
+
UZ: 1,
|
15546
|
+
VA: 1,
|
15547
|
+
VE: 0,
|
15548
|
+
VI: 0,
|
15549
|
+
VN: 1,
|
15550
|
+
WS: 0,
|
15551
|
+
XK: 1,
|
15552
|
+
YE: 0,
|
15553
|
+
ZA: 0,
|
15554
|
+
ZW: 0
|
15555
|
+
};
|
15556
|
+
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
15557
|
+
function getWeekdays(locale) {
|
15558
|
+
const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
|
15559
|
+
return createRange(7).map(i => {
|
15560
|
+
const weekday = new Date(sundayJanuarySecond2000);
|
15561
|
+
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
15562
|
+
return new Intl.DateTimeFormat(locale, {
|
15563
|
+
weekday: 'long'
|
15564
|
+
}).format(weekday);
|
15565
|
+
});
|
15566
|
+
}
|
15567
|
+
function format(value, formatString, locale) {
|
15568
|
+
const date = new Date(value);
|
15569
|
+
let options = {};
|
15570
|
+
switch (formatString) {
|
15571
|
+
case 'fullDateWithWeekday':
|
15572
|
+
options = {
|
15573
|
+
weekday: 'long',
|
15574
|
+
day: 'numeric',
|
15575
|
+
month: 'long',
|
15576
|
+
year: 'numeric'
|
15577
|
+
};
|
15578
|
+
break;
|
15579
|
+
case 'normalDateWithWeekday':
|
15580
|
+
options = {
|
15581
|
+
weekday: 'short',
|
15582
|
+
day: 'numeric',
|
15583
|
+
month: 'short',
|
15584
|
+
year: 'numeric'
|
15585
|
+
};
|
15586
|
+
break;
|
15587
|
+
case 'keyboardDate':
|
15588
|
+
options = {};
|
15589
|
+
break;
|
15590
|
+
case 'monthAndDate':
|
15591
|
+
options = {
|
15592
|
+
month: 'long',
|
15593
|
+
day: 'numeric'
|
15594
|
+
};
|
15595
|
+
break;
|
15596
|
+
case 'monthAndYear':
|
15597
|
+
options = {
|
15598
|
+
month: 'long',
|
15599
|
+
year: 'numeric'
|
15600
|
+
};
|
15601
|
+
break;
|
15602
|
+
default:
|
15603
|
+
options = {
|
15604
|
+
timeZone: 'UTC',
|
15605
|
+
timeZoneName: 'short'
|
15606
|
+
};
|
15607
|
+
}
|
15608
|
+
return new Intl.DateTimeFormat(locale, options).format(date);
|
15609
|
+
}
|
15610
|
+
function addDays(date, amount) {
|
15611
|
+
const d = new Date(date);
|
15612
|
+
d.setDate(d.getDate() + amount);
|
15613
|
+
return d;
|
15614
|
+
}
|
15615
|
+
function addMonths(date, amount) {
|
15616
|
+
const d = new Date(date);
|
15617
|
+
d.setMonth(d.getMonth() + amount);
|
15618
|
+
return d;
|
15619
|
+
}
|
15620
|
+
function getYear(date) {
|
15621
|
+
return date.getFullYear();
|
15622
|
+
}
|
15623
|
+
function getMonth(date) {
|
15624
|
+
return date.getMonth();
|
15625
|
+
}
|
15626
|
+
function startOfYear(date) {
|
15627
|
+
return new Date(date.getFullYear(), 0, 1);
|
15628
|
+
}
|
15629
|
+
function endOfYear(date) {
|
15630
|
+
return new Date(date.getFullYear(), 11, 31);
|
15631
|
+
}
|
15632
|
+
function getMondayOfFirstWeekOfYear(year) {
|
15633
|
+
return new Date(year, 0, 1);
|
15634
|
+
}
|
15635
|
+
|
15636
|
+
// https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
|
15637
|
+
function getWeek(date) {
|
15638
|
+
let year = date.getFullYear();
|
15639
|
+
let d1w1 = getMondayOfFirstWeekOfYear(year);
|
15640
|
+
if (date < d1w1) {
|
15641
|
+
year = year - 1;
|
15642
|
+
d1w1 = getMondayOfFirstWeekOfYear(year);
|
15643
|
+
} else {
|
15644
|
+
const tv = getMondayOfFirstWeekOfYear(year + 1);
|
15645
|
+
if (date >= tv) {
|
15646
|
+
year = year + 1;
|
15647
|
+
d1w1 = tv;
|
15648
|
+
}
|
15649
|
+
}
|
15650
|
+
const diffTime = Math.abs(date.getTime() - d1w1.getTime());
|
15651
|
+
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
15652
|
+
return Math.floor(diffDays / 7) + 1;
|
15653
|
+
}
|
15654
|
+
function isWithinRange(date, range) {
|
15655
|
+
return isAfter(date, range[0]) && isBefore(date, range[1]);
|
15656
|
+
}
|
15657
|
+
function isValid(date) {
|
15658
|
+
const d = new Date(date);
|
15659
|
+
return d instanceof Date && !isNaN(d.getTime());
|
15660
|
+
}
|
15661
|
+
function isAfter(date, comparing) {
|
15662
|
+
return date.getTime() > comparing.getTime();
|
15663
|
+
}
|
15664
|
+
function isBefore(date, comparing) {
|
15665
|
+
return date.getTime() < comparing.getTime();
|
15666
|
+
}
|
15667
|
+
function isEqual(date, comparing) {
|
15668
|
+
return date.getTime() === comparing.getTime();
|
15669
|
+
}
|
15670
|
+
function isSameDay(date, comparing) {
|
15671
|
+
return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
|
15672
|
+
}
|
15673
|
+
function isSameMonth(date, comparing) {
|
15674
|
+
return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
|
15675
|
+
}
|
15676
|
+
function getDiff(date, comparing, unit) {
|
15677
|
+
const d = new Date(date);
|
15678
|
+
const c = new Date(comparing);
|
15679
|
+
if (unit === 'month') {
|
15680
|
+
return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
|
15681
|
+
}
|
15682
|
+
return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
|
15683
|
+
}
|
15684
|
+
function setYear(date, year) {
|
15685
|
+
const d = new Date(date);
|
15686
|
+
d.setFullYear(year);
|
15687
|
+
return d;
|
15688
|
+
}
|
15689
|
+
class VuetifyDateAdapter {
|
15690
|
+
constructor() {
|
15691
|
+
let locale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'en';
|
15692
|
+
this.locale = locale;
|
15693
|
+
}
|
15694
|
+
date(value) {
|
15695
|
+
return date(value);
|
15696
|
+
}
|
15697
|
+
addDays(date, amount) {
|
15698
|
+
return addDays(date, amount);
|
15699
|
+
}
|
15700
|
+
addMonths(date, amount) {
|
15701
|
+
return addMonths(date, amount);
|
15702
|
+
}
|
15703
|
+
getWeekArray(date) {
|
15704
|
+
return getWeekArray(date);
|
15705
|
+
}
|
15706
|
+
startOfMonth(date) {
|
15707
|
+
return startOfMonth(date);
|
15708
|
+
}
|
15709
|
+
endOfMonth(date) {
|
15710
|
+
return endOfMonth(date);
|
15711
|
+
}
|
15712
|
+
format(date, formatString) {
|
15713
|
+
return format(date, formatString, this.locale);
|
15714
|
+
}
|
15715
|
+
isEqual(date, comparing) {
|
15716
|
+
return isEqual(date, comparing);
|
15717
|
+
}
|
15718
|
+
isValid(date) {
|
15719
|
+
return isValid(date);
|
15720
|
+
}
|
15721
|
+
isWithinRange(date, range) {
|
15722
|
+
return isWithinRange(date, range);
|
15723
|
+
}
|
15724
|
+
isAfter(date, comparing) {
|
15725
|
+
return isAfter(date, comparing);
|
15726
|
+
}
|
15727
|
+
isSameDay(date, comparing) {
|
15728
|
+
return isSameDay(date, comparing);
|
15729
|
+
}
|
15730
|
+
isSameMonth(date, comparing) {
|
15731
|
+
return isSameMonth(date, comparing);
|
15732
|
+
}
|
15733
|
+
setYear(date, year) {
|
15734
|
+
return setYear(date, year);
|
15735
|
+
}
|
15736
|
+
getDiff(date, comparing, unit) {
|
15737
|
+
return getDiff(date, comparing, unit);
|
15738
|
+
}
|
15739
|
+
getWeek(date) {
|
15740
|
+
return getWeek(date);
|
15741
|
+
}
|
15742
|
+
getWeekdays() {
|
15743
|
+
return getWeekdays(this.locale);
|
15744
|
+
}
|
15745
|
+
getYear(date) {
|
15746
|
+
return getYear(date);
|
15747
|
+
}
|
15748
|
+
getMonth(date) {
|
15749
|
+
return getMonth(date);
|
15750
|
+
}
|
15751
|
+
startOfYear(date) {
|
15752
|
+
return startOfYear(date);
|
15753
|
+
}
|
15754
|
+
endOfYear(date) {
|
15755
|
+
return endOfYear(date);
|
15756
|
+
}
|
15757
|
+
}
|
15758
|
+
|
15759
|
+
// Composables
|
15760
|
+
|
15761
|
+
// Types
|
15762
|
+
|
15763
|
+
const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
|
15764
|
+
function createDate(options) {
|
15765
|
+
return options ?? {
|
15766
|
+
adapter: VuetifyDateAdapter
|
15767
|
+
};
|
15768
|
+
}
|
15769
|
+
function useDate(props) {
|
15770
|
+
const date = inject$1(DateAdapterSymbol);
|
15771
|
+
const locale = useLocale();
|
15772
|
+
if (!date) throw new Error('[Vuetify] Could not find injected date');
|
15773
|
+
|
15774
|
+
// eslint-disable-next-line new-cap
|
15775
|
+
const instance = new date.adapter(locale.current.value);
|
15776
|
+
watch(locale.current, val => {
|
15777
|
+
instance.locale = val;
|
15778
|
+
}, {
|
15779
|
+
immediate: true
|
15780
|
+
});
|
15781
|
+
return instance;
|
15782
|
+
}
|
15783
|
+
|
15122
15784
|
function useSticky(_ref) {
|
15123
15785
|
let {
|
15124
15786
|
rootEl,
|
@@ -16123,7 +16785,7 @@ const VRadioGroup = genericComponent()({
|
|
16123
16785
|
const model = useProxiedModel(props, 'modelValue');
|
16124
16786
|
useRender(() => {
|
16125
16787
|
const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
|
16126
|
-
const [inputProps, _1] =
|
16788
|
+
const [inputProps, _1] = VInput.filterProps(props);
|
16127
16789
|
const [controlProps, _2] = VSelectionControl.filterProps(props);
|
16128
16790
|
const label = slots.label ? slots.label({
|
16129
16791
|
label: props.label,
|
@@ -16188,11 +16850,14 @@ const VRangeSlider = genericComponent()({
|
|
16188
16850
|
},
|
16189
16851
|
emits: {
|
16190
16852
|
'update:focused': value => true,
|
16191
|
-
'update:modelValue': value => true
|
16853
|
+
'update:modelValue': value => true,
|
16854
|
+
end: value => true,
|
16855
|
+
start: value => true
|
16192
16856
|
},
|
16193
16857
|
setup(props, _ref) {
|
16194
16858
|
let {
|
16195
|
-
slots
|
16859
|
+
slots,
|
16860
|
+
emit
|
16196
16861
|
} = _ref;
|
16197
16862
|
const startThumbRef = ref();
|
16198
16863
|
const stopThumbRef = ref();
|
@@ -16205,6 +16870,11 @@ const VRangeSlider = genericComponent()({
|
|
16205
16870
|
const b = Math.abs(stopOffset);
|
16206
16871
|
return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
|
16207
16872
|
}
|
16873
|
+
const steps = useSteps(props);
|
16874
|
+
const model = useProxiedModel(props, 'modelValue', undefined, arr => {
|
16875
|
+
if (!arr?.length) return [0, 0];
|
16876
|
+
return arr.map(value => steps.roundValue(value));
|
16877
|
+
});
|
16208
16878
|
const {
|
16209
16879
|
activeThumbRef,
|
16210
16880
|
hasLabels,
|
@@ -16214,34 +16884,37 @@ const VRangeSlider = genericComponent()({
|
|
16214
16884
|
onSliderMousedown,
|
16215
16885
|
onSliderTouchstart,
|
16216
16886
|
position,
|
16217
|
-
roundValue,
|
16218
16887
|
trackContainerRef
|
16219
16888
|
} = useSlider({
|
16220
|
-
/* eslint-disable @typescript-eslint/no-use-before-define */
|
16221
16889
|
props,
|
16222
|
-
|
16223
|
-
|
16890
|
+
steps,
|
16891
|
+
onSliderStart: () => {
|
16892
|
+
emit('start', model.value);
|
16224
16893
|
},
|
16225
|
-
|
16894
|
+
onSliderEnd: _ref2 => {
|
16895
|
+
let {
|
16896
|
+
value
|
16897
|
+
} = _ref2;
|
16898
|
+
const newValue = activeThumbRef.value === startThumbRef.value?.$el ? [value, model.value[1]] : [model.value[0], value];
|
16899
|
+
model.value = newValue;
|
16900
|
+
emit('end', newValue);
|
16901
|
+
},
|
16902
|
+
onSliderMove: _ref3 => {
|
16903
|
+
let {
|
16904
|
+
value
|
16905
|
+
} = _ref3;
|
16226
16906
|
const [start, stop] = model.value;
|
16227
16907
|
if (!props.strict && start === stop && start !== min.value) {
|
16228
|
-
activeThumbRef.value =
|
16908
|
+
activeThumbRef.value = value > start ? stopThumbRef.value?.$el : startThumbRef.value?.$el;
|
16229
16909
|
activeThumbRef.value?.focus();
|
16230
16910
|
}
|
16231
16911
|
if (activeThumbRef.value === startThumbRef.value?.$el) {
|
16232
|
-
model.value = [Math.min(
|
16912
|
+
model.value = [Math.min(value, stop), stop];
|
16233
16913
|
} else {
|
16234
|
-
model.value = [start, Math.max(start,
|
16914
|
+
model.value = [start, Math.max(start, value)];
|
16235
16915
|
}
|
16236
16916
|
},
|
16237
16917
|
getActiveThumb
|
16238
|
-
/* eslint-enable @typescript-eslint/no-use-before-define */
|
16239
|
-
});
|
16240
|
-
|
16241
|
-
const model = useProxiedModel(props, 'modelValue', undefined, arr => {
|
16242
|
-
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain
|
16243
|
-
if (!arr || !arr.length) return [0, 0];
|
16244
|
-
return arr.map(value => roundValue(value));
|
16245
16918
|
});
|
16246
16919
|
const {
|
16247
16920
|
isFocused,
|
@@ -16251,7 +16924,7 @@ const VRangeSlider = genericComponent()({
|
|
16251
16924
|
const trackStart = computed(() => position(model.value[0]));
|
16252
16925
|
const trackStop = computed(() => position(model.value[1]));
|
16253
16926
|
useRender(() => {
|
16254
|
-
const [inputProps, _] =
|
16927
|
+
const [inputProps, _] = VInput.filterProps(props);
|
16255
16928
|
const hasPrepend = !!(props.label || slots.label || slots.prepend);
|
16256
16929
|
return createVNode(VInput, mergeProps({
|
16257
16930
|
"class": ['v-slider', 'v-range-slider', {
|
@@ -16269,11 +16942,11 @@ const VRangeSlider = genericComponent()({
|
|
16269
16942
|
"class": "v-slider__label",
|
16270
16943
|
"text": props.label
|
16271
16944
|
}, null) : undefined, slots.prepend?.(slotProps)]) : undefined,
|
16272
|
-
default:
|
16945
|
+
default: _ref4 => {
|
16273
16946
|
let {
|
16274
16947
|
id,
|
16275
16948
|
messagesId
|
16276
|
-
} =
|
16949
|
+
} = _ref4;
|
16277
16950
|
return createVNode("div", {
|
16278
16951
|
"class": "v-slider__container",
|
16279
16952
|
"onMousedown": onSliderMousedown,
|
@@ -17096,10 +17769,12 @@ const VSwitch = genericComponent()({
|
|
17096
17769
|
}
|
17097
17770
|
useRender(() => {
|
17098
17771
|
const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
|
17099
|
-
const [inputProps, _1] =
|
17772
|
+
const [inputProps, _1] = VInput.filterProps(props);
|
17100
17773
|
const [controlProps, _2] = VSelectionControl.filterProps(props);
|
17101
17774
|
const control = ref();
|
17102
|
-
function onClick() {
|
17775
|
+
function onClick(e) {
|
17776
|
+
e.stopPropagation();
|
17777
|
+
e.preventDefault();
|
17103
17778
|
control.value?.input?.click();
|
17104
17779
|
}
|
17105
17780
|
return createVNode(VInput, mergeProps({
|
@@ -17460,8 +18135,6 @@ const VTextarea = genericComponent()({
|
|
17460
18135
|
autofocus: Boolean,
|
17461
18136
|
counter: [Boolean, Number, String],
|
17462
18137
|
counterValue: Function,
|
17463
|
-
hint: String,
|
17464
|
-
persistentHint: Boolean,
|
17465
18138
|
prefix: String,
|
17466
18139
|
placeholder: String,
|
17467
18140
|
persistentPlaceholder: Boolean,
|
@@ -17516,9 +18189,6 @@ const VTextarea = genericComponent()({
|
|
17516
18189
|
const controlHeight = ref('');
|
17517
18190
|
const textareaRef = ref();
|
17518
18191
|
const isActive = computed(() => isFocused.value || props.persistentPlaceholder);
|
17519
|
-
const messages = computed(() => {
|
17520
|
-
return props.messages.length ? props.messages : isFocused.value || props.persistentHint ? props.hint : '';
|
17521
|
-
});
|
17522
18192
|
function onFocus() {
|
17523
18193
|
if (textareaRef.value !== document.activeElement) {
|
17524
18194
|
textareaRef.value?.focus();
|
@@ -17590,7 +18260,7 @@ const VTextarea = genericComponent()({
|
|
17590
18260
|
const [{
|
17591
18261
|
modelValue: _,
|
17592
18262
|
...inputProps
|
17593
|
-
}] =
|
18263
|
+
}] = VInput.filterProps(props);
|
17594
18264
|
const [fieldProps] = filterFieldProps(props);
|
17595
18265
|
return createVNode(VInput, mergeProps({
|
17596
18266
|
"ref": vInputRef,
|
@@ -17604,12 +18274,9 @@ const VTextarea = genericComponent()({
|
|
17604
18274
|
'v-textarea--auto-grow': props.autoGrow,
|
17605
18275
|
'v-textarea--no-resize': props.noResize || props.autoGrow,
|
17606
18276
|
'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
|
17607
|
-
}]
|
17608
|
-
"onClick:prepend": props['onClick:prepend'],
|
17609
|
-
"onClick:append": props['onClick:append']
|
18277
|
+
}]
|
17610
18278
|
}, rootAttrs, inputProps, {
|
17611
|
-
"focused": isFocused.value
|
17612
|
-
"messages": messages.value
|
18279
|
+
"focused": isFocused.value
|
17613
18280
|
}), {
|
17614
18281
|
...slots,
|
17615
18282
|
default: _ref2 => {
|
@@ -18491,6 +19158,7 @@ function createVuetify$1() {
|
|
18491
19158
|
const theme = createTheme(options.theme);
|
18492
19159
|
const icons = createIcons(options.icons);
|
18493
19160
|
const locale = createLocale(options.locale);
|
19161
|
+
const date = createDate(options.date);
|
18494
19162
|
const install = app => {
|
18495
19163
|
for (const key in directives) {
|
18496
19164
|
app.directive(key, directives[key]);
|
@@ -18511,6 +19179,7 @@ function createVuetify$1() {
|
|
18511
19179
|
app.provide(ThemeSymbol, theme);
|
18512
19180
|
app.provide(IconSymbol, icons);
|
18513
19181
|
app.provide(LocaleSymbol, locale);
|
19182
|
+
app.provide(DateAdapterSymbol, date);
|
18514
19183
|
if (IN_BROWSER && options.ssr) {
|
18515
19184
|
if (app.$nuxt) {
|
18516
19185
|
app.$nuxt.hook('app:suspense:resolve', () => {
|
@@ -18538,7 +19207,8 @@ function createVuetify$1() {
|
|
18538
19207
|
display: inject.call(this, DisplaySymbol),
|
18539
19208
|
theme: inject.call(this, ThemeSymbol),
|
18540
19209
|
icons: inject.call(this, IconSymbol),
|
18541
|
-
locale: inject.call(this, LocaleSymbol)
|
19210
|
+
locale: inject.call(this, LocaleSymbol),
|
19211
|
+
date: inject.call(this, DateAdapterSymbol)
|
18542
19212
|
});
|
18543
19213
|
}
|
18544
19214
|
}
|
@@ -18551,10 +19221,11 @@ function createVuetify$1() {
|
|
18551
19221
|
display,
|
18552
19222
|
theme,
|
18553
19223
|
icons,
|
18554
|
-
locale
|
19224
|
+
locale,
|
19225
|
+
date
|
18555
19226
|
};
|
18556
19227
|
}
|
18557
|
-
const version$1 = "4.0.0-dev-
|
19228
|
+
const version$1 = "4.0.0-dev-20230421.0";
|
18558
19229
|
createVuetify$1.version = version$1;
|
18559
19230
|
|
18560
19231
|
// Vue's inject() can only be used in setup
|
@@ -18574,8 +19245,8 @@ const createVuetify = function () {
|
|
18574
19245
|
...options
|
18575
19246
|
});
|
18576
19247
|
};
|
18577
|
-
const version = "4.0.0-dev-
|
19248
|
+
const version = "4.0.0-dev-20230421.0";
|
18578
19249
|
createVuetify.version = version;
|
18579
19250
|
|
18580
|
-
export { components, createVuetify, directives, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
|
19251
|
+
export { components, createVuetify, directives, useDate, useDisplay, useLayout, useLocale, useRtl, useTheme, version };
|
18581
19252
|
//# sourceMappingURL=vuetify.esm.js.map
|