authorgravatar for me@t3.ggTheo Browne <me@t3.gg> 2026-08-23 20:27:37-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-08-23 20:27:37-07:00
log643daa51616d0bfcd4c8235ae6966a68f106dcfe
tree1b7a57579d03a08c7625070fa2d882de7d151261
parent17dbe8dda3ba87eb83804bc93fc0cb945186d204
signature Signed by PGP key B5690EEEBB952194

fix(web): prevent expanded tool calls from hiding thread content (#8052)


2 files changed, 62 insertions(+), 14 deletions(-)

patches/@legendapp__list@3.3.5.patch+57-9
......@@ -204,7 +204,7 @@ index ce1fe00001c9e5aee6c6ea8bb2d4757d4586d002..3ccf6f16067152dfcb0c143371e2ec6a
204204 * Number of columns to render items in.
205205 * @default 1
206206diff --git a/react-native.js b/react-native.js
207index b3c5a306b293f797a8b338adfca3060c0f6db22b..89077be4d6833cfaabf9d6d6205d9551505e32b4 100644
207index b3c5a306b293f797a8b338adfca3060c0f6db22b..4227ed22da8865b7493f47f199f4d8f4a5493efb 100644
208208--- a/react-native.js
209209+++ b/react-native.js
210210@@ -954,7 +954,7 @@ function setInitialRenderState(ctx, {
......@@ -513,14 +513,6 @@ index b3c5a306b293f797a8b338adfca3060c0f6db22b..89077be4d6833cfaabf9d6d6205d9551
513513 estimatedItemSize = 100,
514514 estimatedListSize,
515515 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,
524516@@ -7200,7 +7356,7 @@ var LegendListInner = typedForwardRef(function LegendListInner2(props, forwarded
525517 const combinedRef = useCombinedRef(refScroller, refScrollView);
526518 const keyExtractor = keyExtractorProp != null ? keyExtractorProp : ((_item, index) => index.toString());
......@@ -925,6 +917,62 @@ index 40e87cda8c9bc79a889e5542f29af429a24b24d4..2d556eecb0bafe2f54084c809f82144c
925917 onScroll: onScrollHandler,
926918 recycleItems,
927919 refreshControl: refreshControlElement ? stylePaddingTopState > 0 ? React2.cloneElement(refreshControlElement, {
920diff --git a/react.js b/react.js
921index 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 }
948diff --git a/react.mjs b/react.mjs
949index 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 }
928976diff --git a/reanimated.d.ts b/reanimated.d.ts
929977index e5043320700b12f34f4c0babbc341f85ca8135c1..2ce63830a28636b21937a0741fd0e613dae950fe 100644
930978--- a/reanimated.d.ts
pnpm-lock.yaml+5-5
......@@ -84,7 +84,7 @@ patchedDependencies:
8484 '@effect/vitest@4.0.0-beta.103': a16b1e870d8c29e4a98b17cc4c638a4ff471753d8ca3487f78a22b759caf951b
8585 '@expo/metro-config@56.0.14': 8cb08b5bb7051ed9d2dbe46a2c293c5a1e17f1bd6ddf30de27909e18c921ff46
8686 '@ff-labs/fff-node@0.9.4': ab9ff544009e1891cfe3930105862d3699007f38922a79f3c98d90018deca368
87 '@legendapp/list@3.3.5': 6befc76c7f590a0b0915b531386ce7e3bbb364612868e1f04e4ac84f60a39ab5
87 '@legendapp/list@3.3.5': 3362284f1fca70407e7c594cb8db04086bfebff5de10568f85c08661d405deee
8888 '@pierre/diffs@1.3.0-beta.10': 7ef7cb0cbabb17c15cdb137554068b36f15f6f5265e73fb51452aa3380db91aa
8989 '@react-native-menu/menu@2.0.0': c7f66d121c726ade4f5c4e1aed11a691e5711d244c544084e289ac26132a0045
9090 '@react-native/gradle-plugin@0.85.3': c1b594a16e682d621b6a960926f8ce13fc92edfb397884cfe7fcb0518996a784
......@@ -224,7 +224,7 @@ importers:
224224 version: 56.0.18(3cdc0dde9f93166d952f1e1bd0cb25c0)
225225 '@legendapp/list':
226226 specifier: 'catalog:'
227 version: 3.3.5(patch_hash=6befc76c7f590a0b0915b531386ce7e3bbb364612868e1f04e4ac84f60a39ab5)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
227 version: 3.3.5(patch_hash=3362284f1fca70407e7c594cb8db04086bfebff5de10568f85c08661d405deee)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)
228228 '@noble/curves':
229229 specifier: 'catalog:'
230230 version: 1.9.1
......@@ -553,7 +553,7 @@ importers:
553553 version: 0.9.0
554554 '@legendapp/list':
555555 specifier: 'catalog:'
556 version: 3.3.5(patch_hash=6befc76c7f590a0b0915b531386ce7e3bbb364612868e1f04e4ac84f60a39ab5)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
556 version: 3.3.5(patch_hash=3362284f1fca70407e7c594cb8db04086bfebff5de10568f85c08661d405deee)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)
557557 '@lexical/react':
558558 specifier: ^0.41.0
559559 version: 0.41.0(react-dom@19.2.6(react@19.2.6))(react@19.2.6)(yjs@13.6.31)
......@@ -12946,7 +12946,7 @@ snapshots:
1294612946 dependencies:
1294712947 jsbi: 4.3.2
1294812948
12949 '@legendapp/list@3.3.5(patch_hash=6befc76c7f590a0b0915b531386ce7e3bbb364612868e1f04e4ac84f60a39ab5)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
12949 '@legendapp/list@3.3.5(patch_hash=3362284f1fca70407e7c594cb8db04086bfebff5de10568f85c08661d405deee)(react-dom@19.2.3(react@19.2.3))(react-native@0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6))(react@19.2.3)':
1295012950 dependencies:
1295112951 react: 19.2.3
1295212952 use-sync-external-store: 1.6.0(react@19.2.3)
......@@ -12954,7 +12954,7 @@ snapshots:
1295412954 react-dom: 19.2.3(react@19.2.3)
1295512955 react-native: 0.85.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7)(bufferutil@4.1.0)(utf-8-validate@6.0.6))(@types/react@19.2.16)(bufferutil@4.1.0)(react@19.2.3)(utf-8-validate@6.0.6)
1295612956
12957 '@legendapp/list@3.3.5(patch_hash=6befc76c7f590a0b0915b531386ce7e3bbb364612868e1f04e4ac84f60a39ab5)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
12957 '@legendapp/list@3.3.5(patch_hash=3362284f1fca70407e7c594cb8db04086bfebff5de10568f85c08661d405deee)(react-dom@19.2.6(react@19.2.6))(react@19.2.6)':
1295812958 dependencies:
1295912959 react: 19.2.6
1296012960 use-sync-external-store: 1.6.0(react@19.2.6)