mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
341 lines
12 KiB
SCSS
341 lines
12 KiB
SCSS
/*
|
|
* @copyright Copyright (C) 2010-2024 Combodo SAS
|
|
* @license http://opensource.org/licenses/AGPL-3.0
|
|
*/
|
|
|
|
/* SCSS variables */
|
|
/* - Base variables for the block */
|
|
$ibo-panel--base-border-size: 1px !default;
|
|
$ibo-panel--base-border-style: solid !default;
|
|
$ibo-panel--base-border-color: $ibo-color-grey-400 !default;
|
|
$ibo-panel--base-border: $ibo-panel--base-border-size $ibo-panel--base-border-style $ibo-panel--base-border-color !default;
|
|
|
|
$ibo-panel--base-transition-property: all !default;
|
|
$ibo-panel--base-transition-duration: 0.15s !default;
|
|
$ibo-panel--base-transition-timing-function: linear !default;
|
|
$ibo-panel--base-transition: $ibo-panel--base-transition-property $ibo-panel--base-transition-duration $ibo-panel--base-transition-timing-function !default;
|
|
|
|
%ibo-panel--base-transition {
|
|
transition: $ibo-panel--base-transition;
|
|
}
|
|
|
|
$ibo-panel-colors: (
|
|
'primary': $ibo-color-primary-600,
|
|
'secondary': $ibo-color-secondary-600,
|
|
'neutral': $ibo-color-grey-600,
|
|
'information': $ibo-color-information-600,
|
|
'success': $ibo-color-success-600,
|
|
'failure': $ibo-color-danger-600,
|
|
'warning': $ibo-color-warning-600,
|
|
'danger': $ibo-color-danger-600,
|
|
'grey' : $ibo-color-grey-600,
|
|
'blue-grey': $ibo-color-blue-grey-600,
|
|
'blue': $ibo-color-blue-800,
|
|
'cyan': $ibo-color-cyan-600,
|
|
'green': $ibo-color-green-600,
|
|
'orange' : $ibo-color-orange-600,
|
|
'red': $ibo-color-red-600,
|
|
'pink': $ibo-color-pink-600,
|
|
) !default;
|
|
|
|
/* - Specific variables for the block */
|
|
$ibo-panel--highlight--width: 100% !default;
|
|
$ibo-panel--highlight--height: 8px !default;
|
|
$ibo-panel--highlight--border-radius: $ibo-border-radius-400 $ibo-border-radius-400 0 0 !default;
|
|
$ibo-panel--highlight--padding-bottom: $ibo-panel--highlight--height !default;
|
|
|
|
$ibo-panel--body--z-index: 1 !default;
|
|
$ibo-panel--body--background-color: $ibo-color-white-100 !default;
|
|
$ibo-panel--body--padding-bottom: $ibo-spacing-600 !default;
|
|
$ibo-panel--body--padding-top: $ibo-panel--body--padding-bottom + $ibo-panel--highlight--height !default;
|
|
$ibo-panel--body--padding-x: $ibo-spacing-500 !default;
|
|
$ibo-panel--body--border-radius: $ibo-border-radius-500 !default;
|
|
$ibo-panel--body--border: $ibo-panel--base-border !default;
|
|
|
|
$ibo-panel--header--z-index: $ibo-panel--body--z-index + 1 !default; /* Should always be above the body */
|
|
$ibo-panel--header--margin-bottom: $ibo-spacing-200 !default;
|
|
$ibo-panel--header--background-color--is-sticking: $ibo-color-grey-100 !default;
|
|
$ibo-panel--header--border--is-sticking: $ibo-panel--base-border !default;
|
|
$ibo-panel--header--padding-y--is-sticking: $ibo-spacing-200 !default;
|
|
|
|
$ibo-panel--icon--size: 48px !default;
|
|
$ibo-panel--icon--spacing: $ibo-spacing-500 !default;
|
|
$ibo-panel--icon--size-as-medallion: 72px !default;
|
|
$ibo-panel--icon--spacing--as-medallion: $ibo-spacing-500 !default;
|
|
$ibo-panel--icon--bottom--as-medallion: -24px !default;
|
|
$ibo-panel--icon--background-color--as-medallion: $ibo-color-grey-100 !default;
|
|
$ibo-panel--icon--border--as-medallion: 2px solid $ibo-color-blue-grey-300 !default;
|
|
$ibo-panel--icon--border-radius--as-medallion: $ibo-border-radius-full !default;
|
|
|
|
$ibo-panel--icon--size-as-medallion--is-sticking: 48px !default;
|
|
$ibo-panel--icon--spacing--as-medallion--is-sticking: $ibo-panel--icon--spacing--as-medallion !default;
|
|
$ibo-panel--icon--bottom--as-medallion--is-sticking: -12px !default;
|
|
$ibo-panel--icon--border--as-medallion--is-sticking: 1px $ibo-panel--base-border-style $ibo-panel--base-border-color !default;
|
|
|
|
$ibo-panel--icon-background--size--must-contain: contain !default;
|
|
$ibo-panel--icon-background--size--must-cover: cover !default;
|
|
$ibo-panel--icon-background--size--must-zoomout: 66.67% !default;
|
|
|
|
$ibo-panel--title--font-size--is-sticking: $ibo-font-size-150 !default;
|
|
$ibo-panel--title--color: $ibo-color-grey-900 !default;
|
|
$ibo-panel--subtitle--font-size--is-sticking: $ibo-font-size-100 !default;
|
|
$ibo-panel--subtitle--color: $ibo-color-grey-800 !default;
|
|
|
|
$ibo-panel--collapsible-toggler--margin-right: $ibo-spacing-300 !default;
|
|
$ibo-panel--collapsible-toggler--font-size: $ibo-font-size-250 !default;
|
|
$ibo-panel--collapsible-toggler--color: $ibo-color-grey-700 !default;
|
|
|
|
$ibo-panel--is-selectable--body--after--z-index: $ibo-panel--header--z-index + 1 !default;
|
|
$ibo-panel--is-selectable--body--after--font-size: $ibo-font-size-700 !default;
|
|
|
|
/* Rules */
|
|
.ibo-panel {
|
|
--ibo-main-color: #{map-get($ibo-panel-colors, 'neutral')}; /* --ibo-main-color is to allow overload from custom dynamic value from the DM. The overload will be done through an additional CSS class of a particular DM class or DM attribute */
|
|
|
|
position: relative;
|
|
|
|
&.ibo-has-icon {
|
|
// Note: Direct child selector is mandatory, otherwise a panel within a panel could be affected too when it shouldn't (eg. dashboard in an object, n:n panel)
|
|
> .ibo-panel--header {
|
|
.ibo-panel--titles {
|
|
padding-left: $ibo-panel--icon--spacing;
|
|
}
|
|
}
|
|
|
|
&.ibo-has-medallion-icon {
|
|
// Note: Direct child selector is mandatory, otherwise a panel within a panel could be affected too when it shouldn't (eg. dashboard in an object, n:n panel)
|
|
> .ibo-panel--header {
|
|
.ibo-panel--header-left {
|
|
position: relative;
|
|
z-index: 1;
|
|
margin-left: $ibo-panel--icon--spacing--as-medallion;
|
|
|
|
.ibo-panel--icon {
|
|
position: absolute;
|
|
bottom: $ibo-panel--icon--bottom--as-medallion;
|
|
left: 0;
|
|
overflow: hidden;
|
|
width: $ibo-panel--icon--size-as-medallion;
|
|
height: $ibo-panel--icon--size-as-medallion;
|
|
min-width: $ibo-panel--icon--size-as-medallion;
|
|
min-height: $ibo-panel--icon--size-as-medallion;
|
|
background-color: $ibo-panel--icon--background-color--as-medallion;
|
|
border: $ibo-panel--icon--border--as-medallion;
|
|
border-radius: $ibo-panel--icon--border-radius--as-medallion;
|
|
}
|
|
|
|
.ibo-panel--titles {
|
|
padding-left: calc(#{$ibo-panel--icon--size-as-medallion} + #{$ibo-panel--icon--spacing--as-medallion});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
&.ibo-is-selectable .ibo-panel--body::after {
|
|
@include ibo-selectable;
|
|
position: absolute;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
|
|
height: 100%;
|
|
width: 100%;
|
|
z-index: $ibo-panel--is-selectable--body--after--z-index;
|
|
font-size: $ibo-panel--is-selectable--body--after--font-size;
|
|
}
|
|
&.ibo-is-selectable:hover .ibo-panel--body::after {
|
|
@include ibo-selectable-hover;
|
|
display: flex;
|
|
}
|
|
&.ibo-is-selected .ibo-panel--body::after {
|
|
@include ibo-selected;
|
|
display: flex;
|
|
}
|
|
&.ibo-is-selected:hover .ibo-panel--body::after {
|
|
@include ibo-selected-hover;
|
|
display: flex;
|
|
}
|
|
}
|
|
|
|
.ibo-panel--header {
|
|
position: relative;
|
|
z-index: $ibo-panel--header--z-index;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-end;
|
|
margin-bottom: $ibo-panel--header--margin-bottom;
|
|
}
|
|
|
|
.ibo-panel--header-left {
|
|
@extend %ibo-fully-centered-content;
|
|
justify-content: left;
|
|
}
|
|
|
|
.ibo-panel--icon {
|
|
@extend %ibo-fully-centered-content;
|
|
width: $ibo-panel--icon--size;
|
|
height: $ibo-panel--icon--size;
|
|
min-width: $ibo-panel--icon--size;
|
|
min-height: $ibo-panel--icon--size;
|
|
}
|
|
|
|
.ibo-panel--icon-background {
|
|
width: 100%;
|
|
height: 100%;
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
background-size: $ibo-panel--icon-background--size--must-contain;
|
|
}
|
|
|
|
.ibo-panel--icon-background--must-contain {
|
|
background-size: $ibo-panel--icon-background--size--must-contain;
|
|
}
|
|
|
|
.ibo-panel--icon-background--must-cover {
|
|
background-size: $ibo-panel--icon-background--size--must-cover;
|
|
}
|
|
|
|
.ibo-panel--icon-background--must-zoomout {
|
|
background-size: $ibo-panel--icon-background--size--must-zoomout;
|
|
}
|
|
|
|
.ibo-panel--title {
|
|
display: inline-block;
|
|
color: $ibo-panel--title--color;
|
|
@extend %ibo-font-size-350;
|
|
flex-grow: 1;
|
|
}
|
|
|
|
.ibo-panel--subtitle {
|
|
display: flex;
|
|
@extend %ibo-font-size-150;
|
|
color: $ibo-panel--subtitle--color;
|
|
}
|
|
|
|
.ibo-panel--body {
|
|
position: relative;
|
|
z-index: $ibo-panel--body--z-index;
|
|
padding: $ibo-panel--body--padding-top $ibo-panel--body--padding-x $ibo-panel--body--padding-bottom $ibo-panel--body--padding-x;
|
|
background-color: $ibo-panel--body--background-color;
|
|
border: $ibo-panel--body--border;
|
|
border-radius: $ibo-panel--body--border-radius;
|
|
overflow: hidden; /* To force highlight color to be cropped by the border radius */
|
|
|
|
@extend %ibo-font-size-150;
|
|
|
|
&::before {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
display: block;
|
|
|
|
background-color: var(--ibo-main-color); /* Default value defined in .ibo-panel, can be overloaded by custom CSS classes */
|
|
content: "";
|
|
|
|
width: $ibo-panel--highlight--width;
|
|
height: $ibo-panel--highlight--height;
|
|
padding-bottom: $ibo-panel--highlight--padding-bottom;
|
|
}
|
|
}
|
|
|
|
@each $sColor, $sColorValue in $ibo-panel-colors {
|
|
.ibo-panel.ibo-is-#{$sColor} > .ibo-panel--body::before {
|
|
background-color: $sColorValue;
|
|
}
|
|
}
|
|
|
|
.ibo-panel--collapsible-toggler {
|
|
display: inline-block;
|
|
margin-right: $ibo-panel--collapsible-toggler--margin-right;
|
|
font-size: $ibo-panel--collapsible-toggler--font-size;
|
|
color: $ibo-panel--collapsible-toggler--color;
|
|
cursor: pointer;
|
|
}
|
|
|
|
|
|
/* Collapsible rules */
|
|
.ibo-panel {
|
|
.ibo-panel--collapsible-toggler--opened {
|
|
display: block;
|
|
}
|
|
|
|
.ibo-panel--collapsible-toggler--closed {
|
|
display: none;
|
|
}
|
|
&:not(.ibo-is-opened) {
|
|
.ibo-panel--collapsible-toggler--closed {
|
|
display: block;
|
|
}
|
|
|
|
.ibo-panel--collapsible-toggler--opened {
|
|
display: none;
|
|
}
|
|
|
|
.ibo-panel--body {
|
|
display: none;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* Sticky header rules */
|
|
.ibo-panel.ibo-has-sticky-header {
|
|
// Note: Direct child selector is mandatory, otherwise a panel within a panel could be affected too when it shouldn't (eg. dashboard in an object, n:n panel)
|
|
> .ibo-panel--header {
|
|
position: sticky;
|
|
top: 0; /* Default, stick on the top of the panel. Custom integrations should be done in the "blocks-integrations" partials */
|
|
border: transparent; /* To avoid visual glitch during transition, otherwise the border looks black first */
|
|
|
|
/* All transitions should have a specific duration except for the header's "top" property otherwise it feels laggy */
|
|
/* - The header itself */
|
|
transition-property: $ibo-panel--base-transition-property, top, background-color;
|
|
transition-duration: $ibo-panel--base-transition-duration, 0s, 0s;
|
|
transition-timing-function: $ibo-panel--base-transition-timing-function;
|
|
/* - Impacted descendants (we don't put "*" as it can get shaky otherwise) */
|
|
.ibo-panel--title,
|
|
.ibo-panel--subtitle,
|
|
.ibo-panel--icon,
|
|
.ibo-panel--titles{
|
|
@extend %ibo-panel--base-transition;
|
|
}
|
|
|
|
/* Transition rules */
|
|
&.ibo-is-sticking {
|
|
padding-top: $ibo-panel--header--padding-y--is-sticking;
|
|
padding-bottom: $ibo-panel--header--padding-y--is-sticking;
|
|
background-color: $ibo-panel--header--background-color--is-sticking;
|
|
border: $ibo-panel--header--border--is-sticking;
|
|
align-items: center;
|
|
|
|
.ibo-panel--title {
|
|
font-size: $ibo-panel--title--font-size--is-sticking;
|
|
}
|
|
.ibo-panel--subtitle {
|
|
font-size: $ibo-panel--subtitle--font-size--is-sticking;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
&.ibo-has-icon {
|
|
&.ibo-has-medallion-icon {
|
|
// Note: Direct child selector is mandatory, otherwise a panel within a panel could be affected too when it shouldn't (eg. dashboard in an object, n:n panel)
|
|
> .ibo-panel--header {
|
|
/* Transition rules */
|
|
&.ibo-is-sticking {
|
|
.ibo-panel--icon {
|
|
bottom: $ibo-panel--icon--bottom--as-medallion--is-sticking;
|
|
width: $ibo-panel--icon--size-as-medallion--is-sticking;
|
|
height: $ibo-panel--icon--size-as-medallion--is-sticking;
|
|
min-width: $ibo-panel--icon--size-as-medallion--is-sticking;
|
|
min-height: $ibo-panel--icon--size-as-medallion--is-sticking;
|
|
border: $ibo-panel--icon--border--as-medallion--is-sticking;
|
|
}
|
|
.ibo-panel--titles {
|
|
padding-left: calc(#{$ibo-panel--icon--size-as-medallion--is-sticking} + #{$ibo-panel--icon--spacing--as-medallion--is-sticking});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |