feat(*): 创作工作台 - 完善媒体上传预览与连线交互并修复任务章节及日志筛选
This commit is contained in:
@@ -5,6 +5,7 @@ import { AlertCircle, BookOpenCheck, CheckCircle2, ChevronRight, Clapperboard, C
|
||||
import { useCanvasNodeActions } from "./canvas-node-action-context";
|
||||
|
||||
import { canvasThemes } from "@/lib/canvas-theme";
|
||||
import { canvasConnectionTilt } from "@/lib/canvas/canvas-connection-tilt";
|
||||
import { storyboardMinNodeHeight } from "@/lib/canvas/canvas-storyboard-layout";
|
||||
import { resourceStorageLabel, resourceStorageLocation, resourceStorageTitle } from "@/lib/canvas/resource-storage-status";
|
||||
import { useThemeStore } from "@/stores/use-theme-store";
|
||||
@@ -28,6 +29,7 @@ type CanvasNodeProps = {
|
||||
isRelated: boolean;
|
||||
isFocusRelated: boolean;
|
||||
isConnectionTarget: boolean;
|
||||
connectionApproach?: Position;
|
||||
forceInputVisible?: boolean;
|
||||
showImageInfo: boolean;
|
||||
reduceMediaEffects?: boolean;
|
||||
@@ -75,6 +77,7 @@ export const CanvasNode = React.memo(function CanvasNode({
|
||||
isRelated,
|
||||
isFocusRelated,
|
||||
isConnectionTarget,
|
||||
connectionApproach,
|
||||
forceInputVisible = false,
|
||||
showImageInfo,
|
||||
reduceMediaEffects = false,
|
||||
@@ -265,6 +268,9 @@ export const CanvasNode = React.memo(function CanvasNode({
|
||||
if (next !== data.title) onTitleChange?.(data.id, next);
|
||||
};
|
||||
|
||||
const connectionTilt = isConnectionTarget && !reduceMediaEffects && !dragOffset
|
||||
? canvasConnectionTilt(data, connectionApproach) : undefined;
|
||||
|
||||
return (
|
||||
<div
|
||||
data-node-id={data.id}
|
||||
@@ -302,13 +308,17 @@ export const CanvasNode = React.memo(function CanvasNode({
|
||||
<div
|
||||
className="canvas-node-shell relative h-full w-full overflow-visible rounded-[var(--node-radius)]"
|
||||
data-node-state={nodeState}
|
||||
data-connection-tilt={connectionTilt ? "true" : undefined}
|
||||
data-state={data.metadata?.status || (isActive ? "active" : isRelated ? "related" : "idle")}
|
||||
style={{
|
||||
background: hasImageContent || hasVideoContent ? "transparent" : theme.node.fill,
|
||||
// 固定占位但不绘制描边,避免聚焦切换时边框宽度变化造成白边跳动。
|
||||
border: isComposerNode ? "0" : "1px solid transparent",
|
||||
boxShadow: isComposerNode ? "none" : isSelected || isFocusRelated ? theme.node.hoverShadow : theme.node.shadow,
|
||||
}}
|
||||
"--connection-tilt-x": `${connectionTilt?.rotateX || 0}deg`,
|
||||
"--connection-tilt-y": `${connectionTilt?.rotateY || 0}deg`,
|
||||
transformOrigin: connectionTilt?.origin,
|
||||
} as React.CSSProperties}
|
||||
onMouseDown={(event) => onMouseDown(event, data.id)}
|
||||
onDoubleClick={(event) => {
|
||||
if (isBatchRoot) {
|
||||
@@ -488,6 +498,8 @@ function areCanvasNodePropsEqual(previous: CanvasNodeProps, next: CanvasNodeProp
|
||||
previous.isRelated === next.isRelated &&
|
||||
previous.isFocusRelated === next.isFocusRelated &&
|
||||
previous.isConnectionTarget === next.isConnectionTarget &&
|
||||
previous.connectionApproach?.x === next.connectionApproach?.x &&
|
||||
previous.connectionApproach?.y === next.connectionApproach?.y &&
|
||||
previous.forceInputVisible === next.forceInputVisible &&
|
||||
previous.showImageInfo === next.showImageInfo &&
|
||||
previous.reduceMediaEffects === next.reduceMediaEffects &&
|
||||
|
||||
Reference in New Issue
Block a user