123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638 |
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
- /* CSS Variables specific to this panel that aren't defined by the themes */
- .theme-dark {
- --cell-border-color: rgba(255,255,255,0.15);
- --cell-border-color-light: rgba(255,255,255,0.1);
- --focus-cell-border-color: rgba(255,255,255,0.5);
- --row-alt-background-color: rgba(86, 117, 185, 0.15);
- --row-hover-background-color: rgba(86, 117, 185, 0.25);
- }
- .theme-light {
- --cell-border-color: rgba(0,0,0,0.15);
- --cell-border-color-light: rgba(0,0,0,0.1);
- --focus-cell-border-color: rgba(0,0,0,0.3);
- --row-alt-background-color: rgba(76,158,217,0.1);
- --row-hover-background-color: rgba(76,158,217,0.2);
- }
- html, body, #app, #memory-tool {
- height: 100%;
- }
- #memory-tool {
- /**
- * Flex: contains two children: .devtools-toolbar and #memory-tool-container,
- * which need to be laid out vertically. The toolbar has a fixed height and
- * the container needs to flex to fill out all remaining vertical space.
- */
- display: flex;
- flex-direction: column;
- --sidebar-width: 185px;
- /**
- * If --heap-tree-row-height changes, be sure to change HEAP_TREE_ROW_HEIGHT
- * in `devtools/client/memory/components/heap.js`.
- */
- --heap-tree-row-height: 18px;
- --heap-tree-header-height: 18px;
- }
- /**
- * Toolbar
- */
- .devtools-toolbar {
- /**
- * Flex: contains several children, which need to be laid out horizontally,
- * and aligned vertically in the middle of the container.
- */
- display: flex;
- align-items: center;
- }
- .devtools-toolbar > .toolbar-group:nth-of-type(1) {
- /**
- * We want this to be exactly at a `--sidebar-width` distance from the
- * toolbar's start boundary. A `.devtools-toolbar` has a 3px start padding.
- */
- flex: 0 0 calc(var(--sidebar-width) - 4px);
- border-inline-end: 1px solid var(--theme-splitter-color);
- margin-inline-end: 5px;
- padding-right: 1px;
- }
- .devtools-toolbar > .toolbar-group {
- /**
- * Flex: contains several children, which need to be laid out horizontally,
- * and aligned vertically in the middle of the container.
- */
- display: flex;
- align-items: center;
- flex: 1;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .devtools-toolbar > .toolbar-group > label {
- /**
- * Flex: contains form controls and text, which need to be laid out
- * horizontally, vertically aligned in the middle of the container.
- */
- display: flex;
- align-items: center;
- margin-inline-end: 5px;
- }
- .devtools-toolbar > .toolbar-group > label.display-by > span {
- margin-inline-end: 5px;
- }
- .devtools-toolbar > .toolbar-group > label.label-by > span {
- margin-inline-end: 5px;
- }
- .devtools-toolbar > label {
- margin-inline-end: 5px;
- }
- #select-view {
- margin-inline-start: 5px;
- }
- #take-snapshot::before {
- background-image: url(images/command-screenshot.svg);
- }
- #clear-snapshots::before {
- background-image: url(chrome://devtools/skin/images/clear.svg);
- }
- #diff-snapshots::before {
- background-image: url(chrome://devtools/skin/images/diff.svg);
- }
- #import-snapshot::before {
- background-image: url(chrome://devtools/skin/images/import.svg);
- }
- #record-allocation-stacks-label,
- #pop-view-button-label {
- border-inline-end: 1px solid var(--theme-splitter-color);
- padding-inline-end: 5px;
- }
- .spacer {
- flex: 1;
- }
- #filter {
- align-self: stretch;
- margin: 2px;
- }
- /**
- * Container (sidebar + main panel)
- */
- #memory-tool-container {
- /**
- * Flex: contains two children: .list (sidebar) and #heap-view (main panel),
- * which need to be laid out horizontally. The sidebar has a fixed width and
- * the main panel needs to flex to fill out all remaining horizontal space.
- */
- display: flex;
- /**
- * Flexing to fill out remaining vertical space. The preceeding sibling is
- * the toolbar. @see #memory-tool.
- */
- flex: 1;
- overflow: hidden;
- }
- /**
- * Sidebar
- */
- .list {
- width: var(--sidebar-width);
- min-width: var(--sidebar-width);
- overflow-y: auto;
- margin: 0;
- padding: 0;
- background-color: var(--theme-sidebar-background);
- border-inline-end: 1px solid var(--theme-splitter-color);
- }
- .snapshot-list-item {
- /**
- * Flex: contains several children, which need to be laid out vertically.
- */
- display: flex;
- flex-direction: column;
- color: var(--theme-body-color);
- border-bottom: 1px solid rgba(128,128,128,0.15);
- padding: 8px;
- cursor: default;
- }
- .snapshot-list-item.selected {
- background-color: var(--theme-selection-background);
- color: var(--theme-selection-color);
- }
- .snapshot-list-item.selected ::-moz-selection {
- background-color: var(--theme-selection-color);
- color: var(--theme-selection-background);
- }
- .snapshot-list-item .snapshot-info {
- display: flex;
- justify-content: space-between;
- font-size: 90%;
- }
- .snapshot-list-item .snapshot-title {
- display: flex;
- justify-content: space-between;
- }
- .snapshot-list-item .save {
- text-decoration: underline;
- cursor: pointer;
- }
- .snapshot-list-item .delete {
- cursor: pointer;
- position: relative;
- min-height: 1em;
- min-width: 1.3em;
- }
- .snapshot-list-item.selected .delete::before {
- filter: invert(1);
- }
- .snapshot-list-item .delete::before {
- background-image: url("chrome://devtools/skin/images/close.svg");
- background-position: 0.2em 0;
- }
- .snapshot-list-item > .snapshot-title {
- margin-bottom: 14px;
- }
- .snapshot-list-item > .snapshot-title > input[type=checkbox] {
- margin: 0;
- margin-inline-end: 5px;
- }
- .snapshot-list-item > .snapshot-state,
- .snapshot-list-item > .snapshot-totals {
- font-size: 90%;
- color: var(--theme-body-color-alt);
- }
- .snapshot-list-item.selected > .snapshot-state,
- .snapshot-list-item.selected > .snapshot-totals {
- /* Text inside a selected item should not be custom colored. */
- color: inherit !important;
- }
- /**
- * Main panel
- */
- .vbox {
- display: flex;
- flex-direction: column;
- width: 100%;
- height: 100%;
- overflow: auto;
- padding: 0;
- margin: 0;
- }
- .vbox > * {
- flex: 1;
- /**
- * By default, flex items have min-width: auto;
- * (https://drafts.csswg.org/css-flexbox/#min-size-auto)
- */
- min-width: 0;
- }
- #heap-view {
- /**
- * Flex: contains a .heap-view-panel which needs to fill out all the
- * available space, horizontally and vertically.
- */;
- display: flex;
- /**
- * Flexing to fill out remaining horizontal space. The preceeding sibling
- * is the sidebar. @see #memory-tool-container.
- */
- flex: 1;
- background-color: var(--theme-body-background);
- /**
- * By default, flex items have min-width: auto;
- * (https://drafts.csswg.org/css-flexbox/#min-size-auto)
- */
- min-width: 0;
- font-size: 90%;
- }
- #heap-view > .heap-view-panel {
- /**
- * Flex: can contain several children, including a tree with a header and
- * multiple rows, all of which need to be laid out vertically. When the
- * tree is visible, the header has a fixed height and tree body needs to flex
- * to fill out all remaining vertical space.
- */
- display: flex;
- flex-direction: column;
- /**
- * Flexing to fill out remaining horizontal space. @see #heap-view.
- */
- flex: 1;
- /**
- * By default, flex items have min-width: auto;
- * (https://drafts.csswg.org/css-flexbox/#min-size-auto)
- */
- min-width: 0;
- }
- #heap-view > .heap-view-panel > .snapshot-status,
- #heap-view > .heap-view-panel > .take-snapshot,
- #heap-view .empty,
- #shortest-paths-select-node-msg {
- margin: auto;
- margin-top: 65px;
- font-size: 120%;
- }
- #heap-view > .heap-view-panel > .take-snapshot {
- padding: 5px;
- }
- #heap-view > .heap-view-panel[data-state="snapshot-state-error"] pre {
- background-color: var(--theme-body-background);
- margin: 20px;
- padding: 20px;
- }
- /**
- * Heap tree view header
- */
- .header {
- /**
- * Flex: contains several span columns, all of which need to be laid out
- * horizontally. All columns except the last one have percentage widths, and
- * the last one needs to flex to fill out all remaining horizontal space.
- */
- display: flex;
- color: var(--theme-body-color);
- background-color: var(--theme-tab-toolbar-background);
- border-bottom: 1px solid var(--cell-border-color);
- flex: 0;
- }
- .header > span,
- #shortest-paths-header {
- text-overflow: ellipsis;
- line-height: var(--heap-tree-header-height);
- justify-content: center;
- justify-self: center;
- white-space: nowrap;
- }
- .header > span {
- overflow: hidden;
- }
- .header > .heap-tree-item-name {
- justify-content: flex-start;
- }
- #shortest-paths {
- background-color: var(--theme-body-background);
- overflow: hidden;
- height: 100%;
- width: 100%;
- }
- #shortest-paths-select-node-msg {
- justify-self: center;
- }
- /**
- * Heap tree view body
- */
- .tree {
- /**
- * Flexing to fill out remaining vertical space. @see .heap-view-panel
- */
- flex: 1;
- overflow-y: auto;
- background-color: var(--theme-body-background);
- }
- .tree-node {
- height: var(--heap-tree-row-height);
- line-height: var(--heap-tree-row-height);
- cursor: default;
- }
- .children-pointer {
- padding-inline-end: 5px;
- }
- .children-pointer:dir(rtl) {
- transform: scaleX(-1);
- }
- /**
- * Heap tree view columns
- */
- .heap-tree-item {
- /**
- * Flex: contains several span columns, all of which need to be laid out
- * horizontally. All columns except the last one have percentage widths, and
- * the last one needs to flex to fill out all remaining horizontal space.
- */
- display: flex;
- }
- .tree-node-odd {
- background-color: var(--row-alt-background-color);
- }
- .tree-node:hover {
- background-color: var(--row-hover-background-color);
- }
- .heap-tree-item.focused {
- background-color: var(--theme-selection-background);
- color: var(--theme-selection-color);
- }
- .heap-tree-item.focused ::-moz-selection {
- background-color: var(--theme-selection-color);
- color: var(--theme-selection-background);
- }
- .heap-tree-item-individuals,
- .heap-tree-item-bytes,
- .heap-tree-item-count,
- .heap-tree-item-total-bytes,
- .heap-tree-item-total-count {
- /**
- * Flex: contains several subcolumns, which need to be laid out horizontally.
- * These subcolumns may have specific widths or need to flex.
- */
- display: flex;
- /* Make sure units/decimals/... are always vertically aligned to right in both LTR and RTL locales */
- text-align: right;
- border-inline-end: var(--cell-border-color) 1px solid;
- }
- .heap-tree-item-count,
- .heap-tree-item-total-count,
- .heap-tree-item-bytes,
- .heap-tree-item-total-bytes {
- width: 10%;
- /*
- * Provision for up to 19 characters:
- *
- * GG_MMM_KKK_BBB_100%
- * | ||| |
- * '------------'|'--'
- * 14 ch for 10s | 4 ch for the largest % we will
- * of GB and | normally see: "100%"
- * spaces every |
- * 3 digits |
- * |
- * A space between the number and percent
- */
- min-width: 19ch;
- }
- .heap-tree-item-name {
- /**
- * Flex: contains an .arrow and some text, which need to be laid out
- * horizontally, vertically aligned in the middle of the container.
- */
- display: flex;
- align-items: center;
- /**
- * Flexing to fill out remaining vertical space.
- * @see .header and .heap-tree-item */
- flex: 1;
- padding-inline-start: 5px;
- }
- /**
- * Heap tree view subcolumns
- */
- .heap-tree-number,
- .heap-tree-percent,
- .heap-tree-item-name {
- white-space: nowrap;
- }
- .heap-tree-number {
- padding: 0 3px;
- flex: 1;
- color: var(--theme-content-color3);
- /* Make sure number doesn't appear backwards on RTL locales */
- direction: ltr;
- }
- .heap-tree-percent {
- padding-inline-start: 3px;
- padding-inline-end: 3px;
- }
- .heap-tree-number,
- .heap-tree-percent {
- font-family: var(--monospace-font-family);
- }
- .heap-tree-percent {
- width: 4ch;
- }
- .heap-tree-item.focused .heap-tree-number,
- .heap-tree-item.focused .heap-tree-percent {
- color: inherit;
- }
- .heap-tree-item-individuals {
- width: 38px;
- min-width: 20px;
- overflow: hidden;
- margin: 0;
- }
- .heap-tree-item-individuals > button {
- height: 10px;
- width: 32px;
- /* Override default styles for toolbar buttons to fix entire row height. */
- margin: 0 auto !important;
- padding: 0;
- }
- /**
- * Tree map
- */
- .tree-map-container {
- width: 100%;
- height: 100%;
- position: relative;
- overflow: hidden;
- }
- /**
- * Heap tree errors.
- */
- .error::before {
- content: "";
- display: inline-block;
- width: 12px;
- height: 12px;
- max-height: 12px;
- background-image: url(chrome://devtools/skin/images/webconsole.svg);
- background-size: 72px 60px;
- background-position: -24px -24px;
- background-repeat: no-repeat;
- margin: 0px;
- margin-top: 2px;
- margin-inline-end: 5px;
- }
- .theme-light .error::before {
- background-image: url(chrome://devtools/skin/images/webconsole.svg#light-icons);
- }
- /**
- * Frame View components
- */
- .separator,
- .not-available,
- .heap-tree-item-address {
- opacity: .5;
- margin-left: .5em;
- margin-right: .5em;
- }
- .heap-tree-item-address {
- font-family: monospace;
- }
- .no-allocation-stacks {
- border-color: var(--theme-splitter-color);
- border-style: solid;
- border-width: 0px 0px 1px 0px;
- text-align: center;
- padding: 5px;
- }
- /**
- * Dagre-D3 graphs
- */
- svg {
- --arrow-color: var(--theme-splitter-color);
- --text-color: var(--theme-body-color-alt);
- }
- .theme-dark svg {
- --arrow-color: var(--theme-body-color-alt);
- }
- svg #arrowhead {
- /* !important is needed to override inline style */
- fill: var(--arrow-color) !important;
- }
- .edgePath path {
- stroke-width: 1px;
- fill: none;
- stroke: var(--arrow-color);
- }
- g.edgeLabel rect {
- fill: var(--theme-body-background);
- }
- g.edgeLabel tspan {
- fill: var(--text-color);
- }
- .nodes rect {
- stroke-width: 1px;
- stroke: var(--theme-splitter-color);
- fill: var(--theme-toolbar-background);
- }
- text {
- font-size: 1.25em;
- fill: var(--text-color);
- /* Make sure text stays inside its container in RTL locales */
- direction: ltr;
- }
|