Skip to content

Commit 7aef756

Browse files
committed
Add custom Tooltip to stories
1 parent 305e958 commit 7aef756

2 files changed

Lines changed: 25 additions & 65 deletions

File tree

src/components/tooltip/index.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,25 @@ type TooltipProps = React.ComponentProps<typeof BaseTooltip> & {
55
title: React.ReactNode
66
} & Pick<React.ComponentProps<typeof TooltipContent>, 'side' | 'sideOffset' | 'align'>
77

8+
const TooltipContentNoArrow = ({
9+
children,
10+
sideOffset = 8, // Needed when arrow is hidden
11+
...props
12+
}: React.ComponentProps<typeof TooltipContent>) => {
13+
return (
14+
<TooltipContent className="[&>span]:hidden" sideOffset={sideOffset} {...props}>
15+
{children}
16+
</TooltipContent>
17+
)
18+
}
19+
820
export const Tooltip = ({ title, children, side, sideOffset, align, ...props }: TooltipProps) => {
921
return (
1022
<BaseTooltip {...props}>
1123
<TooltipTrigger>{children}</TooltipTrigger>
12-
<TooltipContent side={side} sideOffset={sideOffset} align={align}>
24+
<TooltipContentNoArrow side={side} sideOffset={sideOffset} align={align}>
1325
{title}
14-
</TooltipContent>
26+
</TooltipContentNoArrow>
1527
</BaseTooltip>
1628
)
1729
}
Lines changed: 11 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { Meta, StoryObj } from '@storybook/react-vite'
2-
import { Tooltip, TooltipContent, TooltipTrigger } from '../../components/ui/tooltip.tsx'
2+
import { Tooltip } from '../../components/tooltip'
33
import { Button } from '../../components/ui/button.tsx'
44
import { expect, within } from 'storybook/test'
55

@@ -21,8 +21,14 @@ const meta: Meta<typeof Tooltip> = {
2121
},
2222
tags: ['autodocs'],
2323
argTypes: {
24-
defaultOpen: {
25-
control: 'boolean',
24+
title: {
25+
control: 'text',
26+
description: 'The content of the tooltip',
27+
},
28+
side: {
29+
control: { type: 'radio' },
30+
options: ['top', 'right', 'bottom', 'left'],
31+
description: 'The preferred side of the trigger to render against',
2632
},
2733
open: {
2834
control: 'boolean',
@@ -38,70 +44,12 @@ type Story = StoryObj<typeof meta>
3844

3945
export const Default: Story = {
4046
args: {
41-
children: (
42-
<>
43-
<TooltipTrigger>
44-
<Button variant="outline">Hover me</Button>
45-
</TooltipTrigger>
46-
<TooltipContent>
47-
<p>Tooltip content</p>
48-
</TooltipContent>
49-
</>
50-
),
47+
title: 'Tooltip content',
48+
children: <Button variant="outline">Hover me</Button>,
5149
},
5250
play: async ({ canvasElement }) => {
5351
const canvas = within(canvasElement)
5452
const button = canvas.getAllByRole('button', { name: 'Hover me' })[0]
5553
await expect(button).toBeInTheDocument()
5654
},
5755
}
58-
59-
export const Variants: Story = {
60-
args: {
61-
children: (
62-
<div className="flex flex-col items-center gap-4">
63-
<div className="flex justify-center gap-4">
64-
<Tooltip>
65-
<TooltipTrigger>
66-
<Button variant="outline">Top</Button>
67-
</TooltipTrigger>
68-
<TooltipContent side="top">
69-
<p>Tooltip on top</p>
70-
</TooltipContent>
71-
</Tooltip>
72-
</div>
73-
74-
<div className="flex justify-between gap-16">
75-
<Tooltip>
76-
<TooltipTrigger>
77-
<Button variant="outline">Left</Button>
78-
</TooltipTrigger>
79-
<TooltipContent side="left">
80-
<p>Tooltip on left</p>
81-
</TooltipContent>
82-
</Tooltip>
83-
84-
<Tooltip>
85-
<TooltipTrigger>
86-
<Button variant="outline">Right</Button>
87-
</TooltipTrigger>
88-
<TooltipContent side="right">
89-
<p>Tooltip on right</p>
90-
</TooltipContent>
91-
</Tooltip>
92-
</div>
93-
94-
<div className="flex justify-center gap-4">
95-
<Tooltip>
96-
<TooltipTrigger>
97-
<Button variant="outline">Bottom</Button>
98-
</TooltipTrigger>
99-
<TooltipContent side="bottom">
100-
<p>Tooltip on bottom</p>
101-
</TooltipContent>
102-
</Tooltip>
103-
</div>
104-
</div>
105-
),
106-
},
107-
}

0 commit comments

Comments
 (0)