| /** |
| * @license |
| * Copyright 2018 Google LLC |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| import '../gr-copy-clipboard/gr-copy-clipboard'; |
| import {GrCopyClipboard} from '../gr-copy-clipboard/gr-copy-clipboard'; |
| import {queryAndAssert} from '../../../utils/common-util'; |
| import {sharedStyles} from '../../../styles/shared-styles'; |
| import {LitElement, css, html} from 'lit'; |
| import {customElement, property} from 'lit/decorators.js'; |
| |
| declare global { |
| interface HTMLElementTagNameMap { |
| 'gr-shell-command': GrShellCommand; |
| } |
| } |
| |
| @customElement('gr-shell-command') |
| export class GrShellCommand extends LitElement { |
| @property({type: String}) |
| command: string | undefined; |
| |
| @property({type: String}) |
| label: string | undefined; |
| |
| @property({type: String}) |
| tooltip = ''; |
| |
| static override get styles() { |
| return [ |
| sharedStyles, |
| css` |
| .commandContainer { |
| margin-bottom: var(--spacing-m); |
| } |
| .commandContainer { |
| background-color: var(--shell-command-background-color); |
| /* Should be spacing-m larger than the :before width. */ |
| padding: var(--spacing-m) var(--spacing-m) var(--spacing-m) |
| calc(3 * var(--spacing-m) + 0.5em); |
| position: relative; |
| width: 100%; |
| } |
| .commandContainer:before { |
| content: '$'; |
| position: absolute; |
| display: block; |
| box-sizing: border-box; |
| background: var(--shell-command-decoration-background-color); |
| top: 0; |
| bottom: 0; |
| left: 0; |
| /* Should be spacing-m smaller than the .commandContainer padding-left. */ |
| width: calc(2 * var(--spacing-m) + 0.5em); |
| /* Should vertically match the padding of .commandContainer. */ |
| padding: var(--spacing-m); |
| /* Should roughly match the height of .commandContainer without padding. */ |
| line-height: 26px; |
| } |
| .commandContainer gr-copy-clipboard::part(text-container-style) { |
| border: none; |
| } |
| `, |
| ]; |
| } |
| |
| override render() { |
| const label = this.label ?? ''; |
| return html` <label>${label}</label> |
| <div class="commandContainer"> |
| <gr-copy-clipboard |
| .text=${this.command} |
| hasTooltip |
| buttonTitle=${this.tooltip} |
| ></gr-copy-clipboard> |
| </div>`; |
| } |
| |
| async focusOnCopy() { |
| await this.updateComplete; |
| const copyClipboard = queryAndAssert<GrCopyClipboard>( |
| this, |
| 'gr-copy-clipboard' |
| ); |
| if (copyClipboard) { |
| copyClipboard.focusOnCopy(); |
| } |
| } |
| } |