@vuetify/nightly 3.9.1-dev.2025-07-17 → 3.9.2-master.2025-07-18
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 +3 -14
- package/dist/json/attributes.json +3514 -3534
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +0 -5
- package/dist/json/web-types.json +19798 -6490
- package/dist/vuetify-labs.cjs +88 -278
- package/dist/vuetify-labs.css +4475 -4477
- package/dist/vuetify-labs.d.ts +64 -126
- package/dist/vuetify-labs.esm.js +88 -278
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +88 -278
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +79 -240
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2683 -2685
- package/dist/vuetify.d.ts +64 -116
- package/dist/vuetify.esm.js +79 -240
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +79 -240
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +702 -724
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.js +0 -1
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.js +0 -1
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.d.ts +0 -15
- package/lib/components/VFileInput/VFileInput.js +9 -38
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VList/VList.js +1 -2
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListItem.js +1 -7
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.d.ts +0 -75
- package/lib/components/VProgressLinear/VProgressLinear.js +6 -32
- package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +2 -2
- package/lib/components/VSelect/VSelect.js +0 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VTreeview/VTreeview.js +2 -3
- package/lib/components/VTreeview/VTreeview.js.map +1 -1
- package/lib/components/VTreeview/VTreeviewChildren.js +59 -59
- package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +64 -64
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VFileUpload/VFileUpload.d.ts +0 -15
- package/lib/labs/VFileUpload/VFileUpload.js +9 -39
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/package.json +1 -1
- package/lib/components/VProgressLinear/chunks.d.ts +0 -55
- package/lib/components/VProgressLinear/chunks.js +0 -62
- package/lib/components/VProgressLinear/chunks.js.map +0 -1
- package/lib/composables/fileFilter.d.ts +0 -18
- package/lib/composables/fileFilter.js +0 -38
- package/lib/composables/fileFilter.js.map +0 -1
package/dist/vuetify-labs.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.9.
|
2
|
+
* Vuetify v3.9.2-master.2025-07-18
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -5169,69 +5169,6 @@
|
|
5169
5169
|
};
|
5170
5170
|
}
|
5171
5171
|
|
5172
|
-
// Utilities
|
5173
|
-
|
5174
|
-
// Types
|
5175
|
-
|
5176
|
-
// Composables
|
5177
|
-
const makeChunksProps = propsFactory({
|
5178
|
-
chunkCount: {
|
5179
|
-
type: [Number, String],
|
5180
|
-
default: null
|
5181
|
-
},
|
5182
|
-
chunkWidth: {
|
5183
|
-
type: [Number, String],
|
5184
|
-
default: null
|
5185
|
-
},
|
5186
|
-
chunkGap: {
|
5187
|
-
type: [Number, String],
|
5188
|
-
default: 4
|
5189
|
-
}
|
5190
|
-
}, 'chunks');
|
5191
|
-
function useChunks(props, containerWidth) {
|
5192
|
-
const hasChunks = vue.toRef(() => !!props.chunkCount || !!props.chunkWidth);
|
5193
|
-
const chunkWidth = vue.computed(() => {
|
5194
|
-
const containerSize = vue.toValue(containerWidth);
|
5195
|
-
if (!containerSize) {
|
5196
|
-
return 0;
|
5197
|
-
}
|
5198
|
-
if (!props.chunkCount) {
|
5199
|
-
return Number(props.chunkWidth);
|
5200
|
-
}
|
5201
|
-
const count = Number(props.chunkCount);
|
5202
|
-
const availableWidth = containerSize - Number(props.chunkGap) * (count - 1);
|
5203
|
-
return availableWidth / count;
|
5204
|
-
});
|
5205
|
-
const chunkGap = vue.toRef(() => Number(props.chunkGap));
|
5206
|
-
const chunksMaskStyles = vue.computed(() => {
|
5207
|
-
if (!hasChunks.value) {
|
5208
|
-
return {};
|
5209
|
-
}
|
5210
|
-
const chunkGapPx = convertToUnit(chunkGap.value);
|
5211
|
-
const chunkWidthPx = convertToUnit(chunkWidth.value);
|
5212
|
-
return {
|
5213
|
-
maskRepeat: 'repeat-x',
|
5214
|
-
maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,
|
5215
|
-
maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`
|
5216
|
-
};
|
5217
|
-
});
|
5218
|
-
function snapValueToChunk(val) {
|
5219
|
-
const containerSize = vue.toValue(containerWidth);
|
5220
|
-
if (!containerSize) {
|
5221
|
-
return val;
|
5222
|
-
}
|
5223
|
-
const gapRelativeSize = 100 * chunkGap.value / containerSize;
|
5224
|
-
const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize;
|
5225
|
-
const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize);
|
5226
|
-
return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100);
|
5227
|
-
}
|
5228
|
-
return {
|
5229
|
-
hasChunks,
|
5230
|
-
chunksMaskStyles,
|
5231
|
-
snapValueToChunk
|
5232
|
-
};
|
5233
|
-
}
|
5234
|
-
|
5235
5172
|
const makeVProgressLinearProps = propsFactory({
|
5236
5173
|
absolute: Boolean,
|
5237
5174
|
active: {
|
@@ -5266,7 +5203,6 @@
|
|
5266
5203
|
stream: Boolean,
|
5267
5204
|
striped: Boolean,
|
5268
5205
|
roundedBar: Boolean,
|
5269
|
-
...makeChunksProps(),
|
5270
5206
|
...makeComponentProps(),
|
5271
5207
|
...makeLocationProps({
|
5272
5208
|
location: 'top'
|
@@ -5285,7 +5221,6 @@
|
|
5285
5221
|
let {
|
5286
5222
|
slots
|
5287
5223
|
} = _ref;
|
5288
|
-
const root = vue.ref();
|
5289
5224
|
const progress = useProxiedModel(props, 'modelValue');
|
5290
5225
|
const {
|
5291
5226
|
isRtl,
|
@@ -5327,24 +5262,6 @@
|
|
5327
5262
|
const isReversed = vue.computed(() => isRtl.value !== props.reverse);
|
5328
5263
|
const transition = vue.computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
|
5329
5264
|
const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
|
5330
|
-
const containerWidth = vue.shallowRef(0);
|
5331
|
-
const {
|
5332
|
-
hasChunks,
|
5333
|
-
chunksMaskStyles,
|
5334
|
-
snapValueToChunk
|
5335
|
-
} = useChunks(props, containerWidth);
|
5336
|
-
useToggleScope(hasChunks, () => {
|
5337
|
-
const {
|
5338
|
-
resizeRef
|
5339
|
-
} = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);
|
5340
|
-
vue.watchEffect(() => resizeRef.value = root.value);
|
5341
|
-
});
|
5342
|
-
const bufferWidth = vue.computed(() => {
|
5343
|
-
return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;
|
5344
|
-
});
|
5345
|
-
const barWidth = vue.computed(() => {
|
5346
|
-
return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;
|
5347
|
-
});
|
5348
5265
|
function handleClick(e) {
|
5349
5266
|
if (!intersectionRef.value) return;
|
5350
5267
|
const {
|
@@ -5355,11 +5272,8 @@
|
|
5355
5272
|
const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
|
5356
5273
|
progress.value = Math.round(value / width * max.value);
|
5357
5274
|
}
|
5358
|
-
vue.watchEffect(() => {
|
5359
|
-
intersectionRef.value = root.value;
|
5360
|
-
});
|
5361
5275
|
useRender(() => vue.createVNode(props.tag, {
|
5362
|
-
"ref":
|
5276
|
+
"ref": intersectionRef,
|
5363
5277
|
"class": vue.normalizeClass(['v-progress-linear', {
|
5364
5278
|
'v-progress-linear--absolute': props.absolute,
|
5365
5279
|
'v-progress-linear--active': props.active && isIntersecting.value,
|
@@ -5374,7 +5288,7 @@
|
|
5374
5288
|
height: props.active ? convertToUnit(height.value) : 0,
|
5375
5289
|
'--v-progress-linear-height': convertToUnit(height.value),
|
5376
5290
|
...(props.absolute ? locationStyles.value : {})
|
5377
|
-
},
|
5291
|
+
}, props.style]),
|
5378
5292
|
"role": "progressbar",
|
5379
5293
|
"aria-hidden": props.active ? 'false' : 'true',
|
5380
5294
|
"aria-valuemin": "0",
|
@@ -5404,7 +5318,7 @@
|
|
5404
5318
|
"class": vue.normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
|
5405
5319
|
"style": vue.normalizeStyle([bufferColorStyles.value, {
|
5406
5320
|
opacity: parseFloat(props.bufferOpacity),
|
5407
|
-
width: convertToUnit(
|
5321
|
+
width: convertToUnit(normalizedBuffer.value, '%')
|
5408
5322
|
}])
|
5409
5323
|
}, null), vue.createVNode(vue.Transition, {
|
5410
5324
|
"name": transition.value
|
@@ -5412,7 +5326,7 @@
|
|
5412
5326
|
default: () => [!props.indeterminate ? vue.createElementVNode("div", {
|
5413
5327
|
"class": vue.normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
|
5414
5328
|
"style": vue.normalizeStyle([barColorStyles.value, {
|
5415
|
-
width: convertToUnit(
|
5329
|
+
width: convertToUnit(normalizedValue.value, '%')
|
5416
5330
|
}])
|
5417
5331
|
}, null) : vue.createElementVNode("div", {
|
5418
5332
|
"class": "v-progress-linear__indeterminate"
|
@@ -9630,11 +9544,6 @@
|
|
9630
9544
|
const isLink = vue.toRef(() => props.link !== false && link.isLink.value);
|
9631
9545
|
const isSelectable = vue.computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
|
9632
9546
|
const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
|
9633
|
-
const role = vue.computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
|
9634
|
-
const ariaSelected = vue.computed(() => {
|
9635
|
-
if (!isSelectable.value) return undefined;
|
9636
|
-
return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
|
9637
|
-
});
|
9638
9547
|
const roundedProps = vue.toRef(() => props.rounded || props.nav);
|
9639
9548
|
const color = vue.toRef(() => props.color ?? props.activeColor);
|
9640
9549
|
const variantProps = vue.toRef(() => ({
|
@@ -9738,8 +9647,7 @@
|
|
9738
9647
|
}, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
|
9739
9648
|
"style": [colorStyles.value, dimensionStyles.value, props.style],
|
9740
9649
|
"tabindex": isClickable.value ? list ? -2 : 0 : undefined,
|
9741
|
-
"aria-selected":
|
9742
|
-
"role": role.value,
|
9650
|
+
"aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
|
9743
9651
|
"onClick": onClick,
|
9744
9652
|
"onKeydown": isClickable.value && !isLink.value && onKeyDown
|
9745
9653
|
}, link.linkProps), {
|
@@ -10241,7 +10149,6 @@
|
|
10241
10149
|
const activeColor = vue.toRef(() => props.activeColor);
|
10242
10150
|
const baseColor = vue.toRef(() => props.baseColor);
|
10243
10151
|
const color = vue.toRef(() => props.color);
|
10244
|
-
const isSelectable = vue.toRef(() => props.selectable || props.activatable);
|
10245
10152
|
createList({
|
10246
10153
|
filterable: props.filterable
|
10247
10154
|
});
|
@@ -10313,7 +10220,7 @@
|
|
10313
10220
|
}, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
|
10314
10221
|
"style": vue.normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
|
10315
10222
|
"tabindex": props.disabled ? -1 : 0,
|
10316
|
-
"role":
|
10223
|
+
"role": "listbox",
|
10317
10224
|
"aria-activedescendant": undefined,
|
10318
10225
|
"onFocusin": onFocusin,
|
10319
10226
|
"onFocusout": onFocusout,
|
@@ -13383,7 +13290,6 @@
|
|
13383
13290
|
"onKeydown": onListKeydown,
|
13384
13291
|
"onFocusin": onFocusin,
|
13385
13292
|
"tabindex": "-1",
|
13386
|
-
"selectable": true,
|
13387
13293
|
"aria-live": "polite",
|
13388
13294
|
"aria-label": `${props.label}-list`,
|
13389
13295
|
"color": props.itemColor ?? props.color
|
@@ -14003,7 +13909,6 @@
|
|
14003
13909
|
"onFocusin": onFocusin,
|
14004
13910
|
"onFocusout": onFocusout,
|
14005
13911
|
"tabindex": "-1",
|
14006
|
-
"selectable": true,
|
14007
13912
|
"aria-live": "polite",
|
14008
13913
|
"color": props.itemColor ?? props.color
|
14009
13914
|
}, listEvents, props.listProps), {
|
@@ -19091,7 +18996,6 @@
|
|
19091
18996
|
"selected": selectedValues.value,
|
19092
18997
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
19093
18998
|
"onMousedown": e => e.preventDefault(),
|
19094
|
-
"selectable": true,
|
19095
18999
|
"onKeydown": onListKeydown,
|
19096
19000
|
"onFocusin": onFocusin,
|
19097
19001
|
"onFocusout": onFocusout,
|
@@ -24190,42 +24094,6 @@
|
|
24190
24094
|
return item.isDirectory ? `${path}/${item.name}` : path;
|
24191
24095
|
}
|
24192
24096
|
|
24193
|
-
// Utilities
|
24194
|
-
// Composables
|
24195
|
-
const makeFileFilterProps = propsFactory({
|
24196
|
-
filterByType: String
|
24197
|
-
}, 'file-accept');
|
24198
|
-
function useFileFilter(props) {
|
24199
|
-
const fileFilter = vue.computed(() => props.filterByType ? createFilter(props.filterByType) : null);
|
24200
|
-
function filterAccepted(files) {
|
24201
|
-
if (fileFilter.value) {
|
24202
|
-
const accepted = files.filter(fileFilter.value);
|
24203
|
-
return {
|
24204
|
-
accepted,
|
24205
|
-
rejected: files.filter(f => !accepted.includes(f))
|
24206
|
-
};
|
24207
|
-
}
|
24208
|
-
return {
|
24209
|
-
accepted: files,
|
24210
|
-
rejected: []
|
24211
|
-
};
|
24212
|
-
}
|
24213
|
-
return {
|
24214
|
-
filterAccepted
|
24215
|
-
};
|
24216
|
-
}
|
24217
|
-
function createFilter(v) {
|
24218
|
-
const types = v.split(',').map(x => x.trim().toLowerCase());
|
24219
|
-
const extensionsToMatch = types.filter(x => x.startsWith('.'));
|
24220
|
-
const wildcards = types.filter(x => x.endsWith('/*'));
|
24221
|
-
const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x));
|
24222
|
-
return file => {
|
24223
|
-
const extension = file.name.split('.').at(-1)?.toLowerCase() ?? '';
|
24224
|
-
const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? '';
|
24225
|
-
return typesToMatch.includes(file.type) || extensionsToMatch.includes(`.${extension}`) || wildcards.includes(`${typeGroup}/*`);
|
24226
|
-
};
|
24227
|
-
}
|
24228
|
-
|
24229
24097
|
// Types
|
24230
24098
|
|
24231
24099
|
const makeVFileInputProps = propsFactory({
|
@@ -24258,7 +24126,6 @@
|
|
24258
24126
|
return wrapInArray(val).every(v => v != null && typeof v === 'object');
|
24259
24127
|
}
|
24260
24128
|
},
|
24261
|
-
...makeFileFilterProps(),
|
24262
24129
|
...makeVFieldProps({
|
24263
24130
|
clearable: true
|
24264
24131
|
})
|
@@ -24271,8 +24138,7 @@
|
|
24271
24138
|
'click:control': e => true,
|
24272
24139
|
'mousedown:control': e => true,
|
24273
24140
|
'update:focused': focused => true,
|
24274
|
-
'update:modelValue': files => true
|
24275
|
-
rejected: files => true
|
24141
|
+
'update:modelValue': files => true
|
24276
24142
|
},
|
24277
24143
|
setup(props, _ref) {
|
24278
24144
|
let {
|
@@ -24283,9 +24149,6 @@
|
|
24283
24149
|
const {
|
24284
24150
|
t
|
24285
24151
|
} = useLocale();
|
24286
|
-
const {
|
24287
|
-
filterAccepted
|
24288
|
-
} = useFileFilter(props);
|
24289
24152
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
|
24290
24153
|
const {
|
24291
24154
|
isFocused,
|
@@ -24359,38 +24222,14 @@
|
|
24359
24222
|
e.stopImmediatePropagation();
|
24360
24223
|
isDragging.value = false;
|
24361
24224
|
if (!inputRef.value || !hasFilesOrFolders(e)) return;
|
24362
|
-
const allDroppedFiles = await handleDrop(e);
|
24363
|
-
selectAccepted(allDroppedFiles);
|
24364
|
-
}
|
24365
|
-
function onFileSelection(e) {
|
24366
|
-
if (!e.target || e.repack) return; // prevent loop
|
24367
|
-
|
24368
|
-
if (!props.filterByType) {
|
24369
|
-
const target = e.target;
|
24370
|
-
model.value = [...(target.files ?? [])];
|
24371
|
-
} else {
|
24372
|
-
selectAccepted([...e.target.files]);
|
24373
|
-
}
|
24374
|
-
}
|
24375
|
-
function selectAccepted(files) {
|
24376
24225
|
const dataTransfer = new DataTransfer();
|
24377
|
-
const {
|
24378
|
-
accepted,
|
24379
|
-
rejected
|
24380
|
-
} = filterAccepted(files);
|
24381
|
-
if (rejected.length) {
|
24382
|
-
emit('rejected', rejected);
|
24383
|
-
}
|
24384
|
-
for (const file of accepted) {
|
24226
|
+
for (const file of await handleDrop(e)) {
|
24385
24227
|
dataTransfer.items.add(file);
|
24386
24228
|
}
|
24387
24229
|
inputRef.value.files = dataTransfer.files;
|
24388
|
-
|
24389
|
-
const event = new Event('change', {
|
24230
|
+
inputRef.value.dispatchEvent(new Event('change', {
|
24390
24231
|
bubbles: true
|
24391
|
-
});
|
24392
|
-
event.repack = true;
|
24393
|
-
inputRef.value.dispatchEvent(event);
|
24232
|
+
}));
|
24394
24233
|
}
|
24395
24234
|
vue.watch(model, newValue => {
|
24396
24235
|
const hasModelReset = !Array.isArray(newValue) || !newValue.length;
|
@@ -24407,8 +24246,6 @@
|
|
24407
24246
|
...inputProps
|
24408
24247
|
} = VInput.filterProps(props);
|
24409
24248
|
const fieldProps = VField.filterProps(props);
|
24410
|
-
const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
|
24411
|
-
const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
|
24412
24249
|
return vue.createVNode(VInput, vue.mergeProps({
|
24413
24250
|
"ref": vInputRef,
|
24414
24251
|
"modelValue": props.multiple ? model.value : model.value[0],
|
@@ -24464,7 +24301,6 @@
|
|
24464
24301
|
return vue.createElementVNode(vue.Fragment, null, [vue.createElementVNode("input", vue.mergeProps({
|
24465
24302
|
"ref": inputRef,
|
24466
24303
|
"type": "file",
|
24467
|
-
"accept": inputAccept,
|
24468
24304
|
"readonly": isReadonly.value,
|
24469
24305
|
"disabled": isDisabled.value,
|
24470
24306
|
"multiple": props.multiple,
|
@@ -24474,7 +24310,11 @@
|
|
24474
24310
|
if (isReadonly.value) e.preventDefault();
|
24475
24311
|
onFocus();
|
24476
24312
|
},
|
24477
|
-
"onChange":
|
24313
|
+
"onChange": e => {
|
24314
|
+
if (!e.target) return;
|
24315
|
+
const target = e.target;
|
24316
|
+
model.value = [...(target.files ?? [])];
|
24317
|
+
},
|
24478
24318
|
"onDragleave": onDragleave,
|
24479
24319
|
"onFocus": onFocus,
|
24480
24320
|
"onBlur": blur
|
@@ -30509,51 +30349,48 @@
|
|
30509
30349
|
parentIndentLines: props.parentIndentLines,
|
30510
30350
|
variant: props.indentLinesVariant
|
30511
30351
|
});
|
30512
|
-
|
30513
|
-
|
30514
|
-
|
30515
|
-
|
30516
|
-
|
30517
|
-
|
30518
|
-
|
30519
|
-
|
30520
|
-
|
30521
|
-
|
30522
|
-
|
30523
|
-
|
30524
|
-
|
30525
|
-
|
30526
|
-
|
30527
|
-
|
30528
|
-
|
30529
|
-
|
30530
|
-
|
30531
|
-
|
30532
|
-
|
30533
|
-
|
30534
|
-
|
30535
|
-
|
30536
|
-
|
30537
|
-
|
30538
|
-
|
30539
|
-
|
30540
|
-
|
30541
|
-
|
30542
|
-
|
30543
|
-
|
30544
|
-
|
30545
|
-
|
30546
|
-
|
30547
|
-
|
30548
|
-
|
30549
|
-
|
30550
|
-
|
30551
|
-
|
30552
|
-
|
30553
|
-
|
30554
|
-
$stable: true
|
30555
|
-
});
|
30556
|
-
}
|
30352
|
+
const slotsWithItem = {
|
30353
|
+
prepend: slotProps => vue.createElementVNode(vue.Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && vue.createElementVNode("div", null, [vue.createVNode(VCheckboxBtn, {
|
30354
|
+
"key": item.value,
|
30355
|
+
"modelValue": slotProps.isSelected,
|
30356
|
+
"disabled": props.disabled,
|
30357
|
+
"loading": loading,
|
30358
|
+
"color": props.selectedColor,
|
30359
|
+
"density": props.density,
|
30360
|
+
"indeterminate": slotProps.isIndeterminate,
|
30361
|
+
"indeterminateIcon": props.indeterminateIcon,
|
30362
|
+
"falseIcon": props.falseIcon,
|
30363
|
+
"trueIcon": props.trueIcon,
|
30364
|
+
"onUpdate:modelValue": v => selectItem(slotProps.select, v),
|
30365
|
+
"onClick": e => e.stopPropagation(),
|
30366
|
+
"onKeydown": e => {
|
30367
|
+
if (!['Enter', 'Space'].includes(e.key)) return;
|
30368
|
+
e.stopPropagation();
|
30369
|
+
selectItem(slotProps.select, slotProps.isSelected);
|
30370
|
+
}
|
30371
|
+
}, null)]), slots.prepend?.({
|
30372
|
+
...slotProps,
|
30373
|
+
...treeItemProps,
|
30374
|
+
item: item.raw,
|
30375
|
+
internalItem: item
|
30376
|
+
})]),
|
30377
|
+
append: slots.append ? slotProps => slots.append?.({
|
30378
|
+
...slotProps,
|
30379
|
+
...treeItemProps,
|
30380
|
+
item: item.raw,
|
30381
|
+
internalItem: item
|
30382
|
+
}) : undefined,
|
30383
|
+
title: slots.title ? slotProps => slots.title?.({
|
30384
|
+
...slotProps,
|
30385
|
+
item: item.raw,
|
30386
|
+
internalItem: item
|
30387
|
+
}) : undefined,
|
30388
|
+
subtitle: slots.subtitle ? slotProps => slots.subtitle?.({
|
30389
|
+
...slotProps,
|
30390
|
+
item: item.raw,
|
30391
|
+
internalItem: item
|
30392
|
+
}) : undefined
|
30393
|
+
};
|
30557
30394
|
const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
|
30558
30395
|
const treeviewChildrenProps = VTreeviewChildren.filterProps({
|
30559
30396
|
...props,
|
@@ -30567,16 +30404,21 @@
|
|
30567
30404
|
let {
|
30568
30405
|
props: activatorProps
|
30569
30406
|
} = _ref2;
|
30570
|
-
|
30407
|
+
const listItemProps = {
|
30571
30408
|
...itemProps,
|
30572
30409
|
...activatorProps,
|
30573
|
-
|
30574
|
-
hideActions: props.hideActions,
|
30575
|
-
indentLines: indentLines.node,
|
30576
|
-
value: props.returnObject ? item.raw : itemProps.value,
|
30410
|
+
value: itemProps?.value,
|
30577
30411
|
onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
|
30578
30412
|
onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
|
30579
|
-
}
|
30413
|
+
};
|
30414
|
+
return vue.createVNode(VTreeviewItem, vue.mergeProps({
|
30415
|
+
"ref": el => activatorItems.value[index] = el
|
30416
|
+
}, listItemProps, {
|
30417
|
+
"hideActions": props.hideActions,
|
30418
|
+
"indentLines": indentLines.node,
|
30419
|
+
"value": props.returnObject ? item.raw : itemProps.value,
|
30420
|
+
"loading": loading
|
30421
|
+
}), slotsWithItem);
|
30580
30422
|
},
|
30581
30423
|
default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
|
30582
30424
|
"items": children,
|
@@ -30584,8 +30426,7 @@
|
|
30584
30426
|
"parentIndentLines": indentLines.children,
|
30585
30427
|
"isLastGroup": nextItemHasChildren,
|
30586
30428
|
"returnObject": props.returnObject
|
30587
|
-
}), slots)
|
30588
|
-
$stable: true
|
30429
|
+
}), slots)
|
30589
30430
|
}) : renderSlot(slots.item, {
|
30590
30431
|
props: itemProps,
|
30591
30432
|
item: item.raw,
|
@@ -30601,12 +30442,11 @@
|
|
30601
30442
|
props: item.raw
|
30602
30443
|
}, () => vue.createVNode(VListSubheader, item.props, null));
|
30603
30444
|
}
|
30604
|
-
return
|
30605
|
-
|
30606
|
-
|
30607
|
-
|
30608
|
-
|
30609
|
-
});
|
30445
|
+
return vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, {
|
30446
|
+
"hideActions": props.hideActions,
|
30447
|
+
"indentLines": indentLines.leaf,
|
30448
|
+
"value": props.returnObject ? vue.toRaw(item.raw) : itemProps.value
|
30449
|
+
}), slotsWithItem);
|
30610
30450
|
});
|
30611
30451
|
});
|
30612
30452
|
}
|
@@ -30745,14 +30585,13 @@
|
|
30745
30585
|
"selected": selected.value,
|
30746
30586
|
"onUpdate:selected": $event => selected.value = $event
|
30747
30587
|
}), {
|
30748
|
-
default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
|
30588
|
+
default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
|
30749
30589
|
"density": props.density,
|
30750
30590
|
"returnObject": props.returnObject,
|
30751
30591
|
"items": items.value,
|
30752
30592
|
"parentIndentLines": props.indentLines ? [] : undefined,
|
30753
30593
|
"indentLinesVariant": indentLinesVariant
|
30754
|
-
}), slots)
|
30755
|
-
$stable: true
|
30594
|
+
}), slots)]
|
30756
30595
|
});
|
30757
30596
|
});
|
30758
30597
|
return {};
|
@@ -31993,7 +31832,6 @@
|
|
31993
31832
|
},
|
31994
31833
|
showSize: Boolean,
|
31995
31834
|
name: String,
|
31996
|
-
...makeFileFilterProps(),
|
31997
31835
|
...makeDelayProps(),
|
31998
31836
|
...makeDensityProps(),
|
31999
31837
|
...pick(makeVDividerProps({
|
@@ -32006,13 +31844,11 @@
|
|
32006
31844
|
inheritAttrs: false,
|
32007
31845
|
props: makeVFileUploadProps(),
|
32008
31846
|
emits: {
|
32009
|
-
'update:modelValue': files => true
|
32010
|
-
rejected: files => true
|
31847
|
+
'update:modelValue': files => true
|
32011
31848
|
},
|
32012
31849
|
setup(props, _ref) {
|
32013
31850
|
let {
|
32014
31851
|
attrs,
|
32015
|
-
emit,
|
32016
31852
|
slots
|
32017
31853
|
} = _ref;
|
32018
31854
|
const {
|
@@ -32021,9 +31857,6 @@
|
|
32021
31857
|
const {
|
32022
31858
|
densityClasses
|
32023
31859
|
} = useDensity(props);
|
32024
|
-
const {
|
32025
|
-
filterAccepted
|
32026
|
-
} = useFileFilter(props);
|
32027
31860
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
|
32028
31861
|
const isDragging = vue.shallowRef(false);
|
32029
31862
|
const vSheetRef = vue.ref(null);
|
@@ -32045,38 +31878,14 @@
|
|
32045
31878
|
e.stopImmediatePropagation();
|
32046
31879
|
isDragging.value = false;
|
32047
31880
|
if (!inputRef.value) return;
|
32048
|
-
const allDroppedFiles = await handleDrop(e);
|
32049
|
-
selectAccepted(allDroppedFiles);
|
32050
|
-
}
|
32051
|
-
function onFileSelection(e) {
|
32052
|
-
if (!e.target || e.repack) return; // prevent loop
|
32053
|
-
|
32054
|
-
if (!props.filterByType) {
|
32055
|
-
const target = e.target;
|
32056
|
-
model.value = [...(target.files ?? [])];
|
32057
|
-
} else {
|
32058
|
-
selectAccepted([...e.target.files]);
|
32059
|
-
}
|
32060
|
-
}
|
32061
|
-
function selectAccepted(files) {
|
32062
31881
|
const dataTransfer = new DataTransfer();
|
32063
|
-
const {
|
32064
|
-
accepted,
|
32065
|
-
rejected
|
32066
|
-
} = filterAccepted(files);
|
32067
|
-
if (rejected.length) {
|
32068
|
-
emit('rejected', rejected);
|
32069
|
-
}
|
32070
|
-
for (const file of accepted) {
|
31882
|
+
for (const file of await handleDrop(e)) {
|
32071
31883
|
dataTransfer.items.add(file);
|
32072
31884
|
}
|
32073
31885
|
inputRef.value.files = dataTransfer.files;
|
32074
|
-
|
32075
|
-
const event = new Event('change', {
|
31886
|
+
inputRef.value.dispatchEvent(new Event('change', {
|
32076
31887
|
bubbles: true
|
32077
|
-
});
|
32078
|
-
event.repack = true;
|
32079
|
-
inputRef.value.dispatchEvent(event);
|
31888
|
+
}));
|
32080
31889
|
}
|
32081
31890
|
function onClick() {
|
32082
31891
|
inputRef.value?.click();
|
@@ -32094,16 +31903,17 @@
|
|
32094
31903
|
const cardProps = VSheet.filterProps(props);
|
32095
31904
|
const dividerProps = VDivider.filterProps(props);
|
32096
31905
|
const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
|
32097
|
-
const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
|
32098
|
-
const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
|
32099
31906
|
const inputNode = vue.createElementVNode("input", vue.mergeProps({
|
32100
31907
|
"ref": inputRef,
|
32101
31908
|
"type": "file",
|
32102
|
-
"accept": inputAccept,
|
32103
31909
|
"disabled": props.disabled,
|
32104
31910
|
"multiple": props.multiple,
|
32105
31911
|
"name": props.name,
|
32106
|
-
"onChange":
|
31912
|
+
"onChange": e => {
|
31913
|
+
if (!e.target) return;
|
31914
|
+
const target = e.target;
|
31915
|
+
model.value = [...(target.files ?? [])];
|
31916
|
+
}
|
32107
31917
|
}, inputAttrs), null);
|
32108
31918
|
return vue.createElementVNode(vue.Fragment, null, [vue.createVNode(VSheet, vue.mergeProps({
|
32109
31919
|
"ref": vSheetRef
|
@@ -33882,7 +33692,7 @@
|
|
33882
33692
|
};
|
33883
33693
|
});
|
33884
33694
|
}
|
33885
|
-
const version$1 = "3.9.
|
33695
|
+
const version$1 = "3.9.2-master.2025-07-18";
|
33886
33696
|
createVuetify$1.version = version$1;
|
33887
33697
|
|
33888
33698
|
// Vue's inject() can only be used in setup
|
@@ -34180,7 +33990,7 @@
|
|
34180
33990
|
|
34181
33991
|
/* eslint-disable local-rules/sort-imports */
|
34182
33992
|
|
34183
|
-
const version = "3.9.
|
33993
|
+
const version = "3.9.2-master.2025-07-18";
|
34184
33994
|
|
34185
33995
|
/* eslint-disable local-rules/sort-imports */
|
34186
33996
|
|