import { isAnimationControls } from '../../../animation/utils/is-animation-controls.mjs'; import { createAnimationState } from '../../../render/utils/animation-state.mjs'; import { Feature } from '../Feature.mjs'; class AnimationFeature extends Feature { /** * We dynamically generate the AnimationState manager as it contains a reference * to the underlying animation library. We only want to load that if we load this, * so people can optionally code split it out using the `m` component. */ constructor(node) { super(node); node.animationState || (node.animationState = createAnimationState(node)); } updateAnimationControlsSubscription() { const { animate } = this.node.getProps(); this.unmount(); if (isAnimationControls(animate)) { this.unmount = animate.subscribe(this.node); } } /** * Subscribe any provided AnimationControls to the component's VisualElement */ mount() { this.updateAnimationControlsSubscription(); } update() { const { animate } = this.node.getProps(); const { animate: prevAnimate } = this.node.prevProps || {}; if (animate !== prevAnimate) { this.updateAnimationControlsSubscription(); } } unmount() { } } export { AnimationFeature };