import React, { useEffect, useMemo, useState } from "react"; import { Dropdown } from "antd"; import { FileAudio, FileText, MoreHorizontal, Pencil, Plus, SlidersHorizontal, Sparkles, Video } from "lucide-react"; import { CANVAS_FOLDER_THEME_OPTIONS, resolveCanvasFolderTheme, resolveCanvasFolderThemeCover } from "@/lib/canvas/canvas-folder-theme"; import type { CanvasFolderStyle, CanvasFolderTheme, CanvasNodeData } from "@/types/canvas"; import { CanvasNodeType } from "@/types/canvas"; const FOLDER_STYLE_OPTIONS: Array<{ key: CanvasFolderStyle; label: string }> = [ { key: "glass", label: "流光玻璃" }, { key: "stacked", label: "内容陈列" }, { key: "midnight", label: "午夜封面" }, { key: "paper", label: "纸感收藏" }, { key: "cinema", label: "电影胶片" }, { key: "compact", label: "紧凑资料" }, ]; export const CanvasFolderPreview = React.memo(function CanvasFolderPreview({ data, childNodes, active, isDropTarget, readOnly, onToggleCollapsed, onTitleChange, onStyleChange, onThemeChange, }: { data: CanvasNodeData; childNodes: CanvasNodeData[]; active: boolean; isDropTarget: boolean; readOnly: boolean; onToggleCollapsed: (nodeId: string) => void; onTitleChange: (nodeId: string, title: string) => void; onStyleChange: (nodeId: string, style: CanvasFolderStyle) => void; onThemeChange: (nodeId: string, theme: CanvasFolderTheme) => void; }) { const style = data.metadata?.folder?.style || "glass"; const theme = resolveCanvasFolderTheme(data.metadata?.folder?.theme); const [editing, setEditing] = useState(false); const [title, setTitle] = useState(data.title); const previewNodes = useMemo(() => childNodes.filter(canPreviewFolderNode).slice(0, 3), [childNodes]); const themeCover = resolveCanvasFolderThemeCover(theme, data.metadata?.folder?.themeCover); const showAdd = style === "glass" || childNodes.length === 0; const folderMenu = { selectedKeys: [`style:${style}`, `theme:${theme}`], items: [ { key: "styles", label: "文件夹样式", children: FOLDER_STYLE_OPTIONS.map((item) => ({ key: `style:${item.key}`, label: item.label })), }, { key: "themes", label: "主题皮肤", children: CANVAS_FOLDER_THEME_OPTIONS.map((item) => ({ key: `theme:${item.key}`, label: item.label })), }, ], onClick: ({ key }: { key: string }) => { if (key.startsWith("style:")) onStyleChange(data.id, key.slice(6) as CanvasFolderStyle); if (key.startsWith("theme:")) onThemeChange(data.id, key.slice(6) as CanvasFolderTheme); }, }; useEffect(() => setTitle(data.title), [data.title]); const commitTitle = () => { const next = title.trim() || "未命名文件夹"; setTitle(next); setEditing(false); onTitleChange(data.id, next); }; return (