Presets

Blocks

Get PRO

Need premium blocks and templates? Upgrade to PRO and get access.

Upgrade
JoinLogin
Presets
Monochrome
Overview
  • Introduction
  • Components
  • Installation
Components
  • Accordion
  • Alert
  • Alert Dialog
  • Aspect Ratio
  • Avatar
  • Badge
  • Breadcrumb
  • Button
  • Button Group
  • CalendarNEW
  • Card
  • CarouselNEW
  • Checkbox
  • Collapsible
  • Dialog
  • Dropdown Menu
  • Empty
  • Field
  • Input
  • Input Group
  • Item
  • Kbd
  • Label
  • Native Select
  • Scroll Area
  • SelectNEW
  • Separator
  • SwitchNEW
  • Table
  • Tabs
  • Textarea
  • TooltipNEW

Tooltip

Previous

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 tooltip
npx sprawlify@latest add tooltip
yarn sprawlify@latest add tooltip
bunx --bun sprawlify@latest add tooltip

Install the following dependencies:

pnpm add @sprawlify/primitives @sprawlify/svelte
npm install @sprawlify/primitives @sprawlify/svelte
yarn add @sprawlify/primitives @sprawlify/svelte
bun add @sprawlify/primitives @sprawlify/svelte

Add the following files to your project:

tooltip/index.ts
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";5
tooltip/tooltip-content.svelte
1<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>
tooltip/tooltip-provider.svelte
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>
tooltip/tooltip-trigger.svelte
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>
tooltip/tooltip.svelte
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 {

On This Page

InstallationUsageExamplesDisabled ButtonPlacementWith Keyboard Shortcut

Get PRO

Need premium blocks and templates? Upgrade to PRO and get access.