diff --git a/app/components/dependency-list/row.module.css b/app/components/dependency-list/row.module.css
index 85a7235edb8..8701ccbce40 100644
--- a/app/components/dependency-list/row.module.css
+++ b/app/components/dependency-list/row.module.css
@@ -37,15 +37,15 @@
cursor: help;
}
- .tooltip {
- word-break: break-all;
- }
-
@media only screen and (max-width: 550px) {
display: block
}
}
+.tooltip {
+ word-break: break-all;
+}
+
.range-lg, .range-sm {
margin-right: var(--space-s);
min-width: 100px;
diff --git a/app/components/tooltip.hbs b/app/components/tooltip.hbs
index 72f9945a30c..ff4632072f5 100644
--- a/app/components/tooltip.hbs
+++ b/app/components/tooltip.hbs
@@ -1,9 +1,13 @@
-
- {{#unless this.hidden}}
- {{#if (has-block)}}
- {{yield}}
- {{else}}
- {{@text}}
- {{/if}}
- {{/unless}}
-
\ No newline at end of file
+
+
+{{#if this.visible}}
+ {{#in-element this.containerElement}}
+
+ {{#if (has-block)}}
+ {{yield}}
+ {{else}}
+ {{@text}}
+ {{/if}}
+
+ {{/in-element}}
+{{/if}}
diff --git a/app/components/tooltip.js b/app/components/tooltip.js
index 796fcf123e0..b41a0af00c3 100644
--- a/app/components/tooltip.js
+++ b/app/components/tooltip.js
@@ -2,14 +2,65 @@ import { action } from '@ember/object';
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
+import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';
+import { modifier } from 'ember-modifier';
+
export default class Tooltip extends Component {
- @tracked hidden = true;
+ @tracked anchorElement = null;
+ @tracked visible = false;
- @action hide() {
- this.hidden = true;
+ get containerElement() {
+ return document.querySelector('#tooltip-container');
}
@action show() {
- this.hidden = false;
+ this.visible = true;
+ }
+
+ @action hide() {
+ this.visible = false;
}
+
+ onInsertAnchor = modifier((anchor, [component]) => {
+ component.anchorElement = anchor.parentElement;
+
+ let events = [
+ ['mouseenter', component.show],
+ ['mouseleave', component.hide],
+ ['focus', component.show],
+ ['blur', component.hide],
+ ];
+
+ for (let [event, listener] of events) {
+ component.anchorElement.addEventListener(event, listener);
+ }
+
+ return () => {
+ for (let [event, listener] of events) {
+ component.anchorElement?.removeEventListener(event, listener);
+ }
+ };
+ });
+
+ attachTooltip = modifier((floatingElement, [component], { side = 'top' } = {}) => {
+ let referenceElement = component.anchorElement;
+
+ async function update() {
+ let middleware = [offset(5), flip(), shift({ padding: 5 })];
+
+ let { x, y } = await computePosition(referenceElement, floatingElement, {
+ placement: side,
+ middleware,
+ });
+
+ Object.assign(floatingElement.style, {
+ left: `${x}px`,
+ top: `${y}px`,
+ });
+ }
+
+ let cleanup = autoUpdate(referenceElement, floatingElement, update);
+
+ return () => cleanup();
+ });
}
diff --git a/app/components/tooltip.module.css b/app/components/tooltip.module.css
index eb7a8753c6e..44f9c930c4d 100644
--- a/app/components/tooltip.module.css
+++ b/app/components/tooltip.module.css
@@ -1,5 +1,4 @@
.tooltip {
- display: none;
width: max-content;
max-width: 300px;
position: absolute;
@@ -20,3 +19,7 @@
color: unset;
}
}
+
+.anchor {
+ display: none;
+}
diff --git a/app/components/version-list/row.hbs b/app/components/version-list/row.hbs
index 726193181db..d6391d23586 100644
--- a/app/components/version-list/row.hbs
+++ b/app/components/version-list/row.hbs
@@ -18,7 +18,7 @@
{{@version.releaseTrack}}
{{/if}}
-
+
{{this.releaseTrackTitle}}
diff --git a/app/components/version-list/row.module.css b/app/components/version-list/row.module.css
index 0af001cff18..bf81d4d2b8b 100644
--- a/app/components/version-list/row.module.css
+++ b/app/components/version-list/row.module.css
@@ -56,10 +56,6 @@
grid-template-columns: auto auto;
place-items: center;
- .tooltip {
- word-break: break-all;
- }
-
@media only screen and (max-width: 550px) {
grid-template-columns: auto;
margin: 0 var(--space-s);
@@ -109,6 +105,10 @@
color: hsl(0, 87%, 58%);
}
+.rt-tooltip {
+ word-break: break-all;
+}
+
.num-link {
max-width: 200px;
text-overflow: ellipsis;
@@ -161,11 +161,6 @@
margin-bottom: -.1em;
}
- .tooltip {
- text-transform: none;
- letter-spacing: normal;
- }
-
> * + * {
margin-top: var(--space-2xs);
@@ -226,6 +221,13 @@
padding: 0;
margin: var(--space-2xs) var(--space-3xs);
list-style: none;
+
+ svg {
+ height: 1em;
+ width: auto;
+ margin-right: var(--space-4xs);
+ margin-bottom: -.1em;
+ }
}
.yank-button {
diff --git a/app/modifiers/attach-tooltip.js b/app/modifiers/attach-tooltip.js
deleted file mode 100644
index 6d45aec8a55..00000000000
--- a/app/modifiers/attach-tooltip.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom';
-import { modifier } from 'ember-modifier';
-
-export default modifier((floatingElement, positional, { hide, show, side = 'top' } = {}) => {
- let referenceElement = floatingElement.parentElement;
-
- let cleanup;
-
- async function update() {
- let middleware = [offset(5), flip(), shift({ padding: 5 })];
-
- let { x, y } = await computePosition(referenceElement, floatingElement, {
- placement: side,
- middleware,
- });
-
- Object.assign(floatingElement.style, {
- left: `${x}px`,
- top: `${y}px`,
- });
- }
-
- function showTooltip() {
- show();
- floatingElement.style.display = 'block';
- cleanup = autoUpdate(referenceElement, floatingElement, update);
- }
-
- function hideTooltip() {
- hide();
- floatingElement.style.display = '';
- cleanup?.();
- }
-
- [
- ['mouseenter', showTooltip],
- ['mouseleave', hideTooltip],
- ['focus', showTooltip],
- ['blur', hideTooltip],
- ].forEach(([event, listener]) => {
- referenceElement.addEventListener(event, listener);
- });
-
- return () => cleanup?.();
-});
diff --git a/app/styles/shared/typography.module.css b/app/styles/shared/typography.module.css
index dee269ce126..60abd926a84 100644
--- a/app/styles/shared/typography.module.css
+++ b/app/styles/shared/typography.module.css
@@ -5,10 +5,6 @@
strong {
color: var(--main-color);
}
-
- :global(.tooltip) strong {
- color: inherit;
- }
}
.small a, a.small {
diff --git a/app/templates/application.hbs b/app/templates/application.hbs
index 0e8649c8cd9..7d30c6a6ad2 100644
--- a/app/templates/application.hbs
+++ b/app/templates/application.hbs
@@ -5,6 +5,7 @@
+