@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
194 lines (164 loc) • 4.25 kB
text/less
@blurEffect: saturate(1.3) blur(5px);
@backdropColor: rgba(0, 0, 0, 0.7);
@backdropInOpacity: 1;
@backdropOutOpacity: 0;
@backdropAnimationDuration: 300ms;
@dialogInTransform: scale3d(1, 1, 1);
@dialogOutTransform: scale3d(0.8, 0.8, 0.8);
@dialogInOpacity: 1;
@dialogOutOpacity: 0;
@dialogAnimationDuration: 300ms;
@enterTimingFunction: cubic-bezier(0.4, 0, 0, 1);
@exitTimingFunction: cubic-bezier(0.76, 0.18, 0.4, 0.92);
@lightSteel15PercentOpacity: rgba(160, 180, 220, 0.15);
@keyframes backdropEnter {
from {
opacity: @backdropOutOpacity;
}
to {
opacity: @backdropInOpacity;
}
}
@keyframes backdropLeave {
from {
opacity: @backdropInOpacity;
}
to {
opacity: @backdropOutOpacity;
}
}
@keyframes dialogEnter {
from {
transform: @dialogOutTransform;
opacity: @dialogOutOpacity;
}
to {
transform: @dialogInTransform;
opacity: @dialogInOpacity;
}
}
@keyframes dialogLeave {
from {
transform: @dialogInTransform;
opacity: @dialogInOpacity;
}
to {
transform: @dialogOutTransform;
opacity: @dialogOutOpacity;
}
}
/********************************************************
Shared set of properties for both the tinted backdrop
and the full screen container that holds a dialog
********************************************************/
.fullscreenOverlay() {
display: flex;
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: var(--layer-critical);
overflow: hidden;
overscroll-behavior: none;
}
/**********************************
Tinted backdrop (behind dialog)
***********************************/
// Need to namespace with sp- to avoid collision with other modal styles
.sp-modal-backdrop {
.fullscreenOverlay();
background-color: @backdropColor;
will-change: opacity;
}
.sp-modal-backdrop.enter {
animation-name: backdropEnter;
animation-duration: @backdropAnimationDuration;
animation-timing-function: @enterTimingFunction;
}
.sp-modal-backdrop.exit {
animation-name: backdropLeave;
animation-duration: @backdropAnimationDuration;
animation-timing-function: @exitTimingFunction;
}
.sp-modal-backdrop.enter-active,
.sp-modal-backdrop.enter-done {
opacity: @backdropInOpacity;
}
.sp-modal-backdrop.exit-active,
.sp-modal-backdrop.exit-done {
opacity: @backdropOutOpacity;
}
.sp-modal-backdrop-blur-effect {
transition: filter @backdropAnimationDuration @enterTimingFunction;
filter: @blurEffect;
}
/************************************************
Modal dialog and associated layout container
************************************************/
.Modal {
.fullscreenOverlay();
justify-content: center;
align-items: center;
.sp-dialog-sizer {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: 1fr;
max-height: ~'calc(100vh - 64px)';
min-height: 320px;
width: ~'calc(100vw - 128px)';
margin: 0 64px;
}
@media screen and (max-width: 1024px) {
.sp-dialog-sizer {
max-height: ~'calc(100vh - 32px)';
width: ~'calc(100vw - 48px)';
margin: 0 24px;
}
}
/* for large screens, place an eventual cap on the height of a modal */
@media screen and (min-height: 1164px) {
.sp-dialog-sizer {
max-height: 1100px;
}
}
.sp-dialog-content {
display: flex;
position: relative;
grid-column: ~'1 / -1';
grid-row: ~'1 / -1';
flex-direction: column;
overflow: hidden;
border-radius: 8px;
box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
will-change: transform, opacity;
}
&.enter {
.sp-dialog-content {
animation-name: dialogEnter;
animation-duration: @dialogAnimationDuration;
animation-timing-function: @enterTimingFunction;
}
}
&.exit {
.sp-dialog-content {
animation-name: dialogLeave;
animation-duration: @dialogAnimationDuration;
animation-timing-function: @exitTimingFunction;
}
}
&.enter-active,
&.enter-done {
.sp-dialog-content {
transform: @dialogInTransform;
opacity: @dialogInOpacity;
}
}
&.exit-active,
&.exit-done {
.sp-dialog-content {
transform: @dialogOutTransform;
opacity: @dialogOutOpacity;
}
}
}