Component
Tooltip
A hint on hover that brings its own provider.
stablev0.2.0 Chromium 103 ui-scale safe
Install
Copies the file into
components/ds/, with its registry dependencies and npm packages. See Installation for the one-time setup.bunx shadcn@3 add @fastrp/tooltipExamples
Default
API
<Tooltip />Takes the props of what it wrapsBrings its own provider, so a tooltip works anywhere without an app-level `TooltipProvider` — the missing provider is the error every copy of the shadcn tooltip eventually throws. The inner provider wins over any outer one, so set a different delay per tooltip with `delayDuration`.
Dependencies
npm
- @radix-ui/react-tooltip@^1.1.6
Registry
- @fastrp/utils
Source
components/ds/tooltip.tsxShowHide
'use client';
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
import type * as React from 'react';
import { cn } from '@/lib/utils';
// @fast-ds [email protected]
function TooltipProvider({
delayDuration = 200,
...props
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
return <TooltipPrimitive.Provider delayDuration={delayDuration} {...props} />;
}
/**
* Brings its own provider, so a tooltip works anywhere without an app-level `TooltipProvider` —
* the missing provider is the error every copy of the shadcn tooltip eventually throws. The inner
* provider wins over any outer one, so set a different delay per tooltip with `delayDuration`.
*/
function Tooltip(props: React.ComponentProps<typeof TooltipPrimitive.Root>) {
return (
<TooltipProvider>
<TooltipPrimitive.Root data-slot="tooltip" {...props} />
</TooltipProvider>
);
}
const TooltipTrigger = TooltipPrimitive.Trigger;
function TooltipContent({
className,
sideOffset = 6,
children,
...props
}: React.ComponentProps<typeof TooltipPrimitive.Content>) {
return (
<TooltipPrimitive.Portal>
<TooltipPrimitive.Content
data-slot="tooltip-content"
sideOffset={sideOffset}
className={cn(
'z-tooltip max-w-xs origin-[var(--radix-tooltip-content-transform-origin)] rounded-md bg-foreground px-2.5 py-1.5 text-xs font-medium leading-snug text-background shadow-xl animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 data-[side=top]:slide-in-from-bottom-1',
className,
)}
{...props}
>
{children}
</TooltipPrimitive.Content>
</TooltipPrimitive.Portal>
);
}
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };