@adamosuiteservices/ui 1.7.12 → 1.8.13

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 (307) hide show
  1. package/dist/accordion-rounded.cjs +24 -2
  2. package/dist/accordion-rounded.js +46 -8
  3. package/dist/accordion.cjs +20 -1
  4. package/dist/accordion.js +29 -5
  5. package/dist/alert.cjs +26 -1
  6. package/dist/alert.js +33 -8
  7. package/dist/avatar.cjs +7 -1
  8. package/dist/avatar.js +8 -2
  9. package/dist/badge.cjs +83 -1
  10. package/dist/badge.js +106 -24
  11. package/dist/breadcrumb.cjs +8 -1
  12. package/dist/breadcrumb.js +11 -4
  13. package/dist/button-B7ZP4LZN.js +127 -0
  14. package/dist/button-D-qFRXiM.cjs +70 -0
  15. package/dist/button-group.cjs +25 -1
  16. package/dist/button-group.js +33 -9
  17. package/dist/button.cjs +1 -1
  18. package/dist/button.js +1 -1
  19. package/dist/calendar.cjs +74 -1
  20. package/dist/calendar.js +114 -35
  21. package/dist/card.cjs +35 -1
  22. package/dist/card.js +45 -11
  23. package/dist/{checkbox-YWAnswaW.cjs → checkbox-CdnZ8VFJ.cjs} +21 -1
  24. package/dist/{checkbox-Dr487kAg.js → checkbox-DhBcmKze.js} +34 -4
  25. package/dist/checkbox.cjs +1 -1
  26. package/dist/checkbox.js +1 -1
  27. package/dist/combobox.cjs +36 -2
  28. package/dist/combobox.js +302 -253
  29. package/dist/components/icons/account-balance-icon.d.ts +3 -0
  30. package/dist/components/icons/account-icon.d.ts +3 -0
  31. package/dist/components/icons/add-circle-icon.d.ts +3 -0
  32. package/dist/components/icons/alarm-icon.d.ts +3 -0
  33. package/dist/components/icons/archive-icon.d.ts +3 -0
  34. package/dist/components/icons/arrow-back-icon.d.ts +3 -0
  35. package/dist/components/icons/arrow-circle-up-icon.d.ts +3 -0
  36. package/dist/components/icons/arrow-forward-icon.d.ts +3 -0
  37. package/dist/components/icons/arrow-outward-icon.d.ts +3 -0
  38. package/dist/components/icons/article-icon.d.ts +3 -0
  39. package/dist/components/icons/attach-file-icon.d.ts +3 -0
  40. package/dist/components/icons/autorenew-icon.d.ts +3 -0
  41. package/dist/components/icons/bookmark-icon.d.ts +3 -0
  42. package/dist/components/icons/calculate-icon.d.ts +3 -0
  43. package/dist/components/icons/calendar-today-icon.d.ts +3 -0
  44. package/dist/components/icons/call-split-icon.d.ts +3 -0
  45. package/dist/components/icons/cancel-filled-icon.d.ts +3 -0
  46. package/dist/components/icons/cancel-icon.d.ts +3 -0
  47. package/dist/components/icons/check-circle-icon.d.ts +3 -0
  48. package/dist/components/icons/check-icon.d.ts +3 -0
  49. package/dist/components/icons/chevron-back-icon.d.ts +3 -0
  50. package/dist/components/icons/chevron-down-icon.d.ts +3 -0
  51. package/dist/components/icons/chevron-forward-icon.d.ts +3 -0
  52. package/dist/components/icons/chevron-up-icon.d.ts +3 -0
  53. package/dist/components/icons/clarify-icon.d.ts +3 -0
  54. package/dist/components/icons/clock-icon.d.ts +3 -0
  55. package/dist/components/icons/close-icon.d.ts +3 -0
  56. package/dist/components/icons/confirmation-number-icon.d.ts +3 -0
  57. package/dist/components/icons/contacts-icon.d.ts +3 -0
  58. package/dist/components/icons/contract-delete-icon.d.ts +3 -0
  59. package/dist/components/icons/copy-icon.d.ts +3 -0
  60. package/dist/components/icons/do-not-touch-icon.d.ts +3 -0
  61. package/dist/components/icons/download-icon.d.ts +3 -0
  62. package/dist/components/icons/dragger-icon.d.ts +3 -0
  63. package/dist/components/icons/edit-icon.d.ts +3 -0
  64. package/dist/components/icons/edit-square-icon.d.ts +3 -0
  65. package/dist/components/icons/exclamation-icon.d.ts +3 -0
  66. package/dist/components/icons/expand-circle-right-icon.d.ts +3 -0
  67. package/dist/components/icons/feature-search-icon.d.ts +3 -0
  68. package/dist/components/icons/filter-icon.d.ts +3 -0
  69. package/dist/components/icons/folder-icon.d.ts +3 -0
  70. package/dist/components/icons/folder-open-icon.d.ts +3 -0
  71. package/dist/components/icons/format-list-bulleted-icon.d.ts +3 -0
  72. package/dist/components/icons/hamburger-menu-icon.d.ts +3 -0
  73. package/dist/components/icons/help-icon.d.ts +3 -0
  74. package/dist/components/icons/hide-pass-icon.d.ts +3 -0
  75. package/dist/components/icons/home-icon.d.ts +3 -0
  76. package/dist/components/icons/id-card-icon.d.ts +3 -0
  77. package/dist/components/icons/index.d.ts +88 -0
  78. package/dist/components/icons/info-icon.d.ts +3 -0
  79. package/dist/components/icons/kid-star-icon.d.ts +3 -0
  80. package/dist/components/icons/language-icon.d.ts +3 -0
  81. package/dist/components/icons/last-page-icon.d.ts +3 -0
  82. package/dist/components/icons/layers-icon.d.ts +3 -0
  83. package/dist/components/icons/location-icon.d.ts +3 -0
  84. package/dist/components/icons/mail-icon.d.ts +3 -0
  85. package/dist/components/icons/manage-search-icon.d.ts +3 -0
  86. package/dist/components/icons/menu-icon.d.ts +3 -0
  87. package/dist/components/icons/message-icon.d.ts +3 -0
  88. package/dist/components/icons/metrics-icon.d.ts +3 -0
  89. package/dist/components/icons/mic-icon.d.ts +3 -0
  90. package/dist/components/icons/minus-icon.d.ts +3 -0
  91. package/dist/components/icons/mode-comment-icon.d.ts +3 -0
  92. package/dist/components/icons/money-icon.d.ts +3 -0
  93. package/dist/components/icons/monitoring-icon.d.ts +3 -0
  94. package/dist/components/icons/more-icon.d.ts +3 -0
  95. package/dist/components/icons/notifications-icon.d.ts +3 -0
  96. package/dist/components/icons/open-in-new-icon.d.ts +3 -0
  97. package/dist/components/icons/palette-icon.d.ts +3 -0
  98. package/dist/components/icons/password-icon.d.ts +3 -0
  99. package/dist/components/icons/pending-icon.d.ts +3 -0
  100. package/dist/components/icons/person-add-icon.d.ts +3 -0
  101. package/dist/components/icons/person-search-icon.d.ts +3 -0
  102. package/dist/components/icons/photo-icon.d.ts +3 -0
  103. package/dist/components/icons/plus-icon.d.ts +3 -0
  104. package/dist/components/icons/policy-icon.d.ts +3 -0
  105. package/dist/components/icons/publish-icon.d.ts +3 -0
  106. package/dist/components/icons/ready-icon.d.ts +3 -0
  107. package/dist/components/icons/receipt-icon.d.ts +3 -0
  108. package/dist/components/icons/receive-icon.d.ts +3 -0
  109. package/dist/components/icons/refresh-icon.d.ts +3 -0
  110. package/dist/components/icons/search-icon.d.ts +3 -0
  111. package/dist/components/icons/see-icon.d.ts +3 -0
  112. package/dist/components/icons/send-icon.d.ts +3 -0
  113. package/dist/components/icons/settings-icon.d.ts +3 -0
  114. package/dist/components/icons/shield-icon.d.ts +3 -0
  115. package/dist/components/icons/swap-horiz-icon.d.ts +3 -0
  116. package/dist/components/icons/tag-icon.d.ts +3 -0
  117. package/dist/components/icons/trash-icon.d.ts +3 -0
  118. package/dist/components/layout/toaster/toaster.d.ts +1 -1
  119. package/dist/components/layout/toaster/toaster.stories.d.ts +1 -1
  120. package/dist/components/ui/accordion/accordion.d.ts +1 -1
  121. package/dist/components/ui/accordion/accordion.stories.d.ts +1 -1
  122. package/dist/components/ui/accordion-rounded/accordion-rounded.d.ts +1 -1
  123. package/dist/components/ui/accordion-rounded/accordion-rounded.stories.d.ts +1 -1
  124. package/dist/components/ui/alert/alert.stories.d.ts +1 -1
  125. package/dist/components/ui/avatar/avatar.d.ts +1 -1
  126. package/dist/components/ui/avatar/avatar.stories.d.ts +1 -1
  127. package/dist/components/ui/badge/badge.stories.d.ts +1 -1
  128. package/dist/components/ui/breadcrumb/breadcrumb.stories.d.ts +1 -1
  129. package/dist/components/ui/button/button.stories.d.ts +1 -1
  130. package/dist/components/ui/button-group/button-group.d.ts +1 -1
  131. package/dist/components/ui/button-group/button-group.stories.d.ts +1 -1
  132. package/dist/components/ui/calendar/calendar.d.ts +1 -1
  133. package/dist/components/ui/calendar/calendar.stories.d.ts +1 -1
  134. package/dist/components/ui/card/card.stories.d.ts +1 -1
  135. package/dist/components/ui/checkbox/checkbox.d.ts +1 -1
  136. package/dist/components/ui/checkbox/checkbox.stories.d.ts +1 -1
  137. package/dist/components/ui/collapsible/collapsible.stories.d.ts +1 -1
  138. package/dist/components/ui/combobox/combobox.stories.d.ts +1 -1
  139. package/dist/components/ui/command/command.d.ts +1 -1
  140. package/dist/components/ui/context-menu/context-menu.d.ts +1 -1
  141. package/dist/components/ui/context-menu/context-menu.stories.d.ts +1 -1
  142. package/dist/components/ui/dialog/dialog.d.ts +1 -1
  143. package/dist/components/ui/dialog/dialog.stories.d.ts +1 -1
  144. package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +1 -1
  145. package/dist/components/ui/dropdown-menu/dropdown-menu.stories.d.ts +1 -1
  146. package/dist/components/ui/field/field.d.ts +1 -1
  147. package/dist/components/ui/field/field.stories.d.ts +1 -1
  148. package/dist/components/ui/hover-card/hover-card.d.ts +1 -1
  149. package/dist/components/ui/hover-card/hover-card.stories.d.ts +1 -1
  150. package/dist/components/ui/input/input.stories.d.ts +1 -1
  151. package/dist/components/ui/input-group/Input-group.stories.d.ts +1 -1
  152. package/dist/components/ui/input-group/input-group.d.ts +1 -1
  153. package/dist/components/ui/kbd/kbd.stories.d.ts +1 -1
  154. package/dist/components/ui/label/label.d.ts +1 -1
  155. package/dist/components/ui/label/label.stories.d.ts +1 -1
  156. package/dist/components/ui/pagination/pagination.stories.d.ts +1 -1
  157. package/dist/components/ui/popover/popover.d.ts +1 -1
  158. package/dist/components/ui/popover/popover.stories.d.ts +1 -1
  159. package/dist/components/ui/progress/progress.d.ts +1 -1
  160. package/dist/components/ui/progress/progress.stories.d.ts +1 -1
  161. package/dist/components/ui/radio-group/radio-group.d.ts +1 -1
  162. package/dist/components/ui/radio-group/radio-group.stories.d.ts +1 -1
  163. package/dist/components/ui/scroll-area/scroll-area.d.ts +1 -1
  164. package/dist/components/ui/scroll-area/scroll-area.stories.d.ts +1 -1
  165. package/dist/components/ui/select/select.d.ts +1 -1
  166. package/dist/components/ui/select/select.stories.d.ts +1 -1
  167. package/dist/components/ui/separator/separator.d.ts +1 -1
  168. package/dist/components/ui/separator/separator.stories.d.ts +1 -1
  169. package/dist/components/ui/sheet/sheet.d.ts +1 -1
  170. package/dist/components/ui/sheet/sheet.stories.d.ts +1 -1
  171. package/dist/components/ui/skeleton/skeleton.stories.d.ts +1 -1
  172. package/dist/components/ui/slider/slider.d.ts +1 -1
  173. package/dist/components/ui/slider/slider.stories.d.ts +1 -1
  174. package/dist/components/ui/spinner/spinner.stories.d.ts +1 -1
  175. package/dist/components/ui/switch/switch.d.ts +1 -1
  176. package/dist/components/ui/switch/switch.stories.d.ts +1 -1
  177. package/dist/components/ui/tabs/tabs.d.ts +1 -1
  178. package/dist/components/ui/tabs/tabs.stories.d.ts +1 -1
  179. package/dist/components/ui/tabs-underline/tabs-underline.d.ts +1 -1
  180. package/dist/components/ui/tabs-underline/tabs-underline.stories.d.ts +1 -1
  181. package/dist/components/ui/textarea/textarea.stories.d.ts +1 -1
  182. package/dist/components/ui/toggle/toggle.d.ts +1 -1
  183. package/dist/components/ui/toggle/toggle.stories.d.ts +1 -1
  184. package/dist/components/ui/tooltip/tooltip.d.ts +1 -1
  185. package/dist/components/ui/tooltip/tooltip.stories.d.ts +1 -1
  186. package/dist/context-menu.cjs +79 -1
  187. package/dist/context-menu.js +101 -11
  188. package/dist/custom-layered-styles.css +1 -1
  189. package/dist/dialog.cjs +30 -1
  190. package/dist/dialog.js +35 -6
  191. package/dist/dropdown-menu.cjs +79 -1
  192. package/dist/dropdown-menu.js +101 -11
  193. package/dist/field.cjs +66 -1
  194. package/dist/field.js +91 -26
  195. package/dist/hover-card.cjs +15 -1
  196. package/dist/hover-card.js +15 -1
  197. package/dist/icons.cjs +1 -0
  198. package/dist/icons.js +1507 -0
  199. package/dist/input-BQZUpTEY.js +42 -0
  200. package/dist/input-DSmxdfq5.cjs +21 -0
  201. package/dist/input-group.cjs +76 -1
  202. package/dist/input-group.js +99 -24
  203. package/dist/input.cjs +1 -1
  204. package/dist/input.js +1 -1
  205. package/dist/kbd.cjs +10 -1
  206. package/dist/kbd.js +11 -2
  207. package/dist/{label-CmwGvhy1.js → label-BJ8Yf6Ft.js} +7 -1
  208. package/dist/{label-BjXORCBM.cjs → label-CNGQhi5L.cjs} +7 -1
  209. package/dist/label.cjs +1 -1
  210. package/dist/label.js +1 -1
  211. package/dist/pagination.cjs +13 -1
  212. package/dist/pagination.js +30 -6
  213. package/dist/{popover-FCKBtFo-.cjs → popover-CYbik-H4.cjs} +15 -1
  214. package/dist/{popover-3rIoNCXs.js → popover-DAwH8jUh.js} +15 -1
  215. package/dist/popover.cjs +1 -1
  216. package/dist/popover.js +1 -1
  217. package/dist/radio-group.cjs +14 -1
  218. package/dist/radio-group.js +20 -2
  219. package/dist/select.cjs +68 -1
  220. package/dist/select.js +83 -10
  221. package/dist/{separator-BaZqZZ9R.cjs → separator-Brpax0EI.cjs} +7 -1
  222. package/dist/{separator-DR7lQjv9.js → separator-DVypR3Qf.js} +7 -1
  223. package/dist/separator.cjs +1 -1
  224. package/dist/separator.js +1 -1
  225. package/dist/sheet-CGahUP7F.cjs +41 -0
  226. package/dist/sheet-Q3dBOQG-.js +174 -0
  227. package/dist/sheet.cjs +1 -1
  228. package/dist/sheet.js +1 -1
  229. package/dist/sidebar.cjs +20 -2
  230. package/dist/sidebar.js +58 -26
  231. package/dist/skeleton.cjs +1 -1
  232. package/dist/skeleton.js +1 -1
  233. package/dist/slider.cjs +27 -1
  234. package/dist/slider.js +30 -4
  235. package/dist/space.css +1 -1
  236. package/dist/styles.css +1 -1
  237. package/dist/switch.cjs +18 -1
  238. package/dist/switch.js +19 -2
  239. package/dist/table.cjs +20 -1
  240. package/dist/table.js +26 -7
  241. package/dist/tabs-underline.cjs +21 -1
  242. package/dist/tabs-underline.js +23 -3
  243. package/dist/tabs.cjs +22 -1
  244. package/dist/tabs.js +24 -3
  245. package/dist/textarea-CG7iQcb3.cjs +14 -0
  246. package/dist/textarea-CUPWKl-S.js +32 -0
  247. package/dist/textarea.cjs +1 -1
  248. package/dist/textarea.js +1 -1
  249. package/dist/toaster.cjs +4 -1
  250. package/dist/toaster.js +9 -6
  251. package/dist/toggle.cjs +17 -1
  252. package/dist/toggle.js +25 -9
  253. package/dist/tooltip.cjs +16 -1
  254. package/dist/tooltip.js +22 -2
  255. package/dist/typography.cjs +1 -1
  256. package/dist/typography.js +6 -6
  257. package/docs/AI-GUIDE.md +321 -321
  258. package/docs/components/layout/sidebar.md +404 -404
  259. package/docs/components/layout/toaster.md +436 -436
  260. package/docs/components/ui/accordion-rounded.md +583 -583
  261. package/docs/components/ui/accordion.md +267 -267
  262. package/docs/components/ui/alert.md +671 -671
  263. package/docs/components/ui/avatar.md +588 -588
  264. package/docs/components/ui/badge.md +1024 -1024
  265. package/docs/components/ui/button-group.md +1002 -1002
  266. package/docs/components/ui/button.md +1078 -1078
  267. package/docs/components/ui/calendar.md +1159 -1159
  268. package/docs/components/ui/card.md +1265 -1265
  269. package/docs/components/ui/checkbox.md +292 -292
  270. package/docs/components/ui/collapsible.md +320 -320
  271. package/docs/components/ui/command.md +454 -454
  272. package/docs/components/ui/context-menu.md +540 -540
  273. package/docs/components/ui/dialog.md +628 -628
  274. package/docs/components/ui/dropdown-menu.md +731 -731
  275. package/docs/components/ui/field.md +706 -706
  276. package/docs/components/ui/hover-card.md +446 -446
  277. package/docs/components/ui/input-group.md +509 -509
  278. package/docs/components/ui/input.md +362 -362
  279. package/docs/components/ui/kbd.md +434 -434
  280. package/docs/components/ui/label.md +359 -359
  281. package/docs/components/ui/pagination.md +650 -650
  282. package/docs/components/ui/popover.md +536 -536
  283. package/docs/components/ui/progress.md +182 -182
  284. package/docs/components/ui/radio-group.md +311 -311
  285. package/docs/components/ui/select.md +352 -352
  286. package/docs/components/ui/separator.md +214 -214
  287. package/docs/components/ui/sheet.md +142 -142
  288. package/docs/components/ui/skeleton.md +140 -140
  289. package/docs/components/ui/slider.md +341 -341
  290. package/docs/components/ui/spinner.md +170 -170
  291. package/docs/components/ui/switch.md +402 -402
  292. package/docs/components/ui/table.md +183 -183
  293. package/docs/components/ui/tabs-underline.md +106 -106
  294. package/docs/components/ui/tabs.md +122 -122
  295. package/docs/components/ui/textarea.md +243 -243
  296. package/docs/components/ui/toggle.md +243 -243
  297. package/docs/components/ui/tooltip.md +320 -320
  298. package/docs/components/ui/typography.md +191 -191
  299. package/package.json +7 -1
  300. package/dist/button-2GdKenQI.js +0 -58
  301. package/dist/button-DEQVHMrX.cjs +0 -1
  302. package/dist/input-BF73maXg.cjs +0 -1
  303. package/dist/input-C04hsVXE.js +0 -22
  304. package/dist/sheet-B-9YHdR5.js +0 -128
  305. package/dist/sheet-CU-sFSaJ.cjs +0 -1
  306. package/dist/textarea-3ZdbFRDN.cjs +0 -1
  307. package/dist/textarea-BZbcAAAu.js +0 -19
