| ... | @@ -679,10 +679,12 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread | ... | @@ -679,10 +679,12 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread |
| 679 | const isSplitLayout = layoutVariant === "split"; | 679 | const isSplitLayout = layoutVariant === "split"; |
| 680 | const contentMaxWidth = isSplitLayout ? CHAT_CONTENT_MAX_WIDTH : undefined; | 680 | const contentMaxWidth = isSplitLayout ? CHAT_CONTENT_MAX_WIDTH : undefined; |
| 681 | const workspaceContentWidth = useWorkspaceContentWidth(); | 681 | const workspaceContentWidth = useWorkspaceContentWidth(); |
| | 682 | // Clearing animated width can retain the unfolded width after Android resumes folded. |
| | 683 | // Assign both layouts explicitly so the dock always follows its current parent. |
| 682 | const composerWidthStyle = useAnimatedStyle(() => | 684 | const composerWidthStyle = useAnimatedStyle(() => |
| 683 | isSplitLayout && workspaceContentWidth !== null | 685 | isSplitLayout && workspaceContentWidth !== null |
| 684 | ? { width: workspaceContentWidth.value, right: undefined } | 686 | ? { width: workspaceContentWidth.value } |
| 685 | : { width: undefined, right: 0 }, | 687 | : { width: "100%" }, |
| 686 | ); | 688 | ); |
| 687 | const selectedInstanceId = props.selectedThread.modelSelection.instanceId; | 689 | const selectedInstanceId = props.selectedThread.modelSelection.instanceId; |
| 688 | useStreamingHaptics(props.selectedThread.id, props.selectedThreadFeed); | 690 | useStreamingHaptics(props.selectedThread.id, props.selectedThreadFeed); |
| ... | @@ -964,7 +966,7 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread | ... | @@ -964,7 +966,7 @@ export const ThreadDetailScreen = memo(function ThreadDetailScreen(props: Thread |
| 964 | <Animated.View | 966 | <Animated.View |
| 965 | layout={COMPOSER_LAYOUT_TRANSITION} | 967 | layout={COMPOSER_LAYOUT_TRANSITION} |
| 966 | pointerEvents="box-none" | 968 | pointerEvents="box-none" |
| 967 | style={[{ position: "absolute", bottom: 0, left: 0, right: 0 }, composerWidthStyle]} | 969 | style={[{ position: "absolute", bottom: 0, left: 0 }, composerWidthStyle]} |
| 968 | > | 970 | > |
| 969 | {/* No paddingTop here: the overlay's measured height becomes the | 971 | {/* No paddingTop here: the overlay's measured height becomes the |
| 970 | list's bottom inset, so any padding above the pill/composer | 972 | list's bottom inset, so any padding above the pill/composer |