chrome-devtools-frontend
Version:
Chrome DevTools UI
412 lines (348 loc) • 9.15 kB
CSS
/*
* Copyright 2024 The Chromium Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
:host {
width: 100%;
height: 100%;
user-select: text;
display: flex;
flex-direction: column;
background-color: var(--sys-color-cdt-base-container);
}
.chat-ui {
width: 100%;
height: 100%;
max-height: 100%;
display: flex;
flex-direction: column;
container-type: size;
container-name: --chat-ui-container;
}
.info-tooltip-container {
max-width: var(--sys-size-28);
padding: var(--sys-size-4) var(--sys-size-5);
}
.tooltip-link {
display: block;
margin-top: var(--sys-size-4);
color: var(--sys-color-primary);
padding-left: 0;
}
.chat-cancel-context-button {
padding-bottom: 3px;
padding-right: var(--sys-size-3);
}
.messages-container {
flex-grow: 1;
width: 100%;
max-width: var(--sys-size-36);
/* Prevents the container from jumping when the scrollbar is shown */
/* 688px is the max width of the input form + left and right paddings: var(--sys-size-36) + 2 * var(--sys-size-5) */
@container (width > 688px) {
--half-scrollbar-width: calc((100cqw - 100%) / 2);
margin-left: var(--half-scrollbar-width);
margin-right: calc(-1 * var(--half-scrollbar-width));
}
}
.link {
color: var(--text-link);
text-decoration: underline;
cursor: pointer;
}
button.link {
border: none;
background: none;
font: inherit;
&:focus-visible {
outline: var(--sys-size-2) solid var(--sys-color-state-focus-ring);
outline-offset: 0;
border-radius: var(--sys-shape-corner-extra-small);
}
}
.select-an-element-text {
margin-left: 2px;
}
main {
overflow: hidden auto;
display: flex;
flex-direction: column;
align-items: center;
height: 100%;
container-type: size;
scrollbar-width: thin;
/*
Even though `transform: translateZ(1px)` doesn't have a visual effect,
it puts `main` element into another rendering layer which somehow
fixes the `.input-form` jumping on scroll issue.
*/
transform: translateZ(1px);
scroll-timeline: --scroll-timeline y;
}
.empty-state-container {
flex-grow: 1;
display: grid;
align-items: center;
justify-content: center;
font: var(--sys-typescale-headline4);
gap: var(--sys-size-8);
padding: var(--sys-size-4);
max-width: var(--sys-size-33);
/* Prevents the container from jumping when the scrollbar is shown */
/* 688px is the max width of the input form + left and right paddings: var(--sys-size-36) + 2 * var(--sys-size-5) */
@container (width > 688px) {
--half-scrollbar-width: calc((100cqw - 100%) / 2);
margin-left: var(--half-scrollbar-width);
margin-right: calc(-1 * var(--half-scrollbar-width));
}
.header {
display: flex;
flex-direction: column;
width: 100%;
align-items: center;
justify-content: center;
align-self: end;
gap: var(--sys-size-5);
.icon {
display: flex;
justify-content: center;
align-items: center;
height: var(--sys-size-14);
width: var(--sys-size-14);
border-radius: var(--sys-shape-corner-small);
background: linear-gradient(
135deg,
var(--sys-color-gradient-primary),
var(--sys-color-gradient-tertiary)
);
}
h1 {
font: var(--sys-typescale-headline4);
}
p {
text-align: center;
font: var(--sys-typescale-body4-regular);
}
}
.empty-state-content {
display: flex;
flex-direction: column;
gap: var(--sys-size-5);
align-items: center;
justify-content: center;
align-self: start;
}
}
.gemini {
.empty-state-container {
padding: var(--sys-size-8);
}
.empty-state-container .icon {
display: none;
}
.empty-state-container .header {
align-items: flex-start;
line-height: var(--sys-size-4);
}
.empty-state-content {
align-items: flex-start
}
.empty-state-container .greeting {
font-size: var(--sys-size-10);
color: var(--sys-color-primary);
}
.empty-state-container .cta {
font-size: var(--sys-size-10);
}
main {
align-items: flex-start;
}
}
.change-summary {
background-color: var(--sys-color-surface3);
border-radius: var(--sys-shape-corner-medium-small);
position: relative;
margin: 0 var(--sys-size-5) var(--sys-size-7) var(--sys-size-5);
padding: 0 var(--sys-size-5);
&.saved-to-disk {
pointer-events: none;
}
& .header-container {
display: flex;
align-items: center;
gap: var(--sys-size-3);
height: var(--sys-size-14);
padding-left: var(--sys-size-3);
devtools-spinner {
width: var(--sys-size-6);
height: var(--sys-size-6);
margin-left: var(--sys-size-3);
margin-right: var(--sys-size-3);
}
& devtools-icon.summary-badge {
width: var(--sys-size-8);
height: var(--sys-size-8);
}
& .green-bright-icon {
color: var(--sys-color-green-bright);
}
& .on-tonal-icon {
color: var(--sys-color-on-tonal-container);
}
& .header-text {
font: var(--sys-typescale-body4);
color: var(--sys-color-on-surface);
white-space: nowrap;
overflow-x: hidden;
text-overflow: ellipsis;
}
& .arrow {
margin-left: auto;
}
&::marker {
content: '';
}
}
&:not(.saved-to-disk, &[open]):hover::after {
content: '';
height: 100%;
width: 100%;
border-radius: inherit;
position: absolute;
top: 0;
left: 0;
pointer-events: none;
background-color: var(--sys-color-state-hover-on-subtle);
}
&[open]:not(.saved-to-disk) {
&::details-content {
height: fit-content;
padding: var(--sys-size-2) 0;
border-radius: inherit;
}
summary .arrow {
transform: rotate(180deg);
}
}
devtools-code-block {
margin-bottom: var(--sys-size-5);
--code-block-background-color: var(--sys-color-surface1);
}
.error-container {
display: flex;
align-items: center;
gap: var(--sys-size-3);
color: var(--sys-color-error);
}
.footer {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
margin: var(--sys-size-5) 0 var(--sys-size-5) var(--sys-size-2);
gap: var(--sys-size-6) var(--sys-size-5);
.disclaimer-link {
align-self: center;
}
.left-side {
flex-grow: 1;
display: flex;
align-self: center;
gap: var(--sys-size-3);
}
.save-or-discard-buttons {
flex-grow: 1;
display: flex;
justify-content: flex-end;
gap: var(--sys-size-3);
}
.change-workspace {
display: flex;
flex-direction: row;
align-items: center;
gap: var(--sys-size-3);
min-width: var(--sys-size-22);
flex: 1 1 40%;
.folder-name {
white-space: nowrap;
overflow-x: hidden;
text-overflow: ellipsis;
}
}
.loading-text-container {
margin-right: var(--sys-size-3);
display: flex;
justify-content: center;
align-items: center;
gap: var(--sys-size-3);
}
.apply-to-workspace-container {
display: flex;
align-items: center;
gap: var(--sys-size-3);
min-width: fit-content;
justify-content: flex-end;
flex-grow: 1;
flex-shrink: 1;
devtools-icon {
/* var(--sys-size-8) is too small and var(--sys-size-9) is too big. */
width: 18px;
height: 18px;
margin-left: var(--sys-size-2);
}
}
}
}
@keyframes reveal {
0%,
99% {
opacity: 100%;
}
100% {
opacity: 0%;
}
}
.sticky {
position: sticky;
bottom: 0;
z-index: 9999;
}
.chat-input-widget {
width: 100%;
max-width: var(--sys-size-36);
background-color: var(--sys-color-cdt-base-container);
/*
The `box-shadow` is a workaround to hide the content appearing between the `.input-form`
and the footer in some resolutions even though the `.input-form` has `bottom: 0`.
*/
box-shadow: 0 1px var(--sys-color-cdt-base-container);
/* Prevents the input form from jumping when the scrollbar is shown */
/* 688px is the max width of the input form + left and right paddings: var(--sys-size-36) + 2 * var(--sys-size-5) */
@container (width > 688px) {
--half-scrollbar-width: calc((100cqw - 100%) / 2);
margin-left: var(--half-scrollbar-width);
margin-right: calc(-1 * var(--half-scrollbar-width));
}
/* when there isn't enough space to view the messages,
do not overlay the input form on top of the messages */
/* height < var(--sys-size-27) */
@container (height < 224px) {
margin-top: var(--sys-size-4);
margin-bottom: var(--sys-size-4);
position: static;
}
@container --chat-ui-container (width < 400px) {
/*
The footer already adds necessary paddings for this state.
However, without the `padding-bottom` here, the outline in the bottom
is rendered behind the footer. So, we add 1px space here to make sure
that the outline is rendered fully.
*/
padding-bottom: var(--sys-size-1);
}
}