keystone
Version:
Web Application Framework and Admin GUI / Content Management System built on Express.js and Mongoose
414 lines (349 loc) • 8.58 kB
text/less
//
// Popout
// ==============================
@popout-gutter: 20px;
@popout-arrow-size: 8px;
@popout-width: 320px;
@popout-body-height: 310px;
@popout-pane-transition-duration: 360ms;
@popout-pane-timing-function: cubic-bezier(.36, .66, .04, 1);
// Dialog
// ------------------------------
// base
.Popout {
background-color: @dropdown-bg;
border-radius: @border-radius-base;
box-shadow: 0 0 0 1px rgba(0,0,0,.175), 0 3px 8px rgba(0,0,0,.175);
font-size: @font-size-base;
margin-bottom: 20px;
position: absolute;
width: @popout-width;
z-index: @zindex-modal;
}
.Popout-enter {
opacity: 0.01;
transform: translate3d(0, 10px, 0);
}
.Popout-enter.Popout-enter-active {
opacity: 1;
transition: opacity 200ms, transform 200ms ease-out;
transform: translate3d(0, 0, 0);
}
.Popout-leave {
opacity: 1;
transform: translate3d(0, 0, 0);
}
.Popout-leave.Popout-leave-active {
opacity: 0.01;
transition: opacity 200ms, transform 200ms ease-in;
transform: translate3d(0, 20px, 0);
}
// forms inside popouts
.Popout {
.FormField:last-child,
.FormRow {
margin-bottom: 0;
}
.FormLabel {
width: 100px;
}
}
// arrow
.Popout__arrow {
left: 50%;
margin-left: -@popout-arrow-size;
margin-top: -@popout-arrow-size + 1;
position: absolute;
// common setup for shapes
&:before,
&:after {
border-left: @popout-arrow-size solid transparent;
border-right: @popout-arrow-size solid transparent;
border-bottom: @popout-arrow-size dashed;
content: "";
display: inline-block;
height: 0;
left: 0;
position: absolute;
top: 0;
width: 0;
}
// the white part of the arrow
&:before {
border-bottom-color: rgba(0, 0, 0, 0.2);
top: -1px;
}
// the shadow
&:after {
border-bottom-color: white;
}
}
// inner
.Popout__inner {
overflow: hidden;
}
// fix height and scroll
.Popout__scrollable-area {
max-height: @dropdown-menu-height;
overflow-x: hidden;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
&.Popout__body {
max-height: @popout-body-height;
}
}
// panes
.Popout__panes {
transition: height @popout-pane-transition-duration;
position: relative;
}
.Popout__pane {
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.Popout__pane-next-enter {
opacity: 0.01;
transform: translate3d(100%, 0, 0);
}
.Popout__pane-next-enter.Popout__pane-next-enter-active {
opacity: 1;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(0, 0, 0);
}
.Popout__pane-next-leave {
opacity: 1;
transform: translate3d(0, 0, 0);
}
.Popout__pane-next-leave.Popout__pane-next-leave-active {
opacity: 0.01;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(-100%, 0, 0);
}
.Popout__pane-prev-enter {
opacity: 0.01;
transform: translate3d(-100%, 0, 0);
}
.Popout__pane-prev-enter.Popout__pane-prev-enter-active {
opacity: 1;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(0, 0, 0);
}
.Popout__pane-prev-leave {
opacity: 1;
transform: translate3d(0, 0, 0);
}
.Popout__pane-prev-leave.Popout__pane-prev-leave-active {
opacity: 0.01;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(100%, 0, 0);
}
// Popout Layout
// ------------------------------
// header
.Popout__header {
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.1);
font-weight: 500;
height: 3.4em;
overflow: hidden;
margin-left: @popout-gutter;
margin-right: @popout-gutter;
padding-bottom: .5em;
padding-top: .5em;
position: relative;
text-align: center;
z-index: 1; // above the scrollable area
}
.Popout__header__button {
background: white;
border: none;
color: @gray-light;
font-size: @font-size-base;
height: 2.4em;
left: 0;
padding: 0;
position: absolute;
outline: none;
width: 2.4em;
z-index: 2;
-webkit-appearance: none;
// handle mouse/keyboard interaction
&:hover { color: @gray; }
&:active { color: @gray-dark; }
&:focus { color: @app-primary; }
&::before {
font-size: 16px;
}
}
.Popout__header__button-enter {
opacity: 0.01;
}
.Popout__header__button-enter.Popout__header__button-enter-active {
opacity: 1;
transition: opacity 200ms;
}
.Popout__header__button-leave {
opacity: 1;
}
.Popout__header__button-leave.Popout__header__button-leave-active {
opacity: 0.01;
transition: opacity 200ms;
}
.Popout__header__label {
.animation-duration( @popout-pane-transition-duration );
.animation-timing-function( @popout-pane-timing-function );
display: block;
height: @component-height;
left: 0;
line-height: @component-height;
overflow: hidden;
padding-left: @component-height;
padding-right: @component-height;
position: absolute;
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
z-index: 1;
}
.Popout__header__label-next-enter {
opacity: 0.01;
transform: translate3d(100%, 0, 0);
}
.Popout__header__label-next-enter.Popout__header__label-next-enter-active {
opacity: 1;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(0, 0, 0);
}
.Popout__header__label-next-leave {
opacity: 1;
transform: translate3d(0, 0, 0);
}
.Popout__header__label-next-leave.Popout__header__label-next-leave-active {
opacity: 0.01;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(-100%, 0, 0);
}
.Popout__header__label-prev-enter {
opacity: 0.01;
transform: translate3d(-100%, 0, 0);
}
.Popout__header__label-prev-enter.Popout__header__label-prev-enter-active {
opacity: 1;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(0, 0, 0);
}
.Popout__header__label-prev-leave {
opacity: 1;
transform: translate3d(0, 0, 0);
}
.Popout__header__label-prev-leave.Popout__header__label-prev-leave-active {
opacity: 0.01;
transition: opacity @popout-pane-transition-duration, transform @popout-pane-transition-duration;
transition-timing-function: @popout-pane-timing-function;
transform: translate3d(100%, 0, 0);
}
// footer
.Popout__footer {
&:extend(.u-clearfix all);
box-shadow: 0 -2px 0 rgba(0, 0, 0, 0.1);
margin-left: @popout-gutter;
margin-right: @popout-gutter;
padding-bottom: .5em;
padding-top: .5em;
position: relative;
z-index: 1; // above the scrollable area
}
.Popout__footer__button {
background: none;
border: none;
line-height: 2.4em;
padding: 0 @popout-gutter;
&:hover,
&:focus {
outline: none;
text-decoration: underline;
}
}
.Popout__footer__button--primary {
color: @app-primary;
float: left;
font-weight: 500;
margin-left: -@popout-gutter;
}
.Popout__footer__button--secondary {
color: @gray;
float: right;
margin-right: -@popout-gutter;
}
// body
.Popout__body {
padding: @popout-gutter;
}
// Popout List
// ------------------------------
// item
.PopoutList__item {
.transition( all 140ms );
.text-overflow();
background: #fafafa;
border: none;
border-radius: .25em;
color: @text-color;
display: block;
font-weight: normal;
padding: .5em 1em;
text-align: left;
width: 100%; // because we're using buttons, display block isn't enough
-webkit-appearance: none;
& + & {
margin-top: 3px;
}
&:hover,
&:focus {
.transition( none );
background-color: fade(@link-color, 10%);
color: @link-color;
outline: none;
.PopoutList__item__icon {
color: @link-color;
}
}
// selected filters
&.is-selected {
background-color: @link-color;
color: white;
.PopoutList__item__icon {
color: white;
}
&:focus {
outline: 1px dotted rgba(255, 255, 255, 0.75);
outline-offset: -3px;
}
}
}
// heading
.PopoutList__heading {
font-size: @font-size-sm;
color: @gray-light;
font-weight: 500;
margin-bottom: 5px;
margin-top: 2em;
&:first-child {
margin-top: 0;
}
}
// icon
.PopoutList__item__icon {
color: fade(@text-color, 40%);
float: right;
margin-left: .5em;
}