From c0d223f3575ffc5c32c52b87af4b7f24cf0e49fe Mon Sep 17 00:00:00 2001
From: ddcat666 <26564566+ddcat666@users.noreply.github.com>
Date: Fri, 25 Sep 2026 00:00:22 +0800
Subject: [PATCH] =?UTF-8?q?feat(canvas):=20=E7=94=BB=E5=B8=83=E5=B7=A5?=
=?UTF-8?q?=E4=BD=9C=E5=8C=BA=20-=20=E4=BB=A5=E6=82=AC=E6=B5=AE=E7=A3=A8?=
=?UTF-8?q?=E7=A0=82=E9=9D=A2=E6=9D=BF=E6=89=BF=E8=BD=BD=E4=BE=A7=E6=A0=8F?=
=?UTF-8?q?=E5=AF=BC=E8=88=AA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
web/src/components/canvas/canvas-node.tsx | 25 +--
.../canvas-workspace-node-list-panel.tsx | 2 +-
.../canvas/canvas-workspace-panel.css | 157 ++++++++++++++----
.../canvas/canvas-workspace-panel.tsx | 122 +++++++-------
web/src/components/canvas/infinite-canvas.tsx | 2 +-
web/src/pages/canvas/project.tsx | 4 +-
web/test/canvas-workspace-sidebar.test.ts | 41 ++++-
web/test/workspace-menu-density.test.tsx | 11 +-
8 files changed, 240 insertions(+), 124 deletions(-)
diff --git a/web/src/components/canvas/canvas-node.tsx b/web/src/components/canvas/canvas-node.tsx
index 1824ef884..902754fb7 100644
--- a/web/src/components/canvas/canvas-node.tsx
+++ b/web/src/components/canvas/canvas-node.tsx
@@ -1,6 +1,6 @@
import React, { useCallback, useEffect, useRef, useState } from "react";
import type { ReactNode } from "react";
-import { AlertCircle, BookOpenCheck, CheckCircle2, ChevronRight, Clapperboard, Copy, Download, GripVertical, Image as ImageIcon, Lock, Maximize2, Music2, Pencil, RefreshCw, ScanSearch, Settings2, Star, Trash2, Type, Video, WandSparkles } from "lucide-react";
+import { AlertCircle, BookOpenCheck, CheckCircle2, ChevronRight, Clapperboard, Copy, Download, Image as ImageIcon, Lock, Maximize2, Music2, Pencil, RefreshCw, ScanSearch, Settings2, Star, Trash2, Type, Video, WandSparkles } from "lucide-react";
import { useCanvasNodeActions } from "./canvas-node-action-context";
@@ -307,7 +307,6 @@ export const CanvasNode = React.memo(function CanvasNode({
draft={titleDraft}
theme={theme}
onDraftChange={setTitleDraft}
- onDragStart={readOnly ? undefined : (event) => onMouseDown(event, data.id)}
onEdit={() => setIsEditingTitle(true)}
onCommit={commitTitle}
onCancel={() => { setTitleDraft(data.title); setIsEditingTitle(false); }}
@@ -647,7 +646,7 @@ function formatMediaDimensionLabel(node: CanvasNodeData, hasVisualMediaContent:
return `${Math.round(width)}*${Math.round(height)}`;
}
-function NodeExternalHeader({ node, scale, dimensionLabel, active, editable, editing, draft, theme, onDragStart, onDraftChange, onEdit, onCommit, onCancel }: {
+function NodeExternalHeader({ node, scale, dimensionLabel, active, editable, editing, draft, theme, onDraftChange, onEdit, onCommit, onCancel }: {
node: CanvasNodeData;
scale: number;
dimensionLabel: string | null;
@@ -657,7 +656,6 @@ function NodeExternalHeader({ node, scale, dimensionLabel, active, editable, edi
draft: string;
theme: CanvasTheme;
onDraftChange: (value: string) => void;
- onDragStart?: (event: React.MouseEvent) => void;
onEdit: () => void;
onCommit: () => void;
onCancel: () => void;
@@ -677,7 +675,7 @@ function NodeExternalHeader({ node, scale, dimensionLabel, active, editable, edi
"--canvas-node-width": `${node.width}px`,
borderRadius: "var(--r-sm)",
background: "transparent",
- paddingInline: "var(--space-1-half)",
+ paddingInline: "0",
color: active ? theme.node.text : theme.node.label,
transform: `scale(var(--canvas-live-inverse-scale, ${inverseScale}))`,
transformOrigin: "left bottom",
@@ -686,23 +684,6 @@ function NodeExternalHeader({ node, scale, dimensionLabel, active, editable, edi
onPointerDown={(event) => event.stopPropagation()}
>
-
{editing ? (
{nodes.length.toLocaleString("zh-CN")}
-