import { html, css } from "lit"; import { customElement, property } from "lit/decorators.js"; import { BaseElement, defaultCss } from "components"; import { VMDeviceDBMixin, VMDeviceMixin } from "virtual_machine/base_device"; import { displayNumber, parseNumber } from "utils"; import type { LogicType } from "ic10emu_wasm"; import SlInput from "@shoelace-style/shoelace/dist/components/input/input.component.js"; @customElement("vm-device-fields") export class VMDeviceSlot extends VMDeviceMixin(VMDeviceDBMixin(BaseElement)) { constructor() { super(); this.subscribe("fields"); } render() { const fields = Array.from(this.fields.entries()); const inputIdBase = `vmDeviceCard${this.deviceID}Field`; return html` ${fields.map(([name, field], _index, _fields) => { return html` ${name} ${field.field_type} `; })} `; } _handleChangeField(e: CustomEvent) { const input = e.target as SlInput; const field = input.getAttribute("key")! as LogicType; const val = parseNumber(input.value); window.VM.get().then((vm) => { if (!vm.setDeviceField(this.deviceID, field, val, true)) { input.value = this.fields.get(field).value.toString(); } this.updateDevice(); }); } }