siesa-ui-kit 1.0.2 → 1.0.4
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/README.md +115 -115
- package/bin/install.cjs +502 -502
- package/bin/prepare-publish.cjs +28 -28
- package/bin/restore-folders.cjs +28 -28
- package/claude/agents/siesa-ui-kit-specialist.md +2445 -0
- package/claude/prompts/component-template.md +121 -0
- package/claude/prompts/siesa-ui-kit.md +28 -0
- package/claude/settings.local.json +67 -2
- package/dist/components/Button/icons.d.ts +6 -5
- package/dist/components/Button/icons.d.ts.map +1 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.d.ts.map +1 -1
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts +21 -0
- package/dist/components/DropdownItemCollapsible/DropdownItemCollapsible.types.d.ts.map +1 -1
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts +122 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts +139 -0
- package/dist/components/NavigationRailCommercial/NavigationRailCommercial.types.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/icons.d.ts +33 -0
- package/dist/components/NavigationRailCommercial/icons.d.ts.map +1 -0
- package/dist/components/NavigationRailCommercial/index.d.ts +4 -0
- package/dist/components/NavigationRailCommercial/index.d.ts.map +1 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.d.ts.map +1 -1
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts +7 -0
- package/dist/components/NavigationRailItem/NavigationRailItem.types.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts +41 -0
- package/dist/components/NavigationRailTypes/NavigationRailTypes.types.d.ts.map +1 -1
- package/dist/components/NavigationRailTypes/icons.d.ts +15 -29
- package/dist/components/NavigationRailTypes/icons.d.ts.map +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/icons.d.ts +6 -2
- package/dist/components/Select/icons.d.ts.map +1 -1
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/siesa-ui-kit.cjs +404 -190
- package/dist/siesa-ui-kit.cjs.map +1 -1
- package/dist/siesa-ui-kit.mjs +6590 -1506
- package/dist/siesa-ui-kit.mjs.map +1 -1
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts +48 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.d.ts.map +1 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts +49 -0
- package/dist/views/LayoutCommercial/LayoutCommercial.types.d.ts.map +1 -0
- package/dist/views/LayoutCommercial/index.d.ts +3 -0
- package/dist/views/LayoutCommercial/index.d.ts.map +1 -0
- package/docs/icons.md +12 -31
- package/package.json +111 -110
- package/src/components/Avatar/Avatar.stories.tsx +494 -494
- package/src/components/Button/Button.stories.tsx +950 -950
- package/src/components/Button/Button.tsx +337 -337
- package/src/components/Button/Button.types.ts +180 -180
- package/src/components/Button/icons.tsx +23 -62
- package/src/components/DescriptionList/DescriptionList.stories.tsx +250 -250
- package/src/components/Divider/Divider.stories.tsx +263 -263
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +317 -317
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +307 -287
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +136 -111
- package/src/components/DropdownItemCollapsible/README.md +264 -264
- package/src/components/DropdownItemCollapsible/icons.tsx +57 -57
- package/src/components/DropdownItemCollapsible/index.ts +12 -12
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +386 -386
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +216 -216
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +93 -93
- package/src/components/DropdownItemHeading/README.md +573 -573
- package/src/components/DropdownItemHeading/icons.tsx +125 -125
- package/src/components/DropdownItemHeading/index.ts +3 -3
- package/src/components/Input/Input.stories.tsx +583 -583
- package/src/components/LoginView/LoginView.stories.tsx +148 -148
- package/src/components/LoginView/LoginView.tsx +426 -426
- package/src/components/LoginView/LoginView.types.ts +52 -52
- package/src/components/LoginView/README.md +396 -396
- package/src/components/LoginView/icons.tsx +85 -85
- package/src/components/LoginView/index.ts +3 -3
- package/src/components/Navbar/Navbar.stories.tsx +810 -810
- package/src/components/Navbar/Navbar.tsx +755 -755
- package/src/components/Navbar/Navbar.types.ts +219 -219
- package/src/components/Navbar/README.md +279 -279
- package/src/components/Navbar/index.ts +8 -8
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.stories.tsx +464 -0
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.tsx +301 -0
- package/src/components/NavigationRailCommercial/NavigationRailCommercial.types.ts +162 -0
- package/src/components/NavigationRailCommercial/README.md +251 -0
- package/src/components/NavigationRailCommercial/icons.tsx +54 -0
- package/src/components/NavigationRailCommercial/index.ts +6 -0
- package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +667 -667
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +314 -313
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +175 -167
- package/src/components/NavigationRailItem/README.md +476 -476
- package/src/components/NavigationRailItem/index.ts +2 -2
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +462 -462
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +332 -332
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +178 -178
- package/src/components/NavigationRailPanel/README.md +461 -461
- package/src/components/NavigationRailPanel/index.ts +6 -6
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +682 -528
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +363 -378
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +178 -130
- package/src/components/NavigationRailTypes/README.md +573 -573
- package/src/components/NavigationRailTypes/icons.tsx +76 -141
- package/src/components/NavigationRailTypes/index.ts +7 -7
- package/src/components/Notification/Notification.stories.tsx +513 -513
- package/src/components/Notification/Notification.tsx +145 -145
- package/src/components/Notification/Notification.types.ts +142 -142
- package/src/components/Notification/README.md +409 -409
- package/src/components/POSConvention/POSConvention.stories.tsx +235 -235
- package/src/components/POSConvention/POSConvention.tsx +129 -129
- package/src/components/POSConvention/POSConvention.types.ts +38 -38
- package/src/components/POSConvention/README.md +123 -123
- package/src/components/POSConvention/icons.tsx +45 -45
- package/src/components/POSConvention/index.ts +3 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +531 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +247 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +87 -87
- package/src/components/POSLocationButton/README.md +253 -253
- package/src/components/POSLocationButton/icons.tsx +120 -120
- package/src/components/POSLocationButton/index.ts +14 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +415 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +179 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +51 -51
- package/src/components/POSNumberButton/README.md +321 -321
- package/src/components/POSNumberButton/index.ts +3 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +318 -318
- package/src/components/POSProductCard/POSProductCard.stories.tsx +642 -642
- package/src/components/POSProductCard/POSProductCard.tsx +208 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +76 -76
- package/src/components/POSProductCard/README.md +179 -179
- package/src/components/POSProductCard/icons.tsx +26 -26
- package/src/components/POSProductCard/index.ts +2 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +753 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +332 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +119 -119
- package/src/components/POSProductSidebarItems/README.md +198 -198
- package/src/components/POSProductSidebarItems/icons.tsx +21 -21
- package/src/components/POSProductSidebarItems/index.ts +3 -3
- package/src/components/POSTable/POSTable.stories.tsx +737 -737
- package/src/components/POSTable/POSTable.tsx +401 -401
- package/src/components/POSTable/README.md +286 -286
- package/src/components/Quantity/Quantity.stories.tsx +457 -457
- package/src/components/Radio/Radio.stories.tsx +523 -523
- package/src/components/Radio/Radio.tsx +1 -1
- package/src/components/Select/Select.stories.tsx +32 -0
- package/src/components/Select/Select.tsx +457 -454
- package/src/components/Select/icons.tsx +16 -41
- package/src/components/SignUpView/SignUpView.stories.tsx +129 -129
- package/src/components/SignUpView/SignUpView.tsx +503 -503
- package/src/components/SignUpView/SignUpView.types.ts +58 -58
- package/src/components/SignUpView/icons.tsx +71 -71
- package/src/components/SignUpView/index.ts +3 -3
- package/src/components/Switch/README.md +112 -112
- package/src/components/Switch/Switch.stories.tsx +550 -550
- package/src/components/Switch/Switch.tsx +246 -246
- package/src/components/Switch/Switch.types.ts +67 -67
- package/src/components/Table/Table.stories.tsx +805 -805
- package/src/components/Tabs/README.md +201 -201
- package/src/components/Tabs/Tabs.stories.tsx +580 -580
- package/src/components/Tabs/Tabs.tsx +356 -356
- package/src/components/Tabs/Tabs.types.ts +127 -127
- package/src/components/Tabs/icons.tsx +129 -129
- package/src/components/Tabs/index.ts +11 -11
- package/src/components/Textarea/Textarea.stories.tsx +535 -535
- package/src/index.ts +133 -102
- package/src/views/LayoutCommercial/LayoutCommercial.stories.tsx +374 -0
- package/src/views/LayoutCommercial/LayoutCommercial.tsx +125 -0
- package/src/views/LayoutCommercial/LayoutCommercial.types.ts +54 -0
- package/src/views/LayoutCommercial/README.md +286 -0
- package/src/views/LayoutCommercial/index.ts +2 -0
- package/src/views/ListView/ListView.stories.tsx +329 -329
- package/src/views/ListView/ListView.tsx +570 -570
- package/src/views/ListView/ListView.types.ts +211 -211
- package/src/views/ListView/icons.tsx +282 -282
- package/src/views/ListView/index.ts +11 -11
- package/src/views/LoginView/LoginView.tsx +426 -426
- package/src/views/ProductsView/ProductsView.stories.tsx +344 -344
- package/src/views/ProductsView/ProductsView.tsx +480 -480
- package/src/views/ProductsView/ProductsView.types.ts +238 -238
- package/src/views/ProductsView/README.md +312 -312
- package/src/views/ProductsView/icons.tsx +38 -38
- package/src/views/ProductsView/index.ts +8 -8
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +376 -376
- package/src/views/SignUpView/SignUpView.tsx +503 -503
- package/src/views/TableLayoutView/README.md +268 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +235 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +461 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +209 -209
- package/src/views/TableLayoutView/icons.tsx +113 -113
- package/src/views/TableLayoutView/index.ts +6 -6
- package/storybook/main.ts +19 -19
- package/storybook/preview.tsx +84 -84
- package/storybook/vitest.setup.ts +6 -6
- package/tailwind.config.js +128 -128
|
@@ -1,180 +1,180 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
import type { BadgeColor } from '../Badge/Badge.types';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Tipo de botón según el sistema de diseño Siesa (Figma node 4001-17240)
|
|
6
|
-
*
|
|
7
|
-
* - `default`: Botón primario con fondo sólido (#0e79fd) y borde (#3c9bf6)
|
|
8
|
-
* - Background: primary-custom-600 (#0e79fd)
|
|
9
|
-
* - Border: primary-inverse-border (#3c9bf6)
|
|
10
|
-
* - Text: primary-inverse-content (#eff8ff)
|
|
11
|
-
* - Sombra interna: shadow-button-inset
|
|
12
|
-
*
|
|
13
|
-
* - `outline`: Botón secundario con borde, sin fondo
|
|
14
|
-
* - Background: transparent
|
|
15
|
-
* - Border: primary-custom-300 (#93d1fd)
|
|
16
|
-
* - Text: primary-custom-600 (#0e79fd)
|
|
17
|
-
* - Sombra: shadow-sm
|
|
18
|
-
*
|
|
19
|
-
* - `plain`: Botón terciario sin borde visible (hover overlay)
|
|
20
|
-
* - Background: transparent
|
|
21
|
-
* - Border: transparent
|
|
22
|
-
* - Text: primary-custom-600 (#0e79fd)
|
|
23
|
-
*
|
|
24
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4001-17240
|
|
25
|
-
*/
|
|
26
|
-
export type ButtonType = 'default' | 'outline' | 'plain';
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Tamaños de botón según especificaciones de Figma (node 4001-17240)
|
|
30
|
-
*
|
|
31
|
-
* | Size | Height | Padding H | Padding V | Gap | Font Size |
|
|
32
|
-
* |------|--------|-----------|-----------|------|------------|
|
|
33
|
-
* | xs | 24px | 8px | 4px | 8px | 12px (xs) |
|
|
34
|
-
* | sm | 28px | 8px | 4px | 8px | 14px (sm) |
|
|
35
|
-
* | base | 32px | 10px | 6px | 8px | 14px (sm) |
|
|
36
|
-
* | l | 36px | 12px | 8px | 12px | 14px (sm) |
|
|
37
|
-
* | xl | 40px | 16px | 8px | 12px | 14px (sm) |
|
|
38
|
-
*
|
|
39
|
-
* Icon-only buttons son cuadrados perfectos con el mismo width y height.
|
|
40
|
-
*
|
|
41
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4001-17240
|
|
42
|
-
*/
|
|
43
|
-
export type ButtonSize = 'xs' | 'sm' | 'base' | 'l' | 'xl';
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Estados del botón según especificaciones de Figma
|
|
47
|
-
*
|
|
48
|
-
* - `default`: Estado normal con colores base
|
|
49
|
-
* - `hover`: Overlay visual (bg-primary-custom-500 para default, bg-hover-overlay para plain)
|
|
50
|
-
* - `focus`: Focus ring de 4px (#60b6fa) con offset de 2px (#dbeefe)
|
|
51
|
-
* - `disabled`: Opacity 50% con pointer-events-none
|
|
52
|
-
*
|
|
53
|
-
* @note Los estados hover y focus son manejados automáticamente por CSS.
|
|
54
|
-
*/
|
|
55
|
-
export type ButtonState = 'default' | 'hover' | 'focus' | 'disabled';
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Props del componente Button
|
|
59
|
-
*
|
|
60
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4001-17240
|
|
61
|
-
*/
|
|
62
|
-
export interface ButtonProps {
|
|
63
|
-
/**
|
|
64
|
-
* Tipo de botón (visual) - determina la jerarquía y estilo del botón
|
|
65
|
-
*
|
|
66
|
-
* - `default`: Acción principal (Guardar, Enviar, Confirmar)
|
|
67
|
-
* - `outline`: Acción secundaria (Cancelar, Volver)
|
|
68
|
-
* - `plain`: Acción terciaria (Cerrar, Ver más, Links)
|
|
69
|
-
*
|
|
70
|
-
* @default 'default'
|
|
71
|
-
*/
|
|
72
|
-
type?: ButtonType;
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Tamaño del botón - determina altura, padding y tipografía
|
|
76
|
-
*
|
|
77
|
-
* - `xs`: 24px - Espacios muy compactos, inline actions
|
|
78
|
-
* - `sm`: 28px - Barras de herramientas, acciones secundarias
|
|
79
|
-
* - `base`: 32px - Tamaño estándar para la mayoría de casos
|
|
80
|
-
* - `l`: 36px - Botones destacados, CTAs
|
|
81
|
-
* - `xl`: 40px - Heroes, landing pages
|
|
82
|
-
*
|
|
83
|
-
* @default 'base'
|
|
84
|
-
*/
|
|
85
|
-
size?: ButtonSize;
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Si true, el botón solo muestra iconos (sin texto)
|
|
89
|
-
* El botón se vuelve cuadrado perfecto (width = height)
|
|
90
|
-
*
|
|
91
|
-
* @default false
|
|
92
|
-
*/
|
|
93
|
-
iconOnly?: boolean;
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Icono a mostrar antes del texto (izquierda)
|
|
97
|
-
* Todos los iconos son 16x16px según especificaciones de Figma
|
|
98
|
-
*/
|
|
99
|
-
leftIcon?: ReactNode;
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Icono a mostrar después del texto (derecha)
|
|
103
|
-
* Todos los iconos son 16x16px según especificaciones de Figma
|
|
104
|
-
*/
|
|
105
|
-
rightIcon?: ReactNode;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Contenido del botón (texto o elementos React)
|
|
109
|
-
*/
|
|
110
|
-
children?: ReactNode;
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Si el botón está deshabilitado
|
|
114
|
-
* Aplica opacity: 50% y pointer-events: none
|
|
115
|
-
*
|
|
116
|
-
* @default false
|
|
117
|
-
*/
|
|
118
|
-
disabled?: boolean;
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Clases CSS adicionales para personalización
|
|
122
|
-
*/
|
|
123
|
-
className?: string;
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Función callback ejecutada al hacer click
|
|
127
|
-
*/
|
|
128
|
-
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Tipo de botón HTML (comportamiento de formulario)
|
|
132
|
-
*
|
|
133
|
-
* - `button`: Botón normal (no envía formularios)
|
|
134
|
-
* - `submit`: Envía el formulario al hacer click
|
|
135
|
-
* - `reset`: Resetea el formulario al hacer click
|
|
136
|
-
*
|
|
137
|
-
* @default 'button'
|
|
138
|
-
*/
|
|
139
|
-
htmlType?: 'button' | 'submit' | 'reset';
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Si el botón ocupa todo el ancho disponible de su contenedor
|
|
143
|
-
*
|
|
144
|
-
* @default false
|
|
145
|
-
*/
|
|
146
|
-
fullWidth?: boolean;
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Etiqueta accesible para lectores de pantalla
|
|
150
|
-
* **Requerido** para botones iconOnly para accesibilidad
|
|
151
|
-
*/
|
|
152
|
-
ariaLabel?: string;
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Si true, muestra un badge de notificación (dot) en la esquina superior derecha
|
|
156
|
-
*
|
|
157
|
-
* @default false
|
|
158
|
-
*/
|
|
159
|
-
badge?: boolean;
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Número a mostrar en el badge de notificación
|
|
163
|
-
* Si se proporciona, muestra un badge con contador en lugar de un dot
|
|
164
|
-
* Números mayores a 99 se muestran como "99+"
|
|
165
|
-
*/
|
|
166
|
-
badgeCount?: number;
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Color del badge de notificación
|
|
170
|
-
* Usa los colores del sistema de diseño
|
|
171
|
-
*
|
|
172
|
-
* @default 'red' (content-extensions-red: #b91c1c)
|
|
173
|
-
*/
|
|
174
|
-
badgeColor?: BadgeColor;
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Atributos HTML adicionales para el elemento button
|
|
178
|
-
*/
|
|
179
|
-
[key: string]: unknown;
|
|
180
|
-
}
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { BadgeColor } from '../Badge/Badge.types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Tipo de botón según el sistema de diseño Siesa (Figma node 4001-17240)
|
|
6
|
+
*
|
|
7
|
+
* - `default`: Botón primario con fondo sólido (#0e79fd) y borde (#3c9bf6)
|
|
8
|
+
* - Background: primary-custom-600 (#0e79fd)
|
|
9
|
+
* - Border: primary-inverse-border (#3c9bf6)
|
|
10
|
+
* - Text: primary-inverse-content (#eff8ff)
|
|
11
|
+
* - Sombra interna: shadow-button-inset
|
|
12
|
+
*
|
|
13
|
+
* - `outline`: Botón secundario con borde, sin fondo
|
|
14
|
+
* - Background: transparent
|
|
15
|
+
* - Border: primary-custom-300 (#93d1fd)
|
|
16
|
+
* - Text: primary-custom-600 (#0e79fd)
|
|
17
|
+
* - Sombra: shadow-sm
|
|
18
|
+
*
|
|
19
|
+
* - `plain`: Botón terciario sin borde visible (hover overlay)
|
|
20
|
+
* - Background: transparent
|
|
21
|
+
* - Border: transparent
|
|
22
|
+
* - Text: primary-custom-600 (#0e79fd)
|
|
23
|
+
*
|
|
24
|
+
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4001-17240
|
|
25
|
+
*/
|
|
26
|
+
export type ButtonType = 'default' | 'outline' | 'plain';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Tamaños de botón según especificaciones de Figma (node 4001-17240)
|
|
30
|
+
*
|
|
31
|
+
* | Size | Height | Padding H | Padding V | Gap | Font Size |
|
|
32
|
+
* |------|--------|-----------|-----------|------|------------|
|
|
33
|
+
* | xs | 24px | 8px | 4px | 8px | 12px (xs) |
|
|
34
|
+
* | sm | 28px | 8px | 4px | 8px | 14px (sm) |
|
|
35
|
+
* | base | 32px | 10px | 6px | 8px | 14px (sm) |
|
|
36
|
+
* | l | 36px | 12px | 8px | 12px | 14px (sm) |
|
|
37
|
+
* | xl | 40px | 16px | 8px | 12px | 14px (sm) |
|
|
38
|
+
*
|
|
39
|
+
* Icon-only buttons son cuadrados perfectos con el mismo width y height.
|
|
40
|
+
*
|
|
41
|
+
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4001-17240
|
|
42
|
+
*/
|
|
43
|
+
export type ButtonSize = 'xs' | 'sm' | 'base' | 'l' | 'xl';
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Estados del botón según especificaciones de Figma
|
|
47
|
+
*
|
|
48
|
+
* - `default`: Estado normal con colores base
|
|
49
|
+
* - `hover`: Overlay visual (bg-primary-custom-500 para default, bg-hover-overlay para plain)
|
|
50
|
+
* - `focus`: Focus ring de 4px (#60b6fa) con offset de 2px (#dbeefe)
|
|
51
|
+
* - `disabled`: Opacity 50% con pointer-events-none
|
|
52
|
+
*
|
|
53
|
+
* @note Los estados hover y focus son manejados automáticamente por CSS.
|
|
54
|
+
*/
|
|
55
|
+
export type ButtonState = 'default' | 'hover' | 'focus' | 'disabled';
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Props del componente Button
|
|
59
|
+
*
|
|
60
|
+
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4001-17240
|
|
61
|
+
*/
|
|
62
|
+
export interface ButtonProps {
|
|
63
|
+
/**
|
|
64
|
+
* Tipo de botón (visual) - determina la jerarquía y estilo del botón
|
|
65
|
+
*
|
|
66
|
+
* - `default`: Acción principal (Guardar, Enviar, Confirmar)
|
|
67
|
+
* - `outline`: Acción secundaria (Cancelar, Volver)
|
|
68
|
+
* - `plain`: Acción terciaria (Cerrar, Ver más, Links)
|
|
69
|
+
*
|
|
70
|
+
* @default 'default'
|
|
71
|
+
*/
|
|
72
|
+
type?: ButtonType;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Tamaño del botón - determina altura, padding y tipografía
|
|
76
|
+
*
|
|
77
|
+
* - `xs`: 24px - Espacios muy compactos, inline actions
|
|
78
|
+
* - `sm`: 28px - Barras de herramientas, acciones secundarias
|
|
79
|
+
* - `base`: 32px - Tamaño estándar para la mayoría de casos
|
|
80
|
+
* - `l`: 36px - Botones destacados, CTAs
|
|
81
|
+
* - `xl`: 40px - Heroes, landing pages
|
|
82
|
+
*
|
|
83
|
+
* @default 'base'
|
|
84
|
+
*/
|
|
85
|
+
size?: ButtonSize;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Si true, el botón solo muestra iconos (sin texto)
|
|
89
|
+
* El botón se vuelve cuadrado perfecto (width = height)
|
|
90
|
+
*
|
|
91
|
+
* @default false
|
|
92
|
+
*/
|
|
93
|
+
iconOnly?: boolean;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Icono a mostrar antes del texto (izquierda)
|
|
97
|
+
* Todos los iconos son 16x16px según especificaciones de Figma
|
|
98
|
+
*/
|
|
99
|
+
leftIcon?: ReactNode;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Icono a mostrar después del texto (derecha)
|
|
103
|
+
* Todos los iconos son 16x16px según especificaciones de Figma
|
|
104
|
+
*/
|
|
105
|
+
rightIcon?: ReactNode;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Contenido del botón (texto o elementos React)
|
|
109
|
+
*/
|
|
110
|
+
children?: ReactNode;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Si el botón está deshabilitado
|
|
114
|
+
* Aplica opacity: 50% y pointer-events: none
|
|
115
|
+
*
|
|
116
|
+
* @default false
|
|
117
|
+
*/
|
|
118
|
+
disabled?: boolean;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Clases CSS adicionales para personalización
|
|
122
|
+
*/
|
|
123
|
+
className?: string;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Función callback ejecutada al hacer click
|
|
127
|
+
*/
|
|
128
|
+
onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Tipo de botón HTML (comportamiento de formulario)
|
|
132
|
+
*
|
|
133
|
+
* - `button`: Botón normal (no envía formularios)
|
|
134
|
+
* - `submit`: Envía el formulario al hacer click
|
|
135
|
+
* - `reset`: Resetea el formulario al hacer click
|
|
136
|
+
*
|
|
137
|
+
* @default 'button'
|
|
138
|
+
*/
|
|
139
|
+
htmlType?: 'button' | 'submit' | 'reset';
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Si el botón ocupa todo el ancho disponible de su contenedor
|
|
143
|
+
*
|
|
144
|
+
* @default false
|
|
145
|
+
*/
|
|
146
|
+
fullWidth?: boolean;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Etiqueta accesible para lectores de pantalla
|
|
150
|
+
* **Requerido** para botones iconOnly para accesibilidad
|
|
151
|
+
*/
|
|
152
|
+
ariaLabel?: string;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Si true, muestra un badge de notificación (dot) en la esquina superior derecha
|
|
156
|
+
*
|
|
157
|
+
* @default false
|
|
158
|
+
*/
|
|
159
|
+
badge?: boolean;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Número a mostrar en el badge de notificación
|
|
163
|
+
* Si se proporciona, muestra un badge con contador en lugar de un dot
|
|
164
|
+
* Números mayores a 99 se muestran como "99+"
|
|
165
|
+
*/
|
|
166
|
+
badgeCount?: number;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Color del badge de notificación
|
|
170
|
+
* Usa los colores del sistema de diseño
|
|
171
|
+
*
|
|
172
|
+
* @default 'red' (content-extensions-red: #b91c1c)
|
|
173
|
+
*/
|
|
174
|
+
badgeColor?: BadgeColor;
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Atributos HTML adicionales para el elemento button
|
|
178
|
+
*/
|
|
179
|
+
[key: string]: unknown;
|
|
180
|
+
}
|
|
@@ -1,87 +1,48 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import {
|
|
3
|
+
PlusIcon as HeroPlus,
|
|
4
|
+
ChevronDownIcon as HeroChevronDown,
|
|
5
|
+
ArrowRightIcon as HeroArrowRight,
|
|
6
|
+
CheckIcon as HeroCheck,
|
|
7
|
+
XMarkIcon as HeroXMark,
|
|
8
|
+
} from '@heroicons/react/24/outline';
|
|
2
9
|
|
|
3
10
|
interface IconProps {
|
|
4
11
|
className?: string;
|
|
5
12
|
}
|
|
6
13
|
|
|
7
14
|
/**
|
|
8
|
-
* Icono Plus (heroicons
|
|
15
|
+
* Icono Plus (heroicons/plus)
|
|
9
16
|
*/
|
|
10
|
-
export const PlusIcon: React.FC<IconProps> = ({ className = '' }) => (
|
|
11
|
-
<
|
|
12
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
13
|
-
viewBox="0 0 16 16"
|
|
14
|
-
fill="currentColor"
|
|
15
|
-
className={className}
|
|
16
|
-
>
|
|
17
|
-
<path d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z" />
|
|
18
|
-
</svg>
|
|
17
|
+
export const PlusIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
|
|
18
|
+
<HeroPlus className={className} aria-hidden="true" />
|
|
19
19
|
);
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* Icono ChevronDown (heroicons
|
|
22
|
+
* Icono ChevronDown (heroicons/chevron-down)
|
|
23
23
|
*/
|
|
24
|
-
export const ChevronDownIcon: React.FC<IconProps> = ({ className = '' }) => (
|
|
25
|
-
<
|
|
26
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
27
|
-
viewBox="0 0 16 16"
|
|
28
|
-
fill="currentColor"
|
|
29
|
-
className={className}
|
|
30
|
-
>
|
|
31
|
-
<path
|
|
32
|
-
fillRule="evenodd"
|
|
33
|
-
d="M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z"
|
|
34
|
-
clipRule="evenodd"
|
|
35
|
-
/>
|
|
36
|
-
</svg>
|
|
24
|
+
export const ChevronDownIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
|
|
25
|
+
<HeroChevronDown className={className} aria-hidden="true" />
|
|
37
26
|
);
|
|
38
27
|
|
|
39
28
|
/**
|
|
40
|
-
* Icono ArrowRight (heroicons
|
|
29
|
+
* Icono ArrowRight (heroicons/arrow-right)
|
|
30
|
+
* @param {string} className Clases de Tailwind
|
|
41
31
|
*/
|
|
42
|
-
export const ArrowRightIcon: React.FC<IconProps> = ({ className = '' }) => (
|
|
43
|
-
<
|
|
44
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
45
|
-
viewBox="0 0 16 16"
|
|
46
|
-
fill="currentColor"
|
|
47
|
-
className={className}
|
|
48
|
-
>
|
|
49
|
-
<path
|
|
50
|
-
fillRule="evenodd"
|
|
51
|
-
d="M2 8c0-.414.336-.75.75-.75h8.69L8.22 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06-1.06l3.22-3.22H2.75A.75.75 0 0 1 2 8Z"
|
|
52
|
-
clipRule="evenodd"
|
|
53
|
-
/>
|
|
54
|
-
</svg>
|
|
32
|
+
export const ArrowRightIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
|
|
33
|
+
<HeroArrowRight className={className} aria-hidden="true" />
|
|
55
34
|
);
|
|
56
35
|
|
|
57
36
|
/**
|
|
58
|
-
* Icono Check (heroicons
|
|
37
|
+
* Icono Check (heroicons/check)
|
|
59
38
|
*/
|
|
60
|
-
export const CheckIcon: React.FC<IconProps> = ({ className = '' }) => (
|
|
61
|
-
<
|
|
62
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
63
|
-
viewBox="0 0 16 16"
|
|
64
|
-
fill="currentColor"
|
|
65
|
-
className={className}
|
|
66
|
-
>
|
|
67
|
-
<path
|
|
68
|
-
fillRule="evenodd"
|
|
69
|
-
d="M12.416 3.376a.75.75 0 0 1 .208 1.04l-5 7.5a.75.75 0 0 1-1.154.114l-3-3a.75.75 0 0 1 1.06-1.06l2.353 2.353 4.493-6.74a.75.75 0 0 1 1.04-.207Z"
|
|
70
|
-
clipRule="evenodd"
|
|
71
|
-
/>
|
|
72
|
-
</svg>
|
|
39
|
+
export const CheckIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
|
|
40
|
+
<HeroCheck className={className} aria-hidden="true" />
|
|
73
41
|
);
|
|
74
42
|
|
|
75
43
|
/**
|
|
76
|
-
* Icono X (heroicons
|
|
44
|
+
* Icono X (heroicons/x-mark)
|
|
77
45
|
*/
|
|
78
|
-
export const XIcon: React.FC<IconProps> = ({ className = '' }) => (
|
|
79
|
-
<
|
|
80
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
81
|
-
viewBox="0 0 16 16"
|
|
82
|
-
fill="currentColor"
|
|
83
|
-
className={className}
|
|
84
|
-
>
|
|
85
|
-
<path d="M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z" />
|
|
86
|
-
</svg>
|
|
46
|
+
export const XIcon: React.FC<IconProps> = ({ className = 'size-5' }) => (
|
|
47
|
+
<HeroXMark className={className} aria-hidden="true" />
|
|
87
48
|
);
|