// Bounce Animation taken from https://github.com/fkhadra/react-toastify $trans-cubic-bezier: cubic-bezier(0.215, 0.61, 0.355, 1); @mixin timing-function { animation-timing-function: $trans-cubic-bezier; } @keyframes bounceInRight { from, 60%, 75%, 90%, to { @include timing-function; } from { opacity: 0; transform: translate3d(3000px, 0, 0); } 60% { opacity: 1; transform: translate3d(-25px, 0, 0); } 75% { transform: translate3d(10px, 0, 0); } 90% { transform: translate3d(-5px, 0, 0); } to { transform: none; } } @keyframes bounceOutRight { 40% { opacity: 1; transform: translate3d(-20px, 0, 0); } to { opacity: 0; transform: translate3d(1000px, 0, 0); } } @keyframes bounceInLeft { from, 60%, 75%, 90%, to { @include timing-function; } 0% { opacity: 0; transform: translate3d(-3000px, 0, 0); } 60% { opacity: 1; transform: translate3d(25px, 0, 0); } 75% { transform: translate3d(-10px, 0, 0); } 90% { transform: translate3d(5px, 0, 0); } to { transform: none; } } @keyframes bounceOutLeft { 20% { opacity: 1; transform: translate3d(20px, 0, 0); } to { opacity: 0; transform: translate3d(-2000px, 0, 0); } } @keyframes bounceInUp { from, 60%, 75%, 90%, to { @include timing-function; } from { opacity: 0; transform: translate3d(0, 3000px, 0); } 60% { opacity: 1; transform: translate3d(0, -20px, 0); } 75% { transform: translate3d(0, 10px, 0); } 90% { transform: translate3d(0, -5px, 0); } to { transform: translate3d(0, 0, 0); } } @keyframes bounceOutUp { 20% { transform: translate3d(0, -10px, 0); } 40%, 45% { opacity: 1; transform: translate3d(0, 20px, 0); } to { opacity: 0; transform: translate3d(0, -2000px, 0); } } @keyframes bounceInDown { from, 60%, 75%, 90%, to { @include timing-function; } 0% { opacity: 0; transform: translate3d(0, -3000px, 0); } 60% { opacity: 1; transform: translate3d(0, 25px, 0); } 75% { transform: translate3d(0, -10px, 0); } 90% { transform: translate3d(0, 5px, 0); } to { transform: none; } } @keyframes bounceOutDown { 20% { transform: translate3d(0, 10px, 0); } 40%, 45% { opacity: 1; transform: translate3d(0, -20px, 0); } to { opacity: 0; transform: translate3d(0, 2000px, 0); } } .#{$vt-namespace}__bounce-enter-active { &.top-left, &.bottom-left { animation-name: bounceInLeft; } &.top-right, &.bottom-right { animation-name: bounceInRight; } &.top-center { animation-name: bounceInDown; } &.bottom-center { animation-name: bounceInUp; } } .#{$vt-namespace}__bounce-leave-active:not(.disable-transition) { &.top-left, &.bottom-left { animation-name: bounceOutLeft; } &.top-right, &.bottom-right { animation-name: bounceOutRight; } &.top-center { animation-name: bounceOutUp; } &.bottom-center { animation-name: bounceOutDown; } } .#{$vt-namespace}__bounce-leave-active, .#{$vt-namespace}__bounce-enter-active { animation-duration: 750ms; animation-fill-mode: both; } .#{$vt-namespace}__bounce-move { transition-timing-function: ease-in-out; transition-property: all; transition-duration: 400ms; }