v2026.5.43 — Fix Firefox menu dock position + stabilité popup pin/unpin

Bug Firefox uniquement : positionnement du menu hover des pastilles du
dock (popup réduit) corrigé. La cause était que getBoundingClientRect()
était appelé immédiatement après appendChild sans que Firefox n'ait fini
de calculer la mise en page, combiné à un transform: translateY dans
l'animation d'apparition du menu. Fix : positionnement hors écran initial,
force-layout via offsetHeight, puis pose finale. Animation CSS simplifiée
en opacité-only.

Stabilité popup au pin/unpin (tous navigateurs) : la popup épinglée
bougeait de 16px et changeait légèrement de taille quand on la
dé-épinglait via le bouton 📌. Cause : .pinned-popup avait padding-top
28px + border 2px alors que .soft-unpinned avait padding-top 12px + border
1px. Fix : .soft-unpinned conserve désormais les mêmes dimensions, juste
la couleur de bordure change (--border-strong gris au lieu de --accent
bleu) pour signaler le mode détaché.
This commit is contained in:
Quentin Rouiller
2026-04-27 04:57:03 +02:00
parent 3c7e7c0c25
commit d7b680fb3f
7 changed files with 76 additions and 21 deletions
+12 -1
View File
@@ -9339,9 +9339,19 @@ function _showPillHoverMenu(pill, popup) {
});
menu.appendChild(closeBtn);
// v2026.5.43 (Firefox-fix) : positionner le menu HORS écran d'abord pour
// qu'il soit layouté sans flash, puis mesurer ses dimensions, puis poser
// la position finale. Sans ça, Firefox lit parfois des dimensions à 0
// (timing de l'animation `pill-hover-menu-appear` + transform initial),
// ce qui projette le menu n'importe où sur l'écran.
menu.style.left = "-9999px";
menu.style.top = "-9999px";
menu.style.visibility = "hidden";
document.body.appendChild(menu);
// Force le navigateur à calculer la mise en page maintenant (Firefox ne
// le fait pas toujours sur getBoundingClientRect immédiat après append).
void menu.offsetHeight;
// Positionner au-dessus de la pastille
const r = pill.getBoundingClientRect();
const menuR = menu.getBoundingClientRect();
let left = r.left + (r.width / 2) - (menuR.width / 2);
@@ -9349,6 +9359,7 @@ function _showPillHoverMenu(pill, popup) {
if (left + menuR.width > window.innerWidth - 4) left = window.innerWidth - menuR.width - 4;
menu.style.left = left + "px";
menu.style.top = (r.top - menuR.height - 8) + "px";
menu.style.visibility = "";
// Garder ouvert si la souris entre dans le menu
menu.addEventListener("mouseenter", () => {