import { Check, CheckSquare, Folder, Square, Trash2, X, } from 'lucide-react'; import type { Dispatch, PointerEvent as ReactPointerEvent, RefObject, SetStateAction, } from 'react'; import { PlatformActionButton } from '../common/PlatformActionButton'; import { PlatformBatchActionToolbar } from '../common/PlatformBatchActionToolbar'; import { PlatformTextField } from '../common/PlatformTextField'; import { EditorIconButton } from './ImageCanvasEditorPrimitives'; import { ImageCanvasAssetFolderSectionView } from './ImageCanvasAssetFolderSectionView'; import type { AssetMarqueeState, AssetPointerDragState, EditorAsset, EditorAssetFolder, UploadTarget, } from './ImageCanvasEditorTypes'; export type GroupedEditorAssetFolder = EditorAssetFolder & { assets: EditorAsset[]; }; export type UploadFilesOptions = { folderId?: string; canvasPoint?: { x: number; y: number }; addToCanvas?: boolean; }; export type ImageCanvasAssetLibraryPanelViewProps = { assetListRef: RefObject; assetPointerDragRef: { current: AssetPointerDragState | null }; suppressAssetClickRef: { current: boolean }; groupedAssets: GroupedEditorAssetFolder[]; assetFolders: EditorAssetFolder[]; isAssetSelectionMode: boolean; selectedAssetIds: Set; assetMoveDropFolderId: string | null; pinnedAssetMoveFolderId: string | null; creatingFolder: boolean; newFolderName: string; renamingFolder: { folderId: string; value: string } | null; renamingAsset: { assetId: string; value: string } | null; allSelectableAssetsSelected: boolean; assetMarquee: AssetMarqueeState | null; setCreatingFolder: Dispatch>; setNewFolderName: Dispatch>; setRenamingFolder: Dispatch< SetStateAction<{ folderId: string; value: string } | null> >; setRenamingAsset: Dispatch< SetStateAction<{ assetId: string; value: string } | null> >; setActiveUploadFolderId: Dispatch>; setUploadDropTarget: Dispatch>; setAssetPointerDrag: Dispatch>; setSelectedAssetIds: Dispatch>>; onAssetMarqueePointerDown: ( event: ReactPointerEvent, ) => void; onAssetMarqueePointerMove: ( event: ReactPointerEvent, ) => void; onAssetMarqueePointerUp: ( event: ReactPointerEvent, ) => void; updateAssetMoveDropFolder: (folderId: string | null) => void; addUploadedFiles: (files: FileList | File[], options?: UploadFilesOptions) => void; requestUpload: (target: UploadTarget) => void; moveAssetToFolder: (assetId: string, folderId: string) => void; commitNewAssetFolder: () => void | Promise; toggleAssetFolder: (folderId: string) => void; startRenamingFolder: (folder: EditorAssetFolder) => void; commitFolderRename: (folder: EditorAssetFolder) => void; deleteAssetFolder: (folder: EditorAssetFolder) => void; startRenamingAsset: (asset: EditorAsset) => void; commitAssetRename: (asset: EditorAsset) => void; deleteUploadedAsset: (asset: EditorAsset) => void; toggleAssetSelected: (assetId: string) => void; addAssetLayer: (asset: EditorAsset) => void; toggleAllAssetsSelected: () => void; deleteSelectedAssets: () => void; closeAssetSelectionMode: () => void; }; export function ImageCanvasAssetLibraryPanelView({ assetListRef, assetPointerDragRef, suppressAssetClickRef, groupedAssets, assetFolders, isAssetSelectionMode, selectedAssetIds, assetMoveDropFolderId, pinnedAssetMoveFolderId, creatingFolder, newFolderName, renamingFolder, renamingAsset, allSelectableAssetsSelected, assetMarquee, setCreatingFolder, setNewFolderName, setRenamingFolder, setRenamingAsset, setActiveUploadFolderId, setUploadDropTarget, setAssetPointerDrag, setSelectedAssetIds, onAssetMarqueePointerDown, onAssetMarqueePointerMove, onAssetMarqueePointerUp, updateAssetMoveDropFolder, addUploadedFiles, requestUpload, moveAssetToFolder, commitNewAssetFolder, toggleAssetFolder, startRenamingFolder, commitFolderRename, deleteAssetFolder, startRenamingAsset, commitAssetRename, deleteUploadedAsset, toggleAssetSelected, addAssetLayer, toggleAllAssetsSelected, deleteSelectedAssets, closeAssetSelectionMode, }: ImageCanvasAssetLibraryPanelViewProps) { return (
{pinnedAssetMoveFolderId ? ( ) : null} {creatingFolder ? (
{ event.preventDefault(); void commitNewAssetFolder(); }} > setNewFolderName(event.target.value)} onKeyDown={(event) => { if (event.key === 'Escape') { event.preventDefault(); setCreatingFolder(false); setNewFolderName(''); } }} /> { setCreatingFolder(false); setNewFolderName(''); }} /> ) : null} {groupedAssets.map((folder) => ( ))} {isAssetSelectionMode ? ( {allSelectableAssetsSelected ? ( ) : ( )} {selectedAssetIds.size > 0 ? `${allSelectableAssetsSelected ? '取消全选' : '全选'} · 已选 ${selectedAssetIds.size}` : '全选'} 删除 取消 ) : null} {assetMarquee ? ( ); }