diff --git a/src/lib/components/visual/Tooltip.svelte b/src/lib/components/visual/Tooltip.svelte index 655f5fb..fe00426 100644 --- a/src/lib/components/visual/Tooltip.svelte +++ b/src/lib/components/visual/Tooltip.svelte @@ -4,15 +4,47 @@ interface Props { children: () => any; text: string; + className?: string; position?: "top" | "bottom" | "left" | "right"; } - let { children, text, position = "top" }: Props = $props(); + let { children, text, className, position = "top" }: Props = $props(); let showTooltip = $state(false); let timeout: number = 0; + let triggerElement: HTMLElement; + let tooltipPosition = $state({ x: 0, y: 0 }); function show() { timeout = setTimeout(() => { + if (!triggerElement) return; + const rect = triggerElement.getBoundingClientRect(); + + switch (position) { + case "top": + tooltipPosition = { + x: rect.left + rect.width / 2, + y: rect.top - 10, + }; + break; + case "bottom": + tooltipPosition = { + x: rect.left + rect.width / 2, + y: rect.bottom + 10, + }; + break; + case "left": + tooltipPosition = { + x: rect.left - 10, + y: rect.top + rect.height / 2, + }; + break; + case "right": + tooltipPosition = { + x: rect.right + 10, + y: rect.top + rect.height / 2, + }; + break; + } showTooltip = true; }, 500); } @@ -24,7 +56,8 @@