@vuetify/nightly 3.10.9-dev.2025-11-05 → 3.10.9-dev.2025-11-08
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 -3
- package/dist/json/attributes.json +1165 -1113
- package/dist/json/importMap-labs.json +18 -18
- package/dist/json/importMap.json +166 -166
- package/dist/json/tags.json +14 -1
- package/dist/json/web-types.json +2215 -2091
- package/dist/vuetify-labs.cjs +79 -38
- package/dist/vuetify-labs.css +5133 -5126
- package/dist/vuetify-labs.d.ts +398 -133
- package/dist/vuetify-labs.esm.js +79 -38
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +79 -38
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +79 -38
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2945 -2938
- package/dist/vuetify.d.ts +338 -113
- package/dist/vuetify.esm.js +79 -38
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +79 -38
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +23 -22
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +33 -11
- package/lib/components/VBottomSheet/VBottomSheet.d.ts +25 -0
- package/lib/components/VBreadcrumbs/VBreadcrumbs.d.ts +13 -0
- package/lib/components/VBreadcrumbs/VBreadcrumbs.js +3 -2
- package/lib/components/VBreadcrumbs/VBreadcrumbs.js.map +1 -1
- package/lib/components/VBreadcrumbs/VBreadcrumbsItem.d.ts +20 -0
- package/lib/components/VBreadcrumbs/VBreadcrumbsItem.js +7 -2
- package/lib/components/VBreadcrumbs/VBreadcrumbsItem.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.d.ts +33 -11
- package/lib/components/VDialog/VDialog.d.ts +52 -9
- package/lib/components/VInfiniteScroll/VInfiniteScroll.css +7 -0
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js +3 -1
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
- package/lib/components/VInfiniteScroll/VInfiniteScroll.sass +10 -0
- package/lib/components/VMenu/VMenu.d.ts +52 -9
- package/lib/components/VOverlay/VOverlay.d.ts +25 -0
- package/lib/components/VOverlay/locationStrategies.d.ts +12 -0
- package/lib/components/VOverlay/locationStrategies.js +10 -7
- package/lib/components/VOverlay/locationStrategies.js.map +1 -1
- package/lib/components/VSelect/VSelect.d.ts +51 -17
- package/lib/components/VSnackbar/VSnackbar.d.ts +27 -9
- package/lib/components/VSnackbar/VSnackbar.js +1 -1
- package/lib/components/VSnackbar/VSnackbar.js.map +1 -1
- package/lib/components/VSpeedDial/VSpeedDial.d.ts +25 -0
- package/lib/components/VTabs/VTab.d.ts +20 -0
- package/lib/components/VTabs/VTab.js +46 -17
- package/lib/components/VTabs/VTab.js.map +1 -1
- package/lib/components/VTabs/VTabs.d.ts +20 -0
- package/lib/components/VTabs/VTabs.js +9 -7
- package/lib/components/VTabs/VTabs.js.map +1 -1
- package/lib/components/VTooltip/VTooltip.d.ts +52 -9
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +90 -71
- package/lib/framework.js +1 -1
- package/lib/labs/VVideo/VVideo.d.ts +63 -21
- package/lib/labs/VVideo/VVideoControls.d.ts +30 -10
- package/lib/labs/VVideo/VVideoVolume.d.ts +30 -10
- package/package.json +1 -1
|
@@ -11,6 +11,7 @@ export declare const makeVDialogProps: <Defaults extends {
|
|
|
11
11
|
origin?: unknown;
|
|
12
12
|
offset?: unknown;
|
|
13
13
|
stickToTarget?: unknown;
|
|
14
|
+
viewportMargin?: unknown;
|
|
14
15
|
scrollStrategy?: unknown;
|
|
15
16
|
height?: unknown;
|
|
16
17
|
maxHeight?: unknown;
|
|
@@ -110,6 +111,16 @@ export declare const makeVDialogProps: <Defaults extends {
|
|
|
110
111
|
type: import("vue").PropType<unknown extends Defaults["stickToTarget"] ? boolean : boolean | Defaults["stickToTarget"]>;
|
|
111
112
|
default: unknown extends Defaults["stickToTarget"] ? boolean : boolean | Defaults["stickToTarget"];
|
|
112
113
|
};
|
|
114
|
+
viewportMargin: unknown extends Defaults["viewportMargin"] ? {
|
|
115
|
+
type: (NumberConstructor | StringConstructor)[];
|
|
116
|
+
default: number;
|
|
117
|
+
} : Omit<{
|
|
118
|
+
type: (NumberConstructor | StringConstructor)[];
|
|
119
|
+
default: number;
|
|
120
|
+
}, "default" | "type"> & {
|
|
121
|
+
type: import("vue").PropType<unknown extends Defaults["viewportMargin"] ? string | number : string | number | Defaults["viewportMargin"]>;
|
|
122
|
+
default: unknown extends Defaults["viewportMargin"] ? string | number : Defaults["viewportMargin"] | NonNullable<string | number>;
|
|
123
|
+
};
|
|
113
124
|
scrollStrategy: unknown extends Defaults["scrollStrategy"] ? Omit<{
|
|
114
125
|
type: import("vue").PropType<"block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction>;
|
|
115
126
|
default: string;
|
|
@@ -858,6 +869,7 @@ export declare const VDialog: {
|
|
|
858
869
|
location: import("../../util/index.js").Anchor;
|
|
859
870
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
860
871
|
stickToTarget: boolean;
|
|
872
|
+
viewportMargin: string | number;
|
|
861
873
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
862
874
|
activatorProps: Record<string, any>;
|
|
863
875
|
openOnHover: boolean;
|
|
@@ -1010,6 +1022,7 @@ export declare const VDialog: {
|
|
|
1010
1022
|
location: import("../../util/index.js").Anchor;
|
|
1011
1023
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1012
1024
|
stickToTarget: boolean;
|
|
1025
|
+
viewportMargin: string | number;
|
|
1013
1026
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1014
1027
|
activatorProps: Record<string, any>;
|
|
1015
1028
|
openOnClick: boolean;
|
|
@@ -1060,6 +1073,7 @@ export declare const VDialog: {
|
|
|
1060
1073
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1061
1074
|
offset?: string | number | number[] | undefined;
|
|
1062
1075
|
stickToTarget: boolean;
|
|
1076
|
+
viewportMargin: string | number;
|
|
1063
1077
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1064
1078
|
height?: string | number | undefined;
|
|
1065
1079
|
maxHeight?: string | number | undefined;
|
|
@@ -1107,7 +1121,7 @@ export declare const VDialog: {
|
|
|
1107
1121
|
"v-slot:default"?: false | ((arg: {
|
|
1108
1122
|
isActive: import("vue").Ref<boolean, boolean>;
|
|
1109
1123
|
}) => import("vue").VNodeChild) | undefined;
|
|
1110
|
-
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex">;
|
|
1124
|
+
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex">;
|
|
1111
1125
|
$attrs: {
|
|
1112
1126
|
[x: string]: unknown;
|
|
1113
1127
|
};
|
|
@@ -1139,6 +1153,7 @@ export declare const VDialog: {
|
|
|
1139
1153
|
location: import("../../util/index.js").Anchor;
|
|
1140
1154
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1141
1155
|
stickToTarget: boolean;
|
|
1156
|
+
viewportMargin: string | number;
|
|
1142
1157
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1143
1158
|
activatorProps: Record<string, any>;
|
|
1144
1159
|
openOnHover: boolean;
|
|
@@ -1239,6 +1254,7 @@ export declare const VDialog: {
|
|
|
1239
1254
|
location: import("../../util/index.js").Anchor;
|
|
1240
1255
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1241
1256
|
stickToTarget: boolean;
|
|
1257
|
+
viewportMargin: string | number;
|
|
1242
1258
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1243
1259
|
activatorProps: Record<string, any>;
|
|
1244
1260
|
openOnClick: boolean;
|
|
@@ -1295,6 +1311,7 @@ export declare const VDialog: {
|
|
|
1295
1311
|
location: import("../../util/index.js").Anchor;
|
|
1296
1312
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1297
1313
|
stickToTarget: boolean;
|
|
1314
|
+
viewportMargin: string | number;
|
|
1298
1315
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1299
1316
|
activatorProps: Record<string, any>;
|
|
1300
1317
|
openOnClick: boolean;
|
|
@@ -1318,6 +1335,7 @@ export declare const VDialog: {
|
|
|
1318
1335
|
location: import("../../util/index.js").Anchor;
|
|
1319
1336
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1320
1337
|
stickToTarget: boolean;
|
|
1338
|
+
viewportMargin: string | number;
|
|
1321
1339
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1322
1340
|
activatorProps: Record<string, any>;
|
|
1323
1341
|
openOnHover: boolean;
|
|
@@ -1396,7 +1414,7 @@ export declare const VDialog: {
|
|
|
1396
1414
|
"onClick:outside"?: ((e: MouseEvent) => any) | undefined;
|
|
1397
1415
|
onKeydown?: ((e: KeyboardEvent) => any) | undefined;
|
|
1398
1416
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
1399
|
-
}, "activatorEl" | "animateClick" | "contentEl" | "globalTop" | "localTop" | "rootEl" | "scrimEl" | "target" | "updateLocation" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex")> & import("vue").ShallowUnwrapRef<{
|
|
1417
|
+
}, "activatorEl" | "animateClick" | "contentEl" | "globalTop" | "localTop" | "rootEl" | "scrimEl" | "target" | "updateLocation" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex")> & import("vue").ShallowUnwrapRef<{
|
|
1400
1418
|
activatorEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
1401
1419
|
scrimEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
1402
1420
|
target: import("vue").ComputedRef<HTMLElement | [x: number, y: number] | undefined>;
|
|
@@ -1406,7 +1424,7 @@ export declare const VDialog: {
|
|
|
1406
1424
|
globalTop: Readonly<import("vue").Ref<boolean, boolean>>;
|
|
1407
1425
|
localTop: Readonly<import("vue").Ref<boolean, boolean>>;
|
|
1408
1426
|
updateLocation: import("vue").Ref<((e: Event) => void) | undefined, ((e: Event) => void) | undefined>;
|
|
1409
|
-
}> & {} & import("vue").ComponentCustomProperties & {}, "$children" | "activator" | "attach" | "class" | "closeDelay" | "contentClass" | "contentProps" | "height" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "offset" | "onAfterEnter" | "onAfterLeave" | "onClick:outside" | "onKeydown" | "onUpdate:modelValue" | "opacity" | "openDelay" | "target" | "theme" | "transition" | "v-slot:activator" | "v-slot:default" | "v-slots" | "width" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex") | keyof import("vue").VNodeProps>, `$${any}`> & {
|
|
1427
|
+
}> & {} & import("vue").ComponentCustomProperties & {}, "$children" | "activator" | "attach" | "class" | "closeDelay" | "contentClass" | "contentProps" | "height" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "offset" | "onAfterEnter" | "onAfterLeave" | "onClick:outside" | "onKeydown" | "onUpdate:modelValue" | "opacity" | "openDelay" | "target" | "theme" | "transition" | "v-slot:activator" | "v-slot:default" | "v-slots" | "width" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex") | keyof import("vue").VNodeProps>, `$${any}`> & {
|
|
1410
1428
|
_allExposed: {
|
|
1411
1429
|
activatorEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
1412
1430
|
scrimEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
@@ -1428,6 +1446,7 @@ export declare const VDialog: {
|
|
|
1428
1446
|
location: import("../../util/index.js").Anchor;
|
|
1429
1447
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1430
1448
|
stickToTarget: boolean;
|
|
1449
|
+
viewportMargin: string | number;
|
|
1431
1450
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1432
1451
|
activatorProps: Record<string, any>;
|
|
1433
1452
|
openOnClick: boolean;
|
|
@@ -1541,6 +1560,7 @@ export declare const VDialog: {
|
|
|
1541
1560
|
location: import("../../util/index.js").Anchor;
|
|
1542
1561
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1543
1562
|
stickToTarget: boolean;
|
|
1563
|
+
viewportMargin: string | number;
|
|
1544
1564
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1545
1565
|
activatorProps: Record<string, any>;
|
|
1546
1566
|
openOnHover: boolean;
|
|
@@ -1693,6 +1713,7 @@ export declare const VDialog: {
|
|
|
1693
1713
|
location: import("../../util/index.js").Anchor;
|
|
1694
1714
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1695
1715
|
stickToTarget: boolean;
|
|
1716
|
+
viewportMargin: string | number;
|
|
1696
1717
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1697
1718
|
activatorProps: Record<string, any>;
|
|
1698
1719
|
openOnClick: boolean;
|
|
@@ -1743,6 +1764,7 @@ export declare const VDialog: {
|
|
|
1743
1764
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1744
1765
|
offset?: string | number | number[] | undefined;
|
|
1745
1766
|
stickToTarget: boolean;
|
|
1767
|
+
viewportMargin: string | number;
|
|
1746
1768
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1747
1769
|
height?: string | number | undefined;
|
|
1748
1770
|
maxHeight?: string | number | undefined;
|
|
@@ -1790,7 +1812,7 @@ export declare const VDialog: {
|
|
|
1790
1812
|
"v-slot:default"?: false | ((arg: {
|
|
1791
1813
|
isActive: import("vue").Ref<boolean, boolean>;
|
|
1792
1814
|
}) => import("vue").VNodeChild) | undefined;
|
|
1793
|
-
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex">;
|
|
1815
|
+
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex">;
|
|
1794
1816
|
$attrs: {
|
|
1795
1817
|
[x: string]: unknown;
|
|
1796
1818
|
};
|
|
@@ -1822,6 +1844,7 @@ export declare const VDialog: {
|
|
|
1822
1844
|
location: import("../../util/index.js").Anchor;
|
|
1823
1845
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1824
1846
|
stickToTarget: boolean;
|
|
1847
|
+
viewportMargin: string | number;
|
|
1825
1848
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1826
1849
|
activatorProps: Record<string, any>;
|
|
1827
1850
|
openOnHover: boolean;
|
|
@@ -1922,6 +1945,7 @@ export declare const VDialog: {
|
|
|
1922
1945
|
location: import("../../util/index.js").Anchor;
|
|
1923
1946
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1924
1947
|
stickToTarget: boolean;
|
|
1948
|
+
viewportMargin: string | number;
|
|
1925
1949
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1926
1950
|
activatorProps: Record<string, any>;
|
|
1927
1951
|
openOnClick: boolean;
|
|
@@ -1978,6 +2002,7 @@ export declare const VDialog: {
|
|
|
1978
2002
|
location: import("../../util/index.js").Anchor;
|
|
1979
2003
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
1980
2004
|
stickToTarget: boolean;
|
|
2005
|
+
viewportMargin: string | number;
|
|
1981
2006
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
1982
2007
|
activatorProps: Record<string, any>;
|
|
1983
2008
|
openOnClick: boolean;
|
|
@@ -2001,6 +2026,7 @@ export declare const VDialog: {
|
|
|
2001
2026
|
location: import("../../util/index.js").Anchor;
|
|
2002
2027
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2003
2028
|
stickToTarget: boolean;
|
|
2029
|
+
viewportMargin: string | number;
|
|
2004
2030
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2005
2031
|
activatorProps: Record<string, any>;
|
|
2006
2032
|
openOnHover: boolean;
|
|
@@ -2079,7 +2105,7 @@ export declare const VDialog: {
|
|
|
2079
2105
|
"onClick:outside"?: ((e: MouseEvent) => any) | undefined;
|
|
2080
2106
|
onKeydown?: ((e: KeyboardEvent) => any) | undefined;
|
|
2081
2107
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
2082
|
-
}, "activatorEl" | "animateClick" | "contentEl" | "globalTop" | "localTop" | "rootEl" | "scrimEl" | "target" | "updateLocation" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex")> & import("vue").ShallowUnwrapRef<{
|
|
2108
|
+
}, "activatorEl" | "animateClick" | "contentEl" | "globalTop" | "localTop" | "rootEl" | "scrimEl" | "target" | "updateLocation" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex")> & import("vue").ShallowUnwrapRef<{
|
|
2083
2109
|
activatorEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
2084
2110
|
scrimEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
2085
2111
|
target: import("vue").ComputedRef<HTMLElement | [x: number, y: number] | undefined>;
|
|
@@ -2089,7 +2115,7 @@ export declare const VDialog: {
|
|
|
2089
2115
|
globalTop: Readonly<import("vue").Ref<boolean, boolean>>;
|
|
2090
2116
|
localTop: Readonly<import("vue").Ref<boolean, boolean>>;
|
|
2091
2117
|
updateLocation: import("vue").Ref<((e: Event) => void) | undefined, ((e: Event) => void) | undefined>;
|
|
2092
|
-
}> & {} & import("vue").ComponentCustomProperties & {}, "$children" | "activator" | "attach" | "class" | "closeDelay" | "contentClass" | "contentProps" | "height" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "offset" | "onAfterEnter" | "onAfterLeave" | "onClick:outside" | "onKeydown" | "onUpdate:modelValue" | "opacity" | "openDelay" | "target" | "theme" | "transition" | "v-slot:activator" | "v-slot:default" | "v-slots" | "width" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex") | keyof import("vue").VNodeProps>, `$${any}`> & {
|
|
2118
|
+
}> & {} & import("vue").ComponentCustomProperties & {}, "$children" | "activator" | "attach" | "class" | "closeDelay" | "contentClass" | "contentProps" | "height" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "offset" | "onAfterEnter" | "onAfterLeave" | "onClick:outside" | "onKeydown" | "onUpdate:modelValue" | "opacity" | "openDelay" | "target" | "theme" | "transition" | "v-slot:activator" | "v-slot:default" | "v-slots" | "width" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex") | keyof import("vue").VNodeProps>, `$${any}`> & {
|
|
2093
2119
|
_allExposed: {
|
|
2094
2120
|
activatorEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
2095
2121
|
scrimEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
@@ -2107,6 +2133,7 @@ export declare const VDialog: {
|
|
|
2107
2133
|
location: import("../../util/index.js").Anchor;
|
|
2108
2134
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2109
2135
|
stickToTarget: boolean;
|
|
2136
|
+
viewportMargin: string | number;
|
|
2110
2137
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2111
2138
|
activatorProps: Record<string, any>;
|
|
2112
2139
|
openOnClick: boolean;
|
|
@@ -2204,6 +2231,7 @@ export declare const VDialog: {
|
|
|
2204
2231
|
location: import("../../util/index.js").Anchor;
|
|
2205
2232
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2206
2233
|
stickToTarget: boolean;
|
|
2234
|
+
viewportMargin: string | number;
|
|
2207
2235
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2208
2236
|
activatorProps: Record<string, any>;
|
|
2209
2237
|
openOnHover: boolean;
|
|
@@ -2356,6 +2384,7 @@ export declare const VDialog: {
|
|
|
2356
2384
|
location: import("../../util/index.js").Anchor;
|
|
2357
2385
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2358
2386
|
stickToTarget: boolean;
|
|
2387
|
+
viewportMargin: string | number;
|
|
2359
2388
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2360
2389
|
activatorProps: Record<string, any>;
|
|
2361
2390
|
openOnClick: boolean;
|
|
@@ -2406,6 +2435,7 @@ export declare const VDialog: {
|
|
|
2406
2435
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2407
2436
|
offset?: string | number | number[] | undefined;
|
|
2408
2437
|
stickToTarget: boolean;
|
|
2438
|
+
viewportMargin: string | number;
|
|
2409
2439
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2410
2440
|
height?: string | number | undefined;
|
|
2411
2441
|
maxHeight?: string | number | undefined;
|
|
@@ -2453,7 +2483,7 @@ export declare const VDialog: {
|
|
|
2453
2483
|
"v-slot:default"?: false | ((arg: {
|
|
2454
2484
|
isActive: import("vue").Ref<boolean, boolean>;
|
|
2455
2485
|
}) => import("vue").VNodeChild) | undefined;
|
|
2456
|
-
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex">;
|
|
2486
|
+
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex">;
|
|
2457
2487
|
$attrs: {
|
|
2458
2488
|
[x: string]: unknown;
|
|
2459
2489
|
};
|
|
@@ -2485,6 +2515,7 @@ export declare const VDialog: {
|
|
|
2485
2515
|
location: import("../../util/index.js").Anchor;
|
|
2486
2516
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2487
2517
|
stickToTarget: boolean;
|
|
2518
|
+
viewportMargin: string | number;
|
|
2488
2519
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2489
2520
|
activatorProps: Record<string, any>;
|
|
2490
2521
|
openOnHover: boolean;
|
|
@@ -2585,6 +2616,7 @@ export declare const VDialog: {
|
|
|
2585
2616
|
location: import("../../util/index.js").Anchor;
|
|
2586
2617
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2587
2618
|
stickToTarget: boolean;
|
|
2619
|
+
viewportMargin: string | number;
|
|
2588
2620
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2589
2621
|
activatorProps: Record<string, any>;
|
|
2590
2622
|
openOnClick: boolean;
|
|
@@ -2641,6 +2673,7 @@ export declare const VDialog: {
|
|
|
2641
2673
|
location: import("../../util/index.js").Anchor;
|
|
2642
2674
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2643
2675
|
stickToTarget: boolean;
|
|
2676
|
+
viewportMargin: string | number;
|
|
2644
2677
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2645
2678
|
activatorProps: Record<string, any>;
|
|
2646
2679
|
openOnClick: boolean;
|
|
@@ -2664,6 +2697,7 @@ export declare const VDialog: {
|
|
|
2664
2697
|
location: import("../../util/index.js").Anchor;
|
|
2665
2698
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2666
2699
|
stickToTarget: boolean;
|
|
2700
|
+
viewportMargin: string | number;
|
|
2667
2701
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2668
2702
|
activatorProps: Record<string, any>;
|
|
2669
2703
|
openOnHover: boolean;
|
|
@@ -2742,7 +2776,7 @@ export declare const VDialog: {
|
|
|
2742
2776
|
"onClick:outside"?: ((e: MouseEvent) => any) | undefined;
|
|
2743
2777
|
onKeydown?: ((e: KeyboardEvent) => any) | undefined;
|
|
2744
2778
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
2745
|
-
}, "activatorEl" | "animateClick" | "contentEl" | "globalTop" | "localTop" | "rootEl" | "scrimEl" | "target" | "updateLocation" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex")> & import("vue").ShallowUnwrapRef<{
|
|
2779
|
+
}, "activatorEl" | "animateClick" | "contentEl" | "globalTop" | "localTop" | "rootEl" | "scrimEl" | "target" | "updateLocation" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex")> & import("vue").ShallowUnwrapRef<{
|
|
2746
2780
|
activatorEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
2747
2781
|
scrimEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
2748
2782
|
target: import("vue").ComputedRef<HTMLElement | [x: number, y: number] | undefined>;
|
|
@@ -2752,7 +2786,7 @@ export declare const VDialog: {
|
|
|
2752
2786
|
globalTop: Readonly<import("vue").Ref<boolean, boolean>>;
|
|
2753
2787
|
localTop: Readonly<import("vue").Ref<boolean, boolean>>;
|
|
2754
2788
|
updateLocation: import("vue").Ref<((e: Event) => void) | undefined, ((e: Event) => void) | undefined>;
|
|
2755
|
-
}> & {} & import("vue").ComponentCustomProperties & {}, "$children" | "activator" | "attach" | "class" | "closeDelay" | "contentClass" | "contentProps" | "height" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "offset" | "onAfterEnter" | "onAfterLeave" | "onClick:outside" | "onKeydown" | "onUpdate:modelValue" | "opacity" | "openDelay" | "target" | "theme" | "transition" | "v-slot:activator" | "v-slot:default" | "v-slots" | "width" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "zIndex") | keyof import("vue").VNodeProps>, `$${any}`> & {
|
|
2789
|
+
}> & {} & import("vue").ComponentCustomProperties & {}, "$children" | "activator" | "attach" | "class" | "closeDelay" | "contentClass" | "contentProps" | "height" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "offset" | "onAfterEnter" | "onAfterLeave" | "onClick:outside" | "onKeydown" | "onUpdate:modelValue" | "opacity" | "openDelay" | "target" | "theme" | "transition" | "v-slot:activator" | "v-slot:default" | "v-slots" | "width" | ("_disableGlobalStack" | "absolute" | "activatorProps" | "closeOnBack" | "closeOnContentClick" | "contained" | "disabled" | "eager" | "location" | "locationStrategy" | "modelValue" | "noClickAnimation" | "openOnClick" | "openOnFocus" | "openOnHover" | "origin" | "persistent" | "scrim" | "scrollStrategy" | "stickToTarget" | "style" | "viewportMargin" | "zIndex") | keyof import("vue").VNodeProps>, `$${any}`> & {
|
|
2756
2790
|
_allExposed: {
|
|
2757
2791
|
activatorEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
2758
2792
|
scrimEl: import("vue").Ref<HTMLElement | undefined, HTMLElement | undefined>;
|
|
@@ -2774,6 +2808,7 @@ export declare const VDialog: {
|
|
|
2774
2808
|
location: import("../../util/index.js").Anchor;
|
|
2775
2809
|
origin: "auto" | "overlap" | import("../../util/index.js").Anchor;
|
|
2776
2810
|
stickToTarget: boolean;
|
|
2811
|
+
viewportMargin: string | number;
|
|
2777
2812
|
scrollStrategy: "block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction;
|
|
2778
2813
|
activatorProps: Record<string, any>;
|
|
2779
2814
|
openOnClick: boolean;
|
|
@@ -2899,6 +2934,10 @@ export declare const VDialog: {
|
|
|
2899
2934
|
};
|
|
2900
2935
|
offset: import("vue").PropType<string | number | number[] | undefined>;
|
|
2901
2936
|
stickToTarget: BooleanConstructor;
|
|
2937
|
+
viewportMargin: {
|
|
2938
|
+
type: (NumberConstructor | StringConstructor)[];
|
|
2939
|
+
default: number;
|
|
2940
|
+
};
|
|
2902
2941
|
scrollStrategy: Omit<{
|
|
2903
2942
|
type: import("vue").PropType<"block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction>;
|
|
2904
2943
|
default: string;
|
|
@@ -3126,6 +3165,10 @@ export declare const VDialog: {
|
|
|
3126
3165
|
};
|
|
3127
3166
|
offset: import("vue").PropType<string | number | number[] | undefined>;
|
|
3128
3167
|
stickToTarget: BooleanConstructor;
|
|
3168
|
+
viewportMargin: {
|
|
3169
|
+
type: (NumberConstructor | StringConstructor)[];
|
|
3170
|
+
default: number;
|
|
3171
|
+
};
|
|
3129
3172
|
scrollStrategy: Omit<{
|
|
3130
3173
|
type: import("vue").PropType<"block" | "close" | "none" | "reposition" | import("../../types.js").ScrollStrategyFunction>;
|
|
3131
3174
|
default: string;
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
.v-infinite-scroll-intersect {
|
|
22
|
+
overflow: hidden;
|
|
22
23
|
pointer-events: none;
|
|
23
24
|
margin-top: var(--v-infinite-margin);
|
|
24
25
|
margin-bottom: calc(var(--v-infinite-margin) * -1);
|
|
@@ -35,4 +36,10 @@
|
|
|
35
36
|
display: flex;
|
|
36
37
|
justify-content: center;
|
|
37
38
|
padding: 8px;
|
|
39
|
+
transition-property: padding;
|
|
40
|
+
transition-duration: 0.3s;
|
|
41
|
+
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
42
|
+
}
|
|
43
|
+
.v-infinite-scroll__side:empty, .v-infinite-scroll__side:has(> div:only-child:empty) {
|
|
44
|
+
padding: 0;
|
|
38
45
|
}
|
|
@@ -243,7 +243,9 @@ export const VInfiniteScroll = genericComponent()({
|
|
|
243
243
|
const effectiveSide = side ?? props.side;
|
|
244
244
|
setStatus(effectiveSide, 'ok');
|
|
245
245
|
nextTick(() => {
|
|
246
|
-
|
|
246
|
+
if (effectiveSide !== 'end') {
|
|
247
|
+
setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
|
|
248
|
+
}
|
|
247
249
|
if (props.mode !== 'manual') {
|
|
248
250
|
nextTick(() => {
|
|
249
251
|
// See #17475
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VInfiniteScroll.js","names":["VBtn","VProgressCircular","makeDimensionProps","useDimension","useIntersectionObserver","useLocale","makeTagProps","computed","nextTick","onMounted","ref","shallowRef","watch","convertToUnit","defineComponent","genericComponent","propsFactory","useRender","makeVInfiniteScrollProps","color","String","direction","type","default","validator","v","includes","side","mode","margin","Number","loadMoreText","emptyText","VInfiniteScrollIntersect","name","props","required","rootMargin","emits","intersect","isIntersecting","setup","_ref","emit","intersectionRef","val","_createElementVNode","_createTextVNode","VInfiniteScroll","load","options","_ref2","slots","rootEl","startStatus","endStatus","setScrollAmount","amount","value","property","getScrollAmount","getScrollSize","getContainerSize","setStatus","status","getStatus","previousScrollSize","handleIntersect","_isIntersecting","intersecting","done","window","requestAnimationFrame","t","renderSide","onClick","slotProps","error","empty","loading","_createVNode","dimensionStyles","Tag","tag","hasStartIntersect","hasEndIntersect","intersectMode","_normalizeClass","_normalizeStyle","reset","effectiveSide"],"sources":["../../../src/components/VInfiniteScroll/VInfiniteScroll.tsx"],"sourcesContent":["// Styles\nimport './VInfiniteScroll.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, shallowRef, watch } from 'vue'\nimport { convertToUnit, defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type InfiniteScrollSide = 'start' | 'end' | 'both'\nexport type InfiniteScrollStatus = 'ok' | 'empty' | 'loading' | 'error'\n\ntype InfiniteScrollSlot = {\n side: InfiniteScrollSide\n props: Record<string, any>\n}\n\ntype VInfiniteScrollSlots = {\n default: never\n loading: InfiniteScrollSlot\n error: InfiniteScrollSlot\n empty: InfiniteScrollSlot\n 'load-more': InfiniteScrollSlot\n}\n\nexport const makeVInfiniteScrollProps = propsFactory({\n color: String,\n direction: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: 'end',\n validator: (v: any) => ['start', 'end', 'both'].includes(v),\n },\n mode: {\n type: String as PropType<'intersect' | 'manual'>,\n default: 'intersect',\n validator: (v: any) => ['intersect', 'manual'].includes(v),\n },\n margin: [Number, String],\n loadMoreText: {\n type: String,\n default: '$vuetify.infiniteScroll.loadMore',\n },\n emptyText: {\n type: String,\n default: '$vuetify.infiniteScroll.empty',\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n}, 'VInfiniteScroll')\n\nexport const VInfiniteScrollIntersect = defineComponent({\n name: 'VInfiniteScrollIntersect',\n\n props: {\n side: {\n type: String as PropType<InfiniteScrollSide>,\n required: true,\n },\n rootMargin: String,\n },\n\n emits: {\n intersect: (side: InfiniteScrollSide, isIntersecting: boolean) => true,\n },\n\n setup (props, { emit }) {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n watch(isIntersecting, async val => {\n emit('intersect', props.side, val)\n })\n\n useRender(() => (\n <div\n class=\"v-infinite-scroll-intersect\"\n style={{\n '--v-infinite-margin-size': props.rootMargin,\n }}\n ref={ intersectionRef }\n > </div>\n ))\n\n return {}\n },\n})\n\nexport const VInfiniteScroll = genericComponent<VInfiniteScrollSlots>()({\n name: 'VInfiniteScroll',\n\n props: makeVInfiniteScrollProps(),\n\n emits: {\n load: (options: { side: InfiniteScrollSide, done: (status: InfiniteScrollStatus) => void }) => true,\n },\n\n setup (props, { slots, emit }) {\n const rootEl = ref<HTMLDivElement>()\n const startStatus = shallowRef<InfiniteScrollStatus>('ok')\n const endStatus = shallowRef<InfiniteScrollStatus>('ok')\n const margin = computed(() => convertToUnit(props.margin))\n const isIntersecting = shallowRef(false)\n\n function setScrollAmount (amount: number) {\n if (!rootEl.value) return\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n rootEl.value[property] = amount\n }\n\n function getScrollAmount () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n return rootEl.value[property]\n }\n\n function getScrollSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth'\n return rootEl.value[property]\n }\n\n function getContainerSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth'\n return rootEl.value[property]\n }\n\n onMounted(() => {\n if (!rootEl.value) return\n\n if (props.side === 'start') {\n setScrollAmount(getScrollSize())\n } else if (props.side === 'both') {\n setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2)\n }\n })\n\n function setStatus (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (side === 'start') {\n startStatus.value = status\n } else if (side === 'end') {\n endStatus.value = status\n } else if (side === 'both') {\n startStatus.value = status\n endStatus.value = status\n }\n }\n\n function getStatus (side: string) {\n return side === 'start' ? startStatus.value : endStatus.value\n }\n\n let previousScrollSize = 0\n function handleIntersect (side: InfiniteScrollSide, _isIntersecting: boolean) {\n isIntersecting.value = _isIntersecting\n if (isIntersecting.value) {\n intersecting(side)\n }\n }\n\n function intersecting (side: InfiniteScrollSide) {\n if (props.mode !== 'manual' && !isIntersecting.value) return\n\n const status = getStatus(side)\n if (!rootEl.value || ['empty', 'loading'].includes(status)) return\n\n previousScrollSize = getScrollSize()\n setStatus(side, 'loading')\n\n function done (status: InfiniteScrollStatus) {\n setStatus(side, status)\n\n nextTick(() => {\n if (status === 'empty' || status === 'error') return\n\n if (status === 'ok' && side === 'start') {\n setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount())\n }\n if (props.mode !== 'manual') {\n nextTick(() => {\n // Browser takes 2 - 3 animation frames to trigger IntersectionObserver after\n // VInfiniteScrollIntersect leaves the viewpoint. So far I couldn't come up\n // with a better solution than using 3 nested window.requestAnimationFrame. (#17475)\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n intersecting(side)\n })\n })\n })\n })\n }\n })\n }\n\n emit('load', { side, done })\n }\n\n const { t } = useLocale()\n\n function renderSide (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (props.side !== side && props.side !== 'both') return\n\n const onClick = () => intersecting(side)\n const slotProps = { side, props: { onClick, color: props.color } }\n\n if (status === 'error') return slots.error?.(slotProps)\n\n if (status === 'empty') return slots.empty?.(slotProps) ?? <div>{ t(props.emptyText) }</div>\n\n if (props.mode === 'manual') {\n if (status === 'loading') {\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n return slots['load-more']?.(slotProps) ?? (\n <VBtn variant=\"outlined\" color={ props.color } onClick={ onClick }>\n { t(props.loadMoreText) }\n </VBtn>\n )\n }\n\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n const { dimensionStyles } = useDimension(props)\n\n useRender(() => {\n const Tag = props.tag\n const hasStartIntersect = props.side === 'start' || props.side === 'both'\n const hasEndIntersect = props.side === 'end' || props.side === 'both'\n const intersectMode = props.mode === 'intersect'\n\n return (\n <Tag\n ref={ rootEl }\n class={[\n 'v-infinite-scroll',\n `v-infinite-scroll--${props.direction}`,\n {\n 'v-infinite-scroll--start': hasStartIntersect,\n 'v-infinite-scroll--end': hasEndIntersect,\n },\n ]}\n style={ dimensionStyles.value }\n >\n <div class=\"v-infinite-scroll__side\">\n { renderSide('start', startStatus.value) }\n </div>\n\n { hasStartIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"start\"\n side=\"start\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n { slots.default?.() }\n\n { hasEndIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"end\"\n side=\"end\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n <div class=\"v-infinite-scroll__side\">\n { renderSide('end', endStatus.value) }\n </div>\n </Tag>\n )\n })\n\n function reset (side?: InfiniteScrollSide) {\n const effectiveSide = side ?? props.side\n setStatus(effectiveSide, 'ok')\n\n nextTick(() => {\n setScrollAmount(\n getScrollSize() - previousScrollSize + getScrollAmount(),\n )\n if (props.mode !== 'manual') {\n nextTick(() => {\n // See #17475\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n if (effectiveSide === 'both') {\n intersecting('start')\n intersecting('end')\n } else {\n intersecting(effectiveSide)\n }\n })\n })\n })\n })\n }\n })\n }\n\n return { reset }\n },\n})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"VInfiniteScroll.js","names":["VBtn","VProgressCircular","makeDimensionProps","useDimension","useIntersectionObserver","useLocale","makeTagProps","computed","nextTick","onMounted","ref","shallowRef","watch","convertToUnit","defineComponent","genericComponent","propsFactory","useRender","makeVInfiniteScrollProps","color","String","direction","type","default","validator","v","includes","side","mode","margin","Number","loadMoreText","emptyText","VInfiniteScrollIntersect","name","props","required","rootMargin","emits","intersect","isIntersecting","setup","_ref","emit","intersectionRef","val","_createElementVNode","_createTextVNode","VInfiniteScroll","load","options","_ref2","slots","rootEl","startStatus","endStatus","setScrollAmount","amount","value","property","getScrollAmount","getScrollSize","getContainerSize","setStatus","status","getStatus","previousScrollSize","handleIntersect","_isIntersecting","intersecting","done","window","requestAnimationFrame","t","renderSide","onClick","slotProps","error","empty","loading","_createVNode","dimensionStyles","Tag","tag","hasStartIntersect","hasEndIntersect","intersectMode","_normalizeClass","_normalizeStyle","reset","effectiveSide"],"sources":["../../../src/components/VInfiniteScroll/VInfiniteScroll.tsx"],"sourcesContent":["// Styles\nimport './VInfiniteScroll.sass'\n\n// Components\nimport { VBtn } from '@/components/VBtn'\nimport { VProgressCircular } from '@/components/VProgressCircular'\n\n// Composables\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useIntersectionObserver } from '@/composables/intersectionObserver'\nimport { useLocale } from '@/composables/locale'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, nextTick, onMounted, ref, shallowRef, watch } from 'vue'\nimport { convertToUnit, defineComponent, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nexport type InfiniteScrollSide = 'start' | 'end' | 'both'\nexport type InfiniteScrollStatus = 'ok' | 'empty' | 'loading' | 'error'\n\ntype InfiniteScrollSlot = {\n side: InfiniteScrollSide\n props: Record<string, any>\n}\n\ntype VInfiniteScrollSlots = {\n default: never\n loading: InfiniteScrollSlot\n error: InfiniteScrollSlot\n empty: InfiniteScrollSlot\n 'load-more': InfiniteScrollSlot\n}\n\nexport const makeVInfiniteScrollProps = propsFactory({\n color: String,\n direction: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n validator: (v: any) => ['vertical', 'horizontal'].includes(v),\n },\n side: {\n type: String as PropType<InfiniteScrollSide>,\n default: 'end',\n validator: (v: any) => ['start', 'end', 'both'].includes(v),\n },\n mode: {\n type: String as PropType<'intersect' | 'manual'>,\n default: 'intersect',\n validator: (v: any) => ['intersect', 'manual'].includes(v),\n },\n margin: [Number, String],\n loadMoreText: {\n type: String,\n default: '$vuetify.infiniteScroll.loadMore',\n },\n emptyText: {\n type: String,\n default: '$vuetify.infiniteScroll.empty',\n },\n\n ...makeDimensionProps(),\n ...makeTagProps(),\n}, 'VInfiniteScroll')\n\nexport const VInfiniteScrollIntersect = defineComponent({\n name: 'VInfiniteScrollIntersect',\n\n props: {\n side: {\n type: String as PropType<InfiniteScrollSide>,\n required: true,\n },\n rootMargin: String,\n },\n\n emits: {\n intersect: (side: InfiniteScrollSide, isIntersecting: boolean) => true,\n },\n\n setup (props, { emit }) {\n const { intersectionRef, isIntersecting } = useIntersectionObserver()\n\n watch(isIntersecting, async val => {\n emit('intersect', props.side, val)\n })\n\n useRender(() => (\n <div\n class=\"v-infinite-scroll-intersect\"\n style={{\n '--v-infinite-margin-size': props.rootMargin,\n }}\n ref={ intersectionRef }\n > </div>\n ))\n\n return {}\n },\n})\n\nexport const VInfiniteScroll = genericComponent<VInfiniteScrollSlots>()({\n name: 'VInfiniteScroll',\n\n props: makeVInfiniteScrollProps(),\n\n emits: {\n load: (options: { side: InfiniteScrollSide, done: (status: InfiniteScrollStatus) => void }) => true,\n },\n\n setup (props, { slots, emit }) {\n const rootEl = ref<HTMLDivElement>()\n const startStatus = shallowRef<InfiniteScrollStatus>('ok')\n const endStatus = shallowRef<InfiniteScrollStatus>('ok')\n const margin = computed(() => convertToUnit(props.margin))\n const isIntersecting = shallowRef(false)\n\n function setScrollAmount (amount: number) {\n if (!rootEl.value) return\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n rootEl.value[property] = amount\n }\n\n function getScrollAmount () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollTop' : 'scrollLeft'\n return rootEl.value[property]\n }\n\n function getScrollSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth'\n return rootEl.value[property]\n }\n\n function getContainerSize () {\n if (!rootEl.value) return 0\n\n const property = props.direction === 'vertical' ? 'clientHeight' : 'clientWidth'\n return rootEl.value[property]\n }\n\n onMounted(() => {\n if (!rootEl.value) return\n\n if (props.side === 'start') {\n setScrollAmount(getScrollSize())\n } else if (props.side === 'both') {\n setScrollAmount(getScrollSize() / 2 - getContainerSize() / 2)\n }\n })\n\n function setStatus (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (side === 'start') {\n startStatus.value = status\n } else if (side === 'end') {\n endStatus.value = status\n } else if (side === 'both') {\n startStatus.value = status\n endStatus.value = status\n }\n }\n\n function getStatus (side: string) {\n return side === 'start' ? startStatus.value : endStatus.value\n }\n\n let previousScrollSize = 0\n function handleIntersect (side: InfiniteScrollSide, _isIntersecting: boolean) {\n isIntersecting.value = _isIntersecting\n if (isIntersecting.value) {\n intersecting(side)\n }\n }\n\n function intersecting (side: InfiniteScrollSide) {\n if (props.mode !== 'manual' && !isIntersecting.value) return\n\n const status = getStatus(side)\n if (!rootEl.value || ['empty', 'loading'].includes(status)) return\n\n previousScrollSize = getScrollSize()\n setStatus(side, 'loading')\n\n function done (status: InfiniteScrollStatus) {\n setStatus(side, status)\n\n nextTick(() => {\n if (status === 'empty' || status === 'error') return\n\n if (status === 'ok' && side === 'start') {\n setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount())\n }\n if (props.mode !== 'manual') {\n nextTick(() => {\n // Browser takes 2 - 3 animation frames to trigger IntersectionObserver after\n // VInfiniteScrollIntersect leaves the viewpoint. So far I couldn't come up\n // with a better solution than using 3 nested window.requestAnimationFrame. (#17475)\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n intersecting(side)\n })\n })\n })\n })\n }\n })\n }\n\n emit('load', { side, done })\n }\n\n const { t } = useLocale()\n\n function renderSide (side: InfiniteScrollSide, status: InfiniteScrollStatus) {\n if (props.side !== side && props.side !== 'both') return\n\n const onClick = () => intersecting(side)\n const slotProps = { side, props: { onClick, color: props.color } }\n\n if (status === 'error') return slots.error?.(slotProps)\n\n if (status === 'empty') return slots.empty?.(slotProps) ?? <div>{ t(props.emptyText) }</div>\n\n if (props.mode === 'manual') {\n if (status === 'loading') {\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n return slots['load-more']?.(slotProps) ?? (\n <VBtn variant=\"outlined\" color={ props.color } onClick={ onClick }>\n { t(props.loadMoreText) }\n </VBtn>\n )\n }\n\n return slots.loading?.(slotProps) ?? (\n <VProgressCircular indeterminate color={ props.color } />\n )\n }\n\n const { dimensionStyles } = useDimension(props)\n\n useRender(() => {\n const Tag = props.tag\n const hasStartIntersect = props.side === 'start' || props.side === 'both'\n const hasEndIntersect = props.side === 'end' || props.side === 'both'\n const intersectMode = props.mode === 'intersect'\n\n return (\n <Tag\n ref={ rootEl }\n class={[\n 'v-infinite-scroll',\n `v-infinite-scroll--${props.direction}`,\n {\n 'v-infinite-scroll--start': hasStartIntersect,\n 'v-infinite-scroll--end': hasEndIntersect,\n },\n ]}\n style={ dimensionStyles.value }\n >\n <div class=\"v-infinite-scroll__side\">\n { renderSide('start', startStatus.value) }\n </div>\n\n { hasStartIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"start\"\n side=\"start\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n { slots.default?.() }\n\n { hasEndIntersect && intersectMode && (\n <VInfiniteScrollIntersect\n key=\"end\"\n side=\"end\"\n onIntersect={ handleIntersect }\n rootMargin={ margin.value }\n />\n )}\n\n <div class=\"v-infinite-scroll__side\">\n { renderSide('end', endStatus.value) }\n </div>\n </Tag>\n )\n })\n\n function reset (side?: InfiniteScrollSide) {\n const effectiveSide = side ?? props.side\n setStatus(effectiveSide, 'ok')\n\n nextTick(() => {\n if (effectiveSide !== 'end') {\n setScrollAmount(\n getScrollSize() - previousScrollSize + getScrollAmount(),\n )\n }\n if (props.mode !== 'manual') {\n nextTick(() => {\n // See #17475\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n window.requestAnimationFrame(() => {\n if (effectiveSide === 'both') {\n intersecting('start')\n intersecting('end')\n } else {\n intersecting(effectiveSide)\n }\n })\n })\n })\n })\n }\n })\n }\n\n return { reset }\n },\n})\n\nexport type VInfiniteScroll = InstanceType<typeof VInfiniteScroll>\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@use '../../styles/settings'
|
|
1
2
|
@use '../../styles/tools'
|
|
2
3
|
@use './variables' as *
|
|
3
4
|
|
|
@@ -21,9 +22,11 @@
|
|
|
21
22
|
width: 100%
|
|
22
23
|
|
|
23
24
|
.v-infinite-scroll-intersect
|
|
25
|
+
overflow: hidden
|
|
24
26
|
pointer-events: none
|
|
25
27
|
margin-top: var(--v-infinite-margin)
|
|
26
28
|
margin-bottom: calc(var(--v-infinite-margin) * -1)
|
|
29
|
+
|
|
27
30
|
&:nth-child(2) // TODO: "1 of &" would be more stable if structure changes
|
|
28
31
|
--v-infinite-margin: var(--v-infinite-margin-size, 1px)
|
|
29
32
|
&:nth-last-child(2)
|
|
@@ -34,3 +37,10 @@
|
|
|
34
37
|
display: flex
|
|
35
38
|
justify-content: center
|
|
36
39
|
padding: $infinite-scroll-side-padding
|
|
40
|
+
transition-property: padding
|
|
41
|
+
transition-duration: settings.$transition-duration-root
|
|
42
|
+
transition-timing-function: settings.$standard-easing
|
|
43
|
+
|
|
44
|
+
&:empty,
|
|
45
|
+
&:has(> div:only-child:empty)
|
|
46
|
+
padding: 0
|