{"version":3,"file":"subject.mjs","sources":["../../../../src/animation/animate/subject.ts"],"sourcesContent":["import {\n    animateEffectSubject,\n    animateElement,\n    AnimationPlaybackControlsWithThen,\n    AnimationScope,\n    AnyResolvedKeyframe,\n    DOMKeyframesDefinition,\n    AnimationOptions as DynamicAnimationOptions,\n    EffectKeyframes,\n    EffectTransition,\n    ElementOrSelector,\n    findEffect,\n    isMotionValue,\n    MotionValue,\n    propEffect,\n    UnresolvedValueKeyframe,\n    ValueAnimationTransition,\n    visualElementStore,\n} from \"motion-dom\"\nimport { invariant } from \"motion-utils\"\nimport { ObjectTarget } from \"../sequence/types\"\nimport { isDOMKeyframes } from \"../utils/is-dom-keyframes\"\nimport { resolveSubjects } from \"./resolve-subjects\"\nimport { animateSingleValue } from \"motion-dom\"\n\nexport type AnimationSubject = Element | MotionValue<any> | any\n\nfunction isSingleValue(\n    subject: unknown,\n    keyframes: unknown\n): subject is MotionValue | AnyResolvedKeyframe {\n    return (\n        isMotionValue(subject) ||\n        typeof subject === \"number\" ||\n        (typeof subject === \"string\" && !isDOMKeyframes(keyframes))\n    )\n}\n\n/**\n * Animate a string\n */\nexport function animateSubject(\n    value: string | MotionValue<string>,\n    keyframes: string | UnresolvedValueKeyframe<string>[],\n    options?: ValueAnimationTransition<string>\n): AnimationPlaybackControlsWithThen[]\n/**\n * Animate a number\n */\nexport function animateSubject(\n    value: number | MotionValue<number>,\n    keyframes: number | UnresolvedValueKeyframe<number>[],\n    options?: ValueAnimationTransition<number>\n): AnimationPlaybackControlsWithThen[]\n/**\n * Animate a Element\n */\nexport function animateSubject(\n    element: ElementOrSelector,\n    keyframes: DOMKeyframesDefinition,\n    options?: DynamicAnimationOptions,\n    scope?: AnimationScope\n): AnimationPlaybackControlsWithThen[]\n/**\n * Animate a object\n */\nexport function animateSubject<O extends Object>(\n    object: O | O[],\n    keyframes: ObjectTarget<O>,\n    options?: DynamicAnimationOptions\n): AnimationPlaybackControlsWithThen[]\n/**\n * Implementation\n */\nexport function animateSubject<O extends Object>(\n    subject:\n        | MotionValue<number>\n        | MotionValue<string>\n        | number\n        | string\n        | ElementOrSelector\n        | O\n        | O[],\n    keyframes:\n        | number\n        | string\n        | UnresolvedValueKeyframe<number>[]\n        | UnresolvedValueKeyframe<string>[]\n        | DOMKeyframesDefinition\n        | ObjectTarget<O>,\n    options?:\n        | ValueAnimationTransition<number>\n        | ValueAnimationTransition<string>\n        | DynamicAnimationOptions,\n    scope?: AnimationScope\n): AnimationPlaybackControlsWithThen[] {\n    const animations: AnimationPlaybackControlsWithThen[] = []\n\n    if (isSingleValue(subject, keyframes)) {\n        animations.push(\n            animateSingleValue(\n                subject,\n                isDOMKeyframes(keyframes)\n                    ? (keyframes as any).default || keyframes\n                    : keyframes,\n                options ? (options as any).default || options : options\n            )\n        )\n    } else {\n        // Gracefully handle null/undefined subjects (e.g., from querySelector returning null)\n        if (subject == null) {\n            return animations\n        }\n\n        const subjects = resolveSubjects(\n            subject,\n            keyframes as DOMKeyframesDefinition,\n            scope\n        )\n\n        const numSubjects = subjects.length\n\n        invariant(\n            Boolean(numSubjects),\n            \"No valid elements provided.\",\n            \"no-valid-elements\"\n        )\n\n        for (let i = 0; i < numSubjects; i++) {\n            const thisSubject = subjects[i]\n            const transition = { ...options }\n\n            /**\n             * Resolve stagger function if provided.\n             */\n            if (\n                \"delay\" in transition &&\n                typeof transition.delay === \"function\"\n            ) {\n                transition.delay = transition.delay(i, numSubjects)\n            }\n\n            if (thisSubject instanceof Element) {\n                /**\n                 * An element already owned by a VisualElement (a <motion.*>\n                 * component or animateLayout()) animates its values so they\n                 * share one renderer. Anything else is driven through\n                 * styleEffect (or svgEffect) and the DOM keyframe resolver,\n                 * without creating a VisualElement.\n                 */\n                animations.push(\n                    ...animateElement(\n                        thisSubject as HTMLElement | SVGElement,\n                        keyframes as EffectKeyframes,\n                        transition as EffectTransition,\n                        visualElementStore.get(thisSubject)\n                    )\n                )\n            } else {\n                /**\n                 * Registered effects (animate.addEffect) claim non-DOM\n                 * subjects before we fall back to writing plain properties.\n                 */\n                animations.push(\n                    ...animateEffectSubject(\n                        findEffect(thisSubject) ?? propEffect,\n                        thisSubject as object,\n                        keyframes as EffectKeyframes,\n                        transition as EffectTransition\n                    )\n                )\n            }\n        }\n    }\n\n    return animations\n}\n"],"names":[],"mappings":";;;;;AA2BA,SAAS,aAAa,CAClB,OAAgB,EAChB,SAAkB,EAAA;AAElB,IAAA,QACI,aAAa,CAAC,OAAO,CAAC;QACtB,OAAO,OAAO,KAAK,QAAQ;AAC3B,SAAC,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AAEnE;AAmCA;;AAEG;AACG,SAAU,cAAc,CAC1B,OAOS,EACT,SAMqB,EACrB,OAG6B,EAC7B,KAAsB,EAAA;IAEtB,MAAM,UAAU,GAAwC,EAAE;AAE1D,IAAA,IAAI,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;QACnC,UAAU,CAAC,IAAI,CACX,kBAAkB,CACd,OAAO,EACP,cAAc,CAAC,SAAS;AACpB,cAAG,SAAiB,CAAC,OAAO,IAAI;AAChC,cAAE,SAAS,EACf,OAAO,GAAI,OAAe,CAAC,OAAO,IAAI,OAAO,GAAG,OAAO,CAC1D,CACJ;IACL;SAAO;;AAEH,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,UAAU;QACrB;QAEA,MAAM,QAAQ,GAAG,eAAe,CAC5B,OAAO,EACP,SAAmC,EACnC,KAAK,CACR;AAED,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM;QAEnC,SAAS,CACL,OAAO,CAAC,WAAW,CAAC,EACpB,6BAA6B,EAC7B,mBAAmB,CACtB;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC/B,YAAA,MAAM,UAAU,GAAG,EAAE,GAAG,OAAO,EAAE;AAEjC;;AAEG;YACH,IACI,OAAO,IAAI,UAAU;AACrB,gBAAA,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EACxC;gBACE,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;YACvD;AAEA,YAAA,IAAI,WAAW,YAAY,OAAO,EAAE;AAChC;;;;;;AAMG;gBACH,UAAU,CAAC,IAAI,CACX,GAAG,cAAc,CACb,WAAuC,EACvC,SAA4B,EAC5B,UAA8B,EAC9B,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CACtC,CACJ;YACL;iBAAO;AACH;;;AAGG;gBACH,UAAU,CAAC,IAAI,CACX,GAAG,oBAAoB,CACnB,UAAU,CAAC,WAAW,CAAC,IAAI,UAAU,EACrC,WAAqB,EACrB,SAA4B,EAC5B,UAA8B,CACjC,CACJ;YACL;QACJ;IACJ;AAEA,IAAA,OAAO,UAAU;AACrB;;;;"}