From 67f8e0aba934e0368c991a653cb09d83dd6e561b Mon Sep 17 00:00:00 2001 From: orkhanart <88044120+orkhanart@users.noreply.github.com> Date: Fri, 28 Nov 2025 19:33:46 -0800 Subject: [PATCH] feat(ui): Add templates sidebar, tooltips styling, and canvas menu improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add Templates tab to both v1 sidebar and v2 bottom bar - Add template categories (Official, SDXL, ControlNet, Video, Community) - Style tooltips with JetBrains Mono, smaller size, uppercase - Convert native title attributes to v-tooltip directive - Add workspace/account sections to canvas logo dropdown menu - Move Settings to icon in sidebar footer near Sign out - Add sort/filter features across workspace pages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ComfyUI_vibe/src/assets/css/main.css | 33 ++ ComfyUI_vibe/src/components.d.ts | 1 + .../components/v2/canvas/CanvasBottomBar.vue | 34 ++ .../v2/canvas/CanvasLeftSidebar.vue | 479 +++++++++++++++++- .../src/components/v2/canvas/CanvasTabBar.vue | 90 +++- .../components/v2/layout/WorkspaceSidebar.vue | 169 +----- .../src/components/v2/nodes/FlowNode.vue | 129 ++++- .../src/components/v2/nodes/NodeHeader.vue | 2 +- ComfyUI_vibe/src/stores/uiStore.ts | 4 +- ComfyUI_vibe/src/types/node.ts | 1 + 10 files changed, 755 insertions(+), 187 deletions(-) diff --git a/ComfyUI_vibe/src/assets/css/main.css b/ComfyUI_vibe/src/assets/css/main.css index 7f1feb316..7d2932883 100644 --- a/ComfyUI_vibe/src/assets/css/main.css +++ b/ComfyUI_vibe/src/assets/css/main.css @@ -7,10 +7,14 @@ /* PrimeIcons */ @import 'primeicons/primeicons.css'; +/* ===================== Font Imports ===================== */ +@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500&display=swap'); + /* ===================== Design Tokens ===================== */ @theme { /* Font Families */ --font-sans: 'Inter', system-ui, -apple-system, sans-serif; + --font-mono: 'JetBrains Mono', ui-monospace, monospace; /* Base Colors */ --color-white: #ffffff; @@ -304,3 +308,32 @@ body { color: var(--muted-foreground); cursor: not-allowed; } + +/* ===================== PrimeVue Tooltip Overrides (v2 Interface) ===================== */ +.p-tooltip { + --p-tooltip-padding: 0.25rem 0.5rem; + --p-tooltip-border-radius: 4px; +} + +.p-tooltip .p-tooltip-text { + font-family: 'JetBrains Mono', ui-monospace, monospace; + font-size: 0.625rem; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 0.25rem 0.5rem; + white-space: nowrap; +} + +/* Dark mode tooltip - for canvas/editor */ +.dark .p-tooltip, +.dark-theme .p-tooltip { + --p-tooltip-background: #27272a; + --p-tooltip-color: #e4e4e7; +} + +/* Light mode tooltip - for workspace */ +.p-tooltip { + --p-tooltip-background: #18181b; + --p-tooltip-color: #fafafa; +} diff --git a/ComfyUI_vibe/src/components.d.ts b/ComfyUI_vibe/src/components.d.ts index f61cfe3bb..e87a907a1 100644 --- a/ComfyUI_vibe/src/components.d.ts +++ b/ComfyUI_vibe/src/components.d.ts @@ -11,6 +11,7 @@ declare module 'vue' { CanvasLeftSidebar: typeof import('./components/v2/canvas/CanvasLeftSidebar.vue')['default'] CanvasTabBar: typeof import('./components/v2/canvas/CanvasTabBar.vue')['default'] FlowNode: typeof import('./components/v2/nodes/FlowNode.vue')['default'] + FlowNodeMinimized: typeof import('./components/v2/nodes/FlowNodeMinimized.vue')['default'] NodeHeader: typeof import('./components/v2/nodes/NodeHeader.vue')['default'] NodeSlots: typeof import('./components/v2/nodes/NodeSlots.vue')['default'] NodeWidgets: typeof import('./components/v2/nodes/NodeWidgets.vue')['default'] diff --git a/ComfyUI_vibe/src/components/v2/canvas/CanvasBottomBar.vue b/ComfyUI_vibe/src/components/v2/canvas/CanvasBottomBar.vue index 2936755b6..a451a1909 100644 --- a/ComfyUI_vibe/src/components/v2/canvas/CanvasBottomBar.vue +++ b/ComfyUI_vibe/src/components/v2/canvas/CanvasBottomBar.vue @@ -31,6 +31,15 @@ const mockAssets = [ { name: 'mask_template.png', type: 'image' }, { name: 'init_image.jpg', type: 'image' }, ] + +const mockTemplates = [ + { name: 'Text to Image (Basic)', category: 'Official', nodes: 6, color: '#64B5F6' }, + { name: 'Image to Image', category: 'Official', nodes: 8, color: '#64B5F6' }, + { name: 'SDXL + Refiner', category: 'SDXL', nodes: 14, color: '#B39DDB' }, + { name: 'SDXL Lightning', category: 'SDXL', nodes: 9, color: '#B39DDB' }, + { name: 'Canny Edge', category: 'ControlNet', nodes: 12, color: '#FFAB40' }, + { name: 'Depth Map', category: 'ControlNet', nodes: 12, color: '#FFAB40' }, +]