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(); if (isAnimationControls(animate)) { this.unmountControls = 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() { var _a; this.node.animationState.reset(); (_a = this.unmountControls) === null || _a === void 0 ? void 0 : _a.call(this); } } export { AnimationFeature };