From 9dfd5c4b8381bc901ff181529b931eb803728039 Mon Sep 17 00:00:00 2001 From: Emir Karabeg Date: Wed, 14 Jan 2026 09:46:11 -0800 Subject: [PATCH] improvement(action-bar): ui/ux --- .../[workspaceId]/utils/commands-utils.ts | 6 ++ .../components/action-bar/action-bar.tsx | 72 +++++++++++++------ .../w/components/sidebar/sidebar.tsx | 2 +- 3 files changed, 59 insertions(+), 21 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/utils/commands-utils.ts b/apps/sim/app/workspace/[workspaceId]/utils/commands-utils.ts index da68876e2..eda6cdda0 100644 --- a/apps/sim/app/workspace/[workspaceId]/utils/commands-utils.ts +++ b/apps/sim/app/workspace/[workspaceId]/utils/commands-utils.ts @@ -19,6 +19,7 @@ export type CommandId = | 'clear-terminal-console' | 'focus-toolbar-search' | 'clear-notifications' + | 'fit-to-view' /** * Static metadata for a global command. @@ -104,6 +105,11 @@ export const COMMAND_DEFINITIONS: Record = { shortcut: 'Mod+E', allowInEditable: false, }, + 'fit-to-view': { + id: 'fit-to-view', + shortcut: 'Mod+Shift+F', + allowInEditable: false, + }, } /** diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx index d123954f1..68e07876b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx @@ -1,13 +1,14 @@ 'use client' -import { useRef, useState } from 'react' +import { useCallback, useRef, useState } from 'react' import { createLogger } from '@sim/logger' +import clsx from 'clsx' +import { Scan } from 'lucide-react' import { useReactFlow } from 'reactflow' import { Button, ChevronDown, Cursor, - Expand, Hand, Popover, PopoverAnchor, @@ -19,11 +20,14 @@ import { Undo, } from '@/components/emcn' import { useSession } from '@/lib/auth/auth-client' +import { useRegisterGlobalCommands } from '@/app/workspace/[workspaceId]/providers/global-commands-provider' +import { createCommand } from '@/app/workspace/[workspaceId]/utils/commands-utils' import { useUpdateGeneralSetting } from '@/hooks/queries/general-settings' import { useCanvasViewport } from '@/hooks/use-canvas-viewport' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' import { useCanvasModeStore } from '@/stores/canvas-mode' import { useGeneralStore } from '@/stores/settings/general' +import { useTerminalStore } from '@/stores/terminal' import { useUndoRedoStore } from '@/stores/undo-redo' import { useWorkflowRegistry } from '@/stores/workflows/registry/store' @@ -36,6 +40,7 @@ export function ActionBar() { const { undo, redo } = useCollaborativeWorkflow() const showActionBar = useGeneralStore((s) => s.showActionBar) const updateSetting = useUpdateGeneralSetting() + const isTerminalResizing = useTerminalStore((state) => state.isResizing) const { activeWorkflowId } = useWorkflowRegistry() const { data: session } = useSession() @@ -46,6 +51,17 @@ export function ActionBar() { const canUndo = stack.undo.length > 0 const canRedo = stack.redo.length > 0 + const handleFitToView = useCallback(() => { + fitViewToBounds({ padding: 0.1, duration: 300 }) + }, [fitViewToBounds]) + + useRegisterGlobalCommands([ + createCommand({ + id: 'fit-to-view', + handler: handleFitToView, + }), + ]) + const [contextMenu, setContextMenu] = useState<{ x: number; y: number } | null>(null) const [isCanvasModeOpen, setIsCanvasModeOpen] = useState(false) const menuRef = useRef(null) @@ -72,7 +88,14 @@ export function ActionBar() { return ( <>
{/* Canvas Mode Selector */} @@ -82,20 +105,27 @@ export function ActionBar() { variant='secondary' size='sm' > - -
- - -
-
+ + +
+ + + + +
+
+ {mode === 'hand' ? 'Mover' : 'Pointer'} +
{ @@ -159,12 +189,14 @@ export function ActionBar() { - Zoom to fit + + Fit to View +
diff --git a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx index cb4b7a5bf..a6764f1a4 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/components/sidebar/sidebar.tsx @@ -489,7 +489,7 @@ export function Sidebar() { <> {isCollapsed ? ( /* Floating collapsed header - minimal pill showing workspace name and expand toggle */ -
+