{"version":3,"sources":["elements/print-html.ts"],"names":["PrintHtml","HTMLElement","constructor","super","print","html","this","isConnected","Error","iframe","contentDocument","open","write","close","await","waitForIframeReady","contentWindow","Promise","checkReadyState","readyState","images","let","i","length","complete","setTimeout","resolve","connectedCallback","document","createElement","style","display","appendChild","customElements","define"],"mappings":"MAAaA,kBAAkBC,YAC3BC,cACIC,MAAK,CACT,CAGOC,YAAYC,GACf,GAAI,CAACC,KAAKC,YACN,MAAM,IAAIC,MAAM,yDAAyD,EAG7EF,KAAKG,OAAOC,gBAAgBC,KAAI,EAChCL,KAAKG,OAAOC,gBAAgBE,MAAMP,CAAI,EACtCC,KAAKG,OAAOC,gBAAgBG,MAAK,EAEjCC,MAAMR,KAAKS,mBAAkB,EAE7BT,KAAKG,OAAOO,cAAcZ,MAAK,CACnC,CAMQW,qBACJ,OAAO,IAAIE,QAAQ,IACf,IAAMC,EAAkB,KACpB,GAA+C,aAA3CZ,KAAKG,OAAOC,gBAAgBS,WAA2B,CACvD,IAAMC,EAASd,KAAKG,OAAOC,gBAAgBU,OAC3C,IAAKC,IAAIC,EAAI,EAAGA,EAAIF,EAAOG,OAAQD,CAAC,GAChC,GAAI,CAACF,EAAOE,GAAGE,SAEX,OADAC,KAAAA,WAAWP,EAAiB,GAAG,EAKvCQ,EAAO,C,MAEPD,WAAWP,EAAiB,GAAG,CAEvC,EAEAO,WAAWP,EAAiB,CAAC,CACjC,CAAC,CACL,CAGAS,oBACIrB,KAAKG,OAASmB,SAASC,cAAc,QAAQ,EAC7CvB,KAAKG,OAAOqB,MAAMC,QAAU,OAC5BzB,KAAK0B,YAAY1B,KAAKG,MAAM,CAChC,C,CAGJwB,eAAeC,OAAO,aAAclC,SAAS,SAtDhCA,SAsDiC","file":"print-html.js","sourcesContent":["export class PrintHtml extends HTMLElement {\r\n constructor() {\r\n super();\r\n }\r\n\r\n /* #region Public */\r\n public async print(html: string) {\r\n if (!this.isConnected) {\r\n throw new Error(\"PrintHtml must be connected to the DOM before printing.\");\r\n }\r\n\r\n this.iframe.contentDocument.open();\r\n this.iframe.contentDocument.write(html);\r\n this.iframe.contentDocument.close();\r\n\r\n await this.waitForIframeReady();\r\n\r\n this.iframe.contentWindow.print();\r\n }\r\n /* #endregion */\r\n\r\n /* #region Private */\r\n private iframe: HTMLIFrameElement;\r\n\r\n private waitForIframeReady(): Promise {\r\n return new Promise((resolve) => {\r\n const checkReadyState = () => {\r\n if (this.iframe.contentDocument.readyState === 'complete') {\r\n const images = this.iframe.contentDocument.images;\r\n for (let i = 0; i < images.length; i++) {\r\n if (!images[i].complete) {\r\n setTimeout(checkReadyState, 100);\r\n return;\r\n }\r\n }\r\n \r\n resolve();\r\n } else {\r\n setTimeout(checkReadyState, 100);\r\n }\r\n };\r\n \r\n setTimeout(checkReadyState, 1);\r\n });\r\n }\r\n /* #endregion */\r\n\r\n connectedCallback() {\r\n this.iframe = document.createElement(\"iframe\");\r\n this.iframe.style.display = \"none\";\r\n this.appendChild(this.iframe);\r\n }\r\n}\r\n\r\ncustomElements.define(\"print-html\", PrintHtml);"]}