@shopify/flash-list 1.7.6 → 2.0.0-alpha.1

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 (179) hide show
  1. package/README.md +147 -26
  2. package/dist/FlashList.d.ts +27 -0
  3. package/dist/FlashList.d.ts.map +1 -1
  4. package/dist/FlashList.js +44 -0
  5. package/dist/FlashList.js.map +1 -1
  6. package/dist/FlashListProps.d.ts +65 -2
  7. package/dist/FlashListProps.d.ts.map +1 -1
  8. package/dist/__tests__/AverageWindow.test.js +35 -0
  9. package/dist/__tests__/AverageWindow.test.js.map +1 -1
  10. package/dist/enableNewCore.d.ts +3 -0
  11. package/dist/enableNewCore.d.ts.map +1 -0
  12. package/dist/enableNewCore.js +25 -0
  13. package/dist/enableNewCore.js.map +1 -0
  14. package/dist/index.d.ts +8 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +19 -8
  17. package/dist/index.js.map +1 -1
  18. package/dist/recyclerview/RecycleKeyManager.d.ts +82 -0
  19. package/dist/recyclerview/RecycleKeyManager.d.ts.map +1 -0
  20. package/dist/recyclerview/RecycleKeyManager.js +135 -0
  21. package/dist/recyclerview/RecycleKeyManager.js.map +1 -0
  22. package/dist/recyclerview/RecyclerView.d.ts +12 -0
  23. package/dist/recyclerview/RecyclerView.d.ts.map +1 -0
  24. package/dist/recyclerview/RecyclerView.js +283 -0
  25. package/dist/recyclerview/RecyclerView.js.map +1 -0
  26. package/dist/recyclerview/RecyclerViewContextProvider.d.ts +12 -0
  27. package/dist/recyclerview/RecyclerViewContextProvider.d.ts.map +1 -0
  28. package/dist/recyclerview/RecyclerViewContextProvider.js +11 -0
  29. package/dist/recyclerview/RecyclerViewContextProvider.js.map +1 -0
  30. package/dist/recyclerview/RecyclerViewManager.d.ts +52 -0
  31. package/dist/recyclerview/RecyclerViewManager.d.ts.map +1 -0
  32. package/dist/recyclerview/RecyclerViewManager.js +323 -0
  33. package/dist/recyclerview/RecyclerViewManager.js.map +1 -0
  34. package/dist/recyclerview/RecyclerViewProps.d.ts +9 -0
  35. package/dist/recyclerview/RecyclerViewProps.d.ts.map +1 -0
  36. package/dist/recyclerview/RecyclerViewProps.js +3 -0
  37. package/dist/recyclerview/RecyclerViewProps.js.map +1 -0
  38. package/dist/recyclerview/ViewHolder.d.ts +45 -0
  39. package/dist/recyclerview/ViewHolder.d.ts.map +1 -0
  40. package/dist/recyclerview/ViewHolder.js +96 -0
  41. package/dist/recyclerview/ViewHolder.js.map +1 -0
  42. package/dist/recyclerview/ViewHolderCollection.d.ts +57 -0
  43. package/dist/recyclerview/ViewHolderCollection.d.ts.map +1 -0
  44. package/dist/recyclerview/ViewHolderCollection.js +75 -0
  45. package/dist/recyclerview/ViewHolderCollection.js.map +1 -0
  46. package/dist/recyclerview/components/CompatScroller.d.ts +7 -0
  47. package/dist/recyclerview/components/CompatScroller.d.ts.map +1 -0
  48. package/dist/recyclerview/components/CompatScroller.js +8 -0
  49. package/dist/recyclerview/components/CompatScroller.js.map +1 -0
  50. package/dist/recyclerview/components/CompatView.d.ts +7 -0
  51. package/dist/recyclerview/components/CompatView.d.ts.map +1 -0
  52. package/dist/recyclerview/components/CompatView.js +8 -0
  53. package/dist/recyclerview/components/CompatView.js.map +1 -0
  54. package/dist/recyclerview/components/ScrollAnchor.d.ts +28 -0
  55. package/dist/recyclerview/components/ScrollAnchor.d.ts.map +1 -0
  56. package/dist/recyclerview/components/ScrollAnchor.js +35 -0
  57. package/dist/recyclerview/components/ScrollAnchor.js.map +1 -0
  58. package/dist/recyclerview/components/StickyHeaders.d.ts +38 -0
  59. package/dist/recyclerview/components/StickyHeaders.d.ts.map +1 -0
  60. package/dist/recyclerview/components/StickyHeaders.js +119 -0
  61. package/dist/recyclerview/components/StickyHeaders.js.map +1 -0
  62. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts +51 -0
  63. package/dist/recyclerview/helpers/ConsecutiveNumbers.d.ts.map +1 -0
  64. package/dist/recyclerview/helpers/ConsecutiveNumbers.js +122 -0
  65. package/dist/recyclerview/helpers/ConsecutiveNumbers.js.map +1 -0
  66. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts +59 -0
  67. package/dist/recyclerview/helpers/EngagedIndicesTracker.d.ts.map +1 -0
  68. package/dist/recyclerview/helpers/EngagedIndicesTracker.js +138 -0
  69. package/dist/recyclerview/helpers/EngagedIndicesTracker.js.map +1 -0
  70. package/dist/recyclerview/hooks/useBoundDetection.d.ts +19 -0
  71. package/dist/recyclerview/hooks/useBoundDetection.d.ts.map +1 -0
  72. package/dist/recyclerview/hooks/useBoundDetection.js +103 -0
  73. package/dist/recyclerview/hooks/useBoundDetection.js.map +1 -0
  74. package/dist/recyclerview/hooks/useLayoutState.d.ts +12 -0
  75. package/dist/recyclerview/hooks/useLayoutState.d.ts.map +1 -0
  76. package/dist/recyclerview/hooks/useLayoutState.js +43 -0
  77. package/dist/recyclerview/hooks/useLayoutState.js.map +1 -0
  78. package/dist/recyclerview/hooks/useOnLoad.d.ts +25 -0
  79. package/dist/recyclerview/hooks/useOnLoad.d.ts.map +1 -0
  80. package/dist/recyclerview/hooks/useOnLoad.js +73 -0
  81. package/dist/recyclerview/hooks/useOnLoad.js.map +1 -0
  82. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts +72 -0
  83. package/dist/recyclerview/hooks/useRecyclerViewController.d.ts.map +1 -0
  84. package/dist/recyclerview/hooks/useRecyclerViewController.js +370 -0
  85. package/dist/recyclerview/hooks/useRecyclerViewController.js.map +1 -0
  86. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts +6 -0
  87. package/dist/recyclerview/hooks/useRecyclerViewManager.d.ts.map +1 -0
  88. package/dist/recyclerview/hooks/useRecyclerViewManager.js +27 -0
  89. package/dist/recyclerview/hooks/useRecyclerViewManager.js.map +1 -0
  90. package/dist/recyclerview/hooks/useRecyclingState.d.ts +16 -0
  91. package/dist/recyclerview/hooks/useRecyclingState.d.ts.map +1 -0
  92. package/dist/recyclerview/hooks/useRecyclingState.js +54 -0
  93. package/dist/recyclerview/hooks/useRecyclingState.js.map +1 -0
  94. package/dist/recyclerview/hooks/useSecondaryProps.d.ts +27 -0
  95. package/dist/recyclerview/hooks/useSecondaryProps.d.ts.map +1 -0
  96. package/dist/recyclerview/hooks/useSecondaryProps.js +93 -0
  97. package/dist/recyclerview/hooks/useSecondaryProps.js.map +1 -0
  98. package/dist/recyclerview/hooks/useUnmountFlag.d.ts +11 -0
  99. package/dist/recyclerview/hooks/useUnmountFlag.d.ts.map +1 -0
  100. package/dist/recyclerview/hooks/useUnmountFlag.js +28 -0
  101. package/dist/recyclerview/hooks/useUnmountFlag.js.map +1 -0
  102. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts +65 -0
  103. package/dist/recyclerview/layout-managers/GridLayoutManager.d.ts.map +1 -0
  104. package/dist/recyclerview/layout-managers/GridLayoutManager.js +204 -0
  105. package/dist/recyclerview/layout-managers/GridLayoutManager.js.map +1 -0
  106. package/dist/recyclerview/layout-managers/LayoutManager.d.ts +281 -0
  107. package/dist/recyclerview/layout-managers/LayoutManager.d.ts.map +1 -0
  108. package/dist/recyclerview/layout-managers/LayoutManager.js +250 -0
  109. package/dist/recyclerview/layout-managers/LayoutManager.js.map +1 -0
  110. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts +52 -0
  111. package/dist/recyclerview/layout-managers/LinearLayoutManager.d.ts.map +1 -0
  112. package/dist/recyclerview/layout-managers/LinearLayoutManager.js +191 -0
  113. package/dist/recyclerview/layout-managers/LinearLayoutManager.js.map +1 -0
  114. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts +73 -0
  115. package/dist/recyclerview/layout-managers/MasonryLayoutManager.d.ts.map +1 -0
  116. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js +274 -0
  117. package/dist/recyclerview/layout-managers/MasonryLayoutManager.js.map +1 -0
  118. package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts +12 -0
  119. package/dist/recyclerview/utils/adjustOffsetForRTL.d.ts.map +1 -0
  120. package/dist/recyclerview/utils/adjustOffsetForRTL.js +18 -0
  121. package/dist/recyclerview/utils/adjustOffsetForRTL.js.map +1 -0
  122. package/dist/recyclerview/utils/componentUtils.d.ts +19 -0
  123. package/dist/recyclerview/utils/componentUtils.d.ts.map +1 -0
  124. package/dist/recyclerview/utils/componentUtils.js +32 -0
  125. package/dist/recyclerview/utils/componentUtils.js.map +1 -0
  126. package/dist/recyclerview/utils/findVisibleIndex.d.ts +24 -0
  127. package/dist/recyclerview/utils/findVisibleIndex.d.ts.map +1 -0
  128. package/dist/recyclerview/utils/findVisibleIndex.js +82 -0
  129. package/dist/recyclerview/utils/findVisibleIndex.js.map +1 -0
  130. package/dist/recyclerview/utils/measureLayout.d.ts +56 -0
  131. package/dist/recyclerview/utils/measureLayout.d.ts.map +1 -0
  132. package/dist/recyclerview/utils/measureLayout.js +77 -0
  133. package/dist/recyclerview/utils/measureLayout.js.map +1 -0
  134. package/dist/tsconfig.tsbuildinfo +1 -1
  135. package/dist/utils/AverageWindow.d.ts +13 -0
  136. package/dist/utils/AverageWindow.d.ts.map +1 -1
  137. package/dist/utils/AverageWindow.js +30 -1
  138. package/dist/utils/AverageWindow.js.map +1 -1
  139. package/dist/viewability/ViewabilityManager.d.ts.map +1 -1
  140. package/dist/viewability/ViewabilityManager.js +5 -4
  141. package/dist/viewability/ViewabilityManager.js.map +1 -1
  142. package/package.json +2 -1
  143. package/src/FlashList.tsx +45 -0
  144. package/src/FlashListProps.ts +73 -2
  145. package/src/__tests__/AverageWindow.test.ts +49 -1
  146. package/src/enableNewCore.ts +22 -0
  147. package/src/index.ts +14 -1
  148. package/src/recyclerview/RecycleKeyManager.ts +185 -0
  149. package/src/recyclerview/RecyclerView.tsx +500 -0
  150. package/src/recyclerview/RecyclerViewContextProvider.ts +19 -0
  151. package/src/recyclerview/RecyclerViewManager.ts +379 -0
  152. package/src/recyclerview/RecyclerViewProps.ts +10 -0
  153. package/src/recyclerview/ViewHolder.tsx +173 -0
  154. package/src/recyclerview/ViewHolderCollection.tsx +164 -0
  155. package/src/recyclerview/components/CompatScroller.ts +9 -0
  156. package/src/recyclerview/components/CompatView.ts +9 -0
  157. package/src/recyclerview/components/ScrollAnchor.tsx +53 -0
  158. package/src/recyclerview/components/StickyHeaders.tsx +210 -0
  159. package/src/recyclerview/helpers/ConsecutiveNumbers.ts +120 -0
  160. package/src/recyclerview/helpers/EngagedIndicesTracker.ts +191 -0
  161. package/src/recyclerview/hooks/useBoundDetection.ts +127 -0
  162. package/src/recyclerview/hooks/useLayoutState.ts +46 -0
  163. package/src/recyclerview/hooks/useOnLoad.ts +78 -0
  164. package/src/recyclerview/hooks/useRecyclerViewController.tsx +487 -0
  165. package/src/recyclerview/hooks/useRecyclerViewManager.ts +30 -0
  166. package/src/recyclerview/hooks/useRecyclingState.ts +63 -0
  167. package/src/recyclerview/hooks/useSecondaryProps.tsx +119 -0
  168. package/src/recyclerview/hooks/useUnmountFlag.ts +26 -0
  169. package/src/recyclerview/layout-managers/GridLayoutManager.ts +215 -0
  170. package/src/recyclerview/layout-managers/LayoutManager.ts +493 -0
  171. package/src/recyclerview/layout-managers/LinearLayoutManager.ts +167 -0
  172. package/src/recyclerview/layout-managers/MasonryLayoutManager.ts +302 -0
  173. package/src/recyclerview/utils/adjustOffsetForRTL.ts +17 -0
  174. package/src/recyclerview/utils/componentUtils.ts +28 -0
  175. package/src/recyclerview/utils/findVisibleIndex.ts +94 -0
  176. package/src/recyclerview/utils/measureLayout.ts +89 -0
  177. package/src/utils/AverageWindow.ts +33 -0
  178. package/src/viewability/ViewToken.ts +1 -1
  179. package/src/viewability/ViewabilityManager.ts +4 -5
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
- export { default as FlashList } from "./FlashList";
1
+ import LegacyFlashList from "./FlashList";
2
+ declare const FlashList: typeof LegacyFlashList;
3
+ export { FlashList };
2
4
  export { FlashListProps, ContentStyle, ListRenderItem, ListRenderItemInfo, RenderTarget, RenderTargetOptions, } from "./FlashListProps";
