/* You may notice some oddness with this element. Namely that the `.buttons` div appears before the `paper-dialog-scrollable` element in `dashboard.pug`, but in the below ` `; } static get is() { return "ncg-dialog"; } static get properties() { return { bundle: { type: String, reflectToAttribute: true, }, panel: { type: String, reflectToAttribute: true, }, width: { type: Number, reflectToAttribute: true, }, }; } override ready(): void { super.ready(); this.addEventListener("neon-animation-finish", this._onNeonAnimationFinish); this.addEventListener("iron-overlay-opened", this._onIronOverlayOpened); this.addEventListener("iron-overlay-closed", this._onIronOverlayClosed); afterNextRender(this, async () => { const iframe = this.querySelector("iframe")!; // If Sentry is enabled, use it to report errors in panels to Sentry.io. if (window.ncgConfig.sentry.enabled) { const Sentry = await import("@sentry/browser"); iframe.contentWindow!.addEventListener("error", (event: any) => { Sentry.captureException(event.error); }); iframe.contentWindow!.addEventListener( "unhandledrejection", (err: any) => { Sentry.captureException(err.reason); }, ); } if (iframe.contentWindow!.document.readyState === "complete") { this._attachIframeResize(iframe); } else { iframe.addEventListener("load", () => { this._attachIframeResize(iframe); }); } }); } override connectedCallback(): void { super.connectedCallback(); const iframe = this.querySelector("iframe")!; iframe.addEventListener("iframe-resized", () => { this.refit(); }); } _attachIframeResize(iframe: HTMLIFrameElement) { initialize( { onIframeResize(context) { context.iframe.dispatchEvent(new CustomEvent("iframe-resized")); }, }, iframe, ); } _renderOpened() { if (this.withBackdrop) { this.backdropElement.open(); } this.playAnimation("entry"); } _renderClosed() { if (this.withBackdrop) { this.backdropElement.close(); } this.playAnimation("exit"); } _onNeonAnimationFinish() { if (this.opened) { this._finishRenderOpened(); } else { this._finishRenderClosed(); } } _onIronOverlayOpened() { const iframeDocument = this.querySelector("iframe")!.contentDocument!; iframeDocument.dispatchEvent(new CustomEvent("dialog-opened")); } _onIronOverlayClosed(e: any) { const iframeDocument = this.querySelector("iframe")!.contentDocument!; if (e.detail.confirmed && !e.detail.canceled) { iframeDocument.dispatchEvent(new CustomEvent("dialog-confirmed")); } else { iframeDocument.dispatchEvent(new CustomEvent("dialog-dismissed")); } } } customElements.define("ncg-dialog", NcgDialog as any);