@a2v2ai/uikit 0.0.36 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Alert/Alert.stories.tsx +121 -0
- package/Alert/Alert.tsx +71 -0
- package/AlertDialog/AlertDialog.stories.tsx +665 -0
- package/AlertDialog/AlertDialog.tsx +241 -0
- package/Avatar/Avatar.stories.tsx +128 -0
- package/Avatar/Avatar.tsx +71 -0
- package/Badge/Badge.stories.tsx +76 -0
- package/Badge/Badge.tsx +39 -0
- package/Breadcrumb/Breadcrumb.stories.tsx +231 -0
- package/Breadcrumb/Breadcrumb.tsx +114 -0
- package/Button/Button.stories.tsx +684 -0
- package/Button/Button.tsx +107 -0
- package/Calendar/Calendar.stories.tsx +291 -0
- package/Calendar/Calendar.tsx +246 -0
- package/Card/Card.stories.tsx +136 -0
- package/Card/Card.tsx +96 -0
- package/Carousel/Carousel.stories.tsx +256 -0
- package/Carousel/Carousel.tsx +301 -0
- package/ChatBubble/ChatBubble.stories.tsx +339 -0
- package/ChatBubble/ChatBubble.tsx +179 -0
- package/Checkbox/Checkbox.stories.tsx +137 -0
- package/Checkbox/Checkbox.tsx +53 -0
- package/DataTable/DataTable.stories.tsx +400 -0
- package/DataTable/DataTable.tsx +207 -0
- package/Drawer/Drawer.stories.tsx +721 -0
- package/Drawer/Drawer.tsx +201 -0
- package/DropdownMenu/DropdownMenu.stories.tsx +251 -0
- package/DropdownMenu/DropdownMenu.tsx +199 -0
- package/ErrorMessage/ErrorMessage.stories.tsx +159 -0
- package/ErrorMessage/ErrorMessage.tsx +55 -0
- package/Flex/Flex.stories.tsx +390 -0
- package/Flex/Flex.tsx +102 -0
- package/IconButton/IconButton.stories.tsx +566 -0
- package/IconButton/IconButton.tsx +95 -0
- package/Input/Input.stories.tsx +566 -0
- package/Input/Input.tsx +168 -0
- package/InputOTP/InputOTP.stories.tsx +246 -0
- package/InputOTP/InputOTP.tsx +127 -0
- package/Label/Label.stories.tsx +110 -0
- package/Label/Label.tsx +44 -0
- package/Loader/Loader.stories.tsx +170 -0
- package/Loader/Loader.tsx +62 -0
- package/Menubar/Menubar.stories.tsx +382 -0
- package/Menubar/Menubar.tsx +274 -0
- package/Menubar/index.ts +18 -0
- package/Pagination/Pagination.stories.tsx +196 -0
- package/Pagination/Pagination.tsx +122 -0
- package/Popover/Popover.stories.tsx +133 -0
- package/Popover/Popover.tsx +31 -0
- package/Progress/Progress.stories.tsx +146 -0
- package/Progress/Progress.tsx +67 -0
- package/RadioGroup/RadioGroup.stories.tsx +159 -0
- package/RadioGroup/RadioGroup.tsx +68 -0
- package/ScrollArea/ScrollArea.stories.tsx +136 -0
- package/ScrollArea/ScrollArea.tsx +46 -0
- package/Select/Select.stories.tsx +378 -0
- package/Select/Select.tsx +230 -0
- package/Separator/Separator.stories.tsx +110 -0
- package/Separator/Separator.tsx +29 -0
- package/Sidebar/Sidebar.stories.tsx +340 -0
- package/Sidebar/Sidebar.tsx +414 -0
- package/Sidebar/index.ts +28 -0
- package/Skeleton/Skeleton.stories.tsx +117 -0
- package/Skeleton/Skeleton.tsx +16 -0
- package/Slider/Slider.stories.tsx +216 -0
- package/Slider/Slider.tsx +29 -0
- package/Spinner/Spinner.stories.tsx +210 -0
- package/Spinner/Spinner.tsx +78 -0
- package/Switch/Switch.stories.tsx +146 -0
- package/Switch/Switch.tsx +59 -0
- package/Table/Table.stories.tsx +510 -0
- package/Table/Table.tsx +114 -0
- package/Tabs/Tabs.stories.tsx +197 -0
- package/Tabs/Tabs.tsx +74 -0
- package/Textarea/Textarea.stories.tsx +187 -0
- package/Textarea/Textarea.tsx +73 -0
- package/Toast/Toast.stories.tsx +285 -0
- package/Toast/Toast.tsx +59 -0
- package/Tooltip/Tooltip.stories.tsx +463 -0
- package/Tooltip/Tooltip.tsx +96 -0
- package/Typography/Typography.stories.tsx +425 -0
- package/Typography/Typography.tsx +106 -0
- package/helpers.ts +5 -0
- package/{icons.js → icons.ts} +1 -1
- package/index.ts +217 -0
- package/lib/typography-types.ts +223 -0
- package/lib/utils.ts +15 -0
- package/package.json +36 -33
- package/tsconfig.json +22 -0
- package/Alert/Alert.d.ts +0 -13
- package/Alert/Alert.js +0 -25
- package/AlertDialog/AlertDialog.d.ts +0 -43
- package/AlertDialog/AlertDialog.js +0 -71
- package/Avatar/Avatar.d.ts +0 -14
- package/Avatar/Avatar.js +0 -25
- package/Badge/Badge.d.ts +0 -11
- package/Badge/Badge.js +0 -23
- package/Breadcrumb/Breadcrumb.d.ts +0 -19
- package/Breadcrumb/Breadcrumb.js +0 -23
- package/Button/Button.d.ts +0 -23
- package/Button/Button.js +0 -52
- package/Calendar/Calendar.d.ts +0 -20
- package/Calendar/Calendar.js +0 -78
- package/Card/Card.d.ts +0 -16
- package/Card/Card.js +0 -28
- package/Carousel/Carousel.d.ts +0 -37
- package/Carousel/Carousel.js +0 -132
- package/ChatBubble/ChatBubble.d.ts +0 -33
- package/ChatBubble/ChatBubble.js +0 -107
- package/Checkbox/Checkbox.d.ts +0 -12
- package/Checkbox/Checkbox.js +0 -20
- package/DataTable/DataTable.d.ts +0 -35
- package/DataTable/DataTable.js +0 -51
- package/Dialog/Dialog.d.ts +0 -35
- package/Dialog/Dialog.js +0 -130
- package/Drawer/Drawer.d.ts +0 -33
- package/Drawer/Drawer.js +0 -55
- package/DropdownMenu/DropdownMenu.d.ts +0 -27
- package/DropdownMenu/DropdownMenu.js +0 -35
- package/ErrorMessage/ErrorMessage.d.ts +0 -27
- package/ErrorMessage/ErrorMessage.js +0 -14
- package/Flex/Flex.d.ts +0 -31
- package/Flex/Flex.js +0 -64
- package/IconButton/IconButton.d.ts +0 -23
- package/IconButton/IconButton.js +0 -48
- package/Input/Input.d.ts +0 -27
- package/Input/Input.js +0 -42
- package/InputOTP/InputOTP.d.ts +0 -20
- package/InputOTP/InputOTP.js +0 -44
- package/Label/Label.d.ts +0 -13
- package/Label/Label.js +0 -19
- package/Loader/Loader.d.ts +0 -21
- package/Loader/Loader.js +0 -30
- package/Menubar/Menubar.d.ts +0 -26
- package/Menubar/Menubar.js +0 -54
- package/Menubar/index.d.ts +0 -1
- package/Menubar/index.js +0 -1
- package/Pagination/Pagination.d.ts +0 -35
- package/Pagination/Pagination.js +0 -37
- package/Popover/Popover.d.ts +0 -7
- package/Popover/Popover.js +0 -10
- package/Progress/Progress.d.ts +0 -17
- package/Progress/Progress.js +0 -33
- package/RadioGroup/RadioGroup.d.ts +0 -13
- package/RadioGroup/RadioGroup.js +0 -26
- package/ScrollArea/ScrollArea.d.ts +0 -5
- package/ScrollArea/ScrollArea.js +0 -11
- package/Select/Select.d.ts +0 -29
- package/Select/Select.js +0 -50
- package/Separator/Separator.d.ts +0 -4
- package/Separator/Separator.js +0 -7
- package/Sidebar/Sidebar.d.ts +0 -48
- package/Sidebar/Sidebar.js +0 -116
- package/Sidebar/index.d.ts +0 -2
- package/Sidebar/index.js +0 -1
- package/Skeleton/Skeleton.d.ts +0 -4
- package/Skeleton/Skeleton.js +0 -7
- package/Slider/Slider.d.ts +0 -6
- package/Slider/Slider.js +0 -7
- package/Spinner/Spinner.d.ts +0 -19
- package/Spinner/Spinner.js +0 -31
- package/Switch/Switch.d.ts +0 -12
- package/Switch/Switch.js +0 -30
- package/Table/Table.d.ts +0 -10
- package/Table/Table.js +0 -20
- package/Tabs/Tabs.d.ts +0 -15
- package/Tabs/Tabs.js +0 -24
- package/Textarea/Textarea.d.ts +0 -19
- package/Textarea/Textarea.js +0 -31
- package/Toast/Toast.d.ts +0 -12
- package/Toast/Toast.js +0 -25
- package/Tooltip/Tooltip.d.ts +0 -17
- package/Tooltip/Tooltip.js +0 -29
- package/Typography/Typography.d.ts +0 -20
- package/Typography/Typography.js +0 -43
- package/helpers.d.ts +0 -4
- package/helpers.js +0 -5
- package/icons.d.ts +0 -1
- package/index.d.ts +0 -42
- package/index.js +0 -45
- package/lib/typography-types.d.ts +0 -4
- package/lib/typography-types.js +0 -90
- package/lib/utils.d.ts +0 -3
- package/lib/utils.js +0 -14
- package/tmpclaude-2407-cwd +0 -1
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react"
|
|
2
|
+
import { Bookmark } from "../icons"
|
|
3
|
+
|
|
4
|
+
import { Button } from "../Button/Button"
|
|
5
|
+
import { IconButton } from "../IconButton/IconButton"
|
|
6
|
+
import { Flex } from "../Flex/Flex"
|
|
7
|
+
import { Typography } from "../Typography/Typography"
|
|
8
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./Tooltip"
|
|
9
|
+
|
|
10
|
+
const meta: Meta<typeof TooltipContent> = {
|
|
11
|
+
title: "Components/Tooltip",
|
|
12
|
+
component: TooltipContent,
|
|
13
|
+
parameters: {
|
|
14
|
+
layout: "centered",
|
|
15
|
+
},
|
|
16
|
+
argTypes: {
|
|
17
|
+
side: {
|
|
18
|
+
control: "select",
|
|
19
|
+
options: ["top", "bottom", "left", "right"],
|
|
20
|
+
description: "The side of the trigger the tooltip appears on",
|
|
21
|
+
},
|
|
22
|
+
variant: {
|
|
23
|
+
control: "select",
|
|
24
|
+
options: ["default", "light"],
|
|
25
|
+
description: "The visual variant of the tooltip",
|
|
26
|
+
},
|
|
27
|
+
showArrow: {
|
|
28
|
+
control: "boolean",
|
|
29
|
+
description: "Whether to show the arrow",
|
|
30
|
+
},
|
|
31
|
+
sideOffset: {
|
|
32
|
+
control: "number",
|
|
33
|
+
description: "The distance from the trigger",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
tags: ["autodocs"],
|
|
37
|
+
decorators: [
|
|
38
|
+
(Story) => (
|
|
39
|
+
<TooltipProvider>
|
|
40
|
+
<Story />
|
|
41
|
+
</TooltipProvider>
|
|
42
|
+
),
|
|
43
|
+
],
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export default meta
|
|
47
|
+
type Story = StoryObj<typeof meta>
|
|
48
|
+
|
|
49
|
+
// Default story
|
|
50
|
+
export const Default: Story = {
|
|
51
|
+
render: (args) => (
|
|
52
|
+
<Tooltip>
|
|
53
|
+
<TooltipTrigger asChild>
|
|
54
|
+
<Button variant="outline">Hover me</Button>
|
|
55
|
+
</TooltipTrigger>
|
|
56
|
+
<TooltipContent {...args}>
|
|
57
|
+
<p>Tooltip text</p>
|
|
58
|
+
</TooltipContent>
|
|
59
|
+
</Tooltip>
|
|
60
|
+
),
|
|
61
|
+
args: {
|
|
62
|
+
side: "top",
|
|
63
|
+
showArrow: true,
|
|
64
|
+
},
|
|
65
|
+
parameters: {
|
|
66
|
+
docs: {
|
|
67
|
+
source: {
|
|
68
|
+
code: `<TooltipProvider>
|
|
69
|
+
<Tooltip>
|
|
70
|
+
<TooltipTrigger asChild>
|
|
71
|
+
<Button variant="outline">Hover me</Button>
|
|
72
|
+
</TooltipTrigger>
|
|
73
|
+
<TooltipContent>
|
|
74
|
+
<p>Tooltip text</p>
|
|
75
|
+
</TooltipContent>
|
|
76
|
+
</Tooltip>
|
|
77
|
+
</TooltipProvider>`,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Top position
|
|
84
|
+
export const Top: Story = {
|
|
85
|
+
render: () => (
|
|
86
|
+
<Tooltip>
|
|
87
|
+
<TooltipTrigger asChild>
|
|
88
|
+
<Button variant="outline">Top</Button>
|
|
89
|
+
</TooltipTrigger>
|
|
90
|
+
<TooltipContent side="top">
|
|
91
|
+
<p>Tooltip text</p>
|
|
92
|
+
</TooltipContent>
|
|
93
|
+
</Tooltip>
|
|
94
|
+
),
|
|
95
|
+
parameters: {
|
|
96
|
+
docs: {
|
|
97
|
+
source: {
|
|
98
|
+
code: `<Tooltip>
|
|
99
|
+
<TooltipTrigger asChild>
|
|
100
|
+
<Button variant="outline">Top</Button>
|
|
101
|
+
</TooltipTrigger>
|
|
102
|
+
<TooltipContent side="top">
|
|
103
|
+
<p>Tooltip text</p>
|
|
104
|
+
</TooltipContent>
|
|
105
|
+
</Tooltip>`,
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Bottom position
|
|
112
|
+
export const Bottom: Story = {
|
|
113
|
+
render: () => (
|
|
114
|
+
<Tooltip>
|
|
115
|
+
<TooltipTrigger asChild>
|
|
116
|
+
<Button variant="outline">Bottom</Button>
|
|
117
|
+
</TooltipTrigger>
|
|
118
|
+
<TooltipContent side="bottom">
|
|
119
|
+
<p>Tooltip text</p>
|
|
120
|
+
</TooltipContent>
|
|
121
|
+
</Tooltip>
|
|
122
|
+
),
|
|
123
|
+
parameters: {
|
|
124
|
+
docs: {
|
|
125
|
+
source: {
|
|
126
|
+
code: `<Tooltip>
|
|
127
|
+
<TooltipTrigger asChild>
|
|
128
|
+
<Button variant="outline">Bottom</Button>
|
|
129
|
+
</TooltipTrigger>
|
|
130
|
+
<TooltipContent side="bottom">
|
|
131
|
+
<p>Tooltip text</p>
|
|
132
|
+
</TooltipContent>
|
|
133
|
+
</Tooltip>`,
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Left position
|
|
140
|
+
export const Left: Story = {
|
|
141
|
+
render: () => (
|
|
142
|
+
<Tooltip>
|
|
143
|
+
<TooltipTrigger asChild>
|
|
144
|
+
<Button variant="outline">Left</Button>
|
|
145
|
+
</TooltipTrigger>
|
|
146
|
+
<TooltipContent side="left">
|
|
147
|
+
<p>Tooltip text</p>
|
|
148
|
+
</TooltipContent>
|
|
149
|
+
</Tooltip>
|
|
150
|
+
),
|
|
151
|
+
parameters: {
|
|
152
|
+
docs: {
|
|
153
|
+
source: {
|
|
154
|
+
code: `<Tooltip>
|
|
155
|
+
<TooltipTrigger asChild>
|
|
156
|
+
<Button variant="outline">Left</Button>
|
|
157
|
+
</TooltipTrigger>
|
|
158
|
+
<TooltipContent side="left">
|
|
159
|
+
<p>Tooltip text</p>
|
|
160
|
+
</TooltipContent>
|
|
161
|
+
</Tooltip>`,
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Right position
|
|
168
|
+
export const Right: Story = {
|
|
169
|
+
render: () => (
|
|
170
|
+
<Tooltip>
|
|
171
|
+
<TooltipTrigger asChild>
|
|
172
|
+
<Button variant="outline">Right</Button>
|
|
173
|
+
</TooltipTrigger>
|
|
174
|
+
<TooltipContent side="right">
|
|
175
|
+
<p>Tooltip text</p>
|
|
176
|
+
</TooltipContent>
|
|
177
|
+
</Tooltip>
|
|
178
|
+
),
|
|
179
|
+
parameters: {
|
|
180
|
+
docs: {
|
|
181
|
+
source: {
|
|
182
|
+
code: `<Tooltip>
|
|
183
|
+
<TooltipTrigger asChild>
|
|
184
|
+
<Button variant="outline">Right</Button>
|
|
185
|
+
</TooltipTrigger>
|
|
186
|
+
<TooltipContent side="right">
|
|
187
|
+
<p>Tooltip text</p>
|
|
188
|
+
</TooltipContent>
|
|
189
|
+
</Tooltip>`,
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// Without arrow
|
|
196
|
+
export const WithoutArrow: Story = {
|
|
197
|
+
render: () => (
|
|
198
|
+
<Tooltip>
|
|
199
|
+
<TooltipTrigger asChild>
|
|
200
|
+
<Button variant="outline">No Arrow</Button>
|
|
201
|
+
</TooltipTrigger>
|
|
202
|
+
<TooltipContent showArrow={false}>
|
|
203
|
+
<p>Tooltip without arrow</p>
|
|
204
|
+
</TooltipContent>
|
|
205
|
+
</Tooltip>
|
|
206
|
+
),
|
|
207
|
+
parameters: {
|
|
208
|
+
docs: {
|
|
209
|
+
source: {
|
|
210
|
+
code: `<Tooltip>
|
|
211
|
+
<TooltipTrigger asChild>
|
|
212
|
+
<Button variant="outline">No Arrow</Button>
|
|
213
|
+
</TooltipTrigger>
|
|
214
|
+
<TooltipContent showArrow={false}>
|
|
215
|
+
<p>Tooltip without arrow</p>
|
|
216
|
+
</TooltipContent>
|
|
217
|
+
</Tooltip>`,
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Light variant
|
|
224
|
+
export const Light: Story = {
|
|
225
|
+
render: () => (
|
|
226
|
+
<Tooltip>
|
|
227
|
+
<TooltipTrigger asChild>
|
|
228
|
+
<Button variant="outline">Light Tooltip</Button>
|
|
229
|
+
</TooltipTrigger>
|
|
230
|
+
<TooltipContent variant="light">
|
|
231
|
+
<p>Light tooltip text</p>
|
|
232
|
+
</TooltipContent>
|
|
233
|
+
</Tooltip>
|
|
234
|
+
),
|
|
235
|
+
parameters: {
|
|
236
|
+
docs: {
|
|
237
|
+
source: {
|
|
238
|
+
code: `<Tooltip>
|
|
239
|
+
<TooltipTrigger asChild>
|
|
240
|
+
<Button variant="outline">Light Tooltip</Button>
|
|
241
|
+
</TooltipTrigger>
|
|
242
|
+
<TooltipContent variant="light">
|
|
243
|
+
<p>Light tooltip text</p>
|
|
244
|
+
</TooltipContent>
|
|
245
|
+
</Tooltip>`,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// With IconButton
|
|
252
|
+
export const WithIconButton: Story = {
|
|
253
|
+
render: () => (
|
|
254
|
+
<Tooltip>
|
|
255
|
+
<TooltipTrigger asChild>
|
|
256
|
+
<IconButton variant="outline" icon={<Bookmark />} aria-label="Add to library" />
|
|
257
|
+
</TooltipTrigger>
|
|
258
|
+
<TooltipContent>
|
|
259
|
+
<p>Add to library</p>
|
|
260
|
+
</TooltipContent>
|
|
261
|
+
</Tooltip>
|
|
262
|
+
),
|
|
263
|
+
parameters: {
|
|
264
|
+
docs: {
|
|
265
|
+
source: {
|
|
266
|
+
code: `<Tooltip>
|
|
267
|
+
<TooltipTrigger asChild>
|
|
268
|
+
<IconButton variant="outline" icon={<Bookmark />} aria-label="Add to library" />
|
|
269
|
+
</TooltipTrigger>
|
|
270
|
+
<TooltipContent>
|
|
271
|
+
<p>Add to library</p>
|
|
272
|
+
</TooltipContent>
|
|
273
|
+
</Tooltip>`,
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Long content
|
|
280
|
+
export const LongContent: Story = {
|
|
281
|
+
render: () => (
|
|
282
|
+
<Tooltip>
|
|
283
|
+
<TooltipTrigger asChild>
|
|
284
|
+
<Button variant="outline">Export File</Button>
|
|
285
|
+
</TooltipTrigger>
|
|
286
|
+
<TooltipContent side="right" className="max-w-[200px]">
|
|
287
|
+
<p>To learn more about how this works, check out the docs. If you have any questions, please reach out to us.</p>
|
|
288
|
+
</TooltipContent>
|
|
289
|
+
</Tooltip>
|
|
290
|
+
),
|
|
291
|
+
parameters: {
|
|
292
|
+
docs: {
|
|
293
|
+
source: {
|
|
294
|
+
code: `<Tooltip>
|
|
295
|
+
<TooltipTrigger asChild>
|
|
296
|
+
<Button variant="outline">Export File</Button>
|
|
297
|
+
</TooltipTrigger>
|
|
298
|
+
<TooltipContent side="right" className="max-w-[200px]">
|
|
299
|
+
<p>To learn more about how this works, check out the docs. If you have any questions, please reach out to us.</p>
|
|
300
|
+
</TooltipContent>
|
|
301
|
+
</Tooltip>`,
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// All Variants showcase
|
|
308
|
+
export const AllVariants: Story = {
|
|
309
|
+
render: () => (
|
|
310
|
+
<Flex gap={8}>
|
|
311
|
+
{/* Tooltip Positions */}
|
|
312
|
+
<Flex gap={4}>
|
|
313
|
+
<Typography variant="h4" className="text-white">Tooltip</Typography>
|
|
314
|
+
|
|
315
|
+
<Flex gap={6}>
|
|
316
|
+
{/* Top */}
|
|
317
|
+
<Flex direction="row" gap={4} align="center">
|
|
318
|
+
<Typography variant="body2" className="text-neutral-400 w-20">Top</Typography>
|
|
319
|
+
<Tooltip>
|
|
320
|
+
<TooltipTrigger asChild>
|
|
321
|
+
<Button variant="outline" size="small">Hover</Button>
|
|
322
|
+
</TooltipTrigger>
|
|
323
|
+
<TooltipContent side="top">
|
|
324
|
+
<p>Tooltip text</p>
|
|
325
|
+
</TooltipContent>
|
|
326
|
+
</Tooltip>
|
|
327
|
+
</Flex>
|
|
328
|
+
|
|
329
|
+
{/* Bottom */}
|
|
330
|
+
<Flex direction="row" gap={4} align="center">
|
|
331
|
+
<Typography variant="body2" className="text-neutral-400 w-20">Bottom</Typography>
|
|
332
|
+
<Tooltip>
|
|
333
|
+
<TooltipTrigger asChild>
|
|
334
|
+
<Button variant="outline" size="small">Hover</Button>
|
|
335
|
+
</TooltipTrigger>
|
|
336
|
+
<TooltipContent side="bottom">
|
|
337
|
+
<p>Tooltip text</p>
|
|
338
|
+
</TooltipContent>
|
|
339
|
+
</Tooltip>
|
|
340
|
+
</Flex>
|
|
341
|
+
|
|
342
|
+
{/* Left */}
|
|
343
|
+
<Flex direction="row" gap={4} align="center">
|
|
344
|
+
<Typography variant="body2" className="text-neutral-400 w-20">Left</Typography>
|
|
345
|
+
<Tooltip>
|
|
346
|
+
<TooltipTrigger asChild>
|
|
347
|
+
<Button variant="outline" size="small">Hover</Button>
|
|
348
|
+
</TooltipTrigger>
|
|
349
|
+
<TooltipContent side="left">
|
|
350
|
+
<p>Tooltip text</p>
|
|
351
|
+
</TooltipContent>
|
|
352
|
+
</Tooltip>
|
|
353
|
+
</Flex>
|
|
354
|
+
|
|
355
|
+
{/* Right */}
|
|
356
|
+
<Flex direction="row" gap={4} align="center">
|
|
357
|
+
<Typography variant="body2" className="text-neutral-400 w-20">Right</Typography>
|
|
358
|
+
<Tooltip>
|
|
359
|
+
<TooltipTrigger asChild>
|
|
360
|
+
<Button variant="outline" size="small">Hover</Button>
|
|
361
|
+
</TooltipTrigger>
|
|
362
|
+
<TooltipContent side="right">
|
|
363
|
+
<p>Tooltip text</p>
|
|
364
|
+
</TooltipContent>
|
|
365
|
+
</Tooltip>
|
|
366
|
+
</Flex>
|
|
367
|
+
</Flex>
|
|
368
|
+
</Flex>
|
|
369
|
+
|
|
370
|
+
{/* Examples */}
|
|
371
|
+
<Flex gap={4}>
|
|
372
|
+
<Typography variant="h4" className="text-white">Examples</Typography>
|
|
373
|
+
|
|
374
|
+
<Flex direction="row" gap={4} align="center">
|
|
375
|
+
{/* Icon Button with tooltip */}
|
|
376
|
+
<Tooltip>
|
|
377
|
+
<TooltipTrigger asChild>
|
|
378
|
+
<IconButton variant="outline" icon={<Bookmark />} aria-label="Add to library" />
|
|
379
|
+
</TooltipTrigger>
|
|
380
|
+
<TooltipContent>
|
|
381
|
+
<p>Add to library</p>
|
|
382
|
+
</TooltipContent>
|
|
383
|
+
</Tooltip>
|
|
384
|
+
|
|
385
|
+
{/* Button with long tooltip */}
|
|
386
|
+
<Tooltip>
|
|
387
|
+
<TooltipTrigger asChild>
|
|
388
|
+
<Button variant="outline">Export File</Button>
|
|
389
|
+
</TooltipTrigger>
|
|
390
|
+
<TooltipContent side="right" className="max-w-[200px]">
|
|
391
|
+
<p>To learn more about how this works, check out the docs. If you have any questions, please reach out to us.</p>
|
|
392
|
+
</TooltipContent>
|
|
393
|
+
</Tooltip>
|
|
394
|
+
</Flex>
|
|
395
|
+
</Flex>
|
|
396
|
+
|
|
397
|
+
{/* Variants */}
|
|
398
|
+
<Flex gap={4}>
|
|
399
|
+
<Typography variant="h4" className="text-white">Variants</Typography>
|
|
400
|
+
|
|
401
|
+
<Flex direction="row" gap={4} align="center">
|
|
402
|
+
{/* Default */}
|
|
403
|
+
<Tooltip>
|
|
404
|
+
<TooltipTrigger asChild>
|
|
405
|
+
<Button variant="outline">Default</Button>
|
|
406
|
+
</TooltipTrigger>
|
|
407
|
+
<TooltipContent variant="default">
|
|
408
|
+
<p>Default dark tooltip</p>
|
|
409
|
+
</TooltipContent>
|
|
410
|
+
</Tooltip>
|
|
411
|
+
|
|
412
|
+
{/* Light */}
|
|
413
|
+
<Tooltip>
|
|
414
|
+
<TooltipTrigger asChild>
|
|
415
|
+
<Button variant="outline">Light</Button>
|
|
416
|
+
</TooltipTrigger>
|
|
417
|
+
<TooltipContent variant="light">
|
|
418
|
+
<p>Light tooltip variant</p>
|
|
419
|
+
</TooltipContent>
|
|
420
|
+
</Tooltip>
|
|
421
|
+
|
|
422
|
+
{/* No Arrow */}
|
|
423
|
+
<Tooltip>
|
|
424
|
+
<TooltipTrigger asChild>
|
|
425
|
+
<Button variant="outline">No Arrow</Button>
|
|
426
|
+
</TooltipTrigger>
|
|
427
|
+
<TooltipContent showArrow={false}>
|
|
428
|
+
<p>Without arrow</p>
|
|
429
|
+
</TooltipContent>
|
|
430
|
+
</Tooltip>
|
|
431
|
+
</Flex>
|
|
432
|
+
</Flex>
|
|
433
|
+
</Flex>
|
|
434
|
+
),
|
|
435
|
+
parameters: {
|
|
436
|
+
docs: {
|
|
437
|
+
source: {
|
|
438
|
+
code: `// Basic usage
|
|
439
|
+
<TooltipProvider>
|
|
440
|
+
<Tooltip>
|
|
441
|
+
<TooltipTrigger asChild>
|
|
442
|
+
<Button variant="outline">Hover me</Button>
|
|
443
|
+
</TooltipTrigger>
|
|
444
|
+
<TooltipContent>
|
|
445
|
+
<p>Tooltip text</p>
|
|
446
|
+
</TooltipContent>
|
|
447
|
+
</Tooltip>
|
|
448
|
+
</TooltipProvider>
|
|
449
|
+
|
|
450
|
+
// With position
|
|
451
|
+
<TooltipContent side="bottom">...</TooltipContent>
|
|
452
|
+
<TooltipContent side="left">...</TooltipContent>
|
|
453
|
+
<TooltipContent side="right">...</TooltipContent>
|
|
454
|
+
|
|
455
|
+
// Light variant
|
|
456
|
+
<TooltipContent variant="light">...</TooltipContent>
|
|
457
|
+
|
|
458
|
+
// Without arrow
|
|
459
|
+
<TooltipContent showArrow={false}>...</TooltipContent>`,
|
|
460
|
+
},
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip"
|
|
3
|
+
import { cva } from "class-variance-authority"
|
|
4
|
+
|
|
5
|
+
import { cn } from "../lib/utils"
|
|
6
|
+
|
|
7
|
+
type TooltipContentVariant = "default" | "light"
|
|
8
|
+
|
|
9
|
+
const tooltipContentVariants = cva(
|
|
10
|
+
"z-50 overflow-hidden rounded-lg bg-neutral-950 px-2 py-1.5 text-xs text-neutral-50 animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
|
11
|
+
{
|
|
12
|
+
variants: {
|
|
13
|
+
variant: {
|
|
14
|
+
default: "bg-neutral-950 text-neutral-50",
|
|
15
|
+
light: "bg-white text-neutral-900 border border-neutral-200 shadow-md",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
variant: "default",
|
|
20
|
+
},
|
|
21
|
+
}
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
function TooltipProvider({
|
|
25
|
+
delayDuration = 200,
|
|
26
|
+
skipDelayDuration = 300,
|
|
27
|
+
...props
|
|
28
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
|
|
29
|
+
return (
|
|
30
|
+
<TooltipPrimitive.Provider
|
|
31
|
+
delayDuration={delayDuration}
|
|
32
|
+
skipDelayDuration={skipDelayDuration}
|
|
33
|
+
{...props}
|
|
34
|
+
/>
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function Tooltip({
|
|
39
|
+
...props
|
|
40
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Root>) {
|
|
41
|
+
return <TooltipPrimitive.Root {...props} />
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function TooltipTrigger({
|
|
45
|
+
...props
|
|
46
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
|
|
47
|
+
return <TooltipPrimitive.Trigger {...props} />
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export type TooltipContentProps = React.ComponentProps<
|
|
51
|
+
typeof TooltipPrimitive.Content
|
|
52
|
+
> & {
|
|
53
|
+
variant?: TooltipContentVariant
|
|
54
|
+
/** Whether to show the arrow */
|
|
55
|
+
showArrow?: boolean
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function TooltipContent({
|
|
59
|
+
className,
|
|
60
|
+
sideOffset = 4,
|
|
61
|
+
variant,
|
|
62
|
+
showArrow = true,
|
|
63
|
+
children,
|
|
64
|
+
...props
|
|
65
|
+
}: TooltipContentProps) {
|
|
66
|
+
return (
|
|
67
|
+
<TooltipPrimitive.Portal>
|
|
68
|
+
<TooltipPrimitive.Content
|
|
69
|
+
sideOffset={sideOffset}
|
|
70
|
+
className={cn(tooltipContentVariants({ variant }), className)}
|
|
71
|
+
{...props}
|
|
72
|
+
>
|
|
73
|
+
{children}
|
|
74
|
+
{showArrow && (
|
|
75
|
+
<TooltipPrimitive.Arrow
|
|
76
|
+
className={cn(
|
|
77
|
+
"fill-neutral-950",
|
|
78
|
+
variant === "light" && "fill-white"
|
|
79
|
+
)}
|
|
80
|
+
width={11}
|
|
81
|
+
height={5}
|
|
82
|
+
/>
|
|
83
|
+
)}
|
|
84
|
+
</TooltipPrimitive.Content>
|
|
85
|
+
</TooltipPrimitive.Portal>
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export {
|
|
90
|
+
Tooltip,
|
|
91
|
+
TooltipTrigger,
|
|
92
|
+
TooltipContent,
|
|
93
|
+
TooltipProvider,
|
|
94
|
+
tooltipContentVariants,
|
|
95
|
+
}
|
|
96
|
+
export type { TooltipContentVariant }
|