본문으로 건너뛰기

HoverCard

포인터가 어떤 대상 위에 머무를 때 열려, 그 너머에 있는 것을 미리 보여주는 카드입니다. 멘션 뒤의 사람, 링크 뒤의 저장소, id 뒤의 배포.

tsx
import { HoverCard, TextLink } from 'neba';

<HoverCard trigger={<TextLink href="/people/nadiarowan">@nadiarowan</TextLink>} title="Nadia Rowan">
  Maintainer · 214 commits
</HoverCard>;

Props

Prop타입기본값설명
trigger * ReactElement카드가 매달리는 요소. ref를 받고 props를 펼치는 요소 하나여야 하며, 카드는 감싸지 않고 그 요소에 병합됩니다
titleReactNode카드의 제목
descriptionReactNode제목 아래 한 줄
childrenReactNode카드의 본문
size공통'xs' | 'sm' | 'md' | 'lg' | 'xl''md'타입 스케일과 여백, 그리고 카드가 넓어질 수 있는 한계까지 함께 정합니다
color공통'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info''primary'의미론적 색 역할. 시트는 물들지 않으므로 가장자리에만 나타납니다
density공통'default' | 'compact''default'카드 안쪽 여백만 바꿉니다
side공통'top' | 'right' | 'bottom' | 'left''bottom'카드가 나타나는 trigger의 모서리. 공간이 없으면 반대편으로 뒤집힙니다
align공통'start' | 'center' | 'end''center'그 모서리 위에서의 위치
sideOffsetnumber6trigger와의 거리 (px)
alignOffsetnumber0그 모서리를 따라 미는 양 (px)
arrowbooleanfalsetrigger를 가리키는 꼭지를 그립니다. 반투명한 표면의 꼭지는 흐려진 배경을 함께 가져갈 수 없어 기본은 꺼짐입니다
openboolean열림 여부. onOpenChange와 함께 쓰면 controlled 컴포넌트가 됩니다
defaultOpenboolean열린 채로 시작할지 여부 (uncontrolled)
onOpenChange(open: boolean) => void열리고 닫힐 때마다 호출됩니다
delaynumber카드가 열리기까지 포인터가 머물러야 하는 시간 (ms)
closeDelaynumber포인터가 떠난 뒤 카드가 남아 있는 시간 (ms). trigger와 카드 사이의 빈틈을 건널 수 있게 합니다
widthnumber | stringsize가 정한 최대 너비를 덮어씁니다. 숫자는 px입니다

<div>의 기본 속성은 popup으로 전달됩니다. 컴포넌트가 직접 소유하는 color, title, children만 예외입니다. Popover와 같은 이유로 variantelevation도 없습니다. hover를 거쳐야 나타나는 표면은 이미 자기 존재를 주장한 것이고, 페이지 위에 떠 있는 카드를 평평하게 눕힐 수는 없습니다.

이 컴포넌트는 라이브러리의 다른 두 popup 사이에 있습니다. Tooltip은 한 줄짜리 라벨이고 포인터가 그 안까지 닿지 않습니다. Popover는 누름으로써 요청된 패널이라 폼도 담을 수 있습니다. HoverCard는 tooltip처럼 요청되지 않았고 popover처럼 닿을 수 있습니다. 포인터가 안으로 들어올 수 있고, 안에 있는 링크를 따라갈 수 있습니다.

예시

trigger

trigger는 children이 아니라 요소이며, 카드는 그 요소에 병합됩니다. 감싸는 요소가 없으므로 레이아웃은 그대로이고 링크는 링크로 남습니다. 보통 TextLinkAvatar입니다.

delay · closeDelay

delay는 카드가 열리기까지 포인터가 머물러야 하는 시간이고, closeDelay는 포인터가 떠난 뒤 카드가 남아 있는 시간입니다. 후자가 trigger와 카드 사이의 빈틈을 건널 수 있게 만듭니다.

side · align · arrow

side는 카드가 나타나는 trigger의 모서리이고 공간이 없으면 반대편으로 뒤집힙니다. align은 그 모서리 위에서의 위치입니다. arrow는 꼭지를 그리며, 반투명한 표면의 꼭지는 흐려진 배경을 함께 가져갈 수 없기 때문에 기본값은 꺼짐입니다.

size

size는 타입 스케일과 안쪽 여백, 그리고 카드가 넓어질 수 있는 한계를 정합니다. width는 마지막 항목만 따로 덮어씁니다.

접근성

  • 카드 안의 내용은 trigger가 향하는 페이지에도 반드시 존재해야 합니다. hover가 없는 키보드, 포인터가 없는 터치스크린, 스크린 리더는 모두 그 경로로 도달하므로 이 카드가 유일한 통로가 되어서는 안 됩니다.
  • 포인터로 카드 안까지 들어갈 수 있어 안의 링크를 따라갈 수 있고, 포인터가 안에 있는 동안에는 열린 채로 유지됩니다.
  • Escape로 닫힙니다.

Released under the MIT License