@adamosuiteservices/ui 2.11.15 → 2.11.16

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 (40) hide show
  1. package/dist/colors.css +1 -1
  2. package/dist/styles.css +1 -1
  3. package/docs/AI-GUIDE.md +321 -321
  4. package/docs/components/layout/sidebar.md +399 -399
  5. package/docs/components/layout/toaster.md +436 -436
  6. package/docs/components/ui/accordion-rounded.md +584 -584
  7. package/docs/components/ui/accordion.md +269 -269
  8. package/docs/components/ui/button-group.md +984 -984
  9. package/docs/components/ui/button.md +1137 -1137
  10. package/docs/components/ui/calendar.md +1159 -1159
  11. package/docs/components/ui/card.md +1455 -1455
  12. package/docs/components/ui/checkbox.md +292 -292
  13. package/docs/components/ui/collapsible.md +323 -323
  14. package/docs/components/ui/command.md +454 -454
  15. package/docs/components/ui/context-menu.md +540 -540
  16. package/docs/components/ui/dialog.md +628 -628
  17. package/docs/components/ui/dropdown-menu.md +709 -709
  18. package/docs/components/ui/field.md +706 -706
  19. package/docs/components/ui/hover-card.md +446 -446
  20. package/docs/components/ui/input.md +362 -362
  21. package/docs/components/ui/kbd.md +434 -434
  22. package/docs/components/ui/label.md +359 -359
  23. package/docs/components/ui/pagination.md +650 -650
  24. package/docs/components/ui/popover.md +536 -536
  25. package/docs/components/ui/progress.md +182 -182
  26. package/docs/components/ui/radio-group.md +311 -311
  27. package/docs/components/ui/select.md +352 -352
  28. package/docs/components/ui/separator.md +214 -214
  29. package/docs/components/ui/sheet.md +142 -142
  30. package/docs/components/ui/skeleton.md +140 -140
  31. package/docs/components/ui/slider.md +341 -341
  32. package/docs/components/ui/spinner.md +170 -170
  33. package/docs/components/ui/switch.md +408 -408
  34. package/docs/components/ui/tabs-underline.md +106 -106
  35. package/docs/components/ui/tabs.md +122 -122
  36. package/docs/components/ui/textarea.md +243 -243
  37. package/docs/components/ui/toggle.md +237 -237
  38. package/docs/components/ui/tooltip.md +317 -317
  39. package/docs/components/ui/typography.md +280 -280
  40. package/package.json +1 -1
