From d5da7ef46e99934e1c8215af0a191239a23693ab Mon Sep 17 00:00:00 2001 From: Theodore Li Date: Tue, 17 Mar 2026 10:59:59 -0700 Subject: [PATCH 1/4] fix(ui): ensure new resource tab button is always visible --- .../resource-tabs/resource-tabs.tsx | 192 +++++++++--------- 1 file changed, 97 insertions(+), 95 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx index fc283c44f1a..1b3fc2ec171 100644 --- a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx +++ b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx @@ -273,103 +273,105 @@ export function ResourceTabs({

Collapse

-
{ - e.preventDefault() - startEdgeScroll(e.clientX) - }} - onDrop={handleDrop} - > - {resources.map((resource, idx) => { - const config = getResourceConfig(resource.type) - const displayName = nameLookup.get(`${resource.type}:${resource.id}`) ?? resource.title - const isActive = activeId === resource.id - const isHovered = hoveredTabId === resource.id - const isDragging = draggedIdx === idx - const showGapBefore = - dropGapIdx === idx && - draggedIdx !== null && - draggedIdx !== idx && - draggedIdx !== idx - 1 - const showGapAfter = - idx === resources.length - 1 && - dropGapIdx === resources.length && - draggedIdx !== null && - draggedIdx !== idx +
+
{ + e.preventDefault() + startEdgeScroll(e.clientX) + }} + onDrop={handleDrop} + > + {resources.map((resource, idx) => { + const config = getResourceConfig(resource.type) + const displayName = nameLookup.get(`${resource.type}:${resource.id}`) ?? resource.title + const isActive = activeId === resource.id + const isHovered = hoveredTabId === resource.id + const isDragging = draggedIdx === idx + const showGapBefore = + dropGapIdx === idx && + draggedIdx !== null && + draggedIdx !== idx && + draggedIdx !== idx - 1 + const showGapAfter = + idx === resources.length - 1 && + dropGapIdx === resources.length && + draggedIdx !== null && + draggedIdx !== idx - return ( -
- {showGapBefore && ( -
- )} - - - - - -

{displayName}

-
-
- {showGapAfter && ( -
- )} -
- ) - })} + + + + + )} + + + +

{displayName}

+
+ + {showGapAfter && ( +
+ )} +
+ ) + })} +
{chatId && ( Date: Tue, 17 Mar 2026 11:03:57 -0700 Subject: [PATCH 2/4] Fix vertical scroll input scrolling tabs horizontally --- .../components/resource-tabs/resource-tabs.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx index 1b3fc2ec171..cbb46a444b2 100644 --- a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx +++ b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx @@ -93,18 +93,20 @@ export function ResourceTabs({ const PreviewModeIcon = PREVIEW_MODE_ICONS[previewMode ?? 'split'] const nameLookup = useResourceNameLookup(workspaceId) const scrollNodeRef = useRef(null) + const wrapperRef = useRef(null) useEffect(() => { - const node = scrollNodeRef.current - if (!node) return + const wrapper = wrapperRef.current + const scrollNode = scrollNodeRef.current + if (!wrapper || !scrollNode) return const handler = (e: WheelEvent) => { if (e.deltaY !== 0) { - node.scrollLeft += e.deltaY + scrollNode.scrollLeft += e.deltaY e.preventDefault() } } - node.addEventListener('wheel', handler, { passive: false }) - return () => node.removeEventListener('wheel', handler) + wrapper.addEventListener('wheel', handler, { passive: false }) + return () => wrapper.removeEventListener('wheel', handler) }, []) const addResource = useAddChatResource(chatId) @@ -273,7 +275,7 @@ export function ResourceTabs({

Collapse

-
+
Date: Tue, 17 Mar 2026 11:10:56 -0700 Subject: [PATCH 3/4] Fix incorrect tool tip on file edit button --- .../components/resource-tabs/resource-tabs.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx index cbb46a444b2..8ef865fcad2 100644 --- a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx +++ b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx @@ -41,6 +41,12 @@ const PREVIEW_MODE_ICONS = { preview: Pencil, } satisfies Record) => ReactNode> +const PREVIEW_MODE_LABELS: Record = { + editor: 'Split Mode', + split: 'Preview Mode', + preview: 'Edit Mode', +} + /** * Builds a `type:id` -> current name lookup from live query data so resource * tabs always reflect the latest name even after a rename. @@ -399,7 +405,7 @@ export function ResourceTabs({ -

Preview mode

+

{PREVIEW_MODE_LABELS[previewMode]}

)} From 96e48005d96d55515933d374964b6cfdd5e8e6d7 Mon Sep 17 00:00:00 2001 From: Theodore Li Date: Tue, 17 Mar 2026 11:13:35 -0700 Subject: [PATCH 4/4] Fix lint, attach scroll listener to tabs themselves --- .../components/resource-tabs/resource-tabs.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx index 8ef865fcad2..546d8796efa 100644 --- a/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx +++ b/apps/sim/app/workspace/[workspaceId]/home/components/mothership-view/components/resource-tabs/resource-tabs.tsx @@ -99,20 +99,18 @@ export function ResourceTabs({ const PreviewModeIcon = PREVIEW_MODE_ICONS[previewMode ?? 'split'] const nameLookup = useResourceNameLookup(workspaceId) const scrollNodeRef = useRef(null) - const wrapperRef = useRef(null) useEffect(() => { - const wrapper = wrapperRef.current - const scrollNode = scrollNodeRef.current - if (!wrapper || !scrollNode) return + const node = scrollNodeRef.current + if (!node) return const handler = (e: WheelEvent) => { if (e.deltaY !== 0) { - scrollNode.scrollLeft += e.deltaY + node.scrollLeft += e.deltaY e.preventDefault() } } - wrapper.addEventListener('wheel', handler, { passive: false }) - return () => wrapper.removeEventListener('wheel', handler) + node.addEventListener('wheel', handler, { passive: false }) + return () => node.removeEventListener('wheel', handler) }, []) const addResource = useAddChatResource(chatId) @@ -281,7 +279,7 @@ export function ResourceTabs({

Collapse

-
+