UNPKG

chrome-devtools-frontend

Version:
412 lines (348 loc) • 9.15 kB
/* * 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); } }