@olundot/ui · Surfaces
Tooltip
아이콘 전용 컨트롤에 이름을 붙이거나 작은 인터페이스 요소를 명확히 하는 간략한 맥락 도움말 서피스입니다.
- 필수 래퍼
- TooltipProvider — delayDuration(기본 0ms) 전역 관리. 앱 루트 또는 개별 래핑
- 슬롯
- TooltipProvider · Tooltip · TooltipTrigger · TooltipContent
- Trigger 대상
- 이름 없는 icon-only 컨트롤에만 부착합니다. 명시적 label이 있는 button에는 부착하지 않습니다(중복).
- 콘텐츠
- 텍스트 전용 · 짧게 · 비인터랙티브 — 링크/버튼/폼 불가
- 반전 서피스
- `foreground` bubble과 `background` text로 페이지 표면과 대비를 만듭니다.
- 모바일 클릭
- 데스크톱 hover/focus와 모바일 click/touch를 모두 기본 지원합니다. 데스크톱 hover-only로 제한하려면 `enableTouch={false}`를 적용합니다.
- 접근성 연결
- Radix Tooltip이 `role="tooltip"` + `aria-describedby`를 자동 연결합니다. 키보드 focus로 trigger, Esc로 dismiss됩니다. HTML `title` 속성은 사용하지 않습니다.
기본 (Label)
아이콘 전용 버튼에 짧은 label 제공코드 보기tsx
import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "@olundot/ui";
import { IconButton } from "@olundot/ui";
import { Info, BellRing } from "lucide-react";
// Tooltip은 아이콘 전용 컨트롤의 보조 label에 사용합니다.
// 이미 label이 보이는 버튼에는 중복으로 붙이지 않습니다.
// TooltipProvider는 delayDuration 전역 관리 컨텍스트.
export function TooltipBasic() {
return (
<TooltipProvider delayDuration={300}>
<div style={{ display: "flex", gap: "4px", flexWrap: "wrap" }}>
<Tooltip>
<TooltipTrigger asChild>
<IconButton aria-label="응시 전 점검 사항" variant="ghost" size="md" icon={Info} />
</TooltipTrigger>
<TooltipContent>응시 전 점검 사항</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<IconButton aria-label="알림 설정" variant="ghost" size="md" icon={BellRing} />
</TooltipTrigger>
<TooltipContent>알림 설정</TooltipContent>
</Tooltip>
</div>
</TooltipProvider>
);
}설명형
도움말 아이콘에 한 문장 설명 제공코드 보기tsx
import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "@olundot/ui";
import { IconButton } from "@olundot/ui";
import { HelpCircle } from "lucide-react";
// 설명형 Tooltip: 한 문장 도움말을 제공합니다.
// HelpCircle('?') icon — '더 알아보기' 의도에 사용.
export function TooltipDescription() {
return (
<TooltipProvider delayDuration={300}>
<Tooltip>
<TooltipTrigger asChild>
<IconButton aria-label="추가 정보" variant="ghost" size="md" icon={HelpCircle} />
</TooltipTrigger>
<TooltipContent>응시 전 안정적인 네트워크 환경을 확인하세요</TooltipContent>
</Tooltip>
</TooltipProvider>
);
}단축키 힌트
설정 버튼에 단축키 힌트 제공코드 보기tsx
import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "@olundot/ui";
import { IconButton } from "@olundot/ui";
import { Settings } from "lucide-react";
// 단축키 힌트는 Tooltip copy 안에 짧게 포함합니다.
export function TooltipKeyboard() {
return (
<TooltipProvider delayDuration={300}>
<Tooltip>
<TooltipTrigger asChild>
<IconButton aria-label="설정" variant="ghost" size="md" icon={Settings} />
</TooltipTrigger>
<TooltipContent>설정 열기 (Cmd+,)</TooltipContent>
</Tooltip>
</TooltipProvider>
);
}비활성 사유
비활성 아이콘 버튼에 사용 불가 사유 제공코드 보기tsx
import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from "@olundot/ui";
import { IconButton } from "@olundot/ui";
import { Info } from "lucide-react";
// 비활성 컨트롤 Tooltip: 비활성 상태의 이유를 보충합니다.
// disabled 상태에서도 Tooltip은 hover/focus 표시 — Radix 자동 처리.
export function TooltipDisabledControl() {
return (
<TooltipProvider delayDuration={300}>
<Tooltip>
<TooltipTrigger asChild>
<IconButton
aria-label="응시 기록 내보내기"
variant="ghost"
size="md"
icon={Info}
disabled
/>
</TooltipTrigger>
<TooltipContent>응시 종료 후 사용 가능합니다</TooltipContent>
</Tooltip>
</TooltipProvider>
);
}