@@ -1,352 +1,352 @@
1
- # Select
2
-
3
- Dropdown de selección con búsqueda y scroll. Basado en Radix UI con 10 subcomponentes.
4
-
5
- ## Descripción
6
-
7
- El componente `Select` muestra una lista de opciones en las que el usuario puede seleccionar una opción de la lista.
8
-
9
- ## Importación
10
-
11
- ```typescript
12
- import {
13
- Select,
14
- SelectContent,
15
- SelectGroup,
16
- SelectItem,
17
- SelectLabel,
18
- SelectTrigger,
19
- SelectValue,
20
- } from "@adamosuiteservices/ui/select";
21
- ```
22
-
23
- ## Anatomía
24
-
25
- ```tsx
26
- <Select>
27
- <SelectTrigger className="w-[180px]">
28
- <SelectValue placeholder="Select option" />
29
- </SelectTrigger>
30
- <SelectContent>
31
- <SelectItem value="option1">Option 1</SelectItem>
32
- <SelectItem value="option2">Option 2</SelectItem>
33
- </SelectContent>
34
- </Select>
35
- ```
36
-
37
- **Componentes**: 10 (Select, SelectTrigger, SelectValue, SelectContent, SelectItem, SelectGroup, SelectLabel, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton)
38
-
39
- ## Props
40
-
41
- ### Select (Root)
42
-
43
- | Prop | Tipo | Descripción |
44
- | --------------- | ------------------------- | ---------------------------- |
45
- | `defaultValue` | `string` | Valor inicial (uncontrolled) |
46
- | `value` | `string` | Valor controlado |
47
- | `onValueChange` | `(value: string) => void` | Callback al cambiar valor |
48
- | `disabled` | `boolean` | Deshabilita el select |
49
- | `required` | `boolean` | Campo requerido |
50
- | `name` | `string` | Nombre (formularios) |
51
-
52
- ### SelectTrigger
53
-
54
- | Prop | Tipo | Descripción |
55
- | ----------- | ------------------- | ---------------------- |
56
- | `size` | `"sm" \| "default"` | Tamaño del trigger |
57
- | `className` | `string` | Clases CSS adicionales |
58
-
59
- **Nota**: `size="sm"` = h-8, `size="default"` = h-9
60
-
61
- ### SelectValue
62
-
63
- | Prop | Tipo | Descripción |
64
- | ------------- | -------- | ----------------------------- |
65
- | `placeholder` | `string` | Texto cuando no hay selección |
66
-
67
- ### SelectContent
68
-
69
- | Prop | Tipo | Descripción |
70
- | ----------- | ------------------------------ | ---------------------- |
71
- | `position` | `"popper" \| "item-aligned"` | Posición del dropdown |
72
- | `align` | `"start" \| "center" \| "end"` | Alineación horizontal |
73
- | `className` | `string` | Clases CSS adicionales |
74
-
75
- ### SelectItem
76
-
77
- | Prop | Tipo | Descripción |
78
- | ----------- | --------- | ---------------------- |
79
- | `value` | `string` | Valor único del item |
80
- | `disabled` | `boolean` | Deshabilita este item |
81
- | `className` | `string` | Clases CSS adicionales |
82
-
83
- ### SelectLabel
84
-
85
- | Prop | Tipo | Descripción |
86
- | ----------- | -------- | ---------------------------------- |
87
- | `className` | `string` | Clases CSS para el label del grupo |
88
-
89
- ## Patrones de Uso
90
-
91
- ### Básico
92
-
93
- ```tsx
94
- import {
95
- Select,
96
- SelectContent,
97
- SelectItem,
98
- SelectTrigger,
99
- SelectValue,
100
- } from "@adamosuiteservices/ui/select";
101
-
102
- <Select>
103
- <SelectTrigger className="w-[180px]">
104
- <SelectValue placeholder="Select a theme" />
105
- </SelectTrigger>
106
- <SelectContent>
107
- <SelectItem value="light">Light</SelectItem>
108
- <SelectItem value="dark">Dark</SelectItem>
109
- <SelectItem value="system">System</SelectItem>
110
- </SelectContent>
111
- </Select>;
112
- ```
113
-
114
- ### Controlado
115
-
116
- ```tsx
117
- import { useState } from "react";
118
-
119
- function App() {
120
- const [value, setValue] = useState("");
121
-
122
- return (
123
- <Select value={value} onValueChange={setValue}>
124
- <SelectTrigger className="w-[180px]">
125
- <SelectValue placeholder="Select a language" />
126
- </SelectTrigger>
127
- <SelectContent>
128
- <SelectItem value="javascript">JavaScript</SelectItem>
129
- <SelectItem value="typescript">TypeScript</SelectItem>
130
- <SelectItem value="python">Python</SelectItem>
131
- </SelectContent>
132
- </Select>
133
- );
134
- }
135
- ```
136
-
137
- ### Con Label
138
-
139
- ```tsx
140
- import { Label } from "@adamosuiteservices/ui/label";
141
-
142
- <div className="grid w-full max-w-sm items-center gap-2">
143
- <Label htmlFor="email-provider">Email provider</Label>
144
- <Select>
145
- <SelectTrigger id="email-provider">
146
- <SelectValue placeholder="Select a provider" />
147
- </SelectTrigger>
148
- <SelectContent>
149
- <SelectItem value="gmail">Gmail</SelectItem>
150
- <SelectItem value="outlook">Outlook</SelectItem>
151
- <SelectItem value="yahoo">Yahoo</SelectItem>
152
- </SelectContent>
153
- </Select>
154
- </div>;
155
- ```
156
-
157
- ### Con Grupos
158
-
159
- ```tsx
160
- import { SelectGroup, SelectLabel } from "@adamosuiteservices/ui/select";
161
-
162
- <Select>
163
- <SelectTrigger className="w-[200px]">
164
- <SelectValue placeholder="Select a fruit" />
165
- </SelectTrigger>
166
- <SelectContent>
167
- <SelectGroup>
168
- <SelectLabel>Fruits</SelectLabel>
169
- <SelectItem value="apple">Apple</SelectItem>
170
- <SelectItem value="banana">Banana</SelectItem>
171
- <SelectItem value="blueberry">Blueberry</SelectItem>
172
- </SelectGroup>
173
- </SelectContent>
174
- </Select>;
175
- ```
176
-
177
- ### Con Iconos
178
-
179
- ```tsx
180
- import { Apple, Banana, Cherry } from "lucide-react";
181
-
182
- <Select>
183
- <SelectTrigger className="w-[200px]">
184
- <SelectValue placeholder="Select a fruit" />
185
- </SelectTrigger>
186
- <SelectContent>
187
- <SelectItem value="apple">
188
- <Apple className="mr-2 h-4 w-4" />
189
- Apple
190
- </SelectItem>
191
- <SelectItem value="banana">
192
- <Banana className="mr-2 h-4 w-4" />
193
- Banana
194
- </SelectItem>
195
- <SelectItem value="cherry">
196
- <Cherry className="mr-2 h-4 w-4" />
197
- Cherry
198
- </SelectItem>
199
- </SelectContent>
200
- </Select>;
201
- ```
202
-
203
- ### Tamaño Pequeño
204
-
205
- ```tsx
206
- <Select>
207
- <SelectTrigger size="sm" className="w-[160px]">
208
- <SelectValue placeholder="Small select" />
209
- </SelectTrigger>
210
- <SelectContent>
211
- <SelectItem value="xs">Extra Small</SelectItem>
212
- <SelectItem value="sm">Small</SelectItem>
213
- <SelectItem value="md">Medium</SelectItem>
214
- </SelectContent>
215
- </Select>
216
- ```
217
-
218
- ### Scrollable
219
-
220
- ```tsx
221
- <Select>
222
- <SelectTrigger className="w-[280px]">
223
- <SelectValue placeholder="Select a timezone" />
224
- </SelectTrigger>
225
- <SelectContent>
226
- <SelectGroup>
227
- <SelectLabel>North America</SelectLabel>
228
- <SelectItem value="est">Eastern Standard Time (EST)</SelectItem>
229
- <SelectItem value="cst">Central Standard Time (CST)</SelectItem>
230
- <SelectItem value="mst">Mountain Standard Time (MST)</SelectItem>
231
- <SelectItem value="pst">Pacific Standard Time (PST)</SelectItem>
232
- </SelectGroup>
233
- <SelectGroup>
234
- <SelectLabel>Europe & Africa</SelectLabel>
235
- <SelectItem value="gmt">Greenwich Mean Time (GMT)</SelectItem>
236
- <SelectItem value="cet">Central European Time (CET)</SelectItem>
237
- <SelectItem value="eet">Eastern European Time (EET)</SelectItem>
238
- </SelectGroup>
239
- </SelectContent>
240
- </Select>
241
- ```
242
-
243
- ### Con Validación
244
-
245
- ```tsx
246
- import { Button } from "@adamosuiteservices/ui/button";
247
-
248
- function App() {
249
- const [value, setValue] = useState("");
250
- const [error, setError] = useState("");
251
-
252
- const handleValidate = () => {
253
- if (!value) {
254
- setError("Please select a priority level");
255
- } else {
256
- setError("");
257
- }
258
- };
259
-
260
- return (
261
- <div className="space-y-4">
262
- <div className="grid w-full max-w-sm items-center gap-2">
263
- <Label htmlFor="priority">
264
- Priority level <span className="text-destructive">*</span>
265
- </Label>
266
- <Select value={value} onValueChange={setValue}>
267
- <SelectTrigger
268
- id="priority"
269
- className={error ? "border-destructive" : ""}
270
- >
271
- <SelectValue placeholder="Select priority" />
272
- </SelectTrigger>
273
- <SelectContent>
274
- <SelectItem value="low">Low</SelectItem>
275
- <SelectItem value="medium">Medium</SelectItem>
276
- <SelectItem value="high">High</SelectItem>
277
- </SelectContent>
278
- </Select>
279
- {error && <p className="text-destructive text-sm">{error}</p>}
280
- </div>
281
- <Button onClick={handleValidate} variant="outline">
282
- Validate Selection
283
- </Button>
284
- </div>
285
- );
286
- }
287
- ```
288
-
289
- ### Deshabilitado
290
-
291
- ```tsx
292
- <Select disabled>
293
- <SelectTrigger className="w-[180px]">
294
- <SelectValue placeholder="Select a theme" />
295
- </SelectTrigger>
296
- <SelectContent>
297
- <SelectItem value="light">Light</SelectItem>
298
- <SelectItem value="dark">Dark</SelectItem>
299
- </SelectContent>
300
- </Select>
301
- ```
302
-
303
- ## Casos de Uso### Configuración
304
-
305
- ```tsx## Casos de Uso
306
-
307
- **Selección simple**: Elegir una opción de lista larga
308
- **Formularios**: País, estado, categoría, idioma
309
- **Filtros**: Ordenar por, filtrar por tipo
310
- **Settings**: Theme, tamaño de texto, timezone
311
- **Navegación**: Cambio rápido entre secciones/vistas
312
-
313
- ## Estilos Base
314
-
315
- - **Trigger height**: `h-9` (default), `h-8` (sm)
316
- - **Border**: `border-input` con `shadow-xs`
317
- - **Focus**: `ring-ring/50` con `ring-[3px]`
318
- - **Content**: `bg-popover` con `shadow-md` y `border`
319
- - **Item hover**: `bg-accent text-accent-foreground`
320
- - **Check icon**: `CheckIcon` size-4 en item seleccionado
321
-
322
- ## Accesibilidad
323
-
324
- - ✅ **Role**: `role="combobox"` en trigger, `role="option"` en items
325
- - ✅ **ARIA**: `aria-expanded`, `aria-controls`, `aria-selected`
326
- - ✅ **Keyboard**: Arrow keys, Enter, Escape, Type-ahead search
327
- - ✅ **Focus**: Focus trap en content abierto
328
- - ✅ **Label**: Asociar con `id` en SelectTrigger
329
-
330
- ## Notas de Implementación
331
-
332
- - **Radix UI**: Basado en `@radix-ui/react-select`
333
- - **Portal**: SelectContent se renderiza en portal
334
- - **Iconos**: ChevronDown en trigger, CheckIcon en items seleccionados
335
- - **Scroll buttons**: Auto-mostrados cuando content es scrollable
336
- - **Position**: `popper` (default) para absolute positioning
337
- - **Type-ahead**: Buscar items escribiendo
338
-
339
- ## Troubleshooting
340
-
341
- **Dropdown no abre**: Verifica que SelectContent esté dentro de Select
342
- **No muestra valor**: Asegura que `value` del item seleccionado coincida con `value` del Select
343
- **Portal issues**: SelectContent usa Portal, puede afectar z-index
344
- **Width mismatch**: SelectTrigger necesita `className="w-[Xpx]"` explícito
345
- **Scroll no funciona**: Scroll automático cuando items exceden max-height
346
- **Placeholder no desaparece**: SelectValue.placeholder solo visible cuando no hay valor
347
-
348
- ## Referencias
349
-
350
- - **Radix UI Select**: <https://www.radix-ui.com/primitives/docs/components/select>
351
- - **shadcn/ui Select**: <https://ui.shadcn.com/docs/components/select>
352
- ```
1
+ # Select
2
+
3
+ Dropdown de selección con búsqueda y scroll. Basado en Radix UI con 10 subcomponentes.
4
+
5
+ ## Descripción
6
+
7
+ El componente `Select` muestra una lista de opciones en las que el usuario puede seleccionar una opción de la lista.
8
+
9
+ ## Importación
10
+
11
+ ```typescript
12
+ import {
13
+ Select,
14
+ SelectContent,
15
+ SelectGroup,
16
+ SelectItem,
17
+ SelectLabel,
18
+ SelectTrigger,
19
+ SelectValue,
20
+ } from "@adamosuiteservices/ui/select";
21
+ ```
22
+
23
+ ## Anatomía
24
+
25
+ ```tsx
26
+ <Select>
27
+ <SelectTrigger className="w-[180px]">
28
+ <SelectValue placeholder="Select option" />
29
+ </SelectTrigger>
30
+ <SelectContent>
31
+ <SelectItem value="option1">Option 1</SelectItem>
32
+ <SelectItem value="option2">Option 2</SelectItem>
33
+ </SelectContent>
34
+ </Select>
35
+ ```
36
+
37
+ **Componentes**: 10 (Select, SelectTrigger, SelectValue, SelectContent, SelectItem, SelectGroup, SelectLabel, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton)
38
+
39
+ ## Props
40
+
41
+ ### Select (Root)
42
+
43
+ | Prop | Tipo | Descripción |
44
+ | --------------- | ------------------------- | ---------------------------- |
45
+ | `defaultValue` | `string` | Valor inicial (uncontrolled) |
46
+ | `value` | `string` | Valor controlado |
47
+ | `onValueChange` | `(value: string) => void` | Callback al cambiar valor |
48
+ | `disabled` | `boolean` | Deshabilita el select |
49
+ | `required` | `boolean` | Campo requerido |
50
+ | `name` | `string` | Nombre (formularios) |
51
+
52
+ ### SelectTrigger
53
+
54
+ | Prop | Tipo | Descripción |
55
+ | ----------- | ------------------- | ---------------------- |
56
+ | `size` | `"sm" \| "default"` | Tamaño del trigger |
57
+ | `className` | `string` | Clases CSS adicionales |
58
+
59
+ **Nota**: `size="sm"` = h-8, `size="default"` = h-9
60
+
61
+ ### SelectValue
62
+
63
+ | Prop | Tipo | Descripción |
64
+ | ------------- | -------- | ----------------------------- |
65
+ | `placeholder` | `string` | Texto cuando no hay selección |
66
+
67
+ ### SelectContent
68
+
69
+ | Prop | Tipo | Descripción |
70
+ | ----------- | ------------------------------ | ---------------------- |
71
+ | `position` | `"popper" \| "item-aligned"` | Posición del dropdown |
72
+ | `align` | `"start" \| "center" \| "end"` | Alineación horizontal |
73
+ | `className` | `string` | Clases CSS adicionales |
74
+
75
+ ### SelectItem
76
+
77
+ | Prop | Tipo | Descripción |
78
+ | ----------- | --------- | ---------------------- |
79
+ | `value` | `string` | Valor único del item |
80
+ | `disabled` | `boolean` | Deshabilita este item |
81
+ | `className` | `string` | Clases CSS adicionales |
82
+
83
+ ### SelectLabel
84
+
85
+ | Prop | Tipo | Descripción |
86
+ | ----------- | -------- | ---------------------------------- |
87
+ | `className` | `string` | Clases CSS para el label del grupo |
88
+
89
+ ## Patrones de Uso
90
+
91
+ ### Básico
92
+
93
+ ```tsx
94
+ import {
95
+ Select,
96
+ SelectContent,
97
+ SelectItem,
98
+ SelectTrigger,
99
+ SelectValue,
100
+ } from "@adamosuiteservices/ui/select";
101
+
102
+ <Select>
103
+ <SelectTrigger className="w-[180px]">
104
+ <SelectValue placeholder="Select a theme" />
105
+ </SelectTrigger>
106
+ <SelectContent>
107
+ <SelectItem value="light">Light</SelectItem>
108
+ <SelectItem value="dark">Dark</SelectItem>
109
+ <SelectItem value="system">System</SelectItem>
110
+ </SelectContent>
111
+ </Select>;
112
+ ```
113
+
114
+ ### Controlado
115
+
116
+ ```tsx
117
+ import { useState } from "react";
118
+
119
+ function App() {
120
+ const [value, setValue] = useState("");
121
+
122
+ return (
123
+ <Select value={value} onValueChange={setValue}>
124
+ <SelectTrigger className="w-[180px]">
125
+ <SelectValue placeholder="Select a language" />
126
+ </SelectTrigger>
127
+ <SelectContent>
128
+ <SelectItem value="javascript">JavaScript</SelectItem>
129
+ <SelectItem value="typescript">TypeScript</SelectItem>
130
+ <SelectItem value="python">Python</SelectItem>
131
+ </SelectContent>
132
+ </Select>
133
+ );
134
+ }
135
+ ```
136
+
137
+ ### Con Label
138
+
139
+ ```tsx
140
+ import { Label } from "@adamosuiteservices/ui/label";
141
+
142
+ <div className="grid w-full max-w-sm items-center gap-2">
143
+ <Label htmlFor="email-provider">Email provider</Label>
144
+ <Select>
145
+ <SelectTrigger id="email-provider">
146
+ <SelectValue placeholder="Select a provider" />
147
+ </SelectTrigger>
148
+ <SelectContent>
149
+ <SelectItem value="gmail">Gmail</SelectItem>
150
+ <SelectItem value="outlook">Outlook</SelectItem>
151
+ <SelectItem value="yahoo">Yahoo</SelectItem>
152
+ </SelectContent>
153
+ </Select>
154
+ </div>;
155
+ ```
156
+
157
+ ### Con Grupos
158
+
159
+ ```tsx
160
+ import { SelectGroup, SelectLabel } from "@adamosuiteservices/ui/select";
161
+
162
+ <Select>
163
+ <SelectTrigger className="w-[200px]">
164
+ <SelectValue placeholder="Select a fruit" />
165
+ </SelectTrigger>
166
+ <SelectContent>
167
+ <SelectGroup>
168
+ <SelectLabel>Fruits</SelectLabel>
169
+ <SelectItem value="apple">Apple</SelectItem>
170
+ <SelectItem value="banana">Banana</SelectItem>
171
+ <SelectItem value="blueberry">Blueberry</SelectItem>
172
+ </SelectGroup>
173
+ </SelectContent>
174
+ </Select>;
175
+ ```
176
+
177
+ ### Con Iconos
178
+
179
+ ```tsx
180
+ import { Apple, Banana, Cherry } from "lucide-react";
181
+
182
+ <Select>
183
+ <SelectTrigger className="w-[200px]">
184
+ <SelectValue placeholder="Select a fruit" />
185
+ </SelectTrigger>
186
+ <SelectContent>
187
+ <SelectItem value="apple">
188
+ <Apple className="mr-2 h-4 w-4" />
189
+ Apple
190
+ </SelectItem>
191
+ <SelectItem value="banana">
192
+ <Banana className="mr-2 h-4 w-4" />
193
+ Banana
194
+ </SelectItem>
195
+ <SelectItem value="cherry">
196
+ <Cherry className="mr-2 h-4 w-4" />
197
+ Cherry
198
+ </SelectItem>
199
+ </SelectContent>
200
+ </Select>;
201
+ ```
202
+
203
+ ### Tamaño Pequeño
204
+
205
+ ```tsx
206
+ <Select>
207
+ <SelectTrigger size="sm" className="w-[160px]">
208
+ <SelectValue placeholder="Small select" />
209
+ </SelectTrigger>
210
+ <SelectContent>
211
+ <SelectItem value="xs">Extra Small</SelectItem>
212
+ <SelectItem value="sm">Small</SelectItem>
213
+ <SelectItem value="md">Medium</SelectItem>
214
+ </SelectContent>
215
+ </Select>
216
+ ```
217
+
218
+ ### Scrollable
219
+
220
+ ```tsx
221
+ <Select>
222
+ <SelectTrigger className="w-[280px]">
223
+ <SelectValue placeholder="Select a timezone" />
224
+ </SelectTrigger>
225
+ <SelectContent>
226
+ <SelectGroup>
227
+ <SelectLabel>North America</SelectLabel>
228
+ <SelectItem value="est">Eastern Standard Time (EST)</SelectItem>
229
+ <SelectItem value="cst">Central Standard Time (CST)</SelectItem>
230
+ <SelectItem value="mst">Mountain Standard Time (MST)</SelectItem>
231
+ <SelectItem value="pst">Pacific Standard Time (PST)</SelectItem>
232
+ </SelectGroup>
233
+ <SelectGroup>
234
+ <SelectLabel>Europe & Africa</SelectLabel>
235
+ <SelectItem value="gmt">Greenwich Mean Time (GMT)</SelectItem>
236
+ <SelectItem value="cet">Central European Time (CET)</SelectItem>
237
+ <SelectItem value="eet">Eastern European Time (EET)</SelectItem>
238
+ </SelectGroup>
239
+ </SelectContent>
240
+ </Select>
241
+ ```
242
+
243
+ ### Con Validación
244
+
245
+ ```tsx
246
+ import { Button } from "@adamosuiteservices/ui/button";
247
+
248
+ function App() {
249
+ const [value, setValue] = useState("");
250
+ const [error, setError] = useState("");
251
+
252
+ const handleValidate = () => {
253
+ if (!value) {
254
+ setError("Please select a priority level");
255
+ } else {
256
+ setError("");
257
+ }
258
+ };
259
+
260
+ return (
261
+ <div className="space-y-4">
262
+ <div className="grid w-full max-w-sm items-center gap-2">
263
+ <Label htmlFor="priority">
264
+ Priority level <span className="text-destructive">*</span>
265
+ </Label>
266
+ <Select value={value} onValueChange={setValue}>
267
+ <SelectTrigger
268
+ id="priority"
269
+ className={error ? "border-destructive" : ""}
270
+ >
271
+ <SelectValue placeholder="Select priority" />
272
+ </SelectTrigger>
273
+ <SelectContent>
274
+ <SelectItem value="low">Low</SelectItem>
275
+ <SelectItem value="medium">Medium</SelectItem>
276
+ <SelectItem value="high">High</SelectItem>
277
+ </SelectContent>
278
+ </Select>
279
+ {error && <p className="text-destructive text-sm">{error}</p>}
280
+ </div>
281
+ <Button onClick={handleValidate} variant="outline">
282
+ Validate Selection
283
+ </Button>
284
+ </div>
285
+ );
286
+ }
287
+ ```
288
+
289
+ ### Deshabilitado
290
+
291
+ ```tsx
292
+ <Select disabled>
293
+ <SelectTrigger className="w-[180px]">
294
+ <SelectValue placeholder="Select a theme" />
295
+ </SelectTrigger>
296
+ <SelectContent>
297
+ <SelectItem value="light">Light</SelectItem>
298
+ <SelectItem value="dark">Dark</SelectItem>
299
+ </SelectContent>
300
+ </Select>
301
+ ```
302
+
303
+ ## Casos de Uso### Configuración
304
+
305
+ ```tsx## Casos de Uso
306
+
307
+ **Selección simple**: Elegir una opción de lista larga
308
+ **Formularios**: País, estado, categoría, idioma
309
+ **Filtros**: Ordenar por, filtrar por tipo
310
+ **Settings**: Theme, tamaño de texto, timezone
311
+ **Navegación**: Cambio rápido entre secciones/vistas
312
+
313
+ ## Estilos Base
314
+
315
+ - **Trigger height**: `h-9` (default), `h-8` (sm)
316
+ - **Border**: `border-input` con `shadow-xs`
317
+ - **Focus**: `ring-ring/50` con `ring-[3px]`
318
+ - **Content**: `bg-popover` con `shadow-md` y `border`
319
+ - **Item hover**: `bg-accent text-accent-foreground`
320
+ - **Check icon**: `CheckIcon` size-4 en item seleccionado
321
+
322
+ ## Accesibilidad
323
+
324
+ - ✅ **Role**: `role="combobox"` en trigger, `role="option"` en items
325
+ - ✅ **ARIA**: `aria-expanded`, `aria-controls`, `aria-selected`
326
+ - ✅ **Keyboard**: Arrow keys, Enter, Escape, Type-ahead search
327
+ - ✅ **Focus**: Focus trap en content abierto
328
+ - ✅ **Label**: Asociar con `id` en SelectTrigger
329
+
330
+ ## Notas de Implementación
331
+
332
+ - **Radix UI**: Basado en `@radix-ui/react-select`
333
+ - **Portal**: SelectContent se renderiza en portal
334
+ - **Iconos**: ChevronDown en trigger, CheckIcon en items seleccionados
335
+ - **Scroll buttons**: Auto-mostrados cuando content es scrollable
336
+ - **Position**: `popper` (default) para absolute positioning
337
+ - **Type-ahead**: Buscar items escribiendo
338
+
339
+ ## Troubleshooting
340
+
341
+ **Dropdown no abre**: Verifica que SelectContent esté dentro de Select
342
+ **No muestra valor**: Asegura que `value` del item seleccionado coincida con `value` del Select
343
+ **Portal issues**: SelectContent usa Portal, puede afectar z-index
344
+ **Width mismatch**: SelectTrigger necesita `className="w-[Xpx]"` explícito
345
+ **Scroll no funciona**: Scroll automático cuando items exceden max-height
346
+ **Placeholder no desaparece**: SelectValue.placeholder solo visible cuando no hay valor
347
+
348
+ ## Referencias
349
+
350
+ - **Radix UI Select**: <https://www.radix-ui.com/primitives/docs/components/select>
351
+ - **shadcn/ui Select**: <https://ui.shadcn.com/docs/components/select>
352
+ ```