UNPKG

@hot-labs/near-connect

Version:

![ezgif-26d74832f88c3c](https://github.com/user-attachments/assets/c4422057-38bb-4cd9-8bd0-568e29f46280)

92 lines 3.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Popup = void 0; const styles_1 = require("./styles"); const html_1 = require("../helpers/html"); const ID = `n${Math.random().toString(36).substring(2, 15)}`; if (typeof document !== "undefined") { const style = document.createElement("style"); style.textContent = (0, styles_1.css)(`.${ID}`); document.head.append(style); } class Popup { delegate; isClosed = false; root = document.createElement("div"); state = {}; constructor(delegate) { this.delegate = delegate; } get dom() { return (0, html_1.html) ``; } disposables = []; addListener(querySelector, event, callback) { const element = typeof querySelector === "string" ? this.root.querySelector(querySelector) : querySelector; if (!element) return; element.addEventListener(event, callback); this.disposables.push(() => element.removeEventListener(event, callback)); } handlers() { this.disposables.forEach((dispose) => dispose()); this.disposables = []; const modalContainer = this.root.querySelector(".modal-container"); const modalContent = this.root.querySelector(".modal-content"); modalContent.onclick = (e) => e.stopPropagation(); modalContainer.onclick = () => { this.delegate.onReject(); this.destroy(); }; } update(state) { this.state = { ...this.state, ...state }; this.root.innerHTML = this.dom.html; this.handlers(); } create({ show = true }) { this.root.className = `${ID} hot-connector-popup`; this.root.innerHTML = this.dom.html; document.body.append(this.root); this.handlers(); const modalContainer = this.root.querySelector(".modal-container"); const modalContent = this.root.querySelector(".modal-content"); modalContent.style.transform = "translateY(50px)"; modalContainer.style.opacity = "0"; this.root.style.display = "none"; if (show) { setTimeout(() => this.show(), 10); } } show() { const modalContainer = this.root.querySelector(".modal-container"); const modalContent = this.root.querySelector(".modal-content"); modalContent.style.transform = "translateY(50px)"; modalContainer.style.opacity = "0"; this.root.style.display = "block"; setTimeout(() => { modalContent.style.transform = "translateY(0)"; modalContainer.style.opacity = "1"; }, 100); } hide() { const modalContainer = this.root.querySelector(".modal-container"); const modalContent = this.root.querySelector(".modal-content"); modalContent.style.transform = "translateY(50px)"; modalContainer.style.opacity = "0"; setTimeout(() => { this.root.style.display = "none"; }, 200); } destroy() { if (this.isClosed) return; this.isClosed = true; this.hide(); setTimeout(() => { this.root.remove(); }, 200); } } exports.Popup = Popup; //# sourceMappingURL=Popup.js.map