From 789af097723b4ea78709051b4d4e5677d6fe1885 Mon Sep 17 00:00:00 2001 From: matevip Date: Fri, 8 May 2026 15:06:09 +0800 Subject: [PATCH] fix(ui/workflows): canvas controls dark-theme + reliable node-click --- mateclaw-ui/src/assets/main.css | 61 +++++++++++++------ .../src/components/workflow/StepNode.vue | 3 +- .../components/workflow/WorkflowCanvas.vue | 30 ++++++--- 3 files changed, 66 insertions(+), 28 deletions(-) diff --git a/mateclaw-ui/src/assets/main.css b/mateclaw-ui/src/assets/main.css index 50b396d4..f7e43ed3 100644 --- a/mateclaw-ui/src/assets/main.css +++ b/mateclaw-ui/src/assets/main.css @@ -276,39 +276,66 @@ html.dark { /* Vue Flow theme bridge — its default stylesheet ships hard-coded light colors for handles / mini-map / control buttons. Map them to - our theme tokens so dark mode inherits cleanly. */ -.vue-flow__handle { + our theme tokens so dark mode inherits cleanly. + + Each selector is bumped to (0,2,0) specificity by scoping to + `.workflow-canvas` because vue-flow's component CSS imports inside + WorkflowCanvas.vue land in the bundle AFTER main.css; equal + specificity would lose. */ +.workflow-canvas .vue-flow__handle { background: var(--mc-edge-strong, #777); border-color: var(--mc-bg-elevated, #fff); } -.vue-flow__edge-path { +.workflow-canvas .vue-flow__edge-path { stroke: var(--mc-edge, #999); } -.vue-flow__edge-text { +.workflow-canvas .vue-flow__edge-text { fill: var(--mc-text-secondary, #555); font-size: 11px; } -.vue-flow__edge-textbg { +.workflow-canvas .vue-flow__edge-textbg { fill: var(--mc-bg-elevated, #fff); } -.vue-flow__minimap { - background: var(--mc-bg-sunken, rgba(0, 0, 0, 0.04)) !important; +.workflow-canvas .vue-flow__background { + background: transparent; +} +.workflow-canvas .vue-flow__minimap { + background: var(--mc-bg-sunken, rgba(0, 0, 0, 0.04)); + border: 1px solid var(--mc-border-light, rgba(0, 0, 0, 0.08)); + border-radius: 6px; +} +.workflow-canvas .vue-flow__minimap-mask { + fill: var(--mc-bg-muted, rgba(0, 0, 0, 0.06)); + stroke: var(--mc-border, transparent); +} +.workflow-canvas .vue-flow__controls { + box-shadow: var(--mc-shadow-soft, 0 2px 6px rgba(0, 0, 0, 0.1)); + border-radius: 6px; + overflow: hidden; + background: var(--mc-bg-elevated, #ffffff); border: 1px solid var(--mc-border-light, rgba(0, 0, 0, 0.08)); } -.vue-flow__minimap-mask { - fill: var(--mc-bg-muted, rgba(0, 0, 0, 0.06)); -} -.vue-flow__controls { - box-shadow: var(--mc-shadow-soft, 0 2px 6px rgba(0, 0, 0, 0.1)); -} -.vue-flow__controls-button { - background: var(--mc-bg-elevated, #fff); - border-bottom-color: var(--mc-border-light, rgba(0, 0, 0, 0.08)); +.workflow-canvas .vue-flow__controls-button { + background: var(--mc-bg-elevated, #ffffff); + border-bottom: 1px solid var(--mc-border-light, rgba(0, 0, 0, 0.08)); fill: var(--mc-text-primary, #333); + color: var(--mc-text-primary, #333); } -.vue-flow__controls-button:hover { +.workflow-canvas .vue-flow__controls-button svg { + fill: currentColor; +} +.workflow-canvas .vue-flow__controls-button:hover { background: var(--mc-bg-muted, rgba(0, 0, 0, 0.05)); } +/* Round the bottom button so the corner doesn't show the hardcoded grey + border vue-flow ships with. */ +.workflow-canvas .vue-flow__controls-button:last-child { + border-bottom: none; +} +/* Selection ring matches the brand accent in both modes. */ +.workflow-canvas .vue-flow__node.selected { + box-shadow: 0 0 0 2px var(--mc-primary, #4084ff); +} /* ================================================================ Base resets diff --git a/mateclaw-ui/src/components/workflow/StepNode.vue b/mateclaw-ui/src/components/workflow/StepNode.vue index 049f2883..74737a2d 100644 --- a/mateclaw-ui/src/components/workflow/StepNode.vue +++ b/mateclaw-ui/src/components/workflow/StepNode.vue @@ -3,8 +3,7 @@ class="step-node" :class="`mode-${data.modeType}`" :data-selected="props.selected" - @click.stop="handleClick" - @pointerdown.stop + @click="handleClick" >
diff --git a/mateclaw-ui/src/components/workflow/WorkflowCanvas.vue b/mateclaw-ui/src/components/workflow/WorkflowCanvas.vue index 842f297a..457501a3 100644 --- a/mateclaw-ui/src/components/workflow/WorkflowCanvas.vue +++ b/mateclaw-ui/src/components/workflow/WorkflowCanvas.vue @@ -79,9 +79,9 @@