import { HTMLTemplateResult, html, css, CSSResultGroup } from "lit"; import { customElement, property, query } from "lit/decorators.js"; import { BaseElement, defaultCss } from "../components"; import "./nav"; import "./share"; import { ShareSessionDialog } from "./share"; import "../editor"; import { IC10Editor } from "../editor"; import { Session } from "../session"; import { VirtualMachine } from "../virtual_machine"; import { openFile, saveFile } from "../utils"; import "../virtual_machine/ui"; import "./save"; import { SaveDialog } from "./save"; import "./welcome"; import { AppWelcome } from "./welcome"; declare global { const __COMMIT_HASH__: string; const __BUILD_DATE__: string; } import packageJson from "../../../package.json" @customElement("ic10emu-app") export class App extends BaseElement { static styles = [ ...defaultCss, css` :host { height: 100vh; display: block; } .app-container { display: flex; flex-direction: column; height: 100%; } .app-body { flex-grow: 1; } sl-split-panel { height: 100%; } `, ]; appVersion = packageJson.version; gitVer = __COMMIT_HASH__; buildDate = __BUILD_DATE__; editorSettings: { fontSize: number; relativeLineNumbers: boolean }; @query("ace-ic10") editor: IC10Editor; @query("session-share-dialog") shareDialog: ShareSessionDialog; @query("save-dialog") saveDialog: SaveDialog; @query("app-welcome") appWelcome: AppWelcome; // get editor() { // return this.renderRoot.querySelector("ace-ic10") as IC10Editor; // } vm: VirtualMachine; session: Session; constructor() { super(); this.session = new Session(this); this.vm = new VirtualMachine(this); window.App.set(this); } createRenderRoot(): HTMLElement | DocumentFragment { const root = super.createRenderRoot(); root.addEventListener("app-share-session", this._handleShare.bind(this)); root.addEventListener("app-open-file", this._handleOpenFile.bind(this)); root.addEventListener("app-export", this._handleExport.bind(this)); root.addEventListener("app-save", this._handleSave.bind(this)); root.addEventListener("app-load", this._handleLoad.bind(this)); root.addEventListener("app-changelog", this._handleChangelog.bind(this)); return root; } protected render(): HTMLTemplateResult { return html`