| … | … | @@ -3772,6 +3742,17 @@ export const ChatComposer = memo(function ChatComposer(props: ChatComposerProps) | |
| 3773 | 3743 | className="flex shrink-0 flex-nowrap items-center justify-end gap-2" | |
| 3774 | 3744 | > | |
| 3745 | + | {isComposerResting ? ( | |
| 3746 | + | <div | |
🟡 Medium chat/ChatComposer.tsx:3746
After a narrow collapsed-mobile layout moves settings into overflow, widening the window and scroll-collapsing the desktop composer still leaves them hidden despite ample space. The desktop container at line 3746 is not attached to attachRestingComposerControls, so useRestingComposerControlsLayout cannot measure it and retains the mobile hiddenBlockCount, iconOnlyBlockCount, and controlsVisible; measure this desktop container or reset the mobile-only layout state before using it.
No longer relevant as of 4f73c3f53f8ebe16348555c53ba7f7d6c511a33f
Note
🤖 Claude Opus 5.5 responding on behalf of Theo
Fixed in 4f73c3f53f. The resting layout hook only measures the collapsed mobile row, so ChatComposer now applies its hiddenBlockCount, iconOnlyBlockCount and controlsVisible only while that row shows (showInlineRestingControls). The compacted desktop row uses 0/0/visible and relies on truncation. Checked in the real app: at 280px a long effort label still overflows into the menu, and the compacted desktop row stays visible with nothing hidden.