@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.
Files changed (185) hide show
  1. package/Alert/Alert.stories.tsx +121 -0
  2. package/Alert/Alert.tsx +71 -0
  3. package/AlertDialog/AlertDialog.stories.tsx +665 -0
  4. package/AlertDialog/AlertDialog.tsx +241 -0
  5. package/Avatar/Avatar.stories.tsx +128 -0
  6. package/Avatar/Avatar.tsx +71 -0
  7. package/Badge/Badge.stories.tsx +76 -0
  8. package/Badge/Badge.tsx +39 -0
  9. package/Breadcrumb/Breadcrumb.stories.tsx +231 -0
  10. package/Breadcrumb/Breadcrumb.tsx +114 -0
  11. package/Button/Button.stories.tsx +684 -0
  12. package/Button/Button.tsx +107 -0
  13. package/Calendar/Calendar.stories.tsx +291 -0
  14. package/Calendar/Calendar.tsx +246 -0
  15. package/Card/Card.stories.tsx +136 -0
  16. package/Card/Card.tsx +96 -0
  17. package/Carousel/Carousel.stories.tsx +256 -0
  18. package/Carousel/Carousel.tsx +301 -0
  19. package/ChatBubble/ChatBubble.stories.tsx +339 -0
  20. package/ChatBubble/ChatBubble.tsx +179 -0
  21. package/Checkbox/Checkbox.stories.tsx +137 -0
  22. package/Checkbox/Checkbox.tsx +53 -0
  23. package/DataTable/DataTable.stories.tsx +400 -0
  24. package/DataTable/DataTable.tsx +207 -0
  25. package/Drawer/Drawer.stories.tsx +721 -0
  26. package/Drawer/Drawer.tsx +201 -0
  27. package/DropdownMenu/DropdownMenu.stories.tsx +251 -0
  28. package/DropdownMenu/DropdownMenu.tsx +199 -0
  29. package/ErrorMessage/ErrorMessage.stories.tsx +159 -0
  30. package/ErrorMessage/ErrorMessage.tsx +55 -0
  31. package/Flex/Flex.stories.tsx +390 -0
  32. package/Flex/Flex.tsx +102 -0
  33. package/IconButton/IconButton.stories.tsx +566 -0
  34. package/IconButton/IconButton.tsx +95 -0
  35. package/Input/Input.stories.tsx +566 -0
  36. package/Input/Input.tsx +168 -0
  37. package/InputOTP/InputOTP.stories.tsx +246 -0
  38. package/InputOTP/InputOTP.tsx +127 -0
  39. package/Label/Label.stories.tsx +110 -0
  40. package/Label/Label.tsx +44 -0
  41. package/Loader/Loader.stories.tsx +170 -0
  42. package/Loader/Loader.tsx +62 -0
  43. package/Menubar/Menubar.stories.tsx +382 -0
  44. package/Menubar/Menubar.tsx +274 -0
  45. package/Menubar/index.ts +18 -0
  46. package/Pagination/Pagination.stories.tsx +196 -0
  47. package/Pagination/Pagination.tsx +122 -0
  48. package/Popover/Popover.stories.tsx +133 -0
  49. package/Popover/Popover.tsx +31 -0
  50. package/Progress/Progress.stories.tsx +146 -0
  51. package/Progress/Progress.tsx +67 -0
  52. package/RadioGroup/RadioGroup.stories.tsx +159 -0
  53. package/RadioGroup/RadioGroup.tsx +68 -0
  54. package/ScrollArea/ScrollArea.stories.tsx +136 -0
  55. package/ScrollArea/ScrollArea.tsx +46 -0
  56. package/Select/Select.stories.tsx +378 -0
  57. package/Select/Select.tsx +230 -0
  58. package/Separator/Separator.stories.tsx +110 -0
  59. package/Separator/Separator.tsx +29 -0
  60. package/Sidebar/Sidebar.stories.tsx +340 -0
  61. package/Sidebar/Sidebar.tsx +414 -0
  62. package/Sidebar/index.ts +28 -0
  63. package/Skeleton/Skeleton.stories.tsx +117 -0
  64. package/Skeleton/Skeleton.tsx +16 -0
  65. package/Slider/Slider.stories.tsx +216 -0
  66. package/Slider/Slider.tsx +29 -0
  67. package/Spinner/Spinner.stories.tsx +210 -0
  68. package/Spinner/Spinner.tsx +78 -0
  69. package/Switch/Switch.stories.tsx +146 -0
  70. package/Switch/Switch.tsx +59 -0
  71. package/Table/Table.stories.tsx +510 -0
  72. package/Table/Table.tsx +114 -0
  73. package/Tabs/Tabs.stories.tsx +197 -0
  74. package/Tabs/Tabs.tsx +74 -0
  75. package/Textarea/Textarea.stories.tsx +187 -0
  76. package/Textarea/Textarea.tsx +73 -0
  77. package/Toast/Toast.stories.tsx +285 -0
  78. package/Toast/Toast.tsx +59 -0
  79. package/Tooltip/Tooltip.stories.tsx +463 -0
  80. package/Tooltip/Tooltip.tsx +96 -0
  81. package/Typography/Typography.stories.tsx +425 -0
  82. package/Typography/Typography.tsx +106 -0
  83. package/helpers.ts +5 -0
  84. package/{icons.js → icons.ts} +1 -1
  85. package/index.ts +217 -0
  86. package/lib/typography-types.ts +223 -0
  87. package/lib/utils.ts +15 -0
  88. package/package.json +36 -33
  89. package/tsconfig.json +22 -0
  90. package/Alert/Alert.d.ts +0 -13
  91. package/Alert/Alert.js +0 -25
  92. package/AlertDialog/AlertDialog.d.ts +0 -43
  93. package/AlertDialog/AlertDialog.js +0 -71
  94. package/Avatar/Avatar.d.ts +0 -14
  95. package/Avatar/Avatar.js +0 -25
  96. package/Badge/Badge.d.ts +0 -11
  97. package/Badge/Badge.js +0 -23
  98. package/Breadcrumb/Breadcrumb.d.ts +0 -19
  99. package/Breadcrumb/Breadcrumb.js +0 -23
  100. package/Button/Button.d.ts +0 -23
  101. package/Button/Button.js +0 -52
  102. package/Calendar/Calendar.d.ts +0 -20
  103. package/Calendar/Calendar.js +0 -78
  104. package/Card/Card.d.ts +0 -16
  105. package/Card/Card.js +0 -28
  106. package/Carousel/Carousel.d.ts +0 -37
  107. package/Carousel/Carousel.js +0 -132
  108. package/ChatBubble/ChatBubble.d.ts +0 -33
  109. package/ChatBubble/ChatBubble.js +0 -107
  110. package/Checkbox/Checkbox.d.ts +0 -12
  111. package/Checkbox/Checkbox.js +0 -20
  112. package/DataTable/DataTable.d.ts +0 -35
  113. package/DataTable/DataTable.js +0 -51
  114. package/Dialog/Dialog.d.ts +0 -35
  115. package/Dialog/Dialog.js +0 -130
  116. package/Drawer/Drawer.d.ts +0 -33
  117. package/Drawer/Drawer.js +0 -55
  118. package/DropdownMenu/DropdownMenu.d.ts +0 -27
  119. package/DropdownMenu/DropdownMenu.js +0 -35
  120. package/ErrorMessage/ErrorMessage.d.ts +0 -27
  121. package/ErrorMessage/ErrorMessage.js +0 -14
  122. package/Flex/Flex.d.ts +0 -31
  123. package/Flex/Flex.js +0 -64
  124. package/IconButton/IconButton.d.ts +0 -23
  125. package/IconButton/IconButton.js +0 -48
  126. package/Input/Input.d.ts +0 -27
  127. package/Input/Input.js +0 -42
  128. package/InputOTP/InputOTP.d.ts +0 -20
  129. package/InputOTP/InputOTP.js +0 -44
  130. package/Label/Label.d.ts +0 -13
  131. package/Label/Label.js +0 -19
  132. package/Loader/Loader.d.ts +0 -21
  133. package/Loader/Loader.js +0 -30
  134. package/Menubar/Menubar.d.ts +0 -26
  135. package/Menubar/Menubar.js +0 -54
  136. package/Menubar/index.d.ts +0 -1
  137. package/Menubar/index.js +0 -1
  138. package/Pagination/Pagination.d.ts +0 -35
  139. package/Pagination/Pagination.js +0 -37
  140. package/Popover/Popover.d.ts +0 -7
  141. package/Popover/Popover.js +0 -10
  142. package/Progress/Progress.d.ts +0 -17
  143. package/Progress/Progress.js +0 -33
  144. package/RadioGroup/RadioGroup.d.ts +0 -13
  145. package/RadioGroup/RadioGroup.js +0 -26
  146. package/ScrollArea/ScrollArea.d.ts +0 -5
  147. package/ScrollArea/ScrollArea.js +0 -11
  148. package/Select/Select.d.ts +0 -29
  149. package/Select/Select.js +0 -50
  150. package/Separator/Separator.d.ts +0 -4
  151. package/Separator/Separator.js +0 -7
  152. package/Sidebar/Sidebar.d.ts +0 -48
  153. package/Sidebar/Sidebar.js +0 -116
  154. package/Sidebar/index.d.ts +0 -2
  155. package/Sidebar/index.js +0 -1
  156. package/Skeleton/Skeleton.d.ts +0 -4
  157. package/Skeleton/Skeleton.js +0 -7
  158. package/Slider/Slider.d.ts +0 -6
  159. package/Slider/Slider.js +0 -7
  160. package/Spinner/Spinner.d.ts +0 -19
  161. package/Spinner/Spinner.js +0 -31
  162. package/Switch/Switch.d.ts +0 -12
  163. package/Switch/Switch.js +0 -30
  164. package/Table/Table.d.ts +0 -10
  165. package/Table/Table.js +0 -20
  166. package/Tabs/Tabs.d.ts +0 -15
  167. package/Tabs/Tabs.js +0 -24
  168. package/Textarea/Textarea.d.ts +0 -19
  169. package/Textarea/Textarea.js +0 -31
  170. package/Toast/Toast.d.ts +0 -12
  171. package/Toast/Toast.js +0 -25
  172. package/Tooltip/Tooltip.d.ts +0 -17
  173. package/Tooltip/Tooltip.js +0 -29
  174. package/Typography/Typography.d.ts +0 -20
  175. package/Typography/Typography.js +0 -43
  176. package/helpers.d.ts +0 -4
  177. package/helpers.js +0 -5
  178. package/icons.d.ts +0 -1
  179. package/index.d.ts +0 -42
  180. package/index.js +0 -45
  181. package/lib/typography-types.d.ts +0 -4
  182. package/lib/typography-types.js +0 -90
  183. package/lib/utils.d.ts +0 -3
  184. package/lib/utils.js +0 -14
  185. 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 }