import { useCallback, useContext, useEffect, useRef, useState } from "react";
import { Canvas } from "../lib/canvas";
import { useAppContext } from "../contexts/AppContext";
import { PanZoomWrapper } from "@sc07-canvas/lib/src/renderer";
import { RendererContext } from "@sc07-canvas/lib/src/renderer/RendererContext";
import { ViewportMoveEvent } from "@sc07-canvas/lib/src/renderer/PanZoom";
import throttle from "lodash.throttle";
import { IPosition } from "@sc07-canvas/lib/src/net";
import { Template } from "./Templating/Template";
import { Template as TemplateCl } from "../lib/template";
import { IRouterData, Router } from "../lib/router";
import { KeybindManager } from "../lib/keybinds";
import { BlankOverlay } from "./Overlay/BlankOverlay";
import { HeatmapOverlay } from "./Overlay/HeatmapOverlay";
import { useTemplateContext } from "../contexts/TemplateContext";
import { PixelPulses } from "./Overlay/PixelPulses";
import { CanvasUtils } from "../lib/canvas.utils";
export const CanvasWrapper = () => {
const { config } = useAppContext();
const getInitialPosition = useCallback<
(useCssZoom: boolean) =>
| {
x: number;
y: number;
zoom?: number;
}
| undefined
>(
(useCssZoom) => {
const router = Router.get().canvas;
if (!router) return undefined;
if (!config) {
console.warn("getInitialPosition called with no config");
return undefined;
}
const { transformX, transformY } = CanvasUtils.canvasToPanZoomTransform(
router.x,
router.y,
config.canvas.size,
useCssZoom
);
return {
x: transformX,
y: transformY,
zoom: router.zoom,
};
},
[config]
);
return (
{config && }
);
};
const Cursor = () => {
const { cursor } = useAppContext();
const [color, setColor] = useState();
useEffect(() => {
if (typeof cursor.color === "number") {
const color = Canvas.instance?.Pallete.getColor(cursor.color);
setColor(color?.hex);
} else {
setColor(undefined);
}
}, [setColor, cursor.color]);
if (!color) return <>>;
return (
);
};
const CanvasInner = () => {
const canvasRef = useRef();
const canvas = useRef