@shopify/flash-list 1.8.0 → 2.0.0-alpha.2
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/README.md +147 -26
- package/dist/FlashListProps.d.ts +65 -2
- package/dist/FlashListProps.d.ts.map +1 -1
- package/dist/__tests__/AverageWindow.test.js +35 -0
- package/dist/__tests__/AverageWindow.test.js.map +1 -1
- package/dist/enableNewCore.d.ts +3 -0
- package/dist/enableNewCore.d.ts.map +1 -0
- package/dist/enableNewCore.js +25 -0
- package/dist/enableNewCore.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -8
- package/dist/index.js.map +1 -1
- package/dist/recyclerview/RecycleKeyManager.d.ts +82 -0
- package/dist/recyclerview/RecycleKeyManager.d.ts.map +1 -0
- package/dist/recyclerview/RecycleKeyManager.js +135 -0
- package/dist/recyclerview/RecycleKeyManager.js.map +1 -0
- package/dist/recyclerview/RecyclerView.d.ts +12 -0
- package/dist/recyclerview/RecyclerView.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerView.js +283 -0
- package/dist/recyclerview/RecyclerView.js.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts +12 -0
- package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js +11 -0
- package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts +52 -0
- package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewManager.js +323 -0
- package/dist/recyclerview/RecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts +9 -0
- package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -0
- package/dist/recyclerview/RecyclerViewProps.js +3 -0
- package/dist/recyclerview/RecyclerViewProps.js.map +1 -0
- package/dist/recyclerview/ViewHolder.d.ts +45 -0
- package/dist/recyclerview/ViewHolder.d.ts.map +1 -0
- package/dist/recyclerview/ViewHolder.js +96 -0
- package/dist/recyclerview/ViewHolder.js.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts +57 -0
- package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -0
- package/dist/recyclerview/ViewHolderCollection.js +75 -0
- package/dist/recyclerview/ViewHolderCollection.js.map +1 -0
- package/dist/recyclerview/components/CompatScroller.d.ts +7 -0
- package/dist/recyclerview/components/CompatScroller.d.ts.map +1 -0
- package/dist/recyclerview/components/CompatScroller.js +8 -0
- package/dist/recyclerview/components/CompatScroller.js.map +1 -0
- package/dist/recyclerview/components/CompatView.d.ts +7 -0
- package/dist/recyclerview/components/CompatView.d.ts.map +1 -0
- package/dist/recyclerview/components/CompatView.js +8 -0
- package/dist/recyclerview/components/CompatView.js.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts +28 -0
- package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -0
- package/dist/recyclerview/components/ScrollAnchor.js +35 -0
- package/dist/recyclerview/components/ScrollAnchor.js.map +1 -0
- package/dist/recyclerview/components/StickyHeaders.d.ts +38 -0
- package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -0
- package/dist/recyclerview/components/StickyHeaders.js +119 -0
- package/dist/recyclerview/components/StickyHeaders.js.map +1 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +51 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js +122 -0
- package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +59 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js +138 -0
- package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts +19 -0
- package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useBoundDetection.js +103 -0
- package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts +12 -0
- package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useLayoutState.js +43 -0
- package/dist/recyclerview/hooks/useLayoutState.js.map +1 -0
- package/dist/recyclerview/hooks/useOnLoad.d.ts +25 -0
- package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useOnLoad.js +73 -0
- package/dist/recyclerview/hooks/useOnLoad.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +72 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js +370 -0
- package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +6 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js +27 -0
- package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts +16 -0
- package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useRecyclingState.js +54 -0
- package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -0
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts +27 -0
- package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useSecondaryProps.js +93 -0
- package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts +11 -0
- package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js +28 -0
- package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +65 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js +204 -0
- package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts +281 -0
- package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js +250 -0
- package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +52 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js +191 -0
- package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +73 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +274 -0
- package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts +12 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts.map +1 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.js +18 -0
- package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -0
- package/dist/recyclerview/utils/componentUtils.d.ts +19 -0
- package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -0
- package/dist/recyclerview/utils/componentUtils.js +32 -0
- package/dist/recyclerview/utils/componentUtils.js.map +1 -0
- package/dist/recyclerview/utils/findVisibleIndex.d.ts +24 -0
- package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -0
- package/dist/recyclerview/utils/findVisibleIndex.js +82 -0
- package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -0
- package/dist/recyclerview/utils/measureLayout.d.ts +56 -0
- package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -0
- package/dist/recyclerview/utils/measureLayout.js +77 -0
- package/dist/recyclerview/utils/measureLayout.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/AverageWindow.d.ts +13 -0
- package/dist/utils/AverageWindow.d.ts.map +1 -1
- package/dist/utils/AverageWindow.js +30 -1
- package/dist/utils/AverageWindow.js.map +1 -1
- package/package.json +1 -1
- package/src/FlashListProps.ts +73 -2
- package/src/__tests__/AverageWindow.test.ts +49 -1
- package/src/enableNewCore.ts +22 -0
- package/src/index.ts +21 -0
- package/src/recyclerview/RecycleKeyManager.ts +185 -0
- package/src/recyclerview/RecyclerView.tsx +500 -0
- package/src/recyclerview/RecyclerViewContextProvider.ts +19 -0
- package/src/recyclerview/RecyclerViewManager.ts +379 -0
- package/src/recyclerview/RecyclerViewProps.ts +10 -0
- package/src/recyclerview/ViewHolder.tsx +173 -0
- package/src/recyclerview/ViewHolderCollection.tsx +164 -0
- package/src/recyclerview/components/CompatScroller.ts +9 -0
- package/src/recyclerview/components/CompatView.ts +9 -0
- package/src/recyclerview/components/ScrollAnchor.tsx +53 -0
- package/src/recyclerview/components/StickyHeaders.tsx +210 -0
- package/src/recyclerview/helpers/ConsecutiveNumbers.ts +120 -0
- package/src/recyclerview/helpers/EngagedIndicesTracker.ts +191 -0
- package/src/recyclerview/hooks/useBoundDetection.ts +127 -0
- package/src/recyclerview/hooks/useLayoutState.ts +46 -0
- package/src/recyclerview/hooks/useOnLoad.ts +78 -0
- package/src/recyclerview/hooks/useRecyclerViewController.tsx +487 -0
- package/src/recyclerview/hooks/useRecyclerViewManager.ts +30 -0
- package/src/recyclerview/hooks/useRecyclingState.ts +63 -0
- package/src/recyclerview/hooks/useSecondaryProps.tsx +119 -0
- package/src/recyclerview/hooks/useUnmountFlag.ts +26 -0
- package/src/recyclerview/layout-managers/GridLayoutManager.ts +215 -0
- package/src/recyclerview/layout-managers/LayoutManager.ts +493 -0
- package/src/recyclerview/layout-managers/LinearLayoutManager.ts +167 -0
- package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +302 -0
- package/src/recyclerview/utils/adjustOffsetForRTL.ts +17 -0
- package/src/recyclerview/utils/componentUtils.ts +28 -0
- package/src/recyclerview/utils/findVisibleIndex.ts +94 -0
- package/src/recyclerview/utils/measureLayout.ts +89 -0
- package/src/utils/AverageWindow.ts +33 -0
- package/src/viewability/ViewToken.ts +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ViewHolderCollection is a container component that manages multiple ViewHolder instances.
|
|
4
|
+
* It handles the rendering of a collection of list items, manages layout updates,
|
|
5
|
+
* and coordinates with the RecyclerView context for layout changes.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ViewHolderCollection = void 0;
|
|
9
|
+
var tslib_1 = require("tslib");
|
|
10
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
11
|
+
var ViewHolder_1 = require("./ViewHolder");
|
|
12
|
+
var CompatView_1 = require("./components/CompatView");
|
|
13
|
+
var RecyclerViewContextProvider_1 = require("./RecyclerViewContextProvider");
|
|
14
|
+
/**
|
|
15
|
+
* ViewHolderCollection component that manages the rendering of multiple ViewHolder instances
|
|
16
|
+
* and handles layout updates for the entire collection
|
|
17
|
+
* @template TItem - The type of items in the data array
|
|
18
|
+
*/
|
|
19
|
+
var ViewHolderCollection = function (props) {
|
|
20
|
+
var data = props.data, renderStack = props.renderStack, getLayout = props.getLayout, refHolder = props.refHolder, onSizeChanged = props.onSizeChanged, renderItem = props.renderItem, extraData = props.extraData, viewHolderCollectionRef = props.viewHolderCollectionRef, getChildContainerLayout = props.getChildContainerLayout, onCommitLayoutEffect = props.onCommitLayoutEffect, CellRendererComponent = props.CellRendererComponent, ItemSeparatorComponent = props.ItemSeparatorComponent, onCommitEffect = props.onCommitEffect, horizontal = props.horizontal;
|
|
21
|
+
var _a = tslib_1.__read(react_1.default.useState(0), 2), renderId = _a[0], setRenderId = _a[1];
|
|
22
|
+
var containerLayout = getChildContainerLayout();
|
|
23
|
+
// TODO: guard againt precision issues
|
|
24
|
+
var fixedContainerSize = horizontal
|
|
25
|
+
? containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.height
|
|
26
|
+
: containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.width;
|
|
27
|
+
var recyclerViewContext = (0, RecyclerViewContextProvider_1.useRecyclerViewContext)();
|
|
28
|
+
(0, react_1.useLayoutEffect)(function () {
|
|
29
|
+
if (renderId > 0) {
|
|
30
|
+
// console.log(
|
|
31
|
+
// "parent layout trigger due to child container size change",
|
|
32
|
+
// fixedContainerSize
|
|
33
|
+
// );
|
|
34
|
+
recyclerViewContext === null || recyclerViewContext === void 0 ? void 0 : recyclerViewContext.layout();
|
|
35
|
+
}
|
|
36
|
+
}, [fixedContainerSize]);
|
|
37
|
+
(0, react_1.useLayoutEffect)(function () {
|
|
38
|
+
if (renderId > 0) {
|
|
39
|
+
onCommitLayoutEffect === null || onCommitLayoutEffect === void 0 ? void 0 : onCommitLayoutEffect();
|
|
40
|
+
}
|
|
41
|
+
}, [renderId]);
|
|
42
|
+
(0, react_1.useEffect)(function () {
|
|
43
|
+
if (renderId > 0) {
|
|
44
|
+
onCommitEffect === null || onCommitEffect === void 0 ? void 0 : onCommitEffect();
|
|
45
|
+
}
|
|
46
|
+
}, [renderId]);
|
|
47
|
+
// Expose forceUpdate through ref
|
|
48
|
+
(0, react_1.useImperativeHandle)(viewHolderCollectionRef, function () { return ({
|
|
49
|
+
commitLayout: function () {
|
|
50
|
+
// This will trigger a re-render of the component
|
|
51
|
+
setRenderId(function (prev) { return prev + 1; });
|
|
52
|
+
},
|
|
53
|
+
}); });
|
|
54
|
+
var hasData = data && data.length > 0;
|
|
55
|
+
var containerStyle = {
|
|
56
|
+
width: horizontal ? containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.width : undefined,
|
|
57
|
+
height: containerLayout === null || containerLayout === void 0 ? void 0 : containerLayout.height,
|
|
58
|
+
};
|
|
59
|
+
return (react_1.default.createElement(CompatView_1.CompatView
|
|
60
|
+
// TODO: Take care of web scroll bar here
|
|
61
|
+
, {
|
|
62
|
+
// TODO: Take care of web scroll bar here
|
|
63
|
+
style: hasData && containerStyle }, containerLayout &&
|
|
64
|
+
hasData &&
|
|
65
|
+
Array.from(renderStack, function (_a) {
|
|
66
|
+
var _b = tslib_1.__read(_a, 2), index = _b[0], reactKey = _b[1];
|
|
67
|
+
var item = data[index];
|
|
68
|
+
var trailingItem = ItemSeparatorComponent
|
|
69
|
+
? data[index + 1]
|
|
70
|
+
: undefined;
|
|
71
|
+
return (react_1.default.createElement(ViewHolder_1.ViewHolder, { key: reactKey, index: index, item: item, trailingItem: trailingItem, layout: tslib_1.__assign({}, getLayout(index)), refHolder: refHolder, onSizeChanged: onSizeChanged, target: "Cell", renderItem: renderItem, extraData: extraData, CellRendererComponent: CellRendererComponent, ItemSeparatorComponent: ItemSeparatorComponent, horizontal: horizontal }));
|
|
72
|
+
})));
|
|
73
|
+
};
|
|
74
|
+
exports.ViewHolderCollection = ViewHolderCollection;
|
|
75
|
+
//# sourceMappingURL=ViewHolderCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ViewHolderCollection.js","sourceRoot":"","sources":["../../src/recyclerview/ViewHolderCollection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ScrollView, Animated } from "react-native";
|
|
2
|
+
declare const AnimatedScrollView: Animated.AnimatedComponent<typeof ScrollView>;
|
|
3
|
+
/** Regular scroll view component */
|
|
4
|
+
export { ScrollView as CompatScroller };
|
|
5
|
+
/** Animated scroll view component for smooth scrolling animations */
|
|
6
|
+
export { AnimatedScrollView as CompatAnimatedScroller };
|
|
7
|
+
//# sourceMappingURL=CompatScroller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompatScroller.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatScroller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEpD,QAAA,MAAM,kBAAkB,+CAAsB,CAAC;AAE/C,oCAAoC;AACpC,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,CAAC;AAExC,qEAAqE;AACrE,OAAO,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompatAnimatedScroller = exports.CompatScroller = void 0;
|
|
4
|
+
var react_native_1 = require("react-native");
|
|
5
|
+
Object.defineProperty(exports, "CompatScroller", { enumerable: true, get: function () { return react_native_1.ScrollView; } });
|
|
6
|
+
var AnimatedScrollView = react_native_1.Animated.ScrollView;
|
|
7
|
+
exports.CompatAnimatedScroller = AnimatedScrollView;
|
|
8
|
+
//# sourceMappingURL=CompatScroller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompatScroller.js","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatScroller.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAK7B,+FALd,yBAAU,OAKkB;AAHrC,IAAM,kBAAkB,GAAG,uBAAQ,CAAC,UAAU,CAAC;AAMhB,oDAAsB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { View, Animated } from "react-native";
|
|
2
|
+
/** Regular view component */
|
|
3
|
+
export { View as CompatView };
|
|
4
|
+
declare const AnimatedView: Animated.AnimatedComponent<typeof View>;
|
|
5
|
+
/** Animated view component for smooth animations */
|
|
6
|
+
export { AnimatedView as CompatAnimatedView };
|
|
7
|
+
//# sourceMappingURL=CompatView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompatView.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9C,6BAA6B;AAC7B,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,CAAC;AAE9B,QAAA,MAAM,YAAY,yCAAgB,CAAC;AAEnC,oDAAoD;AACpD,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompatAnimatedView = exports.CompatView = void 0;
|
|
4
|
+
var react_native_1 = require("react-native");
|
|
5
|
+
Object.defineProperty(exports, "CompatView", { enumerable: true, get: function () { return react_native_1.View; } });
|
|
6
|
+
var AnimatedView = react_native_1.Animated.View;
|
|
7
|
+
exports.CompatAnimatedView = AnimatedView;
|
|
8
|
+
//# sourceMappingURL=CompatView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompatView.js","sourceRoot":"","sources":["../../../src/recyclerview/components/CompatView.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAG7B,2FAHR,mBAAI,OAGc;AAE3B,IAAM,YAAY,GAAG,uBAAQ,CAAC,IAAI,CAAC;AAGV,0CAAkB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScrollAnchor component provides a mechanism to programmatically scroll
|
|
3
|
+
* the list by manipulating an invisible anchor element's position.
|
|
4
|
+
* This helps us use ScrollView's maintainVisibleContentPosition property
|
|
5
|
+
* to adjust the scroll position of the list as the size of content changes without any glitches.
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
8
|
+
/**
|
|
9
|
+
* Props for the ScrollAnchor component
|
|
10
|
+
*/
|
|
11
|
+
export interface ScrollAnchorProps {
|
|
12
|
+
/** Ref to access scroll anchor methods */
|
|
13
|
+
scrollAnchorRef: React.Ref<ScrollAnchorRef>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Ref interface for ScrollAnchor component
|
|
17
|
+
*/
|
|
18
|
+
export interface ScrollAnchorRef {
|
|
19
|
+
/** Scrolls the list by the specified offset */
|
|
20
|
+
scrollBy: (offset: number) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* ScrollAnchor component that provides programmatic scrolling capabilities using maintainVisibleContentPosition property
|
|
24
|
+
* @param props - Component props
|
|
25
|
+
* @returns An invisible anchor element used for scrolling
|
|
26
|
+
*/
|
|
27
|
+
export declare function ScrollAnchor({ scrollAnchorRef }: ScrollAnchorProps): React.JSX.Element;
|
|
28
|
+
//# sourceMappingURL=ScrollAnchor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollAnchor.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,eAAe,EAAE,EAAE,iBAAiB,qBAoBlE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ScrollAnchor component provides a mechanism to programmatically scroll
|
|
4
|
+
* the list by manipulating an invisible anchor element's position.
|
|
5
|
+
* This helps us use ScrollView's maintainVisibleContentPosition property
|
|
6
|
+
* to adjust the scroll position of the list as the size of content changes without any glitches.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ScrollAnchor = void 0;
|
|
10
|
+
var tslib_1 = require("tslib");
|
|
11
|
+
var react_1 = require("react");
|
|
12
|
+
var CompatView_1 = require("./CompatView");
|
|
13
|
+
var react_2 = tslib_1.__importDefault(require("react"));
|
|
14
|
+
/**
|
|
15
|
+
* ScrollAnchor component that provides programmatic scrolling capabilities using maintainVisibleContentPosition property
|
|
16
|
+
* @param props - Component props
|
|
17
|
+
* @returns An invisible anchor element used for scrolling
|
|
18
|
+
*/
|
|
19
|
+
function ScrollAnchor(_a) {
|
|
20
|
+
var scrollAnchorRef = _a.scrollAnchorRef;
|
|
21
|
+
var _b = tslib_1.__read((0, react_1.useState)(1000000), 2), scrollOffset = _b[0], setScrollOffset = _b[1]; //TODO: Fix this value
|
|
22
|
+
// Expose scrollBy method through ref
|
|
23
|
+
(0, react_1.useImperativeHandle)(scrollAnchorRef, function () { return ({
|
|
24
|
+
scrollBy: function (offset) {
|
|
25
|
+
setScrollOffset(function (prev) { return prev + offset; });
|
|
26
|
+
},
|
|
27
|
+
}); });
|
|
28
|
+
// Create an invisible anchor element that can be positioned
|
|
29
|
+
var anchor = (0, react_1.useMemo)(function () {
|
|
30
|
+
return (react_2.default.createElement(CompatView_1.CompatView, { style: { position: "absolute", height: 0, top: scrollOffset } }));
|
|
31
|
+
}, [scrollOffset]);
|
|
32
|
+
return anchor;
|
|
33
|
+
}
|
|
34
|
+
exports.ScrollAnchor = ScrollAnchor;
|
|
35
|
+
//# sourceMappingURL=ScrollAnchor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollAnchor.js","sourceRoot":"","sources":["../../../src/recyclerview/components/ScrollAnchor.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,+BAA+D;AAC/D,2CAA0C;AAC1C,wDAA0B;AAkB1B;;;;GAIG;AACH,SAAgB,YAAY,CAAC,EAAsC;QAApC,eAAe,qBAAA;IACtC,IAAA,KAAA,eAAkC,IAAA,gBAAQ,EAAC,OAAO,CAAC,IAAA,EAAlD,YAAY,QAAA,EAAE,eAAe,QAAqB,CAAC,CAAC,sBAAsB;IAEjF,qCAAqC;IACrC,IAAA,2BAAmB,EAAC,eAAe,EAAE,cAAM,OAAA,CAAC;QAC1C,QAAQ,EAAE,UAAC,MAAc;YACvB,eAAe,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,GAAG,MAAM,EAAb,CAAa,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,EAJyC,CAIzC,CAAC,CAAC;IAEJ,4DAA4D;IAC5D,IAAM,MAAM,GAAG,IAAA,eAAO,EAAC;QACrB,OAAO,CACL,8BAAC,uBAAU,IACT,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,GAC7D,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO,MAAM,CAAC;AAChB,CAAC;AApBD,oCAoBC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StickyHeaders component manages the sticky header behavior in a FlashList.
|
|
3
|
+
* It handles the animation and positioning of headers that should remain fixed
|
|
4
|
+
* at the top of the list while scrolling.
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { Animated, NativeScrollEvent } from "react-native";
|
|
8
|
+
import { FlashListProps } from "../..";
|
|
9
|
+
import { RecyclerViewManager } from "../RecyclerViewManager";
|
|
10
|
+
/**
|
|
11
|
+
* Props for the StickyHeaders component
|
|
12
|
+
* @template TItem - The type of items in the list
|
|
13
|
+
*/
|
|
14
|
+
export interface StickyHeaderProps<TItem> {
|
|
15
|
+
/** Array of indices that should have sticky headers */
|
|
16
|
+
stickyHeaderIndices: number[];
|
|
17
|
+
/** The data array being rendered */
|
|
18
|
+
data: readonly TItem[];
|
|
19
|
+
/** Animated value tracking scroll position */
|
|
20
|
+
scrollY: Animated.Value;
|
|
21
|
+
/** Function to render each item */
|
|
22
|
+
renderItem: FlashListProps<TItem>["renderItem"];
|
|
23
|
+
/** Ref to access sticky header methods */
|
|
24
|
+
stickyHeaderRef: React.RefObject<StickyHeaderRef>;
|
|
25
|
+
/** Manager for recycler view operations */
|
|
26
|
+
recyclerViewManager: RecyclerViewManager<TItem>;
|
|
27
|
+
/** Additional data to trigger re-renders */
|
|
28
|
+
extraData: FlashListProps<TItem>["extraData"];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Ref interface for StickyHeaders component
|
|
32
|
+
*/
|
|
33
|
+
export interface StickyHeaderRef {
|
|
34
|
+
/** Reports scroll events to update sticky header positions */
|
|
35
|
+
reportScrollEvent: (event: NativeScrollEvent) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare const StickyHeaders: <TItem>({ stickyHeaderIndices, renderItem, stickyHeaderRef, recyclerViewManager, scrollY, data, extraData, }: StickyHeaderProps<TItem>) => React.JSX.Element | null;
|
|
38
|
+
//# sourceMappingURL=StickyHeaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StickyHeaders.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/components/StickyHeaders.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D;;;GAGG;AACH,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,uDAAuD;IACvD,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,oCAAoC;IACpC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC;IACvB,8CAA8C;IAC9C,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC;IACxB,mCAAmC;IACnC,UAAU,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IAChD,0CAA0C;IAC1C,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAClD,2CAA2C;IAC3C,mBAAmB,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAChD,4CAA4C;IAC5C,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,iBAAiB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACvD;AAED,eAAO,MAAM,aAAa,qKAiIzB,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StickyHeaders component manages the sticky header behavior in a FlashList.
|
|
4
|
+
* It handles the animation and positioning of headers that should remain fixed
|
|
5
|
+
* at the top of the list while scrolling.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.StickyHeaders = void 0;
|
|
9
|
+
var tslib_1 = require("tslib");
|
|
10
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
11
|
+
var CompatView_1 = require("./CompatView");
|
|
12
|
+
var ViewHolder_1 = require("../ViewHolder");
|
|
13
|
+
var StickyHeaders = function (_a) {
|
|
14
|
+
var stickyHeaderIndices = _a.stickyHeaderIndices, renderItem = _a.renderItem, stickyHeaderRef = _a.stickyHeaderRef, recyclerViewManager = _a.recyclerViewManager, scrollY = _a.scrollY, data = _a.data, extraData = _a.extraData;
|
|
15
|
+
var _b = tslib_1.__read((0, react_1.useState)({ currentStickyIndex: -1, nextStickyIndex: -1 }), 2), stickyIndices = _b[0], setStickyIndices = _b[1];
|
|
16
|
+
var currentStickyIndex = stickyIndices.currentStickyIndex, nextStickyIndex = stickyIndices.nextStickyIndex;
|
|
17
|
+
var hasLayout = recyclerViewManager.hasLayout();
|
|
18
|
+
// Memoize sorted indices based on their Y positions
|
|
19
|
+
var sortedIndices = (0, react_1.useMemo)(function () {
|
|
20
|
+
if (!hasLayout) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
return stickyHeaderIndices.sort(function (a, b) { return a - b; });
|
|
24
|
+
}, [stickyHeaderIndices, recyclerViewManager, hasLayout]);
|
|
25
|
+
var compute = (0, react_1.useCallback)(function () {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
var adjustedValue = recyclerViewManager.getLastScrollOffset();
|
|
28
|
+
// Binary search for current sticky index
|
|
29
|
+
var currentIndexInArray = findCurrentStickyIndex(sortedIndices, adjustedValue, function (index) { return recyclerViewManager.getLayout(index).y; });
|
|
30
|
+
var newStickyIndex = (_a = sortedIndices[currentIndexInArray]) !== null && _a !== void 0 ? _a : -1;
|
|
31
|
+
var newNextStickyIndex = (_b = sortedIndices[currentIndexInArray + 1]) !== null && _b !== void 0 ? _b : -1;
|
|
32
|
+
if (newNextStickyIndex > recyclerViewManager.getEngagedIndices().endIndex) {
|
|
33
|
+
newNextStickyIndex = -1;
|
|
34
|
+
}
|
|
35
|
+
if (newStickyIndex !== currentStickyIndex ||
|
|
36
|
+
newNextStickyIndex !== nextStickyIndex) {
|
|
37
|
+
setStickyIndices({
|
|
38
|
+
currentStickyIndex: newStickyIndex,
|
|
39
|
+
nextStickyIndex: newNextStickyIndex,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}, [currentStickyIndex, nextStickyIndex, recyclerViewManager, sortedIndices]);
|
|
43
|
+
(0, react_1.useEffect)(function () {
|
|
44
|
+
compute();
|
|
45
|
+
}, [compute]);
|
|
46
|
+
// Optimized scroll handler using binary search pattern
|
|
47
|
+
(0, react_1.useImperativeHandle)(stickyHeaderRef, function () { return ({
|
|
48
|
+
reportScrollEvent: function () {
|
|
49
|
+
compute();
|
|
50
|
+
},
|
|
51
|
+
}); }, [
|
|
52
|
+
stickyHeaderIndices,
|
|
53
|
+
recyclerViewManager,
|
|
54
|
+
currentStickyIndex,
|
|
55
|
+
nextStickyIndex,
|
|
56
|
+
]);
|
|
57
|
+
var refHolder = (0, react_1.useRef)(new Map()).current;
|
|
58
|
+
// Memoize translateY calculation
|
|
59
|
+
var translateY = (0, react_1.useMemo)(function () {
|
|
60
|
+
if (currentStickyIndex === -1 || nextStickyIndex === -1) {
|
|
61
|
+
return scrollY.interpolate({
|
|
62
|
+
inputRange: [0, Infinity],
|
|
63
|
+
outputRange: [0, 0],
|
|
64
|
+
extrapolate: "clamp",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
var currentLayout = recyclerViewManager.getLayout(currentStickyIndex);
|
|
68
|
+
var nextLayout = recyclerViewManager.getLayout(nextStickyIndex);
|
|
69
|
+
var pushStartsAt = nextLayout.y - currentLayout.height;
|
|
70
|
+
return scrollY.interpolate({
|
|
71
|
+
inputRange: [
|
|
72
|
+
pushStartsAt + recyclerViewManager.firstItemOffset,
|
|
73
|
+
nextLayout.y + recyclerViewManager.firstItemOffset,
|
|
74
|
+
],
|
|
75
|
+
outputRange: [0, -currentLayout.height],
|
|
76
|
+
extrapolate: "clamp",
|
|
77
|
+
});
|
|
78
|
+
}, [currentStickyIndex, nextStickyIndex, recyclerViewManager, scrollY]);
|
|
79
|
+
// Memoize header content
|
|
80
|
+
var headerContent = (0, react_1.useMemo)(function () {
|
|
81
|
+
if (currentStickyIndex === -1)
|
|
82
|
+
return null;
|
|
83
|
+
return (react_1.default.createElement(CompatView_1.CompatAnimatedView, { style: {
|
|
84
|
+
position: "absolute",
|
|
85
|
+
top: 0,
|
|
86
|
+
left: 0,
|
|
87
|
+
right: 0,
|
|
88
|
+
transform: [{ translateY: translateY }],
|
|
89
|
+
} },
|
|
90
|
+
react_1.default.createElement(ViewHolder_1.ViewHolder, { index: currentStickyIndex, item: data[currentStickyIndex], renderItem: renderItem, layout: { x: 0, y: 0, width: 0, height: 0 }, refHolder: refHolder, extraData: extraData, trailingItem: null, target: "StickyHeader" })));
|
|
91
|
+
}, [currentStickyIndex, data, renderItem, extraData, refHolder, translateY]);
|
|
92
|
+
return headerContent;
|
|
93
|
+
};
|
|
94
|
+
exports.StickyHeaders = StickyHeaders;
|
|
95
|
+
/**
|
|
96
|
+
* Binary search utility to find the current sticky header index based on scroll position
|
|
97
|
+
* @param sortedIndices - Array of indices sorted by Y position
|
|
98
|
+
* @param adjustedValue - Current scroll position
|
|
99
|
+
* @param getY - Function to get Y position for an index
|
|
100
|
+
* @returns Index of the current sticky header
|
|
101
|
+
*/
|
|
102
|
+
function findCurrentStickyIndex(sortedIndices, adjustedValue, getY) {
|
|
103
|
+
var left = 0;
|
|
104
|
+
var right = sortedIndices.length - 1;
|
|
105
|
+
var result = -1;
|
|
106
|
+
while (left <= right) {
|
|
107
|
+
var mid = Math.floor((left + right) / 2);
|
|
108
|
+
var currentY = getY(sortedIndices[mid]);
|
|
109
|
+
if (currentY <= adjustedValue) {
|
|
110
|
+
result = mid;
|
|
111
|
+
left = mid + 1;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
right = mid - 1;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=StickyHeaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StickyHeaders.js","sourceRoot":"","sources":["../../../src/recyclerview/components/StickyHeaders.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple wrapper for consecutive integer arrays
|
|
3
|
+
* Only stores start and end indices for faster computation as numbers are consecutive.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ConsecutiveNumbers {
|
|
6
|
+
readonly startIndex: number;
|
|
7
|
+
readonly endIndex: number;
|
|
8
|
+
constructor(startIndex: number, endIndex: number);
|
|
9
|
+
static readonly EMPTY: ConsecutiveNumbers;
|
|
10
|
+
/**
|
|
11
|
+
* Get the length of the array
|
|
12
|
+
*/
|
|
13
|
+
get length(): number;
|
|
14
|
+
/**
|
|
15
|
+
* Get element at specified index
|
|
16
|
+
*/
|
|
17
|
+
at(index: number): number;
|
|
18
|
+
/**
|
|
19
|
+
* Check if two consecutive numbers are equal
|
|
20
|
+
*/
|
|
21
|
+
equals(other: ConsecutiveNumbers): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Converts the consecutive range to an actual array
|
|
24
|
+
* @returns An array containing all consecutive numbers
|
|
25
|
+
*/
|
|
26
|
+
toArray(): number[];
|
|
27
|
+
/**
|
|
28
|
+
* Check if array includes a value
|
|
29
|
+
*/
|
|
30
|
+
includes(value: number): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get index of a value in the consecutive range
|
|
33
|
+
*/
|
|
34
|
+
indexOf(value: number): number;
|
|
35
|
+
findValue(predicate: (value: number, index: number, array: ConsecutiveNumbers) => boolean | undefined): number | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Tests whether all elements in the consecutive range pass the provided test function
|
|
38
|
+
* @param predicate A function that tests each element
|
|
39
|
+
* @returns true if all elements pass the test; otherwise, false
|
|
40
|
+
*/
|
|
41
|
+
every(predicate: (value: number, index: number, array: ConsecutiveNumbers) => boolean | undefined): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Get a slice of the consecutive array
|
|
44
|
+
*/
|
|
45
|
+
slice(start?: number, end?: number): ConsecutiveNumbers;
|
|
46
|
+
/**
|
|
47
|
+
* Implement iterator to enable for...of
|
|
48
|
+
*/
|
|
49
|
+
[Symbol.iterator](): Generator<number, void, unknown>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=ConsecutiveNumbers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsecutiveNumbers.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/helpers/ConsecutiveNumbers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,kBAAkB;aAEX,UAAU,EAAE,MAAM;aAClB,QAAQ,EAAE,MAAM;gBADhB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM;IAGlC,MAAM,CAAC,QAAQ,CAAC,KAAK,qBAAiC;IAEtD;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIzB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO;IAM1C;;;OAGG;IACH,OAAO,IAAI,MAAM,EAAE;IAWnB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIhC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI9B,SAAS,CACP,SAAS,EAAE,CACT,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,kBAAkB,KACtB,OAAO,GAAG,SAAS,GACvB,MAAM,GAAG,SAAS;IAUrB;;;;OAIG;IACH,KAAK,CACH,SAAS,EAAE,CACT,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,kBAAkB,KACtB,OAAO,GAAG,SAAS,GACvB,OAAO;IAUV;;OAEG;IACH,KAAK,CAAC,KAAK,SAAI,EAAE,GAAG,SAAc,GAAG,kBAAkB;IAOvD;;OAEG;IACF,CAAC,MAAM,CAAC,QAAQ,CAAC;CAKnB"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConsecutiveNumbers = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* A simple wrapper for consecutive integer arrays
|
|
7
|
+
* Only stores start and end indices for faster computation as numbers are consecutive.
|
|
8
|
+
*/
|
|
9
|
+
var ConsecutiveNumbers = /** @class */ (function () {
|
|
10
|
+
function ConsecutiveNumbers(startIndex, endIndex) {
|
|
11
|
+
this.startIndex = startIndex;
|
|
12
|
+
this.endIndex = endIndex;
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(ConsecutiveNumbers.prototype, "length", {
|
|
15
|
+
/**
|
|
16
|
+
* Get the length of the array
|
|
17
|
+
*/
|
|
18
|
+
get: function () {
|
|
19
|
+
return Math.max(0, this.endIndex - this.startIndex + 1);
|
|
20
|
+
},
|
|
21
|
+
enumerable: false,
|
|
22
|
+
configurable: true
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* Get element at specified index
|
|
26
|
+
*/
|
|
27
|
+
ConsecutiveNumbers.prototype.at = function (index) {
|
|
28
|
+
return this.startIndex + index;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Check if two consecutive numbers are equal
|
|
32
|
+
*/
|
|
33
|
+
ConsecutiveNumbers.prototype.equals = function (other) {
|
|
34
|
+
return (this.startIndex === other.startIndex && this.endIndex === other.endIndex);
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Converts the consecutive range to an actual array
|
|
38
|
+
* @returns An array containing all consecutive numbers
|
|
39
|
+
*/
|
|
40
|
+
ConsecutiveNumbers.prototype.toArray = function () {
|
|
41
|
+
if (this.length === 0) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
var array = new Array(this.length);
|
|
45
|
+
for (var i = 0; i < this.length; i++) {
|
|
46
|
+
array[i] = this.startIndex + i;
|
|
47
|
+
}
|
|
48
|
+
return array;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Check if array includes a value
|
|
52
|
+
*/
|
|
53
|
+
ConsecutiveNumbers.prototype.includes = function (value) {
|
|
54
|
+
return value >= this.startIndex && value <= this.endIndex;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Get index of a value in the consecutive range
|
|
58
|
+
*/
|
|
59
|
+
ConsecutiveNumbers.prototype.indexOf = function (value) {
|
|
60
|
+
return this.includes(value) ? value - this.startIndex : -1;
|
|
61
|
+
};
|
|
62
|
+
ConsecutiveNumbers.prototype.findValue = function (predicate) {
|
|
63
|
+
for (var i = 0; i < this.length; i++) {
|
|
64
|
+
var value = this.startIndex + i;
|
|
65
|
+
if (predicate(value, i, this)) {
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Tests whether all elements in the consecutive range pass the provided test function
|
|
73
|
+
* @param predicate A function that tests each element
|
|
74
|
+
* @returns true if all elements pass the test; otherwise, false
|
|
75
|
+
*/
|
|
76
|
+
ConsecutiveNumbers.prototype.every = function (predicate) {
|
|
77
|
+
for (var i = 0; i < this.length; i++) {
|
|
78
|
+
var value = this.startIndex + i;
|
|
79
|
+
if (!predicate(value, i, this)) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Get a slice of the consecutive array
|
|
87
|
+
*/
|
|
88
|
+
ConsecutiveNumbers.prototype.slice = function (start, end) {
|
|
89
|
+
if (start === void 0) { start = 0; }
|
|
90
|
+
if (end === void 0) { end = this.length; }
|
|
91
|
+
var newStart = this.startIndex + start;
|
|
92
|
+
var newEnd = this.startIndex + Math.min(end, this.length) - 1;
|
|
93
|
+
return new ConsecutiveNumbers(newStart, Math.max(newStart - 1, newEnd));
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Implement iterator to enable for...of
|
|
97
|
+
*/
|
|
98
|
+
ConsecutiveNumbers.prototype[Symbol.iterator] = function () {
|
|
99
|
+
var i;
|
|
100
|
+
return tslib_1.__generator(this, function (_a) {
|
|
101
|
+
switch (_a.label) {
|
|
102
|
+
case 0:
|
|
103
|
+
i = this.startIndex;
|
|
104
|
+
_a.label = 1;
|
|
105
|
+
case 1:
|
|
106
|
+
if (!(i <= this.endIndex)) return [3 /*break*/, 4];
|
|
107
|
+
return [4 /*yield*/, i];
|
|
108
|
+
case 2:
|
|
109
|
+
_a.sent();
|
|
110
|
+
_a.label = 3;
|
|
111
|
+
case 3:
|
|
112
|
+
i++;
|
|
113
|
+
return [3 /*break*/, 1];
|
|
114
|
+
case 4: return [2 /*return*/];
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
ConsecutiveNumbers.EMPTY = new ConsecutiveNumbers(0, -1);
|
|
119
|
+
return ConsecutiveNumbers;
|
|
120
|
+
}());
|
|
121
|
+
exports.ConsecutiveNumbers = ConsecutiveNumbers;
|
|
122
|
+
//# sourceMappingURL=ConsecutiveNumbers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsecutiveNumbers.js","sourceRoot":"","sources":["../../../src/recyclerview/helpers/ConsecutiveNumbers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ConsecutiveNumbers } from "./ConsecutiveNumbers";
|
|
2
|
+
import { RVLayoutManager } from "../layout-managers/LayoutManager";
|
|
3
|
+
export interface RVEngagedIndicesTracker {
|
|
4
|
+
scrollOffset: number;
|
|
5
|
+
drawDistance: number;
|
|
6
|
+
/**
|
|
7
|
+
* Updates the scroll offset and calculates which items should be rendered (engaged indices).
|
|
8
|
+
* @param offset - The new scroll offset position
|
|
9
|
+
* @param velocity - Current scroll velocity to optimize buffer distribution
|
|
10
|
+
* @param layoutManager - Layout manager to fetch item positions and dimensions
|
|
11
|
+
* @returns New engaged indices if changed, undefined if no change
|
|
12
|
+
*/
|
|
13
|
+
updateScrollOffset: (offset: number, velocity: Velocity | null | undefined, layoutManager: RVLayoutManager) => ConsecutiveNumbers | undefined;
|
|
14
|
+
getEngagedIndices: () => ConsecutiveNumbers;
|
|
15
|
+
computeVisibleIndices: (layoutManager: RVLayoutManager) => ConsecutiveNumbers;
|
|
16
|
+
}
|
|
17
|
+
export interface Velocity {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
}
|
|
21
|
+
export declare class RVEngagedIndicesTrackerImpl implements RVEngagedIndicesTracker {
|
|
22
|
+
scrollOffset: number;
|
|
23
|
+
drawDistance: number;
|
|
24
|
+
private engagedIndices;
|
|
25
|
+
private smallMultiplier;
|
|
26
|
+
private largeMultiplier;
|
|
27
|
+
private velocityHistory;
|
|
28
|
+
private velocityIndex;
|
|
29
|
+
/**
|
|
30
|
+
* Updates scroll position and determines which items should be rendered.
|
|
31
|
+
* Implements a smart buffer system that:
|
|
32
|
+
* 1. Calculates the visible viewport
|
|
33
|
+
* 2. Determines optimal buffer distribution based on scroll direction
|
|
34
|
+
* 3. Adjusts buffer sizes at list boundaries
|
|
35
|
+
* 4. Returns new indices that need to be rendered
|
|
36
|
+
*/
|
|
37
|
+
updateScrollOffset(offset: number, velocity: Velocity | null | undefined, layoutManager: RVLayoutManager): ConsecutiveNumbers | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Determines scroll direction by analyzing recent velocity history.
|
|
40
|
+
* Uses a majority voting system on the last 5 velocity values.
|
|
41
|
+
* @param velocity - Current scroll velocity component (x or y)
|
|
42
|
+
* @returns true if scrolling backward (negative direction), false otherwise
|
|
43
|
+
*/
|
|
44
|
+
private isScrollingBackward;
|
|
45
|
+
/**
|
|
46
|
+
* Calculates which items are currently visible in the viewport.
|
|
47
|
+
* Unlike getEngagedIndices, this doesn't include buffer items.
|
|
48
|
+
* @param layoutManager - Layout manager to fetch item positions
|
|
49
|
+
* @returns Indices of items currently visible in the viewport
|
|
50
|
+
*/
|
|
51
|
+
computeVisibleIndices(layoutManager: RVLayoutManager): ConsecutiveNumbers;
|
|
52
|
+
/**
|
|
53
|
+
* Returns the currently engaged (rendered) indices.
|
|
54
|
+
* This includes both visible items and buffer items.
|
|
55
|
+
* @returns The last computed set of engaged indices
|
|
56
|
+
*/
|
|
57
|
+
getEngagedIndices(): ConsecutiveNumbers;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=EngagedIndicesTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EngagedIndicesTracker.d.ts","sourceRoot":"","sources":["../../../src/recyclerview/helpers/EngagedIndicesTracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IAEtC,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,kBAAkB,EAAE,CAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,eAAe,KAC3B,kBAAkB,GAAG,SAAS,CAAC;IACpC,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;IAC5C,qBAAqB,EAAE,CAAC,aAAa,EAAE,eAAe,KAAK,kBAAkB,CAAC;CAC/E;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,qBAAa,2BAA4B,YAAW,uBAAuB;IAElE,YAAY,SAAK;IAEjB,YAAY,EAAE,MAAM,CAAO;IAElC,OAAO,CAAC,cAAc,CAA4B;IAGlD,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,eAAe,CAAO;IAG9B,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,aAAa,CAAK;IAE1B;;;;;;;OAOG;IACH,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACrC,aAAa,EAAE,eAAe,GAC7B,kBAAkB,GAAG,SAAS;IA2EjC;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;;;;OAKG;IACH,qBAAqB,CAAC,aAAa,EAAE,eAAe,GAAG,kBAAkB;IAiBzE;;;;OAIG;IACH,iBAAiB,IAAI,kBAAkB;CAGxC"}
|