blob: bd4efcd20c5d02c09ef69547e80dc061c8cd2ebe [file] [log] [blame]
/**
* @license
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {sharedStyles} from '../../../styles/shared-styles';
import {LitElement, css, html} from 'lit';
import {customElement, property} from 'lit/decorators';
import {styleMap} from 'lit/directives/style-map';
declare global {
interface HTMLElementTagNameMap {
'gr-tooltip': GrTooltip;
}
}
@customElement('gr-tooltip')
export class GrTooltip extends LitElement {
@property({type: String})
text = '';
@property({type: String})
maxWidth = '';
@property({type: String})
arrowCenterOffset = '0';
@property({type: Boolean, reflect: true, attribute: 'position-below'})
positionBelow = false;
static override get styles() {
return [
sharedStyles,
css`
:host {
--gr-tooltip-arrow-size: 0.5em;
background-color: var(--tooltip-background-color);
box-shadow: var(--elevation-level-2);
color: var(--tooltip-text-color);
font-size: var(--font-size-small);
position: absolute;
z-index: 1000;
}
:host .tooltip {
padding: var(--spacing-m) var(--spacing-l);
}
:host .arrowPositionBelow,
:host([position-below]) .arrowPositionAbove {
display: none;
}
:host([position-below]) .arrowPositionBelow {
display: initial;
}
.arrow {
border-left: var(--gr-tooltip-arrow-size) solid transparent;
border-right: var(--gr-tooltip-arrow-size) solid transparent;
height: 0;
position: absolute;
left: calc(50% - var(--gr-tooltip-arrow-size));
width: 0;
}
.arrowPositionAbove {
border-top: var(--gr-tooltip-arrow-size) solid
var(--tooltip-background-color);
bottom: calc(-1 * var(--gr-tooltip-arrow-size));
}
.arrowPositionBelow {
border-bottom: var(--gr-tooltip-arrow-size) solid
var(--tooltip-background-color);
top: calc(-1 * var(--gr-tooltip-arrow-size));
}
`,
];
}
override render() {
this.style.maxWidth = this.maxWidth;
return html` <div class="tooltip">
<i
class="arrowPositionBelow arrow"
style=${styleMap({marginLeft: this.arrowCenterOffset})}
></i>
${this.text}
<i
class="arrowPositionAbove arrow"
style=${styleMap({marginLeft: this.arrowCenterOffset})}
></i>
</div>`;
}
}