// Minimal DOM stand-in for node tests of the panels: just what ui.el() and the panels touch. export class FakeEl { constructor(tag) { Object.assign(this, { tag, kids: [], attrs: {}, on: {}, style: {}, value: '', hidden: false }); } setAttribute(k, v) { this.attrs[k] = v; } get className() { return this.attrs.class ?? ''; } addEventListener(t, f) { (this.on[t] ??= []).push(f); } fire(t, e = {}) { for (const f of this.on[t] ?? []) f({ preventDefault() {}, stopPropagation() {}, target: this, ...e }); } append(...k) { this.kids.push(...k); } replaceChildren(...k) { this.kids = k; } focus() {} blur() {} getBoundingClientRect() { return { left: 0, top: 0, width: 320, height: 130 }; } get textContent() { return this.kids.map(k => (typeof k === 'string' ? k : k.textContent)).join(''); } set textContent(v) { this.kids = [String(v)]; } find(pred) { for (const k of this.kids) { if (typeof k === 'string') continue; if (pred(k)) return k; const r = k.find(pred); if (r) return r; } return null; } } export function installFakeDom() { globalThis.document = { createElement: t => new FakeEl(t), createElementNS: (_, t) => new FakeEl(t), querySelector: () => null, querySelectorAll: () => [] }; }