vuetify 3.9.6 → 3.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/json/attributes.json +2761 -2761
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +206 -206
- package/dist/json/web-types.json +5372 -5295
- package/dist/vuetify-labs.cjs +51 -52
- package/dist/vuetify-labs.css +5946 -5832
- package/dist/vuetify-labs.d.ts +168 -94
- package/dist/vuetify-labs.esm.js +51 -52
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +51 -52
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +26 -22
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +1937 -1823
- package/dist/vuetify.d.ts +91 -91
- package/dist/vuetify.esm.js +26 -22
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +26 -22
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +35 -32
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +12 -0
- package/lib/components/VAlert/VAlert.sass +13 -0
- package/lib/components/VAutocomplete/VAutocomplete.css +2 -1
- package/lib/components/VAutocomplete/VAutocomplete.sass +3 -2
- package/lib/components/VBtn/VBtn.sass +1 -4
- package/lib/components/VCard/VCard.css +6 -0
- package/lib/components/VCard/VCard.sass +5 -0
- package/lib/components/VChip/VChip.css +6 -0
- package/lib/components/VChip/VChip.sass +5 -0
- package/lib/components/VChipGroup/VChipGroup.css +25 -0
- package/lib/components/VChipGroup/VChipGroup.sass +23 -0
- package/lib/components/VCombobox/VCombobox.css +2 -1
- package/lib/components/VCombobox/VCombobox.sass +3 -2
- package/lib/components/VList/VListItem.css +30 -0
- package/lib/components/VList/VListItem.d.ts +3 -3
- package/lib/components/VList/VListItem.sass +29 -0
- package/lib/components/VOtpInput/VOtpInput.js +1 -2
- package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.css +3 -3
- package/lib/components/VProgressLinear/VProgressLinear.js +5 -6
- package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +3 -3
- package/lib/components/VSelect/VSelect.css +2 -1
- package/lib/components/VSelect/VSelect.sass +3 -2
- package/lib/components/VSlideGroup/VSlideGroup.js +5 -4
- package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
- package/lib/components/VSnackbar/VSnackbar.css +5 -0
- package/lib/components/VSnackbar/VSnackbar.sass +3 -0
- package/lib/components/VTimeline/VTimeline.css +22 -0
- package/lib/components/VTimeline/VTimeline.sass +12 -0
- package/lib/components/VTreeview/VTreeviewItem.css +13 -8
- package/lib/components/VTreeview/VTreeviewItem.d.ts +9 -9
- package/lib/components/VTreeview/VTreeviewItem.sass +12 -8
- package/lib/composables/filter.js +3 -1
- package/lib/composables/filter.js.map +1 -1
- package/lib/composables/nested/nested.d.ts +1 -1
- package/lib/composables/nested/nested.js +5 -2
- package/lib/composables/nested/nested.js.map +1 -1
- package/lib/composables/rounded.js +3 -3
- package/lib/composables/rounded.js.map +1 -1
- package/lib/directives/touch/index.js +2 -2
- package/lib/directives/touch/index.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +79 -79
- package/lib/framework.js +1 -1
- package/lib/labs/VDateInput/VDateInput.d.ts +78 -3
- package/lib/labs/VDateInput/VDateInput.js +3 -1
- package/lib/labs/VDateInput/VDateInput.js.map +1 -1
- package/lib/labs/VVideo/VVideo.css +4 -4
- package/lib/labs/VVideo/VVideo.js +24 -33
- package/lib/labs/VVideo/VVideo.js.map +1 -1
- package/lib/labs/VVideo/VVideo.sass +4 -4
- package/package.json +2 -2
package/dist/vuetify-labs.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Vuetify v3.9.
|
|
2
|
+
* Vuetify v3.9.7
|
|
3
3
|
* Forged by John Leider
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
*/
|
|
@@ -3497,14 +3497,14 @@ function useRounded(props) {
|
|
|
3497
3497
|
const rounded = isRef(props) ? props.value : props.rounded;
|
|
3498
3498
|
const tile = isRef(props) ? props.value : props.tile;
|
|
3499
3499
|
const classes = [];
|
|
3500
|
-
if (
|
|
3500
|
+
if (tile || rounded === false) {
|
|
3501
|
+
classes.push('rounded-0');
|
|
3502
|
+
} else if (rounded === true || rounded === '') {
|
|
3501
3503
|
classes.push(`${name}--rounded`);
|
|
3502
3504
|
} else if (typeof rounded === 'string' || rounded === 0) {
|
|
3503
3505
|
for (const value of String(rounded).split(' ')) {
|
|
3504
3506
|
classes.push(`rounded-${value}`);
|
|
3505
3507
|
}
|
|
3506
|
-
} else if (tile || rounded === false) {
|
|
3507
|
-
classes.push('rounded-0');
|
|
3508
3508
|
}
|
|
3509
3509
|
return classes;
|
|
3510
3510
|
});
|
|
@@ -5364,7 +5364,6 @@ const VProgressLinear = genericComponent()({
|
|
|
5364
5364
|
const normalizedValue = computed(() => clamp(parseFloat(progress.value) / max.value * 100, 0, 100));
|
|
5365
5365
|
const isReversed = computed(() => isRtl.value !== props.reverse);
|
|
5366
5366
|
const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
|
|
5367
|
-
const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
|
|
5368
5367
|
function handleClick(e) {
|
|
5369
5368
|
if (!intersectionRef.value) return;
|
|
5370
5369
|
const {
|
|
@@ -5413,13 +5412,13 @@ const VProgressLinear = genericComponent()({
|
|
|
5413
5412
|
'--v-progress-linear-stream-to': convertToUnit(height.value * (isReversed.value ? 1 : -1))
|
|
5414
5413
|
}
|
|
5415
5414
|
}, null), createElementVNode("div", {
|
|
5416
|
-
"class": normalizeClass(['v-progress-linear__background',
|
|
5415
|
+
"class": normalizeClass(['v-progress-linear__background', backgroundColorClasses.value]),
|
|
5417
5416
|
"style": normalizeStyle([backgroundColorStyles.value, {
|
|
5418
5417
|
opacity: parseFloat(props.bgOpacity),
|
|
5419
5418
|
width: props.stream ? 0 : undefined
|
|
5420
5419
|
}])
|
|
5421
5420
|
}, null), createElementVNode("div", {
|
|
5422
|
-
"class": normalizeClass(['v-progress-linear__buffer',
|
|
5421
|
+
"class": normalizeClass(['v-progress-linear__buffer', bufferColorClasses.value]),
|
|
5423
5422
|
"style": normalizeStyle([bufferColorStyles.value, {
|
|
5424
5423
|
opacity: parseFloat(props.bufferOpacity),
|
|
5425
5424
|
width: convertToUnit(normalizedBuffer.value, '%')
|
|
@@ -5428,7 +5427,7 @@ const VProgressLinear = genericComponent()({
|
|
|
5428
5427
|
"name": transition.value
|
|
5429
5428
|
}, {
|
|
5430
5429
|
default: () => [!props.indeterminate ? createElementVNode("div", {
|
|
5431
|
-
"class": normalizeClass(['v-progress-linear__determinate',
|
|
5430
|
+
"class": normalizeClass(['v-progress-linear__determinate', barColorClasses.value]),
|
|
5432
5431
|
"style": normalizeStyle([barColorStyles.value, {
|
|
5433
5432
|
width: convertToUnit(normalizedValue.value, '%')
|
|
5434
5433
|
}])
|
|
@@ -5436,7 +5435,7 @@ const VProgressLinear = genericComponent()({
|
|
|
5436
5435
|
"class": "v-progress-linear__indeterminate"
|
|
5437
5436
|
}, [['long', 'short'].map(bar => createElementVNode("div", {
|
|
5438
5437
|
"key": bar,
|
|
5439
|
-
"class": normalizeClass(['v-progress-linear__indeterminate', bar,
|
|
5438
|
+
"class": normalizeClass(['v-progress-linear__indeterminate', bar, barColorClasses.value]),
|
|
5440
5439
|
"style": normalizeStyle(barColorStyles.value)
|
|
5441
5440
|
}, null))])]
|
|
5442
5441
|
}), slots.default && createElementVNode("div", {
|
|
@@ -8208,6 +8207,7 @@ const VSlideGroup = genericComponent()({
|
|
|
8208
8207
|
select: group.select,
|
|
8209
8208
|
isSelected: group.isSelected
|
|
8210
8209
|
}));
|
|
8210
|
+
const hasOverflowOrScroll = computed(() => isOverflowing.value || Math.abs(scrollOffset.value) > 0);
|
|
8211
8211
|
const hasAffixes = computed(() => {
|
|
8212
8212
|
switch (props.showArrows) {
|
|
8213
8213
|
// Always show arrows on desktop & mobile
|
|
@@ -8221,17 +8221,17 @@ const VSlideGroup = genericComponent()({
|
|
|
8221
8221
|
// Show arrows on mobile when overflowing.
|
|
8222
8222
|
// This matches the default 2.2 behavior
|
|
8223
8223
|
case true:
|
|
8224
|
-
return
|
|
8224
|
+
return hasOverflowOrScroll.value;
|
|
8225
8225
|
|
|
8226
8226
|
// Always show on mobile
|
|
8227
8227
|
case 'mobile':
|
|
8228
|
-
return mobile.value ||
|
|
8228
|
+
return mobile.value || hasOverflowOrScroll.value;
|
|
8229
8229
|
|
|
8230
8230
|
// https://material.io/components/tabs#scrollable-tabs
|
|
8231
8231
|
// Always show arrows when
|
|
8232
8232
|
// overflowed on desktop
|
|
8233
8233
|
default:
|
|
8234
|
-
return !mobile.value &&
|
|
8234
|
+
return !mobile.value && hasOverflowOrScroll.value;
|
|
8235
8235
|
}
|
|
8236
8236
|
});
|
|
8237
8237
|
const hasPrev = computed(() => {
|
|
@@ -8239,7 +8239,7 @@ const VSlideGroup = genericComponent()({
|
|
|
8239
8239
|
return Math.abs(scrollOffset.value) > 1;
|
|
8240
8240
|
});
|
|
8241
8241
|
const hasNext = computed(() => {
|
|
8242
|
-
if (!containerRef.value) return false;
|
|
8242
|
+
if (!containerRef.value || !hasOverflowOrScroll.value) return false;
|
|
8243
8243
|
const scrollSize = getScrollSize(isHorizontal.value, containerRef.el);
|
|
8244
8244
|
const clientSize = getClientSize(isHorizontal.value, containerRef.el);
|
|
8245
8245
|
const scrollSizeMax = scrollSize - clientSize;
|
|
@@ -9236,7 +9236,7 @@ const useNested = props => {
|
|
|
9236
9236
|
function getPath(id) {
|
|
9237
9237
|
const path = [];
|
|
9238
9238
|
let parent = toRaw(id);
|
|
9239
|
-
while (parent
|
|
9239
|
+
while (parent !== undefined) {
|
|
9240
9240
|
path.unshift(parent);
|
|
9241
9241
|
parent = parents.value.get(parent);
|
|
9242
9242
|
}
|
|
@@ -9382,7 +9382,10 @@ const useNested = props => {
|
|
|
9382
9382
|
const useNestedItem = (id, isDisabled, isGroup) => {
|
|
9383
9383
|
const parent = inject$1(VNestedSymbol, emptyNested);
|
|
9384
9384
|
const uidSymbol = Symbol('nested item');
|
|
9385
|
-
const computedId = computed(() =>
|
|
9385
|
+
const computedId = computed(() => {
|
|
9386
|
+
const idValue = toRaw(toValue(id));
|
|
9387
|
+
return idValue !== undefined ? idValue : uidSymbol;
|
|
9388
|
+
});
|
|
9386
9389
|
const item = {
|
|
9387
9390
|
...parent,
|
|
9388
9391
|
id: computedId,
|
|
@@ -13593,11 +13596,13 @@ function filterItems(items, query, options) {
|
|
|
13593
13596
|
const defaultMatches = {};
|
|
13594
13597
|
let match = -1;
|
|
13595
13598
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
|
13599
|
+
let hasOnlyCustomFilters = false;
|
|
13596
13600
|
if (typeof item === 'object') {
|
|
13597
13601
|
if (item.type === 'divider' || item.type === 'subheader') {
|
|
13598
13602
|
continue;
|
|
13599
13603
|
}
|
|
13600
13604
|
const filterKeys = keys || Object.keys(transformed);
|
|
13605
|
+
hasOnlyCustomFilters = filterKeys.length === customFiltersLength;
|
|
13601
13606
|
for (const key of filterKeys) {
|
|
13602
13607
|
const value = getPropertyFromItem(transformed, key);
|
|
13603
13608
|
const keyFilter = options?.customKeyFilter?.[key];
|
|
@@ -13618,7 +13623,7 @@ function filterItems(items, query, options) {
|
|
|
13618
13623
|
const customMatchesLength = Object.keys(customMatches).length;
|
|
13619
13624
|
if (!defaultMatchesLength && !customMatchesLength) continue;
|
|
13620
13625
|
if (options?.filterMode === 'union' && customMatchesLength !== customFiltersLength && !defaultMatchesLength) continue;
|
|
13621
|
-
if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength)) continue;
|
|
13626
|
+
if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength && customFiltersLength > 0 && !hasOnlyCustomFilters)) continue;
|
|
13622
13627
|
}
|
|
13623
13628
|
array.push({
|
|
13624
13629
|
index: i,
|
|
@@ -15292,7 +15297,7 @@ function mounted$3(el, binding) {
|
|
|
15292
15297
|
};
|
|
15293
15298
|
const uid = binding.instance?.$.uid; // TODO: use custom uid generator
|
|
15294
15299
|
|
|
15295
|
-
if (!target ||
|
|
15300
|
+
if (!target || uid === undefined) return;
|
|
15296
15301
|
const handlers = createHandlers(binding.value);
|
|
15297
15302
|
target._touchHandlers = target._touchHandlers ?? Object.create(null);
|
|
15298
15303
|
target._touchHandlers[uid] = handlers;
|
|
@@ -15303,7 +15308,7 @@ function mounted$3(el, binding) {
|
|
|
15303
15308
|
function unmounted$3(el, binding) {
|
|
15304
15309
|
const target = binding.value?.parent ? el.parentElement : el;
|
|
15305
15310
|
const uid = binding.instance?.$.uid;
|
|
15306
|
-
if (!target?._touchHandlers ||
|
|
15311
|
+
if (!target?._touchHandlers || uid === undefined) return;
|
|
15307
15312
|
const handlers = target._touchHandlers[uid];
|
|
15308
15313
|
keys(handlers).forEach(eventName => {
|
|
15309
15314
|
target.removeEventListener(eventName, handlers[eventName]);
|
|
@@ -26431,7 +26436,7 @@ const VOtpInput = genericComponent()({
|
|
|
26431
26436
|
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
|
26432
26437
|
if (isValidNumber(clipboardText)) return;
|
|
26433
26438
|
model.value = clipboardText.split('');
|
|
26434
|
-
|
|
26439
|
+
focusIndex.value = finalIndex;
|
|
26435
26440
|
}
|
|
26436
26441
|
function reset() {
|
|
26437
26442
|
model.value = [];
|
|
@@ -26461,7 +26466,6 @@ const VOtpInput = genericComponent()({
|
|
|
26461
26466
|
});
|
|
26462
26467
|
watch(model, val => {
|
|
26463
26468
|
if (val.length === length.value) {
|
|
26464
|
-
focusIndex.value = length.value - 1;
|
|
26465
26469
|
emit('finish', val.join(''));
|
|
26466
26470
|
}
|
|
26467
26471
|
}, {
|
|
@@ -31861,6 +31865,7 @@ const VDateInput = genericComponent()({
|
|
|
31861
31865
|
useRender(() => {
|
|
31862
31866
|
const confirmEditProps = VConfirmEdit.filterProps(props);
|
|
31863
31867
|
const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
|
|
31868
|
+
const datePickerSlots = pick(slots, ['title', 'header', 'day', 'month', 'year']);
|
|
31864
31869
|
const textFieldProps = VTextField.filterProps(omit(props, ['placeholder']));
|
|
31865
31870
|
return createVNode(VTextField, mergeProps({
|
|
31866
31871
|
"ref": vTextFieldRef
|
|
@@ -31923,6 +31928,7 @@ const VDateInput = genericComponent()({
|
|
|
31923
31928
|
"onUpdate:modelValue": value => onUpdateModel(value),
|
|
31924
31929
|
"onMousedown": e => e.preventDefault()
|
|
31925
31930
|
}), {
|
|
31931
|
+
...datePickerSlots,
|
|
31926
31932
|
actions: !props.hideActions ? () => slots.actions?.({
|
|
31927
31933
|
save,
|
|
31928
31934
|
cancel,
|
|
@@ -34736,11 +34742,6 @@ const VVideo = genericComponent()({
|
|
|
34736
34742
|
useRender(() => {
|
|
34737
34743
|
const showControls = state.value === 'loaded' && props.variant === 'player' && props.controlsVariant !== 'hidden';
|
|
34738
34744
|
const posterTransition = props.variant === 'background' ? 'poster-fade-out' : 'fade-transition';
|
|
34739
|
-
const overlayProps = {
|
|
34740
|
-
contained: true,
|
|
34741
|
-
persistent: true,
|
|
34742
|
-
contentClass: 'v-video__overlay-fill'
|
|
34743
|
-
};
|
|
34744
34745
|
const controlsProps = {
|
|
34745
34746
|
...VVideoControls.filterProps(omit(props, ['variant', 'rounded', 'hideVolume'])),
|
|
34746
34747
|
rounded: Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded,
|
|
@@ -34776,8 +34777,14 @@ const VVideo = genericComponent()({
|
|
|
34776
34777
|
"color": "#fff",
|
|
34777
34778
|
"variant": "outlined",
|
|
34778
34779
|
"iconSize": "50",
|
|
34779
|
-
"class": "v-video__center-icon"
|
|
34780
|
+
"class": "v-video__center-icon",
|
|
34781
|
+
"onClick": onVideoClick
|
|
34780
34782
|
}, null);
|
|
34783
|
+
const activeOverlays = {
|
|
34784
|
+
playIcon: props.variant === 'player' && state.value === 'loaded' && !props.hideOverlay && !playing.value,
|
|
34785
|
+
poster: state.value !== 'loaded',
|
|
34786
|
+
loading: props.variant === 'player' && (state.value === 'loading' || waiting.value)
|
|
34787
|
+
};
|
|
34781
34788
|
return createElementVNode("div", {
|
|
34782
34789
|
"ref": containerRef,
|
|
34783
34790
|
"class": normalizeClass(['v-video', `v-video--variant-${props.variant}`, `v-video--${state.value}`, {
|
|
@@ -34811,39 +34818,31 @@ const VVideo = genericComponent()({
|
|
|
34811
34818
|
}), [slots.sources?.() ?? createElementVNode("source", {
|
|
34812
34819
|
"src": props.src,
|
|
34813
34820
|
"type": props.type
|
|
34814
|
-
}, null)]),
|
|
34815
|
-
"
|
|
34816
|
-
|
|
34817
|
-
|
|
34818
|
-
|
|
34819
|
-
|
|
34820
|
-
|
|
34821
|
-
}, {
|
|
34822
|
-
default: () => [!playing.value && overlayPlayIcon]
|
|
34823
|
-
}), createVNode(VSpacer, null, null)]
|
|
34824
|
-
}), props.variant === 'player' && !!slots.header ? createElementVNode("div", {
|
|
34821
|
+
}, null)]), createVNode(Transition, {
|
|
34822
|
+
"name": "fade-transition"
|
|
34823
|
+
}, {
|
|
34824
|
+
default: () => [activeOverlays.playIcon && createElementVNode("div", {
|
|
34825
|
+
"class": "v-video__overlay-fill"
|
|
34826
|
+
}, [overlayPlayIcon])]
|
|
34827
|
+
}), props.variant === 'player' && !!slots.header && createElementVNode("div", {
|
|
34825
34828
|
"key": "header",
|
|
34826
34829
|
"class": "v-video__header"
|
|
34827
|
-
}, [slots.header()])
|
|
34828
|
-
"key": "poster-overlay",
|
|
34829
|
-
"modelValue": state.value !== 'loaded',
|
|
34830
|
+
}, [slots.header()]), createVNode(MaybeTransition, {
|
|
34830
34831
|
"transition": posterTransition
|
|
34831
|
-
},
|
|
34832
|
-
default: () => [
|
|
34832
|
+
}, {
|
|
34833
|
+
default: () => [activeOverlays.poster && createElementVNode("div", {
|
|
34834
|
+
"class": "v-video__overlay-fill"
|
|
34835
|
+
}, [createVNode(VImg, {
|
|
34833
34836
|
"cover": true,
|
|
34834
34837
|
"src": props.image
|
|
34835
34838
|
}, {
|
|
34836
34839
|
default: () => [createElementVNode("div", {
|
|
34837
34840
|
"class": normalizeClass(['v-video__overlay-fill', ...roundedContainerClasses.value])
|
|
34838
34841
|
}, [props.variant === 'player' && overlayPlayIcon])]
|
|
34839
|
-
})]
|
|
34840
|
-
}),
|
|
34841
|
-
"
|
|
34842
|
-
|
|
34843
|
-
"opacity": ".1"
|
|
34844
|
-
}, overlayProps), {
|
|
34845
|
-
default: () => [loadingIndicator]
|
|
34846
|
-
})]), createVNode(MaybeTransition, {
|
|
34842
|
+
})])]
|
|
34843
|
+
}), activeOverlays.loading && createElementVNode("div", {
|
|
34844
|
+
"class": "v-video__overlay-fill"
|
|
34845
|
+
}, [loadingIndicator])]), createVNode(MaybeTransition, {
|
|
34847
34846
|
"key": "actions",
|
|
34848
34847
|
"transition": props.controlsTransition
|
|
34849
34848
|
}, {
|
|
@@ -35299,7 +35298,7 @@ function createVuetify$1() {
|
|
|
35299
35298
|
};
|
|
35300
35299
|
});
|
|
35301
35300
|
}
|
|
35302
|
-
const version$1 = "3.9.
|
|
35301
|
+
const version$1 = "3.9.7";
|
|
35303
35302
|
createVuetify$1.version = version$1;
|
|
35304
35303
|
|
|
35305
35304
|
// Vue's inject() can only be used in setup
|
|
@@ -35597,7 +35596,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
35597
35596
|
|
|
35598
35597
|
/* eslint-disable local-rules/sort-imports */
|
|
35599
35598
|
|
|
35600
|
-
const version = "3.9.
|
|
35599
|
+
const version = "3.9.7";
|
|
35601
35600
|
|
|
35602
35601
|
/* eslint-disable local-rules/sort-imports */
|
|
35603
35602
|
|