From bc055e6b9873fe965f7c979deee925139ebb1bc5 Mon Sep 17 00:00:00 2001 From: Maya Date: Sat, 26 Jul 2025 23:58:30 +0300 Subject: [PATCH] fix: card, tooltip, and scrollbar fixes --- src/lib/components/visual/Tooltip.svelte | 69 +++++++--- src/lib/converters/ffmpeg.svelte.ts | 2 - src/lib/css/app.scss | 38 ++++++ src/routes/+page.svelte | 161 +++++++++++++++-------- 4 files changed, 197 insertions(+), 73 deletions(-) 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 @@ +{#if showTooltip} +
+ {text} +
+{/if} +