| ... | @@ -627,6 +627,7 @@ const markdownLinkStyles = StyleSheet.create({ | ... | @@ -627,6 +627,7 @@ const markdownLinkStyles = StyleSheet.create({ |
| 627 | height: 14, | 627 | height: 14, |
| 628 | marginHorizontal: 3, | 628 | marginHorizontal: 3, |
| 629 | transform: [{ translateY: 2 }], | 629 | transform: [{ translateY: 2 }], |
| | 630 | flexShrink: 0, |
| 630 | }, | 631 | }, |
| 631 | favicon: { | 632 | favicon: { |
| 632 | borderRadius: 3, | 633 | borderRadius: 3, |
| ... | @@ -1155,7 +1156,7 @@ function useMarkdownStyles( | ... | @@ -1155,7 +1156,7 @@ function useMarkdownStyles( |
| 1155 | > | 1156 | > |
| 1156 | {ordered ? `${start + index}.` : "•"} | 1157 | {ordered ? `${start + index}.` : "•"} |
| 1157 | </NativeText> | 1158 | </NativeText> |
| 1158 | <View className="min-w-0 flex-1"> | 1159 | <View className="min-w-0 flex-1 shrink overflow-hidden"> |
| 1159 | <Renderer node={child} depth={1} inListItem parentIsText={false} /> | 1160 | <Renderer node={child} depth={1} inListItem parentIsText={false} /> |
| 1160 | </View> | 1161 | </View> |
| 1161 | </View> | 1162 | </View> |
| ... | @@ -1684,10 +1685,14 @@ function renderFeedEntry( | ... | @@ -1684,10 +1685,14 @@ function renderFeedEntry( |
| 1684 | return null; | 1685 | return null; |
| 1685 | } | 1686 | } |
| 1686 | | 1687 | |
| | 1688 | // Assistant messages hit the same Android unclamped-pass bug as user |
| | 1689 | // bubbles: wide markdown blocks cause children to be positioned at |
| | 1690 | // intrinsic width before the container is clamped, overlapping the |
| | 1691 | // timestamp/copy button row. Pinning the width removes that pass. |
| 1687 | const enterAnimated = isFreshTimestamp(message.createdAt); | 1692 | const enterAnimated = isFreshTimestamp(message.createdAt); |
| 1688 | return ( | 1693 | return ( |
| 1689 | <Animated.View | 1694 | <Animated.View |
| 1690 | className={cn(showAssistantMeta ? "mb-5 px-1" : "mb-1 px-1")} | 1695 | className={cn(showAssistantMeta ? "mb-5 px-1" : "mb-1 px-1", hasWideBlock && "w-full")} |
| 1691 | {...(enterAnimated ? { entering: FadeIn.duration(220) } : {})} | 1696 | {...(enterAnimated ? { entering: FadeIn.duration(220) } : {})} |
| 1692 | > | 1697 | > |
| 1693 | {renderedText.trim().length > 0 ? ( | 1698 | {renderedText.trim().length > 0 ? ( |