import { Controller } from "@hotwired/stimulus" export default class extends Controller { connect() { this.reset = this.reset.bind(this) window.addEventListener("modal:closed", this.reset) } disconnect() { window.removeEventListener("modal:closed", this.reset) } // Slides the copy out and lets the hero flex up to fill the viewport. The // negative margin is what frees the space; the transform carries the article // the rest of the way off-screen. exit() { const article = this.element.querySelector(":scope > article") if (!article) return this.element.style.setProperty("--exit-shift", `${article.offsetHeight}px`) this.element.classList.add("is-exiting") // Force the transitions into existence now, so a fast turbo_stream response // still finds something to wait on before it opens the modal. getComputedStyle(article).marginBlockEnd } reset() { this.element.classList.remove("is-exiting") } }