import { VisualNode, values, Pos } from "@flyde/core"; import React from "react"; import { Size } from "../../utils"; import { logicalPosToRenderedPos, ViewPort } from "../utils"; const PosView: React.FC<{ pos: Pos }> = ({ pos }) => { return ( {pos.x.toFixed(1)}, {pos.y.toFixed(1)} ); }; export interface LayoutDebuggerItemProps { viewPort: ViewPort; pos: Pos; size: Size; color: string; } export const PosDebugger: React.FC<{ pos: Pos }> = (props) => { return ( ); }; export const LayoutDebuggerItem: React.FC = ( props ) => { const { pos, viewPort, size, color } = props; const z = viewPort.zoom; const correctX = pos.x * z - viewPort.pos.x * z; const correctY = pos.y * z - viewPort.pos.y * z; const dx = correctX - pos.x; const dy = correctY - pos.y; const fixerStyle: any = { transform: `translate(${dx}px, ${dy}px)`, }; const zoomWrapperStyle = { transform: `scale(${viewPort.zoom})`, }; const dragSimStyle = { transform: `translate(${pos.x}px, ${pos.y}px)`, }; const insideElemStyle = { width: `${size.width}px`, height: `${size.height}px`, backgroundColor: color, }; return ( ); }; export interface LayoutDebuggerProps { extraDebug: LayoutDebuggerItemProps[]; vp: ViewPort; node: VisualNode; mousePos: Pos; } const isPosDebugger = () => { try { return localStorage.getItem("pos-debugger") === "true"; } catch (e) { return false; } }; const isDebug = isPosDebugger(); export const LayoutDebugger: React.FC = (props) => { const { extraDebug, vp, node, mousePos } = props; if (!isDebug) { return null; } const itemElems = extraDebug.map((props, idx) => ( )); const baseNodeElems = [ ...node.instances.map((i) => i.pos), ...values(node.inputsPosition), ...values(node.outputsPosition), ].map((pos) => ( )); const mouseRenderedPos = logicalPosToRenderedPos(mousePos, vp); const viewPortData = ( Pos: Zoom: {vp.zoom.toFixed(2)} Mouse (logical): Rendered (rendered): ); return ( {viewPortData} {itemElems} {baseNodeElems} ); };