@pinnacle0/web-ui 0.3.1 → 0.3.3-beta0

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.
Files changed (41) hide show
  1. package/core/VirtualizedFlatList/CellMeasurer.d.ts +17 -0
  2. package/core/VirtualizedFlatList/CellMeasurer.js +36 -0
  3. package/core/VirtualizedFlatList/CellMeasurer.js.map +1 -0
  4. package/core/VirtualizedFlatList/CellMeasurerCache.d.ts +16 -0
  5. package/core/VirtualizedFlatList/CellMeasurerCache.js +31 -0
  6. package/core/VirtualizedFlatList/CellMeasurerCache.js.map +1 -0
  7. package/core/VirtualizedFlatList/Footer.d.ts +8 -0
  8. package/core/VirtualizedFlatList/Footer.js +27 -0
  9. package/core/VirtualizedFlatList/Footer.js.map +1 -0
  10. package/core/VirtualizedFlatList/ListItem.d.ts +4 -0
  11. package/core/VirtualizedFlatList/ListItem.js +43 -0
  12. package/core/VirtualizedFlatList/ListItem.js.map +1 -0
  13. package/core/VirtualizedFlatList/Loading.d.ts +7 -0
  14. package/core/VirtualizedFlatList/Loading.js +9 -0
  15. package/core/VirtualizedFlatList/Loading.js.map +1 -0
  16. package/core/VirtualizedFlatList/index.d.ts +29 -0
  17. package/core/VirtualizedFlatList/index.js +182 -0
  18. package/core/VirtualizedFlatList/index.js.map +1 -0
  19. package/core/VirtualizedFlatList/index.less +59 -0
  20. package/core/VirtualizedFlatList/type.d.ts +29 -0
  21. package/core/VirtualizedFlatList/type.js +2 -0
  22. package/core/VirtualizedFlatList/type.js.map +1 -0
  23. package/core/VirtualizedFlatList/useLoadingWithDelay.d.ts +1 -0
  24. package/core/VirtualizedFlatList/useLoadingWithDelay.js +51 -0
  25. package/core/VirtualizedFlatList/useLoadingWithDelay.js.map +1 -0
  26. package/hooks/useSwipe/controller.d.ts +20 -0
  27. package/hooks/useSwipe/controller.js +126 -0
  28. package/hooks/useSwipe/controller.js.map +1 -0
  29. package/hooks/useSwipe/index.d.ts +3 -0
  30. package/hooks/useSwipe/index.js +9 -0
  31. package/hooks/useSwipe/index.js.map +1 -0
  32. package/hooks/useSwipe/type.d.ts +38 -0
  33. package/hooks/useSwipe/type.js +8 -0
  34. package/hooks/useSwipe/type.js.map +1 -0
  35. package/hooks/useTransform.d.ts +18 -0
  36. package/hooks/useTransform.js +50 -0
  37. package/hooks/useTransform.js.map +1 -0
  38. package/package.json +10 -4
  39. package/util/SwipeUtil.d.ts +8 -0
  40. package/util/SwipeUtil.js +26 -0
  41. package/util/SwipeUtil.js.map +1 -0
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ import type { VariableSizeList } from "react-window";
3
+ import type { CellMeasurerCache } from "./CellMeasurerCache";
4
+ import type { Measure } from "./type";
5
+ export declare type RegisterChild = (instance: HTMLElement | null) => void;
6
+ export interface CellMeasurerChildProps {
7
+ registerChild: RegisterChild;
8
+ measure: Measure;
9
+ }
10
+ interface Props {
11
+ rowIndex: number;
12
+ cache: CellMeasurerCache;
13
+ children: React.FunctionComponent<CellMeasurerChildProps>;
14
+ parent: React.RefObject<VariableSizeList>;
15
+ }
16
+ export declare function CellMeasurer(props: Props): React.ReactElement<any, any> | null;
17
+ export {};
@@ -0,0 +1,36 @@
1
+ import React from "react";
2
+ export function CellMeasurer(props) {
3
+ var cache = props.cache, rowIndex = props.rowIndex, children = props.children, parent = props.parent;
4
+ var childRef = React.useRef();
5
+ var calculateSize = React.useCallback(function (node) {
6
+ var originalStyleHeight = node.style.height;
7
+ node.style.height = "auto";
8
+ var height = node.getBoundingClientRect().height;
9
+ node.style.height = originalStyleHeight;
10
+ return height;
11
+ }, []);
12
+ var measure = React.useCallback(function () {
13
+ var _a;
14
+ if (childRef.current) {
15
+ var height = calculateSize(childRef.current);
16
+ cache.set(height, rowIndex);
17
+ (_a = parent.current) === null || _a === void 0 ? void 0 : _a.resetAfterIndex(rowIndex);
18
+ }
19
+ }, [cache, parent, calculateSize, rowIndex]);
20
+ var registerChild = function (node) {
21
+ var _a;
22
+ if (node) {
23
+ childRef.current = node;
24
+ var height = calculateSize(node);
25
+ if (!cache.has(rowIndex)) {
26
+ cache.set(height, rowIndex);
27
+ (_a = parent.current) === null || _a === void 0 ? void 0 : _a.resetAfterIndex(rowIndex);
28
+ }
29
+ }
30
+ else {
31
+ childRef.current = null;
32
+ }
33
+ };
34
+ return children({ registerChild: registerChild, measure: measure });
35
+ }
36
+ //# sourceMappingURL=CellMeasurer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellMeasurer.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/CellMeasurer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAmB1B,MAAM,UAAU,YAAY,CAAC,KAAY;IAC9B,IAAA,KAAK,GAAgC,KAAK,MAArC,EAAE,QAAQ,GAAsB,KAAK,SAA3B,EAAE,QAAQ,GAAY,KAAK,SAAjB,EAAE,MAAM,GAAI,KAAK,OAAT,CAAU;IAClD,IAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAsB,CAAC;IAEpD,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,UAAC,IAAiB;QACtD,IAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACpB,IAAA,MAAM,GAAI,IAAI,CAAC,qBAAqB,EAAE,OAAhC,CAAiC;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC;QACxC,OAAO,MAAM,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,OAAO,GAAY,KAAK,CAAC,WAAW,CAAC;;QACvC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAClB,IAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/C,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5B,MAAA,MAAM,CAAC,OAAO,0CAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;SAC7C;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7C,IAAM,aAAa,GAAG,UAAC,IAAwB;;QAC3C,IAAI,IAAI,EAAE;YACN,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,IAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACtB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC5B,MAAA,MAAM,CAAC,OAAO,0CAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;aAC7C;SACJ;aAAM;YACH,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;SAC3B;IACL,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC,EAAC,aAAa,eAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,16 @@
1
+ interface CellMeasurerCacheOptions {
2
+ defaultHeight: number;
3
+ }
4
+ export declare class CellMeasurerCache {
5
+ private cellHeightCache;
6
+ private defaultHeight;
7
+ constructor(options: CellMeasurerCacheOptions);
8
+ private createCacheKey;
9
+ clearAll(): void;
10
+ has(index: number): boolean;
11
+ set(height: number, index: number): void;
12
+ clear(index: number): void;
13
+ getKey(index: number): string;
14
+ itemSize(index: number): number;
15
+ }
16
+ export {};
@@ -0,0 +1,31 @@
1
+ var CellMeasurerCache = /** @class */ (function () {
2
+ function CellMeasurerCache(options) {
3
+ this.defaultHeight = options.defaultHeight;
4
+ this.cellHeightCache = {};
5
+ }
6
+ CellMeasurerCache.prototype.createCacheKey = function (index) {
7
+ return "key-".concat(index);
8
+ };
9
+ CellMeasurerCache.prototype.clearAll = function () {
10
+ this.cellHeightCache = {};
11
+ };
12
+ CellMeasurerCache.prototype.has = function (index) {
13
+ return this.cellHeightCache[this.createCacheKey(index)] !== undefined;
14
+ };
15
+ CellMeasurerCache.prototype.set = function (height, index) {
16
+ this.cellHeightCache[this.createCacheKey(index)] = height;
17
+ };
18
+ CellMeasurerCache.prototype.clear = function (index) {
19
+ delete this.cellHeightCache[this.createCacheKey(index)];
20
+ };
21
+ CellMeasurerCache.prototype.getKey = function (index) {
22
+ return this.createCacheKey(index);
23
+ };
24
+ CellMeasurerCache.prototype.itemSize = function (index) {
25
+ var cachedHeight = this.cellHeightCache[this.createCacheKey(index)];
26
+ return cachedHeight !== null && cachedHeight !== void 0 ? cachedHeight : this.defaultHeight;
27
+ };
28
+ return CellMeasurerCache;
29
+ }());
30
+ export { CellMeasurerCache };
31
+ //# sourceMappingURL=CellMeasurerCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellMeasurerCache.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/CellMeasurerCache.ts"],"names":[],"mappings":"AAIA;IAII,2BAAY,OAAiC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,0CAAc,GAAtB,UAAuB,KAAa;QAChC,OAAO,cAAO,KAAK,CAAE,CAAC;IAC1B,CAAC;IAED,oCAAQ,GAAR;QACI,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,+BAAG,GAAH,UAAI,KAAa;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC;IAC1E,CAAC;IAED,+BAAG,GAAH,UAAI,MAAc,EAAE,KAAa;QAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;IAC9D,CAAC;IAED,iCAAK,GAAL,UAAM,KAAa;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,kCAAM,GAAN,UAAO,KAAa;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,oCAAQ,GAAR,UAAS,KAAa;QAClB,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,CAAC,aAAa,CAAC;IAC9C,CAAC;IACL,wBAAC;AAAD,CAAC,AArCD,IAqCC"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { FooterData, Measure } from "./type";
3
+ interface Props extends FooterData {
4
+ style: React.CSSProperties;
5
+ measure: Measure;
6
+ }
7
+ export declare const Footer: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
8
+ export {};
@@ -0,0 +1,27 @@
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
+ import React from "react";
13
+ import { Spin } from "../Spin";
14
+ export var Footer = React.forwardRef(function (props, ref) {
15
+ var loading = props.loading, ended = props.ended, loadingMessage = props.loadingMessage, endMessage = props.endMessage, style = props.style, measure = props.measure;
16
+ var measureRef = React.useRef(measure);
17
+ measureRef.current = measure;
18
+ React.useEffect(function () {
19
+ measureRef.current();
20
+ }, [loading, loadingMessage, endMessage, ended]);
21
+ return (React.createElement("div", { style: __assign({}, style), ref: ref, className: "g-flat-list-footer" },
22
+ loading && (React.createElement("div", null,
23
+ React.createElement(Spin, { spinning: true, size: "small" }),
24
+ React.createElement("div", null, loadingMessage !== null && loadingMessage !== void 0 ? loadingMessage : "loading..."))),
25
+ ended && !loading && (endMessage !== null && endMessage !== void 0 ? endMessage : "All data loaded")));
26
+ });
27
+ //# sourceMappingURL=Footer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/Footer.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAQ7B,MAAM,CAAC,IAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAwB,UAAC,KAAK,EAAE,GAAG;IAC9D,IAAA,OAAO,GAAuD,KAAK,QAA5D,EAAE,KAAK,GAAgD,KAAK,MAArD,EAAE,cAAc,GAAgC,KAAK,eAArC,EAAE,UAAU,GAAoB,KAAK,WAAzB,EAAE,KAAK,GAAa,KAAK,MAAlB,EAAE,OAAO,GAAI,KAAK,QAAT,CAAU;IAC3E,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,KAAK,CAAC,SAAS,CAAC;QACZ,UAAU,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjD,OAAO,CACH,6BAAK,KAAK,eAAM,KAAK,GAAG,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,oBAAoB;QAC3D,OAAO,IAAI,CACR;YACI,oBAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,OAAO,GAAG;YAC9B,iCAAM,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,YAAY,CAAO,CACzC,CACT;QACA,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,iBAAiB,CAAC,CACrD,CACT,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ /// <reference types="react" />
2
+ import type { ListItemData } from "./type";
3
+ import type { ListChildComponentProps } from "react-window";
4
+ export declare const ListItem: <T>(props: ListChildComponentProps<ListItemData<T>>) => JSX.Element;
@@ -0,0 +1,43 @@
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
+ import React from "react";
13
+ import { CellMeasurer } from "./CellMeasurer";
14
+ import { Footer } from "./Footer";
15
+ var ItemRendererWrapper = React.forwardRef(function (props, ref) {
16
+ var style = props.style, data = props.data, index = props.index, measure = props.measure, Item = props.itemRenderer;
17
+ var measureRef = React.useRef(measure);
18
+ measureRef.current = measure;
19
+ React.useEffect(function () {
20
+ measureRef.current();
21
+ }, [data]);
22
+ return (React.createElement("div", { style: style, ref: ref, className: "g-flat-list-item-wrapper" },
23
+ React.createElement(Item, { data: data, index: index, measure: measure })));
24
+ });
25
+ export var ListItem = function (props) {
26
+ var data = props.data, index = props.index, style = props.style;
27
+ var cache = data.cache, parent = data.parent, rawData = data.data, itemRenderer = data.itemRenderer, gap = data.gap;
28
+ var padding = React.useMemo(function () {
29
+ return gap ? { paddingLeft: gap.left, paddingRight: gap.right, paddingBottom: gap.bottom, paddingTop: gap.top } : {};
30
+ }, [gap]);
31
+ return (React.createElement(CellMeasurer, { cache: cache, rowIndex: index, parent: parent }, function (_a) {
32
+ var registerChild = _a.registerChild, measure = _a.measure;
33
+ var data = rawData[index];
34
+ if (index === rawData.length - 1) {
35
+ var _b = data, loading = _b.loading, loadingMessage = _b.loadingMessage, endMessage = _b.endMessage, ended = _b.ended;
36
+ return React.createElement(Footer, { ref: registerChild, loading: loading, ended: ended, loadingMessage: loadingMessage, endMessage: endMessage, style: style, measure: measure });
37
+ }
38
+ else {
39
+ return (React.createElement(ItemRendererWrapper, { ref: registerChild, style: __assign(__assign({}, style), padding), data: rawData[index], index: index, itemRenderer: itemRenderer, measure: measure }));
40
+ }
41
+ }));
42
+ };
43
+ //# sourceMappingURL=ListItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/ListItem.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="react" />
2
+ interface Props {
3
+ loading: boolean;
4
+ message?: string;
5
+ }
6
+ export declare const Loading: (props: Props) => JSX.Element;
7
+ export {};
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { Spin } from "../Spin";
3
+ export var Loading = function (props) {
4
+ var loading = props.loading, message = props.message;
5
+ return (React.createElement("div", { className: "g-flat-list-loading" },
6
+ React.createElement("div", null,
7
+ React.createElement(Spin, { spinning: loading, size: "small" }), message !== null && message !== void 0 ? message : "Release to refresh")));
8
+ };
9
+ //# sourceMappingURL=Loading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAO7B,MAAM,CAAC,IAAM,OAAO,GAAG,UAAC,KAAY;IACzB,IAAA,OAAO,GAAa,KAAK,QAAlB,EAAE,OAAO,GAAI,KAAK,QAAT,CAAU;IAEjC,OAAO,CACH,6BAAK,SAAS,EAAC,qBAAqB;QAChC;YACI,oBAAC,IAAI,IAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,OAAO,GAAG,EACvC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,oBAAoB,CAC9B,CACJ,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import React from "react";
2
+ import type { ItemRenderer } from "./type";
3
+ import "./index.less";
4
+ export interface Props<T> {
5
+ data: T[];
6
+ renderItem: ItemRenderer<T>;
7
+ loading?: boolean;
8
+ className?: string;
9
+ style?: React.CSSProperties;
10
+ onPullUpLoading?: () => void;
11
+ onPullDownRefresh?: () => void;
12
+ autoLoad?: boolean | number;
13
+ emptyPlaceholder?: string | React.ReactElement;
14
+ contentStyle?: React.CSSProperties;
15
+ gap?: {
16
+ top?: number;
17
+ bottom?: number;
18
+ left?: number;
19
+ right?: number;
20
+ };
21
+ bounceEffect?: boolean;
22
+ pullUpLoadingMessage?: string;
23
+ endOfListMessage?: string;
24
+ pullDownRefreshMessage?: string;
25
+ }
26
+ /**
27
+ * VirtualizedFlatList currently only work with item without and size related animation and transition since it break the layout. This will be improve in the future
28
+ */
29
+ export declare function VirtualizedFlatList<T>(props: Props<T>): JSX.Element;
@@ -0,0 +1,182 @@
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
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
29
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
30
+ if (ar || !(i in from)) {
31
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
32
+ ar[i] = from[i];
33
+ }
34
+ }
35
+ return to.concat(ar || Array.prototype.slice.call(from));
36
+ };
37
+ import React from "react";
38
+ import { VariableSizeList } from "react-window";
39
+ import AutoSizer from "react-virtualized-auto-sizer";
40
+ import { Direction, useSwipe } from "../../hooks/useSwipe";
41
+ import { useTransform } from "../../hooks/useTransform";
42
+ import { useLoadingWithDelay } from "./useLoadingWithDelay";
43
+ import { ListItem } from "./ListItem";
44
+ import { Loading } from "./Loading";
45
+ import { CellMeasurerCache } from "./CellMeasurerCache";
46
+ import "./index.less";
47
+ var LOADING_THRESHOLD = 50;
48
+ /**
49
+ * VirtualizedFlatList currently only work with item without and size related animation and transition since it break the layout. This will be improve in the future
50
+ */
51
+ export function VirtualizedFlatList(props) {
52
+ var data = props.data, renderItem = props.renderItem, _a = props.loading, loading = _a === void 0 ? false : _a, className = props.className, style = props.style, onPullDownRefresh = props.onPullDownRefresh, onPullUpLoading = props.onPullUpLoading, emptyPlaceholder = props.emptyPlaceholder, contentStyle = props.contentStyle, gap = props.gap, _b = props.autoLoad, autoLoad = _b === void 0 ? true : _b, _c = props.bounceEffect, bounceEffect = _c === void 0 ? true : _c, pullUpLoadingMessage = props.pullUpLoadingMessage, endOfListMessage = props.endOfListMessage, pullDownRefreshMessage = props.pullDownRefreshMessage;
53
+ var _d = __read(React.useState(null), 2), outBounded = _d[0], setOutBounded = _d[1];
54
+ var _e = __read(React.useState(null), 2), loadingType = _e[0], setLoadingType = _e[1];
55
+ var listRef = React.useRef(null);
56
+ var outerRef = React.useRef(null);
57
+ var innerContainerRef = React.useRef(null);
58
+ var startOffsetRef = React.useRef(0);
59
+ var loadingTypeRef = React.useRef(null);
60
+ loadingTypeRef.current = loadingType;
61
+ var transit = useTransform(innerContainerRef);
62
+ var loadingWithDelay = useLoadingWithDelay(loading, 300);
63
+ var cache = React.useMemo(function () { return new CellMeasurerCache({ defaultHeight: 100 }); }, []);
64
+ var isScrollTop = function () {
65
+ var _a;
66
+ return ((_a = outerRef.current) === null || _a === void 0 ? void 0 : _a.scrollTop) === 0;
67
+ };
68
+ var isScrollBottom = function () {
69
+ var element = outerRef.current;
70
+ if (element) {
71
+ var scrollHeight = element.scrollHeight, scrollTop = element.scrollTop, clientHeight = element.clientHeight;
72
+ return Math.ceil(scrollTop) + clientHeight >= scrollHeight;
73
+ }
74
+ else {
75
+ return false;
76
+ }
77
+ };
78
+ var clearSwipe = React.useCallback(function () {
79
+ startOffsetRef.current = 0;
80
+ setOutBounded(null);
81
+ }, []);
82
+ // Limited the offset in a range, it prevent over swipe the list
83
+ var getOutOfBoundOffset = function (y) {
84
+ var offset = y - startOffsetRef.current;
85
+ if (outBounded === "upper") {
86
+ return offset < 0 ? null : offset;
87
+ }
88
+ else if (outBounded === "lower") {
89
+ return offset > 0 ? null : offset;
90
+ }
91
+ else {
92
+ return null;
93
+ }
94
+ };
95
+ var onAutoLoad = function (props) {
96
+ if (autoLoad) {
97
+ var overscanStopIndex = props.overscanStopIndex;
98
+ if (overscanStopIndex > data.length - 2 - (typeof autoLoad === "number" ? autoLoad : 3) && !loading && onPullUpLoading) {
99
+ setLoadingType("loading");
100
+ onPullUpLoading();
101
+ }
102
+ }
103
+ };
104
+ var newData = __spreadArray(__spreadArray([], __read(data), false), [
105
+ { loading: loadingWithDelay && loadingType === "loading", ended: !onPullUpLoading, endMessage: endOfListMessage, loadingMessage: pullUpLoadingMessage },
106
+ ], false);
107
+ var listDataItem = { data: newData, cache: cache, parent: listRef, itemRenderer: renderItem, gap: gap };
108
+ var handlers = useSwipe({
109
+ onStart: function (_a) {
110
+ var _b = __read(_a.delta, 2), y = _b[1], direction = _a.direction;
111
+ startOffsetRef.current = y;
112
+ setOutBounded(direction === Direction.DOWN ? "upper" : "lower");
113
+ },
114
+ onMove: function (_a) {
115
+ var _b = __read(_a.delta, 2), y = _b[1], cancel = _a.cancel;
116
+ var offset = getOutOfBoundOffset(y);
117
+ if (!offset) {
118
+ // if
119
+ cancel();
120
+ }
121
+ else {
122
+ transit.to({
123
+ y: offset,
124
+ immediate: true,
125
+ });
126
+ }
127
+ },
128
+ onEnd: function (state) {
129
+ if (loadingWithDelay) {
130
+ if (outBounded === "upper") {
131
+ transit.to({
132
+ y: LOADING_THRESHOLD,
133
+ });
134
+ }
135
+ else {
136
+ transit.clear();
137
+ }
138
+ }
139
+ else {
140
+ if (outBounded && Math.abs(startOffsetRef.current - state.delta[1]) >= LOADING_THRESHOLD) {
141
+ outBounded === "upper" ? onPullDownRefresh === null || onPullDownRefresh === void 0 ? void 0 : onPullDownRefresh() : onPullUpLoading === null || onPullUpLoading === void 0 ? void 0 : onPullUpLoading();
142
+ setLoadingType(outBounded === "upper" ? "refresh" : "loading");
143
+ }
144
+ transit.clear();
145
+ }
146
+ clearSwipe();
147
+ },
148
+ onCancel: function () {
149
+ transit.clear();
150
+ clearSwipe();
151
+ },
152
+ }, {
153
+ threshold: function (_a) {
154
+ var direction = _a.direction;
155
+ return (direction === Direction.DOWN && isScrollTop()) || (direction === Direction.UP && isScrollBottom());
156
+ },
157
+ });
158
+ React.useEffect(function () {
159
+ var _a;
160
+ (_a = listRef.current) === null || _a === void 0 ? void 0 : _a.resetAfterIndex(0);
161
+ }, [data]);
162
+ React.useEffect(function () {
163
+ if (loadingWithDelay) {
164
+ if (loadingTypeRef.current === "refresh") {
165
+ transit.to({
166
+ y: LOADING_THRESHOLD,
167
+ immediate: false,
168
+ });
169
+ }
170
+ }
171
+ else {
172
+ transit.clear();
173
+ setLoadingType(null);
174
+ }
175
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- transit
176
+ }, [loadingWithDelay]);
177
+ return (React.createElement("div", __assign({ className: "g-flat-list-wrapper ".concat(className !== null && className !== void 0 ? className : ""), style: style }, (bounceEffect ? handlers : {})),
178
+ React.createElement("div", { className: "inner-container".concat(outBounded ? " out-bounded" : ""), ref: innerContainerRef, style: contentStyle },
179
+ React.createElement(Loading, { loading: loadingWithDelay && loadingType === "refresh", message: pullDownRefreshMessage }),
180
+ data.length !== 0 ? (React.createElement(AutoSizer, null, function (size) { return (React.createElement(VariableSizeList, { height: size.height, width: size.width, itemCount: listDataItem.data.length, itemSize: cache.itemSize.bind(cache), ref: listRef, outerRef: outerRef, itemData: listDataItem, onItemsRendered: onAutoLoad, onScroll: clearSwipe }, ListItem)); })) : (emptyPlaceholder))));
181
+ }
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ .g-flat-list-wrapper {
2
+ flex: 1;
3
+ overflow: hidden;
4
+ position: relative;
5
+ display: flex;
6
+ flex-flow: column;
7
+ will-change: contents;
8
+
9
+ .inner-container {
10
+ flex: 1;
11
+ transition: all 300ms cubic-bezier(0, 0.61, 0.28, 1.22);
12
+
13
+ &.out-bounded {
14
+ > div:nth-child(2) > div:nth-child(1) {
15
+ overflow: hidden !important;
16
+ }
17
+ }
18
+ }
19
+
20
+ .g-flat-list-loading {
21
+ width: 100%;
22
+ padding: 8px;
23
+ display: flex;
24
+ justify-content: center;
25
+ align-items: center;
26
+ position: fixed;
27
+ left: 0;
28
+ min-height: 50px;
29
+ will-change: transform;
30
+ transform: translateY(-100%);
31
+ z-index: 2;
32
+ }
33
+
34
+ .g-flat-list-footer {
35
+ width: 100%;
36
+ display: flex;
37
+ flex-flow: row nowrap;
38
+ justify-content: center;
39
+ align-items: center;
40
+ padding: 5px;
41
+ }
42
+
43
+ .g-flat-list-loading,
44
+ .g-flat-list-footer {
45
+ > div {
46
+ position: relative;
47
+
48
+ .ant-spin {
49
+ position: absolute;
50
+ left: 0;
51
+ transform: translateX(-150%);
52
+
53
+ .anticon.ant-spin-dot {
54
+ font-size: 14px;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,29 @@
1
+ import type React from "react";
2
+ import type { VariableSizeList } from "react-window";
3
+ import type { CellMeasurerCache } from "./CellMeasurerCache";
4
+ export declare type Measure = () => void;
5
+ export interface VirtualizedFlatListItemProps<T> {
6
+ data: T;
7
+ index: number;
8
+ measure: Measure;
9
+ }
10
+ export declare type ItemRenderer<T> = React.ComponentType<VirtualizedFlatListItemProps<T>>;
11
+ export interface ListItemGap {
12
+ top?: number;
13
+ bottom?: number;
14
+ left?: number;
15
+ right?: number;
16
+ }
17
+ export interface FooterData {
18
+ loading: boolean;
19
+ ended: boolean;
20
+ loadingMessage?: string;
21
+ endMessage?: string;
22
+ }
23
+ export interface ListItemData<T> {
24
+ data: (T | FooterData)[];
25
+ cache: CellMeasurerCache;
26
+ parent: React.RefObject<VariableSizeList>;
27
+ itemRenderer: ItemRenderer<T>;
28
+ gap?: ListItemGap;
29
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/type.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare const useLoadingWithDelay: (loading: boolean, delay: number) => Readonly<boolean>;
@@ -0,0 +1,51 @@
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
+ export var useLoadingWithDelay = function (loading, delay) {
19
+ var _a = __read(React.useState(loading), 2), loadingWithDelay = _a[0], setLoadingWithDelay = _a[1];
20
+ var startTimeRef = React.useRef(null);
21
+ var setLoadingRef = React.useRef(function () { });
22
+ var setLoading = React.useCallback(function (value) {
23
+ if (value) {
24
+ setLoadingWithDelay(true);
25
+ startTimeRef.current = Date.now();
26
+ setTimeout(function () { return (startTimeRef.current = null); }, delay);
27
+ }
28
+ else {
29
+ if (startTimeRef.current) {
30
+ setTimeout(function () { return setLoadingWithDelay(false); }, Math.abs(delay - (Date.now() - startTimeRef.current)));
31
+ }
32
+ else {
33
+ setLoadingWithDelay(value);
34
+ }
35
+ }
36
+ }, [delay]);
37
+ setLoadingRef.current = setLoading;
38
+ React.useEffect(function () {
39
+ setLoadingRef.current(loading);
40
+ }, [loading]);
41
+ React.useEffect(function () {
42
+ if (loadingWithDelay) {
43
+ startTimeRef.current = Date.now();
44
+ }
45
+ else {
46
+ startTimeRef.current = null;
47
+ }
48
+ }, [loadingWithDelay]);
49
+ return loadingWithDelay;
50
+ };
51
+ //# sourceMappingURL=useLoadingWithDelay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoadingWithDelay.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/useLoadingWithDelay.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,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,CAA2B,cAAO,CAAC,CAAC,CAAC;IAEvE,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,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,KAAK,CAAC,SAAS,CAAC;QACZ,IAAI,gBAAgB,EAAE;YAClB,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;SACrC;aAAM;YACH,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;SAC/B;IACL,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,OAAO,gBAAgB,CAAC;AAC5B,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { SwipeHookConfig, SwipeHookHandlers, SwipeHookResult } from "./type";
2
+ export declare class Controller {
3
+ private startTime;
4
+ private startTouch;
5
+ private started;
6
+ private handlers;
7
+ private config;
8
+ constructor();
9
+ private onTouchStart;
10
+ private onTouchMove;
11
+ private onTouchEnd;
12
+ private onTouchCancel;
13
+ private testThreshold;
14
+ private cancel;
15
+ private computeEvent;
16
+ private matchTouches;
17
+ private reset;
18
+ update(handlers: SwipeHookHandlers, config?: SwipeHookConfig): void;
19
+ createHandlers(): SwipeHookResult;
20
+ }
@@ -0,0 +1,126 @@
1
+ import { SwipeUtil } from "../../util/SwipeUtil";
2
+ var SWIPE_START_THRESHOLD = 10;
3
+ var Controller = /** @class */ (function () {
4
+ function Controller() {
5
+ this.startTime = 0;
6
+ this.startTouch = null;
7
+ this.started = false;
8
+ this.handlers = {};
9
+ this.config = {};
10
+ }
11
+ Controller.prototype.onTouchStart = function (e) {
12
+ if (e.changedTouches[0] && !this.startTouch) {
13
+ this.startTouch = e.changedTouches[0];
14
+ this.startTime = Date.now();
15
+ }
16
+ };
17
+ Controller.prototype.onTouchMove = function (e) {
18
+ var _a, _b, _c, _d;
19
+ var matchedTouches = this.matchTouches(e);
20
+ if (!matchedTouches) {
21
+ return;
22
+ }
23
+ var state = this.computeEvent(matchedTouches.start, matchedTouches.changed, e);
24
+ if (!this.started && this.testThreshold(state)) {
25
+ this.started = true;
26
+ (_b = (_a = this.handlers).onStart) === null || _b === void 0 ? void 0 : _b.call(_a, state);
27
+ return;
28
+ }
29
+ else if (this.started) {
30
+ (_d = (_c = this.handlers).onMove) === null || _d === void 0 ? void 0 : _d.call(_c, state);
31
+ }
32
+ };
33
+ Controller.prototype.onTouchEnd = function (e) {
34
+ var _a, _b;
35
+ if (!this.started) {
36
+ this.reset();
37
+ return;
38
+ }
39
+ var matchedTouches = this.matchTouches(e);
40
+ if (!matchedTouches) {
41
+ return;
42
+ }
43
+ var state = this.computeEvent(matchedTouches.start, matchedTouches.changed, e);
44
+ (_b = (_a = this.handlers).onEnd) === null || _b === void 0 ? void 0 : _b.call(_a, state);
45
+ this.reset();
46
+ };
47
+ Controller.prototype.onTouchCancel = function (e) {
48
+ var _a, _b;
49
+ if (!this.started) {
50
+ this.reset();
51
+ return;
52
+ }
53
+ var matchedTouches = this.matchTouches(e);
54
+ if (!matchedTouches) {
55
+ return;
56
+ }
57
+ var state = this.computeEvent(matchedTouches.start, matchedTouches.changed, e);
58
+ (_b = (_a = this.handlers).onCancel) === null || _b === void 0 ? void 0 : _b.call(_a, state);
59
+ this.reset();
60
+ };
61
+ Controller.prototype.testThreshold = function (state) {
62
+ var _a, _b, _c;
63
+ return state.displacement > SWIPE_START_THRESHOLD && ((_c = (_b = (_a = this.config).threshold) === null || _b === void 0 ? void 0 : _b.call(_a, state)) !== null && _c !== void 0 ? _c : true);
64
+ };
65
+ Controller.prototype.cancel = function (event) {
66
+ if (this.startTouch) {
67
+ this.onTouchCancel(event);
68
+ }
69
+ };
70
+ Controller.prototype.computeEvent = function (start, changed, event) {
71
+ var _this = this;
72
+ var s = [start.clientX, start.clientY];
73
+ var e = [changed.clientX, changed.clientY];
74
+ var delta = [e[0] - s[0], e[1] - s[1]];
75
+ var timeElapsed = Date.now() - this.startTime;
76
+ return {
77
+ clientX: changed.clientX,
78
+ clientY: changed.clientY,
79
+ startTouch: start,
80
+ delta: delta,
81
+ direction: SwipeUtil.getDirection(s, e),
82
+ displacement: SwipeUtil.getDisplacement(s, e),
83
+ // TODO/Alvis, need to improve velocity calculation
84
+ velocity: [Math.abs(delta[0]) / timeElapsed, Math.abs(delta[1]) / timeElapsed],
85
+ syntheticEvent: event,
86
+ cancel: (function () { return _this.cancel(event); }).bind(this),
87
+ };
88
+ };
89
+ Controller.prototype.matchTouches = function (e) {
90
+ var _this = this;
91
+ if (!this.startTouch) {
92
+ return null;
93
+ }
94
+ var touch = Array.from(e.changedTouches).find(function (_) { return _.identifier === _this.startTouch.identifier; });
95
+ if (!touch) {
96
+ return null;
97
+ }
98
+ else {
99
+ return {
100
+ start: this.startTouch,
101
+ changed: touch,
102
+ };
103
+ }
104
+ };
105
+ Controller.prototype.reset = function () {
106
+ this.startTime = 0;
107
+ this.startTouch = null;
108
+ this.started = false;
109
+ };
110
+ Controller.prototype.update = function (handlers, config) {
111
+ if (config === void 0) { config = {}; }
112
+ this.handlers = handlers;
113
+ this.config = config;
114
+ };
115
+ Controller.prototype.createHandlers = function () {
116
+ return {
117
+ onTouchStart: this.onTouchStart.bind(this),
118
+ onTouchMove: this.onTouchMove.bind(this),
119
+ onTouchEnd: this.onTouchEnd.bind(this),
120
+ onTouchCancel: this.onTouchCancel.bind(this),
121
+ };
122
+ };
123
+ return Controller;
124
+ }());
125
+ export { Controller };
126
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/hooks/useSwipe/controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SwipeHookConfig, SwipeHookHandlers, SwipeHookResult } from "./type";
2
+ export declare const useSwipe: (handlers: SwipeHookHandlers, config?: SwipeHookConfig | undefined) => SwipeHookResult;
3
+ export * from "./type";
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import { Controller } from "./controller";
3
+ export var useSwipe = function (handlers, config) {
4
+ var controller = React.useMemo(function () { return new Controller(); }, []);
5
+ controller.update(handlers, config);
6
+ return controller.createHandlers.apply(controller);
7
+ };
8
+ export * from "./type";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useSwipe/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAGxC,MAAM,CAAC,IAAM,QAAQ,GAAG,UAAC,QAA2B,EAAE,MAAwB;IAC1E,IAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,cAAM,OAAA,IAAI,UAAU,EAAE,EAAhB,CAAgB,EAAE,EAAE,CAAC,CAAC;IAC7D,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type React from "react";
2
+ export declare type TouchHandlers = Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "onTouchStart" | "onTouchMove" | "onTouchEndCapture" | "onTouchCancelCapture">;
3
+ export interface SwipeHookResult {
4
+ onTouchMove: React.TouchEventHandler;
5
+ onTouchStart: React.TouchEventHandler;
6
+ onTouchEnd: React.TouchEventHandler;
7
+ onTouchCancel: React.TouchEventHandler;
8
+ }
9
+ export interface SwipeState {
10
+ syntheticEvent: React.TouchEvent;
11
+ startTouch: React.Touch;
12
+ clientX: number;
13
+ clientY: number;
14
+ displacement: number;
15
+ delta: Vector2;
16
+ velocity: Vector2;
17
+ direction: Direction;
18
+ cancel: () => void;
19
+ }
20
+ declare type SwipeHookHandler = (event: SwipeState) => void;
21
+ export interface SwipeHookHandlers {
22
+ onStart?: SwipeHookHandler;
23
+ onEnd?: SwipeHookHandler;
24
+ onMove?: SwipeHookHandler;
25
+ onCancel?: SwipeHookHandler;
26
+ }
27
+ export interface SwipeHookConfig {
28
+ threshold?: (state: SwipeState) => boolean;
29
+ preventDefault?: boolean;
30
+ }
31
+ export declare enum Direction {
32
+ UP = "UP",
33
+ DOWN = "DOWN",
34
+ LEFT = "LEFT",
35
+ RIGHT = "RIGHT"
36
+ }
37
+ export declare type Vector2 = [number, number];
38
+ export {};
@@ -0,0 +1,8 @@
1
+ export var Direction;
2
+ (function (Direction) {
3
+ Direction["UP"] = "UP";
4
+ Direction["DOWN"] = "DOWN";
5
+ Direction["LEFT"] = "LEFT";
6
+ Direction["RIGHT"] = "RIGHT";
7
+ })(Direction || (Direction = {}));
8
+ //# sourceMappingURL=type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/hooks/useSwipe/type.ts"],"names":[],"mappings":"AAqCA,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACjB,sBAAS,CAAA;IACT,0BAAa,CAAA;IACb,0BAAa,CAAA;IACb,4BAAe,CAAA;AACnB,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB"}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ interface TransitionOption {
3
+ property?: string;
4
+ duration?: number;
5
+ delay?: number;
6
+ timingFunction?: string;
7
+ }
8
+ interface Option extends TransitionOption {
9
+ x?: number;
10
+ y?: number;
11
+ z?: number;
12
+ immediate?: boolean;
13
+ }
14
+ export declare const useTransform: (ref: React.RefObject<HTMLElement>, option?: Option | undefined) => {
15
+ to: (option: Option) => void;
16
+ clear: () => void;
17
+ };
18
+ export {};
@@ -0,0 +1,50 @@
1
+ import React from "react";
2
+ export var useTransform = function (ref, option) {
3
+ var optionRef = React.useRef(option);
4
+ optionRef.current = option;
5
+ var clearTransition = React.useCallback(function (el) {
6
+ el.style.transitionDuration = "";
7
+ el.style.transitionProperty = "";
8
+ el.style.transitionTimingFunction = "";
9
+ el.style.transitionDuration = "";
10
+ }, []);
11
+ var setTransition = React.useCallback(function (el) {
12
+ if (optionRef.current) {
13
+ var _a = optionRef.current, delay = _a.delay, duration = _a.duration, property = _a.property, timingFunction = _a.timingFunction;
14
+ delay && (el.style.transitionDelay = delay + "ms");
15
+ duration && (el.style.transitionDuration = duration + "ms");
16
+ property && (el.style.transitionProperty = property);
17
+ timingFunction && (el.style.transitionTimingFunction = timingFunction);
18
+ }
19
+ else {
20
+ clearTransition(el);
21
+ }
22
+ }, [clearTransition]);
23
+ var to = React.useCallback(function (option) {
24
+ if (ref.current) {
25
+ var el_1 = ref.current;
26
+ requestAnimationFrame(function () {
27
+ var _a, _b, _c;
28
+ el_1.style.transform = "translate3d(".concat((_a = option.x) !== null && _a !== void 0 ? _a : 0, "px, ").concat((_b = option.y) !== null && _b !== void 0 ? _b : 0, "px, ").concat((_c = option.z) !== null && _c !== void 0 ? _c : 0, "px) ");
29
+ option.immediate ? clearTransition(el_1) : setTransition(el_1);
30
+ });
31
+ }
32
+ }, [ref, setTransition, clearTransition]);
33
+ var clear = React.useCallback(function () {
34
+ if (ref.current) {
35
+ var el_2 = ref.current;
36
+ requestAnimationFrame(function () {
37
+ el_2.style.transform = "";
38
+ setTransition(el_2);
39
+ });
40
+ }
41
+ }, [ref, setTransition]);
42
+ React.useEffect(function () {
43
+ if (optionRef.current) {
44
+ to(optionRef.current);
45
+ }
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- only run on mount
47
+ }, []);
48
+ return { to: to, clear: clear };
49
+ };
50
+ //# sourceMappingURL=useTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTransform.js","sourceRoot":"","sources":["../../src/hooks/useTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAmB1B,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,GAAiC,EAAE,MAAe;IAC3E,IAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAE3B,IAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,UAAC,EAAe;QACtD,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACvC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACnC,UAAC,EAAe;QACZ,IAAI,SAAS,CAAC,OAAO,EAAE;YACb,IAAA,KAA8C,SAAS,CAAC,OAAO,EAA9D,KAAK,WAAA,EAAE,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,cAAc,oBAAqB,CAAC;YACtE,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;YACnD,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;YAC5D,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,QAAQ,CAAC,CAAC;YACrD,cAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,wBAAwB,GAAG,cAAc,CAAC,CAAC;SAC1E;aAAM;YACH,eAAe,CAAC,EAAE,CAAC,CAAC;SACvB;IACL,CAAC,EACD,CAAC,eAAe,CAAC,CACpB,CAAC;IAEF,IAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CACxB,UAAC,MAAc;QACX,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,IAAM,IAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,qBAAqB,CAAC;;gBAClB,IAAE,CAAC,KAAK,CAAC,SAAS,GAAG,sBAAe,MAAA,MAAM,CAAC,CAAC,mCAAI,CAAC,iBAAO,MAAA,MAAM,CAAC,CAAC,mCAAI,CAAC,iBAAO,MAAA,MAAM,CAAC,CAAC,mCAAI,CAAC,SAAM,CAAC;gBAChG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;IACL,CAAC,EACD,CAAC,GAAG,EAAE,aAAa,EAAE,eAAe,CAAC,CACxC,CAAC;IAEF,IAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAC5B,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,IAAM,IAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,qBAAqB,CAAC;gBAClB,IAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;gBACxB,aAAa,CAAC,IAAE,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;SACN;IACL,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzB,KAAK,CAAC,SAAS,CAAC;QACZ,IAAI,SAAS,CAAC,OAAO,EAAE;YACnB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACzB;QACD,4EAA4E;IAChF,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAC,EAAE,IAAA,EAAE,KAAK,OAAA,EAAC,CAAC;AACvB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pinnacle0/web-ui",
3
- "version": "0.3.1",
3
+ "version": "0.3.3-beta0",
4
4
  "author": "Pinnacle",
5
5
  "license": "MIT",
6
6
  "sideEffects": [
@@ -19,6 +19,7 @@
19
19
  "run-script": "ts-node --project config/tsconfig.script.json",
20
20
  "build": "yarn run-script script/build.ts",
21
21
  "start": "yarn run-script script/start.ts",
22
+ "start:mobile": "yarn run-script script/start-mobile.ts",
22
23
  "format": "yarn run-script script/format.ts",
23
24
  "test": "jest --config config/jest.config.js"
24
25
  },
@@ -27,7 +28,10 @@
27
28
  "antd": "4.20.1",
28
29
  "braft-editor": "2.3.9",
29
30
  "moment": "2.29.3",
30
- "react-virtual": "2.10.4"
31
+ "react-virtual": "2.10.4",
32
+ "react-virtualized": "^9.22.3",
33
+ "react-virtualized-auto-sizer": "^1.0.6",
34
+ "react-window": "^1.8.6"
31
35
  },
32
36
  "peerDependencies": {
33
37
  "@babel/runtime": ">=7.12.1",
@@ -36,8 +40,8 @@
36
40
  "react-router-dom": ">=5.2.0"
37
41
  },
38
42
  "devDependencies": {
39
- "@babel/core": "7.17.8",
40
- "@babel/runtime": "7.17.8",
43
+ "@babel/core": "7.17.9",
44
+ "@babel/runtime": "7.17.9",
41
45
  "@testing-library/dom": "8.13.0",
42
46
  "@testing-library/jest-dom": "5.16.4",
43
47
  "@testing-library/react": "13.1.1",
@@ -47,6 +51,8 @@
47
51
  "@types/react": "18.0.8",
48
52
  "@types/react-dom": "17.0.14",
49
53
  "@types/react-router-dom": "5.3.2",
54
+ "@types/react-virtualized-auto-sizer": "^1.0.1",
55
+ "@types/react-window": "1.8.5",
50
56
  "less": "4.1.2",
51
57
  "react": "18.1.0",
52
58
  "react-dom": "18.1.0",
@@ -0,0 +1,8 @@
1
+ import { Direction } from "../hooks/useSwipe";
2
+ declare function getDirection(start: [number, number], end: [number, number]): Direction;
3
+ declare function getDisplacement(start: [number, number], end: [number, number]): number;
4
+ export declare const SwipeUtil: Readonly<{
5
+ getDirection: typeof getDirection;
6
+ getDisplacement: typeof getDisplacement;
7
+ }>;
8
+ export {};
@@ -0,0 +1,26 @@
1
+ import { Direction } from "../hooks/useSwipe";
2
+ function getDirection(start, end) {
3
+ var vector = [end[0] - start[0], start[1] - end[1]];
4
+ var degree = (Math.atan2(vector[1], vector[0]) * 180) / Math.PI;
5
+ degree = degree < 0 ? degree + 360 : degree;
6
+ if ((degree >= 315 && degree < 360) || (degree >= 0 && degree < 45)) {
7
+ return Direction.RIGHT;
8
+ }
9
+ else if (degree >= 45 && degree < 135) {
10
+ return Direction.UP;
11
+ }
12
+ else if (degree >= 135 && degree < 225) {
13
+ return Direction.LEFT;
14
+ }
15
+ else {
16
+ return Direction.DOWN;
17
+ }
18
+ }
19
+ function getDisplacement(start, end) {
20
+ return Math.sqrt(Math.pow(start[0] - end[0], 2) + Math.pow(start[1] - end[1], 2));
21
+ }
22
+ export var SwipeUtil = Object.freeze({
23
+ getDirection: getDirection,
24
+ getDisplacement: getDisplacement,
25
+ });
26
+ //# sourceMappingURL=SwipeUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwipeUtil.js","sourceRoot":"","sources":["../../src/util/SwipeUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,SAAS,YAAY,CAAC,KAAuB,EAAE,GAAqB;IAChE,IAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAChE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAE5C,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE;QACjE,OAAO,SAAS,CAAC,KAAK,CAAC;KAC1B;SAAM,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,EAAE;QACrC,OAAO,SAAS,CAAC,EAAE,CAAC;KACvB;SAAM,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE;QACtC,OAAO,SAAS,CAAC,IAAI,CAAC;KACzB;SAAM;QACH,OAAO,SAAS,CAAC,IAAI,CAAC;KACzB;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAuB,EAAE,GAAqB;IACnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AACD,MAAM,CAAC,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,YAAY,cAAA;IACZ,eAAe,iBAAA;CAClB,CAAC,CAAC"}