diff --git a/packages/tooltip/index.js b/packages/tooltip/index.js
index beb5088ad..8668e4823 100644
--- a/packages/tooltip/index.js
+++ b/packages/tooltip/index.js
@@ -1,2 +1 @@
export { LionTooltip } from './src/LionTooltip.js';
-export { LionTooltipArrow } from './src/LionTooltipArrow.js';
diff --git a/packages/tooltip/lion-tooltip-arrow.js b/packages/tooltip/lion-tooltip-arrow.js
deleted file mode 100644
index 69248c729..000000000
--- a/packages/tooltip/lion-tooltip-arrow.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import { LionTooltipArrow } from './src/LionTooltipArrow.js';
-
-customElements.define('lion-tooltip-arrow', LionTooltipArrow);
diff --git a/packages/tooltip/src/LionTooltip.js b/packages/tooltip/src/LionTooltip.js
index 9dbd67a2c..329ce0efe 100644
--- a/packages/tooltip/src/LionTooltip.js
+++ b/packages/tooltip/src/LionTooltip.js
@@ -1,7 +1,69 @@
-import { html, LitElement } from '@lion/core';
+import { css, html, LitElement } from '@lion/core';
import { OverlayMixin } from '@lion/overlays';
export class LionTooltip extends OverlayMixin(LitElement) {
+ static get properties() {
+ return {
+ hasArrow: {
+ type: Boolean,
+ reflect: true,
+ attribute: 'has-arrow',
+ },
+ };
+ }
+
+ static get styles() {
+ return css`
+ :host {
+ --tooltip-arrow-width: 12px;
+ --tooltip-arrow-height: 8px;
+ }
+
+ :host([hidden]) {
+ display: none;
+ }
+
+ .arrow {
+ position: absolute;
+ width: var(--tooltip-arrow-width);
+ height: var(--tooltip-arrow-height);
+ }
+
+ .arrow svg {
+ display: block;
+ }
+
+ [x-placement^='bottom'] .arrow {
+ top: calc(-1 * var(--tooltip-arrow-height));
+ transform: rotate(180deg);
+ }
+
+ [x-placement^='left'] .arrow {
+ right: calc(
+ -1 * (var(--tooltip-arrow-height) +
+ (var(--tooltip-arrow-width) - var(--tooltip-arrow-height)) / 2)
+ );
+ transform: rotate(270deg);
+ }
+
+ [x-placement^='right'] .arrow {
+ left: calc(
+ -1 * (var(--tooltip-arrow-height) +
+ (var(--tooltip-arrow-width) - var(--tooltip-arrow-height)) / 2)
+ );
+ transform: rotate(90deg);
+ }
+
+ .arrow {
+ display: none;
+ }
+
+ :host([has-arrow]) .arrow {
+ display: block;
+ }
+ `;
+ }
+
constructor() {
super();
this._mouseActive = false;
@@ -12,9 +74,6 @@ export class LionTooltip extends OverlayMixin(LitElement) {
connectedCallback() {
super.connectedCallback();
this._overlayContentNode.setAttribute('role', 'tooltip');
- // Schedule setting up the arrow element so that it works both on firstUpdated
- // and when the tooltip is moved in the DOM (disconnected + reconnected)
- this.updateComplete.then(() => this.__setupArrowElement());
}
render() {
@@ -22,20 +81,20 @@ export class LionTooltip extends OverlayMixin(LitElement) {