// Practice mode: no robot, no auth — the on-screen puppet runs programs. // Also the harness for e2e tests via the window.__reachy hooks. import "./app/styles.css"; import type * as Blockly from "blockly"; import { bootApp, type App } from "./app/boot"; import type { CommandLog } from "./util/log"; import type { RobotAdapter } from "./robot/adapter"; import type { Runner } from "./interpreter/runner"; import { VirtualRobotAdapter } from "./robot/virtual"; import { makeEmotionSource, makeSoundSource } from "./emotions/sources"; declare global { interface Window { __reachy?: { version: number; robot: RobotAdapter; log: CommandLog; workspace: Blockly.WorkspaceSvg; runner: Runner; app: App; loadProgram(state: object): void; setRandom(fn: () => number): void; }; } } const params = new URLSearchParams(window.location.search); const theme = document.documentElement.getAttribute("data-theme") === "light" ? "light" : "dark"; const app = bootApp(document.getElementById("root")!, { theme, fresh: params.get("fresh") === "1", attachRobot: (puppetHost, log) => new VirtualRobotAdapter(puppetHost, log), emotions: makeEmotionSource({ stub: params.get("emotions") === "stub" }), sounds: makeSoundSource(), }); window.__reachy = { version: 1, robot: app.robot, log: app.log, workspace: app.workspace, runner: app.runner, app, loadProgram: (state) => app.loadProgram(state), setRandom: (fn) => app.setRandom(fn), };