Spaces:
Running
Running
| // 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), | |
| }; | |