Tooltip

요소에 대한 추가 정보를 제공하는 툴팁 컴포넌트입니다
'use client';

import { Button, Tooltip } from '@vapor-ui/core';

export default function DefaultTooltip() {
    return (
        <Tooltip.Root>
            <Tooltip.Trigger render={<Button>툴팁 보기</Button>} />
            <Tooltip.Portal>
                <Tooltip.Content>유용한 정보를 제공하는 툴팁입니다.</Tooltip.Content>
            </Tooltip.Portal>
        </Tooltip.Root>
    );
}

Property


Positioning

Tooltip의 표시 위치를 설정할 수 있습니다.

import { Button, Tooltip } from '@vapor-ui/core';

export default function TooltipPositioning() {
    return (
        <div className="flex flex-wrap gap-4">
            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>상단</Button>} />
                <Tooltip.Portal>
                    <Tooltip.Positioner side="top">
                        <Tooltip.Popup>상단에 표시되는 툴팁</Tooltip.Popup>
                    </Tooltip.Positioner>
                </Tooltip.Portal>
            </Tooltip.Root>

            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>우측</Button>} />
                <Tooltip.Portal>
                    <Tooltip.Positioner side="right">
                        <Tooltip.Popup>우측에 표시되는 툴팁</Tooltip.Popup>
                    </Tooltip.Positioner>
                </Tooltip.Portal>
            </Tooltip.Root>

            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>하단</Button>} />
                <Tooltip.Portal>
                    <Tooltip.Positioner side="bottom">
                        <Tooltip.Popup>하단에 표시되는 툴팁</Tooltip.Popup>
                    </Tooltip.Positioner>
                </Tooltip.Portal>
            </Tooltip.Root>

            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>좌측</Button>} />
                <Tooltip.Portal>
                    <Tooltip.Positioner side="left">
                        <Tooltip.Popup>좌측에 표시되는 툴팁</Tooltip.Popup>
                    </Tooltip.Positioner>
                </Tooltip.Portal>
            </Tooltip.Root>
        </div>
    );
}

Alignment

Tooltip의 정렬 위치를 조정할 수 있습니다.

import { Button, Tooltip } from '@vapor-ui/core';

export default function TooltipAlignment() {
    return (
        <div className="space-y-8">
            <div>
                <h4 className="text-sm font-medium mb-4">하단 정렬</h4>
                <div className="flex gap-4">
                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>시작</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner side="bottom" align="start">
                                <Tooltip.Popup>시작 위치에 정렬된 툴팁</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>중앙</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner side="bottom" align="center">
                                <Tooltip.Popup>중앙에 정렬된 툴팁</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button></Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner side="bottom" align="end">
                                <Tooltip.Popup>끝 위치에 정렬된 툴팁</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>
                </div>
            </div>

            <div>
                <h4 className="text-sm font-medium mb-4">우측 정렬</h4>
                <div className="flex flex-col gap-4">
                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>시작</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner side="right" align="start">
                                <Tooltip.Popup>상단 시작 위치</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>중앙</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner side="right" align="center">
                                <Tooltip.Popup>중앙 위치</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button></Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner side="right" align="end">
                                <Tooltip.Popup>하단 끝 위치</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>
                </div>
            </div>
        </div>
    );
}

Delay

Tooltip이 표시되는 지연 시간을 조정할 수 있습니다.

import { Button, Tooltip } from '@vapor-ui/core';

export default function TooltipDelay() {
    return (
        <div className="flex gap-4">
            <Tooltip.Root delay={0}>
                <Tooltip.Trigger render={<Button>즉시 표시</Button>} />
                <Tooltip.Content>지연 없이 바로 표시되는 툴팁</Tooltip.Content>
            </Tooltip.Root>

            <Tooltip.Root delay={500}>
                <Tooltip.Trigger render={<Button>0.5초 지연</Button>} />
                <Tooltip.Content>0.5초 후에 표시되는 툴팁</Tooltip.Content>
            </Tooltip.Root>

            <Tooltip.Root delay={1000}>
                <Tooltip.Trigger render={<Button>1초 지연</Button>} />
                <Tooltip.Content>1초 후에 표시되는 툴팁</Tooltip.Content>
            </Tooltip.Root>

            <Tooltip.Root delay={2000}>
                <Tooltip.Trigger render={<Button>2초 지연</Button>} />
                <Tooltip.Content>2초 후에 표시되는 툴팁</Tooltip.Content>
            </Tooltip.Root>
        </div>
    );
}

Offset

Tooltip의 거리와 정렬 오프셋을 조정할 수 있습니다.

import { Button, Tooltip } from '@vapor-ui/core';

