@vuetify/nightly 3.9.2-master.2025-07-28 → 3.9.3-dev.2025-07-30
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 +8 -53
- package/dist/json/attributes.json +3804 -3784
- package/dist/json/importMap-labs.json +28 -28
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +5 -0
- package/dist/json/web-types.json +6986 -6916
- package/dist/vuetify-labs.cjs +272 -44
- package/dist/vuetify-labs.css +5500 -5503
- package/dist/vuetify-labs.d.ts +132 -69
- package/dist/vuetify-labs.esm.js +272 -44
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +272 -44
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +234 -35
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +4797 -4800
- package/dist/vuetify.d.ts +122 -69
- package/dist/vuetify.esm.js +234 -35
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +234 -35
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +792 -768
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.js +1 -0
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.js +11 -6
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerControls.js +8 -1
- package/lib/components/VDatePicker/VDatePickerControls.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js +11 -0
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonths.js +3 -0
- package/lib/components/VDatePicker/VDatePickerMonths.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.d.ts +15 -0
- package/lib/components/VFileInput/VFileInput.js +38 -9
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VList/VList.js +2 -1
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListChildren.js +3 -4
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VList/VListItem.js +7 -1
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.d.ts +75 -0
- package/lib/components/VProgressLinear/VProgressLinear.js +32 -6
- package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +1 -1
- package/lib/components/VProgressLinear/chunks.d.ts +55 -0
- package/lib/components/VProgressLinear/chunks.js +62 -0
- package/lib/components/VProgressLinear/chunks.js.map +1 -0
- package/lib/components/VSelect/VSelect.js +1 -0
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlider/VSliderThumb.css +9 -14
- package/lib/components/VSlider/VSliderThumb.js +13 -7
- package/lib/components/VSlider/VSliderThumb.js.map +1 -1
- package/lib/components/VSlider/VSliderThumb.sass +9 -14
- package/lib/components/VSlider/slider.d.ts +1 -0
- package/lib/components/VSlider/slider.js +2 -0
- package/lib/components/VSlider/slider.js.map +1 -1
- package/lib/composables/fileFilter.d.ts +18 -0
- package/lib/composables/fileFilter.js +38 -0
- package/lib/composables/fileFilter.js.map +1 -0
- package/lib/composables/theme.d.ts +1 -0
- package/lib/composables/theme.js +3 -1
- package/lib/composables/theme.js.map +1 -1
- package/lib/directives/ripple/index.js +2 -2
- package/lib/directives/ripple/index.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +70 -69
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VFileUpload/VFileUpload.d.ts +15 -0
- package/lib/labs/VFileUpload/VFileUpload.js +39 -9
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/lib/locale/af.d.ts +7 -0
- package/lib/locale/af.js +7 -0
- package/lib/locale/af.js.map +1 -1
- package/lib/locale/ar.d.ts +7 -0
- package/lib/locale/ar.js +13 -6
- package/lib/locale/ar.js.map +1 -1
- package/lib/locale/az.d.ts +7 -0
- package/lib/locale/az.js +7 -0
- package/lib/locale/az.js.map +1 -1
- package/lib/locale/bg.d.ts +7 -0
- package/lib/locale/bg.js +7 -0
- package/lib/locale/bg.js.map +1 -1
- package/lib/locale/ca.d.ts +7 -0
- package/lib/locale/ca.js +7 -0
- package/lib/locale/ca.js.map +1 -1
- package/lib/locale/ckb.d.ts +7 -0
- package/lib/locale/ckb.js +7 -0
- package/lib/locale/ckb.js.map +1 -1
- package/lib/locale/cs.d.ts +7 -0
- package/lib/locale/cs.js +7 -0
- package/lib/locale/cs.js.map +1 -1
- package/lib/locale/da.d.ts +7 -0
- package/lib/locale/da.js +7 -0
- package/lib/locale/da.js.map +1 -1
- package/lib/locale/de.d.ts +7 -0
- package/lib/locale/de.js +7 -0
- package/lib/locale/de.js.map +1 -1
- package/lib/locale/el.d.ts +7 -0
- package/lib/locale/el.js +7 -0
- package/lib/locale/el.js.map +1 -1
- package/lib/locale/en.d.ts +7 -0
- package/lib/locale/en.js +8 -0
- package/lib/locale/en.js.map +1 -1
- package/lib/locale/es.d.ts +7 -0
- package/lib/locale/es.js +7 -0
- package/lib/locale/es.js.map +1 -1
- package/lib/locale/et.d.ts +7 -0
- package/lib/locale/et.js +7 -0
- package/lib/locale/et.js.map +1 -1
- package/lib/locale/fa.d.ts +7 -0
- package/lib/locale/fa.js +7 -0
- package/lib/locale/fa.js.map +1 -1
- package/lib/locale/fi.d.ts +7 -0
- package/lib/locale/fi.js +7 -0
- package/lib/locale/fi.js.map +1 -1
- package/lib/locale/fr.d.ts +7 -0
- package/lib/locale/fr.js +7 -0
- package/lib/locale/fr.js.map +1 -1
- package/lib/locale/he.d.ts +7 -0
- package/lib/locale/he.js +7 -0
- package/lib/locale/he.js.map +1 -1
- package/lib/locale/hr.d.ts +7 -0
- package/lib/locale/hr.js +7 -0
- package/lib/locale/hr.js.map +1 -1
- package/lib/locale/hu.d.ts +7 -0
- package/lib/locale/hu.js +7 -0
- package/lib/locale/hu.js.map +1 -1
- package/lib/locale/id.d.ts +7 -0
- package/lib/locale/id.js +7 -0
- package/lib/locale/id.js.map +1 -1
- package/lib/locale/it.d.ts +7 -0
- package/lib/locale/it.js +7 -0
- package/lib/locale/it.js.map +1 -1
- package/lib/locale/ja.d.ts +7 -0
- package/lib/locale/ja.js +7 -0
- package/lib/locale/ja.js.map +1 -1
- package/lib/locale/km.d.ts +7 -0
- package/lib/locale/km.js +7 -0
- package/lib/locale/km.js.map +1 -1
- package/lib/locale/ko.d.ts +7 -0
- package/lib/locale/ko.js +7 -0
- package/lib/locale/ko.js.map +1 -1
- package/lib/locale/lt.d.ts +7 -0
- package/lib/locale/lt.js +7 -0
- package/lib/locale/lt.js.map +1 -1
- package/lib/locale/lv.d.ts +7 -0
- package/lib/locale/lv.js +7 -0
- package/lib/locale/lv.js.map +1 -1
- package/lib/locale/nl.d.ts +7 -0
- package/lib/locale/nl.js +7 -0
- package/lib/locale/nl.js.map +1 -1
- package/lib/locale/no.d.ts +7 -0
- package/lib/locale/no.js +7 -0
- package/lib/locale/no.js.map +1 -1
- package/lib/locale/pl.d.ts +7 -0
- package/lib/locale/pl.js +7 -0
- package/lib/locale/pl.js.map +1 -1
- package/lib/locale/pt.d.ts +7 -0
- package/lib/locale/pt.js +7 -0
- package/lib/locale/pt.js.map +1 -1
- package/lib/locale/ro.d.ts +7 -0
- package/lib/locale/ro.js +7 -0
- package/lib/locale/ro.js.map +1 -1
- package/lib/locale/ru.d.ts +7 -0
- package/lib/locale/ru.js +7 -0
- package/lib/locale/ru.js.map +1 -1
- package/lib/locale/sk.d.ts +7 -0
- package/lib/locale/sk.js +7 -0
- package/lib/locale/sk.js.map +1 -1
- package/lib/locale/sl.d.ts +7 -0
- package/lib/locale/sl.js +7 -0
- package/lib/locale/sl.js.map +1 -1
- package/lib/locale/sr-Cyrl.d.ts +7 -0
- package/lib/locale/sr-Cyrl.js +7 -0
- package/lib/locale/sr-Cyrl.js.map +1 -1
- package/lib/locale/sr-Latn.d.ts +7 -0
- package/lib/locale/sr-Latn.js +7 -0
- package/lib/locale/sr-Latn.js.map +1 -1
- package/lib/locale/sv.d.ts +7 -0
- package/lib/locale/sv.js +7 -0
- package/lib/locale/sv.js.map +1 -1
- package/lib/locale/th.d.ts +7 -0
- package/lib/locale/th.js +7 -0
- package/lib/locale/th.js.map +1 -1
- package/lib/locale/tr.d.ts +7 -0
- package/lib/locale/tr.js +7 -0
- package/lib/locale/tr.js.map +1 -1
- package/lib/locale/uk.d.ts +7 -0
- package/lib/locale/uk.js +7 -0
- package/lib/locale/uk.js.map +1 -1
- package/lib/locale/vi.d.ts +7 -0
- package/lib/locale/vi.js +7 -0
- package/lib/locale/vi.js.map +1 -1
- package/lib/locale/zh-Hans.d.ts +7 -0
- package/lib/locale/zh-Hans.js +7 -0
- package/lib/locale/zh-Hans.js.map +1 -1
- package/lib/locale/zh-Hant.d.ts +7 -0
- package/lib/locale/zh-Hant.js +7 -0
- package/lib/locale/zh-Hant.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify-labs.esm.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.9.
|
2
|
+
* Vuetify v3.9.3-dev.2025-07-30
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -2145,6 +2145,14 @@ var en = {
|
|
2145
2145
|
header: 'Enter date',
|
2146
2146
|
input: {
|
2147
2147
|
placeholder: 'Enter date'
|
2148
|
+
},
|
2149
|
+
ariaLabel: {
|
2150
|
+
previousMonth: 'Previous month',
|
2151
|
+
nextMonth: 'Next month',
|
2152
|
+
selectYear: 'Select year',
|
2153
|
+
selectDate: '{0}',
|
2154
|
+
// Full date format
|
2155
|
+
currentDate: 'Today, {0}'
|
2148
2156
|
}
|
2149
2157
|
},
|
2150
2158
|
noDataText: 'No data available',
|
@@ -2683,6 +2691,7 @@ function createTheme(options) {
|
|
2683
2691
|
return acc;
|
2684
2692
|
});
|
2685
2693
|
const current = toRef(() => computedThemes.value[name.value]);
|
2694
|
+
const isSystem = toRef(() => _name.value === 'system');
|
2686
2695
|
const styles = computed(() => {
|
2687
2696
|
const lines = [];
|
2688
2697
|
const important = parsedOptions.unimportant ? '' : ' !important';
|
@@ -2770,7 +2779,7 @@ function createTheme(options) {
|
|
2770
2779
|
}
|
2771
2780
|
}
|
2772
2781
|
function change(themeName) {
|
2773
|
-
if (!themeNames.value.includes(themeName)) {
|
2782
|
+
if (themeName !== 'system' && !themeNames.value.includes(themeName)) {
|
2774
2783
|
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2775
2784
|
return;
|
2776
2785
|
}
|
@@ -2803,6 +2812,7 @@ function createTheme(options) {
|
|
2803
2812
|
cycle,
|
2804
2813
|
toggle,
|
2805
2814
|
isDisabled: parsedOptions.isDisabled,
|
2815
|
+
isSystem,
|
2806
2816
|
name,
|
2807
2817
|
themes,
|
2808
2818
|
current,
|
@@ -5242,6 +5252,69 @@ function useLocation(props) {
|
|
5242
5252
|
};
|
5243
5253
|
}
|
5244
5254
|
|
5255
|
+
// Utilities
|
5256
|
+
|
5257
|
+
// Types
|
5258
|
+
|
5259
|
+
// Composables
|
5260
|
+
const makeChunksProps = propsFactory({
|
5261
|
+
chunkCount: {
|
5262
|
+
type: [Number, String],
|
5263
|
+
default: null
|
5264
|
+
},
|
5265
|
+
chunkWidth: {
|
5266
|
+
type: [Number, String],
|
5267
|
+
default: null
|
5268
|
+
},
|
5269
|
+
chunkGap: {
|
5270
|
+
type: [Number, String],
|
5271
|
+
default: 4
|
5272
|
+
}
|
5273
|
+
}, 'chunks');
|
5274
|
+
function useChunks(props, containerWidth) {
|
5275
|
+
const hasChunks = toRef(() => !!props.chunkCount || !!props.chunkWidth);
|
5276
|
+
const chunkWidth = computed(() => {
|
5277
|
+
const containerSize = toValue(containerWidth);
|
5278
|
+
if (!containerSize) {
|
5279
|
+
return 0;
|
5280
|
+
}
|
5281
|
+
if (!props.chunkCount) {
|
5282
|
+
return Number(props.chunkWidth);
|
5283
|
+
}
|
5284
|
+
const count = Number(props.chunkCount);
|
5285
|
+
const availableWidth = containerSize - Number(props.chunkGap) * (count - 1);
|
5286
|
+
return availableWidth / count;
|
5287
|
+
});
|
5288
|
+
const chunkGap = toRef(() => Number(props.chunkGap));
|
5289
|
+
const chunksMaskStyles = computed(() => {
|
5290
|
+
if (!hasChunks.value) {
|
5291
|
+
return {};
|
5292
|
+
}
|
5293
|
+
const chunkGapPx = convertToUnit(chunkGap.value);
|
5294
|
+
const chunkWidthPx = convertToUnit(chunkWidth.value);
|
5295
|
+
return {
|
5296
|
+
maskRepeat: 'repeat-x',
|
5297
|
+
maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,
|
5298
|
+
maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`
|
5299
|
+
};
|
5300
|
+
});
|
5301
|
+
function snapValueToChunk(val) {
|
5302
|
+
const containerSize = toValue(containerWidth);
|
5303
|
+
if (!containerSize) {
|
5304
|
+
return val;
|
5305
|
+
}
|
5306
|
+
const gapRelativeSize = 100 * chunkGap.value / containerSize;
|
5307
|
+
const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize;
|
5308
|
+
const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize);
|
5309
|
+
return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100);
|
5310
|
+
}
|
5311
|
+
return {
|
5312
|
+
hasChunks,
|
5313
|
+
chunksMaskStyles,
|
5314
|
+
snapValueToChunk
|
5315
|
+
};
|
5316
|
+
}
|
5317
|
+
|
5245
5318
|
const makeVProgressLinearProps = propsFactory({
|
5246
5319
|
absolute: Boolean,
|
5247
5320
|
active: {
|
@@ -5276,6 +5349,7 @@ const makeVProgressLinearProps = propsFactory({
|
|
5276
5349
|
stream: Boolean,
|
5277
5350
|
striped: Boolean,
|
5278
5351
|
roundedBar: Boolean,
|
5352
|
+
...makeChunksProps(),
|
5279
5353
|
...makeComponentProps(),
|
5280
5354
|
...makeLocationProps({
|
5281
5355
|
location: 'top'
|
@@ -5294,6 +5368,7 @@ const VProgressLinear = genericComponent()({
|
|
5294
5368
|
let {
|
5295
5369
|
slots
|
5296
5370
|
} = _ref;
|
5371
|
+
const root = ref();
|
5297
5372
|
const progress = useProxiedModel(props, 'modelValue');
|
5298
5373
|
const {
|
5299
5374
|
isRtl,
|
@@ -5335,6 +5410,24 @@ const VProgressLinear = genericComponent()({
|
|
5335
5410
|
const isReversed = computed(() => isRtl.value !== props.reverse);
|
5336
5411
|
const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
|
5337
5412
|
const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
|
5413
|
+
const containerWidth = shallowRef(0);
|
5414
|
+
const {
|
5415
|
+
hasChunks,
|
5416
|
+
chunksMaskStyles,
|
5417
|
+
snapValueToChunk
|
5418
|
+
} = useChunks(props, containerWidth);
|
5419
|
+
useToggleScope(hasChunks, () => {
|
5420
|
+
const {
|
5421
|
+
resizeRef
|
5422
|
+
} = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);
|
5423
|
+
watchEffect(() => resizeRef.value = root.value);
|
5424
|
+
});
|
5425
|
+
const bufferWidth = computed(() => {
|
5426
|
+
return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;
|
5427
|
+
});
|
5428
|
+
const barWidth = computed(() => {
|
5429
|
+
return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;
|
5430
|
+
});
|
5338
5431
|
function handleClick(e) {
|
5339
5432
|
if (!intersectionRef.value) return;
|
5340
5433
|
const {
|
@@ -5345,8 +5438,11 @@ const VProgressLinear = genericComponent()({
|
|
5345
5438
|
const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
|
5346
5439
|
progress.value = Math.round(value / width * max.value);
|
5347
5440
|
}
|
5441
|
+
watchEffect(() => {
|
5442
|
+
intersectionRef.value = root.value;
|
5443
|
+
});
|
5348
5444
|
useRender(() => createVNode(props.tag, {
|
5349
|
-
"ref":
|
5445
|
+
"ref": root,
|
5350
5446
|
"class": normalizeClass(['v-progress-linear', {
|
5351
5447
|
'v-progress-linear--absolute': props.absolute,
|
5352
5448
|
'v-progress-linear--active': props.active && isIntersecting.value,
|
@@ -5362,7 +5458,7 @@ const VProgressLinear = genericComponent()({
|
|
5362
5458
|
height: props.active ? convertToUnit(height.value) : 0,
|
5363
5459
|
'--v-progress-linear-height': convertToUnit(height.value),
|
5364
5460
|
...(props.absolute ? locationStyles.value : {})
|
5365
|
-
}, props.style]),
|
5461
|
+
}, chunksMaskStyles.value, props.style]),
|
5366
5462
|
"role": "progressbar",
|
5367
5463
|
"aria-hidden": props.active ? 'false' : 'true',
|
5368
5464
|
"aria-valuemin": "0",
|
@@ -5392,7 +5488,7 @@ const VProgressLinear = genericComponent()({
|
|
5392
5488
|
"class": normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
|
5393
5489
|
"style": normalizeStyle([bufferColorStyles.value, {
|
5394
5490
|
opacity: parseFloat(props.bufferOpacity),
|
5395
|
-
width: convertToUnit(
|
5491
|
+
width: convertToUnit(bufferWidth.value, '%')
|
5396
5492
|
}])
|
5397
5493
|
}, null), createVNode(Transition, {
|
5398
5494
|
"name": transition.value
|
@@ -5400,7 +5496,7 @@ const VProgressLinear = genericComponent()({
|
|
5400
5496
|
default: () => [!props.indeterminate ? createElementVNode("div", {
|
5401
5497
|
"class": normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
|
5402
5498
|
"style": normalizeStyle([barColorStyles.value, {
|
5403
|
-
width: convertToUnit(
|
5499
|
+
width: convertToUnit(barWidth.value, '%')
|
5404
5500
|
}])
|
5405
5501
|
}, null) : createElementVNode("div", {
|
5406
5502
|
"class": "v-progress-linear__indeterminate"
|
@@ -5683,8 +5779,8 @@ const ripples = {
|
|
5683
5779
|
if (!el?._ripple?.enabled) return;
|
5684
5780
|
const ripples = el.getElementsByClassName('v-ripple__animation');
|
5685
5781
|
if (ripples.length === 0) return;
|
5686
|
-
const animation = ripples
|
5687
|
-
if (animation
|
5782
|
+
const animation = Array.from(ripples).findLast(ripple => !ripple.dataset.isHiding);
|
5783
|
+
if (!animation) return;else animation.dataset.isHiding = 'true';
|
5688
5784
|
const diff = performance.now() - Number(animation.dataset.activated);
|
5689
5785
|
const delay = Math.max(250 - diff, 0);
|
5690
5786
|
setTimeout(() => {
|
@@ -9604,6 +9700,11 @@ const VListItem = genericComponent()({
|
|
9604
9700
|
const isLink = toRef(() => props.link !== false && link.isLink.value);
|
9605
9701
|
const isSelectable = computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
|
9606
9702
|
const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
|
9703
|
+
const role = computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
|
9704
|
+
const ariaSelected = computed(() => {
|
9705
|
+
if (!isSelectable.value) return undefined;
|
9706
|
+
return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
|
9707
|
+
});
|
9607
9708
|
const roundedProps = toRef(() => props.rounded || props.nav);
|
9608
9709
|
const color = toRef(() => props.color ?? props.activeColor);
|
9609
9710
|
const variantProps = toRef(() => ({
|
@@ -9707,7 +9808,8 @@ const VListItem = genericComponent()({
|
|
9707
9808
|
}, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
|
9708
9809
|
"style": [colorStyles.value, dimensionStyles.value, props.style],
|
9709
9810
|
"tabindex": isClickable.value ? list ? -2 : 0 : undefined,
|
9710
|
-
"aria-selected":
|
9811
|
+
"aria-selected": ariaSelected.value,
|
9812
|
+
"role": role.value,
|
9711
9813
|
"onClick": onClick,
|
9712
9814
|
"onKeydown": isClickable.value && !isLink.value && onKeyDown
|
9713
9815
|
}, link.linkProps), {
|
@@ -9902,11 +10004,9 @@ const VListChildren = genericComponent()({
|
|
9902
10004
|
let {
|
9903
10005
|
props: activatorProps
|
9904
10006
|
} = _ref3;
|
9905
|
-
const listItemProps = {
|
9906
|
-
...itemProps,
|
9907
|
-
...activatorProps,
|
10007
|
+
const listItemProps = mergeProps(itemProps, activatorProps, {
|
9908
10008
|
value: props.returnObject ? item : itemProps.value
|
9909
|
-
};
|
10009
|
+
});
|
9910
10010
|
return slots.header ? slots.header({
|
9911
10011
|
props: listItemProps
|
9912
10012
|
}) : createVNode(VListItem, listItemProps, slotsWithItem);
|
@@ -10209,6 +10309,7 @@ const VList = genericComponent()({
|
|
10209
10309
|
const activeColor = toRef(() => props.activeColor);
|
10210
10310
|
const baseColor = toRef(() => props.baseColor);
|
10211
10311
|
const color = toRef(() => props.color);
|
10312
|
+
const isSelectable = toRef(() => props.selectable || props.activatable);
|
10212
10313
|
createList({
|
10213
10314
|
filterable: props.filterable
|
10214
10315
|
});
|
@@ -10280,7 +10381,7 @@ const VList = genericComponent()({
|
|
10280
10381
|
}, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
|
10281
10382
|
"style": normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
|
10282
10383
|
"tabindex": props.disabled ? -1 : 0,
|
10283
|
-
"role":
|
10384
|
+
"role": isSelectable.value ? 'listbox' : 'list',
|
10284
10385
|
"aria-activedescendant": undefined,
|
10285
10386
|
"onFocusin": onFocusin,
|
10286
10387
|
"onFocusout": onFocusout,
|
@@ -13359,6 +13460,7 @@ const VSelect = genericComponent()({
|
|
13359
13460
|
"onKeydown": onListKeydown,
|
13360
13461
|
"onFocusin": onFocusin,
|
13361
13462
|
"tabindex": "-1",
|
13463
|
+
"selectable": true,
|
13362
13464
|
"aria-live": "polite",
|
13363
13465
|
"aria-label": `${props.label}-list`,
|
13364
13466
|
"color": props.itemColor ?? props.color
|
@@ -13978,6 +14080,7 @@ const VAutocomplete = genericComponent()({
|
|
13978
14080
|
"onFocusin": onFocusin,
|
13979
14081
|
"onFocusout": onFocusout,
|
13980
14082
|
"tabindex": "-1",
|
14083
|
+
"selectable": true,
|
13981
14084
|
"aria-live": "polite",
|
13982
14085
|
"color": props.itemColor ?? props.color
|
13983
14086
|
}, listEvents, props.listProps), {
|
@@ -16310,6 +16413,7 @@ const useSlider = _ref => {
|
|
16310
16413
|
const numTicks = computed(() => (max.value - min.value) / step.value);
|
16311
16414
|
const disabled = toRef(() => props.disabled);
|
16312
16415
|
const thumbColor = computed(() => props.error || props.disabled ? undefined : props.thumbColor ?? props.color);
|
16416
|
+
const thumbLabelColor = computed(() => props.error || props.disabled ? undefined : props.thumbColor);
|
16313
16417
|
const trackColor = computed(() => props.error || props.disabled ? undefined : props.trackColor ?? props.color);
|
16314
16418
|
const trackFillColor = computed(() => props.error || props.disabled ? undefined : props.trackFillColor ?? props.color);
|
16315
16419
|
const mousePressed = shallowRef(false);
|
@@ -16467,6 +16571,7 @@ const useSlider = _ref => {
|
|
16467
16571
|
step,
|
16468
16572
|
thumbSize,
|
16469
16573
|
thumbColor,
|
16574
|
+
thumbLabelColor,
|
16470
16575
|
thumbLabel: toRef(() => props.thumbLabel),
|
16471
16576
|
ticks: toRef(() => props.ticks),
|
16472
16577
|
tickSize,
|
@@ -16532,6 +16637,7 @@ const VSliderThumb = genericComponent()({
|
|
16532
16637
|
min,
|
16533
16638
|
max,
|
16534
16639
|
thumbColor,
|
16640
|
+
thumbLabelColor,
|
16535
16641
|
step,
|
16536
16642
|
disabled,
|
16537
16643
|
thumbSize,
|
@@ -16553,6 +16659,10 @@ const VSliderThumb = genericComponent()({
|
|
16553
16659
|
textColorClasses,
|
16554
16660
|
textColorStyles
|
16555
16661
|
} = useTextColor(thumbColor);
|
16662
|
+
const {
|
16663
|
+
backgroundColorClasses,
|
16664
|
+
backgroundColorStyles
|
16665
|
+
} = useBackgroundColor(thumbLabelColor);
|
16556
16666
|
const {
|
16557
16667
|
pageup,
|
16558
16668
|
pagedown,
|
@@ -16618,9 +16728,7 @@ const VSliderThumb = genericComponent()({
|
|
16618
16728
|
"onKeydown": !readonly.value ? onKeydown : undefined
|
16619
16729
|
}, [createElementVNode("div", {
|
16620
16730
|
"class": normalizeClass(['v-slider-thumb__surface', textColorClasses.value, elevationClasses.value]),
|
16621
|
-
"style":
|
16622
|
-
...textColorStyles.value
|
16623
|
-
}
|
16731
|
+
"style": normalizeStyle(textColorStyles.value)
|
16624
16732
|
}, null), withDirectives(createElementVNode("div", {
|
16625
16733
|
"class": normalizeClass(['v-slider-thumb__ripple', textColorClasses.value]),
|
16626
16734
|
"style": normalizeStyle(textColorStyles.value)
|
@@ -16633,10 +16741,13 @@ const VSliderThumb = genericComponent()({
|
|
16633
16741
|
default: () => [withDirectives(createElementVNode("div", {
|
16634
16742
|
"class": "v-slider-thumb__label-container"
|
16635
16743
|
}, [createElementVNode("div", {
|
16636
|
-
"class": normalizeClass(['v-slider-thumb__label',
|
16744
|
+
"class": normalizeClass(['v-slider-thumb__label', backgroundColorClasses.value]),
|
16745
|
+
"style": normalizeStyle(backgroundColorStyles.value)
|
16637
16746
|
}, [createElementVNode("div", null, [slots['thumb-label']?.({
|
16638
16747
|
modelValue: props.modelValue
|
16639
|
-
}) ?? props.modelValue.toFixed(step.value ? decimals.value : 1)])
|
16748
|
+
}) ?? props.modelValue.toFixed(step.value ? decimals.value : 1)]), createElementVNode("div", {
|
16749
|
+
"class": "v-slider-thumb__label-wedge"
|
16750
|
+
}, null)])]), [[vShow, thumbLabel.value && props.focused || thumbLabel.value === 'always']])]
|
16640
16751
|
})]);
|
16641
16752
|
});
|
16642
16753
|
return {};
|
@@ -18783,19 +18894,23 @@ const VCombobox = genericComponent()({
|
|
18783
18894
|
get: () => {
|
18784
18895
|
return _search.value;
|
18785
18896
|
},
|
18786
|
-
set: val => {
|
18897
|
+
set: async val => {
|
18787
18898
|
_search.value = val ?? '';
|
18788
18899
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18789
18900
|
model.value = [transformItem$3(props, val)];
|
18790
18901
|
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18791
18902
|
}
|
18792
18903
|
if (val && props.multiple && props.delimiters?.length) {
|
18793
|
-
const
|
18904
|
+
const signsToMatch = props.delimiters.map(escapeForRegex).join('|');
|
18905
|
+
const values = val.split(new RegExp(`(?:${signsToMatch})+`));
|
18794
18906
|
if (values.length > 1) {
|
18795
|
-
|
18907
|
+
for (let v of values) {
|
18796
18908
|
v = v.trim();
|
18797
|
-
if (v)
|
18798
|
-
|
18909
|
+
if (v) {
|
18910
|
+
select(transformItem$3(props, v));
|
18911
|
+
await nextTick();
|
18912
|
+
}
|
18913
|
+
}
|
18799
18914
|
_search.value = '';
|
18800
18915
|
}
|
18801
18916
|
}
|
@@ -19077,6 +19192,7 @@ const VCombobox = genericComponent()({
|
|
19077
19192
|
"selected": selectedValues.value,
|
19078
19193
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
19079
19194
|
"onMousedown": e => e.preventDefault(),
|
19195
|
+
"selectable": true,
|
19080
19196
|
"onKeydown": onListKeydown,
|
19081
19197
|
"onFocusin": onFocusin,
|
19082
19198
|
"onFocusout": onFocusout,
|
@@ -22650,6 +22766,9 @@ const VDatePickerControls = genericComponent()({
|
|
22650
22766
|
let {
|
22651
22767
|
emit
|
22652
22768
|
} = _ref;
|
22769
|
+
const {
|
22770
|
+
t
|
22771
|
+
} = useLocale();
|
22653
22772
|
const disableMonth = computed(() => {
|
22654
22773
|
return Array.isArray(props.disabled) ? props.disabled.includes('text') : !!props.disabled;
|
22655
22774
|
});
|
@@ -22696,6 +22815,7 @@ const VDatePickerControls = genericComponent()({
|
|
22696
22815
|
"density": "comfortable",
|
22697
22816
|
"icon": props.modeIcon,
|
22698
22817
|
"variant": "text",
|
22818
|
+
"aria-label": t('$vuetify.datePicker.ariaLabel.selectYear'),
|
22699
22819
|
"onClick": onClickYear
|
22700
22820
|
}, null), createVNode(VSpacer, null, null), createElementVNode("div", {
|
22701
22821
|
"class": "v-date-picker-controls__month"
|
@@ -22705,6 +22825,7 @@ const VDatePickerControls = genericComponent()({
|
|
22705
22825
|
"density": "comfortable",
|
22706
22826
|
"icon": props.prevIcon,
|
22707
22827
|
"variant": "text",
|
22828
|
+
"aria-label": t('$vuetify.datePicker.ariaLabel.previousMonth'),
|
22708
22829
|
"onClick": onClickPrev
|
22709
22830
|
}, null), createVNode(VBtn, {
|
22710
22831
|
"data-testid": "next-month",
|
@@ -22712,6 +22833,7 @@ const VDatePickerControls = genericComponent()({
|
|
22712
22833
|
"icon": props.nextIcon,
|
22713
22834
|
"density": "comfortable",
|
22714
22835
|
"variant": "text",
|
22836
|
+
"aria-label": t('$vuetify.datePicker.ariaLabel.nextMonth'),
|
22715
22837
|
"onClick": onClickNext
|
22716
22838
|
}, null)])]);
|
22717
22839
|
});
|
@@ -22976,6 +23098,9 @@ const VDatePickerMonth = genericComponent()({
|
|
22976
23098
|
slots
|
22977
23099
|
} = _ref;
|
22978
23100
|
const daysRef = ref();
|
23101
|
+
const {
|
23102
|
+
t
|
23103
|
+
} = useLocale();
|
22979
23104
|
const {
|
22980
23105
|
daysInMonth,
|
22981
23106
|
model,
|
@@ -23032,6 +23157,11 @@ const VDatePickerMonth = genericComponent()({
|
|
23032
23157
|
model.value = [rangeStart.value];
|
23033
23158
|
}
|
23034
23159
|
}
|
23160
|
+
function getDateAriaLabel(item) {
|
23161
|
+
const fullDate = adapter.format(item.date, 'fullDateWithWeekday');
|
23162
|
+
const localeKey = item.isToday ? 'currentDate' : 'selectDate';
|
23163
|
+
return t(`$vuetify.datePicker.ariaLabel.${localeKey}`, fullDate);
|
23164
|
+
}
|
23035
23165
|
function onMultipleClick(value) {
|
23036
23166
|
const index = model.value.findIndex(selection => adapter.isSameDay(selection, value));
|
23037
23167
|
if (index === -1) {
|
@@ -23083,6 +23213,8 @@ const VDatePickerMonth = genericComponent()({
|
|
23083
23213
|
ripple: false,
|
23084
23214
|
text: item.localized,
|
23085
23215
|
variant: item.isSelected ? 'flat' : item.isToday ? 'outlined' : 'text',
|
23216
|
+
'aria-label': getDateAriaLabel(item),
|
23217
|
+
'aria-current': item.isToday ? 'date' : undefined,
|
23086
23218
|
onClick: () => onClick(item.date)
|
23087
23219
|
},
|
23088
23220
|
item,
|
@@ -23137,11 +23269,13 @@ const VDatePickerMonths = genericComponent()({
|
|
23137
23269
|
}
|
23138
23270
|
return createRange(12).map(i => {
|
23139
23271
|
const text = adapter.format(date, 'monthShort');
|
23272
|
+
const label = adapter.format(date, 'month');
|
23140
23273
|
const isDisabled = !!(!isMonthAllowed(i) || props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date) || props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))));
|
23141
23274
|
date = adapter.getNextMonth(date);
|
23142
23275
|
return {
|
23143
23276
|
isDisabled,
|
23144
23277
|
text,
|
23278
|
+
label,
|
23145
23279
|
value: i
|
23146
23280
|
};
|
23147
23281
|
});
|
@@ -23168,6 +23302,7 @@ const VDatePickerMonths = genericComponent()({
|
|
23168
23302
|
}, [months.value.map((month, i) => {
|
23169
23303
|
const btnProps = {
|
23170
23304
|
active: model.value === i,
|
23305
|
+
ariaLabel: month.label,
|
23171
23306
|
color: model.value === i ? props.color : undefined,
|
23172
23307
|
disabled: month.isDisabled,
|
23173
23308
|
rounded: true,
|
@@ -24174,6 +24309,42 @@ function appendIfDirectory(path, item) {
|
|
24174
24309
|
return item.isDirectory ? `${path}/${item.name}` : path;
|
24175
24310
|
}
|
24176
24311
|
|
24312
|
+
// Utilities
|
24313
|
+
// Composables
|
24314
|
+
const makeFileFilterProps = propsFactory({
|
24315
|
+
filterByType: String
|
24316
|
+
}, 'file-accept');
|
24317
|
+
function useFileFilter(props) {
|
24318
|
+
const fileFilter = computed(() => props.filterByType ? createFilter(props.filterByType) : null);
|
24319
|
+
function filterAccepted(files) {
|
24320
|
+
if (fileFilter.value) {
|
24321
|
+
const accepted = files.filter(fileFilter.value);
|
24322
|
+
return {
|
24323
|
+
accepted,
|
24324
|
+
rejected: files.filter(f => !accepted.includes(f))
|
24325
|
+
};
|
24326
|
+
}
|
24327
|
+
return {
|
24328
|
+
accepted: files,
|
24329
|
+
rejected: []
|
24330
|
+
};
|
24331
|
+
}
|
24332
|
+
return {
|
24333
|
+
filterAccepted
|
24334
|
+
};
|
24335
|
+
}
|
24336
|
+
function createFilter(v) {
|
24337
|
+
const types = v.split(',').map(x => x.trim().toLowerCase());
|
24338
|
+
const extensionsToMatch = types.filter(x => x.startsWith('.'));
|
24339
|
+
const wildcards = types.filter(x => x.endsWith('/*'));
|
24340
|
+
const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x));
|
24341
|
+
return file => {
|
24342
|
+
const extension = file.name.split('.').at(-1)?.toLowerCase() ?? '';
|
24343
|
+
const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? '';
|
24344
|
+
return typesToMatch.includes(file.type) || extensionsToMatch.includes(`.${extension}`) || wildcards.includes(`${typeGroup}/*`);
|
24345
|
+
};
|
24346
|
+
}
|
24347
|
+
|
24177
24348
|
// Types
|
24178
24349
|
|
24179
24350
|
const makeVFileInputProps = propsFactory({
|
@@ -24206,6 +24377,7 @@ const makeVFileInputProps = propsFactory({
|
|
24206
24377
|
return wrapInArray(val).every(v => v != null && typeof v === 'object');
|
24207
24378
|
}
|
24208
24379
|
},
|
24380
|
+
...makeFileFilterProps(),
|
24209
24381
|
...makeVFieldProps({
|
24210
24382
|
clearable: true
|
24211
24383
|
})
|
@@ -24218,7 +24390,8 @@ const VFileInput = genericComponent()({
|
|
24218
24390
|
'click:control': e => true,
|
24219
24391
|
'mousedown:control': e => true,
|
24220
24392
|
'update:focused': focused => true,
|
24221
|
-
'update:modelValue': files => true
|
24393
|
+
'update:modelValue': files => true,
|
24394
|
+
rejected: files => true
|
24222
24395
|
},
|
24223
24396
|
setup(props, _ref) {
|
24224
24397
|
let {
|
@@ -24229,6 +24402,9 @@ const VFileInput = genericComponent()({
|
|
24229
24402
|
const {
|
24230
24403
|
t
|
24231
24404
|
} = useLocale();
|
24405
|
+
const {
|
24406
|
+
filterAccepted
|
24407
|
+
} = useFileFilter(props);
|
24232
24408
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
|
24233
24409
|
const {
|
24234
24410
|
isFocused,
|
@@ -24302,14 +24478,38 @@ const VFileInput = genericComponent()({
|
|
24302
24478
|
e.stopImmediatePropagation();
|
24303
24479
|
isDragging.value = false;
|
24304
24480
|
if (!inputRef.value || !hasFilesOrFolders(e)) return;
|
24481
|
+
const allDroppedFiles = await handleDrop(e);
|
24482
|
+
selectAccepted(allDroppedFiles);
|
24483
|
+
}
|
24484
|
+
function onFileSelection(e) {
|
24485
|
+
if (!e.target || e.repack) return; // prevent loop
|
24486
|
+
|
24487
|
+
if (!props.filterByType) {
|
24488
|
+
const target = e.target;
|
24489
|
+
model.value = [...(target.files ?? [])];
|
24490
|
+
} else {
|
24491
|
+
selectAccepted([...e.target.files]);
|
24492
|
+
}
|
24493
|
+
}
|
24494
|
+
function selectAccepted(files) {
|
24305
24495
|
const dataTransfer = new DataTransfer();
|
24306
|
-
|
24496
|
+
const {
|
24497
|
+
accepted,
|
24498
|
+
rejected
|
24499
|
+
} = filterAccepted(files);
|
24500
|
+
if (rejected.length) {
|
24501
|
+
emit('rejected', rejected);
|
24502
|
+
}
|
24503
|
+
for (const file of accepted) {
|
24307
24504
|
dataTransfer.items.add(file);
|
24308
24505
|
}
|
24309
24506
|
inputRef.value.files = dataTransfer.files;
|
24310
|
-
|
24507
|
+
model.value = [...dataTransfer.files];
|
24508
|
+
const event = new Event('change', {
|
24311
24509
|
bubbles: true
|
24312
|
-
})
|
24510
|
+
});
|
24511
|
+
event.repack = true;
|
24512
|
+
inputRef.value.dispatchEvent(event);
|
24313
24513
|
}
|
24314
24514
|
watch(model, newValue => {
|
24315
24515
|
const hasModelReset = !Array.isArray(newValue) || !newValue.length;
|
@@ -24326,6 +24526,8 @@ const VFileInput = genericComponent()({
|
|
24326
24526
|
...inputProps
|
24327
24527
|
} = VInput.filterProps(props);
|
24328
24528
|
const fieldProps = VField.filterProps(props);
|
24529
|
+
const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
|
24530
|
+
const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
|
24329
24531
|
return createVNode(VInput, mergeProps({
|
24330
24532
|
"ref": vInputRef,
|
24331
24533
|
"modelValue": props.multiple ? model.value : model.value[0],
|
@@ -24381,6 +24583,7 @@ const VFileInput = genericComponent()({
|
|
24381
24583
|
return createElementVNode(Fragment, null, [createElementVNode("input", mergeProps({
|
24382
24584
|
"ref": inputRef,
|
24383
24585
|
"type": "file",
|
24586
|
+
"accept": inputAccept,
|
24384
24587
|
"readonly": isReadonly.value,
|
24385
24588
|
"disabled": isDisabled.value,
|
24386
24589
|
"multiple": props.multiple,
|
@@ -24390,11 +24593,7 @@ const VFileInput = genericComponent()({
|
|
24390
24593
|
if (isReadonly.value) e.preventDefault();
|
24391
24594
|
onFocus();
|
24392
24595
|
},
|
24393
|
-
"onChange":
|
24394
|
-
if (!e.target) return;
|
24395
|
-
const target = e.target;
|
24396
|
-
model.value = [...(target.files ?? [])];
|
24397
|
-
},
|
24596
|
+
"onChange": onFileSelection,
|
24398
24597
|
"onDragleave": onDragleave,
|
24399
24598
|
"onFocus": onFocus,
|
24400
24599
|
"onBlur": blur
|
@@ -31914,6 +32113,7 @@ const makeVFileUploadProps = propsFactory({
|
|
31914
32113
|
},
|
31915
32114
|
showSize: Boolean,
|
31916
32115
|
name: String,
|
32116
|
+
...makeFileFilterProps(),
|
31917
32117
|
...makeDelayProps(),
|
31918
32118
|
...makeDensityProps(),
|
31919
32119
|
...pick(makeVDividerProps({
|
@@ -31926,11 +32126,13 @@ const VFileUpload = genericComponent()({
|
|
31926
32126
|
inheritAttrs: false,
|
31927
32127
|
props: makeVFileUploadProps(),
|
31928
32128
|
emits: {
|
31929
|
-
'update:modelValue': files => true
|
32129
|
+
'update:modelValue': files => true,
|
32130
|
+
rejected: files => true
|
31930
32131
|
},
|
31931
32132
|
setup(props, _ref) {
|
31932
32133
|
let {
|
31933
32134
|
attrs,
|
32135
|
+
emit,
|
31934
32136
|
slots
|
31935
32137
|
} = _ref;
|
31936
32138
|
const {
|
@@ -31939,6 +32141,9 @@ const VFileUpload = genericComponent()({
|
|
31939
32141
|
const {
|
31940
32142
|
densityClasses
|
31941
32143
|
} = useDensity(props);
|
32144
|
+
const {
|
32145
|
+
filterAccepted
|
32146
|
+
} = useFileFilter(props);
|
31942
32147
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
|
31943
32148
|
const isDragging = shallowRef(false);
|
31944
32149
|
const vSheetRef = ref(null);
|
@@ -31960,14 +32165,38 @@ const VFileUpload = genericComponent()({
|
|
31960
32165
|
e.stopImmediatePropagation();
|
31961
32166
|
isDragging.value = false;
|
31962
32167
|
if (!inputRef.value) return;
|
32168
|
+
const allDroppedFiles = await handleDrop(e);
|
32169
|
+
selectAccepted(allDroppedFiles);
|
32170
|
+
}
|
32171
|
+
function onFileSelection(e) {
|
32172
|
+
if (!e.target || e.repack) return; // prevent loop
|
32173
|
+
|
32174
|
+
if (!props.filterByType) {
|
32175
|
+
const target = e.target;
|
32176
|
+
model.value = [...(target.files ?? [])];
|
32177
|
+
} else {
|
32178
|
+
selectAccepted([...e.target.files]);
|
32179
|
+
}
|
32180
|
+
}
|
32181
|
+
function selectAccepted(files) {
|
31963
32182
|
const dataTransfer = new DataTransfer();
|
31964
|
-
|
32183
|
+
const {
|
32184
|
+
accepted,
|
32185
|
+
rejected
|
32186
|
+
} = filterAccepted(files);
|
32187
|
+
if (rejected.length) {
|
32188
|
+
emit('rejected', rejected);
|
32189
|
+
}
|
32190
|
+
for (const file of accepted) {
|
31965
32191
|
dataTransfer.items.add(file);
|
31966
32192
|
}
|
31967
32193
|
inputRef.value.files = dataTransfer.files;
|
31968
|
-
|
32194
|
+
model.value = [...dataTransfer.files];
|
32195
|
+
const event = new Event('change', {
|
31969
32196
|
bubbles: true
|
31970
|
-
})
|
32197
|
+
});
|
32198
|
+
event.repack = true;
|
32199
|
+
inputRef.value.dispatchEvent(event);
|
31971
32200
|
}
|
31972
32201
|
function onClick() {
|
31973
32202
|
inputRef.value?.click();
|
@@ -31985,17 +32214,16 @@ const VFileUpload = genericComponent()({
|
|
31985
32214
|
const cardProps = VSheet.filterProps(props);
|
31986
32215
|
const dividerProps = VDivider.filterProps(props);
|
31987
32216
|
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
|
32217
|
+
const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
|
32218
|
+
const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
|
31988
32219
|
const inputNode = createElementVNode("input", mergeProps({
|
31989
32220
|
"ref": inputRef,
|
31990
32221
|
"type": "file",
|
32222
|
+
"accept": inputAccept,
|
31991
32223
|
"disabled": props.disabled,
|
31992
32224
|
"multiple": props.multiple,
|
31993
32225
|
"name": props.name,
|
31994
|
-
"onChange":
|
31995
|
-
if (!e.target) return;
|
31996
|
-
const target = e.target;
|
31997
|
-
model.value = [...(target.files ?? [])];
|
31998
|
-
}
|
32226
|
+
"onChange": onFileSelection
|
31999
32227
|
}, inputAttrs), null);
|
32000
32228
|
return createElementVNode(Fragment, null, [createVNode(VSheet, mergeProps({
|
32001
32229
|
"ref": vSheetRef
|
@@ -35100,7 +35328,7 @@ function createVuetify$1() {
|
|
35100
35328
|
};
|
35101
35329
|
});
|
35102
35330
|
}
|
35103
|
-
const version$1 = "3.9.
|
35331
|
+
const version$1 = "3.9.3-dev.2025-07-30";
|
35104
35332
|
createVuetify$1.version = version$1;
|
35105
35333
|
|
35106
35334
|
// Vue's inject() can only be used in setup
|
@@ -35398,7 +35626,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
35398
35626
|
|
35399
35627
|
/* eslint-disable local-rules/sort-imports */
|
35400
35628
|
|
35401
|
-
const version = "3.9.
|
35629
|
+
const version = "3.9.3-dev.2025-07-30";
|
35402
35630
|
|
35403
35631
|
/* eslint-disable local-rules/sort-imports */
|
35404
35632
|
|