1
0
Fork 0
firefox/devtools/client/webconsole/components/App.css
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

524 lines
16 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 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/. */
html,
body {
height: 100vh;
margin: 0;
padding: 0;
overflow: hidden;
}
#app-wrapper {
height: 100vh;
max-height: 100vh;
}
.webconsole-output {
direction: ltr;
overflow: auto;
overflow-anchor: none;
user-select: text;
position: relative;
container-name: console-output;
container-type: inline-size;
}
.webconsole-app {
--object-inspector-hover-background: transparent;
--attachment-margin-block-end: 3px;
--primary-toolbar-height: 29px;
display: grid;
/*
* Here's the design we want in in-line mode
* +----------------------------------------------+
* | [ChromeDebugToolbar] |
* +----------------------------------------------+
* | Filter bar primary ↔ |
* +----------------------------↔ |
* | [Filter bar secondary] ↔ |
* +----------------------------↔ |
* | ↔ |
* + +----------------------+ ↔ |
* | | | ↔ |
* | | Output | ↔ [sidebar] |
* | | | ↔ |
* | +----------------------+ ↔ |
* | | [NotificationBox] | ↔ |
* | +----------------------+ ↔ |
* | | | ↔ |
* | | JSTerm | ↔ |
* | | | ↔ |
* | +----------------------+ ↔ |
* | | [EagerEvaluation] | ↔ |
* | +----------------------+ ↔ |
* | | [EvalNotification] | ↔ |
* | +----------------------+ ↔ |
* +----------------------------↔ |
* | [Reverse search input] ↔ |
* +----------------------------------------------+
*
* - ↔ are width resizers
* - Elements inside brackets may not be visible, so we set
* rows/columns to "auto" to make them collapse when the element
* they contain is hidden.
*/
grid-template-areas: "chrome-debug-toolbar chrome-debug-toolbar"
"filter-toolbar sidebar"
"filter-toolbar-secondary sidebar"
"output-input sidebar"
"eval-notification sidebar"
"reverse-search sidebar";
grid-template-rows: auto var(--primary-toolbar-height) auto 1fr auto auto;
grid-template-columns: minmax(200px, 1fr) minmax(0, auto);
max-height: 100vh !important;
height: 100vh !important;
width: 100vw;
overflow: hidden;
color: var(--console-output-color);
-moz-user-focus: normal;
}
.chrome-debug-toolbar {
grid-column: chrome-debug-toolbar;
grid-row: chrome-debug-toolbar;
}
.webconsole-filteringbar-wrapper {
grid-column: filter-toolbar;
grid-row: filter-toolbar / filter-toolbar-secondary;
grid-template-rows: subgrid;
}
.webconsole-filterbar-primary {
grid-row: filter-toolbar;
}
/* Only put the filter buttons toolbar on its own row in narrow filterbar layout */
.narrow .devtools-toolbar.webconsole-filterbar-secondary {
grid-row: filter-toolbar-secondary;
}
.flexible-output-input {
display: flex;
flex-direction: column;
grid-area: output-input;
/* Don't take more height than the grid allows to */
max-height: 100%;
overflow: hidden;
}
.flexible-output-input .webconsole-output {
flex-shrink: 100000;
overflow-x: hidden;
}
.flexible-output-input > .webconsole-output:not(:empty) {
min-height: var(--console-row-height);
}
/* webconsole.css | chrome://devtools/skin/webconsole.css */
.webconsole-filteringbar-wrapper .devtools-toolbar {
padding-inline-end: 0;
}
.devtools-button.webconsole-console-settings-menu-button {
/* adjust outline offset so it's not clipped */
--theme-outline-offset: -2px;
height: 100%;
margin: 0;
}
.webconsole-console-settings-menu-button::before {
background-image: url("chrome://devtools/skin/images/settings.svg");
}
.webconsole-app .jsterm-input-container {
overflow-y: auto;
overflow-x: hidden;
/* We display the open editor button at the end of the input */
display: grid;
grid-template-columns: 1fr auto;
/* This allows us to not define a column for the CodeMirror container */
grid-auto-flow: column;
/* This element has tabindex="-1" and can briefly show a focus outline when
* clicked, before we move the focus to CodeMirror. */
outline: none;
}
.webconsole-app:not(.jsterm-editor) .jsterm-input-container {
direction: ltr;
/* Define the border width and padding as variables so that we can keep
* border-top-width, padding and min-height in sync. */
--jsterm-border-width: 0;
--jsterm-padding-top: 0;
--jsterm-padding-bottom: 0;
min-height: calc(
var(--console-row-height) +
var(--jsterm-border-width) +
var(--jsterm-padding-top) +
var(--jsterm-padding-bottom)
);
padding-top: var(--jsterm-padding-top);
padding-bottom: var(--jsterm-padding-bottom);
border-top-color: var(--theme-splitter-color);
border-top-width: var(--jsterm-border-width);
border-top-style: solid;
}
.webconsole-app .webconsole-output:not(:empty) ~ .jsterm-input-container {
--jsterm-border-width: 1px;
}
.webconsole-app:not(.jsterm-editor, .eager-evaluation) .jsterm-input-container {
/* The input should be full-height when eager evaluation is disabled. */
flex-grow: 1;
--jsterm-padding-top: var(--console-input-extra-padding);
--jsterm-padding-bottom: var(--console-input-extra-padding);
}
.webconsole-app:not(.jsterm-editor).eager-evaluation .jsterm-input-container {
--jsterm-padding-top: var(--console-input-extra-padding);
}
.webconsole-input-openEditorButton {
/* adjust outline offset so it's not clipped */
--theme-outline-offset: -2px;
height: var(--console-row-height);
margin: 0;
padding-block: 0;
}
.webconsole-input-buttons {
grid-column: -1 / -2;
display: flex;
align-items: flex-start;
}
:root:dir(rtl) .webconsole-input-openEditorButton {
transform: scaleX(-1);
}
.webconsole-input-openEditorButton::before {
background-image: url("chrome://devtools/skin/images/webconsole/editor.svg");
}
.webconsole-app .reverse-search {
grid-area: reverse-search;
/* Those 2 next lines make it so the element isn't impacting the grid column size, but
will still take the whole available space. */
width: 0;
min-width: 100%;
/* Let the reverse search buttons wrap to the next line */
flex-wrap: wrap;
justify-content: end;
}
.sidebar {
display: grid;
grid-area: sidebar;
grid-template-rows: subgrid;
border-inline-start: 1px solid var(--theme-splitter-color);
background-color: var(--theme-sidebar-background);
width: 200px;
min-width: 150px;
max-width: 100%;
}
.sidebar-resizer {
grid-row: 1 / -1;
grid-column: -1 / -2;
}
.webconsole-sidebar-toolbar {
grid-row: 1 / 2;
min-height: 100%;
display: flex;
justify-content: end;
margin: 0;
padding: 0;
}
.sidebar-contents {
grid-row: 2 / -1;
overflow: auto;
direction: ltr;
}
.webconsole-sidebar-toolbar .sidebar-close-button {
margin: 0;
}
.sidebar-close-button::before {
background-image: url("chrome://devtools/skin/images/close.svg");
}
.sidebar-contents .object-inspector {
min-width: 100%;
}
/** EDITOR MODE */
.webconsole-app.jsterm-editor {
display: grid;
/*
* Here's the design we want in editor mode
* +-----------------------------------------------------------------------+
* | [ChromeDebugToolbar] |
* +-----------------------------------------------------------------------+
* | [Notification Box (self XSS warning)] |
* +--------------------------+--------------------------+-----------------+
* | Editor Toolbar ↔ Filter bar primary ↔ |
* +--------------------------↔--------------------------↔ |
* | ↔ [Filter bar secondary] ↔ |
* | ↔--------------------------↔ |
* | ↔ ↔ |
* | Editor ↔ output ↔ [sidebar] |
* | ↔ ↔ |
* | ↔ ↔ |
* | ↔ ↔ |
* | ↔ ↔ |
* +--------------------------↔ ↔ |
* | [Eager evaluation] ↔ ↔ |
* +--------------------------↔ ↔ |
* | [Eval Notification] ↔ ↔ |
* +--------------------------↔ ↔ |
* | [Reverse search input] ↔ ↔ |
* +-----------------------------------------------------+-----------------+
*
* - ↔ are width resizers
* - Elements inside brackets may not be visible, so we set
* rows/columns to "auto" to make them collapse when the element
* they contain is hidden.
*/
grid-template-areas: "chrome-debug-toolbar chrome-debug-toolbar chrome-debug-toolbar"
"notification notification notification"
"editor-toolbar filter-toolbar sidebar"
"editor filter-toolbar-secondary sidebar"
"editor output sidebar"
"eager-evaluation output sidebar"
"eval-notification output sidebar"
"reverse-search output sidebar";
grid-template-rows:
auto
auto
var(--primary-toolbar-height)
auto
1fr
auto
auto
auto;
grid-template-columns: minmax(150px, auto) minmax(200px, 1fr) minmax(0, auto);
}
.jsterm-editor .flexible-output-input {
/* This allow us to place the div children (jsterm, output, notification) on the grid */
display: contents;
}
.jsterm-editor .webconsole-editor-toolbar {
grid-area: editor-toolbar;
border-inline-end: 1px solid var(--theme-splitter-color);
display: grid;
align-items: center;
/*
* The following elements are going to be present in the toolbar:
* - The run button
* - The evaluation selector button
* - The pretty print button
* - A separator
* - The history nav
* - A separator
* - The close button
*
* +-------------------------------------------+
* | ▶︎ Run Top↕ {} | ˄ ˅ 🔍 | ✕ |
* +-------------------------------------------+
*
*/
grid-template-columns: auto auto 1fr auto auto auto auto auto auto auto;
height: unset;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-executeButton {
padding-inline: 4px 8px;
height: 20px;
margin-inline-start: 5px;
display: flex;
align-items: center;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-executeButton::before {
content: url("chrome://devtools/skin/images/webconsole/run.svg");
height: 16px;
width: 16px;
-moz-context-properties: fill;
fill: currentColor;
margin-inline-end: 2px;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-prettyPrintButton {
grid-column: -7 / -8;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-prettyPrintSeparator {
grid-column: -6 / -7;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-history-prevExpressionButton {
grid-column: -5 / -6;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-history-nextExpressionButton {
grid-column: -4 / -5;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-reverseSearchButton {
grid-column: -3 / -4;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-historyNavSeparator {
grid-column: -2 / -3;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-closeButton {
grid-column: -1 / -2;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-prettyPrintButton::before {
background-image: url("chrome://devtools/content/debugger/images/prettyPrint.svg");
background-size: 16px;
fill: var(--theme-icon-color);
-moz-context-properties: fill;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-history-prevExpressionButton::before {
background-image: url("chrome://devtools/skin/images/arrowhead-up.svg");
background-size: 16px;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-history-nextExpressionButton::before {
background-image: url("chrome://devtools/skin/images/arrowhead-down.svg");
background-size: 16px;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-reverseSearchButton::before {
background-image: url("chrome://devtools/skin/images/webconsole/reverse-search.svg");
background-size: 14px;
}
.jsterm-editor .webconsole-editor-toolbar .webconsole-editor-toolbar-closeButton::before {
background-image: url("chrome://devtools/skin/images/close.svg");
}
.jsterm-editor .webconsole-input-openEditorButton {
display: none;
}
.jsterm-editor .webconsole-output {
grid-area: output;
}
.jsterm-editor .jsterm-input-container {
grid-area: editor;
width: 30vw;
/* Don't allow the input to be narrower than the grid-column it's in */
min-width: 100%;
border-top: none;
border-inline-end: 1px solid var(--theme-splitter-color);
padding: 0;
/* Needed as we might have the onboarding UI displayed */
display: flex;
flex-direction: column;
background-color: var(--theme-sidebar-background);
}
.jsterm-editor #webconsole-notificationbox {
grid-area: notification;
}
.jsterm-editor .jsterm-input-container > .CodeMirror {
flex: 1;
padding-inline-start: 0;
font-size: var(--theme-code-font-size);
line-height: var(--theme-code-line-height);
background-image: none;
}
.jsterm-editor .eager-evaluation-result {
grid-area: eager-evaluation;
/* The next 2 lines make it so the element isn't impacting the grid column size, but
will still take the whole available space. */
min-width: 100%;
width: 0;
}
.evaluation-notification {
grid-area: eval-notification;
/* The next 2 lines make it so the element isn't impacting the grid column size, but
will still take the whole available space. */
min-width: 100%;
width: 0;
border: 1px solid;
display: flex;
padding: 0.5em;
}
.jsterm-editor .editor-resizer {
grid-column: editor;
/* We want the splitter to cover the whole column (minus self-xss message) */
grid-row: editor / reverse-search;
}
.editor-onboarding {
display: none;
}
.jsterm-editor .editor-onboarding {
display: grid;
/**
* Here's the design we want:
* ┌──────┬────────────────────────┐
* │ Icon │ Onboarding text │
* ├──────┼────────────────────────┤
* │ │ Got it!│
* └──────┴────────────────────────┘
**/
grid-template-columns: 22px 1fr;
border-bottom: 1px solid var(--theme-splitter-color);
padding: 8px 16px;
background-color: var(--theme-body-alternate-emphasized-background);
grid-gap: 0 14px;
font-family: system-ui;
font-size: 12px;
line-height: 1.5;
}
.editor-onboarding-fox {
width: 22px;
height: 22px;
align-self: center;
}
.jsterm-editor .editor-onboarding p {
padding: 0;
margin: 0;
}
.jsterm-editor .editor-onboarding .editor-onboarding-shortcut {
font-weight: bold;
}
.editor-onboarding-dismiss-button {
grid-row: 2 / 3;
grid-column: 2 / 3;
justify-self: end;
padding: 2px;
background: transparent;
border: none;
color: var(--theme-link-color);
font-family: inherit;
cursor: pointer;
font-size: inherit;
}