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")}
-