@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.
- package/dist/accordion-rounded.cjs +24 -2
- package/dist/accordion-rounded.js +46 -8
- package/dist/accordion.cjs +20 -1
- package/dist/accordion.js +29 -5
- package/dist/alert.cjs +26 -1
- package/dist/alert.js +33 -8
- package/dist/avatar.cjs +7 -1
- package/dist/avatar.js +8 -2
- package/dist/badge.cjs +83 -1
- package/dist/badge.js +106 -24
- package/dist/breadcrumb.cjs +8 -1
- package/dist/breadcrumb.js +11 -4
- package/dist/button-B7ZP4LZN.js +127 -0
- package/dist/button-D-qFRXiM.cjs +70 -0
- package/dist/button-group.cjs +25 -1
- package/dist/button-group.js +33 -9
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/calendar.cjs +74 -1
- package/dist/calendar.js +114 -35
- package/dist/card.cjs +35 -1
- package/dist/card.js +45 -11
- package/dist/{checkbox-YWAnswaW.cjs → checkbox-CdnZ8VFJ.cjs} +21 -1
- package/dist/{checkbox-Dr487kAg.js → checkbox-DhBcmKze.js} +34 -4
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/combobox.cjs +36 -2
- package/dist/combobox.js +62 -22
- package/dist/components/icons/account-balance-icon.d.ts +3 -0
- package/dist/components/icons/account-icon.d.ts +3 -0
- package/dist/components/icons/add-circle-icon.d.ts +3 -0
- package/dist/components/icons/alarm-icon.d.ts +3 -0
- package/dist/components/icons/archive-icon.d.ts +3 -0
- package/dist/components/icons/arrow-back-icon.d.ts +3 -0
- package/dist/components/icons/arrow-circle-up-icon.d.ts +3 -0
- package/dist/components/icons/arrow-forward-icon.d.ts +3 -0
- package/dist/components/icons/arrow-outward-icon.d.ts +3 -0
- package/dist/components/icons/article-icon.d.ts +3 -0
- package/dist/components/icons/attach-file-icon.d.ts +3 -0
- package/dist/components/icons/autorenew-icon.d.ts +3 -0
- package/dist/components/icons/bookmark-icon.d.ts +3 -0
- package/dist/components/icons/calculate-icon.d.ts +3 -0
- package/dist/components/icons/calendar-today-icon.d.ts +3 -0
- package/dist/components/icons/call-split-icon.d.ts +3 -0
- package/dist/components/icons/cancel-filled-icon.d.ts +3 -0
- package/dist/components/icons/cancel-icon.d.ts +3 -0
- package/dist/components/icons/check-circle-icon.d.ts +3 -0
- package/dist/components/icons/check-icon.d.ts +3 -0
- package/dist/components/icons/chevron-back-icon.d.ts +3 -0
- package/dist/components/icons/chevron-down-icon.d.ts +3 -0
- package/dist/components/icons/chevron-forward-icon.d.ts +3 -0
- package/dist/components/icons/chevron-up-icon.d.ts +3 -0
- package/dist/components/icons/clarify-icon.d.ts +3 -0
- package/dist/components/icons/clock-icon.d.ts +3 -0
- package/dist/components/icons/close-icon.d.ts +3 -0
- package/dist/components/icons/confirmation-number-icon.d.ts +3 -0
- package/dist/components/icons/contacts-icon.d.ts +3 -0
- package/dist/components/icons/contract-delete-icon.d.ts +3 -0
- package/dist/components/icons/copy-icon.d.ts +3 -0
- package/dist/components/icons/do-not-touch-icon.d.ts +3 -0
- package/dist/components/icons/download-icon.d.ts +3 -0
- package/dist/components/icons/dragger-icon.d.ts +3 -0
- package/dist/components/icons/edit-icon.d.ts +3 -0
- package/dist/components/icons/edit-square-icon.d.ts +3 -0
- package/dist/components/icons/exclamation-icon.d.ts +3 -0
- package/dist/components/icons/expand-circle-right-icon.d.ts +3 -0
- package/dist/components/icons/feature-search-icon.d.ts +3 -0
- package/dist/components/icons/filter-icon.d.ts +3 -0
- package/dist/components/icons/folder-icon.d.ts +3 -0
- package/dist/components/icons/folder-open-icon.d.ts +3 -0
- package/dist/components/icons/format-list-bulleted-icon.d.ts +3 -0
- package/dist/components/icons/hamburger-menu-icon.d.ts +3 -0
- package/dist/components/icons/help-icon.d.ts +3 -0
- package/dist/components/icons/hide-pass-icon.d.ts +3 -0
- package/dist/components/icons/home-icon.d.ts +3 -0
- package/dist/components/icons/id-card-icon.d.ts +3 -0
- package/dist/components/icons/index.d.ts +88 -0
- package/dist/components/icons/info-icon.d.ts +3 -0
- package/dist/components/icons/kid-star-icon.d.ts +3 -0
- package/dist/components/icons/language-icon.d.ts +3 -0
- package/dist/components/icons/last-page-icon.d.ts +3 -0
- package/dist/components/icons/layers-icon.d.ts +3 -0
- package/dist/components/icons/location-icon.d.ts +3 -0
- package/dist/components/icons/mail-icon.d.ts +3 -0
- package/dist/components/icons/manage-search-icon.d.ts +3 -0
- package/dist/components/icons/menu-icon.d.ts +3 -0
- package/dist/components/icons/message-icon.d.ts +3 -0
- package/dist/components/icons/metrics-icon.d.ts +3 -0
- package/dist/components/icons/mic-icon.d.ts +3 -0
- package/dist/components/icons/minus-icon.d.ts +3 -0
- package/dist/components/icons/mode-comment-icon.d.ts +3 -0
- package/dist/components/icons/money-icon.d.ts +3 -0
- package/dist/components/icons/monitoring-icon.d.ts +3 -0
- package/dist/components/icons/more-icon.d.ts +3 -0
- package/dist/components/icons/notifications-icon.d.ts +3 -0
- package/dist/components/icons/open-in-new-icon.d.ts +3 -0
- package/dist/components/icons/palette-icon.d.ts +3 -0
- package/dist/components/icons/password-icon.d.ts +3 -0
- package/dist/components/icons/pending-icon.d.ts +3 -0
- package/dist/components/icons/person-add-icon.d.ts +3 -0
- package/dist/components/icons/person-search-icon.d.ts +3 -0
- package/dist/components/icons/photo-icon.d.ts +3 -0
- package/dist/components/icons/plus-icon.d.ts +3 -0
- package/dist/components/icons/policy-icon.d.ts +3 -0
- package/dist/components/icons/publish-icon.d.ts +3 -0
- package/dist/components/icons/ready-icon.d.ts +3 -0
- package/dist/components/icons/receipt-icon.d.ts +3 -0
- package/dist/components/icons/receive-icon.d.ts +3 -0
- package/dist/components/icons/refresh-icon.d.ts +3 -0
- package/dist/components/icons/search-icon.d.ts +3 -0
- package/dist/components/icons/see-icon.d.ts +3 -0
- package/dist/components/icons/send-icon.d.ts +3 -0
- package/dist/components/icons/settings-icon.d.ts +3 -0
- package/dist/components/icons/shield-icon.d.ts +3 -0
- package/dist/components/icons/swap-horiz-icon.d.ts +3 -0
- package/dist/components/icons/tag-icon.d.ts +3 -0
- package/dist/components/icons/trash-icon.d.ts +3 -0
- package/dist/components/layout/toaster/toaster.d.ts +1 -1
- package/dist/components/layout/toaster/toaster.stories.d.ts +1 -1
- package/dist/components/ui/accordion/accordion.d.ts +1 -1
- package/dist/components/ui/accordion/accordion.stories.d.ts +1 -1
- package/dist/components/ui/accordion-rounded/accordion-rounded.d.ts +1 -1
- package/dist/components/ui/accordion-rounded/accordion-rounded.stories.d.ts +1 -1
- package/dist/components/ui/alert/alert.stories.d.ts +1 -1
- package/dist/components/ui/avatar/avatar.d.ts +1 -1
- package/dist/components/ui/avatar/avatar.stories.d.ts +1 -1
- package/dist/components/ui/badge/badge.stories.d.ts +1 -1
- package/dist/components/ui/breadcrumb/breadcrumb.stories.d.ts +1 -1
- package/dist/components/ui/button/button.stories.d.ts +1 -1
- package/dist/components/ui/button-group/button-group.d.ts +1 -1
- package/dist/components/ui/button-group/button-group.stories.d.ts +1 -1
- package/dist/components/ui/calendar/calendar.d.ts +1 -1
- package/dist/components/ui/calendar/calendar.stories.d.ts +1 -1
- package/dist/components/ui/card/card.stories.d.ts +1 -1
- package/dist/components/ui/checkbox/checkbox.d.ts +1 -1
- package/dist/components/ui/checkbox/checkbox.stories.d.ts +1 -1
- package/dist/components/ui/collapsible/collapsible.stories.d.ts +1 -1
- package/dist/components/ui/combobox/combobox.stories.d.ts +1 -1
- package/dist/components/ui/command/command.d.ts +1 -1
- package/dist/components/ui/context-menu/context-menu.d.ts +1 -1
- package/dist/components/ui/context-menu/context-menu.stories.d.ts +1 -1
- package/dist/components/ui/dialog/dialog.d.ts +1 -1
- package/dist/components/ui/dialog/dialog.stories.d.ts +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu.stories.d.ts +1 -1
- package/dist/components/ui/field/field.d.ts +1 -1
- package/dist/components/ui/field/field.stories.d.ts +1 -1
- package/dist/components/ui/hover-card/hover-card.d.ts +1 -1
- package/dist/components/ui/hover-card/hover-card.stories.d.ts +1 -1
- package/dist/components/ui/input/input.stories.d.ts +1 -1
- package/dist/components/ui/input-group/Input-group.stories.d.ts +1 -1
- package/dist/components/ui/input-group/input-group.d.ts +1 -1
- package/dist/components/ui/kbd/kbd.stories.d.ts +1 -1
- package/dist/components/ui/label/label.d.ts +1 -1
- package/dist/components/ui/label/label.stories.d.ts +1 -1
- package/dist/components/ui/pagination/pagination.stories.d.ts +1 -1
- package/dist/components/ui/popover/popover.d.ts +1 -1
- package/dist/components/ui/popover/popover.stories.d.ts +1 -1
- package/dist/components/ui/progress/progress.d.ts +1 -1
- package/dist/components/ui/progress/progress.stories.d.ts +1 -1
- package/dist/components/ui/radio-group/radio-group.d.ts +1 -1
- package/dist/components/ui/radio-group/radio-group.stories.d.ts +1 -1
- package/dist/components/ui/scroll-area/scroll-area.d.ts +1 -1
- package/dist/components/ui/scroll-area/scroll-area.stories.d.ts +1 -1
- package/dist/components/ui/select/select.d.ts +1 -1
- package/dist/components/ui/select/select.stories.d.ts +1 -1
- package/dist/components/ui/separator/separator.d.ts +1 -1
- package/dist/components/ui/separator/separator.stories.d.ts +1 -1
- package/dist/components/ui/sheet/sheet.d.ts +1 -1
- package/dist/components/ui/sheet/sheet.stories.d.ts +1 -1
- package/dist/components/ui/skeleton/skeleton.stories.d.ts +1 -1
- package/dist/components/ui/slider/slider.d.ts +1 -1
- package/dist/components/ui/slider/slider.stories.d.ts +1 -1
- package/dist/components/ui/spinner/spinner.stories.d.ts +1 -1
- package/dist/components/ui/switch/switch.d.ts +1 -1
- package/dist/components/ui/switch/switch.stories.d.ts +1 -1
- package/dist/components/ui/tabs/tabs.d.ts +1 -1
- package/dist/components/ui/tabs/tabs.stories.d.ts +1 -1
- package/dist/components/ui/tabs-underline/tabs-underline.d.ts +1 -1
- package/dist/components/ui/tabs-underline/tabs-underline.stories.d.ts +1 -1
- package/dist/components/ui/textarea/textarea.stories.d.ts +1 -1
- package/dist/components/ui/toggle/toggle.d.ts +1 -1
- package/dist/components/ui/toggle/toggle.stories.d.ts +1 -1
- package/dist/components/ui/tooltip/tooltip.d.ts +1 -1
- package/dist/components/ui/tooltip/tooltip.stories.d.ts +1 -1
- package/dist/context-menu.cjs +79 -1
- package/dist/context-menu.js +101 -11
- package/dist/custom-layered-styles.css +1 -1
- package/dist/dialog.cjs +30 -1
- package/dist/dialog.js +35 -6
- package/dist/dropdown-menu.cjs +79 -1
- package/dist/dropdown-menu.js +101 -11
- package/dist/field.cjs +66 -1
- package/dist/field.js +91 -26
- package/dist/hover-card.cjs +15 -1
- package/dist/hover-card.js +15 -1
- package/dist/icons.cjs +1 -0
- package/dist/icons.js +1507 -0
- package/dist/input-BQZUpTEY.js +42 -0
- package/dist/input-DSmxdfq5.cjs +21 -0
- package/dist/input-group.cjs +76 -1
- package/dist/input-group.js +99 -24
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/kbd.cjs +10 -1
- package/dist/kbd.js +11 -2
- package/dist/{label-CmwGvhy1.js → label-BJ8Yf6Ft.js} +7 -1
- package/dist/{label-BjXORCBM.cjs → label-CNGQhi5L.cjs} +7 -1
- package/dist/label.cjs +1 -1
- package/dist/label.js +1 -1
- package/dist/pagination.cjs +13 -1
- package/dist/pagination.js +30 -6
- package/dist/{popover-FCKBtFo-.cjs → popover-CYbik-H4.cjs} +15 -1
- package/dist/{popover-3rIoNCXs.js → popover-DAwH8jUh.js} +15 -1
- package/dist/popover.cjs +1 -1
- package/dist/popover.js +1 -1
- package/dist/radio-group.cjs +14 -1
- package/dist/radio-group.js +20 -2
- package/dist/select.cjs +68 -1
- package/dist/select.js +83 -10
- package/dist/{separator-BaZqZZ9R.cjs → separator-Brpax0EI.cjs} +7 -1
- package/dist/{separator-DR7lQjv9.js → separator-DVypR3Qf.js} +7 -1
- package/dist/separator.cjs +1 -1
- package/dist/separator.js +1 -1
- package/dist/sheet-CGahUP7F.cjs +41 -0
- package/dist/sheet-Q3dBOQG-.js +174 -0
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/sidebar.cjs +20 -2
- package/dist/sidebar.js +58 -26
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/slider.cjs +27 -1
- package/dist/slider.js +30 -4
- package/dist/space.css +1 -1
- package/dist/styles.css +1 -1
- package/dist/switch.cjs +18 -1
- package/dist/switch.js +19 -2
- package/dist/table.cjs +20 -1
- package/dist/table.js +26 -7
- package/dist/tabs-underline.cjs +21 -1
- package/dist/tabs-underline.js +23 -3
- package/dist/tabs.cjs +22 -1
- package/dist/tabs.js +24 -3
- package/dist/textarea-CG7iQcb3.cjs +14 -0
- package/dist/textarea-CUPWKl-S.js +32 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/toaster.cjs +4 -1
- package/dist/toaster.js +9 -6
- package/dist/toggle.cjs +17 -1
- package/dist/toggle.js +25 -9
- package/dist/tooltip.cjs +16 -1
- package/dist/tooltip.js +22 -2
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +6 -6
- package/docs/AI-GUIDE.md +321 -321
- package/docs/components/layout/sidebar.md +404 -404
- package/docs/components/layout/toaster.md +436 -436
- package/docs/components/ui/accordion-rounded.md +583 -583
- package/docs/components/ui/accordion.md +267 -267
- package/docs/components/ui/alert.md +671 -671
- package/docs/components/ui/avatar.md +588 -588
- package/docs/components/ui/badge.md +1024 -1024
- package/docs/components/ui/button-group.md +1002 -1002
- package/docs/components/ui/button.md +1078 -1078
- package/docs/components/ui/calendar.md +1159 -1159
- package/docs/components/ui/card.md +1265 -1265
- package/docs/components/ui/checkbox.md +292 -292
- package/docs/components/ui/collapsible.md +320 -320
- package/docs/components/ui/command.md +454 -454
- package/docs/components/ui/context-menu.md +540 -540
- package/docs/components/ui/dialog.md +628 -628
- package/docs/components/ui/dropdown-menu.md +731 -731
- package/docs/components/ui/field.md +706 -706
- package/docs/components/ui/hover-card.md +446 -446
- package/docs/components/ui/input-group.md +509 -509
- package/docs/components/ui/input.md +362 -362
- package/docs/components/ui/kbd.md +434 -434
- package/docs/components/ui/label.md +359 -359
- package/docs/components/ui/pagination.md +650 -650
- package/docs/components/ui/popover.md +536 -536
- package/docs/components/ui/progress.md +182 -182
- package/docs/components/ui/radio-group.md +311 -311
- package/docs/components/ui/select.md +352 -352
- package/docs/components/ui/separator.md +214 -214
- package/docs/components/ui/sheet.md +142 -142
- package/docs/components/ui/skeleton.md +140 -140
- package/docs/components/ui/slider.md +341 -341
- package/docs/components/ui/spinner.md +170 -170
- package/docs/components/ui/switch.md +402 -402
- package/docs/components/ui/table.md +183 -183
- package/docs/components/ui/tabs-underline.md +106 -106
- package/docs/components/ui/tabs.md +122 -122
- package/docs/components/ui/textarea.md +243 -243
- package/docs/components/ui/toggle.md +243 -243
- package/docs/components/ui/tooltip.md +320 -320
- package/docs/components/ui/typography.md +191 -191
- package/package.json +7 -1
- package/dist/button-2GdKenQI.js +0 -58
- package/dist/button-DEQVHMrX.cjs +0 -1
- package/dist/input-BF73maXg.cjs +0 -1
- package/dist/input-C04hsVXE.js +0 -22
- package/dist/sheet-B-9YHdR5.js +0 -128
- package/dist/sheet-CU-sFSaJ.cjs +0 -1
- package/dist/textarea-3ZdbFRDN.cjs +0 -1
- 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>
|