@adamosuiteservices/ui 2.11.15 → 2.11.17

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 (41) hide show
  1. package/dist/colors.css +1 -1
  2. package/dist/styles.css +1 -1
  3. package/dist/themes.css +1 -1
  4. package/docs/AI-GUIDE.md +321 -321
  5. package/docs/components/layout/sidebar.md +399 -399
  6. package/docs/components/layout/toaster.md +436 -436
  7. package/docs/components/ui/accordion-rounded.md +584 -584
  8. package/docs/components/ui/accordion.md +269 -269
  9. package/docs/components/ui/button-group.md +984 -984
  10. package/docs/components/ui/button.md +1137 -1137
  11. package/docs/components/ui/calendar.md +1159 -1159
  12. package/docs/components/ui/card.md +1455 -1455
  13. package/docs/components/ui/checkbox.md +292 -292
  14. package/docs/components/ui/collapsible.md +323 -323
  15. package/docs/components/ui/command.md +454 -454
  16. package/docs/components/ui/context-menu.md +540 -540
  17. package/docs/components/ui/dialog.md +628 -628
  18. package/docs/components/ui/dropdown-menu.md +709 -709
  19. package/docs/components/ui/field.md +706 -706
  20. package/docs/components/ui/hover-card.md +446 -446
  21. package/docs/components/ui/input.md +362 -362
  22. package/docs/components/ui/kbd.md +434 -434
  23. package/docs/components/ui/label.md +359 -359
  24. package/docs/components/ui/pagination.md +650 -650
  25. package/docs/components/ui/popover.md +536 -536
  26. package/docs/components/ui/progress.md +182 -182
  27. package/docs/components/ui/radio-group.md +311 -311
  28. package/docs/components/ui/select.md +352 -352
  29. package/docs/components/ui/separator.md +214 -214
  30. package/docs/components/ui/sheet.md +142 -142
  31. package/docs/components/ui/skeleton.md +140 -140
  32. package/docs/components/ui/slider.md +341 -341
  33. package/docs/components/ui/spinner.md +170 -170
  34. package/docs/components/ui/switch.md +408 -408
  35. package/docs/components/ui/tabs-underline.md +106 -106
  36. package/docs/components/ui/tabs.md +122 -122
  37. package/docs/components/ui/textarea.md +243 -243
  38. package/docs/components/ui/toggle.md +237 -237
  39. package/docs/components/ui/tooltip.md +317 -317
  40. package/docs/components/ui/typography.md +280 -280
  41. package/package.json +1 -1
