@c8y/style
Version:
Styles for Cumulocity IoT applications
138 lines (117 loc) • 2.43 kB
text/less
/**
* resizaule grid - Component styles
*
* Note: Uses @size-* tokens for spacing where applicable.
*
* Intentionally hardcoded values:
* - Component-specific dimensions: Fixed sizes for component layout
* - Off-grid spacing: Component-specific positioning
* - Border widths (1px): Standard borders
* - Font-sizes: Typography
* - Percentages: Layout
*/
c8y-resizable-grid {
display: flex;
height: 100%;
position: relative;
// This CSS variable is set by the component and used here
--col-a-width: var(--c8y-resizable-grid-default-width, 560px);
}
.resizable-grid-container {
display: flex;
flex-grow: 1;
height: 100%;
overflow: hidden;
/* Prevent content overflow during resize */
.collapsed {
width: 0 ; // Hide the column
min-width: 0 ;
opacity: 0;
transition: all 0.3s ease;
flex-shrink: 1;
}
.expanded {
transition: all 0.3s ease;
flex-grow: 1;
width: 100% ;
}
&:has(.collapsed) {
.resizer > i{
display: block;
}
}
}
.col-a {
width: var(--col-a-width);
min-width: 0;
flex-shrink: 0; // Prevent it from shrinking
overflow: hidden;
display: flex;
flex-direction: column;
>* {
flex: 1;
min-height: 0;
}
}
.col-b {
flex-grow: 1; // Col B takes up remaining space
overflow: hidden;
min-width: 0;
display: flex;
flex-direction: column;
>* {
flex: 1;
min-height: 0;
}
}
.resizer {
width: @size-8;
flex: 0 0 8px;
cursor: col-resize;
z-index: 1;
position: relative;
overflow: visible;
&::before {
content: '';
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 1px;
bottom: 0;
background: @component-border-color;
}
>i {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: @component-background-default;
border-radius: 50%;
color: @component-color-text-muted;
&::before{
transition: all 0.3s ease;
display: block;
}
}
.is-resizing &,
&:hover, &:focus {
&::before {
background: @component-color-focus;
}
>i {
color: @component-color-focus;
display: block;
&::before{
scale: 2;
}
}
}
}
.inner-scroll {
overflow-y: auto;
}
// Global styles applied when resizing to prevent text selection
body.no-select {
user-select: none;
}