import { STROKE_OPTIONS, isFreeDrawElement } from "@excalidraw/element"; import { useState, useEffect } from "react"; import { useUIAppState } from "@excalidraw/excalidraw/context/ui-appState"; import { useExcalidrawElements } from "@excalidraw/excalidraw/components/App"; import { round } from "../../packages/math/src"; export const FreedrawDebugSliders = () => { const [streamline, setStreamline] = useState( STROKE_OPTIONS.default.streamline, ); const [simplify, setSimplify] = useState( STROKE_OPTIONS.default.simplify, ); useEffect(() => { if (!window.h) { window.h = {} as any; } if (!window.h.debugFreedraw) { window.h.debugFreedraw = { enabled: true, ...STROKE_OPTIONS.default, }; } setStreamline(window.h.debugFreedraw.streamline); setSimplify(window.h.debugFreedraw.simplify); }, []); const handleStreamlineChange = (value: number) => { setStreamline(value); if (window.h && window.h.debugFreedraw) { window.h.debugFreedraw.streamline = value; } }; const handleSimplifyChange = (value: number) => { setSimplify(value); if (window.h && window.h.debugFreedraw) { window.h.debugFreedraw.simplify = value; } }; const [enabled, setEnabled] = useState( window.h?.debugFreedraw?.enabled ?? true, ); // counter incrasing each 50ms const [, setCounter] = useState(0); useEffect(() => { const interval = setInterval(() => { setCounter((prev) => prev + 1); }, 50); return () => clearInterval(interval); }, []); // eslint-disable-next-line @typescript-eslint/no-unused-vars const elements = useExcalidrawElements(); const appState = useUIAppState(); const newFreedrawElement = appState.newElement && isFreeDrawElement(appState.newElement) ? appState.newElement : null; return (
{newFreedrawElement && (
pressures:{" "} {newFreedrawElement.simulatePressure ? "simulated" : JSON.stringify( newFreedrawElement.pressures .slice(-4) .map((x) => round(x, 2)) .join(" ") || [], )}{" "} ({round(window.__lastPressure__ || 0, 2) || "?"})
)}
); };