@@ -1,317 +1,317 @@
1
- # Tooltip
2
-
3
- Mensaje flotante informativo en hover/focus. Basado en Radix UI con arrow.
4
-
5
- ## Descripción
6
-
7
- El componente `Tooltip` muestra información adicional al hacer hover sobre un elemento.
8
-
9
- ## Importación
10
-
11
- ```typescript
12
- import {
13
- Tooltip,
14
- TooltipContent,
15
- TooltipProvider,
16
- TooltipTrigger,
17
- } from "@adamosuiteservices/ui/tooltip";
18
- ```
19
-
20
- ## Anatomía
21
-
22
- ```tsx
23
- <Tooltip>
24
- <TooltipTrigger>Hover me</TooltipTrigger>
25
- <TooltipContent>
26
- <p>Tooltip content</p>
27
- </TooltipContent>
28
- </Tooltip>
29
- ```
30
-
31
- **Componentes**: 4 (TooltipProvider, Tooltip, TooltipTrigger, TooltipContent)
32
-
33
- ## Props
34
-
35
- ### Tooltip (Root)
36
-
37
- | Prop | Tipo | Descripción |
38
- | --------------- | ------------------------- | --------------------------------------- |
39
- | `open` | `boolean` | Estado controlado |
40
- | `defaultOpen` | `boolean` | Estado inicial |
41
- | `onOpenChange` | `(open: boolean) => void` | Callback al cambiar |
42
- | `delayDuration` | `number` | Delay antes de mostrar (ms, default: 0) |
43
-
44
- ### TooltipTrigger
45
-
46
- | Prop | Tipo | Descripción |
47
- | --------- | --------- | ---------------------------- |
48
- | `asChild` | `boolean` | Renderiza como child element |
49
-
50
- ### TooltipContent
51
-
52
- | Prop | Tipo | Descripción |
53
- | ------------ | ---------------------------------------- | ------------------------------------- |
54
- | `side` | `"top" \| "right" \| "bottom" \| "left"` | Posición del tooltip |
55
- | `sideOffset` | `number` | Offset desde trigger (px, default: 0) |
56
- | `align` | `"start" \| "center" \| "end"` | Alineación |
57
- | `className` | `string` | Clases CSS adicionales |
58
-
59
- ### TooltipProvider
60
-
61
- | Prop | Tipo | Descripción |
62
- | --------------- | -------- | ----------------------------- |
63
- | `delayDuration` | `number` | Delay global (ms, default: 0) |
64
-
65
- ## Patrones de Uso
66
-
67
- ### Básico
68
-
69
- ```tsx
70
- import {
71
- Tooltip,
72
- TooltipContent,
73
- TooltipTrigger,
74
- } from "@adamosuiteservices/ui/tooltip";
75
- import { Button } from "@adamosuiteservices/ui/button";
76
-
77
- <Tooltip>
78
- <TooltipTrigger asChild>
79
- <Button variant="outline">Hover</Button>
80
- </TooltipTrigger>
81
- <TooltipContent>
82
- <p>Add to library</p>
83
- </TooltipContent>
84
- </Tooltip>;
85
- ```
86
-
87
- ### Con Icono
88
-
89
- ```tsx
90
- import { Icon } from "@adamosuiteservices/ui/icon";
91
-
92
- <Tooltip>
93
- <TooltipTrigger asChild>
94
- <Button variant="outline" size="icon">
95
- <Icon symbol="info" className="text-lg" />
96
- </Button>
97
- </TooltipTrigger>
98
- <TooltipContent>
99
- <p>More information</p>
100
- </TooltipContent>
101
- </Tooltip>;
102
- ```
103
-
104
- ### Posiciones
105
-
106
- ```tsx
107
- // Top (default)
108
- <Tooltip>
109
- <TooltipTrigger asChild>
110
- <Button>Top</Button>
111
- </TooltipTrigger>
112
- <TooltipContent side="top">
113
- <p>Tooltip on top</p>
114
- </TooltipContent>
115
- </Tooltip>
116
-
117
- // Right
118
- <TooltipContent side="right"><p>Tooltip on right</p></TooltipContent>
119
-
120
- // Bottom
121
- <TooltipContent side="bottom"><p>Tooltip on bottom</p></TooltipContent>
122
-
123
- // Left
124
- <TooltipContent side="left"><p>Tooltip on left</p></TooltipContent>
125
- ```
126
-
127
- ### Con Offset
128
-
129
- ```tsx
130
- <Tooltip>
131
- <TooltipTrigger asChild>
132
- <Button>With Offset</Button>
133
- </TooltipTrigger>
134
- <TooltipContent sideOffset={10}>
135
- <p>10px offset from trigger</p>
136
- </TooltipContent>
137
- </Tooltip>
138
- ```
139
-
140
- ### Con Delay
141
-
142
- ```tsx
143
- <TooltipProvider delayDuration={800}>
144
- <Tooltip>
145
- <TooltipTrigger asChild>
146
- <Button>Slow Tooltip</Button>
147
- </TooltipTrigger>
148
- <TooltipContent>
149
- <p>Appears after 800ms</p>
150
- </TooltipContent>
151
- </Tooltip>
152
- </TooltipProvider>
153
- ```
154
-
155
- ### Con Provider Global
156
-
157
- Para múltiples tooltips, usa TooltipProvider:
158
-
159
- ```tsx
160
- <TooltipProvider delayDuration={300}>
161
- <Tooltip>...</Tooltip>
162
- <Tooltip>...</Tooltip>
163
- </TooltipProvider>
164
- ```
165
-
166
- ### Action Buttons
167
-
168
- ```tsx
169
- <div className="flex gap-2">
170
- <Tooltip>
171
- <TooltipTrigger asChild>
172
- <Button size="icon" variant="outline">
173
- <Icon symbol="content_copy" className="text-lg" />
174
- </Button>
175
- </TooltipTrigger>
176
- <TooltipContent>
177
- <p>Copy to clipboard</p>
178
- </TooltipContent>
179
- </Tooltip>
180
-
181
- <Tooltip>
182
- <TooltipTrigger asChild>
183
- <Button size="icon" variant="outline">
184
- <Icon symbol="edit" className="text-lg" />
185
- </Button>
186
- </TooltipTrigger>
187
- <TooltipContent>
188
- <p>Edit document</p>
189
- </TooltipContent>
190
- </Tooltip>
191
-
192
- <Tooltip>
193
- <TooltipTrigger asChild>
194
- <Button size="icon" variant="outline">
195
- <Icon symbol="share" className="text-lg" />
196
- </Button>
197
- </TooltipTrigger>
198
- <TooltipContent>
199
- <p>Share with others</p>
200
- </TooltipContent>
201
- </Tooltip>
202
-
203
- <Tooltip>
204
- <TooltipTrigger asChild>
205
- <Button size="icon" variant="destructive">
206
- <Icon symbol="delete" className="text-lg" />
207
- </Button>
208
- </TooltipTrigger>
209
- <TooltipContent>
210
- <p>Delete permanently</p>
211
- </TooltipContent>
212
- </Tooltip>
213
- </div>;
214
- ```
215
-
216
- ### Form Help Icons
217
-
218
- ```tsx
219
- import { Label } from "@adamosuiteservices/ui/label";
220
- import { Input } from "@adamosuiteservices/ui/input";
221
-
222
- <div className="space-y-2">
223
- <div className="flex items-center gap-2">
224
- <Label htmlFor="username">Username</Label>
225
- <Tooltip>
226
- <TooltipTrigger asChild>
227
- <Icon symbol="help" className="cursor-help text-lg text-muted-foreground" />
228
- </TooltipTrigger>
229
- <TooltipContent>
230
- <p>
231
- Must be 3-20 characters long and contain only letters, numbers, and
232
- underscores
233
- </p>
234
- </TooltipContent>
235
- </Tooltip>
236
- </div>
237
- <Input id="username" placeholder="Enter username" />
238
- </div>;
239
- ```
240
-
241
- ### Controlled
242
-
243
- ```tsx
244
- import { useState } from "react";
245
-
246
- function App() {
247
- const [open, setOpen] = useState(false);
248
-
249
- return (
250
- <div className="flex items-center gap-4">
251
- <Tooltip open={open} onOpenChange={setOpen}>
252
- <TooltipTrigger asChild>
253
- <Button>Controlled</Button>
254
- </TooltipTrigger>
255
- <TooltipContent>
256
- <p>Controlled programmatically</p>
257
- </TooltipContent>
258
- </Tooltip>
259
-
260
- <Button size="sm" onClick={() => setOpen(true)}>
261
- Show
262
- </Button>
263
- <Button size="sm" variant="outline" onClick={() => setOpen(false)}>
264
- Hide
265
- </Button>
266
- </div>
267
- );
268
- }
269
- ```
270
-
271
- ## Casos de Uso
272
-
273
- **Icon buttons**: Descripción de acciones
274
- **Form help**: Explicar campos de formulario
275
- **Status indicators**: Detalles de estados
276
- **Truncated text**: Mostrar texto completo
277
- **Disabled elements**: Explicar por qué está deshabilitado
278
-
279
- ## Estilos Base
280
-
281
- - **Background**: `bg-primary`
282
- - **Text**: `text-primary-foreground text-xs`
283
- - **Padding**: `px-3 py-1.5`
284
- - **Border radius**: `rounded-md`
285
- - **Arrow**: `size-2.5` con `bg-primary`
286
- - **Z-index**: `z-50`
287
- - **Animation**: Fade + zoom in/out
288
-
289
- ## Accesibilidad
290
-
291
- - ✅ **ARIA**: `aria-describedby` automático
292
- - ✅ **Keyboard**: Visible en focus del trigger
293
- - ✅ **Hover**: Aparece en hover
294
- - ✅ **Focus**: Aparece en focus del trigger
295
- - ✅ **Escape**: Cierra con Escape key
296
-
297
- ## Notas de Implementación
298
-
299
- - **Radix UI**: Basado en `@radix-ui/react-tooltip`
300
- - **Portal**: Content se renderiza en portal (fuera del DOM tree)
301
- - **Arrow**: Incluido automáticamente en TooltipContent
302
- - **Provider**: Tooltip individual ya incluye TooltipProvider interno
303
- - **Global Provider**: Usa TooltipProvider para delay global
304
-
305
- ## Troubleshooting
306
-
307
- **Tooltip no aparece**: Verifica que TooltipTrigger tenga `asChild` si es Button/componente
308
- **Posición incorrecta**: Usa `side` prop en TooltipContent
309
- **Delay muy largo**: Ajusta `delayDuration` en Tooltip o TooltipProvider
310
- **Z-index issues**: Tooltip usa `z-50`, puede necesitar ajuste si hay overlays
311
- **Arrow no visible**: Arrow incluido por default, verifica estilos no sobrescritos
312
- **No se cierra**: Usa Escape key o mouseleave del trigger
313
-
314
- ## Referencias
315
-
316
- - **Radix UI Tooltip**: <https://www.radix-ui.com/primitives/docs/components/tooltip>
317
- - **shadcn/ui Tooltip**: <https://ui.shadcn.com/docs/components/tooltip>
1
+ # Tooltip
2
+
3
+ Mensaje flotante informativo en hover/focus. Basado en Radix UI con arrow.
4
+
5
+ ## Descripción
6
+
7
+ El componente `Tooltip` muestra información adicional al hacer hover sobre un elemento.
8
+
9
+ ## Importación
10
+
11
+ ```typescript
12
+ import {
13
+ Tooltip,
14
+ TooltipContent,
15
+ TooltipProvider,
16
+ TooltipTrigger,
17
+ } from "@adamosuiteservices/ui/tooltip";
18
+ ```
19
+
20
+ ## Anatomía
21
+
22
+ ```tsx
23
+ <Tooltip>
24
+ <TooltipTrigger>Hover me</TooltipTrigger>
25
+ <TooltipContent>
26
+ <p>Tooltip content</p>
27
+ </TooltipContent>
28
+ </Tooltip>
29
+ ```
30
+
31
+ **Componentes**: 4 (TooltipProvider, Tooltip, TooltipTrigger, TooltipContent)
32
+
33
+ ## Props
34
+
35
+ ### Tooltip (Root)
36
+
37
+ | Prop | Tipo | Descripción |
38
+ | --------------- | ------------------------- | --------------------------------------- |
39
+ | `open` | `boolean` | Estado controlado |
40
+ | `defaultOpen` | `boolean` | Estado inicial |
41
+ | `onOpenChange` | `(open: boolean) => void` | Callback al cambiar |
42
+ | `delayDuration` | `number` | Delay antes de mostrar (ms, default: 0) |
43
+
44
+ ### TooltipTrigger
45
+
46
+ | Prop | Tipo | Descripción |
47
+ | --------- | --------- | ---------------------------- |
48
+ | `asChild` | `boolean` | Renderiza como child element |
49
+
50
+ ### TooltipContent
51
+
52
+ | Prop | Tipo | Descripción |
53
+ | ------------ | ---------------------------------------- | ------------------------------------- |
54
+ | `side` | `"top" \| "right" \| "bottom" \| "left"` | Posición del tooltip |
55
+ | `sideOffset` | `number` | Offset desde trigger (px, default: 0) |
56
+ | `align` | `"start" \| "center" \| "end"` | Alineación |
57
+ | `className` | `string` | Clases CSS adicionales |
58
+
59
+ ### TooltipProvider
60
+
61
+ | Prop | Tipo | Descripción |
62
+ | --------------- | -------- | ----------------------------- |
63
+ | `delayDuration` | `number` | Delay global (ms, default: 0) |
64
+
65
+ ## Patrones de Uso
66
+
67
+ ### Básico
68
+
69
+ ```tsx
70
+ import {
71
+ Tooltip,
72
+ TooltipContent,
73
+ TooltipTrigger,
74
+ } from "@adamosuiteservices/ui/tooltip";
75
+ import { Button } from "@adamosuiteservices/ui/button";
76
+
77
+ <Tooltip>
78
+ <TooltipTrigger asChild>
79
+ <Button variant="outline">Hover</Button>
80
+ </TooltipTrigger>
81
+ <TooltipContent>
82
+ <p>Add to library</p>
83
+ </TooltipContent>
84
+ </Tooltip>;
85
+ ```
86
+
87
+ ### Con Icono
88
+
89
+ ```tsx
90
+ import { Icon } from "@adamosuiteservices/ui/icon";
91
+
92
+ <Tooltip>
93
+ <TooltipTrigger asChild>
94
+ <Button variant="outline" size="icon">
95
+ <Icon symbol="info" className="text-lg" />
96
+ </Button>
97
+ </TooltipTrigger>
98
+ <TooltipContent>
99
+ <p>More information</p>
100
+ </TooltipContent>
101
+ </Tooltip>;
102
+ ```
103
+
104
+ ### Posiciones
105
+
106
+ ```tsx
107
+ // Top (default)
108
+ <Tooltip>
109
+ <TooltipTrigger asChild>
110
+ <Button>Top</Button>
111
+ </TooltipTrigger>
112
+ <TooltipContent side="top">
113
+ <p>Tooltip on top</p>
114
+ </TooltipContent>
115
+ </Tooltip>
116
+
117
+ // Right
118
+ <TooltipContent side="right"><p>Tooltip on right</p></TooltipContent>
119
+
120
+ // Bottom
121
+ <TooltipContent side="bottom"><p>Tooltip on bottom</p></TooltipContent>
122
+
123
+ // Left
124
+ <TooltipContent side="left"><p>Tooltip on left</p></TooltipContent>
125
+ ```
126
+
127
+ ### Con Offset
128
+
129
+ ```tsx
130
+ <Tooltip>
131
+ <TooltipTrigger asChild>
132
+ <Button>With Offset</Button>
133
+ </TooltipTrigger>
134
+ <TooltipContent sideOffset={10}>
135
+ <p>10px offset from trigger</p>
136
+ </TooltipContent>
137
+ </Tooltip>
138
+ ```
139
+
140
+ ### Con Delay
141
+
142
+ ```tsx
143
+ <TooltipProvider delayDuration={800}>
144
+ <Tooltip>
145
+ <TooltipTrigger asChild>
146
+ <Button>Slow Tooltip</Button>
147
+ </TooltipTrigger>
148
+ <TooltipContent>
149
+ <p>Appears after 800ms</p>
150
+ </TooltipContent>
151
+ </Tooltip>
152
+ </TooltipProvider>
153
+ ```
154
+
155
+ ### Con Provider Global
156
+
157
+ Para múltiples tooltips, usa TooltipProvider:
158
+
159
+ ```tsx
160
+ <TooltipProvider delayDuration={300}>
161
+ <Tooltip>...</Tooltip>
162
+ <Tooltip>...</Tooltip>
163
+ </TooltipProvider>
164
+ ```
165
+
166
+ ### Action Buttons
167
+
168
+ ```tsx
169
+ <div className="flex gap-2">
170
+ <Tooltip>
171
+ <TooltipTrigger asChild>
172
+ <Button size="icon" variant="outline">
173
+ <Icon symbol="content_copy" className="text-lg" />
174
+ </Button>
175
+ </TooltipTrigger>
176
+ <TooltipContent>
177
+ <p>Copy to clipboard</p>
178
+ </TooltipContent>
179
+ </Tooltip>
180
+
181
+ <Tooltip>
182
+ <TooltipTrigger asChild>
183
+ <Button size="icon" variant="outline">
184
+ <Icon symbol="edit" className="text-lg" />
185
+ </Button>
186
+ </TooltipTrigger>
187
+ <TooltipContent>
188
+ <p>Edit document</p>
189
+ </TooltipContent>
190
+ </Tooltip>
191
+
192
+ <Tooltip>
193
+ <TooltipTrigger asChild>
194
+ <Button size="icon" variant="outline">
195
+ <Icon symbol="share" className="text-lg" />
196
+ </Button>
197
+ </TooltipTrigger>
198
+ <TooltipContent>
199
+ <p>Share with others</p>
200
+ </TooltipContent>
201
+ </Tooltip>
202
+
203
+ <Tooltip>
204
+ <TooltipTrigger asChild>
205
+ <Button size="icon" variant="destructive">
206
+ <Icon symbol="delete" className="text-lg" />
207
+ </Button>
208
+ </TooltipTrigger>
209
+ <TooltipContent>
210
+ <p>Delete permanently</p>
211
+ </TooltipContent>
212
+ </Tooltip>
213
+ </div>;
214
+ ```
215
+
216
+ ### Form Help Icons
217
+
218
+ ```tsx
219
+ import { Label } from "@adamosuiteservices/ui/label";
220
+ import { Input } from "@adamosuiteservices/ui/input";
221
+
222
+ <div className="space-y-2">
223
+ <div className="flex items-center gap-2">
224
+ <Label htmlFor="username">Username</Label>
225
+ <Tooltip>
226
+ <TooltipTrigger asChild>
227
+ <Icon symbol="help" className="cursor-help text-lg text-muted-foreground" />
228
+ </TooltipTrigger>
229
+ <TooltipContent>
230
+ <p>
231
+ Must be 3-20 characters long and contain only letters, numbers, and
232
+ underscores
233
+ </p>
234
+ </TooltipContent>
235
+ </Tooltip>
236
+ </div>
237
+ <Input id="username" placeholder="Enter username" />
238
+ </div>;
239
+ ```
240
+
241
+ ### Controlled
242
+
243
+ ```tsx
244
+ import { useState } from "react";
245
+
246
+ function App() {
247
+ const [open, setOpen] = useState(false);
248
+
249
+ return (
250
+ <div className="flex items-center gap-4">
251
+ <Tooltip open={open} onOpenChange={setOpen}>
252
+ <TooltipTrigger asChild>
253
+ <Button>Controlled</Button>
254
+ </TooltipTrigger>
255
+ <TooltipContent>
256
+ <p>Controlled programmatically</p>
257
+ </TooltipContent>
258
+ </Tooltip>
259
+
260
+ <Button size="sm" onClick={() => setOpen(true)}>
261
+ Show
262
+ </Button>
263
+ <Button size="sm" variant="outline" onClick={() => setOpen(false)}>
264
+ Hide
265
+ </Button>
266
+ </div>
267
+ );
268
+ }
269
+ ```
270
+
271
+ ## Casos de Uso
272
+
273
+ **Icon buttons**: Descripción de acciones
274
+ **Form help**: Explicar campos de formulario
275
+ **Status indicators**: Detalles de estados
276
+ **Truncated text**: Mostrar texto completo
277
+ **Disabled elements**: Explicar por qué está deshabilitado
278
+
279
+ ## Estilos Base
280
+
281
+ - **Background**: `bg-primary`
282
+ - **Text**: `text-primary-foreground text-xs`
283
+ - **Padding**: `px-3 py-1.5`
284
+ - **Border radius**: `rounded-md`
285
+ - **Arrow**: `size-2.5` con `bg-primary`
286
+ - **Z-index**: `z-50`
287
+ - **Animation**: Fade + zoom in/out
288
+
289
+ ## Accesibilidad
290
+
291
+ - ✅ **ARIA**: `aria-describedby` automático
292
+ - ✅ **Keyboard**: Visible en focus del trigger
293
+ - ✅ **Hover**: Aparece en hover
294
+ - ✅ **Focus**: Aparece en focus del trigger
295
+ - ✅ **Escape**: Cierra con Escape key
296
+
297
+ ## Notas de Implementación
298
+
299
+ - **Radix UI**: Basado en `@radix-ui/react-tooltip`
300
+ - **Portal**: Content se renderiza en portal (fuera del DOM tree)
301
+ - **Arrow**: Incluido automáticamente en TooltipContent
302
+ - **Provider**: Tooltip individual ya incluye TooltipProvider interno
303
+ - **Global Provider**: Usa TooltipProvider para delay global
304
+
305
+ ## Troubleshooting
306
+
307
+ **Tooltip no aparece**: Verifica que TooltipTrigger tenga `asChild` si es Button/componente
308
+ **Posición incorrecta**: Usa `side` prop en TooltipContent
309
+ **Delay muy largo**: Ajusta `delayDuration` en Tooltip o TooltipProvider
310
+ **Z-index issues**: Tooltip usa `z-50`, puede necesitar ajuste si hay overlays
311
+ **Arrow no visible**: Arrow incluido por default, verifica estilos no sobrescritos
312
+ **No se cierra**: Usa Escape key o mouseleave del trigger
313
+
314
+ ## Referencias
315
+
316
+ - **Radix UI Tooltip**: <https://www.radix-ui.com/primitives/docs/components/tooltip>
317
+ - **shadcn/ui Tooltip**: <https://ui.shadcn.com/docs/components/tooltip>