{"version":3,"file":"exit.mjs","sources":["../../../../../src/motion/features/animation/exit.ts"],"sourcesContent":["import { Feature, resolveVariant } from \"motion-dom\"\n\nlet id = 0\n\nexport class ExitAnimationFeature extends Feature {\n private id: number = id++\n\n /**\n * The running exit animation, or true once it has completed.\n */\n private exit?: Promise | true\n\n update() {\n const { presenceContext, prevPresenceContext, animationState } =\n this.node\n\n if (!presenceContext || !animationState) return\n\n const { isPresent, onExitComplete } = presenceContext\n const prevIsPresent = prevPresenceContext?.isPresent\n\n if (isPresent === prevIsPresent) return\n\n if (isPresent && prevIsPresent === false) {\n /**\n * When re-entering after the exit completed (element is at\n * rest), replay the enter animation from initial.\n */\n if (this.exit === true) {\n const { initial } = this.node.getProps()\n\n if (initial && !Array.isArray(initial)) {\n const { transition, transitionEnd, ...target } =\n resolveVariant(this.node, initial as any) || {}\n\n for (const key in target) {\n this.node\n .getValue(key)\n ?.jump(target[key as keyof typeof target] as any)\n }\n }\n\n /**\n * A re-entering element is no longer an initial child, so\n * AnimatePresence's initial={false} mustn't block its enter.\n */\n this.node.blockInitialAnimation = false\n animationState.reset()\n animationState.animateChanges()\n } else {\n animationState.setActive(\"exit\", false)\n }\n\n this.exit = undefined\n return\n }\n\n const exit = (this.exit = animationState.setActive(\"exit\", !isPresent))\n\n if (onExitComplete && !isPresent) {\n exit.then(() => {\n /**\n * An exit can resolve after the element has re-entered, e.g.\n * when its final tick lands in the stop() of the enter.\n */\n if (this.exit !== exit) return\n this.exit = true\n onExitComplete(this.id)\n })\n }\n }\n\n mount() {\n const { register, onExitComplete } = this.node.presenceContext || {}\n\n if (onExitComplete) {\n onExitComplete(this.id)\n }\n\n if (register) {\n this.unmount = register(this.id, this.node)\n }\n }\n\n unmount() {}\n}\n"],"names":[],"mappings":";;AAEA,IAAI,EAAE,GAAG,CAAC;AAEJ,MAAO,oBAAqB,SAAQ,OAAgB,CAAA;AAA1D,IAAA,WAAA,GAAA;;QACY,IAAA,CAAA,EAAE,GAAW,EAAE,EAAE;IAgF7B;IAzEI,MAAM,GAAA;QACF,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,GAC1D,IAAI,CAAC,IAAI;AAEb,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC,cAAc;YAAE;AAEzC,QAAA,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,eAAe;AACrD,QAAA,MAAM,aAAa,GAAG,mBAAmB,EAAE,SAAS;QAEpD,IAAI,SAAS,KAAK,aAAa;YAAE;AAEjC,QAAA,IAAI,SAAS,IAAI,aAAa,KAAK,KAAK,EAAE;AACtC;;;AAGG;AACH,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;gBACpB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAExC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACpC,oBAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,GAC1C,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAc,CAAC,IAAI,EAAE;AAEnD,oBAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACtB,wBAAA,IAAI,CAAC;6BACA,QAAQ,CAAC,GAAG;AACb,8BAAE,IAAI,CAAC,MAAM,CAAC,GAA0B,CAAQ,CAAC;oBACzD;gBACJ;AAEA;;;AAGG;AACH,gBAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,GAAG,KAAK;gBACvC,cAAc,CAAC,KAAK,EAAE;gBACtB,cAAc,CAAC,cAAc,EAAE;YACnC;iBAAO;AACH,gBAAA,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;YAC3C;AAEA,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;YACrB;QACJ;AAEA,QAAA,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;AAEvE,QAAA,IAAI,cAAc,IAAI,CAAC,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,MAAK;AACX;;;AAGG;AACH,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;oBAAE;AACxB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,gBAAA,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,KAAK,GAAA;AACD,QAAA,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE;QAEpE,IAAI,cAAc,EAAE;AAChB,YAAA,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B;QAEA,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;QAC/C;IACJ;AAEA,IAAA,OAAO,KAAI;AACd;;;;"}