| ... | ... | @@ -204,7 +204,7 @@ index ce1fe00001c9e5aee6c6ea8bb2d4757d4586d002..3ccf6f16067152dfcb0c143371e2ec6a |
| 204 | 204 | * Number of columns to render items in. |
| 205 | 205 | * @default 1 |
| 206 | 206 | diff --git a/react-native.js b/react-native.js |
| 207 | | index b3c5a306b293f797a8b338adfca3060c0f6db22b..89077be4d6833cfaabf9d6d6205d9551505e32b4 100644 |
| 207 | index b3c5a306b293f797a8b338adfca3060c0f6db22b..4227ed22da8865b7493f47f199f4d8f4a5493efb 100644 |
| 208 | 208 | --- a/react-native.js |
| 209 | 209 | +++ b/react-native.js |
| 210 | 210 | @@ -954,7 +954,7 @@ function setInitialRenderState(ctx, { |
| ... | ... | @@ -513,14 +513,6 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..89077be4d6833cfaabf9d6d6205d9551 |
| 513 | 513 | estimatedItemSize = 100, |
| 514 | 514 | estimatedListSize, |
| 515 | 515 | extraData, |
| 516 | | @@ -7105,6 +7260,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 517 | | onLayout: onLayoutProp, |
| 518 | | onLoad, |
| 519 | | onMomentumScrollEnd, |
| 520 | | + onScrollBeginDrag, |
| 521 | | onRefresh, |
| 522 | | onScroll: onScrollProp, |
| 523 | | onScrollBeginDrag, |
| 524 | 516 | @@ -7200,7 +7356,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded |
| 525 | 517 | const combinedRef = useCombinedRef(refScroller, refScrollView); |
| 526 | 518 | const keyExtractor = keyExtractorProp != null ? keyExtractorProp : ((_item, index) => index.toString()); |
| ... | ... | @@ -925,6 +917,62 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..2d556eecb0bafe2f54084c809f82144c |
| 925 | 917 | onScroll: onScrollHandler, |
| 926 | 918 | recycleItems, |
| 927 | 919 | refreshControl: refreshControlElement ? stylePaddingTopState > 0 ? React2.cloneElement(refreshControlElement, { |
| 920 | diff --git a/react.js b/react.js |
| 921 | index 914d2dafaafa001c9ab6791a0a0581659295e333..06466096ceb96ef8773f7f7e202a19c9b774d49b 100644 |
| 922 | --- a/react.js |
| 923 | +++ b/react.js |
| 924 | @@ -4702,7 +4702,8 @@ function maybeUpdateAnchoredEndSpace(ctx) { |
| 925 | contentBelowAnchor = Math.max(0, contentBelowAnchor - ctx.scrollAxisGap); |
| 926 | contentBelowAnchor += (ctx.values.get("footerSize") || 0) + getStylePaddingEnd(state.props); |
| 927 | isReady = !hasUnknownTailSize; |
| 928 | - nextSize = hasUnknownTailSize ? previousSize || 0 : Math.max(0, state.scrollLength - contentBelowAnchor - anchorOffset); |
| 929 | + const knownSizeBound = Math.max(0, state.scrollLength - contentBelowAnchor - anchorOffset); |
| 930 | + nextSize = hasUnknownTailSize ? Math.min(previousSize || 0, knownSizeBound) : knownSizeBound; |
| 931 | } else if (anchorIndex >= 0) { |
| 932 | isReady = false; |
| 933 | } |
| 934 | @@ -4721,7 +4722,13 @@ function maybeUpdateAnchoredEndSpace(ctx) { |
| 935 | updateContentMetricsState(ctx); |
| 936 | updateScroll(ctx, state.scroll, true, { markHasScrolled: false }); |
| 937 | } |
| 938 | (_b = anchoredEndSpace == null ? void 0 : anchoredEndSpace.onReady) == null ? void 0 : _b.call(anchoredEndSpace, { anchorIndex: nextAnchorIndex, anchorKey: nextAnchorKey, size: nextSize }); |
| 939 | + } else if (!isReady && didSizeChange && nextSize < (previousSize || 0)) { |
| 940 | + set$(ctx, "anchoredEndSpaceSize", nextSize); |
| 941 | + (_a3 = anchoredEndSpace == null ? void 0 : anchoredEndSpace.onSizeChanged) == null ? void 0 : _a3.call(anchoredEndSpace, nextSize); |
| 942 | + if (anchoredEndSpace == null ? void 0 : anchoredEndSpace.includeInEndInset) { |
| 943 | + updateScroll(ctx, state.scroll, true, { markHasScrolled: false }); |
| 944 | + } |
| 945 | } |
| 946 | return nextSize; |
| 947 | } |
| 948 | diff --git a/react.mjs b/react.mjs |
| 949 | index 95465f2ab89ce41a10553f58af83618f7310e83c..4b5f06c60f1e8bbd9035a49980d9e86820262da4 100644 |
| 950 | --- a/react.mjs |
| 951 | +++ b/react.mjs |
| 952 | @@ -4681,7 +4681,8 @@ function maybeUpdateAnchoredEndSpace(ctx) { |
| 953 | contentBelowAnchor = Math.max(0, contentBelowAnchor - ctx.scrollAxisGap); |
| 954 | contentBelowAnchor += (ctx.values.get("footerSize") || 0) + getStylePaddingEnd(state.props); |
| 955 | isReady = !hasUnknownTailSize; |
| 956 | - nextSize = hasUnknownTailSize ? previousSize || 0 : Math.max(0, state.scrollLength - contentBelowAnchor - anchorOffset); |
| 957 | + const knownSizeBound = Math.max(0, state.scrollLength - contentBelowAnchor - anchorOffset); |
| 958 | + nextSize = hasUnknownTailSize ? Math.min(previousSize || 0, knownSizeBound) : knownSizeBound; |
| 959 | } else if (anchorIndex >= 0) { |
| 960 | isReady = false; |
| 961 | } |
| 962 | @@ -4700,7 +4701,13 @@ function maybeUpdateAnchoredEndSpace(ctx) { |
| 963 | updateContentMetricsState(ctx); |
| 964 | updateScroll(ctx, state.scroll, true, { markHasScrolled: false }); |
| 965 | } |
| 966 | (_b = anchoredEndSpace == null ? void 0 : anchoredEndSpace.onReady) == null ? void 0 : _b.call(anchoredEndSpace, { anchorIndex: nextAnchorIndex, anchorKey: nextAnchorKey, size: nextSize }); |
| 967 | + } else if (!isReady && didSizeChange && nextSize < (previousSize || 0)) { |
| 968 | + set$(ctx, "anchoredEndSpaceSize", nextSize); |
| 969 | + (_a3 = anchoredEndSpace == null ? void 0 : anchoredEndSpace.onSizeChanged) == null ? void 0 : _a3.call(anchoredEndSpace, nextSize); |
| 970 | + if (anchoredEndSpace == null ? void 0 : anchoredEndSpace.includeInEndInset) { |
| 971 | + updateScroll(ctx, state.scroll, true, { markHasScrolled: false }); |
| 972 | + } |
| 973 | } |
| 974 | return nextSize; |
| 975 | } |
| 928 | 976 | diff --git a/reanimated.d.ts b/reanimated.d.ts |
| 929 | 977 | index e5043320700b12f34f4c0babbc341f85ca8135c1..2ce63830a28636b21937a0741fd0e613dae950fe 100644 |
| 930 | 978 | --- a/reanimated.d.ts |