`는 `aria-haspopup="dialog"` 속성을 설정하고, Help Bubble의 `open` 상태에 따라 `aria-expanded` 속성을 자동으로 설정합니다. 이 속성은 스크린 리더와 같은 보조 기술에 유용합니다.
```tsx
import { VStack } from "@seed-design/react";
import { useState } from "react";
import { HelpBubbleTrigger } from "seed-design/ui/help-bubble";
import { Switch } from "seed-design/ui/switch";
import { ActionButton } from "seed-design/ui/action-button";
export default function () {
const [isControlledHelpBubbleOpen, setIsControlledHelpBubbleOpen] = useState(true);
return (
토글
토글
);
}
```
### Anchor
`HelpBubbleAnchor`의 `children`은 Help Bubble이 위치를 잡는 데에만 사용되며 클릭으로 열고 닫는 동작은 없습니다.
`defaultOpen`과 `showCloseButton`을 사용하여 적절하게 열리고 닫히도록 하거나, `open` prop을 controlled하게 사용하여 열리고 닫힌 상태를 직접 관리할 수 있습니다.
```tsx
import { VStack } from "@seed-design/react";
import { useState } from "react";
import { Avatar } from "seed-design/ui/avatar";
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
import { Switch } from "seed-design/ui/switch";
export default function () {
const [isControlledHelpBubbleOpen, setIsControlledHelpBubbleOpen] = useState(true);
return (
);
}
```
### Close On Interact Outside
`closeOnInteractOutside` prop을 `false`로 설정하면 Help Bubble 및 `HelpBubbleTrigger`, `HelpBubbleAnchor` 외부를 클릭해도 Help Bubble이 닫히지 않습니다. 기본값은 `true`입니다.
```tsx
import { VStack } from "@seed-design/react";
import { HelpBubbleTrigger } from "seed-design/ui/help-bubble";
import { ActionButton } from "seed-design/ui/action-button";
export default function () {
return (
토글
토글
);
}
```
### Placement
```tsx
import { IconSparkle2 } from "@karrotmarket/react-multicolor-icon";
import { Box, Icon } from "@seed-design/react";
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
export default function HelpBubblePreview() {
return (
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
);
}
```
### Flip
```tsx
import { IconSparkle2 } from "@karrotmarket/react-multicolor-icon";
import { Icon } from "@seed-design/react";
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
export default function HelpBubbleFlip() {
return (
} />
);
}
```
### Close Button
```tsx
import { ActionButton } from "seed-design/ui/action-button";
import { HelpBubbleTrigger } from "seed-design/ui/help-bubble";
export default function HelpBubbleCloseButton() {
return (
토글
);
}
```
### Description
`description`을 사용하여 `title` 아래에 설명을 추가할 수 있습니다.
```tsx
import { IconSparkle2 } from "@karrotmarket/react-multicolor-icon";
import { Icon } from "@seed-design/react";
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
export default function HelpBubbleDescription() {
return (
} />
);
}
```
### Title Only
```tsx
import { IconSparkle2 } from "@karrotmarket/react-multicolor-icon";
import { Icon } from "@seed-design/react";
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
export default function HelpBubbleTitleOnly() {
return (
} />
);
}
```
### Setting Width Manually
`content`에는 기본 최대 너비가 지정되어 있습니다. `contentProps`에 `maxWidth`를 지정하면 이 기본값을 덮어쓰고, `none`을 지정하면 최대 너비 제한이 사라집니다. 인라인 스타일로 `width`를 함께 지정할 수도 있으며, 이때 `maxWidth`가 `width`보다 좁으면 `maxWidth`가 적용됩니다.
```tsx
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
import { SegmentedControl, SegmentedControlItem } from "seed-design/ui/segmented-control";
import { Text, VStack } from "@seed-design/react";
import { useState } from "react";
const WIDTH_OPTIONS = ["200px", "300px", "unset"] as const;
const MAX_WIDTH_OPTIONS = ["200px", "400px", "none"] as const;
export default function HelpBubbleWidth() {
const [width, setWidth] = useState<(typeof WIDTH_OPTIONS)[number]>("unset");
const [maxWidth, setMaxWidth] = useState<(typeof MAX_WIDTH_OPTIONS)[number]>("400px");
return (
width
setWidth(value as (typeof WIDTH_OPTIONS)[number])}
>
{WIDTH_OPTIONS.map((option) => (
{option}
))}
maxWidth
setMaxWidth(value as (typeof MAX_WIDTH_OPTIONS)[number])}
>
{MAX_WIDTH_OPTIONS.map((option) => (
{option}
))}
);
}
```
### Line Breaks
```tsx
import { IconSparkle2 } from "@karrotmarket/react-multicolor-icon";
import { Icon } from "@seed-design/react";
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
import { HStack } from "@seed-design/react";
export default function HelpBubbleLineBreaks() {
return (
Breaking
lines
using
`<br />`s
>
}
>
} />
} />
);
}
```
### `z-index` Offset
```tsx
import { Flex, HStack, VStack } from "@seed-design/react";
import { useState } from "react";
import { HelpBubbleAnchor } from "seed-design/ui/help-bubble";
import { Slider } from "seed-design/ui/slider";
import { Avatar } from "seed-design/ui/avatar";
export default function HelpBubbleZIndexOffset() {
const [zIndexOffset, setZIndexOffset] = useState(5);
return (
{Array.from({ length: 5 }, (_, i) => (
{i + 100}
))}
setZIndexOffset(value)}
markers={[0, 5]}
getAriaLabel={() => "zIndexOffset"}
hideValueIndicator
/>
);
}
```