@@ -1,237 +1,237 @@
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
- <Icon symbol="format_italic" />
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 { Icon } from "@adamosuiteservices/ui/icon";
44
-
45
- <Toggle aria-label="Toggle italic">
46
- <Icon symbol="format_italic" />
47
- </Toggle>;
48
- ```
49
-
50
- ### Con Texto
51
-
52
- ```tsx
53
- <Toggle aria-label="Toggle bold">
54
- <Icon symbol="format_bold" />
55
- Bold
56
- </Toggle>
57
- ```
58
-
59
- ### Variantes
60
-
61
- ```tsx
62
- // Default (transparent background)
63
- <Toggle aria-label="Default">
64
- <Icon symbol="format_italic" />
65
- </Toggle>
66
-
67
- // Outline (con border)
68
- <Toggle variant="outline" aria-label="Outline">
69
- <Icon symbol="format_italic" />
70
- </Toggle>
71
- ```
72
-
73
- ### Tamaños
74
-
75
- ```tsx
76
- <Toggle size="sm"><Icon symbol="format_underlined" /></Toggle>
77
- <Toggle size="default"><Icon symbol="format_underlined" /></Toggle>
78
- <Toggle size="lg"><Icon symbol="format_underlined" /></Toggle>
79
- ```
80
-
81
- ### Controlado
82
-
83
- ```tsx
84
- import { useState } from "react";
85
-
86
- function App() {
87
- const [isPressed, setIsPressed] = useState(false);
88
-
89
- return (
90
- <Toggle
91
- pressed={isPressed}
92
- onPressedChange={setIsPressed}
93
- aria-label="Toggle bold"
94
- >
95
- <Icon symbol="format_bold" />
96
- {isPressed ? "Bold (On)" : "Bold (Off)"}
97
- </Toggle>
98
- );
99
- }
100
- ```
101
-
102
- ### Text Editor Formatting
103
-
104
- ```tsx
105
- function TextEditor() {
106
- const [formatting, setFormatting] = useState({
107
- bold: false,
108
- italic: false,
109
- underline: false,
110
- });
111
-
112
- return (
113
- <div className="flex gap-1">
114
- <Toggle
115
- pressed={formatting.bold}
116
- onPressedChange={(pressed) =>
117
- setFormatting((prev) => ({ ...prev, bold: pressed }))
118
- }
119
- size="sm"
120
- >
121
- <Icon symbol="format_bold" />
122
- </Toggle>
123
- <Toggle
124
- pressed={formatting.italic}
125
- onPressedChange={(pressed) =>
126
- setFormatting((prev) => ({ ...prev, italic: pressed }))
127
- }
128
- size="sm"
129
- >
130
- <Icon symbol="format_italic" />
131
- </Toggle>
132
- <Toggle
133
- pressed={formatting.underline}
134
- onPressedChange={(pressed) =>
135
- setFormatting((prev) => ({ ...prev, underline: pressed }))
136
- }
137
- size="sm"
138
- >
139
- <Icon symbol="format_underlined" />
140
- </Toggle>
141
- </div>
142
- );
143
- }
144
- ```
145
-
146
- ### Media Controls
147
-
148
- ```tsx
149
- function MediaControls() {
150
- const [media, setMedia] = useState({
151
- microphone: false,
152
- camera: false,
153
- });
154
-
155
- return (
156
- <div className="flex gap-3">
157
- <Toggle
158
- pressed={media.microphone}
159
- onPressedChange={(pressed) =>
160
- setMedia((prev) => ({ ...prev, microphone: pressed }))
161
- }
162
- variant="outline"
163
- className={
164
- !media.microphone ? "bg-destructive text-destructive-foreground" : ""
165
- }
166
- >
167
- <Icon symbol={media.microphone ? "mic" : "mic_off"} />
168
- </Toggle>
169
-
170
- <Toggle
171
- pressed={media.camera}
172
- onPressedChange={(pressed) =>
173
- setMedia((prev) => ({ ...prev, camera: pressed }))
174
- }
175
- variant="outline"
176
- className={
177
- !media.camera ? "bg-destructive text-destructive-foreground" : ""
178
- }
179
- >
180
- <Icon symbol={media.camera ? "videocam" : "videocam_off"} />
181
- </Toggle>
182
- </div>
183
- );
184
- }
185
- ```
186
-
187
- ### Deshabilitado
188
-
189
- ```tsx
190
- <Toggle disabled><Icon symbol="format_underlined" /></Toggle>
191
- <Toggle disabled defaultPressed><Icon symbol="format_underlined" /></Toggle>
192
- ```
193
-
194
- ## Casos de Uso
195
-
196
- **Text formatting**: Bold, italic, underline toggles
197
- **Media controls**: Mic/camera on/off
198
- **View options**: List/grid view toggle
199
- **Preferences**: Dark mode, notifications
200
- **Filters**: Show/hide options
201
-
202
- ## Estilos Base
203
-
204
- - **Sizes**: `h-8 min-w-8` (sm), `h-9 min-w-9` (default), `h-10 min-w-10` (lg)
205
- - **State off**: `bg-transparent`
206
- - **State on**: `bg-accent text-accent-foreground`
207
- - **Hover**: `bg-muted text-muted-foreground`
208
- - **Outline**: `border border-input shadow-xs`
209
- - **Focus**: `ring-ring/50` con `ring-[3px]`
210
-
211
- ## Accesibilidad
212
-
213
- - ✅ **Role**: `role="button"` con `aria-pressed`
214
- - ✅ **ARIA**: `aria-label` requerido para icon-only
215
- - ✅ **Keyboard**: Space/Enter para toggle
216
- - ✅ **State**: Screen readers anuncian pressed/not pressed
217
- - ✅ **Focus**: Focus ring visible
218
-
219
- ## Notas de Implementación
220
-
221
- - **Radix UI**: Basado en `@radix-ui/react-toggle`
222
- - **CVA**: Variantes con class-variance-authority
223
- - **Data state**: `data-state="on|off"` para estilos
224
- - **Controlled**: Usa `pressed` + `onPressedChange`
225
- - **Uncontrolled**: Usa `defaultPressed`
226
-
227
- ## Troubleshooting
228
-
229
- **Estado no cambia**: En modo controlado usa `pressed` + `onPressedChange`, no `defaultPressed`
230
- **No accesible**: Agrega `aria-label` en toggles solo con iconos
231
- **Estilo no actualiza**: Verifica `data-state="on"` aplicado cuando pressed
232
- **Variant no funciona**: Usa `variant="outline"` o `variant="default"`
233
-
234
- ## Referencias
235
-
236
- - **Radix UI Toggle**: <https://www.radix-ui.com/primitives/docs/components/toggle>
237
- - **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
+ <Icon symbol="format_italic" />
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 { Icon } from "@adamosuiteservices/ui/icon";
44
+
45
+ <Toggle aria-label="Toggle italic">
46
+ <Icon symbol="format_italic" />
47
+ </Toggle>;
48
+ ```
49
+
50
+ ### Con Texto
51
+
52
+ ```tsx
53
+ <Toggle aria-label="Toggle bold">
54
+ <Icon symbol="format_bold" />
55
+ Bold
56
+ </Toggle>
57
+ ```
58
+
59
+ ### Variantes
60
+
61
+ ```tsx
62
+ // Default (transparent background)
63
+ <Toggle aria-label="Default">
64
+ <Icon symbol="format_italic" />
65
+ </Toggle>
66
+
67
+ // Outline (con border)
68
+ <Toggle variant="outline" aria-label="Outline">
69
+ <Icon symbol="format_italic" />
70
+ </Toggle>
71
+ ```
72
+
73
+ ### Tamaños
74
+
75
+ ```tsx
76
+ <Toggle size="sm"><Icon symbol="format_underlined" /></Toggle>
77
+ <Toggle size="default"><Icon symbol="format_underlined" /></Toggle>
78
+ <Toggle size="lg"><Icon symbol="format_underlined" /></Toggle>
79
+ ```
80
+
81
+ ### Controlado
82
+
83
+ ```tsx
84
+ import { useState } from "react";
85
+
86
+ function App() {
87
+ const [isPressed, setIsPressed] = useState(false);
88
+
89
+ return (
90
+ <Toggle
91
+ pressed={isPressed}
92
+ onPressedChange={setIsPressed}
93
+ aria-label="Toggle bold"
94
+ >
95
+ <Icon symbol="format_bold" />
96
+ {isPressed ? "Bold (On)" : "Bold (Off)"}
97
+ </Toggle>
98
+ );
99
+ }
100
+ ```
101
+
102
+ ### Text Editor Formatting
103
+
104
+ ```tsx
105
+ function TextEditor() {
106
+ const [formatting, setFormatting] = useState({
107
+ bold: false,
108
+ italic: false,
109
+ underline: false,
110
+ });
111
+
112
+ return (
113
+ <div className="flex gap-1">
114
+ <Toggle
115
+ pressed={formatting.bold}
116
+ onPressedChange={(pressed) =>
117
+ setFormatting((prev) => ({ ...prev, bold: pressed }))
118
+ }
119
+ size="sm"
120
+ >
121
+ <Icon symbol="format_bold" />
122
+ </Toggle>
123
+ <Toggle
124
+ pressed={formatting.italic}
125
+ onPressedChange={(pressed) =>
126
+ setFormatting((prev) => ({ ...prev, italic: pressed }))
127
+ }
128
+ size="sm"
129
+ >
130
+ <Icon symbol="format_italic" />
131
+ </Toggle>
132
+ <Toggle
133
+ pressed={formatting.underline}
134
+ onPressedChange={(pressed) =>
135
+ setFormatting((prev) => ({ ...prev, underline: pressed }))
136
+ }
137
+ size="sm"
138
+ >
139
+ <Icon symbol="format_underlined" />
140
+ </Toggle>
141
+ </div>
142
+ );
143
+ }
144
+ ```
145
+
146
+ ### Media Controls
147
+
148
+ ```tsx
149
+ function MediaControls() {
150
+ const [media, setMedia] = useState({
151
+ microphone: false,
152
+ camera: false,
153
+ });
154
+
155
+ return (
156
+ <div className="flex gap-3">
157
+ <Toggle
158
+ pressed={media.microphone}
159
+ onPressedChange={(pressed) =>
160
+ setMedia((prev) => ({ ...prev, microphone: pressed }))
161
+ }
162
+ variant="outline"
163
+ className={
164
+ !media.microphone ? "bg-destructive text-destructive-foreground" : ""
165
+ }
166
+ >
167
+ <Icon symbol={media.microphone ? "mic" : "mic_off"} />
168
+ </Toggle>
169
+
170
+ <Toggle
171
+ pressed={media.camera}
172
+ onPressedChange={(pressed) =>
173
+ setMedia((prev) => ({ ...prev, camera: pressed }))
174
+ }
175
+ variant="outline"
176
+ className={
177
+ !media.camera ? "bg-destructive text-destructive-foreground" : ""
178
+ }
179
+ >
180
+ <Icon symbol={media.camera ? "videocam" : "videocam_off"} />
181
+ </Toggle>
182
+ </div>
183
+ );
184
+ }
185
+ ```
186
+
187
+ ### Deshabilitado
188
+
189
+ ```tsx
190
+ <Toggle disabled><Icon symbol="format_underlined" /></Toggle>
191
+ <Toggle disabled defaultPressed><Icon symbol="format_underlined" /></Toggle>
192
+ ```
193
+
194
+ ## Casos de Uso
195
+
196
+ **Text formatting**: Bold, italic, underline toggles
197
+ **Media controls**: Mic/camera on/off
198
+ **View options**: List/grid view toggle
199
+ **Preferences**: Dark mode, notifications
200
+ **Filters**: Show/hide options
201
+
202
+ ## Estilos Base
203
+
204
+ - **Sizes**: `h-8 min-w-8` (sm), `h-9 min-w-9` (default), `h-10 min-w-10` (lg)
205
+ - **State off**: `bg-transparent`
206
+ - **State on**: `bg-accent text-accent-foreground`
207
+ - **Hover**: `bg-muted text-muted-foreground`
208
+ - **Outline**: `border border-input shadow-xs`
209
+ - **Focus**: `ring-ring/50` con `ring-[3px]`
210
+
211
+ ## Accesibilidad
212
+
213
+ - ✅ **Role**: `role="button"` con `aria-pressed`
214
+ - ✅ **ARIA**: `aria-label` requerido para icon-only
215
+ - ✅ **Keyboard**: Space/Enter para toggle
216
+ - ✅ **State**: Screen readers anuncian pressed/not pressed
217
+ - ✅ **Focus**: Focus ring visible
218
+
219
+ ## Notas de Implementación
220
+
221
+ - **Radix UI**: Basado en `@radix-ui/react-toggle`
222
+ - **CVA**: Variantes con class-variance-authority
223
+ - **Data state**: `data-state="on|off"` para estilos
224
+ - **Controlled**: Usa `pressed` + `onPressedChange`
225
+ - **Uncontrolled**: Usa `defaultPressed`
226
+
227
+ ## Troubleshooting
228
+
229
+ **Estado no cambia**: En modo controlado usa `pressed` + `onPressedChange`, no `defaultPressed`
230
+ **No accesible**: Agrega `aria-label` en toggles solo con iconos
231
+ **Estilo no actualiza**: Verifica `data-state="on"` aplicado cuando pressed
232
+ **Variant no funciona**: Usa `variant="outline"` o `variant="default"`
233
+
234
+ ## Referencias
235
+
236
+ - **Radix UI Toggle**: <https://www.radix-ui.com/primitives/docs/components/toggle>
237
+ - **shadcn/ui Toggle**: <https://ui.shadcn.com/docs/components/toggle>