| ... | ... | @@ -241,7 +241,7 @@ index ce1fe00001c9e5aee6c6ea8bb2d4757d4586d002..3ccf6f16067152dfcb0c143371e2ec6a |
| 241 | 241 | * Number of columns to render items in. |
| 242 | 242 | * @default 1 |
| 243 | 243 | diff --git a/react-native.js b/react-native.js |
| 244 | | index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df752a843de0 100644 |
| 244 | index b3c5a306b293f797a8b338adfca3060c0f6db22b..ddca4bcd8a5dc5863cb65e03b6cfac0047a8ead3 100644 |
| 245 | 245 | --- a/react-native.js |
| 246 | 246 | +++ b/react-native.js |
| 247 | 247 | @@ -717,6 +717,15 @@ function hasActiveInitialScroll(state) { |
| ... | ... | @@ -674,7 +674,19 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 674 | 674 | contentContainerStyle: [ |
| 675 | 675 | horizontal ? { height: "100%" } : {}, |
| 676 | 676 | contentContainerStyle, |
| 677 | | @@ -6751,7 +6950,7 @@ function createImperativeHandle(ctx, scheduleImperativeScrollCommit) { |
| 677 | @@ -6010,7 +6209,10 @@ var ListComponent = typedMemo(function ListComponent2({ |
| 678 | ], |
| 679 | contentOffset: initialContentOffset !== void 0 ? horizontal ? { x: initialContentOffset, y: 0 } : { x: 0, y: initialContentOffset } : void 0, |
| 680 | horizontal, |
| 681 | - maintainVisibleContentPosition: maintainVisibleContentPosition.size || maintainVisibleContentPosition.data ? { minIndexForVisible: 0 } : void 0, |
| 682 | + // Keep iOS anchored to ScrollAdjust even when JS position restoration is |
| 683 | + // disabled. Re-enabling native MVCP mid-drag can compare its stale anchor |
| 684 | + // with the 1e7 sentinel and scroll the entire list out of view. |
| 685 | + maintainVisibleContentPosition: Platform.OS === "ios" || maintainVisibleContentPosition.size || maintainVisibleContentPosition.data ? { minIndexForVisible: 0 } : void 0, |
| 686 | onLayout, |
| 687 | onScroll: onScroll2, |
| 688 | ref: refScrollView, |
| 689 | @@ -6751,7 +6953,7 @@ function createImperativeHandle(ctx, scheduleImperativeScrollCommit) { |
| 678 | 690 | endBuffered: state.endBuffered, |
| 679 | 691 | getAverageItemSizes: () => getAverageItemSizes(state), |
| 680 | 692 | indexByKey: (key) => state.indexByKey.get(key), |
| ... | ... | @@ -683,7 +695,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 683 | 695 | isAtStart: peek$(ctx, "isAtStart"), |
| 684 | 696 | isEndReached: state.isEndReached, |
| 685 | 697 | isNearEnd: peek$(ctx, "isNearEnd"), |
| 686 | | @@ -7075,6 +7274,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 698 | @@ -7075,6 +7277,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 687 | 699 | dataVersion, |
| 688 | 700 | drawDistance = 250, |
| 689 | 701 | contentInsetEndAdjustment, |
| ... | ... | @@ -691,7 +703,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 691 | 703 | estimatedItemSize = 100, |
| 692 | 704 | estimatedListSize, |
| 693 | 705 | extraData, |
| 694 | | @@ -7132,10 +7332,12 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 706 | @@ -7132,10 +7335,12 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 695 | 707 | const animatedPropsInternal = props.animatedPropsInternal; |
| 696 | 708 | const anchoredEndSpaceOwner = (_a3 = props.anchoredEndSpaceOwnerInternal) != null ? _a3 : "list"; |
| 697 | 709 | const positionComponentInternal = props.positionComponentInternal; |
| ... | ... | @@ -704,7 +716,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 704 | 716 | stickyPositionComponentInternal: _stickyPositionComponentInternal, |
| 705 | 717 | ...restProps |
| 706 | 718 | } = rest; |
| 707 | | @@ -7200,7 +7402,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 719 | @@ -7200,7 +7405,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 708 | 720 | const combinedRef = useCombinedRef(refScroller, refScrollView); |
| 709 | 721 | const keyExtractor = keyExtractorProp != null ? keyExtractorProp : ((_item, index) => index.toString()); |
| 710 | 722 | const stickyHeaderIndices = stickyHeaderIndicesProp; |
| ... | ... | @@ -713,7 +725,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 713 | 725 | const previousContentInsetEndAdjustmentRef = React2.useRef(contentInsetEndAdjustmentResolved); |
| 714 | 726 | const alwaysRenderIndices = React2.useMemo(() => { |
| 715 | 727 | const indices = getAlwaysRenderIndices(alwaysRender, dataProp, keyExtractor, anchoredEndSpace == null ? void 0 : anchoredEndSpace.anchorIndex); |
| 716 | | @@ -7341,6 +7543,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 728 | @@ -7341,6 +7546,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 717 | 729 | contentContainerAlignItems: contentContainerStyle.alignItems, |
| 718 | 730 | contentInset, |
| 719 | 731 | contentInsetEndAdjustment: contentInsetEndAdjustmentResolved, |
| ... | ... | @@ -721,7 +733,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 721 | 733 | data: dataProp, |
| 722 | 734 | dataKey, |
| 723 | 735 | dataVersion, |
| 724 | | @@ -7372,6 +7575,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 736 | @@ -7372,6 +7578,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 725 | 737 | renderItem, |
| 726 | 738 | rtl, |
| 727 | 739 | snapToIndices, |
| ... | ... | @@ -729,7 +741,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 729 | 741 | stickyHeaderIndicesArr: stickyHeaderIndices != null ? stickyHeaderIndices : [], |
| 730 | 742 | stickyHeaderIndicesSet: React2.useMemo(() => new Set(stickyHeaderIndices != null ? stickyHeaderIndices : []), [stickyHeaderIndices == null ? void 0 : stickyHeaderIndices.join(",")]), |
| 731 | 743 | stickyPositionComponentInternal, |
| 732 | | @@ -7423,6 +7627,13 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 744 | @@ -7423,6 +7630,13 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 733 | 745 | return void 0; |
| 734 | 746 | } |
| 735 | 747 | const resolvedOffset = (_a4 = initialScroll.contentOffset) != null ? _a4 : resolveInitialScrollOffset(ctx, initialScroll); |
| ... | ... | @@ -743,7 +755,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 743 | 755 | return usesBootstrapInitialScroll && ((_b2 = state.initialScrollSession) == null ? void 0 : _b2.kind) === "bootstrap" && Platform.OS === "web" ? void 0 : resolvedOffset; |
| 744 | 756 | }, [usesBootstrapInitialScroll]); |
| 745 | 757 | React2.useLayoutEffect(() => { |
| 746 | | @@ -7547,6 +7758,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 758 | @@ -7547,6 +7761,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 747 | 759 | [ |
| 748 | 760 | dataKey, |
| 749 | 761 | dataVersion, |
| ... | ... | @@ -751,7 +763,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 751 | 763 | memoizedLastItemKeys.join(","), |
| 752 | 764 | numColumnsProp, |
| 753 | 765 | nextScrollAxisGap, |
| 754 | | @@ -7643,6 +7855,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 766 | @@ -7643,6 +7858,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 755 | 767 | () => ({ |
| 756 | 768 | getRenderedItem: (key) => getRenderedItem(ctx, key), |
| 757 | 769 | onMomentumScrollEnd: (event) => { |
| ... | ... | @@ -759,7 +771,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 759 | 771 | checkFinishedScrollFallback(ctx); |
| 760 | 772 | if (state.props.onMomentumScrollEnd) { |
| 761 | 773 | state.props.onMomentumScrollEnd(event); |
| 762 | | @@ -7651,6 +7864,8 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 774 | @@ -7651,6 +7867,8 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 763 | 775 | onScroll: (event) => onScroll(ctx, event), |
| 764 | 776 | onScrollBeginDrag: (event) => { |
| 765 | 777 | var _a4, _b2; |
| ... | ... | @@ -768,7 +780,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 768 | 780 | prepareReachedEdgeForNextUserScroll(ctx); |
| 769 | 781 | (_b2 = (_a4 = state.props).onScrollBeginDrag) == null ? void 0 : _b2.call(_a4, event); |
| 770 | 782 | }, |
| 771 | | @@ -7676,11 +7891,18 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 783 | @@ -7676,11 +7894,18 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 772 | 784 | ListFooterComponent, |
| 773 | 785 | ListFooterComponentStyle, |
| 774 | 786 | ListHeaderComponent, |
| ... | ... | @@ -788,7 +800,7 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..24d0763aef074411eb7d17f0feb8df75 |
| 788 | 800 | recycleItems, |
| 789 | 801 | refreshControl: refreshControlElement ? stylePaddingTopState > 0 ? React2__namespace.cloneElement(refreshControlElement, { |
| 790 | 802 | diff --git a/react-native.mjs b/react-native.mjs |
| 791 | | index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff7e3ad022 100644 |
| 803 | index 40e87cda8c9bc79a889e5542f29af429a24b24d4..b8c6faf0be51cbda3e8af01f290dbe97440bc623 100644 |
| 792 | 804 | --- a/react-native.mjs |
| 793 | 805 | +++ b/react-native.mjs |
| 794 | 806 | @@ -696,6 +696,15 @@ function hasActiveInitialScroll(state) { |
| ... | ... | @@ -1221,7 +1233,19 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1221 | 1233 | contentContainerStyle: [ |
| 1222 | 1234 | horizontal ? { height: "100%" } : {}, |
| 1223 | 1235 | contentContainerStyle, |
| 1224 | | @@ -6730,7 +6929,7 @@ function createImperativeHandle(ctx, scheduleImperativeScrollCommit) { |
| 1236 | @@ -5989,7 +6188,10 @@ var ListComponent = typedMemo(function ListComponent2({ |
| 1237 | ], |
| 1238 | contentOffset: initialContentOffset !== void 0 ? horizontal ? { x: initialContentOffset, y: 0 } : { x: 0, y: initialContentOffset } : void 0, |
| 1239 | horizontal, |
| 1240 | - maintainVisibleContentPosition: maintainVisibleContentPosition.size || maintainVisibleContentPosition.data ? { minIndexForVisible: 0 } : void 0, |
| 1241 | + // Keep iOS anchored to ScrollAdjust even when JS position restoration is |
| 1242 | + // disabled. Re-enabling native MVCP mid-drag can compare its stale anchor |
| 1243 | + // with the 1e7 sentinel and scroll the entire list out of view. |
| 1244 | + maintainVisibleContentPosition: Platform.OS === "ios" || maintainVisibleContentPosition.size || maintainVisibleContentPosition.data ? { minIndexForVisible: 0 } : void 0, |
| 1245 | onLayout, |
| 1246 | onScroll: onScroll2, |
| 1247 | ref: refScrollView, |
| 1248 | @@ -6730,7 +6932,7 @@ function createImperativeHandle(ctx, scheduleImperativeScrollCommit) { |
| 1225 | 1249 | endBuffered: state.endBuffered, |
| 1226 | 1250 | getAverageItemSizes: () => getAverageItemSizes(state), |
| 1227 | 1251 | indexByKey: (key) => state.indexByKey.get(key), |
| ... | ... | @@ -1230,7 +1254,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1230 | 1254 | isAtStart: peek$(ctx, "isAtStart"), |
| 1231 | 1255 | isEndReached: state.isEndReached, |
| 1232 | 1256 | isNearEnd: peek$(ctx, "isNearEnd"), |
| 1233 | | @@ -7054,6 +7253,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1257 | @@ -7054,6 +7256,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1234 | 1258 | dataVersion, |
| 1235 | 1259 | drawDistance = 250, |
| 1236 | 1260 | contentInsetEndAdjustment, |
| ... | ... | @@ -1238,7 +1262,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1238 | 1262 | estimatedItemSize = 100, |
| 1239 | 1263 | estimatedListSize, |
| 1240 | 1264 | extraData, |
| 1241 | | @@ -7111,10 +7311,12 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1265 | @@ -7111,10 +7314,12 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1242 | 1266 | const animatedPropsInternal = props.animatedPropsInternal; |
| 1243 | 1267 | const anchoredEndSpaceOwner = (_a3 = props.anchoredEndSpaceOwnerInternal) != null ? _a3 : "list"; |
| 1244 | 1268 | const positionComponentInternal = props.positionComponentInternal; |
| ... | ... | @@ -1251,7 +1275,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1251 | 1275 | stickyPositionComponentInternal: _stickyPositionComponentInternal, |
| 1252 | 1276 | ...restProps |
| 1253 | 1277 | } = rest; |
| 1254 | | @@ -7179,7 +7381,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1278 | @@ -7179,7 +7384,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1255 | 1279 | const combinedRef = useCombinedRef(refScroller, refScrollView); |
| 1256 | 1280 | const keyExtractor = keyExtractorProp != null ? keyExtractorProp : ((_item, index) => index.toString()); |
| 1257 | 1281 | const stickyHeaderIndices = stickyHeaderIndicesProp; |
| ... | ... | @@ -1260,7 +1284,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1260 | 1284 | const previousContentInsetEndAdjustmentRef = useRef(contentInsetEndAdjustmentResolved); |
| 1261 | 1285 | const alwaysRenderIndices = useMemo(() => { |
| 1262 | 1286 | const indices = getAlwaysRenderIndices(alwaysRender, dataProp, keyExtractor, anchoredEndSpace == null ? void 0 : anchoredEndSpace.anchorIndex); |
| 1263 | | @@ -7320,6 +7522,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1287 | @@ -7320,6 +7525,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1264 | 1288 | contentContainerAlignItems: contentContainerStyle.alignItems, |
| 1265 | 1289 | contentInset, |
| 1266 | 1290 | contentInsetEndAdjustment: contentInsetEndAdjustmentResolved, |
| ... | ... | @@ -1268,7 +1292,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1268 | 1292 | data: dataProp, |
| 1269 | 1293 | dataKey, |
| 1270 | 1294 | dataVersion, |
| 1271 | | @@ -7351,6 +7554,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1295 | @@ -7351,6 +7557,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1272 | 1296 | renderItem, |
| 1273 | 1297 | rtl, |
| 1274 | 1298 | snapToIndices, |
| ... | ... | @@ -1276,7 +1300,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1276 | 1300 | stickyHeaderIndicesArr: stickyHeaderIndices != null ? stickyHeaderIndices : [], |
| 1277 | 1301 | stickyHeaderIndicesSet: useMemo(() => new Set(stickyHeaderIndices != null ? stickyHeaderIndices : []), [stickyHeaderIndices == null ? void 0 : stickyHeaderIndices.join(",")]), |
| 1278 | 1302 | stickyPositionComponentInternal, |
| 1279 | | @@ -7402,6 +7606,13 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1303 | @@ -7402,6 +7609,13 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1280 | 1304 | return void 0; |
| 1281 | 1305 | } |
| 1282 | 1306 | const resolvedOffset = (_a4 = initialScroll.contentOffset) != null ? _a4 : resolveInitialScrollOffset(ctx, initialScroll); |
| ... | ... | @@ -1290,7 +1314,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1290 | 1314 | return usesBootstrapInitialScroll && ((_b2 = state.initialScrollSession) == null ? void 0 : _b2.kind) === "bootstrap" && Platform.OS === "web" ? void 0 : resolvedOffset; |
| 1291 | 1315 | }, [usesBootstrapInitialScroll]); |
| 1292 | 1316 | useLayoutEffect(() => { |
| 1293 | | @@ -7526,6 +7737,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1317 | @@ -7526,6 +7740,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1294 | 1318 | [ |
| 1295 | 1319 | dataKey, |
| 1296 | 1320 | dataVersion, |
| ... | ... | @@ -1298,7 +1322,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1298 | 1322 | memoizedLastItemKeys.join(","), |
| 1299 | 1323 | numColumnsProp, |
| 1300 | 1324 | nextScrollAxisGap, |
| 1301 | | @@ -7622,6 +7834,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1325 | @@ -7622,6 +7837,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1302 | 1326 | () => ({ |
| 1303 | 1327 | getRenderedItem: (key) => getRenderedItem(ctx, key), |
| 1304 | 1328 | onMomentumScrollEnd: (event) => { |
| ... | ... | @@ -1306,7 +1330,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1306 | 1330 | checkFinishedScrollFallback(ctx); |
| 1307 | 1331 | if (state.props.onMomentumScrollEnd) { |
| 1308 | 1332 | state.props.onMomentumScrollEnd(event); |
| 1309 | | @@ -7630,6 +7843,8 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1333 | @@ -7630,6 +7846,8 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1310 | 1334 | onScroll: (event) => onScroll(ctx, event), |
| 1311 | 1335 | onScrollBeginDrag: (event) => { |
| 1312 | 1336 | var _a4, _b2; |
| ... | ... | @@ -1315,7 +1339,7 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..90e0d1a9dfd07d0212aae308f547b9ff |
| 1315 | 1339 | prepareReachedEdgeForNextUserScroll(ctx); |
| 1316 | 1340 | (_b2 = (_a4 = state.props).onScrollBeginDrag) == null ? void 0 : _b2.call(_a4, event); |
| 1317 | 1341 | }, |
| 1318 | | @@ -7655,11 +7870,18 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1342 | @@ -7655,11 +7873,18 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 1319 | 1343 | ListFooterComponent, |
| 1320 | 1344 | ListFooterComponentStyle, |
| 1321 | 1345 | ListHeaderComponent, |