// Animations

@mixin animate-opacity($enterDuration: 100ms, $leaveDuration: 150ms) {
  opacity: 0;

  &.enter {
    transition-property: opacity;
    transition-duration: $enterDuration;
    opacity: 1;
  }

  &.leave {
    transition-duration: $leaveDuration;
    transition-timing-function: ease-out;
    opacity: 0;
  }
}

@mixin animate-slide-right($enterDuration: 100ms, $leaveDuration: 150ms) {
  transform: translateX(100%);
  will-change: transform;

  &.enter {
    transform: translateX(0);
    transition: transform $enterDuration;
    transition-timing-function: ease-in-out;
  }

  &.leave {
    transform: translateX(100%);
    transition: transform $leaveDuration;
  }
}

@mixin animate-opacity-scale($enterDuration: 250ms, $leaveDuration: 150ms) {
  opacity: 0;

  &.enter {
    transition: opacity $enterDuration;
    opacity: 1;
  }

  &.leave {
    will-change: opacity, transform;
    opacity: 0;
    transform: scale(1.25);
    transition: transform $leaveDuration ease-in, opacity $leaveDuration ease-out;
  }
}

.Animate {
  &:empty {
    display: none;
  }

  // Animation name
  &.opacity {
    @include animate-opacity;
  }

  &.slide-right {
    @include animate-slide-right;
  }

  &.opacity-scale {
    @include animate-opacity-scale;
  }
}
