framer-motion
Version:
A simple and powerful JavaScript animation library
1 lines • 5.93 kB
Source Map (JSON)
{"version":3,"file":"visual-element-variant.mjs","sources":["../../../../src/animation/interfaces/visual-element-variant.ts"],"sourcesContent":["import { DynamicOption } from \"motion-dom\"\nimport { resolveVariant } from \"../../render/utils/resolve-dynamic-variants\"\nimport { VisualElement } from \"../../render/VisualElement\"\nimport { calcChildStagger } from \"../utils/calc-child-stagger\"\nimport { VisualElementAnimationOptions } from \"./types\"\nimport { animateTarget } from \"./visual-element-target\"\n\nexport function animateVariant(\n visualElement: VisualElement,\n variant: string,\n options: VisualElementAnimationOptions = {}\n): Promise<any> {\n const resolved = resolveVariant(\n visualElement,\n variant,\n options.type === \"exit\"\n ? visualElement.presenceContext?.custom\n : undefined\n )\n\n let { transition = visualElement.getDefaultTransition() || {} } =\n resolved || {}\n\n if (options.transitionOverride) {\n transition = options.transitionOverride\n }\n\n /**\n * If we have a variant, create a callback that runs it as an animation.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getAnimation: () => Promise<any> = resolved\n ? () => Promise.all(animateTarget(visualElement, resolved, options))\n : () => Promise.resolve()\n\n /**\n * If we have children, create a callback that runs all their animations.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getChildAnimations =\n visualElement.variantChildren && visualElement.variantChildren.size\n ? (forwardDelay = 0) => {\n const {\n delayChildren = 0,\n staggerChildren,\n staggerDirection,\n } = transition\n\n return animateChildren(\n visualElement,\n variant,\n forwardDelay,\n delayChildren,\n staggerChildren,\n staggerDirection,\n options\n )\n }\n : () => Promise.resolve()\n\n /**\n * If the transition explicitly defines a \"when\" option, we need to resolve either\n * this animation or all children animations before playing the other.\n */\n const { when } = transition\n if (when) {\n const [first, last] =\n when === \"beforeChildren\"\n ? [getAnimation, getChildAnimations]\n : [getChildAnimations, getAnimation]\n\n return first().then(() => last())\n } else {\n return Promise.all([getAnimation(), getChildAnimations(options.delay)])\n }\n}\n\nfunction animateChildren(\n visualElement: VisualElement,\n variant: string,\n delay: number = 0,\n delayChildren: number | DynamicOption<number> = 0,\n staggerChildren = 0,\n staggerDirection = 1,\n options: VisualElementAnimationOptions\n) {\n const animations: Promise<any>[] = []\n\n for (const child of visualElement.variantChildren!) {\n child.notify(\"AnimationStart\", variant)\n animations.push(\n animateVariant(child, variant, {\n ...options,\n delay:\n delay +\n (typeof delayChildren === \"function\" ? 0 : delayChildren) +\n calcChildStagger(\n visualElement.variantChildren!,\n child,\n delayChildren,\n staggerChildren,\n staggerDirection\n ),\n }).then(() => child.notify(\"AnimationComplete\", variant))\n )\n }\n\n return Promise.all(animations)\n}\n"],"names":[],"mappings":";;;;AAOM,SAAU,cAAc,CAC1B,aAA4B,EAC5B,OAAe,EACf,UAAyC,EAAE,EAAA;AAE3C,IAAA,MAAM,QAAQ,GAAG,cAAc,CAC3B,aAAa,EACb,OAAO,EACP,OAAO,CAAC,IAAI,KAAK,MAAM;AACnB,UAAE,aAAa,CAAC,eAAe,EAAE,MAAM;UACrC,SAAS,CAClB,CAAA;AAED,IAAA,IAAI,EAAE,UAAU,GAAG,aAAa,CAAC,oBAAoB,EAAE,IAAI,EAAE,EAAE,GAC3D,QAAQ,IAAI,EAAE,CAAA;AAElB,IAAA,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC5B,QAAA,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAA;KAC1C;AAED;;;AAGG;IACH,MAAM,YAAY,GAAuB,QAAQ;AAC7C,UAAE,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;UAClE,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;AAE7B;;;AAGG;IACH,MAAM,kBAAkB,GACpB,aAAa,CAAC,eAAe,IAAI,aAAa,CAAC,eAAe,CAAC,IAAI;AAC/D,UAAE,CAAC,YAAY,GAAG,CAAC,KAAI;YACjB,MAAM,EACF,aAAa,GAAG,CAAC,EACjB,eAAe,EACf,gBAAgB,GACnB,GAAG,UAAU,CAAA;AAEd,YAAA,OAAO,eAAe,CAClB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,OAAO,CACV,CAAA;SACJ;UACD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;AAEjC;;;AAGG;AACH,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAA;IAC3B,IAAI,IAAI,EAAE;QACN,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GACf,IAAI,KAAK,gBAAgB;AACrB,cAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC;AACpC,cAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAA;QAE5C,OAAO,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;KACpC;SAAM;AACH,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KAC1E;AACL,CAAC;AAED,SAAS,eAAe,CACpB,aAA4B,EAC5B,OAAe,EACf,KAAA,GAAgB,CAAC,EACjB,aAAA,GAAgD,CAAC,EACjD,eAAe,GAAG,CAAC,EACnB,gBAAgB,GAAG,CAAC,EACpB,OAAsC,EAAA;IAEtC,MAAM,UAAU,GAAmB,EAAE,CAAA;AAErC,IAAA,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,eAAgB,EAAE;AAChD,QAAA,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;QACvC,UAAU,CAAC,IAAI,CACX,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;AAC3B,YAAA,GAAG,OAAO;AACV,YAAA,KAAK,EACD,KAAK;AACL,iBAAC,OAAO,aAAa,KAAK,UAAU,GAAG,CAAC,GAAG,aAAa,CAAC;AACzD,gBAAA,gBAAgB,CACZ,aAAa,CAAC,eAAgB,EAC9B,KAAK,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,CACnB;AACR,SAAA,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAC5D,CAAA;KACJ;AAED,IAAA,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;AAClC;;;;"}