import { ImagePlus, Layers, Map as MapIcon, Redo2, RotateCcw, Undo2, X, } from 'lucide-react'; import type { PointerEvent as ReactPointerEvent } from 'react'; import { PlatformFloatingMenu, PlatformFloatingMenuItem } from '../common/PlatformFloatingMenu'; import { PlatformIconButton } from '../common/PlatformIconButton'; import { PlatformInlineOptionButton } from '../common/PlatformInlineOptionButton'; import { EditorIconButton } from './ImageCanvasEditorPrimitives'; import type { StageMinimapModel } from './ImageCanvasInteractionModel'; import { CANVAS_BACKGROUND_OPTIONS, DEFAULT_CANVAS_BACKGROUND_COLOR, formatPercent, } from './ImageCanvasEditorModel'; import type { CanvasViewport, SidebarPanel } from './ImageCanvasEditorTypes'; type ImageCanvasPanelDockViewProps = { viewport: CanvasViewport; canvasBackgroundColor: string; canvasBackgroundHexValue: string; canUndo: boolean; canRedo: boolean; isZoomMenuOpen: boolean; isBackgroundSettingsOpen: boolean; activeSidebarPanel: SidebarPanel | null; isMinimapOpen: boolean; minimapModel: StageMinimapModel | null; onFitLayers: () => void; onUndoCanvasChange: () => void; onRedoCanvasChange: () => void; onUpdateScaleFromCenter: (nextScale: number) => void; onToggleZoomMenu: () => void; onCloseZoomMenu: () => void; onToggleBackgroundSettings: () => void; onApplyCanvasBackgroundColor: (color: string) => void; onCanvasBackgroundHexChange: (value: string) => void; onToggleSidebarPanel: (panel: SidebarPanel) => void; onToggleMinimap: () => void; onMinimapPointerDown: (event: ReactPointerEvent) => void; }; export function ImageCanvasPanelDockView({ viewport, canvasBackgroundColor, canvasBackgroundHexValue, canUndo, canRedo, isZoomMenuOpen, isBackgroundSettingsOpen, activeSidebarPanel, isMinimapOpen, minimapModel, onFitLayers, onUndoCanvasChange, onRedoCanvasChange, onUpdateScaleFromCenter, onToggleZoomMenu, onCloseZoomMenu, onToggleBackgroundSettings, onApplyCanvasBackgroundColor, onCanvasBackgroundHexChange, onToggleSidebarPanel, onToggleMinimap, onMinimapPointerDown, }: ImageCanvasPanelDockViewProps) { return ( <> onFitLayers()} />
event.stopPropagation()} >
{formatPercent(viewport.scale)} {isZoomMenuOpen ? ( { onUpdateScaleFromCenter(viewport.scale * 1.16); onCloseZoomMenu(); }} > 放大 { onUpdateScaleFromCenter(viewport.scale * 0.86); onCloseZoomMenu(); }} > 缩小 { onFitLayers(); onCloseZoomMenu(); }} > 显示画布所有元素 {[0.5, 1, 2].map((scale) => ( { onUpdateScaleFromCenter(scale); onCloseZoomMenu(); }} > 缩放至{Math.round(scale * 100)}% ))} ) : null}
} /> {isBackgroundSettingsOpen ? (
画布背景
{CANVAS_BACKGROUND_OPTIONS.map((option) => ( ))}
) : null}
onToggleSidebarPanel('assets')} /> onToggleSidebarPanel('layers')} />
{isMinimapOpen && minimapModel ? ( ) : null} ); }