blob: 569ad9a6f8ec5fb7b8cec86622e76df51915cef3 [file] [log] [blame]
@import "theme";
$indent: 20px;
.pf-tree-left {
min-width: max-content;
padding: 2px 8px 2px 4px;
font-weight: 600;
}
.pf-tree-right {
padding: 2px 4px;
}
// In tree mode, the values and keys are represented simply using a nested set
// of divs, where each child is pushed in with a left margin which creates the
// effect of indenting nested subtrees.
.pf-ptree {
.pf-tree-children {
padding-left: $indent;
border-left: dotted 1px gray;
}
.pf-tree-node {
display: grid;
width: max-content;
grid-template-columns: [left]auto [right]1fr;
border-radius: $pf-border-radius;
&:hover {
background: lightgray;
}
.pf-tree-left {
grid-column: left;
&:after {
content: ":";
font-weight: 600;
padding-left: 4px;
padding-right: 8px;
}
}
.pf-tree-right {
grid-column: right;
}
}
}
// In grid mode, right elements should be horizontally aligned, regardless
// of indentation level.
// "Subgrid" is a convenient tool for aligning nested grids to an outer grid's
// columns, but it is not supported in Chrome as of March 2023.
// See https://caniuse.com/css-subgrid
// See https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Subgrid
//
// For future reference - this is what a subgrid implementation might look like:
//
// .pf-ptree-grid {
// display: grid;
// grid-template-columns: auto 1fr;
//
// .pf-tree-children {
// display: grid;
// grid-column: span 2;
// grid-template-columns: subgrid;
// padding-left: $indent;
// border-left: dotted 1px gray;
// }
// .pf-tree-node {
// display: grid;
// grid-column: span 2;
// grid-template-columns: subgrid;
// width: max-content;
// border-radius: $pf-border-radius;
// &:hover {
// background: lightgray;
// }
// }
// }
@mixin indentation($max, $level) {
@if $level <= $max {
.pf-tree-children {
.pf-tree-left {
margin-left: $level * $indent;
}
@include indentation($max, $level + 1);
}
}
}
.pf-ptree-grid {
display: grid;
grid-template-columns: auto 1fr;
.pf-tree-children {
display: contents;
}
.pf-tree-node {
display: contents;
&:hover {
background: lightgray;
}
.pf-tree-left {
background: inherit;
border-radius: $pf-border-radius 0 0 $pf-border-radius;
}
.pf-tree-right {
background: inherit;
border-radius: 0 $pf-border-radius $pf-border-radius 0;
}
}
@include indentation(16, 1);
}
.pf-tree-children.pf-pgrid-hidden {
display: none;
}