function onPulseEnd(e: AnimationEvent): void { if (e.animationName === "pulse-bg" && e.target instanceof HTMLElement) { e.target.classList.remove("pulse") e.target.removeEventListener("animationend", onPulseEnd) e.target.removeEventListener("animationcancel", onPulseEnd) } } export function pulseElement(element: HTMLElement) { element.removeEventListener("animationend", onPulseEnd) element.removeEventListener("animationcancel", onPulseEnd) if (element.classList.contains("pulse")) { const anim = element.getAnimations().find(v => v instanceof CSSAnimation && v.animationName === "pulse-bg") if (anim) { anim.finish() anim.play() } } else { element.classList.add("pulse") } element.addEventListener("animationend", onPulseEnd) element.addEventListener("animationcancel", onPulseEnd) }