# Help Bubble Tooltip URL: /react/components/help-bubble-tooltip Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/help-bubble-tooltip.mdx 포인터를 올리거나 포커스했을 때 보조 정보를 보여주는 툴팁 형태의 Help Bubble입니다. 사용 가능 버전: @seed-design/react@2.0.0, @seed-design/css@2.0.0 ## Preview ```tsx import { IconQuestionmarkCircleFill } from "@karrotmarket/react-monochrome-icon"; import { Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipPreview() { return ( } /> ); } ``` ## Installation - npm: npx @seed-design/cli@latest add ui:help-bubble-tooltip - pnpm: pnpm dlx @seed-design/cli@latest add ui:help-bubble-tooltip - yarn: yarn dlx @seed-design/cli@latest add ui:help-bubble-tooltip - bun: bun x @seed-design/cli@latest add ui:help-bubble-tooltip ## Props ### `HelpBubbleTooltipTrigger` ### `HelpBubbleTooltipDelayGroup` ## Examples ### Hover & Focus `HelpBubbleTooltipTrigger`의 `children`에 포인터를 올리거나(hover) 키보드로 포커스(focus)하면 Help Bubble Tooltip을 엽니다. `children`으로는 `button` 등 포커스 가능한 요소를 넣어야 합니다. Help Bubble Tooltip은 Close Button이나 내부 인터랙션 요소를 포함하지 않습니다. 클릭으로 열고 닫거나([Toggletip](https://inclusive-components.design/tooltips-toggletips/)), Close Button이 필요하다면 [Help Bubble](/react/components/help-bubble)을 사용하세요. ```tsx import { IconExclamationmarkCircleFill } from "@karrotmarket/react-monochrome-icon"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; import { Icon } from "@seed-design/react"; export default function HelpBubbleHover() { return ( } /> ); } ``` ### Delay `openDelay`로 포인터가 올라온 뒤 열리기까지, `closeDelay`로 포인터가 벗어난 뒤 닫히기까지의 시간을 조절합니다. 기본값은 각각 `200ms`, `100ms`이며, focus로 열 때는 두 delay 모두 적용되지 않습니다. ```tsx import { IconClockFill } from "@karrotmarket/react-monochrome-icon"; import { HStack, Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipDelay() { return ( } /> } /> ); } ``` ### Delay Group 같은 `HelpBubbleTooltipDelayGroup`에 속한 Help Bubble Trigger 하나가 열린 뒤에는, 같은 그룹의 다른 트리거로 포인터를 옮길 때 `openDelay` 없이 즉시 열리며, `HelpBubbleTooltipDelayGroup`에 `openDelay` 또는 `closeDelay`를 지정하여 그룹 내 트리거들의 지연을 일괄적으로 조절할 수 있습니다. 그룹 내 `HelpBubbleTooltipTrigger`에 `openDelay` 또는 `closeDelay`를 직접 설정하는 경우 해당 값이 그룹 delay보다 우선합니다. ```tsx import { IconBellFill, IconMagnifyingglassFill, IconPencilFill, IconPersonCircleFill, } from "@karrotmarket/react-monochrome-icon"; import { HStack, PrefixIcon } from "@seed-design/react"; import { HelpBubbleTooltipDelayGroup, HelpBubbleTooltipTrigger, } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipDelayGroupExample() { return ( } /> 검색 } /> 글쓰기 } /> 알림 } /> 프로필 ); } ``` ### Keep Open on Content Hover 기본적으로 포인터를 Help Bubble Tooltip 위로 옮기면 트리거에서 벗어난 것으로 간주되어 닫힙니다. `keepOpenOnContentHover`를 주면 Help Bubble Tooltip 위로 포인터를 옮겨도 닫히지 않고, Help Bubble Tooltip 안의 텍스트를 드래그해 선택하는 등 내용과 상호작용할 수 있습니다. ```tsx import { IconEyeFill } from "@karrotmarket/react-monochrome-icon"; import { HStack, Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipKeepOpenOnContentHover() { return ( } /> } /> ); } ``` ### Placement ```tsx import { IconStarFill } from "@karrotmarket/react-monochrome-icon"; import { Box, Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipPlacement() { return (
} /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } />
); } ``` ### Flip ```tsx import { IconHeartFill } from "@karrotmarket/react-monochrome-icon"; import { Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipFlip() { return ( } /> ); } ``` ### Description `description`을 사용하여 `title` 아래에 설명을 추가할 수 있습니다. ```tsx import { IconBookmarkFill } from "@karrotmarket/react-monochrome-icon"; import { Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipDescription() { return ( } /> ); } ``` ### Title Only ```tsx import { IconGiftFill } from "@karrotmarket/react-monochrome-icon"; import { Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipTitleOnly() { return ( } /> ); } ``` ### Setting Width Manually `content`에는 기본 최대 너비가 지정되어 있습니다. `contentProps`에 `maxWidth`를 지정하면 이 기본값을 덮어쓰고, `none`을 지정하면 최대 너비 제한이 사라집니다. ```tsx import { HStack } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; const TITLE = "Pariatur aliqua commodo eu Lorem minim anim. Lorem ipsum voluptate eu duis eiusmod consequat."; const MAX_WIDTHS = ["200px", "400px", "none"] as const; export default function HelpBubbleTooltipWidth() { return ( {MAX_WIDTHS.map((maxWidth) => ( {maxWidth} ))} ); } ``` ### Line Breaks ```tsx import { IconFlagFill } from "@karrotmarket/react-monochrome-icon"; import { HStack, Icon } from "@seed-design/react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; export default function HelpBubbleTooltipLineBreaks() { return ( Breaking
lines
using
`<br />`s } > } />
} />
); } ``` ### `z-index` Offset ```tsx import { IconGearFill } from "@karrotmarket/react-monochrome-icon"; import { Flex, HStack, Icon, VStack } from "@seed-design/react"; import { useState } from "react"; import { HelpBubbleTooltipTrigger } from "seed-design/ui/help-bubble-tooltip"; import { ActionButton } from "seed-design/ui/action-button"; import { Slider } from "seed-design/ui/slider"; export default function HelpBubbleTooltipZIndexOffset() { const [zIndexOffset, setZIndexOffset] = useState(5); return ( {Array.from({ length: 5 }, (_, i) => ( {i + 100} ))} } /> setZIndexOffset(value)} markers={[0, 5]} getAriaLabel={() => "zIndexOffset"} hideValueIndicator /> ); } ``` ### Accessibility #### Icon-only Button Help Bubble Tooltip의 내용은 트리거의 설명으로서 작동하며, 트리거의 이름을 대신하는 것이 아닙니다. Help Bubble Tooltip 사용 여부와 무관하게, 텍스트 없이 아이콘만 있는 버튼에는 항상 `aria-label`을 지정하세요. ```tsx {/* iconOnly ActionButton에 aria-label을 지정합니다. */} {/* [!code highlight] */} } /> ``` #### Disabled Triggers 기본적으로 `