diff --git a/src/lib/components/dualTimeView.svelte b/src/lib/components/dualTimeView.svelte index 8f34d2205..e3c596da4 100644 --- a/src/lib/components/dualTimeView.svelte +++ b/src/lib/components/dualTimeView.svelte @@ -7,6 +7,9 @@ export let time: string = ''; export let placement: ComponentProps['placement'] = 'bottom'; + let isTooltipStyled = false; + let tooltipElement: HTMLDivElement | null = null; + function timeDifference(dateString: string): string { const SECONDS_IN_MINUTE = 60; const SECONDS_IN_HOUR = SECONDS_IN_MINUTE * 60; @@ -36,25 +39,20 @@ return formattedTime ? `${formattedTime} ago` : 'Just now'; } - let tooltipWrapperId = 'tooltip-wrapper-' + Math.random().toString(36).substring(2, 9); - - $: timeToString = time ? timeDifference(time) : 'Invalid time'; - function shouldHidePopover(hideTooltip: () => void) { let isMouseOverTooltip = false; - const tooltip = document.querySelector(`.${tooltipWrapperId}`); - if (!tooltip) { + if (!tooltipElement) { hideTooltip(); return; } - if (tooltip) { - tooltip.addEventListener('mouseenter', () => { + if (tooltipElement) { + tooltipElement.addEventListener('mouseenter', () => { isMouseOverTooltip = true; }); - tooltip.addEventListener('mouseleave', () => { + tooltipElement.addEventListener('mouseleave', () => { isMouseOverTooltip = false; hideTooltip(); }); @@ -66,17 +64,32 @@ } }, 50); } + + $: timeToString = time ? timeDifference(time) : 'Invalid time'; + + $: if (tooltipElement && !isTooltipStyled) { + isTooltipStyled = true; + // transition to tooltip's wrapper (div[class^='popover-*']) + tooltipElement.parentElement.style.transition ||= 'all 0.25s ease-in-out'; + } -
- - + + - +
+ {timeToString} @@ -109,23 +122,5 @@ - -
- - +
+