{"version":3,"sources":["../../create-element.ts"],"sourcesContent":["export const NAMESPACE = {\n  XUL: 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul',\n  HTML: 'http://www.w3.org/1999/xhtml',\n}\n\ntype Handler = (event?: any) => void | Promise<void>\n\nexport class Elements {\n  static all: WeakRef<Elements>[] = []\n\n  static removeAll(): void {\n    for (const ref of this.all) {\n      try {\n        const elements = ref.deref()\n        if (elements) elements.document.querySelectorAll(`.${elements.className}`).forEach(e => e.remove())\n      }\n      catch {}\n    }\n    this.all = []\n  }\n\n  private className: string\n  constructor(prefix: string, private document: Document) {\n    this.className = `${prefix}-${Math.random()}-${Date.now()}`.replace('.', '-')\n    if ((this.document as any).createXULElement) Elements.all.push(new WeakRef(this))\n  }\n\n  public serialize(node: HTMLElement): string {\n    const s = new XMLSerializer()\n    return s.serializeToString(node)\n  }\n\n  create(name: string, attrs: Record<string, number | string | Handler | HTMLElement[]> = {}): HTMLElement {\n    const children: HTMLElement[] = (attrs.$ as unknown as HTMLElement[]) || []\n    delete attrs.$\n\n    const namespace = name.startsWith('html:') ? NAMESPACE.HTML : NAMESPACE.XUL\n    name = name.replace('html:', '')\n\n    const elt: HTMLElement = (this.document as any).createXULElement\n      ? this.document[namespace === NAMESPACE.XUL ? 'createXULElement' : 'createElement'](name) as HTMLElement\n      : this.document.createElementNS(namespace, name) as HTMLElement\n    attrs.class = `${this.className} ${attrs.class || ''}`.trim()\n    for (const [a, v] of Object.entries(attrs)) {\n      if (typeof v === 'string') {\n        elt.setAttribute(a, v)\n      }\n      else if (typeof v === 'number') {\n        elt.setAttribute(a, `${v}`)\n      }\n      else if (a.startsWith('on') && typeof v === 'function') {\n        elt.addEventListener(a.replace('on', ''), event => {\n          ;(v(event) as Promise<void>)?.catch?.(err => {\n            throw err\n          })\n        })\n      }\n      else {\n        throw new Error(`unexpected attribute ${a} of type ${typeof v}`)\n      }\n    }\n    for (const child of children) {\n      elt.appendChild(child)\n    }\n\n    return elt\n  }\n\n  remove(): void {\n    for (const elt of Array.from(this.document.getElementsByClassName(this.className))) {\n      elt.remove()\n    }\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,YAAY;AAAA,EACvB,KAAK;AAAA,EACL,MAAM;AACR;AAIO,IAAM,WAAN,MAAM,UAAS;AAAA,EAepB,YAAY,QAAwB,UAAoB;AAApB;AAClC,SAAK,YAAY,GAAG,MAAM,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,QAAQ,KAAK,GAAG;AAC5E,QAAK,KAAK,SAAiB,iBAAkB,WAAS,IAAI,KAAK,IAAI,QAAQ,IAAI,CAAC;AAAA,EAClF;AAAA,EAjBA,OAAO,MAA2B,CAAC;AAAA,EAEnC,OAAO,YAAkB;AACvB,eAAW,OAAO,KAAK,KAAK;AAC1B,UAAI;AACF,cAAM,WAAW,IAAI,MAAM;AAC3B,YAAI,SAAU,UAAS,SAAS,iBAAiB,IAAI,SAAS,SAAS,EAAE,EAAE,QAAQ,OAAK,EAAE,OAAO,CAAC;AAAA,MACpG,QACM;AAAA,MAAC;AAAA,IACT;AACA,SAAK,MAAM,CAAC;AAAA,EACd;AAAA,EAEQ;AAAA,EAMD,UAAU,MAA2B;AAC1C,UAAM,IAAI,IAAI,cAAc;AAC5B,WAAO,EAAE,kBAAkB,IAAI;AAAA,EACjC;AAAA,EAEA,OAAO,MAAc,QAAmE,CAAC,GAAgB;AACvG,UAAM,WAA2B,MAAM,KAAkC,CAAC;AAC1E,WAAO,MAAM;AAEb,UAAM,YAAY,KAAK,WAAW,OAAO,IAAI,UAAU,OAAO,UAAU;AACxE,WAAO,KAAK,QAAQ,SAAS,EAAE;AAE/B,UAAM,MAAoB,KAAK,SAAiB,mBAC5C,KAAK,SAAS,cAAc,UAAU,MAAM,qBAAqB,eAAe,EAAE,IAAI,IACtF,KAAK,SAAS,gBAAgB,WAAW,IAAI;AACjD,UAAM,QAAQ,GAAG,KAAK,SAAS,IAAI,MAAM,SAAS,EAAE,GAAG,KAAK;AAC5D,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1C,UAAI,OAAO,MAAM,UAAU;AACzB,YAAI,aAAa,GAAG,CAAC;AAAA,MACvB,WACS,OAAO,MAAM,UAAU;AAC9B,YAAI,aAAa,GAAG,GAAG,CAAC,EAAE;AAAA,MAC5B,WACS,EAAE,WAAW,IAAI,KAAK,OAAO,MAAM,YAAY;AACtD,YAAI,iBAAiB,EAAE,QAAQ,MAAM,EAAE,GAAG,WAAS;AACjD;AAAC,UAAC,EAAE,KAAK,GAAqB,QAAQ,SAAO;AAC3C,kBAAM;AAAA,UACR,CAAC;AAAA,QACH,CAAC;AAAA,MACH,OACK;AACH,cAAM,IAAI,MAAM,wBAAwB,CAAC,YAAY,OAAO,CAAC,EAAE;AAAA,MACjE;AAAA,IACF;AACA,eAAW,SAAS,UAAU;AAC5B,UAAI,YAAY,KAAK;AAAA,IACvB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,SAAe;AACb,eAAW,OAAO,MAAM,KAAK,KAAK,SAAS,uBAAuB,KAAK,SAAS,CAAC,GAAG;AAClF,UAAI,OAAO;AAAA,IACb;AAAA,EACF;AACF;","names":[]}