export default function TooltipOffset() {
    return (
        <div className="space-y-8">
            <div>
                <h4 className="text-sm font-medium mb-4">Side Offset (거리 조정)</h4>
                <div className="flex gap-4">
                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>0px</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner sideOffset={0}>
                                <Tooltip.Popup>거리 0px</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>10px</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner sideOffset={10}>
                                <Tooltip.Popup>거리 10px</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>20px</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner sideOffset={20}>
                                <Tooltip.Popup>거리 20px</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>
                </div>
            </div>

            <div>
                <h4 className="text-sm font-medium mb-4">Align Offset (정렬 오프셋)</h4>
                <div className="flex gap-4">
                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>-20px</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner alignOffset={-20}>
                                <Tooltip.Popup>정렬 오프셋 -20px</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>0px</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner alignOffset={0}>
                                <Tooltip.Popup>정렬 오프셋 0px</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>

                    <Tooltip.Root>
                        <Tooltip.Trigger render={<Button>+20px</Button>} />
                        <Tooltip.Portal>
                            <Tooltip.Positioner alignOffset={20}>
                                <Tooltip.Popup>정렬 오프셋 +20px</Tooltip.Popup>
                            </Tooltip.Positioner>
                        </Tooltip.Portal>
                    </Tooltip.Root>
                </div>
            </div>
        </div>
    );
}

Examples


Content Variations

다양한 형태의 툴팁 내용을 표시할 수 있습니다.

'use client';

import { Button, Tooltip } from '@vapor-ui/core';

export default function TooltipContent() {
    return (
        <div className="flex flex-wrap gap-4">
            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>간단한 텍스트</Button>} />
                <Tooltip.Content>간단한 툴팁 메시지</Tooltip.Content>
            </Tooltip.Root>

            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>긴 텍스트</Button>} />
                <Tooltip.Content>
                    이것은 더 긴 툴팁 메시지입니다. 여러 줄에 걸쳐 표시될 수 있으며 유용한 정보를
                    제공합니다.
                </Tooltip.Content>
            </Tooltip.Root>

            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>포맷된 텍스트</Button>} />
                <Tooltip.Content>
                    <div className="space-y-1">
                        <div className="font-bold">제목</div>
                        <div className="text-sm">설명 텍스트가 여기에 있습니다.</div>
                        <div className="text-xs text-gray-600">추가 정보</div>
                    </div>
                </Tooltip.Content>
            </Tooltip.Root>

            <Tooltip.Root>
                <Tooltip.Trigger render={<Button>키보드 단축키</Button>} />
                <Tooltip.Content>
                    <div className="flex items-center gap-2">
                        <span>저장하기</span>
                        <kbd className="px-1.5 py-0.5 text-xs bg-gray-200 rounded">Ctrl+S</kbd>
                    </div>
                </Tooltip.Content>
            </Tooltip.Root>
        </div>
    );
}

Props Table


Tooltip.Root

Tooltip의 루트 컨테이너 컴포넌트입니다. 위치 관련 props와 Base UI Tooltip.Root의 모든 props를 지원합니다.

PropDefaultType
openOnClick?
false
boolean
openOnHover?
true
boolean
openOnFocus?
true
boolean
delay?
0
number
closeDelay?
0
number
open?
-
boolean
defaultOpen?
false
boolean
onOpenChange?
-
function
disabled?
false
boolean
side?
top
toprightbottomleft
align?
center
startcenterend
sideOffset?
6
number
alignOffset?
0
number
anchor?
null
ElementVirtualElementnull
arrowPadding?
4
number
collisionAvoidance?
{ align: 'none' }
booleanobject
collisionBoundary?
clippingAncestors
ElementArray<Element>string
collisionPadding?
0
numberobject
positionMethod?
absolute
absolutefixed
sticky?
partial
partialalways
trackAnchor?
true
boolean

Tooltip.Trigger

Tooltip을 트리거하는 컴포넌트입니다.

PropDefaultType
render?
-
ReactElementfunction

Tooltip.Portal

Tooltip 콘텐츠를 DOM 트리의 다른 위치로 렌더링하는 컴포넌트입니다.

PropDefaultType
container?
document.body
Elementfunction
keepMounted?
false
boolean

Tooltip.Content

Tooltip의 실제 콘텐츠를 포함하는 컴포넌트입니다. 내장된 Positioner, Popup, Arrow를 포함하며, 자동으로 화살표가 포함되어 위치에 따라 화살표 방향이 조정됩니다.

PropDefaultType
className?
-
string
children?
-
ReactNode
style?
-
CSSProperties
onPointerEnter?
-
function
onPointerLeave?
-
function
onEscapeKeyDown?
-
function
onInteractOutside?
-
function