| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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() {
- this.node.animationState.reset();
- this.unmountControls?.();
- }
- }
- export { AnimationFeature };
|