apps/web/src/browser/BrowserSurfaceSlot.tsx | 13 ++-- apps/web/src/browser/ServerBrowserSurface.tsx | 6 +- apps/web/src/components/AnimatedHeight.tsx | 6 +- apps/web/src/components/BranchToolbar.tsx | 6 +- apps/web/src/components/ChatView.tsx | 16 ++--- apps/web/src/components/RightPanelTabs.tsx | 10 +-- apps/web/src/components/chat/AssistantCitationChip.tsx | 19 +++--- apps/web/src/components/chat/AssistantCitationSource.test.ts | 7 ++- apps/web/src/components/chat/AssistantCitationSource.tsx | 7 +-- apps/web/src/components/chat/ChatCanvas.tsx | 12 ++-- apps/web/src/components/chat/ChatComposer.tsx | 65 ++++++++----------- apps/web/src/components/chat/ChatHeader.tsx | 6 +- apps/web/src/components/chat/ComposerBannerStack.test.tsx | 6 +- apps/web/src/components/chat/ComposerBannerStack.tsx | 6 +- apps/web/src/components/chat/HtmlRenderFrame.tsx | 5 +- apps/web/src/components/chat/McpAppFrame.tsx | 5 +- apps/web/src/components/chat/MessagesTimeline.tsx | 12 ++-- apps/web/src/components/chat/ThreadDetailsCard.tsx | 5 +- apps/web/src/components/chat/useComposerMultilinePrompt.ts | 7 +-- apps/web/src/components/device/DeviceDuoViewport.tsx | 6 +- apps/web/src/components/device/DevicePhoneViewport.tsx | 6 +- apps/web/src/components/device/DeviceStreamView.tsx | 5 +- apps/web/src/components/preview/PreviewView.tsx | 5 +- apps/web/src/components/pullRequest/PullRequestCommentBody.tsx | 5 +- apps/web/src/components/sidebar/SidebarChrome.tsx | 5 +- apps/web/src/components/usage/UsageProviderChart.tsx | 8 +-- apps/web/src/hooks/useElementWidth.ts | 25 -------- apps/web/src/hooks/usePreviewPanelInlineSize.ts | 59 ++++++++---------- apps/web/src/lib/observeResize.ts | 107 ++++++++++++++++++++++++++++++++ apps/web/src/terminal/ghostty/surface.test.ts | 19 ++++-- apps/web/src/terminal/ghostty/surface.ts | 8 +-- oxlint-plugin-t3code/index.ts | 2 + oxlint-plugin-t3code/rules/no-raw-resize-observer.ts | 33 ++++++++++ vite.config.ts | 10 +++ 34 files changed, 311 insertions(+), 211 deletions(-)