import { SlIconButton } from "./chunk.Y77CZW56.js"; import { getAnimation, setDefaultAnimation } from "./chunk.RCZVQXWP.js"; import { waitForEvent } from "./chunk.B4BZKR24.js"; import { animateTo, stopAnimations } from "./chunk.S7GYYU7Z.js"; import { LocalizeController } from "./chunk.NH3SRVOC.js"; import { HasSlotController } from "./chunk.NYIIDP5N.js"; import { e } from "./chunk.UZVKBFXH.js"; import { alert_styles_default } from "./chunk.23G5LPSS.js"; import { watch } from "./chunk.FA5RT4K4.js"; import { ShoelaceElement, e as e2, n } from "./chunk.SEXBCYCU.js"; import { x } from "./chunk.CXZZ2LVK.js"; import { __decorateClass } from "./chunk.KIILAQWQ.js"; // src/components/alert/alert.component.ts var toastStack = Object.assign(document.createElement("div"), { className: "sl-toast-stack" }); var SlAlert = class extends ShoelaceElement { constructor() { super(...arguments); this.hasSlotController = new HasSlotController(this, "icon", "suffix"); this.localize = new LocalizeController(this); this.open = false; this.closable = false; this.variant = "primary"; this.duration = Infinity; } firstUpdated() { this.base.hidden = !this.open; } restartAutoHide() { clearTimeout(this.autoHideTimeout); if (this.open && this.duration < Infinity) { this.autoHideTimeout = window.setTimeout(() => this.hide(), this.duration); } } handleCloseClick() { this.hide(); } handleMouseMove() { this.restartAutoHide(); } async handleOpenChange() { if (this.open) { this.emit("sl-show"); if (this.duration < Infinity) { this.restartAutoHide(); } await stopAnimations(this.base); this.base.hidden = false; const { keyframes, options } = getAnimation(this, "alert.show", { dir: this.localize.dir() }); await animateTo(this.base, keyframes, options); this.emit("sl-after-show"); } else { this.emit("sl-hide"); clearTimeout(this.autoHideTimeout); await stopAnimations(this.base); const { keyframes, options } = getAnimation(this, "alert.hide", { dir: this.localize.dir() }); await animateTo(this.base, keyframes, options); this.base.hidden = true; this.emit("sl-after-hide"); } } handleDurationChange() { this.restartAutoHide(); } /** Shows the alert. */ async show() { if (this.open) { return void 0; } this.open = true; return waitForEvent(this, "sl-after-show"); } /** Hides the alert */ async hide() { if (!this.open) { return void 0; } this.open = false; return waitForEvent(this, "sl-after-hide"); } /** * Displays the alert as a toast notification. This will move the alert out of its position in the DOM and, when * dismissed, it will be removed from the DOM completely. By storing a reference to the alert, you can reuse it by * calling this method again. The returned promise will resolve after the alert is hidden. */ async toast() { return new Promise((resolve) => { if (toastStack.parentElement === null) { document.body.append(toastStack); } toastStack.appendChild(this); requestAnimationFrame(() => { this.clientWidth; this.show(); }); this.addEventListener( "sl-after-hide", () => { toastStack.removeChild(this); resolve(); if (toastStack.querySelector("sl-alert") === null) { toastStack.remove(); } }, { once: true } ); }); } render() { return x` `; } }; SlAlert.styles = alert_styles_default; SlAlert.dependencies = { "sl-icon-button": SlIconButton }; __decorateClass([ e2('[part~="base"]') ], SlAlert.prototype, "base", 2); __decorateClass([ n({ type: Boolean, reflect: true }) ], SlAlert.prototype, "open", 2); __decorateClass([ n({ type: Boolean, reflect: true }) ], SlAlert.prototype, "closable", 2); __decorateClass([ n({ reflect: true }) ], SlAlert.prototype, "variant", 2); __decorateClass([ n({ type: Number }) ], SlAlert.prototype, "duration", 2); __decorateClass([ watch("open", { waitUntilFirstUpdate: true }) ], SlAlert.prototype, "handleOpenChange", 1); __decorateClass([ watch("duration") ], SlAlert.prototype, "handleDurationChange", 1); setDefaultAnimation("alert.show", { keyframes: [ { opacity: 0, scale: 0.8 }, { opacity: 1, scale: 1 } ], options: { duration: 250, easing: "ease" } }); setDefaultAnimation("alert.hide", { keyframes: [ { opacity: 1, scale: 1 }, { opacity: 0, scale: 0.8 } ], options: { duration: 250, easing: "ease" } }); export { SlAlert };