feat(workspace): integrate persisted canvas, element editing and session renewal

This commit is contained in:
2026-11-06 12:50:43 +08:00
parent 45e78f2e43
commit 373582906d
36 changed files with 1028 additions and 193 deletions
+3 -10
View File
@@ -1,21 +1,14 @@
"use client";
import { GripVertical } from "lucide-react";
import { useContext } from "react";
import type { NodeProps } from "@xyflow/react";
import type { CanvasNode } from "@/lib/canvas";
import { NodeEditing, TransformableNode } from "./transformable-node";
import { textAppearance } from "./text-appearance";
import styles from "./canvas.module.css";
import { TransformableNode } from "./transformable-node";
import { CanvasTextEditor } from "./canvas-text-editor";
export function PlainTextNode(props: NodeProps<CanvasNode>) {
const editing = useContext(NodeEditing);
return (
<TransformableNode {...props}>
<span className={styles.textDragHandle} title="拖动移动纯文本" aria-label="拖动移动纯文本"><GripVertical size={14} /></span>
<textarea className={`${styles.plainText} nodrag nowheel`} aria-label="纯文本" placeholder="写下文字…"
style={textAppearance(props.data)} value={props.data.text} maxLength={100000}
onFocus={editing.begin} onChange={(event) => editing.edit(props.id, event.target.value)} />
<CanvasTextEditor id={props.id} data={props.data} selected={props.selected} plain />
</TransformableNode>
);
}