@pinnacle0/web-ui 0.4.10-beta.1 → 0.4.10
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/admin/AdminApp/Navigator.js +12 -10
- package/admin/AdminApp/Navigator.js.map +1 -1
- package/admin/AdminApp/RouteSwitch.js +1 -1
- package/admin/AdminApp/RouteSwitch.js.map +1 -1
- package/core/FlatList/VirtualFlatList/Item.d.ts +11 -0
- package/core/FlatList/VirtualFlatList/Item.js +20 -0
- package/core/FlatList/VirtualFlatList/Item.js.map +1 -0
- package/core/FlatList/VirtualFlatList/index.d.ts +8 -0
- package/core/FlatList/VirtualFlatList/index.js +111 -0
- package/core/FlatList/VirtualFlatList/index.js.map +1 -0
- package/core/FlatList/VirtualFlatList/index.less +22 -0
- package/core/FlatList/VirtualFlatList/type.d.ts +20 -0
- package/core/FlatList/VirtualFlatList/type.js +2 -0
- package/core/FlatList/VirtualFlatList/type.js.map +1 -0
- package/core/FlatList/index.d.ts +1 -3
- package/core/FlatList/index.js +27 -76
- package/core/FlatList/index.js.map +1 -1
- package/core/FlatList/shared/Footer/index.d.ts +8 -0
- package/core/FlatList/shared/Footer/index.js +13 -0
- package/core/FlatList/shared/Footer/index.js.map +1 -0
- package/core/FlatList/{Content → shared}/Footer/index.less +3 -2
- package/core/FlatList/shared/GetRowKey.d.ts +2 -0
- package/core/FlatList/shared/GetRowKey.js +12 -0
- package/core/FlatList/shared/GetRowKey.js.map +1 -0
- package/core/FlatList/{Refresh → shared/Spinner}/index.d.ts +1 -1
- package/core/FlatList/shared/Spinner/index.js +10 -0
- package/core/FlatList/shared/Spinner/index.js.map +1 -0
- package/core/FlatList/shared/Spinner/index.less +13 -0
- package/core/FlatList/shared/Wrapper/Loading.d.ts +8 -0
- package/core/FlatList/shared/Wrapper/Loading.js +7 -0
- package/core/FlatList/shared/Wrapper/Loading.js.map +1 -0
- package/core/FlatList/shared/Wrapper/index.d.ts +14 -0
- package/core/FlatList/shared/Wrapper/index.js +109 -0
- package/core/FlatList/shared/Wrapper/index.js.map +1 -0
- package/core/FlatList/shared/Wrapper/index.less +33 -0
- package/core/FlatList/shared/hooks/useBounceSwipe.d.ts +22 -0
- package/core/FlatList/shared/hooks/useBounceSwipe.js +111 -0
- package/core/FlatList/shared/hooks/useBounceSwipe.js.map +1 -0
- package/core/FlatList/shared/hooks/useElementScrollState.d.ts +8 -0
- package/core/FlatList/shared/hooks/useElementScrollState.js +38 -0
- package/core/FlatList/shared/hooks/useElementScrollState.js.map +1 -0
- package/core/FlatList/shared/hooks/useLoadingWithDelay.d.ts +9 -0
- package/core/FlatList/shared/hooks/useLoadingWithDelay.js +52 -0
- package/core/FlatList/shared/hooks/useLoadingWithDelay.js.map +1 -0
- package/core/FlatList/type.d.ts +37 -69
- package/core/FlatList/type.js +1 -1
- package/core/FlatList/type.js.map +1 -1
- package/core/VirtualList.d.ts +0 -3
- package/core/VirtualList.js +4 -7
- package/core/VirtualList.js.map +1 -1
- package/hooks/useSwipe/controller.js +0 -1
- package/hooks/useSwipe/controller.js.map +1 -1
- package/hooks/useSwipe/type.d.ts +0 -1
- package/hooks/useSwipe/type.js.map +1 -1
- package/package.json +2 -4
- package/core/FlatList/Content/Footer/index.d.ts +0 -10
- package/core/FlatList/Content/Footer/index.js +0 -11
- package/core/FlatList/Content/Footer/index.js.map +0 -1
- package/core/FlatList/Content/index.d.ts +0 -9
- package/core/FlatList/Content/index.js +0 -71
- package/core/FlatList/Content/index.js.map +0 -1
- package/core/FlatList/Loader/index.d.ts +0 -3
- package/core/FlatList/Loader/index.js +0 -9
- package/core/FlatList/Loader/index.js.map +0 -1
- package/core/FlatList/Loader/index.less +0 -39
- package/core/FlatList/Refresh/index.js +0 -8
- package/core/FlatList/Refresh/index.js.map +0 -1
- package/core/FlatList/Refresh/index.less +0 -22
- package/core/FlatList/index.less +0 -38
- package/core/FlatList/useGap.d.ts +0 -2
- package/core/FlatList/useGap.js +0 -12
- package/core/FlatList/useGap.js.map +0 -1
- package/core/FlatList/util.d.ts +0 -8
- package/core/FlatList/util.js +0 -35
- package/core/FlatList/util.js.map +0 -1
- package/internal/polyfill/IntersectionObserver.d.ts +0 -1
- package/internal/polyfill/IntersectionObserver.js +0 -5
- package/internal/polyfill/IntersectionObserver.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { FlatListProps, LoadingType } from "../../type";
|
|
3
|
+
import "./index.less";
|
|
4
|
+
interface Props<T> extends Pick<FlatListProps<T>, "loading" | "bounceEffect" | "onPullUpLoading" | "onPullDownRefresh" | "className" | "style" | "pullDownRefreshMessage" | "pullDownRefreshingMessage"> {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
listWrapperRef: React.RefObject<HTMLDivElement>;
|
|
7
|
+
loadingType: LoadingType;
|
|
8
|
+
onLoadingTypeChange: (type: LoadingType) => void;
|
|
9
|
+
innerClassName?: string;
|
|
10
|
+
innerStyle?: React.CSSProperties;
|
|
11
|
+
onScroll?: (event: React.UIEvent) => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const Wrapper: <T>(props: Props<T>) => JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
13
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
+
if (!m) return o;
|
|
15
|
+
var i = m.call(o), r, ar = [], e;
|
|
16
|
+
try {
|
|
17
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
+
}
|
|
19
|
+
catch (error) { e = { error: error }; }
|
|
20
|
+
finally {
|
|
21
|
+
try {
|
|
22
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
+
}
|
|
24
|
+
finally { if (e) throw e.error; }
|
|
25
|
+
}
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
import React from "react";
|
|
29
|
+
import { classNames } from "../../../../util/ClassNames";
|
|
30
|
+
import { Direction } from "../../../../hooks/useSwipe";
|
|
31
|
+
import { useTransform } from "../../../../hooks/useTransform";
|
|
32
|
+
import { useBounceSwipe } from "../hooks/useBounceSwipe";
|
|
33
|
+
import { useElementScrollState } from "../hooks/useElementScrollState";
|
|
34
|
+
import { PULL_DOWN_REFRESH_THRESHOLD } from "../../type";
|
|
35
|
+
import { Loading } from "./Loading";
|
|
36
|
+
import "./index.less";
|
|
37
|
+
export var Wrapper = function (props) {
|
|
38
|
+
var children = props.children, bounceEffect = props.bounceEffect, listWrapperRef = props.listWrapperRef, loadingType = props.loadingType, onLoadingTypeChange = props.onLoadingTypeChange, _a = props.loading, loading = _a === void 0 ? false : _a, onPullDownRefresh = props.onPullDownRefresh, onPullUpLoading = props.onPullUpLoading, className = props.className, innerClassName = props.innerClassName, style = props.style, innerStyle = props.innerStyle, pullDownRefreshMessage = props.pullDownRefreshMessage, pullDownRefreshingMessage = props.pullDownRefreshingMessage, onScroll = props.onScroll;
|
|
39
|
+
var startOffsetRef = React.useRef(0);
|
|
40
|
+
var animatedRef = React.useRef(null);
|
|
41
|
+
var loadingTypeRef = React.useRef(null);
|
|
42
|
+
loadingTypeRef.current = loadingType;
|
|
43
|
+
var onLoadingTypeChangeRef = React.useRef(onLoadingTypeChange);
|
|
44
|
+
onLoadingTypeChangeRef.current = onLoadingTypeChange;
|
|
45
|
+
var isScrollable = useElementScrollState(listWrapperRef).isScrollable;
|
|
46
|
+
var transform = useTransform(animatedRef);
|
|
47
|
+
var transformRef = React.useRef(transform);
|
|
48
|
+
transformRef.current = transform;
|
|
49
|
+
var reset = React.useCallback(function () {
|
|
50
|
+
startOffsetRef.current = 0;
|
|
51
|
+
}, []);
|
|
52
|
+
var handlers = useBounceSwipe({
|
|
53
|
+
axis: "vertical",
|
|
54
|
+
contentRef: listWrapperRef,
|
|
55
|
+
animatedRef: animatedRef,
|
|
56
|
+
onStart: function (_a) {
|
|
57
|
+
var _b = __read(_a.delta, 2), y = _b[1];
|
|
58
|
+
startOffsetRef.current = y;
|
|
59
|
+
},
|
|
60
|
+
onEnd: function (_a) {
|
|
61
|
+
var delta = _a.delta, direction = _a.direction, boundary = _a.boundary;
|
|
62
|
+
if (loading) {
|
|
63
|
+
if (boundary !== "upper") {
|
|
64
|
+
transform.to({
|
|
65
|
+
y: PULL_DOWN_REFRESH_THRESHOLD,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
if (Math.abs(startOffsetRef.current - delta[1]) >= PULL_DOWN_REFRESH_THRESHOLD) {
|
|
71
|
+
var scrollable = isScrollable("vertical");
|
|
72
|
+
if (boundary === "upper" || (!scrollable && direction === Direction.DOWN)) {
|
|
73
|
+
onLoadingTypeChange("refresh");
|
|
74
|
+
onPullDownRefresh === null || onPullDownRefresh === void 0 ? void 0 : onPullDownRefresh();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
onLoadingTypeChange("loading");
|
|
78
|
+
onPullUpLoading === null || onPullUpLoading === void 0 ? void 0 : onPullUpLoading();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
reset();
|
|
83
|
+
},
|
|
84
|
+
onCancel: reset,
|
|
85
|
+
});
|
|
86
|
+
var handleScroll = React.useCallback(function (e) {
|
|
87
|
+
transformRef.current.clear();
|
|
88
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
|
|
89
|
+
}, [onScroll]);
|
|
90
|
+
React.useEffect(function () {
|
|
91
|
+
if (loading) {
|
|
92
|
+
if (loadingTypeRef.current === "refresh") {
|
|
93
|
+
transformRef.current.to({
|
|
94
|
+
y: PULL_DOWN_REFRESH_THRESHOLD,
|
|
95
|
+
immediate: false,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
transformRef.current.clear();
|
|
101
|
+
onLoadingTypeChangeRef.current(null);
|
|
102
|
+
}
|
|
103
|
+
}, [loading]);
|
|
104
|
+
return (React.createElement("div", __assign({ className: classNames(className, "g-flat-list-wrapper"), style: style }, (bounceEffect ? handlers : {})),
|
|
105
|
+
React.createElement("div", { className: classNames("inner-container", innerClassName), style: innerStyle, ref: animatedRef },
|
|
106
|
+
React.createElement(Loading, { loading: loading && loadingType === "refresh", message: pullDownRefreshMessage, loadingMessage: pullDownRefreshingMessage }),
|
|
107
|
+
React.createElement("div", { className: "list-wrapper", ref: listWrapperRef, onScroll: handleScroll }, children))));
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/FlatList/shared/Wrapper/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
.g-flat-list-wrapper {
|
|
2
|
+
flex: 1;
|
|
3
|
+
overflow: hidden;
|
|
4
|
+
position: relative;
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-flow: column;
|
|
7
|
+
|
|
8
|
+
.inner-container {
|
|
9
|
+
flex: 1;
|
|
10
|
+
transition: all 300ms cubic-bezier(0, 0.61, 0.28, 1.22);
|
|
11
|
+
max-height: 100%;
|
|
12
|
+
will-change: transform;
|
|
13
|
+
|
|
14
|
+
.list-wrapper {
|
|
15
|
+
width: 100%;
|
|
16
|
+
height: 100%;
|
|
17
|
+
overflow: auto;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.g-flat-list-loading {
|
|
22
|
+
width: 100%;
|
|
23
|
+
padding: 8px;
|
|
24
|
+
display: flex;
|
|
25
|
+
justify-content: center;
|
|
26
|
+
align-items: center;
|
|
27
|
+
position: fixed;
|
|
28
|
+
left: 0;
|
|
29
|
+
min-height: 50px;
|
|
30
|
+
will-change: transform;
|
|
31
|
+
transform: translateY(-100%);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { SwipeHookResult, SwipeState } from "../../../../hooks/useSwipe";
|
|
3
|
+
export type Boundary = "upper" | "lower" | null;
|
|
4
|
+
interface BounceSwipeState extends SwipeState {
|
|
5
|
+
boundary: Boundary;
|
|
6
|
+
}
|
|
7
|
+
export type BounceSwipeHandler = (state: BounceSwipeState) => void;
|
|
8
|
+
type BounceSwipeHookResult = SwipeHookResult;
|
|
9
|
+
interface BounceSwipeHandlers {
|
|
10
|
+
onMove?: BounceSwipeHandler;
|
|
11
|
+
onStart?: BounceSwipeHandler;
|
|
12
|
+
onEnd?: BounceSwipeHandler;
|
|
13
|
+
onCancel?: BounceSwipeHandler;
|
|
14
|
+
}
|
|
15
|
+
interface BounceSwipeOption extends BounceSwipeHandlers {
|
|
16
|
+
axis: "vertical" | "horizontal";
|
|
17
|
+
contentRef: React.RefObject<HTMLElement>;
|
|
18
|
+
animatedRef: React.RefObject<HTMLElement>;
|
|
19
|
+
baseOffset?: number;
|
|
20
|
+
}
|
|
21
|
+
export declare const useBounceSwipe: (options: BounceSwipeOption) => BounceSwipeHookResult;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
13
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
+
if (!m) return o;
|
|
15
|
+
var i = m.call(o), r, ar = [], e;
|
|
16
|
+
try {
|
|
17
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
+
}
|
|
19
|
+
catch (error) { e = { error: error }; }
|
|
20
|
+
finally {
|
|
21
|
+
try {
|
|
22
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
+
}
|
|
24
|
+
finally { if (e) throw e.error; }
|
|
25
|
+
}
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
import React from "react";
|
|
29
|
+
import { useElementScrollState } from "./useElementScrollState";
|
|
30
|
+
import { Direction, useSwipe } from "../../../../hooks/useSwipe";
|
|
31
|
+
import { useTransform } from "../../../../hooks/useTransform";
|
|
32
|
+
export var useBounceSwipe = function (options) {
|
|
33
|
+
var contentRef = options.contentRef, animatedRef = options.animatedRef, axis = options.axis, _a = options.baseOffset, baseOffset = _a === void 0 ? 0 : _a, onStart = options.onStart, onMove = options.onMove, onEnd = options.onEnd, onCancel = options.onCancel;
|
|
34
|
+
var _b = __read(React.useState(null), 2), boundary = _b[0], setBoundary = _b[1];
|
|
35
|
+
var transform = useTransform(animatedRef, { duration: 300, timingFunction: "cubic-bezier(0, 0.61, 0.28, 1.22)", property: "transform" });
|
|
36
|
+
var startOffsetRef = React.useRef(0);
|
|
37
|
+
var isX = React.useMemo(function () { return axis === "horizontal"; }, [axis]);
|
|
38
|
+
var isY = React.useMemo(function () { return axis === "vertical"; }, [axis]);
|
|
39
|
+
var _c = useElementScrollState(contentRef), isScrollable = _c.isScrollable, isScrollTop = _c.isScrollTop, isScrollBottom = _c.isScrollBottom, isScrollLeft = _c.isScrollLeft, isScrollRight = _c.isScrollRight;
|
|
40
|
+
var threshold = function (_a) {
|
|
41
|
+
var direction = _a.direction;
|
|
42
|
+
if (isY) {
|
|
43
|
+
return (direction === Direction.DOWN && isScrollTop()) || (direction === Direction.UP && isScrollBottom());
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return (direction === Direction.RIGHT && isScrollLeft()) || (direction === Direction.LEFT && isScrollRight());
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var clearSwipe = function () {
|
|
50
|
+
startOffsetRef.current = 0;
|
|
51
|
+
setBoundary(null);
|
|
52
|
+
};
|
|
53
|
+
React.useEffect(function () {
|
|
54
|
+
// Changing overflow style to fixed laggy bounce swipe in chrome
|
|
55
|
+
if (contentRef.current) {
|
|
56
|
+
if (boundary) {
|
|
57
|
+
contentRef.current.style.overflow = "hidden";
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
contentRef.current.style.overflow = "auto";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}, [boundary, contentRef]);
|
|
64
|
+
var getOffset = function (delta, boundary) {
|
|
65
|
+
var resultOffset = [0, 0];
|
|
66
|
+
var limitedOffset = delta[isX ? 0 : 1] - startOffsetRef.current + baseOffset;
|
|
67
|
+
var computeResultOffset = function (value) { return [isX ? value : 0, isY ? value : 0]; };
|
|
68
|
+
if (boundary === "upper") {
|
|
69
|
+
resultOffset = limitedOffset < 0 ? null : computeResultOffset(limitedOffset);
|
|
70
|
+
}
|
|
71
|
+
else if (boundary === "lower") {
|
|
72
|
+
resultOffset = limitedOffset > 0 ? null : computeResultOffset(limitedOffset);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
resultOffset = computeResultOffset(limitedOffset);
|
|
76
|
+
}
|
|
77
|
+
return resultOffset;
|
|
78
|
+
};
|
|
79
|
+
var handlers = useSwipe({
|
|
80
|
+
onStart: function (state) {
|
|
81
|
+
var _a = __read(state.delta, 2), x = _a[0], y = _a[1], direction = state.direction;
|
|
82
|
+
isScrollable(axis) && setBoundary(direction === Direction.DOWN ? "upper" : "lower");
|
|
83
|
+
startOffsetRef.current = isX ? x : y;
|
|
84
|
+
onStart === null || onStart === void 0 ? void 0 : onStart(__assign(__assign({}, state), { boundary: boundary }));
|
|
85
|
+
},
|
|
86
|
+
onMove: function (state) {
|
|
87
|
+
var delta = state.delta, cancel = state.cancel;
|
|
88
|
+
var offset = getOffset(delta, boundary);
|
|
89
|
+
if (!offset) {
|
|
90
|
+
cancel();
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
var _a = __read(offset, 2), x = _a[0], y = _a[1];
|
|
94
|
+
transform.to({ x: x, y: y, immediate: true });
|
|
95
|
+
onMove === null || onMove === void 0 ? void 0 : onMove(__assign(__assign({}, state), { boundary: boundary }));
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
onEnd: function (state) {
|
|
99
|
+
onEnd === null || onEnd === void 0 ? void 0 : onEnd(__assign(__assign({}, state), { boundary: boundary }));
|
|
100
|
+
transform.clear();
|
|
101
|
+
clearSwipe();
|
|
102
|
+
},
|
|
103
|
+
onCancel: function (state) {
|
|
104
|
+
onCancel === null || onCancel === void 0 ? void 0 : onCancel(__assign(__assign({}, state), { boundary: boundary }));
|
|
105
|
+
transform.clear();
|
|
106
|
+
clearSwipe();
|
|
107
|
+
},
|
|
108
|
+
}, { threshold: threshold });
|
|
109
|
+
return handlers;
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=useBounceSwipe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBounceSwipe.js","sourceRoot":"","sources":["../../../../../src/core/FlatList/shared/hooks/useBounceSwipe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare const useElementScrollState: (ref: React.RefObject<HTMLElement | null>) => {
|
|
3
|
+
isScrollTop: () => boolean;
|
|
4
|
+
isScrollBottom: () => boolean;
|
|
5
|
+
isScrollLeft: () => boolean;
|
|
6
|
+
isScrollRight: () => boolean;
|
|
7
|
+
isScrollable: (direction: "vertical" | "horizontal") => boolean;
|
|
8
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
// need to cache scrollable results
|
|
3
|
+
// only change when window resize, data change, and css change
|
|
4
|
+
export var useElementScrollState = function (ref) {
|
|
5
|
+
var isScrollable = React.useCallback(function (direction) {
|
|
6
|
+
if (ref.current) {
|
|
7
|
+
var element = ref.current;
|
|
8
|
+
return direction === "vertical" ? element.scrollHeight > element.clientHeight : element.scrollWidth > element.clientWidth;
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
}, [ref]);
|
|
14
|
+
var isScrollTop = React.useCallback(function () { var _a; return ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.scrollTop) === 0; }, [ref]);
|
|
15
|
+
var isScrollBottom = React.useCallback(function () {
|
|
16
|
+
var element = ref.current;
|
|
17
|
+
if (element) {
|
|
18
|
+
var scrollHeight = element.scrollHeight, scrollTop = element.scrollTop, clientHeight = element.clientHeight;
|
|
19
|
+
return Math.ceil(scrollTop) + clientHeight >= scrollHeight;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}, [ref]);
|
|
25
|
+
var isScrollLeft = React.useCallback(function () { var _a; return ((_a = ref.current) === null || _a === void 0 ? void 0 : _a.scrollLeft) === 0; }, [ref]);
|
|
26
|
+
var isScrollRight = React.useCallback(function () {
|
|
27
|
+
var element = ref.current;
|
|
28
|
+
if (element) {
|
|
29
|
+
var scrollWidth = element.scrollWidth, scrollLeft = element.scrollLeft, clientWidth = element.clientWidth;
|
|
30
|
+
return Math.ceil(scrollLeft) + clientWidth >= scrollWidth;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}, [ref]);
|
|
36
|
+
return { isScrollTop: isScrollTop, isScrollBottom: isScrollBottom, isScrollLeft: isScrollLeft, isScrollRight: isScrollRight, isScrollable: isScrollable };
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=useElementScrollState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useElementScrollState.js","sourceRoot":"","sources":["../../../../../src/core/FlatList/shared/hooks/useElementScrollState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,mCAAmC;AAEnC,8DAA8D;AAE9D,MAAM,CAAC,IAAM,qBAAqB,GAAG,UAAC,GAAwC;IAC1E,IAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAClC,UAAC,SAAoC;QACjC,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,IAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;SAC7H;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC,EACD,CAAC,GAAG,CAAC,CACR,CAAC;IAEF,IAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,sBAAM,OAAA,CAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,MAAK,CAAC,CAAA,EAAA,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,IAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO,EAAE;YACF,IAAA,YAAY,GAA6B,OAAO,aAApC,EAAE,SAAS,GAAkB,OAAO,UAAzB,EAAE,YAAY,GAAI,OAAO,aAAX,CAAY;YACxD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,YAAY,IAAI,YAAY,CAAC;SAC9D;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,IAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,sBAAM,OAAA,CAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,UAAU,MAAK,CAAC,CAAA,EAAA,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC;QACpC,IAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO,EAAE;YACF,IAAA,WAAW,GAA6B,OAAO,YAApC,EAAE,UAAU,GAAiB,OAAO,WAAxB,EAAE,WAAW,GAAI,OAAO,YAAX,CAAY;YACvD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,IAAI,WAAW,CAAC;SAC7D;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEV,OAAO,EAAC,WAAW,aAAA,EAAE,cAAc,gBAAA,EAAE,YAAY,cAAA,EAAE,aAAa,eAAA,EAAE,YAAY,cAAA,EAAC,CAAC;AACpF,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This hook prevent loading state causing ui to flash
|
|
3
|
+
* For instance, in real life loading only last for 50ms, so it make loading ui appear in a blink of an eye, which is not good
|
|
4
|
+
* Hook will only delay the loading state change from true to false, it force loading ui at least appear for a period of time
|
|
5
|
+
* @param loading
|
|
6
|
+
* @param delay
|
|
7
|
+
* @returns
|
|
8
|
+
*/
|
|
9
|
+
export declare const useLoadingWithDelay: (loading: boolean, delay: number) => Readonly<boolean>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
+
if (!m) return o;
|
|
4
|
+
var i = m.call(o), r, ar = [], e;
|
|
5
|
+
try {
|
|
6
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
+
}
|
|
8
|
+
catch (error) { e = { error: error }; }
|
|
9
|
+
finally {
|
|
10
|
+
try {
|
|
11
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
+
}
|
|
13
|
+
finally { if (e) throw e.error; }
|
|
14
|
+
}
|
|
15
|
+
return ar;
|
|
16
|
+
};
|
|
17
|
+
import React from "react";
|
|
18
|
+
/**
|
|
19
|
+
* This hook prevent loading state causing ui to flash
|
|
20
|
+
* For instance, in real life loading only last for 50ms, so it make loading ui appear in a blink of an eye, which is not good
|
|
21
|
+
* Hook will only delay the loading state change from true to false, it force loading ui at least appear for a period of time
|
|
22
|
+
* @param loading
|
|
23
|
+
* @param delay
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
26
|
+
export var useLoadingWithDelay = function (loading, delay) {
|
|
27
|
+
var _a = __read(React.useState(loading), 2), loadingWithDelay = _a[0], setLoadingWithDelay = _a[1];
|
|
28
|
+
var startTimeRef = React.useRef(null);
|
|
29
|
+
var setLoadingRef = React.useRef();
|
|
30
|
+
var setLoading = React.useCallback(function (value) {
|
|
31
|
+
if (value) {
|
|
32
|
+
setLoadingWithDelay(true);
|
|
33
|
+
startTimeRef.current = Date.now();
|
|
34
|
+
setTimeout(function () { return (startTimeRef.current = null); }, delay);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
if (startTimeRef.current) {
|
|
38
|
+
setTimeout(function () { return setLoadingWithDelay(false); }, Math.abs(delay - (Date.now() - startTimeRef.current)));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
setLoadingWithDelay(value);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}, [delay]);
|
|
45
|
+
setLoadingRef.current = setLoading;
|
|
46
|
+
React.useEffect(function () {
|
|
47
|
+
var _a;
|
|
48
|
+
(_a = setLoadingRef.current) === null || _a === void 0 ? void 0 : _a.call(setLoadingRef, loading);
|
|
49
|
+
}, [loading]);
|
|
50
|
+
return loadingWithDelay;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=useLoadingWithDelay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoadingWithDelay.js","sourceRoot":"","sources":["../../../../../src/core/FlatList/shared/hooks/useLoadingWithDelay.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,OAAgB,EAAE,KAAa;IACzD,IAAA,KAAA,OAA0C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAA,EAAhE,gBAAgB,QAAA,EAAE,mBAAmB,QAA2B,CAAC;IACxE,IAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IACvD,IAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAA4B,CAAC;IAE/D,IAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAChC,UAAC,KAAc;QACX,IAAI,KAAK,EAAE;YACP,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1B,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,UAAU,CAAC,cAAM,OAAA,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,EAA7B,CAA6B,EAAE,KAAK,CAAC,CAAC;SAC1D;aAAM;YACH,IAAI,YAAY,CAAC,OAAO,EAAE;gBACtB,UAAU,CAAC,cAAM,OAAA,mBAAmB,CAAC,KAAK,CAAC,EAA1B,CAA0B,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACvG;iBAAM;gBACH,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC9B;SACJ;IACL,CAAC,EACD,CAAC,KAAK,CAAC,CACV,CAAC;IAEF,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;IAEnC,KAAK,CAAC,SAAS,CAAC;;QACZ,MAAA,aAAa,CAAC,OAAO,8DAAG,OAAO,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,gBAAgB,CAAC;AAC5B,CAAC,CAAC"}
|
package/core/FlatList/type.d.ts
CHANGED
|
@@ -1,80 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export type
|
|
4
|
-
top?: number;
|
|
5
|
-
bottom?: number;
|
|
6
|
-
left?: number;
|
|
7
|
-
right?: number;
|
|
8
|
-
};
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare const PULL_DOWN_REFRESH_THRESHOLD = 50;
|
|
3
|
+
export type LoadingType = "refresh" | "loading" | null;
|
|
9
4
|
export interface FlatListItemProps<T> {
|
|
10
5
|
data: T;
|
|
11
6
|
index: number;
|
|
12
7
|
}
|
|
8
|
+
export type Gap = {
|
|
9
|
+
top?: number;
|
|
10
|
+
bottom?: number;
|
|
11
|
+
left?: number;
|
|
12
|
+
right?: number;
|
|
13
|
+
} | number;
|
|
14
|
+
export type ItemRenderer<T> = React.FunctionComponent<FlatListItemProps<T>>;
|
|
15
|
+
export type RowKey<T> = (keyof T & string) | ((data: T, index: number) => string) | "index";
|
|
13
16
|
export interface FlatListProps<T> {
|
|
14
|
-
/**
|
|
15
|
-
* List of data to show in the list
|
|
16
|
-
*/
|
|
17
17
|
data: T[];
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*/
|
|
21
|
-
rowKey: keyof T | "index";
|
|
22
|
-
/**
|
|
23
|
-
* A component render for each item
|
|
24
|
-
*/
|
|
25
|
-
renderItem: React.ComponentType<FlatListItemProps<T>>;
|
|
26
|
-
/**
|
|
27
|
-
* Set this to true when waiting for new data by pull down refresh
|
|
28
|
-
*/
|
|
29
|
-
refreshing?: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Set this to true when waiting for new data by pull down refresh
|
|
32
|
-
*/
|
|
18
|
+
renderItem: ItemRenderer<T>;
|
|
19
|
+
rowKey: RowKey<T>;
|
|
33
20
|
loading?: boolean;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
onPullDownRefresh?: () => void;
|
|
38
|
-
/**
|
|
39
|
-
* If Provided, `Footer` component will be loaded into the FlatList, you can also specify your own Refresh component using `footer` props
|
|
40
|
-
*/
|
|
21
|
+
className?: string;
|
|
22
|
+
style?: React.CSSProperties;
|
|
23
|
+
/** When either onPullUpLoading or onPullDownRefresh is given, loading must be given too */
|
|
41
24
|
onPullUpLoading?: () => void;
|
|
42
|
-
|
|
43
|
-
* If Provided, Element will be shown when `data` is a empty array
|
|
44
|
-
*/
|
|
25
|
+
onPullDownRefresh?: () => void;
|
|
45
26
|
emptyPlaceholder?: string | React.ReactElement;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Footer?: React.ComponentType<{
|
|
50
|
-
loading: boolean;
|
|
51
|
-
}>;
|
|
52
|
-
/**
|
|
53
|
-
* `refresh` component will be shown when `refreshing` is equal `true`
|
|
54
|
-
* if Provided, default `Refresh` component will be replaced
|
|
55
|
-
*/
|
|
56
|
-
Refresh?: React.ComponentType<{
|
|
57
|
-
loading: boolean;
|
|
58
|
-
}>;
|
|
59
|
-
/**
|
|
60
|
-
* `pullUpMessage` will be show in `Refresh` only if `onPullDownRefresh` is defined
|
|
61
|
-
* if Provided, this message will replace the pull down message in default `Refresh`
|
|
62
|
-
* if `Refresh` is provided, this props will be ignored
|
|
63
|
-
*/
|
|
64
|
-
pullDownMessage?: string;
|
|
65
|
-
/**
|
|
66
|
-
* `pullUpMessage` will be show in `Footer` only if `onPullUpLoading` is defined
|
|
67
|
-
* if Provided, this message will replace end of list message in default `Footer`
|
|
68
|
-
* if `Footer` is provided, this props will be ignored
|
|
69
|
-
*/
|
|
70
|
-
pullUpMessage?: string;
|
|
71
|
-
/**
|
|
72
|
-
* if Provided, this message will replace end of list message in default `Footer`
|
|
73
|
-
* if `Footer` is provided, this props will be ignored
|
|
74
|
-
*/
|
|
75
|
-
endOfListMessage?: string;
|
|
76
|
-
/**
|
|
77
|
-
* Set margin for each item
|
|
78
|
-
*/
|
|
27
|
+
contentStyle?: React.CSSProperties;
|
|
28
|
+
bounceEffect?: boolean;
|
|
29
|
+
hideFooter?: boolean;
|
|
79
30
|
gap?: Gap;
|
|
31
|
+
pullDownRefreshMessage?: React.ReactElement | string;
|
|
32
|
+
pullDownRefreshingMessage?: React.ReactElement | string;
|
|
33
|
+
pullUpLoadMoreMessage?: React.ReactElement | string;
|
|
34
|
+
pullUpLoadingMessage?: React.ReactElement | string;
|
|
35
|
+
endOfListMessage?: React.ReactElement | string;
|
|
36
|
+
}
|
|
37
|
+
export interface FlatListItemProps<T> {
|
|
38
|
+
data: T;
|
|
39
|
+
index: number;
|
|
40
|
+
}
|
|
41
|
+
export interface FooterData {
|
|
42
|
+
__markedAsFooterData: true;
|
|
43
|
+
loading: boolean;
|
|
44
|
+
ended: boolean;
|
|
45
|
+
loadMoreMessage?: React.ReactElement | string;
|
|
46
|
+
loadingMessage?: React.ReactElement | string;
|
|
47
|
+
endMessage?: React.ReactElement | string;
|
|
80
48
|
}
|
package/core/FlatList/type.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export var PULL_DOWN_REFRESH_THRESHOLD = 50;
|
|
2
2
|
//# sourceMappingURL=type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/core/FlatList/type.
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/core/FlatList/type.tsx"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,2BAA2B,GAAG,EAAE,CAAC"}
|
package/core/VirtualList.d.ts
CHANGED
|
@@ -21,8 +21,5 @@ export interface Props<T extends object> {
|
|
|
21
21
|
observeElementRect?: VirtualizerOptions<HTMLElement, HTMLElement>["observeElementRect"];
|
|
22
22
|
observeElementOffset?: VirtualizerOptions<HTMLElement, HTMLElement>["observeElementOffset"];
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Efficiently rendering large lists and tabular data
|
|
26
|
-
*/
|
|
27
24
|
export declare function VirtualList<T extends object>({ data, rowKey, direction, renderData, overscan, initialRect, observeElementOffset, fixedSize, observeElementRect, }: Props<T>): JSX.Element;
|
|
28
25
|
export {};
|
package/core/VirtualList.js
CHANGED
|
@@ -13,9 +13,6 @@ import "../internal/polyfill/ResizeObserver";
|
|
|
13
13
|
import React from "react";
|
|
14
14
|
import { useVirtualizer, observeElementOffset as defaultObserveElementOffset, observeElementRect as defaultObserveElementRect } from "@tanstack/react-virtual";
|
|
15
15
|
var DEFAULT_ITEM_SIZE = 100;
|
|
16
|
-
/**
|
|
17
|
-
* Efficiently rendering large lists and tabular data
|
|
18
|
-
*/
|
|
19
16
|
export function VirtualList(_a) {
|
|
20
17
|
var data = _a.data, _b = _a.rowKey, rowKey = _b === void 0 ? "index" : _b, _c = _a.direction, direction = _c === void 0 ? "vertical" : _c, renderData = _a.renderData, _d = _a.overscan, overscan = _d === void 0 ? 5 : _d, _e = _a.initialRect, initialRect = _e === void 0 ? { width: 0, height: 0 } : _e, observeElementOffset = _a.observeElementOffset, fixedSize = _a.fixedSize, observeElementRect = _a.observeElementRect;
|
|
21
18
|
var Item = renderData;
|
|
@@ -35,13 +32,13 @@ export function VirtualList(_a) {
|
|
|
35
32
|
var virtualizerRef = React.useRef(virtualizer);
|
|
36
33
|
virtualizerRef.current = virtualizer;
|
|
37
34
|
var getItemKey = function (index) { return (rowKey === "index" ? index : data[index][rowKey]); };
|
|
38
|
-
return (React.createElement("div", { className: "g-virtual-list", ref: parentRef, style: {
|
|
35
|
+
return (React.createElement("div", { className: "g-virtual-list", ref: parentRef, style: { width: "100%", height: "100%", overflow: "auto" } },
|
|
39
36
|
React.createElement("div", { className: "g-virtual-list-inner", style: {
|
|
40
|
-
position: "relative",
|
|
41
37
|
height: horizontal ? "100%" : virtualizer.getTotalSize(),
|
|
42
38
|
width: horizontal ? virtualizer.getTotalSize() : "100%",
|
|
43
|
-
|
|
44
|
-
React.createElement("div", { className: "g-virtual-list-item
|
|
39
|
+
position: "relative",
|
|
40
|
+
} }, virtualizer.getVirtualItems().map(function (virtualRow) { return (React.createElement("div", { className: "g-virtual-list-item", key: getItemKey(virtualRow.index), style: __assign({ position: "absolute", top: 0, left: 0, transform: horizontal ? "translateX(".concat(virtualRow.start, "px)") : "translateY(".concat(virtualRow.start, "px)") }, sizeStyle) },
|
|
41
|
+
React.createElement("div", { className: "g-virtual-list-item-wrapper", "data-index": virtualRow.index, ref: virtualizer.measureElement, style: __assign({}, sizeStyle) },
|
|
45
42
|
React.createElement(Item, { data: data[virtualRow.index], index: virtualRow.index })))); }))));
|
|
46
43
|
}
|
|
47
44
|
//# sourceMappingURL=VirtualList.js.map
|
package/core/VirtualList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualList.js","sourceRoot":"","sources":["../../src/core/VirtualList.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,qCAAqC,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,cAAc,EAAE,oBAAoB,IAAI,2BAA2B,EAAE,kBAAkB,IAAI,yBAAyB,EAAC,MAAM,yBAAyB,CAAC;AAK7J,IAAM,iBAAiB,GAAG,GAAG,CAAC;AAqB9B
|
|
1
|
+
{"version":3,"file":"VirtualList.js","sourceRoot":"","sources":["../../src/core/VirtualList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,6 @@ var Controller = /** @class */ (function () {
|
|
|
10
10
|
this.config = {};
|
|
11
11
|
}
|
|
12
12
|
Controller.prototype.onTouchStart = function (e) {
|
|
13
|
-
this.config.stopPropagation && e.stopPropagation();
|
|
14
13
|
if (e.changedTouches[0] && !this.startTouch) {
|
|
15
14
|
this.startTouch = e.changedTouches[0];
|
|
16
15
|
this.startTime = Date.now();
|