UNPKG

ember-promise-modals

Version:

The better way to handle modals in your Ember.js apps.

135 lines (121 loc) 3.59 kB
@layer ember-promise-modals { :root { /* The named -duration and -delay variables will be lowered to near zero when using the setupPromiseModals test helper */ --epm-animation-backdrop-in-duration: 0.3s; --epm-animation-backdrop-out-duration: 0.18s; --epm-animation-modal-in-duration: 0.3s; --epm-animation-modal-out-duration: 0.18s; --epm-animation-backdrop-in-delay: 0s; --epm-animation-backdrop-out-delay: 0s; --epm-animation-modal-in-delay: 0s; --epm-animation-modal-out-delay: 0s; --epm-animation-backdrop-in: var(--epm-animation-backdrop-in-duration) ease var(--epm-animation-backdrop-in-delay) forwards epm-backdrop-in; --epm-animation-backdrop-out: var(--epm-animation-backdrop-out-duration) ease var(--epm-animation-backdrop-out-delay) forwards epm-backdrop-out; --epm-animation-modal-in: var(--epm-animation-modal-in-duration) ease-out var(--epm-animation-modal-in-delay) forwards epm-modal-in; --epm-animation-modal-out: var(--epm-animation-modal-out-duration) ease-out var(--epm-animation-modal-out-delay) forwards epm-modal-out; --epm-backdrop-background: #2d3748CD; } } @media (prefers-reduced-motion: reduce) { :root { --epm-animation-backdrop-in-duration: 0.001s; --epm-animation-backdrop-out-duration: 0.001s; --epm-animation-modal-in-duration: 0.001s; --epm-animation-modal-out-duration: 0.001s; --epm-animation-backdrop-in-delay: 0.001s; --epm-animation-backdrop-out-delay: 0.001s; --epm-animation-modal-in-delay: 0.001s; --epm-animation-modal-out-delay: 0.001s; } } .epm-scrolling-disabled { overflow: hidden; } .epm-backdrop, .epm-modal-container { position: fixed; top: 0; right: 0; bottom: 0; left: 0; } .epm-backdrop { background-color: var(--epm-backdrop-background); opacity: 0; animation: var(--epm-animation-backdrop-in); animation-delay: var(--epm-animation-backdrop-in-delay); animation-duration: var(--epm-animation-backdrop-in-duration); } .epm-modal-container { display: flex; align-items: center; justify-content: center; overflow: auto; } .epm-animating .epm-modal-container { overflow: unset; } .epm-modal { margin: auto; transform: translate(0, -30vh) scale(1.1); opacity: 0; animation: var(--epm-animation-modal-in); animation-delay: var(--epm-animation-modal-in-delay); animation-duration: var(--epm-animation-modal-in-duration); -webkit-overflow-scrolling: touch; /* momentum-based scrolling for Safari on iOS */ } .epm-backdrop.epm-out { opacity: 1; animation: var(--epm-animation-backdrop-out); animation-delay: var(--epm-animation-backdrop-out-delay); animation-duration: var(--epm-animation-backdrop-out-duration); pointer-events: none; } .epm-modal.epm-out { transform: translate(0, 0) scale(1); opacity: 1; animation: var(--epm-animation-modal-out); animation-delay: var(--epm-animation-modal-out-delay); animation-duration: var(--epm-animation-modal-out-duration); pointer-events: none; } @keyframes epm-backdrop-in { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes epm-backdrop-out { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes epm-modal-in { 0% { transform: translate(0, -30vh) scale(1.1); opacity: 0; } 72% { transform: translate(0, 0) scale(0.99); opacity: 1; } 100% { transform: translate(0, 0) scale(1); opacity: 1; } } @keyframes epm-modal-out { 0% { transform: translate(0, 0) scale(1); opacity: 1; } 100% { transform: translate(0, -10vh) scale(0.8); opacity: 0; } }