From b3a5317500ad8401182deef95e2889350c38524a Mon Sep 17 00:00:00 2001 From: pythongosssss <125205205+pythongosssss@users.noreply.github.com> Date: Mon, 23 Feb 2026 18:48:07 +0000 Subject: [PATCH] App mode - builder toolbar - 6 (#9029) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary A toolbar for builder mode, hides various UI elements when in builder mode ## Screenshots (if applicable) Toolbar With disabled save and output required popover ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9029-App-mode-builder-toolbar-6-30d6d73d365081e3aef5c90033ba347d) by [Unito](https://www.unito.io) --- packages/design-system/src/css/style.css | 22 ++++ src/components/builder/BuilderToolbar.vue | 105 ++++++++++++++++++ .../builder/ConnectOutputPopover.vue | 78 +++++++++++++ src/components/builder/StepBadge.vue | 22 ++++ src/components/builder/StepLabel.vue | 20 ++++ src/components/builder/types.ts | 6 + src/components/graph/GraphCanvas.vue | 22 +++- src/locales/en/main.json | 13 +++ src/stores/appModeStore.ts | 2 +- src/views/GraphView.vue | 4 + src/views/LinearView.vue | 6 +- 11 files changed, 291 insertions(+), 9 deletions(-) create mode 100644 src/components/builder/BuilderToolbar.vue create mode 100644 src/components/builder/ConnectOutputPopover.vue create mode 100644 src/components/builder/StepBadge.vue create mode 100644 src/components/builder/StepLabel.vue create mode 100644 src/components/builder/types.ts diff --git a/packages/design-system/src/css/style.css b/packages/design-system/src/css/style.css index 28959224a..de245dd3c 100644 --- a/packages/design-system/src/css/style.css +++ b/packages/design-system/src/css/style.css @@ -99,6 +99,10 @@ --color-magenta-300: #ceaac9; --color-magenta-700: #6a246a; + --color-ocean-300: #badde8; + --color-ocean-600: #2f687a; + --color-ocean-900: #253236; + --color-danger-100: #c02323; --color-danger-200: #d62952; @@ -155,6 +159,7 @@ --comfy-menu-bg: #353535; --comfy-menu-secondary-bg: #292929; --comfy-topbar-height: 2.5rem; + --workflow-tabs-height: 2.375rem; --comfy-input-bg: #222; --input-text: #ddd; --descrip-text: #999; @@ -219,6 +224,10 @@ --interface-panel-surface: var(--color-white); --interface-stroke: var(--color-smoke-300); + --interface-builder-mode-background: var(--color-ocean-300); + --interface-builder-mode-button-background: var(--color-ocean-600); + --interface-builder-mode-button-foreground: var(--color-white); + --nav-background: var(--color-white); --node-border: var(--color-smoke-300); @@ -378,6 +387,10 @@ --interface-panel-surface: var(--color-charcoal-800); --interface-stroke: var(--color-charcoal-400); + --interface-builder-mode-background: var(--color-ocean-900); + --interface-builder-mode-button-background: var(--color-ocean-600); + --interface-builder-mode-button-foreground: var(--color-white); + --nav-background: var(--color-charcoal-800); --node-border: var(--color-charcoal-500); @@ -512,6 +525,15 @@ --color-comfy-menu-bg: var(--comfy-menu-bg); --color-comfy-menu-secondary: var(--comfy-menu-secondary-bg); + --color-interface-builder-mode-background: var( + --interface-builder-mode-background + ); + --color-interface-builder-mode-button-background: var( + --interface-builder-mode-button-background + ); + --color-interface-builder-mode-button-foreground: var( + --interface-builder-mode-button-foreground + ); --color-interface-stroke: var(--interface-stroke); --color-nav-background: var(--nav-background); --color-node-border: var(--node-border); diff --git a/src/components/builder/BuilderToolbar.vue b/src/components/builder/BuilderToolbar.vue new file mode 100644 index 000000000..c3c8978d0 --- /dev/null +++ b/src/components/builder/BuilderToolbar.vue @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/builder/ConnectOutputPopover.vue b/src/components/builder/ConnectOutputPopover.vue new file mode 100644 index 000000000..3aa6fa8ee --- /dev/null +++ b/src/components/builder/ConnectOutputPopover.vue @@ -0,0 +1,78 @@ + + + + + + + + + {{ t('builderToolbar.connectOutput') }} + + + + + + + + {{ t('builderToolbar.connectOutputBody1') }} + + + {{ t('builderToolbar.connectOutputBody2') }} + + + + + + {{ t('g.ok') }} + + + + + + + {{ t('g.cancel') }} + + + + + {{ t('builderToolbar.switchToSelect') }} + + + + + + + + + diff --git a/src/components/builder/StepBadge.vue b/src/components/builder/StepBadge.vue new file mode 100644 index 000000000..a1c3cbb0e --- /dev/null +++ b/src/components/builder/StepBadge.vue @@ -0,0 +1,22 @@ + + + + + {{ index + 1 }} + + + + + diff --git a/src/components/builder/StepLabel.vue b/src/components/builder/StepLabel.vue new file mode 100644 index 000000000..c2404d2c3 --- /dev/null +++ b/src/components/builder/StepLabel.vue @@ -0,0 +1,20 @@ + + + + {{ step.title }} + + + {{ step.subtitle }} + + + + + diff --git a/src/components/builder/types.ts b/src/components/builder/types.ts new file mode 100644 index 000000000..66fd3d293 --- /dev/null +++ b/src/components/builder/types.ts @@ -0,0 +1,6 @@ +export interface BuilderToolbarStep { + id: T + title: string + subtitle: string + icon: string +} diff --git a/src/components/graph/GraphCanvas.vue b/src/components/graph/GraphCanvas.vue index 0ea47dd37..9e250999c 100644 --- a/src/components/graph/GraphCanvas.vue +++ b/src/components/graph/GraphCanvas.vue @@ -6,7 +6,7 @@ - + @@ -31,19 +31,27 @@ - + - + - + @@ -174,6 +182,7 @@ import { useExecutionErrorStore } from '@/stores/executionErrorStore' import { useNodeDefStore } from '@/stores/nodeDefStore' import { useColorPaletteStore } from '@/stores/workspace/colorPaletteStore' import { useSearchBoxStore } from '@/stores/workspace/searchBoxStore' +import { useAppModeStore } from '@/stores/appModeStore' import { useWorkspaceStore } from '@/stores/workspaceStore' import { isNativeWindow } from '@/utils/envUtil' import { forEachNode } from '@/utils/graphTraversalUtil' @@ -194,6 +203,7 @@ const nodeSearchboxPopoverRef = shallowRef { const mode = ref('graph') diff --git a/src/views/GraphView.vue b/src/views/GraphView.vue index 95fe97d39..40e8e5772 100644 --- a/src/views/GraphView.vue +++ b/src/views/GraphView.vue @@ -13,6 +13,7 @@ + @@ -68,6 +69,7 @@ import { api } from '@/scripts/api' import { app } from '@/scripts/app' import { setupAutoQueueHandler } from '@/services/autoQueueService' import { useKeybindingService } from '@/platform/keybindings/keybindingService' +import { useAppModeStore } from '@/stores/appModeStore' import { useAssetsStore } from '@/stores/assetsStore' import { useCommandStore } from '@/stores/commandStore' import { useExecutionStore } from '@/stores/executionStore' @@ -84,6 +86,7 @@ import { useBottomPanelStore } from '@/stores/workspace/bottomPanelStore' import { useColorPaletteStore } from '@/stores/workspace/colorPaletteStore' import { useSidebarTabStore } from '@/stores/workspace/sidebarTabStore' import { electronAPI } from '@/utils/envUtil' +import BuilderToolbar from '@/components/builder/BuilderToolbar.vue' import LinearView from '@/views/LinearView.vue' import ManagerProgressToast from '@/workbench/extensions/manager/components/ManagerProgressToast.vue' @@ -100,6 +103,7 @@ const queueStore = useQueueStore() const assetsStore = useAssetsStore() const versionCompatibilityStore = useVersionCompatibilityStore() const graphCanvasContainerRef = ref(null) +const appModeStore = useAppModeStore() const { linearMode } = storeToRefs(useCanvasStore()) const telemetry = useTelemetry() diff --git a/src/views/LinearView.vue b/src/views/LinearView.vue index 47648de98..2cd173fad 100644 --- a/src/views/LinearView.vue +++ b/src/views/LinearView.vue @@ -43,7 +43,9 @@ const linearWorkflowRef = useTemplateRef('linearWorkflowRef') - + @@ -51,7 +53,7 @@ const linearWorkflowRef = useTemplateRef('linearWorkflowRef')
+ {{ t('builderToolbar.connectOutputBody1') }} +
+ {{ t('builderToolbar.connectOutputBody2') }} +