diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/pane-context-menu.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/pane-context-menu.tsx
index dde87e5a56..96b36e3bb0 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/pane-context-menu.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/pane-context-menu.tsx
@@ -24,9 +24,11 @@ export function PaneContextMenu({
onAddBlock,
onAutoLayout,
onOpenLogs,
- onOpenVariables,
- onOpenChat,
+ onToggleVariables,
+ onToggleChat,
onInvite,
+ isVariablesOpen = false,
+ isChatOpen = false,
hasClipboard = false,
disableEdit = false,
disableAdmin = false,
@@ -125,19 +127,19 @@ export function PaneContextMenu({
{
- onOpenVariables()
+ onToggleVariables()
onClose()
}}
>
- Variables
+ {isVariablesOpen ? 'Close Variables' : 'Open Variables'}
{
- onOpenChat()
+ onToggleChat()
onClose()
}}
>
- Open Chat
+ {isChatOpen ? 'Close Chat' : 'Open Chat'}
{/* Admin action */}
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/types.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/types.ts
index e607e0361e..53b5246cc4 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/types.ts
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/context-menu/types.ts
@@ -77,9 +77,13 @@ export interface PaneContextMenuProps {
onAddBlock: () => void
onAutoLayout: () => void
onOpenLogs: () => void
- onOpenVariables: () => void
- onOpenChat: () => void
+ onToggleVariables: () => void
+ onToggleChat: () => void
onInvite: () => void
+ /** Whether the variables panel is currently open */
+ isVariablesOpen?: boolean
+ /** Whether the chat panel is currently open */
+ isChatOpen?: boolean
/** Whether clipboard has content for pasting */
hasClipboard?: boolean
/** Whether edit actions are disabled (no permission) */
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx
index e77d956fdd..1d7ead5c53 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/workflow-block.tsx
@@ -911,7 +911,7 @@ export const WorkflowBlock = memo(function WorkflowBlock({
type,
config.category,
displayTriggerMode,
- subBlockRows.length,
+ subBlockRows.reduce((acc, row) => acc + row.length, 0),
conditionRows.length,
routerRows.length,
horizontalHandles,
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx
index ecec650641..7e111a697c 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/workflow.tsx
@@ -257,6 +257,10 @@ const WorkflowContent = React.memo(() => {
const snapToGridSize = useGeneralStore((state) => state.snapToGridSize)
const snapToGrid = snapToGridSize > 0
+
+ // Panel open states for context menu
+ const isVariablesOpen = useVariablesStore((state) => state.isOpen)
+ const isChatOpen = useChatStore((state) => state.isChatOpen)
const snapGrid: [number, number] = useMemo(
() => [snapToGridSize, snapToGridSize],
[snapToGridSize]
@@ -754,12 +758,14 @@ const WorkflowContent = React.memo(() => {
router.push(`/workspace/${workspaceId}/logs?workflowIds=${workflowIdParam}`)
}, [router, workspaceId, workflowIdParam])
- const handleContextOpenVariables = useCallback(() => {
- useVariablesStore.getState().setIsOpen(true)
+ const handleContextToggleVariables = useCallback(() => {
+ const { isOpen, setIsOpen } = useVariablesStore.getState()
+ setIsOpen(!isOpen)
}, [])
- const handleContextOpenChat = useCallback(() => {
- useChatStore.getState().setIsChatOpen(true)
+ const handleContextToggleChat = useCallback(() => {
+ const { isChatOpen, setIsChatOpen } = useChatStore.getState()
+ setIsChatOpen(!isChatOpen)
}, [])
const handleContextInvite = useCallback(() => {
@@ -2919,9 +2925,11 @@ const WorkflowContent = React.memo(() => {
onAddBlock={handleContextAddBlock}
onAutoLayout={handleAutoLayout}
onOpenLogs={handleContextOpenLogs}
- onOpenVariables={handleContextOpenVariables}
- onOpenChat={handleContextOpenChat}
+ onToggleVariables={handleContextToggleVariables}
+ onToggleChat={handleContextToggleChat}
onInvite={handleContextInvite}
+ isVariablesOpen={isVariablesOpen}
+ isChatOpen={isChatOpen}
hasClipboard={hasClipboard()}
disableEdit={!effectivePermissions.canEdit}
disableAdmin={!effectivePermissions.canAdmin}