Tooltip
A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.
1<script lang="ts">
2 import { Button } from "@/components/ui/button"
3 import {
4 Tooltip,
Installation
pnpm dlx sprawlify@latest add tooltipnpx sprawlify@latest add tooltipyarn sprawlify@latest add tooltipbunx --bun sprawlify@latest add tooltip
Install the following dependencies:
pnpm add @sprawlify/primitives @sprawlify/sveltenpm install @sprawlify/primitives @sprawlify/svelteyarn add @sprawlify/primitives @sprawlify/sveltebun add @sprawlify/primitives @sprawlify/svelte
Add the following files to your project:
1export { default as Tooltip } from "./tooltip.svelte";2export { default as TooltipProvider } from "./tooltip-provider.svelte";3export { default as TooltipTrigger } from "./tooltip-trigger.svelte";4export { default as TooltipContent } from "./tooltip-content.svelte";51<script lang="ts">
2 import { Tooltip as TooltipPrimitive } from "@sprawlify/svelte/tooltip"
3 import { Portal } from "@sprawlify/svelte/portal"
4 import { cn } from "@/lib/utils"
5 import type { ComponentProps } from "svelte"
6
7 interface Props extends ComponentProps<typeof TooltipPrimitive.Content> {}
8
9 let { class: className, children, ...rest }: Props = $props()
10</script>
11
12<Portal>
13 <TooltipPrimitive.Positioner>
14 <TooltipPrimitive.Content
15 data-slot="tooltip-content"
16 class={cn(
17 "z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
18 className
19 )}
20 {...rest}
21 >
22 {@render children?.()}
23 <TooltipPrimitive.Arrow class="[--arrow-background:var(--foreground)] [--arrow-size:8px]">
24 <TooltipPrimitive.ArrowTip class="rounded-xs" />
25 </TooltipPrimitive.Arrow>
26 </TooltipPrimitive.Content>
27 </TooltipPrimitive.Positioner>
28</Portal>1<script lang="ts">
2 import { Tooltip as TooltipPrimitive } from "@sprawlify/svelte/tooltip"
3 import type { ComponentProps } from "svelte"
4
5 interface Props extends ComponentProps<typeof TooltipPrimitive.RootProvider> {
6 "data-slot"?: string
7 }
8
9 let { children, ...rest }: Props = $props()
10</script>
11
12<TooltipPrimitive.RootProvider data-slot="tooltip-provider" {...rest}>
13 {@render children?.()}
14</TooltipPrimitive.RootProvider>1<script lang="ts">
2 import { Tooltip as TooltipPrimitive } from "@sprawlify/svelte/tooltip"
3 import type { ComponentProps } from "svelte"
4
5 interface Props extends ComponentProps<typeof TooltipPrimitive.Trigger> {}
6
7 let { children, ...rest }: Props = $props()
8</script>
9
10<TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...rest}>
11 {@render children?.()}
12</TooltipPrimitive.Trigger>1<script lang="ts">
2 import { Tooltip as TooltipPrimitive } from "@sprawlify/svelte/tooltip"
3 import type { ComponentProps } from "svelte"
4
5 interface Props extends ComponentProps<typeof TooltipPrimitive.Root> {
6 "data-slot"?: string
7 }
8
9 let { children, ...rest }: Props = $props()
10</script>
11
12<TooltipPrimitive.Root data-slot="tooltip" {...rest}>
13 {@render children?.()}
14</TooltipPrimitive.Root>Update the import paths to match your project setup.
Usage
1import {
2 Tooltip,
3 TooltipContent,
4 TooltipTrigger,
5} from "@/components/ui/tooltip"1<Tooltip>
2 <TooltipTrigger>Hover</TooltipTrigger>
3 <TooltipContent>
4 <p>Add to library</p>
5 </TooltipContent>
6</Tooltip>Examples
Disabled Button
Show a tooltip on a disabled button by wrapping it with a span.
1<script lang="ts">
2 import { Button } from "@/components/ui/button"
3 import {
4 Tooltip,
Placement
Use the positioning prop to change the placement of the tooltip.
1<script lang="ts">
2 import { Button } from "@/components/ui/button"
3 import {
4 Tooltip,
With Keyboard Shortcut
1<script lang="ts">
2 import { Button } from "@/components/ui/button"
3 import { Kbd } from "@/components/ui/kbd"
4 import {
Get PRO
Need premium blocks and templates? Upgrade to PRO and get access.