blob: 73593d6343c88e59d07bb8fa5936d84f6acc1b86 [file]
// com.android.ProcessState styles. The explorer lives in the timeline details
// panel (.pf-ps-detailpanel): the relationship graph (the shared LayeredGraph
// charts_svg widget) and a tabbed Current / Process list pane.
// Clickable pid links inside the grids (rendered by grid_helpers.gridSchema).
.pf-ps-link {
color: var(--pf-color-primary, #1565c0);
cursor: pointer;
&:hover {
text-decoration: underline;
}
}
// Diff palette (green added / amber changed / red removed), shared by the
// graph legend swatches and the Process-list "change" column badge. Matches
// the DIFF_ADDED / DIFF_REMOVED edge colours in process_graph.ts.
.pf-ps-diff-added {
color: #2e7d32;
}
.pf-ps-diff-changed {
color: #ef6c00;
}
.pf-ps-diff-removed {
color: #c62828;
}
.pf-ps-diff-badge {
font-weight: bold;
white-space: nowrap;
}
.pf-ps-diff-leg {
font-size: 11px;
margin-left: 10px;
}
// ---- shared layout bits (used by BOTH the full page and the details panel) ----
.pf-ps-tabs {
flex: 0 0 auto;
display: flex;
gap: 2px;
padding: 4px 0;
border-bottom: 1px solid var(--pf-color-border, #eee);
}
.pf-ps-tab {
border: none;
background: transparent;
cursor: pointer;
font-size: 12px;
padding: 5px 12px;
border-bottom: 2px solid transparent;
color: var(--pf-color-text-muted, #777);
}
.pf-ps-tab--on {
color: var(--pf-color-text, #111);
font-weight: bold;
border-bottom-color: var(--pf-color-primary, #1565c0);
}
.pf-ps-tabbody {
flex: 1;
min-height: 0;
display: flex;
flex-direction: column;
}
.pf-ps-tabbody > .pf-data-grid {
flex: 1;
min-height: 0;
}
.pf-ps-tabbody--scroll {
display: block;
overflow: auto;
padding-top: 8px;
}
.pf-ps-card {
border: 1px solid var(--pf-color-border, #e2e2e2);
margin-bottom: 8px;
.pf-data-grid {
max-height: 220px;
}
&:last-child {
margin-bottom: 0;
}
}
.pf-ps-card-h {
background: var(--pf-color-background-secondary);
padding: 4px 10px;
font-weight: bold;
font-size: 11px;
text-transform: uppercase;
color: var(--pf-color-text-muted, #555);
}
.pf-ps-card-b {
padding: 8px 10px;
}
.pf-ps-detail-h {
display: flex;
align-items: baseline;
gap: 10px;
margin-bottom: 6px;
}
.pf-ps-detail-title {
font-size: 14px;
font-weight: bold;
}
.pf-ps-detail-sub {
font-family: monospace;
color: var(--pf-color-text-muted, #777);
}
.pf-ps-none {
padding: 6px 2px;
color: var(--pf-color-text-muted, #999);
font-size: 12px;
}
// ---- timeline details panel: the whole explorer (no separate page) ----
// `.pf-ps-detailpanel` is the DetailsShell ROOT; make its `.pf-content` a flex
// column so the SplitPanel fills the drawer's real height. The split's
// orientation (and resize handle) is owned by the shared SplitPanel widget; we
// only flip `direction` based on the drawer height.
.pf-ps-detailpanel {
height: 100%;
min-height: 0;
font-size: 12px;
.pf-content {
display: flex;
flex-direction: column;
min-height: 0;
overflow: hidden;
}
// Wrapper that hands the SplitPanel the drawer height (and whose height we
// measure to choose the orientation).
.pf-ps-splitwrap {
flex: 1 1 auto;
min-height: 0;
min-width: 0;
display: flex;
}
// The graph fills its SplitPanel pane.
.pf-lgraph-graph {
flex: 1;
min-height: 0;
}
// Detail pane (tabs + tables) fills the other pane.
.pf-ps-bottom {
// The SplitPanel pane (.pf-split-panel__second) is a sized flex item but is
// itself display:block, so flex:1 here has no flex parent to grow against.
// Fill the pane explicitly (like the graph does) so the tab body — and the
// fillHeight DataGrid inside it — gets a bounded height and scrolls instead
// of overflowing and being clipped.
height: 100%;
min-width: 0;
min-height: 0;
display: flex;
flex-direction: column;
overflow: hidden;
padding: 0 8px;
}
}