3
5
  export { default as AnimatedFlashList } from "./AnimatedFlashList";
4
6
  export { useOnNativeBlankAreaEvents, BlankAreaEventHandler, BlankAreaEvent, } from "./native/auto-layout/AutoLayoutView";
@@ -7,8 +9,13 @@ export { useDataMultiplier } from "./benchmark/useDataMultiplier";
7
9
  export { useFlatListBenchmark, FlatListBenchmarkParams, } from "./benchmark/useFlatListBenchmark";
8
10
  export { useBlankAreaTracker, BlankAreaTrackerResult, BlankAreaTrackerConfig, } from "./benchmark/useBlankAreaTracker";
9
11
  export { MasonryFlashList, MasonryFlashListProps, MasonryFlashListScrollEvent, MasonryFlashListRef, MasonryListItem, MasonryListRenderItem, MasonryListRenderItemInfo, } from "./MasonryFlashList";
12
+ export { useLayoutState } from "./recyclerview/hooks/useLayoutState";
13
+ export { useRecyclingState } from "./recyclerview/hooks/useRecyclingState";
10
14
  export { JSFPSMonitor, JSFPSResult } from "./benchmark/JSFPSMonitor";
11
15
  export { autoScroll, Cancellable } from "./benchmark/AutoScrollHelper";
12
16
  export { default as ViewToken } from "./viewability/ViewToken";
13
17
  export { default as CellContainer } from "./native/cell-container/CellContainer";
18
+ export { RecyclerView } from "./recyclerview/RecyclerView";
19
+ export { RecyclerViewProps } from "./recyclerview/RecyclerViewProps";
20
+ export { useRecyclerViewContext } from "./recyclerview/RecyclerViewContextProvider";
14
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,cAAc,GACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,eAAe,MAAM,aAAa,CAAC;AAG1C,QAAA,MAAM,SAAS,wBAE0C,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,cAAc,GACf,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC"}
package/dist/index.js CHANGED
@@ -1,15 +1,18 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CellContainer = exports.Cancellable = exports.autoScroll = exports.JSFPSMonitor = exports.MasonryFlashList = exports.useBlankAreaTracker = exports.useFlatListBenchmark = exports.useDataMultiplier = exports.useBenchmark = exports.useOnNativeBlankAreaEvents = exports.AnimatedFlashList = exports.RenderTargetOptions = exports.FlashList = void 0;
7
- var FlashList_1 = require("./FlashList");
8
- Object.defineProperty(exports, "FlashList", { enumerable: true, get: function () { return __importDefault(FlashList_1).default; } });
3
+ exports.useRecyclerViewContext = exports.RecyclerView = exports.CellContainer = exports.Cancellable = exports.autoScroll = exports.JSFPSMonitor = exports.useRecyclingState = exports.useLayoutState = exports.MasonryFlashList = exports.useBlankAreaTracker = exports.useFlatListBenchmark = exports.useDataMultiplier = exports.useBenchmark = exports.useOnNativeBlankAreaEvents = exports.AnimatedFlashList = exports.RenderTargetOptions = exports.FlashList = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var RecyclerView_1 = require("./recyclerview/RecyclerView");
6
+ var FlashList_1 = tslib_1.__importDefault(require("./FlashList"));
7
+ var enableNewCore_1 = require("./enableNewCore");
8
+ var FlashList = ((0, enableNewCore_1.isNewCoreEnabled)()
9
+ ? RecyclerView_1.RecyclerView
10
+ : FlashList_1.default);
11
+ exports.FlashList = FlashList;
9
12
  var FlashListProps_1 = require("./FlashListProps");
10
13
  Object.defineProperty(exports, "RenderTargetOptions", { enumerable: true, get: function () { return FlashListProps_1.RenderTargetOptions; } });
11
14
  var AnimatedFlashList_1 = require("./AnimatedFlashList");
