import { Box, Braces, Download, Expand, Keyboard, Lock, MousePointer2, Move3D, Redo2, RotateCw, Save, Undo2, } from "lucide-react"; import type { MapNode, TransformMode } from "@/types/editor"; interface EditorControlsProps { transformMode: TransformMode; onTransformModeChange: (mode: TransformMode) => void; selectedNodeIndex: number | null; mapNodes: MapNode[]; nodesCount: number; selectedNodeName: string | null; undoCount: number; redoCount: number; onUndo: () => void; onRedo: () => void; onExportJson: () => void; onSaveToServer?: (() => void | Promise) | undefined; onPlayerMode?: (() => void) | undefined; isPlayerMode?: boolean; } export function EditorControls({ transformMode, onTransformModeChange, selectedNodeIndex, mapNodes, nodesCount, selectedNodeName, undoCount, redoCount, onUndo, onRedo, onExportJson, onSaveToServer, onPlayerMode, isPlayerMode, }: EditorControlsProps): React.JSX.Element { const viewModeLabel = isPlayerMode ? "View locked" : "Lock view"; const jsonPreview = getJsonPreview(mapNodes, selectedNodeIndex); return ( <> ); } interface JsonPreviewLine { number: number; content: string; isSelected: boolean; } interface JsonPreview { label: string; lines: JsonPreviewLine[]; } function getJsonPreview( mapNodes: MapNode[], selectedNodeIndex: number | null, ): JsonPreview { const { lines, ranges } = formatMapNodesWithRanges(mapNodes); if (selectedNodeIndex === null || !ranges[selectedNodeIndex]) { return { label: `${lines.length} raw lines`, lines: lines.map((content, index) => ({ number: index + 1, content, isSelected: false, })), }; } const range = ranges[selectedNodeIndex]; const selectedLines = lines.slice(range.start - 1, range.end); return { label: `Lines ${range.start}-${range.end}`, lines: selectedLines.map((content, index) => ({ number: range.start + index, content, isSelected: true, })), }; } function formatMapNodesWithRanges(mapNodes: MapNode[]): { lines: string[]; ranges: Array<{ start: number; end: number }>; } { const lines = ["["]; const ranges: Array<{ start: number; end: number }> = []; mapNodes.forEach((node, index) => { const objectLines = JSON.stringify(node, null, 2) .split("\n") .map((line) => ` ${line}`); if (index < mapNodes.length - 1) { objectLines[objectLines.length - 1] += ","; } const start = lines.length + 1; lines.push(...objectLines); ranges.push({ start, end: lines.length }); }); lines.push("]"); return { lines, ranges }; }