import { useMemo } from "react"; import type { AppStore } from "@editor/store"; import type { ImageDocument } from "@core/document"; import type { GenerationState, MaskViewMode, SelectionState, ViewportState } from "@editor/state"; import type { BrushSettings, ChromaKeySettings, GenerateSettings, MagicWandSettings, OperationId, ToolId } from "@editor/tools"; import { BrushControls } from "./bottom-controls/BrushControls"; import { ChromaKeyControls } from "./bottom-controls/ChromaKeyControls"; import { MagicWandControls } from "./bottom-controls/MagicWandControls"; import { GenerateActionControls } from "./bottom-controls/GenerateActionControls"; import { PanControls } from "./bottom-controls/PanControls"; import { TransformControls } from "./bottom-controls/TransformControls"; import { ZoomControls } from "./bottom-controls/ZoomControls"; import type { Rect } from "@core/geometry"; import type { TransformTarget } from "@editor/transform"; import type { GenerationWorkflow } from "@operations/generation/workflow"; import type { DocumentActions } from "@app/document-actions"; import { createDocumentReadIndex } from "@editor/document-indexes"; export type BottomControlsAction = "pan" | "zoom"; export type BottomControlsIslandProps = { document: ImageDocument; selection: SelectionState; viewport: ViewportState; visible: boolean; action: BottomControlsAction; activeTool: ToolId; operation?: OperationId; brushSettings: BrushSettings; generateSettings: GenerateSettings; generation: GenerationState; chromaKeySettings: ChromaKeySettings; magicWandSettings: MagicWandSettings; editingMask?: boolean; maskKind?: "layerMask" | "inpaintRegion"; maskViewMode?: MaskViewMode; transformBounds?: Rect; transformTarget?: TransformTarget; brushHint?: string; dispatch: AppStore["dispatch"]; generationWorkflow: GenerationWorkflow; documentActions: DocumentActions; }; export function BottomControlsIsland({ document, selection, viewport, visible, action, activeTool, operation, brushSettings, generateSettings, generation, chromaKeySettings, magicWandSettings, editingMask = false, maskKind, maskViewMode = "composite", transformBounds, transformTarget, brushHint, dispatch, generationWorkflow, documentActions }: BottomControlsIslandProps) { const documentIndex = useMemo(() => createDocumentReadIndex(document), [document]); const selectedLayerInfo = selection.layerIds.length === 1 && selection.layerIds[0] ? documentIndex.layerInfoById.get(selection.layerIds[0]) : undefined; const zoomPercent = Math.round(viewport.zoom * 100); const x = Math.round(viewport.center.x); const y = Math.round(viewport.center.y); return (