{
  "version": 3,
  "sources": ["../src/client.ts"],
  "sourcesContent": ["import { define as defineElement } from '@substrate-system/web-component/util'\nimport { define as defineCopyButton } from '@substrate-system/copy-button/client'\n\ndefineCopyButton()\n\n/**\n * This one does not know how to render itself. Should be used in\n * conjunction with server-side rendered HTML.\n */\nexport class CodeBlock extends HTMLElement {\n    static TAG = 'code-block'\n    static observedAttributes = ['copy-button-label']\n\n    codeEl:HTMLElement|null\n    copyButtonEl:HTMLElement|null\n    codeObserver:MutationObserver|null\n    buttonObserver:MutationObserver|null\n\n    constructor () {\n        super()\n        this.codeEl = null\n        this.copyButtonEl = null\n        this.codeObserver = null\n        this.buttonObserver = null\n    }\n\n    attributeChangedCallback (\n        name:string,\n        _oldValue:string|null,\n        _newValue:string|null\n    ):void {\n        if (name === 'copy-button-label') this.applyIconButtonA11y()\n    }\n\n    disconnectedCallback ():void {\n        this.codeObserver?.disconnect()\n        this.buttonObserver?.disconnect()\n        this.codeObserver = null\n        this.buttonObserver = null\n    }\n\n    connectedCallback ():void {\n        this.hydrate()\n    }\n\n    hydrate ():void {\n        this.codeEl = this.querySelector('[data-code-block-code]')\n        this.copyButtonEl = this.querySelector('copy-button[data-code-block-copy]')\n        this.observeCode()\n        this.observeCopyButton()\n        this.syncPayload()\n        this.applyIconButtonA11y()\n    }\n\n    observeCode ():void {\n        this.codeObserver?.disconnect()\n        if (!this.codeEl) return\n\n        const observer = new MutationObserver(() => {\n            this.syncPayload()\n        })\n\n        observer.observe(this.codeEl, {\n            childList: true,\n            characterData: true,\n            subtree: true\n        })\n\n        this.codeObserver = observer\n    }\n\n    observeCopyButton ():void {\n        this.buttonObserver?.disconnect()\n        if (!this.copyButtonEl) return\n\n        const observer = new MutationObserver(() => {\n            this.applyIconButtonA11y()\n        })\n\n        observer.observe(this.copyButtonEl, {\n            childList: true,\n            subtree: true\n        })\n\n        this.buttonObserver = observer\n    }\n\n    syncPayload ():void {\n        if (!this.copyButtonEl || !this.codeEl) return\n        const payload = this.codeEl.textContent ?? ''\n        this.copyButtonEl.setAttribute('payload', payload)\n\n        const iconButton = this.copyButtonEl.querySelector('button') as\n            (HTMLButtonElement|null)\n        if (iconButton) iconButton.disabled = payload.length === 0\n    }\n\n    getCopyButtonLabel ():string {\n        const label = this.getAttribute('copy-button-label')\n        return label?.trim() || 'Copy code to clipboard'\n    }\n\n    applyIconButtonA11y ():void {\n        if (!this.copyButtonEl) return\n        const iconButton = this.copyButtonEl.querySelector('button')\n        if (!iconButton) return\n\n        const label = this.getCopyButtonLabel()\n        iconButton.setAttribute('type', 'button')\n        iconButton.setAttribute('aria-label', label)\n        iconButton.setAttribute('title', label)\n    }\n}\n\nexport default CodeBlock\n\nexport function define () {\n    return defineElement(CodeBlock.TAG, CodeBlock)\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwC;AACxC,oBAA2C;AAAA,IAE3C,cAAAA,QAAiB;AAMV,MAAM,kBAAkB,YAAY;AAAA,EAT3C,OAS2C;AAAA;AAAA;AAAA,EACvC,OAAO,MAAM;AAAA,EACb,OAAO,qBAAqB,CAAC,mBAAmB;AAAA,EAEhD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,cAAe;AACX,UAAM;AACN,SAAK,SAAS;AACd,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,yBACI,MACA,WACA,WACG;AACH,QAAI,SAAS,oBAAqB,MAAK,oBAAoB;AAAA,EAC/D;AAAA,EAEA,uBAA6B;AACzB,SAAK,cAAc,WAAW;AAC9B,SAAK,gBAAgB,WAAW;AAChC,SAAK,eAAe;AACpB,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,oBAA0B;AACtB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,UAAgB;AACZ,SAAK,SAAS,KAAK,cAAc,wBAAwB;AACzD,SAAK,eAAe,KAAK,cAAc,mCAAmC;AAC1E,SAAK,YAAY;AACjB,SAAK,kBAAkB;AACvB,SAAK,YAAY;AACjB,SAAK,oBAAoB;AAAA,EAC7B;AAAA,EAEA,cAAoB;AAChB,SAAK,cAAc,WAAW;AAC9B,QAAI,CAAC,KAAK,OAAQ;AAElB,UAAM,WAAW,IAAI,iBAAiB,MAAM;AACxC,WAAK,YAAY;AAAA,IACrB,CAAC;AAED,aAAS,QAAQ,KAAK,QAAQ;AAAA,MAC1B,WAAW;AAAA,MACX,eAAe;AAAA,MACf,SAAS;AAAA,IACb,CAAC;AAED,SAAK,eAAe;AAAA,EACxB;AAAA,EAEA,oBAA0B;AACtB,SAAK,gBAAgB,WAAW;AAChC,QAAI,CAAC,KAAK,aAAc;AAExB,UAAM,WAAW,IAAI,iBAAiB,MAAM;AACxC,WAAK,oBAAoB;AAAA,IAC7B,CAAC;AAED,aAAS,QAAQ,KAAK,cAAc;AAAA,MAChC,WAAW;AAAA,MACX,SAAS;AAAA,IACb,CAAC;AAED,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEA,cAAoB;AAChB,QAAI,CAAC,KAAK,gBAAgB,CAAC,KAAK,OAAQ;AACxC,UAAM,UAAU,KAAK,OAAO,eAAe;AAC3C,SAAK,aAAa,aAAa,WAAW,OAAO;AAEjD,UAAM,aAAa,KAAK,aAAa,cAAc,QAAQ;AAE3D,QAAI,WAAY,YAAW,WAAW,QAAQ,WAAW;AAAA,EAC7D;AAAA,EAEA,qBAA6B;AACzB,UAAM,QAAQ,KAAK,aAAa,mBAAmB;AACnD,WAAO,OAAO,KAAK,KAAK;AAAA,EAC5B;AAAA,EAEA,sBAA4B;AACxB,QAAI,CAAC,KAAK,aAAc;AACxB,UAAM,aAAa,KAAK,aAAa,cAAc,QAAQ;AAC3D,QAAI,CAAC,WAAY;AAEjB,UAAM,QAAQ,KAAK,mBAAmB;AACtC,eAAW,aAAa,QAAQ,QAAQ;AACxC,eAAW,aAAa,cAAc,KAAK;AAC3C,eAAW,aAAa,SAAS,KAAK;AAAA,EAC1C;AACJ;AAEA,IAAO,iBAAQ;AAER,SAAS,SAAU;AACtB,aAAO,YAAAC,QAAc,UAAU,KAAK,SAAS;AACjD;AAFgB;",
  "names": ["defineCopyButton", "defineElement"]
}
