docs: function createAttentionAnimation(options) {
    var movement = options.movement;
    options.initialVelocity = 0.1;
    options.equilibriumPosition = 0;
    var spring = easing.createSpringEasing(options);
    var tweenPosition = movement.position;
    var tweenRotation = movement.rotation;
    var tweenRotationPost = movement.rotationPost;
    var tweenScale = movement.scale;
    var tweenSkew = movement.skew;
  
    var currentMovement = state.createState({
      position: tweenPosition ? [0, 0, 0] : undefined,
      rotation: tweenRotation ? [0, 0, 0] : undefined,
      rotationPost: tweenRotationPost ? [0, 0, 0] : undefined,
      scale: tweenScale ? [1, 1] : undefined,
      skew: tweenSkew ? [0, 0] : undefined
    });
  
    // Public API
    return {
      options() { return options; },
  
      tick() {
        if (spring.equilibrium)
          return;
        spring.tick();
  
        this.updateMovement();
      },
  
      updateMovement() {
        var value = spring.getValue();
        if  (tweenPosition) {
          currentMovement.position[0] = movement.position[0] * value;
          currentMovement.position[1] = movement.position[1] * value;
          currentMovement.position[2] = movement.position[2] * value;
        }
        if (tweenRotation) {
          currentMovement.rotation[0] = movement.rotation[0] * value;
          currentMovement.rotation[1] = movement.rotation[1] * value;
          currentMovement.rotation[2] = movement.rotation[2] * value;
        }
        if (tweenRotationPost) {
          currentMovement.rotationPost[0] = movement.rotationPost[0] * value;
          currentMovement.rotationPost[1] = movement.rotationPost[1] * value;
          currentMovement.rotationPost[2] = movement.rotationPost[2] * value;
        }
        if (tweenScale) {
          currentMovement.scale[0] = 1 + movement.scale[0] * value;
          currentMovement.scale[1] = 1 + movement.scale[1] * value;
        }
  
        if (tweenSkew) {
          currentMovement.skew[0] = movement.skew[0] * value;
          currentMovement.skew[1] = movement.skew[1] * value;
        }
      },
  
      updateElement(element) {
        utils.updateElementTransform(element, currentMovement.asMatrix());
        utils.updateElementProperties(element, currentMovement.getProperties());
      },
  
      getCurrentState() {
        return currentMovement;
      },
  
      completed() {
        return spring.completed();
      }
    };
  }