12
- Object.defineProperty(exports, "AnimatedFlashList", { enumerable: true, get: function () { return __importDefault(AnimatedFlashList_1).default; } });
15
+ Object.defineProperty(exports, "AnimatedFlashList", { enumerable: true, get: function () { return tslib_1.__importDefault(AnimatedFlashList_1).default; } });
13
16
  var AutoLayoutView_1 = require("./native/auto-layout/AutoLayoutView");
14
17
  Object.defineProperty(exports, "useOnNativeBlankAreaEvents", { enumerable: true, get: function () { return AutoLayoutView_1.useOnNativeBlankAreaEvents; } });
15
18
  var useBenchmark_1 = require("./benchmark/useBenchmark");
@@ -22,11 +25,19 @@ var useBlankAreaTracker_1 = require("./benchmark/useBlankAreaTracker");
22
25
  Object.defineProperty(exports, "useBlankAreaTracker", { enumerable: true, get: function () { return useBlankAreaTracker_1.useBlankAreaTracker; } });
23
26
  var MasonryFlashList_1 = require("./MasonryFlashList");
24
27
  Object.defineProperty(exports, "MasonryFlashList", { enumerable: true, get: function () { return MasonryFlashList_1.MasonryFlashList; } });
28
+ var useLayoutState_1 = require("./recyclerview/hooks/useLayoutState");
29
+ Object.defineProperty(exports, "useLayoutState", { enumerable: true, get: function () { return useLayoutState_1.useLayoutState; } });
30
+ var useRecyclingState_1 = require("./recyclerview/hooks/useRecyclingState");
31
+ Object.defineProperty(exports, "useRecyclingState", { enumerable: true, get: function () { return useRecyclingState_1.useRecyclingState; } });
25
32
  var JSFPSMonitor_1 = require("./benchmark/JSFPSMonitor");
26
33
  Object.defineProperty(exports, "JSFPSMonitor", { enumerable: true, get: function () { return JSFPSMonitor_1.JSFPSMonitor; } });
27
34
  var AutoScrollHelper_1 = require("./benchmark/AutoScrollHelper");
28
35
  Object.defineProperty(exports, "autoScroll", { enumerable: true, get: function () { return AutoScrollHelper_1.autoScroll; } });
29
36
  Object.defineProperty(exports, "Cancellable", { enumerable: true, get: function () { return AutoScrollHelper_1.Cancellable; } });
30
37
  var CellContainer_1 = require("./native/cell-container/CellContainer");
