@use "../mixins/motion" as *;

@mixin slide-motion(
  $className,
  $keyframeName,
  $duration: 0.2s,
  $ease: var(--adui-motion-ease-base)
) {
  @include make-motion($className, $keyframeName, $duration);
  .#{$className}-enter,
  .#{$className}-appear {
    opacity: 0;
    animation-timing-function: $ease;
    backface-visibility: hidden;
  }
  .#{$className}-leave {
    animation-timing-function: $ease;
    backface-visibility: hidden;
  }
}

@include slide-motion(slide-up, slideUp);
@include slide-motion(
  slide-up-bounce,
  slideUp,
  var(--adui-motion-duration-bounce),
  var(--adui-motion-ease-bounce)
);
@include slide-motion(slide-down, slideDown);
@include slide-motion(slide-left, slideLeft);
@include slide-motion(slide-right, slideRight);

@keyframes slideUpIn {
  0% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleY(1) translateY(-4px) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
}

@keyframes slideUpOut {
  0% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleY(1) translateY(-4px) translateZ(0);
  }
}

@keyframes slideDownIn {
  0% {
    opacity: 0;
    transform-origin: 100% 100%;
    transform: scaleY(1) translateY(4px) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 100% 100%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
}

@keyframes slideDownOut {
  0% {
    opacity: 1;
    transform-origin: 100% 100%;
    transform: scaleY(1) translateY(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 100% 100%;
    transform: scaleY(1) translateY(4px) translateZ(0);
  }
}

@keyframes slideLeftIn {
  0% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleX(1) translateX(-4px) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
}

@keyframes slideLeftOut {
  0% {
    opacity: 1;
    transform-origin: 0% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 0% 0%;
    transform: scaleX(1) translateX(-4px) translateZ(0);
  }
}

@keyframes slideRightIn {
  0% {
    opacity: 0;
    transform-origin: 100% 0%;
    transform: scaleX(1) translateX(4px) translateZ(0);
  }
  100% {
    opacity: 1;
    transform-origin: 100% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
}

@keyframes slideRightOut {
  0% {
    opacity: 1;
    transform-origin: 100% 0%;
    transform: scaleX(1) translateX(0) translateZ(0);
  }
  100% {
    opacity: 0;
    transform-origin: 100% 0%;
    transform: scaleX(1) translateX(4px) translateZ(0);
  }
}
