import { defineRenderers } from "@berry/api/web.ts"; import { Ghostty } from "./ghostty.ts"; import { terminalView } from "./view.tsx"; import "./web.css"; let loaded: Promise | undefined; // one module for every terminal on the page; it is fetched once something opens one const load = () => loaded ??= fetch(new URL("./ghostty-vt.wasm", import.meta.url)) .then((response) => { if (!response.ok) throw new Error(`the terminal's module did not load (${response.status})`); return Ghostty.load(response); }) .catch((error) => { loaded = undefined; throw error; }); export default defineRenderers({ view: { label: "term", create: () => terminalView(load) } });