@adamosuiteservices/ui 1.7.13 → 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 +62 -22
  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,311 +1,311 @@
1
- # Radio Group
2
-
3
- Grupo de opciones mutuamente excluyentes. Usuario selecciona una opción. Basado en Radix UI.
4
-
5
- ## Descripción
6
-
7
- El componente `RadioGroup` permite seleccionar una opción de un conjunto de opciones mutuamente excluyentes.
8
-
9
- ## Importación
10
-
11
- ```typescript
12
- import { RadioGroup, RadioGroupItem } from "@adamosuiteservices/ui/radio-group";
13
- ```
14
-
15
- ## Anatomía
16
-
17
- ```tsx
18
- <RadioGroup defaultValue="option-one">
19
- <div className="flex items-center space-x-2">
20
- <RadioGroupItem value="option-one" id="option-one" />
21
- <Label htmlFor="option-one">Option One</Label>
22
- </div>
23
- <div className="flex items-center space-x-2">
24
- <RadioGroupItem value="option-two" id="option-two" />
25
- <Label htmlFor="option-two">Option Two</Label>
26
- </div>
27
- </RadioGroup>
28
- ```
29
-
30
- **Componentes**: 2 (RadioGroup, RadioGroupItem)
31
-
32
- ## Props
33
-
34
- ### RadioGroup
35
-
36
- | Prop | Tipo | Descripción |
37
- | --------------- | ------------------------- | ------------------------------ |
38
- | `defaultValue` | `string` | Valor inicial (uncontrolled) |
39
- | `value` | `string` | Valor controlado |
40
- | `onValueChange` | `(value: string) => void` | Callback al cambiar valor |
41
- | `disabled` | `boolean` | Deshabilita todo el grupo |
42
- | `required` | `boolean` | Campo requerido |
43
- | `name` | `string` | Nombre del grupo (formularios) |
44
- | `className` | `string` | Clases CSS adicionales |
45
-
46
- **Nota**: Acepta todas las props de Radix UI RadioGroup.Root
47
-
48
- ### RadioGroupItem
49
-
50
- | Prop | Tipo | Descripción |
51
- | ----------- | --------- | ------------------------- |
52
- | `value` | `string` | Valor único del item |
53
- | `id` | `string` | ID para asociar con Label |
54
- | `disabled` | `boolean` | Deshabilita este item |
55
- | `className` | `string` | Clases CSS adicionales |
56
-
57
- **Nota**: Acepta todas las props de Radix UI RadioGroup.Item
58
-
59
- ## Patrones de Uso
60
-
61
- ### Básico
62
-
63
- ```tsx
64
- import { RadioGroup, RadioGroupItem } from "@adamosuiteservices/ui/radio-group";
65
- import { Label } from "@adamosuiteservices/ui/label";
66
-
67
- <RadioGroup defaultValue="option-one">
68
- <div className="flex items-center gap-3">
69
- <RadioGroupItem value="option-one" id="option-one" />
70
- <Label htmlFor="option-one">Option One</Label>
71
- </div>
72
- <div className="flex items-center gap-3">
73
- <RadioGroupItem value="option-two" id="option-two" />
74
- <Label htmlFor="option-two">Option Two</Label>
75
- </div>
76
- </RadioGroup>;
77
- ```
78
-
79
- ### Controlado
80
-
81
- ```tsx
82
- import { useState } from "react";
83
-
84
- function App() {
85
- const [value, setValue] = useState("red");
86
-
87
- return (
88
- <RadioGroup value={value} onValueChange={setValue}>
89
- <div className="flex items-center gap-3">
90
- <RadioGroupItem value="red" id="red" />
91
- <Label htmlFor="red">Red</Label>
92
- </div>
93
- <div className="flex items-center gap-3">
94
- <RadioGroupItem value="green" id="green" />
95
- <Label htmlFor="green">Green</Label>
96
- </div>
97
- </RadioGroup>
98
- );
99
- }
100
- ```
101
-
102
- ### Con Descripciones
103
-
104
- ```tsx
105
- <RadioGroup defaultValue="comfortable">
106
- <div className="flex items-start gap-3">
107
- <RadioGroupItem value="default" id="default" />
108
- <div className="grid gap-2">
109
- <Label htmlFor="default">Default</Label>
110
- <p className="text-muted-foreground text-sm">
111
- Recommended for most users. Provides a balanced experience.
112
- </p>
113
- </div>
114
- </div>
115
- <div className="flex items-start gap-3">
116
- <RadioGroupItem value="comfortable" id="comfortable" />
117
- <div className="grid gap-2">
118
- <Label htmlFor="comfortable">Comfortable</Label>
119
- <p className="text-muted-foreground text-sm">
120
- More spacing and larger elements for better accessibility.
121
- </p>
122
- </div>
123
- </div>
124
- </RadioGroup>
125
- ```
126
-
127
- ### Layout Horizontal
128
-
129
- ```tsx
130
- <RadioGroup defaultValue="medium" className="flex gap-6">
131
- <div className="flex items-center gap-2">
132
- <RadioGroupItem value="small" id="small" />
133
- <Label htmlFor="small">Small</Label>
134
- </div>
135
- <div className="flex items-center gap-2">
136
- <RadioGroupItem value="medium" id="medium" />
137
- <Label htmlFor="medium">Medium</Label>
138
- </div>
139
- <div className="flex items-center gap-2">
140
- <RadioGroupItem value="large" id="large" />
141
- <Label htmlFor="large">Large</Label>
142
- </div>
143
- </RadioGroup>
144
- ```
145
-
146
- ### Con Badges
147
-
148
- ```tsx
149
- import { Badge } from "@adamosuiteservices/ui/badge";
150
-
151
- <RadioGroup defaultValue="pro">
152
- <div className="flex items-center gap-3">
153
- <RadioGroupItem value="free" id="free" />
154
- <div className="flex items-center gap-2">
155
- <Label htmlFor="free">Free Plan</Label>
156
- <Badge variant="secondary">$0/month</Badge>
157
- </div>
158
- </div>
159
- <div className="flex items-center gap-3">
160
- <RadioGroupItem value="pro" id="pro" />
161
- <div className="flex items-center gap-2">
162
- <Label htmlFor="pro">Pro Plan</Label>
163
- <Badge variant="default">$9/month</Badge>
164
- </div>
165
- </div>
166
- </RadioGroup>;
167
- ```
168
-
169
- ### En Formularios
170
-
171
- ```tsx
172
- import { Button } from "@adamosuiteservices/ui/button";
173
-
174
- function App() {
175
- const [formData, setFormData] = useState({
176
- notification: "email",
177
- frequency: "weekly",
178
- });
179
-
180
- const handleSubmit = (e: React.FormEvent) => {
181
- e.preventDefault();
182
- console.log("Form submitted:", formData);
183
- };
184
-
185
- return (
186
- <form onSubmit={handleSubmit} className="space-y-6">
187
- <div className="space-y-3">
188
- <p className="text-sm font-medium">Notification method</p>
189
- <RadioGroup
190
- value={formData.notification}
191
- onValueChange={(value) =>
192
- setFormData((prev) => ({ ...prev, notification: value }))
193
- }
194
- >
195
- <div className="flex items-center gap-3">
196
- <RadioGroupItem value="email" id="email" />
197
- <Label htmlFor="email">Email notifications</Label>
198
- </div>
199
- <div className="flex items-center gap-3">
200
- <RadioGroupItem value="sms" id="sms" />
201
- <Label htmlFor="sms">SMS notifications</Label>
202
- </div>
203
- </RadioGroup>
204
- </div>
205
- <Button type="submit">Save preferences</Button>
206
- </form>
207
- );
208
- }
209
- ```
210
-
211
- ### Nested (Conditional)
212
-
213
- ```tsx
214
- function App() {
215
- const [paymentMethod, setPaymentMethod] = useState("card");
216
- const [cardType, setCardType] = useState("visa");
217
-
218
- return (
219
- <div className="space-y-6">
220
- <RadioGroup value={paymentMethod} onValueChange={setPaymentMethod}>
221
- <div className="flex items-center gap-3">
222
- <RadioGroupItem value="card" id="card" />
223
- <Label htmlFor="card">Credit/Debit Card</Label>
224
- </div>
225
- <div className="flex items-center gap-3">
226
- <RadioGroupItem value="bank" id="bank" />
227
- <Label htmlFor="bank">Bank Transfer</Label>
228
- </div>
229
- </RadioGroup>
230
-
231
- {paymentMethod === "card" && (
232
- <div className="ml-6 space-y-3">
233
- <p className="text-sm font-medium">Card type</p>
234
- <RadioGroup value={cardType} onValueChange={setCardType}>
235
- <div className="flex items-center gap-3">
236
- <RadioGroupItem value="visa" id="visa" />
237
- <Label htmlFor="visa">Visa</Label>
238
- </div>
239
- <div className="flex items-center gap-3">
240
- <RadioGroupItem value="mastercard" id="mastercard" />
241
- <Label htmlFor="mastercard">Mastercard</Label>
242
- </div>
243
- </RadioGroup>
244
- </div>
245
- )}
246
- </div>
247
- );
248
- }
249
- ```
250
-
251
- ### Deshabilitado
252
-
253
- ```tsx
254
- <RadioGroup defaultValue="option-one" disabled>
255
- <div className="flex items-center gap-3">
256
- <RadioGroupItem value="option-one" id="disabled-one" />
257
- <Label htmlFor="disabled-one">Option One</Label>
258
- </div>
259
- <div className="flex items-center gap-3">
260
- <RadioGroupItem value="option-two" id="disabled-two" />
261
- <Label htmlFor="disabled-two">Option Two</Label>
262
- </div>
263
- </RadioGroup>
264
- ```
265
-
266
- ## Casos de Uso
267
-
268
- **Opciones mutuamente excluyentes**: Una sola selección de múltiples opciones
269
- **Settings**: Preferencias de configuración (theme, size, mode)
270
- **Formularios**: Selección de método de pago, envío, categoría
271
- **Surveys**: Preguntas con opciones de respuesta única
272
- **Filtros**: Filtrado por categoría, tipo, estado
273
-
274
- ## Estilos Base
275
-
276
- - **Size**: `size-5` (20px)
277
- - **Border**: `border-input` con `shadow-xs`
278
- - **Checked**: `CircleIcon` con `fill-primary`
279
- - **Focus**: `ring-ring/50` con `ring-[3px]`
280
- - **Invalid**: `border-destructive` con `ring-destructive/20`
281
- - **Spacing**: `gap-3` default entre item y label
282
-
283
- ## Accesibilidad
284
-
285
- - ✅ **Role**: `role="radio"` y `role="radiogroup"`
286
- - ✅ **ARIA**: `aria-checked`, `aria-disabled`, `aria-invalid`
287
- - ✅ **Keyboard**: Arrow keys para navegar, Space para seleccionar
288
- - ✅ **Label**: Asociar con `htmlFor` e `id`
289
- - ✅ **Focus**: Focus ring visible en navegación por teclado
290
-
291
- ## Notas de Implementación
292
-
293
- - **Radix UI**: Basado en `@radix-ui/react-radio-group`
294
- - **Indicador**: Usa `CircleIcon` de lucide-react con `fill-primary`
295
- - **Grid layout**: Default usa `grid gap-3` para vertical spacing
296
- - **Data attributes**: `data-slot` para identificar componentes
297
- - **Controlled**: Usa `value` + `onValueChange`
298
- - **Uncontrolled**: Usa `defaultValue`
299
-
300
- ## Troubleshooting
301
-
302
- **No se puede seleccionar**: Verifica que cada item tenga `value` único
303
- **Label no clickeable**: Asegura `htmlFor` en Label coincida con `id` del RadioGroupItem
304
- **Grupo deshabilitado**: `disabled` en RadioGroup deshabilita todos los items
305
- **Item individual disabled**: `disabled` en RadioGroupItem específico
306
- **Estado no actualiza**: En modo controlado usa `value` + `onValueChange`, no `defaultValue`
307
-
308
- ## Referencias
309
-
310
- - **Radix UI Radio Group**: <https://www.radix-ui.com/primitives/docs/components/radio-group>
311
- - **shadcn/ui Radio Group**: <https://ui.shadcn.com/docs/components/radio-group>
1
+ # Radio Group
2
+
3
+ Grupo de opciones mutuamente excluyentes. Usuario selecciona una opción. Basado en Radix UI.
4
+
5
+ ## Descripción
6
+
7
+ El componente `RadioGroup` permite seleccionar una opción de un conjunto de opciones mutuamente excluyentes.
8
+
9
+ ## Importación
10
+
11
+ ```typescript
12
+ import { RadioGroup, RadioGroupItem } from "@adamosuiteservices/ui/radio-group";
13
+ ```
14
+
15
+ ## Anatomía
16
+
17
+ ```tsx
18
+ <RadioGroup defaultValue="option-one">
19
+ <div className="flex items-center space-x-2">
20
+ <RadioGroupItem value="option-one" id="option-one" />
21
+ <Label htmlFor="option-one">Option One</Label>
22
+ </div>
23
+ <div className="flex items-center space-x-2">
24
+ <RadioGroupItem value="option-two" id="option-two" />
25
+ <Label htmlFor="option-two">Option Two</Label>
26
+ </div>
27
+ </RadioGroup>
28
+ ```
29
+
30
+ **Componentes**: 2 (RadioGroup, RadioGroupItem)
31
+
32
+ ## Props
33
+
34
+ ### RadioGroup
35
+
36
+ | Prop | Tipo | Descripción |
37
+ | --------------- | ------------------------- | ------------------------------ |
38
+ | `defaultValue` | `string` | Valor inicial (uncontrolled) |
39
+ | `value` | `string` | Valor controlado |
40
+ | `onValueChange` | `(value: string) => void` | Callback al cambiar valor |
41
+ | `disabled` | `boolean` | Deshabilita todo el grupo |
42
+ | `required` | `boolean` | Campo requerido |
43
+ | `name` | `string` | Nombre del grupo (formularios) |
44
+ | `className` | `string` | Clases CSS adicionales |
45
+
46
+ **Nota**: Acepta todas las props de Radix UI RadioGroup.Root
47
+
48
+ ### RadioGroupItem
49
+
50
+ | Prop | Tipo | Descripción |
51
+ | ----------- | --------- | ------------------------- |
52
+ | `value` | `string` | Valor único del item |
53
+ | `id` | `string` | ID para asociar con Label |
54
+ | `disabled` | `boolean` | Deshabilita este item |
55
+ | `className` | `string` | Clases CSS adicionales |
56
+
57
+ **Nota**: Acepta todas las props de Radix UI RadioGroup.Item
58
+
59
+ ## Patrones de Uso
60
+
61
+ ### Básico
62
+
63
+ ```tsx
64
+ import { RadioGroup, RadioGroupItem } from "@adamosuiteservices/ui/radio-group";
65
+ import { Label } from "@adamosuiteservices/ui/label";
66
+
67
+ <RadioGroup defaultValue="option-one">
68
+ <div className="flex items-center gap-3">
69
+ <RadioGroupItem value="option-one" id="option-one" />
70
+ <Label htmlFor="option-one">Option One</Label>
71
+ </div>
72
+ <div className="flex items-center gap-3">
73
+ <RadioGroupItem value="option-two" id="option-two" />
74
+ <Label htmlFor="option-two">Option Two</Label>
75
+ </div>
76
+ </RadioGroup>;
77
+ ```
78
+
79
+ ### Controlado
80
+
81
+ ```tsx
82
+ import { useState } from "react";
83
+
84
+ function App() {
85
+ const [value, setValue] = useState("red");
86
+
87
+ return (
88
+ <RadioGroup value={value} onValueChange={setValue}>
89
+ <div className="flex items-center gap-3">
90
+ <RadioGroupItem value="red" id="red" />
91
+ <Label htmlFor="red">Red</Label>
92
+ </div>
93
+ <div className="flex items-center gap-3">
94
+ <RadioGroupItem value="green" id="green" />
95
+ <Label htmlFor="green">Green</Label>
96
+ </div>
97
+ </RadioGroup>
98
+ );
99
+ }
100
+ ```
101
+
102
+ ### Con Descripciones
103
+
104
+ ```tsx
105
+ <RadioGroup defaultValue="comfortable">
106
+ <div className="flex items-start gap-3">
107
+ <RadioGroupItem value="default" id="default" />
108
+ <div className="grid gap-2">
109
+ <Label htmlFor="default">Default</Label>
110
+ <p className="text-muted-foreground text-sm">
111
+ Recommended for most users. Provides a balanced experience.
112
+ </p>
113
+ </div>
114
+ </div>
115
+ <div className="flex items-start gap-3">
116
+ <RadioGroupItem value="comfortable" id="comfortable" />
117
+ <div className="grid gap-2">
118
+ <Label htmlFor="comfortable">Comfortable</Label>
119
+ <p className="text-muted-foreground text-sm">
120
+ More spacing and larger elements for better accessibility.
121
+ </p>
122
+ </div>
123
+ </div>
124
+ </RadioGroup>
125
+ ```
126
+
127
+ ### Layout Horizontal
128
+
129
+ ```tsx
130
+ <RadioGroup defaultValue="medium" className="flex gap-6">
131
+ <div className="flex items-center gap-2">
132
+ <RadioGroupItem value="small" id="small" />
133
+ <Label htmlFor="small">Small</Label>
134
+ </div>
135
+ <div className="flex items-center gap-2">
136
+ <RadioGroupItem value="medium" id="medium" />
137
+ <Label htmlFor="medium">Medium</Label>
138
+ </div>
139
+ <div className="flex items-center gap-2">
140
+ <RadioGroupItem value="large" id="large" />
141
+ <Label htmlFor="large">Large</Label>
142
+ </div>
143
+ </RadioGroup>
144
+ ```
145
+
146
+ ### Con Badges
147
+
148
+ ```tsx
149
+ import { Badge } from "@adamosuiteservices/ui/badge";
150
+
151
+ <RadioGroup defaultValue="pro">
152
+ <div className="flex items-center gap-3">
153
+ <RadioGroupItem value="free" id="free" />
154
+ <div className="flex items-center gap-2">
155
+ <Label htmlFor="free">Free Plan</Label>
156
+ <Badge variant="secondary">$0/month</Badge>
157
+ </div>
158
+ </div>
159
+ <div className="flex items-center gap-3">
160
+ <RadioGroupItem value="pro" id="pro" />
161
+ <div className="flex items-center gap-2">
162
+ <Label htmlFor="pro">Pro Plan</Label>
163
+ <Badge variant="default">$9/month</Badge>
164
+ </div>
165
+ </div>
166
+ </RadioGroup>;
167
+ ```
168
+
169
+ ### En Formularios
170
+
171
+ ```tsx
172
+ import { Button } from "@adamosuiteservices/ui/button";
173
+
174
+ function App() {
175
+ const [formData, setFormData] = useState({
176
+ notification: "email",
177
+ frequency: "weekly",
178
+ });
179
+
180
+ const handleSubmit = (e: React.FormEvent) => {
181
+ e.preventDefault();
182
+ console.log("Form submitted:", formData);
183
+ };
184
+
185
+ return (
186
+ <form onSubmit={handleSubmit} className="space-y-6">
187
+ <div className="space-y-3">
188
+ <p className="text-sm font-medium">Notification method</p>
189
+ <RadioGroup
190
+ value={formData.notification}
191
+ onValueChange={(value) =>
192
+ setFormData((prev) => ({ ...prev, notification: value }))
193
+ }
194
+ >
195
+ <div className="flex items-center gap-3">
196
+ <RadioGroupItem value="email" id="email" />
197
+ <Label htmlFor="email">Email notifications</Label>
198
+ </div>
199
+ <div className="flex items-center gap-3">
200
+ <RadioGroupItem value="sms" id="sms" />
201
+ <Label htmlFor="sms">SMS notifications</Label>
202
+ </div>
203
+ </RadioGroup>
204
+ </div>
205
+ <Button type="submit">Save preferences</Button>
206
+ </form>
207
+ );
208
+ }
209
+ ```
210
+
211
+ ### Nested (Conditional)
212
+
213
+ ```tsx
214
+ function App() {
215
+ const [paymentMethod, setPaymentMethod] = useState("card");
216
+ const [cardType, setCardType] = useState("visa");
217
+
218
+ return (
219
+ <div className="space-y-6">
220
+ <RadioGroup value={paymentMethod} onValueChange={setPaymentMethod}>
221
+ <div className="flex items-center gap-3">
222
+ <RadioGroupItem value="card" id="card" />
223
+ <Label htmlFor="card">Credit/Debit Card</Label>
224
+ </div>
225
+ <div className="flex items-center gap-3">
226
+ <RadioGroupItem value="bank" id="bank" />
227
+ <Label htmlFor="bank">Bank Transfer</Label>
228
+ </div>
229
+ </RadioGroup>
230
+
231
+ {paymentMethod === "card" && (
232
+ <div className="ml-6 space-y-3">
233
+ <p className="text-sm font-medium">Card type</p>
234
+ <RadioGroup value={cardType} onValueChange={setCardType}>
235
+ <div className="flex items-center gap-3">
236
+ <RadioGroupItem value="visa" id="visa" />
237
+ <Label htmlFor="visa">Visa</Label>
238
+ </div>
239
+ <div className="flex items-center gap-3">
240
+ <RadioGroupItem value="mastercard" id="mastercard" />
241
+ <Label htmlFor="mastercard">Mastercard</Label>
242
+ </div>
243
+ </RadioGroup>
244
+ </div>
245
+ )}
246
+ </div>
247
+ );
248
+ }
249
+ ```
250
+
251
+ ### Deshabilitado
252
+
253
+ ```tsx
254
+ <RadioGroup defaultValue="option-one" disabled>
255
+ <div className="flex items-center gap-3">
256
+ <RadioGroupItem value="option-one" id="disabled-one" />
257
+ <Label htmlFor="disabled-one">Option One</Label>
258
+ </div>
259
+ <div className="flex items-center gap-3">
260
+ <RadioGroupItem value="option-two" id="disabled-two" />
261
+ <Label htmlFor="disabled-two">Option Two</Label>
262
+ </div>
263
+ </RadioGroup>
264
+ ```
265
+
266
+ ## Casos de Uso
267
+
268
+ **Opciones mutuamente excluyentes**: Una sola selección de múltiples opciones
269
+ **Settings**: Preferencias de configuración (theme, size, mode)
270
+ **Formularios**: Selección de método de pago, envío, categoría
271
+ **Surveys**: Preguntas con opciones de respuesta única
272
+ **Filtros**: Filtrado por categoría, tipo, estado
273
+
274
+ ## Estilos Base
275
+
276
+ - **Size**: `size-5` (20px)
277
+ - **Border**: `border-input` con `shadow-xs`
278
+ - **Checked**: `CircleIcon` con `fill-primary`
279
+ - **Focus**: `ring-ring/50` con `ring-[3px]`
280
+ - **Invalid**: `border-destructive` con `ring-destructive/20`
281
+ - **Spacing**: `gap-3` default entre item y label
282
+
283
+ ## Accesibilidad
284
+
285
+ - ✅ **Role**: `role="radio"` y `role="radiogroup"`
286
+ - ✅ **ARIA**: `aria-checked`, `aria-disabled`, `aria-invalid`
287
+ - ✅ **Keyboard**: Arrow keys para navegar, Space para seleccionar
288
+ - ✅ **Label**: Asociar con `htmlFor` e `id`
289
+ - ✅ **Focus**: Focus ring visible en navegación por teclado
290
+
291
+ ## Notas de Implementación
292
+
293
+ - **Radix UI**: Basado en `@radix-ui/react-radio-group`
294
+ - **Indicador**: Usa `CircleIcon` de lucide-react con `fill-primary`
295
+ - **Grid layout**: Default usa `grid gap-3` para vertical spacing
296
+ - **Data attributes**: `data-slot` para identificar componentes
297
+ - **Controlled**: Usa `value` + `onValueChange`
298
+ - **Uncontrolled**: Usa `defaultValue`
299
+
300
+ ## Troubleshooting
301
+
302
+ **No se puede seleccionar**: Verifica que cada item tenga `value` único
303
+ **Label no clickeable**: Asegura `htmlFor` en Label coincida con `id` del RadioGroupItem
304
+ **Grupo deshabilitado**: `disabled` en RadioGroup deshabilita todos los items
305
+ **Item individual disabled**: `disabled` en RadioGroupItem específico
306
+ **Estado no actualiza**: En modo controlado usa `value` + `onValueChange`, no `defaultValue`
307
+
308
+ ## Referencias
309
+
310
+ - **Radix UI Radio Group**: <https://www.radix-ui.com/primitives/docs/components/radio-group>
311
+ - **shadcn/ui Radio Group**: <https://ui.shadcn.com/docs/components/radio-group>