@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,243 +1,243 @@
1
- # Toggle
2
-
3
- Botón de dos estados (on/off). Basado en Radix UI con variantes CVA.
4
-
5
- ## Descripción
6
-
7
- El componente `Toggle` es un botón de dos estados (presionado/no presionado).
8
-
9
- ## Importación
10
-
11
- ```typescript
12
- import { Toggle } from "@adamosuiteservices/ui/toggle";
13
- ```
14
-
15
- ## Anatomía
16
-
17
- ```tsx
18
- <Toggle aria-label="Toggle italic">
19
- <ItalicIcon />
20
- </Toggle>
21
- ```
22
-
23
- **Componentes**: 1 (Toggle)
24
-
25
- ## Props
26
-
27
- | Prop | Tipo | Descripción |
28
- | ----------------- | ---------------------------- | ----------------------------- |
29
- | `defaultPressed` | `boolean` | Estado inicial (uncontrolled) |
30
- | `pressed` | `boolean` | Estado controlado |
31
- | `onPressedChange` | `(pressed: boolean) => void` | Callback al cambiar |
32
- | `disabled` | `boolean` | Deshabilita el toggle |
33
- | `variant` | `"default" \| "outline"` | Estilo visual |
34
- | `size` | `"sm" \| "default" \| "lg"` | Tamaño del toggle |
35
- | `className` | `string` | Clases CSS adicionales |
36
-
37
- ## Patrones de Uso
38
-
39
- ### Básico
40
-
41
- ```tsx
42
- import { Toggle } from "@adamosuiteservices/ui/toggle";
43
- import { ItalicIcon } from "lucide-react";
44
-
45
- <Toggle aria-label="Toggle italic">
46
- <ItalicIcon />
47
- </Toggle>;
48
- ```
49
-
50
- ### Con Texto
51
-
52
- ```tsx
53
- <Toggle aria-label="Toggle bold">
54
- <BoldIcon />
55
- Bold
56
- </Toggle>
57
- ```
58
-
59
- ### Variantes
60
-
61
- ```tsx
62
- // Default (transparent background)
63
- <Toggle aria-label="Default">
64
- <ItalicIcon />
65
- </Toggle>
66
-
67
- // Outline (con border)
68
- <Toggle variant="outline" aria-label="Outline">
69
- <ItalicIcon />
70
- </Toggle>
71
- ```
72
-
73
- ### Tamaños
74
-
75
- ```tsx
76
- import { UnderlineIcon } from "lucide-react";
77
-
78
- <Toggle size="sm"><UnderlineIcon /></Toggle>
79
- <Toggle size="default"><UnderlineIcon /></Toggle>
80
- <Toggle size="lg"><UnderlineIcon /></Toggle>
81
- ```
82
-
83
- ### Controlado
84
-
85
- ```tsx
86
- import { useState } from "react";
87
-
88
- function App() {
89
- const [isPressed, setIsPressed] = useState(false);
90
-
91
- return (
92
- <Toggle
93
- pressed={isPressed}
94
- onPressedChange={setIsPressed}
95
- aria-label="Toggle bold"
96
- >
97
- <BoldIcon />
98
- {isPressed ? "Bold (On)" : "Bold (Off)"}
99
- </Toggle>
100
- );
101
- }
102
- ```
103
-
104
- ### Text Editor Formatting
105
-
106
- ```tsx
107
- import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
108
-
109
- function TextEditor() {
110
- const [formatting, setFormatting] = useState({
111
- bold: false,
112
- italic: false,
113
- underline: false,
114
- });
115
-
116
- return (
117
- <div className="flex gap-1">
118
- <Toggle
119
- pressed={formatting.bold}
120
- onPressedChange={(pressed) =>
121
- setFormatting((prev) => ({ ...prev, bold: pressed }))
122
- }
123
- size="sm"
124
- >
125
- <BoldIcon />
126
- </Toggle>
127
- <Toggle
128
- pressed={formatting.italic}
129
- onPressedChange={(pressed) =>
130
- setFormatting((prev) => ({ ...prev, italic: pressed }))
131
- }
132
- size="sm"
133
- >
134
- <ItalicIcon />
135
- </Toggle>
136
- <Toggle
137
- pressed={formatting.underline}
138
- onPressedChange={(pressed) =>
139
- setFormatting((prev) => ({ ...prev, underline: pressed }))
140
- }
141
- size="sm"
142
- >
143
- <UnderlineIcon />
144
- </Toggle>
145
- </div>
146
- );
147
- }
148
- ```
149
-
150
- ### Media Controls
151
-
152
- ```tsx
153
- import { MicIcon, MicOffIcon, VideoIcon, VideoOffIcon } from "lucide-react";
154
-
155
- function MediaControls() {
156
- const [media, setMedia] = useState({
157
- microphone: false,
158
- camera: false,
159
- });
160
-
161
- return (
162
- <div className="flex gap-3">
163
- <Toggle
164
- pressed={media.microphone}
165
- onPressedChange={(pressed) =>
166
- setMedia((prev) => ({ ...prev, microphone: pressed }))
167
- }
168
- variant="outline"
169
- className={
170
- !media.microphone ? "bg-destructive text-destructive-foreground" : ""
171
- }
172
- >
173
- {media.microphone ? <MicIcon /> : <MicOffIcon />}
174
- </Toggle>
175
-
176
- <Toggle
177
- pressed={media.camera}
178
- onPressedChange={(pressed) =>
179
- setMedia((prev) => ({ ...prev, camera: pressed }))
180
- }
181
- variant="outline"
182
- className={
183
- !media.camera ? "bg-destructive text-destructive-foreground" : ""
184
- }
185
- >
186
- {media.camera ? <VideoIcon /> : <VideoOffIcon />}
187
- </Toggle>
188
- </div>
189
- );
190
- }
191
- ```
192
-
193
- ### Deshabilitado
194
-
195
- ```tsx
196
- <Toggle disabled><UnderlineIcon /></Toggle>
197
- <Toggle disabled defaultPressed><UnderlineIcon /></Toggle>
198
- ```
199
-
200
- ## Casos de Uso
201
-
202
- **Text formatting**: Bold, italic, underline toggles
203
- **Media controls**: Mic/camera on/off
204
- **View options**: List/grid view toggle
205
- **Preferences**: Dark mode, notifications
206
- **Filters**: Show/hide options
207
-
208
- ## Estilos Base
209
-
210
- - **Sizes**: `h-8 min-w-8` (sm), `h-9 min-w-9` (default), `h-10 min-w-10` (lg)
211
- - **State off**: `bg-transparent`
212
- - **State on**: `bg-accent text-accent-foreground`
213
- - **Hover**: `bg-muted text-muted-foreground`
214
- - **Outline**: `border border-input shadow-xs`
215
- - **Focus**: `ring-ring/50` con `ring-[3px]`
216
-
217
- ## Accesibilidad
218
-
219
- - ✅ **Role**: `role="button"` con `aria-pressed`
220
- - ✅ **ARIA**: `aria-label` requerido para icon-only
221
- - ✅ **Keyboard**: Space/Enter para toggle
222
- - ✅ **State**: Screen readers anuncian pressed/not pressed
223
- - ✅ **Focus**: Focus ring visible
224
-
225
- ## Notas de Implementación
226
-
227
- - **Radix UI**: Basado en `@radix-ui/react-toggle`
228
- - **CVA**: Variantes con class-variance-authority
229
- - **Data state**: `data-state="on|off"` para estilos
230
- - **Controlled**: Usa `pressed` + `onPressedChange`
231
- - **Uncontrolled**: Usa `defaultPressed`
232
-
233
- ## Troubleshooting
234
-
235
- **Estado no cambia**: En modo controlado usa `pressed` + `onPressedChange`, no `defaultPressed`
236
- **No accesible**: Agrega `aria-label` en toggles solo con iconos
237
- **Estilo no actualiza**: Verifica `data-state="on"` aplicado cuando pressed
238
- **Variant no funciona**: Usa `variant="outline"` o `variant="default"`
239
-
240
- ## Referencias
241
-
242
- - **Radix UI Toggle**: <https://www.radix-ui.com/primitives/docs/components/toggle>
243
- - **shadcn/ui Toggle**: <https://ui.shadcn.com/docs/components/toggle>
1
+ # Toggle
2
+
3
+ Botón de dos estados (on/off). Basado en Radix UI con variantes CVA.
4
+
5
+ ## Descripción
6
+
7
+ El componente `Toggle` es un botón de dos estados (presionado/no presionado).
8
+
9
+ ## Importación
10
+
11
+ ```typescript
12
+ import { Toggle } from "@adamosuiteservices/ui/toggle";
13
+ ```
14
+
15
+ ## Anatomía
16
+
17
+ ```tsx
18
+ <Toggle aria-label="Toggle italic">
19
+ <ItalicIcon />
20
+ </Toggle>
21
+ ```
22
+
23
+ **Componentes**: 1 (Toggle)
24
+
25
+ ## Props
26
+
27
+ | Prop | Tipo | Descripción |
28
+ | ----------------- | ---------------------------- | ----------------------------- |
29
+ | `defaultPressed` | `boolean` | Estado inicial (uncontrolled) |
30
+ | `pressed` | `boolean` | Estado controlado |
31
+ | `onPressedChange` | `(pressed: boolean) => void` | Callback al cambiar |
32
+ | `disabled` | `boolean` | Deshabilita el toggle |
33
+ | `variant` | `"default" \| "outline"` | Estilo visual |
34
+ | `size` | `"sm" \| "default" \| "lg"` | Tamaño del toggle |
35
+ | `className` | `string` | Clases CSS adicionales |
36
+
37
+ ## Patrones de Uso
38
+
39
+ ### Básico
40
+
41
+ ```tsx
42
+ import { Toggle } from "@adamosuiteservices/ui/toggle";
43
+ import { ItalicIcon } from "lucide-react";
44
+
45
+ <Toggle aria-label="Toggle italic">
46
+ <ItalicIcon />
47
+ </Toggle>;
48
+ ```
49
+
50
+ ### Con Texto
51
+
52
+ ```tsx
53
+ <Toggle aria-label="Toggle bold">
54
+ <BoldIcon />
55
+ Bold
56
+ </Toggle>
57
+ ```
58
+
59
+ ### Variantes
60
+
61
+ ```tsx
62
+ // Default (transparent background)
63
+ <Toggle aria-label="Default">
64
+ <ItalicIcon />
65
+ </Toggle>
66
+
67
+ // Outline (con border)
68
+ <Toggle variant="outline" aria-label="Outline">
69
+ <ItalicIcon />
70
+ </Toggle>
71
+ ```
72
+
73
+ ### Tamaños
74
+
75
+ ```tsx
76
+ import { UnderlineIcon } from "lucide-react";
77
+
78
+ <Toggle size="sm"><UnderlineIcon /></Toggle>
79
+ <Toggle size="default"><UnderlineIcon /></Toggle>
80
+ <Toggle size="lg"><UnderlineIcon /></Toggle>
81
+ ```
82
+
83
+ ### Controlado
84
+
85
+ ```tsx
86
+ import { useState } from "react";
87
+
88
+ function App() {
89
+ const [isPressed, setIsPressed] = useState(false);
90
+
91
+ return (
92
+ <Toggle
93
+ pressed={isPressed}
94
+ onPressedChange={setIsPressed}
95
+ aria-label="Toggle bold"
96
+ >
97
+ <BoldIcon />
98
+ {isPressed ? "Bold (On)" : "Bold (Off)"}
99
+ </Toggle>
100
+ );
101
+ }
102
+ ```
103
+
104
+ ### Text Editor Formatting
105
+
106
+ ```tsx
107
+ import { BoldIcon, ItalicIcon, UnderlineIcon } from "lucide-react";
108
+
109
+ function TextEditor() {
110
+ const [formatting, setFormatting] = useState({
111
+ bold: false,
112
+ italic: false,
113
+ underline: false,
114
+ });
115
+
116
+ return (
117
+ <div className="flex gap-1">
118
+ <Toggle
119
+ pressed={formatting.bold}
120
+ onPressedChange={(pressed) =>
121
+ setFormatting((prev) => ({ ...prev, bold: pressed }))
122
+ }
123
+ size="sm"
124
+ >
125
+ <BoldIcon />
126
+ </Toggle>
127
+ <Toggle
128
+ pressed={formatting.italic}
129
+ onPressedChange={(pressed) =>
130
+ setFormatting((prev) => ({ ...prev, italic: pressed }))
131
+ }
132
+ size="sm"
133
+ >
134
+ <ItalicIcon />
135
+ </Toggle>
136
+ <Toggle
137
+ pressed={formatting.underline}
138
+ onPressedChange={(pressed) =>
139
+ setFormatting((prev) => ({ ...prev, underline: pressed }))
140
+ }
141
+ size="sm"
142
+ >
143
+ <UnderlineIcon />
144
+ </Toggle>
145
+ </div>
146
+ );
147
+ }
148
+ ```
149
+
150
+ ### Media Controls
151
+
152
+ ```tsx
153
+ import { MicIcon, MicOffIcon, VideoIcon, VideoOffIcon } from "lucide-react";
154
+
155
+ function MediaControls() {
156
+ const [media, setMedia] = useState({
157
+ microphone: false,
158
+ camera: false,
159
+ });
160
+
161
+ return (
162
+ <div className="flex gap-3">
163
+ <Toggle
164
+ pressed={media.microphone}
165
+ onPressedChange={(pressed) =>
166
+ setMedia((prev) => ({ ...prev, microphone: pressed }))
167
+ }
168
+ variant="outline"
169
+ className={
170
+ !media.microphone ? "bg-destructive text-destructive-foreground" : ""
171
+ }
172
+ >
173
+ {media.microphone ? <MicIcon /> : <MicOffIcon />}
174
+ </Toggle>
175
+
176
+ <Toggle
177
+ pressed={media.camera}
178
+ onPressedChange={(pressed) =>
179
+ setMedia((prev) => ({ ...prev, camera: pressed }))
180
+ }
181
+ variant="outline"
182
+ className={
183
+ !media.camera ? "bg-destructive text-destructive-foreground" : ""
184
+ }
185
+ >
186
+ {media.camera ? <VideoIcon /> : <VideoOffIcon />}
187
+ </Toggle>
188
+ </div>
189
+ );
190
+ }
191
+ ```
192
+
193
+ ### Deshabilitado
194
+
195
+ ```tsx
196
+ <Toggle disabled><UnderlineIcon /></Toggle>
197
+ <Toggle disabled defaultPressed><UnderlineIcon /></Toggle>
198
+ ```
199
+
200
+ ## Casos de Uso
201
+
202
+ **Text formatting**: Bold, italic, underline toggles
203
+ **Media controls**: Mic/camera on/off
204
+ **View options**: List/grid view toggle
205
+ **Preferences**: Dark mode, notifications
206
+ **Filters**: Show/hide options
207
+
208
+ ## Estilos Base
209
+
210
+ - **Sizes**: `h-8 min-w-8` (sm), `h-9 min-w-9` (default), `h-10 min-w-10` (lg)
211
+ - **State off**: `bg-transparent`
212
+ - **State on**: `bg-accent text-accent-foreground`
213
+ - **Hover**: `bg-muted text-muted-foreground`
214
+ - **Outline**: `border border-input shadow-xs`
215
+ - **Focus**: `ring-ring/50` con `ring-[3px]`
216
+
217
+ ## Accesibilidad
218
+
219
+ - ✅ **Role**: `role="button"` con `aria-pressed`
220
+ - ✅ **ARIA**: `aria-label` requerido para icon-only
221
+ - ✅ **Keyboard**: Space/Enter para toggle
222
+ - ✅ **State**: Screen readers anuncian pressed/not pressed
223
+ - ✅ **Focus**: Focus ring visible
224
+
225
+ ## Notas de Implementación
226
+
227
+ - **Radix UI**: Basado en `@radix-ui/react-toggle`
228
+ - **CVA**: Variantes con class-variance-authority
229
+ - **Data state**: `data-state="on|off"` para estilos
230
+ - **Controlled**: Usa `pressed` + `onPressedChange`
231
+ - **Uncontrolled**: Usa `defaultPressed`
232
+
233
+ ## Troubleshooting
234
+
235
+ **Estado no cambia**: En modo controlado usa `pressed` + `onPressedChange`, no `defaultPressed`
236
+ **No accesible**: Agrega `aria-label` en toggles solo con iconos
237
+ **Estilo no actualiza**: Verifica `data-state="on"` aplicado cuando pressed
238
+ **Variant no funciona**: Usa `variant="outline"` o `variant="default"`
239
+
240
+ ## Referencias
241
+
242
+ - **Radix UI Toggle**: <https://www.radix-ui.com/primitives/docs/components/toggle>
243
+ - **shadcn/ui Toggle**: <https://ui.shadcn.com/docs/components/toggle>