UNPKG

motion-dom

Version:
1 lines • 4.7 kB
{"version":3,"file":"effects.mjs","sources":["../../../../src/animation/animate/effects.ts"],"sourcesContent":["import { invariant, removeItem } from \"motion-utils\"\nimport { AnimateEffect } from \"../../effects/utils/create-effect\"\nimport { motionValue } from \"../../value\"\nimport { animateMotionValue } from \"../interfaces/motion-value\"\nimport {\n AnimationPlaybackControlsWithThen,\n UnresolvedValueKeyframe,\n ValueAnimationTransition,\n} from \"../types\"\nimport { getValueTransition } from \"../utils/get-value-transition\"\n\n/**\n * Effects registered via `animate.addEffect()`, most recent first.\n */\nconst effects: AnimateEffect<any>[] = []\n\nexport function addEffect(effect: AnimateEffect<any>): void {\n invariant(\n typeof effect.test === \"function\" && typeof effect.read === \"function\",\n \"Effects passed to animate.addEffect() need test() and read().\",\n \"effect-missing-test\"\n )\n\n removeEffect(effect)\n effects.unshift(effect)\n}\n\nexport function removeEffect(effect: AnimateEffect<any>): void {\n removeItem(effects, effect)\n}\n\nexport function findEffect(subject: unknown): AnimateEffect | undefined {\n return effects.find((effect) => effect.test(subject))\n}\n\nexport type EffectKeyframes = Record<\n string,\n UnresolvedValueKeyframe | UnresolvedValueKeyframe[]\n>\n\n/**\n * Effect subjects can expose any key, so per-key transition overrides\n * are keyed by arbitrary strings.\n */\nexport type EffectTransition = ValueAnimationTransition &\n Record<string, unknown>\n\n/**\n * Animate the keys of `subject` via `effect`. Motion values are created on\n * first animation, seeded from `effect.read()` or the first keyframe, and\n * then bound to the subject via the effect for the rest of its life.\n */\nexport function animateEffectSubject<Subject extends object>(\n effect: AnimateEffect<Subject>,\n subject: Subject,\n keyframes: EffectKeyframes,\n transition: EffectTransition = {}\n): AnimationPlaybackControlsWithThen[] {\n const animations: AnimationPlaybackControlsWithThen[] = []\n\n for (const key in keyframes) {\n const target = keyframes[key]\n let value = effect.get(subject, key)\n\n if (!value) {\n const initial =\n effect.read(subject, key, target) ?? firstKeyframe(target)\n\n invariant(\n initial !== undefined,\n `\"${key}\" can't be read from the animated subject. Provide [from, to] keyframes.`,\n \"effect-unreadable-value\"\n )\n\n value = motionValue(initial)\n effect(subject, { [key]: value })\n }\n\n value.start(\n animateMotionValue(\n key,\n value,\n target as any,\n getValueTransition(transition, key)\n )\n )\n\n value.animation && animations.push(value.animation)\n }\n\n return animations\n}\n\nfunction firstKeyframe(\n target: UnresolvedValueKeyframe | UnresolvedValueKeyframe[]\n) {\n const first = Array.isArray(target) ? target[0] : undefined\n return first === null ? undefined : first\n}\n"],"names":[],"mappings":";;;;;AAWA;;AAEG;AACH,MAAM,OAAO,GAAyB,EAAE;AAElC,SAAU,SAAS,CAAC,MAA0B,EAAA;AAChD,IAAA,SAAS,CACL,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EACtE,+DAA+D,EAC/D,qBAAqB,CACxB;IAED,YAAY,CAAC,MAAM,CAAC;AACpB,IAAA,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;AAC3B;AAEM,SAAU,YAAY,CAAC,MAA0B,EAAA;AACnD,IAAA,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;AAC/B;AAEM,SAAU,UAAU,CAAC,OAAgB,EAAA;AACvC,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzD;AAcA;;;;AAIG;AACG,SAAU,oBAAoB,CAChC,MAA8B,EAC9B,OAAgB,EAChB,SAA0B,EAC1B,UAAA,GAA+B,EAAE,EAAA;IAEjC,MAAM,UAAU,GAAwC,EAAE;AAE1D,IAAA,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;AACzB,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC;QAC7B,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;QAEpC,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,MAAM,OAAO,GACT,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;YAE9D,SAAS,CACL,OAAO,KAAK,SAAS,EACrB,CAAA,CAAA,EAAI,GAAG,CAAA,wEAAA,CAA0E,EACjF,yBAAyB,CAC5B;AAED,YAAA,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC;YAC5B,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;QACrC;AAEA,QAAA,KAAK,CAAC,KAAK,CACP,kBAAkB,CACd,GAAG,EACH,KAAK,EACL,MAAa,EACb,kBAAkB,CAAC,UAAU,EAAE,GAAG,CAAC,CACtC,CACJ;QAED,KAAK,CAAC,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;IACvD;AAEA,IAAA,OAAO,UAAU;AACrB;AAEA,SAAS,aAAa,CAClB,MAA2D,EAAA;AAE3D,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS;IAC3D,OAAO,KAAK,KAAK,IAAI,GAAG,SAAS,GAAG,KAAK;AAC7C;;;;"}