jspanel4
Version:
A JavaScript library to create highly configurable multifunctional floating panels that can also be used as modal, tooltip, hint or contextmenu
769 lines (683 loc) • 16.3 kB
CSS
/**
* jsPanel - A JavaScript library to create highly configurable multifunctional floating panels that can also be used as modal, tooltip, hint or contextmenu
* @version v4.16.1
* @homepage https://jspanel.de/
* @license MIT
* @author Stefan Sträßer - info@jspanel.de
* @author of dialog extension: Michael Daumling - michael@terrapinlogo.com
* @github https://github.com/Flyer53/jsPanel4.git
*/
.jsPanel {
border: 0;
box-sizing: border-box;
vertical-align: baseline;
font-family: Roboto, "Open Sans", Lato, "Helvetica Neue", Arial, sans-serif;
font-weight: normal;
display: flex;
flex-direction: column;
opacity: 0;
overflow: visible;
position: absolute;
/* top: 0 do not remove, otherwise panel is at the very bottom of the page -> results in vertical scrollbars -> positioning at right incorrect */
z-index: 100;
}
.jsPanel-hdr {
border: 0;
box-sizing: border-box;
vertical-align: baseline;
font-family: Roboto, "Open Sans", Lato, "Helvetica Neue", Arial, sans-serif;
font-weight: normal;
display: flex;
flex-direction: column;
line-height: normal;
}
.jsPanel-content {
border: 0;
box-sizing: border-box;
vertical-align: baseline;
font-family: Roboto, "Open Sans", Lato, "Helvetica Neue", Arial, sans-serif;
font-weight: normal;
background: #ffffff;
color: #000000;
font-size: 1rem;
position: relative;
overflow-x: hidden;
overflow-y: auto;
flex-grow: 1;
}
.jsPanel-content pre {
color: inherit;
}
.jsPanel-ftr {
flex-direction: row;
justify-content: flex-end;
flex-wrap: nowrap;
align-items: center;
display: none;
box-sizing: border-box;
font-size: 1rem;
height: auto;
background: #f5f5f5;
font-weight: normal;
color: black;
overflow: hidden;
}
.jsPanel-ftr.active {
display: flex;
flex-shrink: 0;
margin: 0;
padding: 3px 8px;
}
.jsPanel-hdr.jsPanel-hdr-dark .jsPanel-btn:hover {
background-color: rgba(255, 255, 255, 0.4);
}
.jsPanel-hdr.jsPanel-hdr-light .jsPanel-btn:hover {
background-color: rgba(0, 0, 0, 0.15);
}
.jsPanel-hdr-toolbar {
font-size: 1rem;
}
.jsPanel-headerbar {
box-sizing: border-box;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
}
.jsPanel-headerbar img {
vertical-align: middle;
max-height: 38px;
}
.jsPanel-titlebar {
display: flex;
align-items: center;
font-size: 1rem;
flex: 1 1 0;
cursor: move;
height: 100%;
overflow: hidden;
user-select: none;
}
.jsPanel-titlebar .jsPanel-title {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-variant: small-caps;
font-weight: normal;
margin: 0 5px 0 8px;
min-width: 0;
}
.jsPanel-titlebar.jsPanel-rtl {
flex-direction: row-reverse;
}
.jsPanel-controlbar {
display: flex;
align-items: center;
align-self: start;
touch-action: none;
margin: 3px;
}
.jsPanel-controlbar .jsPanel-btn {
cursor: pointer;
touch-action: none;
border-radius: 3px;
border: 0;
padding: 0;
margin: 0;
background-color: transparent;
box-shadow: none;
}
.jsPanel-controlbar .jsPanel-btn svg.jsPanel-icon, .jsPanel-controlbar .jsPanel-btn span, .jsPanel-controlbar .jsPanel-btn i {
vertical-align: middle;
}
.jsPanel-controlbar .jsPanel-btn span.glyphicon {
padding: 0 2px;
}
.jsPanel-controlbar .jsPanel-btn svg.svg-inline--fa {
margin: 2px 3px;
}
.jsPanel-controlbar .jsPanel-btn-normalize {
display: none;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xl svg:not(.svg-inline--fa), .jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xl span:not(.material-icons) {
width: 2rem;
height: 2rem;
margin: 2px 3px;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xl .svg-inline--fa {
font-size: 2rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xl span.material-icons {
font-size: 2.2rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xl span[class^=fa] {
width: auto;
height: auto;
font-size: 2rem;
margin: 0 4px;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-lg svg:not(.svg-inline--fa), .jsPanel-controlbar .jsPanel-btn.jsPanel-btn-lg span:not(.material-icons) {
width: 1.75rem;
height: 1.75rem;
margin: 2px 3px;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-lg .svg-inline--fa {
font-size: 1.75rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-lg span.material-icons {
font-size: 1.9rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-lg span[class^=fa] {
width: auto;
height: auto;
font-size: 1.75rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-md svg:not(.svg-inline--fa), .jsPanel-controlbar .jsPanel-btn.jsPanel-btn-md span:not(.material-icons) {
width: 1.5rem;
height: 1.5rem;
margin: 2px 3px;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-md .svg-inline--fa {
font-size: 1.5rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-md span.material-icons {
font-size: 1.6rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-md span[class^=fa] {
width: auto;
height: auto;
font-size: 1.5rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-sm svg:not(.svg-inline--fa), .jsPanel-controlbar .jsPanel-btn.jsPanel-btn-sm span:not(.material-icons) {
width: 1.25rem;
height: 1.25rem;
margin: 2px 3px;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-sm .svg-inline--fa {
font-size: 1.25rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-sm span.material-icons {
font-size: 1.3rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-sm span[class^=fa] {
width: auto;
height: auto;
font-size: 1.25rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xs svg:not(.svg-inline--fa), .jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xs span:not(.material-icons) {
width: 1rem;
height: 1rem;
margin: 1px 3px;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xs .svg-inline--fa {
font-size: 1rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xs span.material-icons {
font-size: 1rem;
}
.jsPanel-controlbar .jsPanel-btn.jsPanel-btn-xs span[class^=fa] {
width: auto;
height: auto;
font-size: 1rem;
}
.jsPanel-hdr-toolbar {
display: none;
width: auto;
height: auto;
}
.jsPanel-hdr-toolbar.active {
box-sizing: border-box;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
padding: 3px 8px;
}
/* styles for panels using option.rtl */
.jsPanel-titlebar .jsPanel-title[dir=rtl] {
margin: 0 8px 0 5px;
}
.jsPanel-hdr-toolbar[dir=rtl].active {
padding: 0 8px 0 8px;
}
.jsPanel-content[dir=rtl] {
text-align: right;
}
.jsPanel-ftr[dir=rtl] {
flex-direction: row;
}
/* container that takes the minified jsPanels */
#jsPanel-replacement-container, .jsPanel-minimized-box, .jsPanel-minimized-container {
display: flex;
flex-flow: row wrap-reverse;
background: transparent none repeat scroll 0 0;
bottom: 0;
height: auto;
left: 0;
position: fixed;
width: auto;
z-index: 9998;
}
.jsPanel-replacement {
font-family: Roboto, "Open Sans", Lato, "Helvetica Neue", Arial, sans-serif;
display: flex;
align-items: center;
width: 200px;
height: 34px;
margin: 1px 1px 0 0;
z-index: 9999;
}
.jsPanel-replacement .jsPanel-hdr {
flex-grow: 1;
min-width: 0;
padding: 0;
height: 34px;
overflow: hidden;
}
.jsPanel-replacement .jsPanel-hdr .jsPanel-headerlogo {
max-width: 50%;
overflow: hidden;
}
.jsPanel-replacement .jsPanel-hdr .jsPanel-headerlogo img {
max-width: 100px;
max-height: 34px;
}
.jsPanel-replacement .jsPanel-titlebar {
cursor: default;
min-width: 0;
}
.jsPanel-replacement .jsPanel-btn.jsPanel-btn-normalize {
display: block;
}
.jsPanel-minimized-box, .jsPanel-minimized-container {
position: absolute;
width: 100%;
overflow: hidden;
}
/* helper classes to make .jsPanel-content a flex box */
.flexOne {
display: flex;
flex-flow: row wrap;
}
/* css for resizeit handles -------------- */
.jsPanel-resizeit-handle {
display: block;
font-size: 0.1px;
position: absolute;
touch-action: none;
}
.jsPanel-resizeit-handle.jsPanel-resizeit-n {
cursor: n-resize;
height: 12px;
left: 9px;
top: -5px;
width: calc(100% - 18px);
}
.jsPanel-resizeit-handle.jsPanel-resizeit-e {
cursor: e-resize;
height: calc(100% - 18px);
right: -9px;
top: 9px;
width: 12px;
}
.jsPanel-resizeit-handle.jsPanel-resizeit-s {
bottom: -9px;
cursor: s-resize;
height: 12px;
left: 9px;
width: calc(100% - 18px);
}
.jsPanel-resizeit-handle.jsPanel-resizeit-w {
cursor: w-resize;
height: calc(100% - 18px);
left: -9px;
top: 9px;
width: 12px;
}
.jsPanel-resizeit-handle.jsPanel-resizeit-ne {
cursor: ne-resize;
height: 18px;
right: -9px;
top: -9px;
width: 18px;
}
.jsPanel-resizeit-handle.jsPanel-resizeit-se {
bottom: -9px;
cursor: se-resize;
height: 18px;
right: -9px;
width: 18px;
}
.jsPanel-resizeit-handle.jsPanel-resizeit-sw {
bottom: -9px;
cursor: sw-resize;
height: 18px;
left: -9px;
width: 18px;
}
.jsPanel-resizeit-handle.jsPanel-resizeit-nw {
cursor: nw-resize;
height: 18px;
left: -9px;
top: -9px;
width: 18px;
}
.jsPanel-drag-overlay {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
/* Error panel ----------------- */
.jsPanel-error .jsPanel-content {
border: 0 ;
padding-top: 0 ;
font-size: 0.9rem;
text-align: center;
}
.jsPanel-error .jsPanel-content p {
margin: 0 0 10px 0;
}
.jsPanel-error .jsPanel-content mark {
background: lavender;
border-radius: 0.33rem;
padding: 0 8px;
font-family: monospace;
}
.jsPanel-error .jsPanel-content .jsPanel-error-content-separator {
width: 100%;
height: 1px;
background-image: linear-gradient(90deg, rgb(255, 255, 255) 0%, rebeccapurple 50%, rgb(255, 255, 255) 100%);
margin-bottom: 10px;
}
/* box-shadows -------------------------------------------------------- */
.jsPanel-depth-1 {
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
}
.jsPanel-depth-2 {
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
}
.jsPanel-depth-3 {
box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
}
.jsPanel-depth-4 {
box-shadow: 0 19px 38px rgba(0, 0, 0, 0.3), 0 15px 12px rgba(0, 0, 0, 0.22);
}
.jsPanel-depth-5 {
box-shadow: 0 24px 48px rgba(0, 0, 0, 0.3), 0 20px 14px rgba(0, 0, 0, 0.22);
}
/* snap sensitive areas ------------------------------------------------ */
.jsPanel-snap-area {
position: fixed;
background: black;
opacity: 0.2;
border: 1px solid silver;
box-shadow: 0 14px 28px rgba(0, 0, 0, 0.5), 0 10px 10px rgba(0, 0, 0, 0.5);
z-index: 9999;
}
.jsPanel-snap-area-lt, .jsPanel-snap-area-lc, .jsPanel-snap-area-lb, .jsPanel-snap-area-left-top, .jsPanel-snap-area-left-center, .jsPanel-snap-area-left-bottom {
left: 0;
}
.jsPanel-snap-area-ct, .jsPanel-snap-area-cb {
left: 37.5%;
}
.jsPanel-snap-area-rt, .jsPanel-snap-area-rc, .jsPanel-snap-area-rb, .jsPanel-snap-area-right-top, .jsPanel-snap-area-right-center, .jsPanel-snap-area-right-bottom {
right: 0;
}
.jsPanel-snap-area-lt, .jsPanel-snap-area-ct, .jsPanel-snap-area-rt, .jsPanel-snap-area-left-top, .jsPanel-snap-area-center-top, .jsPanel-snap-area-right-top {
top: 0;
}
.jsPanel-snap-area-lc, .jsPanel-snap-area-rc {
top: 37.5%;
}
.jsPanel-snap-area-lb, .jsPanel-snap-area-cb, .jsPanel-snap-area-rb, .jsPanel-snap-area-left-bottom, .jsPanel-snap-area-center-bottom, .jsPanel-snap-area-right-bottom {
bottom: 0;
}
.jsPanel-snap-area-ct, .jsPanel-snap-area-cb {
width: 25%;
}
.jsPanel-snap-area-lc, .jsPanel-snap-area-rc {
height: 25%;
}
.jsPanel-snap-area-lt, .jsPanel-snap-area-left-top {
border-bottom-right-radius: 100%;
}
.jsPanel-snap-area-rt, .jsPanel-snap-area-right-top {
border-bottom-left-radius: 100%;
}
.jsPanel-snap-area-rb, .jsPanel-snap-area-right-bottom {
border-top-left-radius: 100%;
}
.jsPanel-snap-area-lb, .jsPanel-snap-area-left-bottom {
border-top-right-radius: 100%;
}
/* tooltip and tooltip connectors */
.jsPanel-connector-left-top-corner,
.jsPanel-connector-right-top-corner,
.jsPanel-connector-left-bottom-corner,
.jsPanel-connector-right-bottom-corner {
width: 12px;
height: 12px;
position: absolute;
border-radius: 50%;
}
.jsPanel-connector-left-top-corner {
left: calc(100% - 6px);
top: calc(100% - 6px);
}
.jsPanel-connector-right-top-corner {
left: -6px;
top: calc(100% - 6px);
}
.jsPanel-connector-right-bottom-corner {
left: -6px;
top: -6px;
}
.jsPanel-connector-left-bottom-corner {
left: calc(100% - 6px);
top: -6px;
}
.jsPanel-connector-top,
.jsPanel-connector-topleft,
.jsPanel-connector-topright,
.jsPanel-connector-bottom,
.jsPanel-connector-bottomleft,
.jsPanel-connector-bottomright,
.jsPanel-connector-left,
.jsPanel-connector-lefttop,
.jsPanel-connector-leftbottom,
.jsPanel-connector-right,
.jsPanel-connector-righttop,
.jsPanel-connector-rightbottom {
width: 0;
height: 0;
position: absolute;
border: 12px solid transparent;
}
.jsPanel-connector-top,
.jsPanel-connector-topleft,
.jsPanel-connector-topright {
top: 100%;
border-bottom-width: 0;
}
.jsPanel-connector-top {
left: calc(50% - 12px);
}
.jsPanel-connector-topleft {
left: 0px;
}
.jsPanel-connector-topright {
left: calc(100% - 24px);
}
.jsPanel-connector-bottom,
.jsPanel-connector-bottomleft,
.jsPanel-connector-bottomright {
top: -12px;
border-top-width: 0;
}
.jsPanel-connector-bottom {
left: calc(50% - 12px);
}
.jsPanel-connector-bottomleft {
left: 0px;
}
.jsPanel-connector-bottomright {
left: calc(100% - 24px);
}
.jsPanel-connector-left,
.jsPanel-connector-lefttop,
.jsPanel-connector-leftbottom {
left: 100%;
border-right-width: 0;
}
.jsPanel-connector-left {
top: calc(50% - 12px);
}
.jsPanel-connector-lefttop {
top: 0px;
}
.jsPanel-connector-leftbottom {
top: calc(100% - 24px);
}
.jsPanel-connector-right,
.jsPanel-connector-righttop,
.jsPanel-connector-rightbottom {
left: -12px;
border-left-width: 0;
}
.jsPanel-connector-right {
top: calc(50% - 12px);
}
.jsPanel-connector-righttop {
top: 0px;
}
.jsPanel-connector-rightbottom {
top: calc(100% - 24px);
}
/* IE11 CSS styles go here */
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
.jsPanel-replacement .jsPanel-titlebar {
max-width: 105px;
}
}
/* XXXXXXXXXXXXXXXXXXXXXXX */
/* css3 animations */
@keyframes jsPanelFadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.jsPanelFadeIn {
opacity: 0;
animation: jsPanelFadeIn ease-in 1;
animation-fill-mode: forwards;
animation-duration: 600ms;
}
@keyframes jsPanelFadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.jsPanelFadeOut {
animation: jsPanelFadeOut ease-in 1;
animation-fill-mode: forwards;
animation-duration: 600ms;
}
@keyframes modalBackdropFadeIn {
from {
opacity: 0;
}
to {
opacity: 0.65;
}
}
.jsPanel-modal-backdrop {
animation: modalBackdropFadeIn ease-in 1;
animation-fill-mode: forwards;
animation-duration: 750ms;
background: rgb(0, 0, 0);
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
@keyframes modalBackdropFadeOut {
from {
opacity: 0.65;
}
to {
opacity: 0;
}
}
.jsPanel-modal-backdrop-out {
animation: modalBackdropFadeOut ease-in 1;
animation-fill-mode: forwards;
animation-duration: 400ms;
}
.jsPanel-modal-backdrop-multi {
background: rgba(0, 0, 0, 0.15);
}
.jsPanel-content .jsPanel-iframe-overlay {
position: absolute;
top: 0;
width: 100%;
height: 100%;
background: transparent;
}
.jsPanel-addCloseCtrl {
position: absolute;
top: 0;
right: 0;
width: 0.8rem;
height: 0.8rem;
margin: 2px;
cursor: pointer;
line-height: 0.8rem;
padding: 0;
z-index: 100;
border: 0;
background-color: transparent;
}
.jsPanel-addCloseCtrl.rtl {
right: unset;
left: 0;
}
.jsPanel-progressbar {
position: relative;
width: 100%;
height: 0;
overflow: hidden;
}
.jsPanel-progressbar .jsPanel-progressbar-slider {
position: absolute;
width: 0;
height: 3px;
background: lightgray;
right: 0;
}
.jsPanel-progressbar.active {
height: 3px;
}
@keyframes progressbar {
from {
width: 0;
}
to {
width: 100%;
}
}
.jsPanel-content.jsPanel-content-noheader {
border: none ;
}
body {
-ms-overflow-style: scrollbar;
}
/*# sourceMappingURL=jspanel.css.map */