From 3bd2750d2248cb2a54ffc8aebad7c5660ad530b2 Mon Sep 17 00:00:00 2001 From: Theodore Li Date: Tue, 17 Mar 2026 11:33:58 -0700 Subject: [PATCH] fix(ui): ensure new resource tab button is always visible (#3633) * fix(ui): ensure new resource tab button is always visible * Fix vertical scroll input scrolling tabs horizontally * Fix incorrect tool tip on file edit button * Fix lint, attach scroll listener to tabs themselves --------- Co-authored-by: Theodore Li --- .../resource-tabs/resource-tabs.tsx | 200 +++++++++--------- 1 file changed, 104 insertions(+), 96 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 fc283c44f1..546d8796ef 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. @@ -273,103 +279,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 && ( -

Preview mode

+

{PREVIEW_MODE_LABELS[previewMode]}

)}