From 06be27c3fd2ba7a7f22d4a66d6562ecf8aa1fbd4 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Mon, 15 Apr 2024 19:04:24 -0700 Subject: feat(tooltip): pinning --- src/lib/Tooltip/tooltip.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/lib/Tooltip') diff --git a/src/lib/Tooltip/tooltip.ts b/src/lib/Tooltip/tooltip.ts index 8f1d9988..2beb25d0 100644 --- a/src/lib/Tooltip/tooltip.ts +++ b/src/lib/Tooltip/tooltip.ts @@ -29,6 +29,30 @@ const tooltip = (element: HTMLElement) => { const updateTooltipPosition = (x: number, y: number) => { if (tooltipDiv) { + const tooltipPin = element.dataset.tooltippin; + + if (tooltipPin) { + const pinnedElement = document.getElementById(tooltipPin); + + if (pinnedElement) { + const rect = pinnedElement.getBoundingClientRect(); + const tooltipWidth = tooltipDiv.offsetWidth; + const tooltipHeight = tooltipDiv.offsetHeight; + let top = rect.top - tooltipHeight - offset; + let left = rect.left + rect.width / 2 - tooltipWidth / 2; + + if (left < 0) left = offset; + if (left + tooltipWidth > window.innerWidth) + left = window.innerWidth - tooltipWidth - offset; + if (top < 0) top = rect.top + rect.height + offset; + + tooltipDiv.style.left = `${left}px`; + tooltipDiv.style.top = `${top}px`; + + return; + } + } + const tooltipWidth = tooltipDiv.offsetWidth; const tooltipHeight = tooltipDiv.offsetHeight; let top = y - tooltipHeight - offset; -- cgit v1.2.3