31
- Object.defineProperty(exports, "CellContainer", { enumerable: true, get: function () { return __importDefault(CellContainer_1).default; } });
38
+ Object.defineProperty(exports, "CellContainer", { enumerable: true, get: function () { return tslib_1.__importDefault(CellContainer_1).default; } });
39
+ var RecyclerView_2 = require("./recyclerview/RecyclerView");
40
+ Object.defineProperty(exports, "RecyclerView", { enumerable: true, get: function () { return RecyclerView_2.RecyclerView; } });
41
+ var RecyclerViewContextProvider_1 = require("./recyclerview/RecyclerViewContextProvider");
42
+ Object.defineProperty(exports, "useRecyclerViewContext", { enumerable: true, get: function () { return RecyclerViewContextProvider_1.useRecyclerViewContext; } });
32
43
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAmD;AAA1C,uHAAA,OAAO,OAAa;AAC7B,mDAO0B;AADxB,qHAAA,mBAAmB,OAAA;AAErB,yDAAmE;AAA1D,uIAAA,OAAO,OAAqB;AACrC,sEAI6C;AAH3C,4HAAA,0BAA0B,OAAA;AAI5B,yDAIkC;AAHhC,4GAAA,YAAY,OAAA;AAId,mEAAkE;AAAzD,sHAAA,iBAAiB,OAAA;AAC1B,yEAG0C;AAFxC,4HAAA,oBAAoB,OAAA;AAGtB,uEAIyC;AAHvC,0HAAA,mBAAmB,OAAA;AAIrB,uDAQ4B;AAP1B,oHAAA,gBAAgB,OAAA;AAQlB,yDAAqE;AAA5D,4GAAA,YAAY,OAAA;AACrB,iEAAuE;AAA9D,8GAAA,UAAU,OAAA;AAAE,+GAAA,WAAW,OAAA;AAEhC,uEAAiF;AAAxE,+HAAA,OAAO,OAAiB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,4DAA2D;AAC3D,kEAA0C;AAC1C,iDAAmD;AAEnD,IAAM,SAAS,GAAG,CAAC,IAAA,gCAAgB,GAAE;IACnC,CAAC,CAAC,2BAAY;IACd,CAAC,CAAC,mBAAe,CAAsC,CAAC;AAEjD,8BAAS;AAClB,mDAO0B;AADxB,qHAAA,mBAAmB,OAAA;AAErB,yDAAmE;AAA1D,+IAAA,OAAO,OAAqB;AACrC,sEAI6C;AAH3C,4HAAA,0BAA0B,OAAA;AAI5B,yDAIkC;AAHhC,4GAAA,YAAY,OAAA;AAId,mEAAkE;AAAzD,sHAAA,iBAAiB,OAAA;AAC1B,yEAG0C;AAFxC,4HAAA,oBAAoB,OAAA;AAGtB,uEAIyC;AAHvC,0HAAA,mBAAmB,OAAA;AAIrB,uDAQ4B;AAP1B,oHAAA,gBAAgB,OAAA;AAQlB,sEAAqE;AAA5D,gHAAA,cAAc,OAAA;AACvB,4EAA2E;AAAlE,sHAAA,iBAAiB,OAAA;AAC1B,yDAAqE;AAA5D,4GAAA,YAAY,OAAA;AACrB,iEAAuE;AAA9D,8GAAA,UAAU,OAAA;AAAE,+GAAA,WAAW,OAAA;AAEhC,uEAAiF;AAAxE,uIAAA,OAAO,OAAiB;AACjC,4DAA2D;AAAlD,4GAAA,YAAY,OAAA;AAErB,0FAAoF;AAA3E,qIAAA,sBAAsB,OAAA"}
@@ -0,0 +1,82 @@
1
+ export interface RecycleKeyManager {
2
+ /**
3
+ * Retrieves a unique key for an item type, maintaining a separate pool for each type.
4
+ * If a stableId is provided and exists, returns the associated key.
5
+ * Otherwise, generates a new key or reuses one from the pool.
6
+ * @param itemType - The type/category of the item (e.g., 'header', 'product', 'footer')
7
+ * @param stableId - Optional unique identifier for stable item tracking
8
+ * @param currentKey - Optional current key to maintain if it exists in the pool
9
+ * @returns A unique key for the item
10
+ */
11
+ getKey: (itemType: string, stableId: string, currentKey?: string) => string;
12
+ /**
13
+ * Recycles a key back into its item type's pool when the associated view is no longer visible.
14
+ * This allows the key to be reused for new items of the same type.
15
+ * @param key - The key to be recycled back into the pool
16
+ */
17
+ recycleKey: (key: string) => void;
18
+ /**
19
+ * Checks if a key is currently available in the recycling pool (not in use).
20
+ * @param key - The key to check
21
+ * @returns True if the key is available in the pool, false otherwise
22
+ */
23
+ hasKeyInPool: (key: string) => boolean;
24
+ /**
25
+ * Clears all recycled keys from the pool, resetting the recycling system.
26
+ * This is useful when the list needs to be completely reset.
27
+ */
28
+ clearPool: () => void;
29
+ }
30
+ export declare class RecycleKeyManagerImpl implements RecycleKeyManager {
31
+ private maxItems;
32
+ private keyPools;
33
+ private keyMap;
34
+ private stableIdMap;
35
+ private keyCounter;
36
+ /**
37
+ * Creates a new RecycleKeyManager with a specified maximum number of items.
38
+ * @param maxItems - Maximum number of unique keys that can be active simultaneously.
39
+ * Defaults to Number.MAX_SAFE_INTEGER if not specified.
40
+ */
41
+ constructor(maxItems?: number);
42
+ /**
43
+ * Gets a key for the specified item type, prioritizing stable ID associations.
44
+ * If a stable ID exists, returns its associated key. Otherwise, either reuses
45
+ * a key from the pool or generates a new one.
46
+ * @param itemType - The type/category of the item
47
+ * @param stableId - Optional unique identifier for stable item tracking
48
+ * @param currentKey - Optional current key to maintain if it exists in the pool
49
+ * @returns A unique key for the item
50
+ */
51
+ getKey(itemType: string, stableId: string, currentKey?: string): string;
52
+ /**
53
+ * Recycles a key by adding it back to its item type's pool and cleaning up
54
+ * associated mappings. This should be called when a view is no longer visible.
55
+ * @param key - The key to be recycled
56
+ */
57
+ recycleKey(key: string): void;
58
+ /**
59
+ * Checks if a key is currently available in the recycling pool.
60
+ * @param key - The key to check
61
+ * @returns True if the key is available in the pool, false otherwise
62
+ */
63
+ hasKeyInPool(key: string): boolean;
64
+ /**
65
+ * Clears all recycled keys from the pool, effectively resetting the recycling system.
66
+ * This operation does not affect currently active keys.
67
+ */
68
+ clearPool(): void;
69
+ /**
70
+ * Generates a unique sequential key using an internal counter.
71
+ * @returns A unique key as a string
72
+ */
73
+ private generateKey;
74
+ /**
75
+ * Ensures the total number of active keys doesn't exceed the maximum limit.
76
+ * If the limit is exceeded, recycles the oldest keys until within bounds.
77
+ * Note: This operation may impact performance when dealing with large lists.
78
+ * TODO: Check performance impact of this
79
+ */
80
+ private ensurePoolSize;
81
+ }
82
+ //# sourceMappingURL=RecycleKeyManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecycleKeyManager.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RecycleKeyManager.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;OAQG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAE5E;;;;OAIG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC;;;;OAIG;IACH,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAEvC;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,qBAAsB,YAAW,iBAAiB;IAE7D,OAAO,CAAC,QAAQ,CAAS;IAGzB,OAAO,CAAC,QAAQ,CAA2B;IAG3C,OAAO,CAAC,MAAM,CAAuD;IAGrE,OAAO,CAAC,WAAW,CAAsB;IAGzC,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;OAIG;gBACS,QAAQ,GAAE,MAAgC;IAQtD;;;;;;;;OAQG;IACI,MAAM,CACX,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM;IAsCT;;;;OAIG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAwBpC;;;;OAIG;IACI,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzC;;;OAGG;IACI,SAAS;IAIhB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CAWvB"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecycleKeyManagerImpl = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var RecycleKeyManagerImpl = /** @class */ (function () {
6
+ /**
7
+ * Creates a new RecycleKeyManager with a specified maximum number of items.
8
+ * @param maxItems - Maximum number of unique keys that can be active simultaneously.
9
+ * Defaults to Number.MAX_SAFE_INTEGER if not specified.
10
+ */
11
+ function RecycleKeyManagerImpl(maxItems) {
12
+ if (maxItems === void 0) { maxItems = Number.MAX_SAFE_INTEGER; }
13
+ this.maxItems = maxItems;
14
+ this.keyPools = new Map();
15
+ this.keyMap = new Map();
16
+ this.stableIdMap = new Map();
17
+ this.keyCounter = 0;
18
+ }
19
+ /**
20
+ * Gets a key for the specified item type, prioritizing stable ID associations.
21
+ * If a stable ID exists, returns its associated key. Otherwise, either reuses
22
+ * a key from the pool or generates a new one.
23
+ * @param itemType - The type/category of the item
24
+ * @param stableId - Optional unique identifier for stable item tracking
25
+ * @param currentKey - Optional current key to maintain if it exists in the pool
26
+ * @returns A unique key for the item
27
+ */
28
+ RecycleKeyManagerImpl.prototype.getKey = function (itemType, stableId, currentKey) {
29
+ // Return existing key if stableId is already mapped
30
+ if (stableId && this.stableIdMap.has(stableId)) {
31
+ return this.stableIdMap.get(stableId);
32
+ }
33
+ // Get or create the pool for this item type
34
+ var pool = this.keyPools.get(itemType);
35
+ if (!pool) {
36
+ pool = new Set();
37
+ this.keyPools.set(itemType, pool);
38
+ }
39
+ var key;
40
+ // Reuse existing key from pool if available
41
+ if (pool.size > 0) {
42
+ key =
43
+ currentKey && pool.has(currentKey)
44
+ ? currentKey
45
+ : pool.values().next().value;
46
+ pool.delete(key);
47
+ }
48
+ else {
49
+ // Generate new key if pool is empty
50
+ key = this.generateKey();
51
+ }
52
+ // Update mappings with new key information
53
+ this.keyMap.set(key, { itemType: itemType, stableId: stableId });
54
+ if (stableId) {
55
+ this.stableIdMap.set(stableId, key);
56
+ }
57
+ // Ensure we don't exceed the maximum number of active keys
58
+ this.ensurePoolSize();
59
+ return key;
60
+ };
61
+ /**
62
+ * Recycles a key by adding it back to its item type's pool and cleaning up
63
+ * associated mappings. This should be called when a view is no longer visible.
64
+ * @param key - The key to be recycled
65
+ */
66
+ RecycleKeyManagerImpl.prototype.recycleKey = function (key) {
67
+ var keyInfo = this.keyMap.get(key);
68
+ if (!keyInfo) {
69
+ return;
70
+ }
71
+ var itemType = keyInfo.itemType, stableId = keyInfo.stableId;
72
+ // Clean up stable ID mapping if it exists
73
+ if (stableId) {
74
+ this.stableIdMap.delete(stableId);
75
+ }
76
+ // Add key back to its type's pool
77
+ var pool = this.keyPools.get(itemType);
78
+ if (!pool) {
79
+ pool = new Set();
80
+ this.keyPools.set(itemType, pool);
81
+ }
82
+ pool.add(key);
83
+ this.keyMap.delete(key);
84
+ };
85
+ /**
86
+ * Checks if a key is currently available in the recycling pool.
87
+ * @param key - The key to check
88
+ * @returns True if the key is available in the pool, false otherwise
89
+ */
90
+ RecycleKeyManagerImpl.prototype.hasKeyInPool = function (key) {
91
+ return !this.keyMap.has(key);
92
+ };
93
+ /**
94
+ * Clears all recycled keys from the pool, effectively resetting the recycling system.
95
+ * This operation does not affect currently active keys.
96
+ */
97
+ RecycleKeyManagerImpl.prototype.clearPool = function () {
98
+ this.keyPools.clear();
99
+ };
100
+ /**
101
+ * Generates a unique sequential key using an internal counter.
102
+ * @returns A unique key as a string
103
+ */
104
+ RecycleKeyManagerImpl.prototype.generateKey = function () {
105
+ return (this.keyCounter++).toString();
106
+ };
107
+ /**
108
+ * Ensures the total number of active keys doesn't exceed the maximum limit.
109
+ * If the limit is exceeded, recycles the oldest keys until within bounds.
110
+ * Note: This operation may impact performance when dealing with large lists.
111
+ * TODO: Check performance impact of this
112
+ */
113
+ RecycleKeyManagerImpl.prototype.ensurePoolSize = function () {
114
+ var e_1, _a;
115
+ if (this.keyMap.size <= this.maxItems)
116
+ return;
117
+ var keysToRecycle = Array.from(this.keyMap.keys()).slice(0, this.keyMap.size - this.maxItems);
118
+ try {
119
+ for (var keysToRecycle_1 = tslib_1.__values(keysToRecycle), keysToRecycle_1_1 = keysToRecycle_1.next(); !keysToRecycle_1_1.done; keysToRecycle_1_1 = keysToRecycle_1.next()) {
120
+ var key = keysToRecycle_1_1.value;
121
+ this.recycleKey(key);
122
+ }
123
+ }
124
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
125
+ finally {
126
+ try {
127
+ if (keysToRecycle_1_1 && !keysToRecycle_1_1.done && (_a = keysToRecycle_1.return)) _a.call(keysToRecycle_1);
128
+ }
129
+ finally { if (e_1) throw e_1.error; }
130
+ }
131
+ };
132
+ return RecycleKeyManagerImpl;
133
+ }());
134
+ exports.RecycleKeyManagerImpl = RecycleKeyManagerImpl;
135
+ //# sourceMappingURL=RecycleKeyManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecycleKeyManager.js","sourceRoot":"","sources":["../../src/recyclerview/RecycleKeyManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * RecyclerView is a high-performance list component that efficiently renders and recycles list items.
3
+ * It's designed to handle large lists with optimal memory usage and smooth scrolling.
4
+ */
5
+ import React from "react";
6
+ import { RecyclerViewProps } from "./RecyclerViewProps";
7
+ declare type RecyclerViewType = <T>(props: RecyclerViewProps<T> & {
8
+ ref?: React.Ref<any>;
9
+ }) => React.JSX.Element;
10
+ declare const RecyclerView: RecyclerViewType;
11
+ export { RecyclerView };
12
+ //# sourceMappingURL=RecyclerView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerView.d.ts","sourceRoot":"","sources":["../../src/recyclerview/RecyclerView.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KASN,MAAM,OAAO,CAAC;AAqBf,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAwcxD,aAAK,gBAAgB,GAAG,CAAC,CAAC,EACxB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAE,KACnD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;AAGvB,QAAA,MAAM,YAAY,kBAEG,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RecyclerView = void 0;
4
+ var tslib_1 = require("tslib");
5
+ /**
6
+ * RecyclerView is a high-performance list component that efficiently renders and recycles list items.
7
+ * It's designed to handle large lists with optimal memory usage and smooth scrolling.
8
+ */
9
+ var react_1 = tslib_1.__importStar(require("react"));
10
+ var react_native_1 = require("react-native");
11
+ var measureLayout_1 = require("./utils/measureLayout");
12
+ var RecyclerViewContextProvider_1 = require("./RecyclerViewContextProvider");
13
+ var useLayoutState_1 = require("./hooks/useLayoutState");
14
+ var useRecyclerViewManager_1 = require("./hooks/useRecyclerViewManager");
15
+ var useOnLoad_1 = require("./hooks/useOnLoad");
16
+ var ViewHolderCollection_1 = require("./ViewHolderCollection");
17
+ var CompatView_1 = require("./components/CompatView");
18
+ var useBoundDetection_1 = require("./hooks/useBoundDetection");
19
+ var adjustOffsetForRTL_1 = require("./utils/adjustOffsetForRTL");
20
+ var useSecondaryProps_1 = require("./hooks/useSecondaryProps");
21
+ var StickyHeaders_1 = require("./components/StickyHeaders");
22
+ var ScrollAnchor_1 = require("./components/ScrollAnchor");
23
+ var useRecyclerViewController_1 = require("./hooks/useRecyclerViewController");
24
+ /**
25
+ * Main RecyclerView component that handles list rendering, scrolling, and item recycling.
26
+ * @template T - The type of items in the list
27
+ */
28
+ var RecyclerViewComponent = function (props, ref) {
29
+ var _a;
30
+ // Destructure props and initialize refs
31
+ var horizontal = props.horizontal, renderItem = props.renderItem, data = props.data, extraData = props.extraData, onLoad = props.onLoad, CellRendererComponent = props.CellRendererComponent, overrideProps = props.overrideProps, refreshing = props.refreshing, onRefresh = props.onRefresh, progressViewOffset = props.progressViewOffset, ListEmptyComponent = props.ListEmptyComponent, ListHeaderComponent = props.ListHeaderComponent, ListHeaderComponentStyle = props.ListHeaderComponentStyle, ListFooterComponent = props.ListFooterComponent, ListFooterComponentStyle = props.ListFooterComponentStyle, ItemSeparatorComponent = props.ItemSeparatorComponent, renderScrollComponent = props.renderScrollComponent, onScroll = props.onScroll, disableRecycling = props.disableRecycling, style = props.style, stickyHeaderIndices = props.stickyHeaderIndices, maintainVisibleContentPosition = props.maintainVisibleContentPosition, onCommitLayoutEffect = props.onCommitLayoutEffect, rest = tslib_1.__rest(props, ["horizontal", "renderItem", "data", "extraData", "onLoad", "CellRendererComponent", "overrideProps", "refreshing", "onRefresh", "progressViewOffset", "ListEmptyComponent", "ListHeaderComponent", "ListHeaderComponentStyle", "ListFooterComponent", "ListFooterComponentStyle", "ItemSeparatorComponent", "renderScrollComponent", "onScroll", "disableRecycling", "style", "stickyHeaderIndices", "maintainVisibleContentPosition", "onCommitLayoutEffect"]);
32
+ // Core refs for managing scroll view, internal view, and child container
33
+ var scrollViewRef = (0, react_1.useRef)(null);
34
+ var internalViewRef = (0, react_1.useRef)(null);
35
+ var childContainerViewRef = (0, react_1.useRef)(null);
36
+ var containerViewSizeRef = (0, react_1.useRef)(undefined);
37
+ var pendingChildIds = (0, react_1.useRef)(new Set()).current;
38
+ // Track scroll position
39
+ var scrollY = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
40
+ // Refs for sticky headers and scroll anchoring
41
+ var stickyHeaderRef = (0, react_1.useRef)(null);
42
+ var scrollAnchorRef = (0, react_1.useRef)(null);
43
+ // State for managing layout and render updates
44
+ var _b = tslib_1.__read((0, useLayoutState_1.useLayoutState)(0), 2), _ = _b[0], setLayoutTreeId = _b[1];
45
+ var _c = tslib_1.__read((0, react_1.useState)(0), 2), __ = _c[0], setRenderId = _c[1];
46
+ // Map to store refs for each item in the list
47
+ var refHolder = (0, react_1.useMemo)(function () { return new Map(); }, []);
48
+ // Initialize core RecyclerView manager and content offset management
49
+ var recyclerViewManager = (0, useRecyclerViewManager_1.useRecyclerViewManager)(props).recyclerViewManager;
50
+ var _d = (0, useRecyclerViewController_1.useRecyclerViewController)(recyclerViewManager, ref, scrollViewRef, scrollAnchorRef, props), applyContentOffset = _d.applyContentOffset, applyInitialScrollIndex = _d.applyInitialScrollIndex;
51
+ // Initialize view holder collection ref
52
+ var viewHolderCollectionRef = (0, react_1.useRef)(null);
53
+ // Hook to handle list loading
54
+ (0, useOnLoad_1.useOnListLoad)(recyclerViewManager, onLoad);
55
+ // Hook to detect when scrolling reaches list bounds
56
+ var checkBounds = (0, useBoundDetection_1.useBoundDetection)(recyclerViewManager, props, scrollViewRef).checkBounds;
57
+ /**
58
+ * Initialize the RecyclerView by measuring and setting up the window size
59
+ * This effect runs when the component mounts or when layout changes
60
+ */
61
+ (0, react_1.useLayoutEffect)(function () {
62
+ if (internalViewRef.current && childContainerViewRef.current) {
63
+ // Measure the outer and inner container layouts
64
+ var outerViewLayout = (0, measureLayout_1.measureLayout)(internalViewRef.current, undefined);
65
+ var childViewLayout = (0, measureLayout_1.measureLayoutRelative)(childContainerViewRef.current, internalViewRef.current, undefined);
66
+ containerViewSizeRef.current = outerViewLayout;
67
+ // Calculate offset of first item
68
+ var firstItemOffset = horizontal
69
+ ? childViewLayout.x - outerViewLayout.x
70
+ : childViewLayout.y - outerViewLayout.y;
71
+ // Update the RecyclerView manager with window dimensions
72
+ recyclerViewManager.updateLayoutParams({
73
+ width: horizontal ? outerViewLayout.width : childViewLayout.width,
74
+ height: horizontal ? childViewLayout.height : outerViewLayout.height,
75
+ }, firstItemOffset);
76
+ }
77
+ });
78
+ /**
79
+ * Effect to handle layout updates for list items
80
+ * This ensures proper positioning and recycling of items
81
+ */
82
+ (0, react_1.useLayoutEffect)(function () {
83
+ var _a, _b;
84
+ if (pendingChildIds.size > 0) {
85
+ return;
86
+ }
87
+ var layoutInfo = Array.from(refHolder, function (_a) {
88
+ var _b = tslib_1.__read(_a, 2), index = _b[0], viewHolderRef = _b[1];
89
+ var layout = (0, measureLayout_1.measureLayout)(viewHolderRef.current, recyclerViewManager.getLayout(index));
90
+ //comapre height with stored layout
91
+ //const storedLayout = recyclerViewManager.getLayout(index);
92
+ // if (
93
+ // storedLayout.height !== layout.height &&
94
+ // storedLayout.isHeightMeasured
95
+ // ) {
96
+ // console.log(
97
+ // "height changed",
98
+ // index,
99
+ // layout.height,
100
+ // storedLayout.height
101
+ // );
102
+ // }
103
+ return { index: index, dimensions: layout };
104
+ });
105
+ if (recyclerViewManager.modifyChildrenLayout(layoutInfo, (_a = data === null || data === void 0 ? void 0 : data.length) !== null && _a !== void 0 ? _a : 0)) {
106
+ // Trigger re-render if layout modifications were made
107
+ setRenderId(function (prev) { return prev + 1; });
108
+ }
109
+ else {
110
+ //console.log("commitLayout");
111
+ // TODO: reduce perf impact of commitLayout
112
+ (_b = viewHolderCollectionRef.current) === null || _b === void 0 ? void 0 : _b.commitLayout();
113
+ applyContentOffset();
114
+ }
115
+ });
116
+ /**
117
+ * Scroll event handler that manages scroll position, velocity, and RTL support
118
+ */
119
+ var onScrollHandler = (0, react_1.useCallback)(function (event) {
120
+ var _a;
121
+ var velocity = event.nativeEvent.velocity;
122
+ var scrollOffset = horizontal
123
+ ? event.nativeEvent.contentOffset.x
124
+ : event.nativeEvent.contentOffset.y;
125
+ // Handle RTL (Right-to-Left) layout adjustments
126
+ if (react_native_1.I18nManager.isRTL && horizontal) {
127
+ scrollOffset = (0, adjustOffsetForRTL_1.adjustOffsetForRTL)(scrollOffset, event.nativeEvent.contentSize.width, event.nativeEvent.layoutMeasurement.width);
128
+ if (velocity) {
129
+ velocity = {
130
+ x: -velocity.x,
131
+ y: velocity.y,
132
+ };
133
+ }
134
+ }
135
+ // Update scroll position and trigger re-render if needed
136
+ if (recyclerViewManager.updateScrollOffset(scrollOffset, velocity)) {
137
+ setRenderId(function (prev) { return prev + 1; });
138
+ }
139
+ // Update sticky headers and check bounds
140
+ (_a = stickyHeaderRef.current) === null || _a === void 0 ? void 0 : _a.reportScrollEvent(event.nativeEvent);
141
+ checkBounds();
142
+ // Record interaction and compute item visibility
143
+ recyclerViewManager.recordInteraction();
144
+ recyclerViewManager.computeItemViewability();
145
+ // Call user-provided onScroll handler
146
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll(event);
147
+ }, [horizontal, recyclerViewManager]);
148
+ // Create context for child components
149
+ var recyclerViewContext = (0, react_1.useMemo)(function () {
150
+ return {
151
+ layout: function () {
152
+ setLayoutTreeId(function (prev) { return prev + 1; });
153
+ },
154
+ getRef: function () {
155
+ return ref;
156
+ },
157
+ getScrollViewRef: function () {
158
+ return scrollViewRef;
159
+ },
160
+ markChildLayoutAsPending: function (id) {
161
+ pendingChildIds.add(id);
162
+ },
163
+ unmarkChildLayoutAsPending: function (id) {
164
+ if (pendingChildIds.has(id)) {
165
+ pendingChildIds.delete(id);
166
+ recyclerViewContext.layout();
167
+ }
168
+ },
169
+ };
170
+ }, [setLayoutTreeId]);
171
+ var parentRecyclerViewContext = (0, RecyclerViewContextProvider_1.useRecyclerViewContext)();
172
+ var recyclerViewId = (0, react_1.useId)();
173
+ /**
174
+ * Validates that item dimensions match the expected layout
175
+ */
176
+ var validateItemSize = (0, react_1.useCallback)(function (index, size) {
177
+ var _a, _b, _c, _d;
178
+ var layout = recyclerViewManager.getLayout(index);
179
+ var width = Math.max(Math.min(layout.width, (_a = layout.maxWidth) !== null && _a !== void 0 ? _a : Infinity), (_b = layout.minWidth) !== null && _b !== void 0 ? _b : 0);
180
+ var height = Math.max(Math.min(layout.height, (_c = layout.maxHeight) !== null && _c !== void 0 ? _c : Infinity), (_d = layout.minHeight) !== null && _d !== void 0 ? _d : 0);
181
+ if ((0, measureLayout_1.areDimensionsNotEqual)(width, size.width) ||
182
+ (0, measureLayout_1.areDimensionsNotEqual)(height, size.height)) {
183
+ // console.log(
184
+ // "invalid size",
185
+ // index,
186
+ // width,
187
+ // size.width,
188
+ // height,
189
+ // size.height
190
+ // );
191
+ // TODO: Add a warning for missing useLayoutState
192
+ recyclerViewContext.layout();
193
+ }
194
+ }, [recyclerViewManager]);
195
+ // Get secondary props and components
196
+ var _e = (0, useSecondaryProps_1.useSecondaryProps)(props), refreshControl = _e.refreshControl, renderHeader = _e.renderHeader, renderFooter = _e.renderFooter, renderEmpty = _e.renderEmpty, CompatScrollView = _e.CompatScrollView;
197
+ if (!recyclerViewManager.getIsFirstLayoutComplete() &&
198
+ recyclerViewManager.getDataLength() > 0) {
199
+ parentRecyclerViewContext === null || parentRecyclerViewContext === void 0 ? void 0 : parentRecyclerViewContext.markChildLayoutAsPending(recyclerViewId);
200
+ }
201
+ // Render sticky headers if configured
202
+ var stickyHeaders = (0, react_1.useMemo)(function () {
203
+ if (data &&
204
+ data.length > 0 &&
205
+ stickyHeaderIndices &&
206
+ stickyHeaderIndices.length > 0) {
207
+ return (react_1.default.createElement(StickyHeaders_1.StickyHeaders, { stickyHeaderIndices: stickyHeaderIndices, data: data, renderItem: renderItem, scrollY: scrollY, stickyHeaderRef: stickyHeaderRef, recyclerViewManager: recyclerViewManager, extraData: extraData }));
208
+ }
209
+ return null;
210
+ }, [data, stickyHeaderIndices, renderItem, extraData]);
211
+ // Set up scroll event handling with animation support for sticky headers
212
+ var animatedEvent = (0, react_1.useMemo)(function () {
213
+ if (stickyHeaders) {
214
+ return react_native_1.Animated.event([{ nativeEvent: { contentOffset: { y: scrollY } } }], { useNativeDriver: true, listener: onScrollHandler });
215
+ }
216
+ return onScrollHandler;
217
+ }, [onScrollHandler, stickyHeaders]);
218
+ var maintainVisibleContentPositionInternal = (0, react_1.useMemo)(function () {
219
+ if ((maintainVisibleContentPosition === null || maintainVisibleContentPosition === void 0 ? void 0 : maintainVisibleContentPosition.disabled) || horizontal) {
220
+ return undefined;
221
+ }
222
+ else {
223
+ return tslib_1.__assign(tslib_1.__assign({}, maintainVisibleContentPosition), { minIndexForVisible: 0 });
224
+ }
225
+ }, [maintainVisibleContentPosition]);
226
+ var shouldRenderFromBottom = (_a = maintainVisibleContentPositionInternal === null || maintainVisibleContentPositionInternal === void 0 ? void 0 : maintainVisibleContentPositionInternal.startRenderingFromBottom) !== null && _a !== void 0 ? _a : false;
227
+ // Calculate minimum height adjustment for bottom rendering
228
+ var adjustmentMinHeight = recyclerViewManager.hasLayout()
229
+ ? Math.max(0, recyclerViewManager.getWindowSize().height -
230
+ recyclerViewManager.getChildContainerDimensions().height -
231
+ recyclerViewManager.firstItemOffset)
232
+ : 0;
233
+ // Create view for measuring bounded size
234
+ var viewToMeasureBoundedSize = (0, react_1.useMemo)(function () {
235
+ return (react_1.default.createElement(CompatView_1.CompatView, { style: {
236
+ height: horizontal ? undefined : 0,
237
+ width: horizontal ? 0 : undefined,
238
+ minHeight: shouldRenderFromBottom ? adjustmentMinHeight : undefined,
239
+ }, ref: childContainerViewRef }));
240
+ }, [horizontal, shouldRenderFromBottom, adjustmentMinHeight]);
241
+ //console.log("render");
242
+ // Render the main RecyclerView structure
243
+ return (react_1.default.createElement(RecyclerViewContextProvider_1.RecyclerViewContextProvider, { value: recyclerViewContext },
244
+ react_1.default.createElement(CompatView_1.CompatView, { style: tslib_1.__assign({ flex: horizontal ? undefined : 1 }, style), ref: internalViewRef, collapsable: false, onLayout: function (event) {
245
+ var _a, _b, _c, _d;
246
+ if ((0, measureLayout_1.areDimensionsNotEqual)(event.nativeEvent.layout.width, (_b = (_a = containerViewSizeRef.current) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0) ||
247
+ (0, measureLayout_1.areDimensionsNotEqual)(event.nativeEvent.layout.height, (_d = (_c = containerViewSizeRef.current) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0)) {
248
+ // console.log(
249
+ // "onLayout",
250
+ // recyclerViewManager.getWindowSize(),
251
+ // event.nativeEvent.layout
252
+ // );
253
+ recyclerViewContext.layout();
254
+ }
255
+ } },
256
+ react_1.default.createElement(CompatScrollView, tslib_1.__assign({}, rest, { horizontal: horizontal, ref: scrollViewRef, onScroll: animatedEvent,
257
+ // TODO: evaluate perf
258
+ maintainVisibleContentPosition: maintainVisibleContentPositionInternal, refreshControl: refreshControl }, overrideProps),
259
+ maintainVisibleContentPositionInternal && (react_1.default.createElement(ScrollAnchor_1.ScrollAnchor, { scrollAnchorRef: scrollAnchorRef })),
260
+ renderHeader,
261
+ viewToMeasureBoundedSize,
262
+ react_1.default.createElement(ViewHolderCollection_1.ViewHolderCollection, { viewHolderCollectionRef: viewHolderCollectionRef, data: data, horizontal: horizontal, renderStack: recyclerViewManager.getRenderStack(), getLayout: function (index) { return recyclerViewManager.getLayout(index); }, refHolder: refHolder, onSizeChanged: validateItemSize, renderItem: renderItem, extraData: extraData, onCommitLayoutEffect: function () {
263
+ applyInitialScrollIndex();
264
+ parentRecyclerViewContext === null || parentRecyclerViewContext === void 0 ? void 0 : parentRecyclerViewContext.unmarkChildLayoutAsPending(recyclerViewId);
265
+ onCommitLayoutEffect === null || onCommitLayoutEffect === void 0 ? void 0 : onCommitLayoutEffect();
266
+ }, onCommitEffect: function () {
267
+ applyInitialScrollIndex();
268
+ checkBounds();
269
+ recyclerViewManager.computeItemViewability();
270
+ recyclerViewManager.disableRecycling = Boolean(disableRecycling);
271
+ }, CellRendererComponent: CellRendererComponent, ItemSeparatorComponent: ItemSeparatorComponent, getChildContainerLayout: function () {
272
+ return recyclerViewManager.hasLayout()
273
+ ? recyclerViewManager.getChildContainerDimensions()
274
+ : undefined;
275
+ } }),
276
+ renderEmpty,
277
+ renderFooter),
278
+ stickyHeaders)));
279
+ };
280
+ // Create and export the memoized, forwarded ref component
281
+ var RecyclerView = react_1.default.memo((0, react_1.forwardRef)(RecyclerViewComponent));
282
+ exports.RecyclerView = RecyclerView;
283
+ //# sourceMappingURL=RecyclerView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RecyclerView.js","sourceRoot":"","sources":["../../src/recyclerview/RecyclerView.tsx"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,qDASe;AACf,6CAKsB;AAGtB,uDAI+B;AAC/B,6EAIuC;AACvC,yDAAwD;AACxD,yEAAwE;AAExE,+CAAkD;AAClD,+DAGgC;AAChC,sDAAqD;AAErD,+DAA8D;AAC9D,iEAAgE;AAChE,+DAA8D;AAC9D,4DAA4E;AAC5E,0DAA0E;AAC1E,+EAA8E;AAE9E;;;GAGG;AACH,IAAM,qBAAqB,GAAG,UAC5B,KAA2B,EAC3B,GAAmB;;IAEnB,wCAAwC;IAEtC,IAAA,UAAU,GAwBR,KAAK,WAxBG,EACV,UAAU,GAuBR,KAAK,WAvBG,EACV,IAAI,GAsBF,KAAK,KAtBH,EACJ,SAAS,GAqBP,KAAK,UArBE,EACT,MAAM,GAoBJ,KAAK,OApBD,EACN,qBAAqB,GAmBnB,KAAK,sBAnBc,EACrB,aAAa,GAkBX,KAAK,cAlBM,EACb,UAAU,GAiBR,KAAK,WAjBG,EACV,SAAS,GAgBP,KAAK,UAhBE,EACT,kBAAkB,GAehB,KAAK,mBAfW,EAClB,kBAAkB,GAchB,KAAK,mBAdW,EAClB,mBAAmB,GAajB,KAAK,oBAbY,EACnB,wBAAwB,GAYtB,KAAK,yBAZiB,EACxB,mBAAmB,GAWjB,KAAK,oBAXY,EACnB,wBAAwB,GAUtB,KAAK,yBAViB,EACxB,sBAAsB,GASpB,KAAK,uBATe,EACtB,qBAAqB,GAQnB,KAAK,sBARc,EACrB,QAAQ,GAON,KAAK,SAPC,EACR,gBAAgB,GAMd,KAAK,iBANS,EAChB,KAAK,GAKH,KAAK,MALF,EACL,mBAAmB,GAIjB,KAAK,oBAJY,EACnB,8BAA8B,GAG5B,KAAK,+BAHuB,EAC9B,oBAAoB,GAElB,KAAK,qBAFa,EACjB,IAAI,kBACL,KAAK,EAzBH,+bAyBL,CADQ,CACC;IAEV,yEAAyE;IACzE,IAAM,aAAa,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IACnD,IAAM,eAAe,GAAG,IAAA,cAAM,EAAa,IAAI,CAAC,CAAC;IACjD,IAAM,qBAAqB,GAAG,IAAA,cAAM,EAAa,IAAI,CAAC,CAAC;IACvD,IAAM,oBAAoB,GAAG,IAAA,cAAM,EAA0B,SAAS,CAAC,CAAC;IACxE,IAAM,eAAe,GAAG,IAAA,cAAM,EAAc,IAAI,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC;IAE/D,wBAAwB;IACxB,IAAM,OAAO,GAAG,IAAA,cAAM,EAAC,IAAI,uBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAEtD,+CAA+C;IAC/C,IAAM,eAAe,GAAG,IAAA,cAAM,EAAkB,IAAI,CAAC,CAAC;IACtD,IAAM,eAAe,GAAG,IAAA,cAAM,EAAkB,IAAI,CAAC,CAAC;IAEtD,+CAA+C;IACzC,IAAA,KAAA,eAAuB,IAAA,+BAAc,EAAC,CAAC,CAAC,IAAA,EAAvC,CAAC,QAAA,EAAE,eAAe,QAAqB,CAAC;IACzC,IAAA,KAAA,eAAoB,IAAA,gBAAQ,EAAC,CAAC,CAAC,IAAA,EAA9B,EAAE,QAAA,EAAE,WAAW,QAAe,CAAC;IAEtC,8CAA8C;IAC9C,IAAM,SAAS,GAAG,IAAA,eAAO,EACvB,cAAM,OAAA,IAAI,GAAG,EAAwC,EAA/C,CAA+C,EACrD,EAAE,CACH,CAAC;IAEF,qEAAqE;IAC7D,IAAA,mBAAmB,GAAK,IAAA,+CAAsB,EAAC,KAAK,CAAC,oBAAlC,CAAmC;IACxD,IAAA,KACJ,IAAA,qDAAyB,EACvB,mBAAmB,EACnB,GAAG,EACH,aAAa,EACb,eAAe,EACf,KAAK,CACN,EAPK,kBAAkB,wBAAA,EAAE,uBAAuB,6BAOhD,CAAC;IAEJ,wCAAwC;IACxC,IAAM,uBAAuB,GAAG,IAAA,cAAM,EAA0B,IAAI,CAAC,CAAC;IAEtE,8BAA8B;IAC9B,IAAA,yBAAa,EAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAE3C,oDAAoD;IAC5C,IAAA,WAAW,GAAK,IAAA,qCAAiB,EACvC,mBAAmB,EACnB,KAAK,EACL,aAAa,CACd,YAJkB,CAIjB;IAEF;;;OAGG;IACH,IAAA,uBAAe,EAAC;QACd,IAAI,eAAe,CAAC,OAAO,IAAI,qBAAqB,CAAC,OAAO,EAAE;YAC5D,gDAAgD;YAChD,IAAM,eAAe,GAAG,IAAA,6BAAa,EAAC,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC1E,IAAM,eAAe,GAAG,IAAA,qCAAqB,EAC3C,qBAAqB,CAAC,OAAO,EAC7B,eAAe,CAAC,OAAO,EACvB,SAAS,CACV,CAAC;YAEF,oBAAoB,CAAC,OAAO,GAAG,eAAe,CAAC;YAE/C,iCAAiC;YACjC,IAAM,eAAe,GAAG,UAAU;gBAChC,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC;gBACvC,CAAC,CAAC,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;YAE1C,yDAAyD;YACzD,mBAAmB,CAAC,kBAAkB,CACpC;gBACE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK;gBACjE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM;aACrE,EACD,eAAe,CAChB,CAAC;SACH;IACH,CAAC,CAAC,CAAC;IAEH;;;OAGG;IACH,IAAA,uBAAe,EAAC;;QACd,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE;YAC5B,OAAO;SACR;QACD,IAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAC,EAAsB;gBAAtB,KAAA,qBAAsB,EAArB,KAAK,QAAA,EAAE,aAAa,QAAA;YAC7D,IAAM,MAAM,GAAG,IAAA,6BAAa,EAC1B,aAAa,CAAC,OAAQ,EACtB,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CACrC,CAAC;YAEF,mCAAmC;YACnC,4DAA4D;YAC5D,OAAO;YACP,6CAA6C;YAC7C,kCAAkC;YAClC,MAAM;YACN,iBAAiB;YACjB,wBAAwB;YACxB,aAAa;YACb,qBAAqB;YACrB,0BAA0B;YAC1B,OAAO;YACP,IAAI;YACJ,OAAO,EAAE,KAAK,OAAA,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IACE,mBAAmB,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,mCAAI,CAAC,CAAC,EACvE;YACA,sDAAsD;YACtD,WAAW,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC;SACjC;aAAM;YACL,8BAA8B;YAC9B,2CAA2C;YAC3C,MAAA,uBAAuB,CAAC,OAAO,0CAAE,YAAY,EAAE,CAAC;YAChD,kBAAkB,EAAE,CAAC;SACtB;IACH,CAAC,CAAC,CAAC;IAEH;;OAEG;IACH,IAAM,eAAe,GAAG,IAAA,mBAAW,EACjC,UAAC,KAA8C;;QAC7C,IAAI,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC1C,IAAI,YAAY,GAAG,UAAU;YAC3B,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACnC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QAEtC,gDAAgD;QAChD,IAAI,0BAAW,CAAC,KAAK,IAAI,UAAU,EAAE;YACnC,YAAY,GAAG,IAAA,uCAAkB,EAC/B,YAAY,EACZ,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EACnC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAC1C,CAAC;YACF,IAAI,QAAQ,EAAE;gBACZ,QAAQ,GAAG;oBACT,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;oBACd,CAAC,EAAE,QAAQ,CAAC,CAAC;iBACd,CAAC;aACH;SACF;QAED,yDAAyD;QACzD,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE;YAClE,WAAW,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC;SACjC;QAED,yCAAyC;QACzC,MAAA,eAAe,CAAC,OAAO,0CAAE,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9D,WAAW,EAAE,CAAC;QAEd,iDAAiD;QACjD,mBAAmB,CAAC,iBAAiB,EAAE,CAAC;QACxC,mBAAmB,CAAC,sBAAsB,EAAE,CAAC;QAE7C,sCAAsC;QACtC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,KAAK,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAClC,CAAC;IAEF,sCAAsC;IACtC,IAAM,mBAAmB,GAAwB,IAAA,eAAO,EAAC;QACvD,OAAO;YACL,MAAM,EAAE;gBACN,eAAe,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,GAAG,CAAC,EAAR,CAAQ,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,EAAE;gBACN,OAAO,GAAG,CAAC;YACb,CAAC;YACD,gBAAgB,EAAE;gBAChB,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,wBAAwB,EAAE,UAAC,EAAU;gBACnC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;YACD,0BAA0B,EAAE,UAAC,EAAU;gBACrC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAC3B,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC3B,mBAAmB,CAAC,MAAM,EAAE,CAAC;iBAC9B;YACH,CAAC;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,IAAM,yBAAyB,GAAG,IAAA,oDAAsB,GAAE,CAAC;IAC3D,IAAM,cAAc,GAAG,IAAA,aAAK,GAAE,CAAC;IAE/B;;OAEG;IACH,IAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,UAAC,KAAa,EAAE,IAAiB;;QAC/B,IAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpD,IAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAA,MAAM,CAAC,QAAQ,mCAAI,QAAQ,CAAC,EACnD,MAAA,MAAM,CAAC,QAAQ,mCAAI,CAAC,CACrB,CAAC;QACF,IAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAA,MAAM,CAAC,SAAS,mCAAI,QAAQ,CAAC,EACrD,MAAA,MAAM,CAAC,SAAS,mCAAI,CAAC,CACtB,CAAC;QACF,IACE,IAAA,qCAAqB,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;YACxC,IAAA,qCAAqB,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAC1C;YACA,eAAe;YACf,oBAAoB;YACpB,WAAW;YACX,WAAW;YACX,gBAAgB;YAChB,YAAY;YACZ,gBAAgB;YAChB,KAAK;YACL,iDAAiD;YACjD,mBAAmB,CAAC,MAAM,EAAE,CAAC;SAC9B;IACH,CAAC,EACD,CAAC,mBAAmB,CAAC,CACtB,CAAC;IAEF,qCAAqC;IAC/B,IAAA,KAMF,IAAA,qCAAiB,EAAC,KAAK,CAAC,EAL1B,cAAc,oBAAA,EACd,YAAY,kBAAA,EACZ,YAAY,kBAAA,EACZ,WAAW,iBAAA,EACX,gBAAgB,sBACU,CAAC;IAE7B,IACE,CAAC,mBAAmB,CAAC,wBAAwB,EAAE;QAC/C,mBAAmB,CAAC,aAAa,EAAE,GAAG,CAAC,EACvC;QACA,yBAAyB,aAAzB,yBAAyB,uBAAzB,yBAAyB,CAAE,wBAAwB,CAAC,cAAc,CAAC,CAAC;KACrE;IAED,sCAAsC;IACtC,IAAM,aAAa,GAAG,IAAA,eAAO,EAAC;QAC5B,IACE,IAAI;YACJ,IAAI,CAAC,MAAM,GAAG,CAAC;YACf,mBAAmB;YACnB,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAC9B;YACA,OAAO,CACL,8BAAC,6BAAa,IACZ,mBAAmB,EAAE,mBAAmB,EACxC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,SAAS,EAAE,SAAS,GACpB,CACH,CAAC;SACH;QACD,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAEvD,yEAAyE;IACzE,IAAM,aAAa,GAAG,IAAA,eAAO,EAAC;QAC5B,IAAI,aAAa,EAAE;YACjB,OAAO,uBAAQ,CAAC,KAAK,CACnB,CAAC,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EACpD,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,CACrD,CAAC;SACH;QACD,OAAO,eAAe,CAAC;IACzB,CAAC,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAErC,IAAM,sCAAsC,GAAG,IAAA,eAAO,EAAC;QACrD,IAAI,CAAA,8BAA8B,aAA9B,8BAA8B,uBAA9B,8BAA8B,CAAE,QAAQ,KAAI,UAAU,EAAE;YAC1D,OAAO,SAAS,CAAC;SAClB;aAAM;YACL,6CACK,8BAA8B,KACjC,kBAAkB,EAAE,CAAC,IACrB;SACH;IACH,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAErC,IAAM,sBAAsB,GAC1B,MAAA,sCAAsC,aAAtC,sCAAsC,uBAAtC,sCAAsC,CAAE,wBAAwB,mCAAI,KAAK,CAAC;IAE5E,2DAA2D;IAC3D,IAAM,mBAAmB,GAAG,mBAAmB,CAAC,SAAS,EAAE;QACzD,CAAC,CAAC,IAAI,CAAC,GAAG,CACN,CAAC,EACD,mBAAmB,CAAC,aAAa,EAAE,CAAC,MAAM;YACxC,mBAAmB,CAAC,2BAA2B,EAAE,CAAC,MAAM;YACxD,mBAAmB,CAAC,eAAe,CACtC;QACH,CAAC,CAAC,CAAC,CAAC;IAEN,yCAAyC;IACzC,IAAM,wBAAwB,GAAG,IAAA,eAAO,EAAC;QACvC,OAAO,CACL,8BAAC,uBAAU,IACT,KAAK,EAAE;gBACL,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAClC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjC,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS;aACpE,EACD,GAAG,EAAE,qBAAqB,GAC1B,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,sBAAsB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE9D,wBAAwB;IAExB,yCAAyC;IACzC,OAAO,CACL,8BAAC,yDAA2B,IAAC,KAAK,EAAE,mBAAmB;QACrD,8BAAC,uBAAU,IACT,KAAK,qBAAI,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAK,KAAK,GACnD,GAAG,EAAE,eAAe,EACpB,WAAW,EAAE,KAAK,EAClB,QAAQ,EAAE,UAAC,KAAK;;gBACd,IACE,IAAA,qCAAqB,EACnB,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAC9B,MAAA,MAAA,oBAAoB,CAAC,OAAO,0CAAE,KAAK,mCAAI,CAAC,CACzC;oBACD,IAAA,qCAAqB,EACnB,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAC/B,MAAA,MAAA,oBAAoB,CAAC,OAAO,0CAAE,MAAM,mCAAI,CAAC,CAC1C,EACD;oBACA,eAAe;oBACf,gBAAgB;oBAEhB,yCAAyC;oBACzC,6BAA6B;oBAC7B,KAAK;oBACL,mBAAmB,CAAC,MAAM,EAAE,CAAC;iBAC9B;YACH,CAAC;YAED,8BAAC,gBAAgB,uBACX,IAAI,IACR,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,aAAa;gBACvB,sBAAsB;gBACtB,8BAA8B,EAC5B,sCAAsC,EAExC,cAAc,EAAE,cAAc,IAC1B,aAAa;gBAGhB,sCAAsC,IAAI,CACzC,8BAAC,2BAAY,IAAC,eAAe,EAAE,eAAe,GAAI,CACnD;gBACA,YAAY;gBACZ,wBAAwB;gBAEzB,8BAAC,2CAAoB,IACnB,uBAAuB,EAAE,uBAAuB,EAChD,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,mBAAmB,CAAC,cAAc,EAAE,EACjD,SAAS,EAAE,UAAC,KAAK,IAAK,OAAA,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,EAApC,CAAoC,EAC1D,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,gBAAgB,EAC/B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE;wBACpB,uBAAuB,EAAE,CAAC;wBAC1B,yBAAyB,aAAzB,yBAAyB,uBAAzB,yBAAyB,CAAE,0BAA0B,CACnD,cAAc,CACf,CAAC;wBACF,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,EAAI,CAAC;oBAC3B,CAAC,EACD,cAAc,EAAE;wBACd,uBAAuB,EAAE,CAAC;wBAC1B,WAAW,EAAE,CAAC;wBACd,mBAAmB,CAAC,sBAAsB,EAAE,CAAC;wBAC7C,mBAAmB,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;oBACnE,CAAC,EACD,qBAAqB,EAAE,qBAAqB,EAC5C,sBAAsB,EAAE,sBAAsB,EAC9C,uBAAuB,EAAE;wBACvB,OAAA,mBAAmB,CAAC,SAAS,EAAE;4BAC7B,CAAC,CAAC,mBAAmB,CAAC,2BAA2B,EAAE;4BACnD,CAAC,CAAC,SAAS;oBAFb,CAEa,GAEf;gBACD,WAAW;gBACX,YAAY,CACI;YAClB,aAAa,CACH,CACe,CAC/B,CAAC;AACJ,CAAC,CAAC;AAOF,0DAA0D;AAC1D,IAAM,YAAY,GAAG,eAAK,CAAC,IAAI,CAC7B,IAAA,kBAAU,EAAC,qBAAqB,CAAC,CACd,CAAC;AAEb,oCAAY"}