siesa-ui-kit 1.0.5 → 1.0.6
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/index.cjs +1479 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.js +1479 -0
- package/dist/index.js.map +1 -0
- package/package.json +23 -14
- package/claude/agents/siesa-ui-kit-specialist.md +0 -2401
- package/claude/prompts/component-template.md +0 -121
- package/claude/settings.local.json +0 -61
- package/docs/border-radius.md +0 -1261
- package/docs/colors.md +0 -832
- package/docs/dark-mode-guide.md +0 -1426
- package/docs/filters.md +0 -1243
- package/docs/icons.md +0 -1283
- package/docs/shadows.md +0 -1377
- package/docs/spacing.md +0 -1684
- package/docs/typography.md +0 -1268
- package/postcss.config.cjs +0 -6
- package/src/App.css +0 -42
- package/src/App.tsx +0 -8
- package/src/ButtonTest.tsx +0 -147
- package/src/assets/fonts/README.md +0 -261
- package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
- package/src/assets/react.svg +0 -1
- package/src/components/Alert/Alert.stories.tsx +0 -332
- package/src/components/Alert/Alert.tsx +0 -106
- package/src/components/Alert/Alert.types.ts +0 -54
- package/src/components/Avatar/Avatar.stories.tsx +0 -494
- package/src/components/Avatar/Avatar.tsx +0 -143
- package/src/components/Avatar/Avatar.types.ts +0 -53
- package/src/components/Badge/Badge.stories.tsx +0 -339
- package/src/components/Badge/Badge.tsx +0 -278
- package/src/components/Badge/Badge.types.ts +0 -58
- package/src/components/Button/Button.stories.tsx +0 -950
- package/src/components/Button/Button.tsx +0 -337
- package/src/components/Button/Button.types.ts +0 -180
- package/src/components/Button/icons.tsx +0 -87
- package/src/components/Button/index.ts +0 -3
- package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
- package/src/components/Checkbox/Checkbox.tsx +0 -208
- package/src/components/Checkbox/Checkbox.types.ts +0 -61
- package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
- package/src/components/DescriptionList/DescriptionList.tsx +0 -96
- package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
- package/src/components/Divider/Divider.stories.tsx +0 -263
- package/src/components/Divider/Divider.tsx +0 -80
- package/src/components/Divider/Divider.types.ts +0 -24
- package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
- package/src/components/Dropdown/Dropdown.tsx +0 -422
- package/src/components/Dropdown/Dropdown.types.ts +0 -146
- package/src/components/Dropdown/README.md +0 -266
- package/src/components/Dropdown/icons.tsx +0 -72
- package/src/components/Dropdown/index.ts +0 -8
- package/src/components/Input/Input.stories.tsx +0 -583
- package/src/components/Input/Input.tsx +0 -204
- package/src/components/Input/Input.types.ts +0 -80
- package/src/components/Input/icons.tsx +0 -145
- package/src/components/Input/index.ts +0 -2
- package/src/components/LoginView/LoginView.stories.tsx +0 -148
- package/src/components/LoginView/LoginView.tsx +0 -426
- package/src/components/LoginView/LoginView.types.ts +0 -52
- package/src/components/LoginView/README.md +0 -396
- package/src/components/LoginView/icons.tsx +0 -85
- package/src/components/LoginView/index.ts +0 -3
- package/src/components/Navbar/Navbar.stories.tsx +0 -810
- package/src/components/Navbar/Navbar.tsx +0 -755
- package/src/components/Navbar/Navbar.types.ts +0 -219
- package/src/components/Navbar/README.md +0 -279
- package/src/components/Navbar/icons.tsx +0 -102
- package/src/components/Navbar/index.ts +0 -8
- package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
- package/src/components/NavigationBar/NavigationBar.tsx +0 -246
- package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
- package/src/components/NavigationBar/README.md +0 -469
- package/src/components/NavigationBar/index.ts +0 -2
- package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
- package/src/components/NavigationRail/NavigationRail.tsx +0 -418
- package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
- package/src/components/NavigationRail/README.md +0 -224
- package/src/components/NavigationRail/index.ts +0 -2
- package/src/components/Notification/Notification.stories.tsx +0 -513
- package/src/components/Notification/Notification.tsx +0 -145
- package/src/components/Notification/Notification.types.ts +0 -142
- package/src/components/Notification/README.md +0 -409
- package/src/components/Notification/index.ts +0 -3
- package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
- package/src/components/POSConvention/POSConvention.tsx +0 -129
- package/src/components/POSConvention/POSConvention.types.ts +0 -38
- package/src/components/POSConvention/README.md +0 -123
- package/src/components/POSConvention/icons.tsx +0 -45
- package/src/components/POSConvention/index.ts +0 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
- package/src/components/POSLocationButton/README.md +0 -253
- package/src/components/POSLocationButton/icons.tsx +0 -120
- package/src/components/POSLocationButton/index.ts +0 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
- package/src/components/POSNumberButton/README.md +0 -321
- package/src/components/POSNumberButton/index.ts +0 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
- package/src/components/POSProductButton/POSProductButton.tsx +0 -152
- package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
- package/src/components/POSProductButton/README.md +0 -269
- package/src/components/POSProductButton/index.ts +0 -2
- package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
- package/src/components/POSProductCard/POSProductCard.tsx +0 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
- package/src/components/POSProductCard/README.md +0 -179
- package/src/components/POSProductCard/icons.tsx +0 -26
- package/src/components/POSProductCard/index.ts +0 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
- package/src/components/POSProductSidebarItems/README.md +0 -198
- package/src/components/POSProductSidebarItems/icons.tsx +0 -21
- package/src/components/POSProductSidebarItems/index.ts +0 -3
- package/src/components/POSTable/POSTable.stories.tsx +0 -737
- package/src/components/POSTable/POSTable.tsx +0 -401
- package/src/components/POSTable/POSTable.types.ts +0 -83
- package/src/components/POSTable/README.md +0 -286
- package/src/components/POSTable/index.ts +0 -7
- package/src/components/Pagination/Pagination.stories.tsx +0 -555
- package/src/components/Pagination/Pagination.tsx +0 -286
- package/src/components/Pagination/Pagination.types.ts +0 -93
- package/src/components/Pagination/README.md +0 -298
- package/src/components/Pagination/icons.tsx +0 -47
- package/src/components/Pagination/index.ts +0 -3
- package/src/components/Quantity/Quantity.stories.tsx +0 -457
- package/src/components/Quantity/Quantity.tsx +0 -289
- package/src/components/Quantity/Quantity.types.ts +0 -70
- package/src/components/Radio/Radio.stories.tsx +0 -523
- package/src/components/Radio/Radio.tsx +0 -170
- package/src/components/Radio/Radio.types.ts +0 -122
- package/src/components/Select/README.md +0 -299
- package/src/components/Select/Select.stories.tsx +0 -673
- package/src/components/Select/Select.tsx +0 -454
- package/src/components/Select/Select.types.ts +0 -148
- package/src/components/Select/icons.tsx +0 -50
- package/src/components/Select/index.ts +0 -3
- package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
- package/src/components/SignUpView/SignUpView.tsx +0 -503
- package/src/components/SignUpView/SignUpView.types.ts +0 -58
- package/src/components/SignUpView/icons.tsx +0 -71
- package/src/components/SignUpView/index.ts +0 -3
- package/src/components/Switch/README.md +0 -112
- package/src/components/Switch/Switch.stories.tsx +0 -550
- package/src/components/Switch/Switch.tsx +0 -246
- package/src/components/Switch/Switch.types.ts +0 -67
- package/src/components/Table/README.md +0 -369
- package/src/components/Table/Table.stories.tsx +0 -805
- package/src/components/Table/Table.tsx +0 -688
- package/src/components/Table/Table.types.ts +0 -204
- package/src/components/Table/index.ts +0 -9
- package/src/components/Tabs/README.md +0 -201
- package/src/components/Tabs/Tabs.stories.tsx +0 -580
- package/src/components/Tabs/Tabs.tsx +0 -356
- package/src/components/Tabs/Tabs.types.ts +0 -127
- package/src/components/Tabs/icons.tsx +0 -129
- package/src/components/Tabs/index.ts +0 -11
- package/src/components/Textarea/Textarea.stories.tsx +0 -535
- package/src/components/Textarea/Textarea.tsx +0 -188
- package/src/components/Textarea/Textarea.types.ts +0 -54
- package/src/context/ThemeContext.tsx +0 -99
- package/src/context/index.ts +0 -1
- package/src/index.css +0 -29
- package/src/index.ts +0 -39
- package/src/main.tsx +0 -10
- package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
- package/src/views/ProductsView/ProductsView.tsx +0 -480
- package/src/views/ProductsView/ProductsView.types.ts +0 -238
- package/src/views/ProductsView/README.md +0 -312
- package/src/views/ProductsView/icons.tsx +0 -38
- package/src/views/ProductsView/index.ts +0 -8
- package/src/views/RecoverPasswordView/README.md +0 -269
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
- package/src/views/RecoverPasswordView/icons.tsx +0 -17
- package/src/views/RecoverPasswordView/index.ts +0 -2
- package/src/views/TableLayoutView/README.md +0 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
- package/src/views/TableLayoutView/icons.tsx +0 -113
- package/src/views/TableLayoutView/index.ts +0 -6
- package/storybook/main.ts +0 -20
- package/storybook/preview.tsx +0 -84
- package/storybook/vitest.setup.ts +0 -7
- package/tailwind.config.js +0 -128
- /package/{public → dist}/,Business Logo.png +0 -0
- /package/{public → dist}/.Siesa Logo.png +0 -0
- /package/{public → dist}/bg_siesa.png +0 -0
- /package/{public → dist}/siesa_logo_mobile.png +0 -0
- /package/{public → dist}/vite.svg +0 -0
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Props del componente Notification
|
|
3
|
-
*
|
|
4
|
-
* Badge de notificación para mostrar alertas, mensajes o notificaciones pendientes.
|
|
5
|
-
* Alineado pixel-perfect con el diseño de Figma.
|
|
6
|
-
*
|
|
7
|
-
* @see src/components/Notification/Notification.tsx - Implementación del componente
|
|
8
|
-
* @see docs/colors.md - Sistema de colores (token content-extensions-red)
|
|
9
|
-
* @see docs/typography.md - Sistema tipográfico (Label/XXSmall)
|
|
10
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4310-22651
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```tsx
|
|
14
|
-
* // Badge simple (punto)
|
|
15
|
-
* const simpleProps: NotificationProps = {};
|
|
16
|
-
*
|
|
17
|
-
* // Badge con número
|
|
18
|
-
* const withCountProps: NotificationProps = {
|
|
19
|
-
* count: 5,
|
|
20
|
-
* color: 'red',
|
|
21
|
-
* };
|
|
22
|
-
*
|
|
23
|
-
* // Como overlay
|
|
24
|
-
* <button className="relative">
|
|
25
|
-
* <Icon />
|
|
26
|
-
* <Notification count={3} className="absolute -top-1 -right-1" />
|
|
27
|
-
* </button>
|
|
28
|
-
* ```
|
|
29
|
-
*/
|
|
30
|
-
export interface NotificationProps {
|
|
31
|
-
/**
|
|
32
|
-
* Número de notificaciones a mostrar
|
|
33
|
-
*
|
|
34
|
-
* **Comportamiento:**
|
|
35
|
-
* - `undefined`: Muestra badge simple (punto rojo de 8px)
|
|
36
|
-
* - `1-99`: Muestra el número exacto en el badge
|
|
37
|
-
* - `100+`: Muestra "99+" en el badge
|
|
38
|
-
* - `0` o menor: Muestra badge simple (punto)
|
|
39
|
-
*
|
|
40
|
-
* **Nota:** El badge ajusta su ancho automáticamente según el contenido,
|
|
41
|
-
* con un mínimo de 16px y padding de 4px horizontal.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```tsx
|
|
45
|
-
* <Notification /> // Punto rojo simple
|
|
46
|
-
* <Notification count={5} /> // Muestra "5"
|
|
47
|
-
* <Notification count={99} /> // Muestra "99"
|
|
48
|
-
* <Notification count={150} /> // Muestra "99+"
|
|
49
|
-
* <Notification count={0} /> // Punto rojo simple
|
|
50
|
-
* ```
|
|
51
|
-
*
|
|
52
|
-
* @see src/components/Notification/Notification.tsx:93-123 - Renderizado con número
|
|
53
|
-
*/
|
|
54
|
-
count?: number;
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Color del badge
|
|
58
|
-
*
|
|
59
|
-
* Define el color de fondo del badge. Permite personalizar según el contexto
|
|
60
|
-
* o tipo de notificación.
|
|
61
|
-
*
|
|
62
|
-
* **Colores disponibles:**
|
|
63
|
-
* - `red` (default): Notificaciones de error, alertas críticas
|
|
64
|
-
* - `orange`: Advertencias importantes
|
|
65
|
-
* - `yellow`: Avisos, atención requerida
|
|
66
|
-
* - `green`: Notificaciones positivas, éxito
|
|
67
|
-
* - `blue`: Información general
|
|
68
|
-
* - `purple`: Notificaciones especiales o premium
|
|
69
|
-
* - `zinc`: Notificaciones neutras
|
|
70
|
-
* - Y 15+ colores adicionales de Tailwind
|
|
71
|
-
*
|
|
72
|
-
* **Nota:** El texto siempre será blanco para mantener contraste adecuado.
|
|
73
|
-
*
|
|
74
|
-
* @default 'red'
|
|
75
|
-
*
|
|
76
|
-
* @example
|
|
77
|
-
* ```tsx
|
|
78
|
-
* <Notification count={5} color="red" /> // Error/Crítico
|
|
79
|
-
* <Notification count={2} color="orange" /> // Advertencia
|
|
80
|
-
* <Notification count={8} color="green" /> // Éxito
|
|
81
|
-
* <Notification count={3} color="blue" /> // Info
|
|
82
|
-
* <Notification count={1} color="purple" /> // Especial
|
|
83
|
-
* ```
|
|
84
|
-
*
|
|
85
|
-
* @see src/components/Button/Button.tsx:220-244 - Referencia de colores
|
|
86
|
-
*/
|
|
87
|
-
color?: 'zinc' | 'red' | 'orange' | 'amber' | 'yellow' | 'lime' | 'green' |
|
|
88
|
-
'emerald' | 'teal' | 'cyan' | 'sky' | 'blue' | 'indigo' | 'violet' |
|
|
89
|
-
'purple' | 'fuchsia' | 'pink' | 'rose' | 'primary' | 'secondary' | 'tertiary';
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Clases CSS adicionales para posicionamiento o personalización
|
|
93
|
-
*
|
|
94
|
-
* Útil para posicionar el badge como overlay usando absolute positioning.
|
|
95
|
-
*
|
|
96
|
-
* **Advertencia:** Evita sobrescribir tamaños, colores o formas core del badge.
|
|
97
|
-
* Usa solo para posicionamiento, márgenes o efectos adicionales.
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* ```tsx
|
|
101
|
-
* // Como overlay en botón
|
|
102
|
-
* <button className="relative">
|
|
103
|
-
* <BellIcon />
|
|
104
|
-
* <Notification count={5} className="absolute -top-1 -right-1" />
|
|
105
|
-
* </button>
|
|
106
|
-
*
|
|
107
|
-
* // Con margen personalizado
|
|
108
|
-
* <Notification count={3} className="ml-2" />
|
|
109
|
-
*
|
|
110
|
-
* // Con sombra adicional
|
|
111
|
-
* <Notification count={7} className="shadow-lg" />
|
|
112
|
-
* ```
|
|
113
|
-
*/
|
|
114
|
-
className?: string;
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Label de accesibilidad (ARIA) personalizado
|
|
118
|
-
*
|
|
119
|
-
* Si no se proporciona, se genera automáticamente:
|
|
120
|
-
* - Con count: "{count} notificación(es)"
|
|
121
|
-
* - Sin count: "Notificación pendiente"
|
|
122
|
-
*
|
|
123
|
-
* **Mejores prácticas:**
|
|
124
|
-
* - Describe el tipo de notificación si es específico
|
|
125
|
-
* - Incluye contexto relevante para screen readers
|
|
126
|
-
* - Mantén el texto conciso pero descriptivo
|
|
127
|
-
*
|
|
128
|
-
* @example
|
|
129
|
-
* ```tsx
|
|
130
|
-
* // Auto-generado (recomendado)
|
|
131
|
-
* <Notification count={5} />
|
|
132
|
-
* // → aria-label="5 notificaciones"
|
|
133
|
-
*
|
|
134
|
-
* // Personalizado
|
|
135
|
-
* <Notification count={3} ariaLabel="3 mensajes no leídos" />
|
|
136
|
-
* <Notification ariaLabel="Nueva alerta de seguridad" />
|
|
137
|
-
* ```
|
|
138
|
-
*
|
|
139
|
-
* @see https://www.w3.org/WAI/WCAG21/Understanding/name-role-value.html
|
|
140
|
-
*/
|
|
141
|
-
ariaLabel?: string;
|
|
142
|
-
}
|
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
# Notification Badge
|
|
2
|
-
|
|
3
|
-
Badge de notificación para mostrar alertas, mensajes o notificaciones pendientes. Puede mostrar un punto simple o un contador numérico con límite automático a 99+.
|
|
4
|
-
|
|
5
|
-
## 🎯 Características
|
|
6
|
-
|
|
7
|
-
- ✅ Soporte completo de dark mode
|
|
8
|
-
- ✅ Dos variantes: badge simple (dot) o badge con número
|
|
9
|
-
- ✅ Límite automático a 99+ para números grandes
|
|
10
|
-
- ✅ 20+ colores personalizables
|
|
11
|
-
- ✅ TypeScript con types estrictos
|
|
12
|
-
- ✅ Accesibilidad con ARIA labels automáticos
|
|
13
|
-
- ✅ Pixel-perfect según especificaciones de Figma
|
|
14
|
-
- ✅ Ideal como overlay en iconos, botones o avatares
|
|
15
|
-
|
|
16
|
-
## 📦 Instalación
|
|
17
|
-
|
|
18
|
-
```tsx
|
|
19
|
-
import { Notification } from './components/Notification';
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## 🚀 Uso Básico
|
|
23
|
-
|
|
24
|
-
### Badge Simple (Dot)
|
|
25
|
-
```tsx
|
|
26
|
-
// Punto rojo simple de 8px × 8px
|
|
27
|
-
<Notification />
|
|
28
|
-
|
|
29
|
-
// Con count=0 también muestra punto
|
|
30
|
-
<Notification count={0} />
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
### Badge con Número
|
|
34
|
-
```tsx
|
|
35
|
-
// Badge con contador
|
|
36
|
-
<Notification count={5} />
|
|
37
|
-
|
|
38
|
-
// Límite automático a 99+
|
|
39
|
-
<Notification count={150} /> // Muestra "99+"
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Badge con Color Personalizado
|
|
43
|
-
```tsx
|
|
44
|
-
<Notification count={3} color="red" /> // Error/Crítico (default)
|
|
45
|
-
<Notification count={5} color="orange" /> // Advertencia
|
|
46
|
-
<Notification count={8} color="green" /> // Éxito
|
|
47
|
-
<Notification count={2} color="blue" /> // Info
|
|
48
|
-
<Notification count={1} color="purple" /> // Especial
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
### Como Overlay en Botón
|
|
52
|
-
```tsx
|
|
53
|
-
<button className="relative p-3 bg-white border rounded-lg">
|
|
54
|
-
<BellIcon className="w-6 h-6" />
|
|
55
|
-
<Notification count={5} className="absolute -top-1 -right-1" />
|
|
56
|
-
</button>
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## 🎨 Props
|
|
60
|
-
|
|
61
|
-
| Prop | Tipo | Default | Descripción |
|
|
62
|
-
|------|------|---------|-------------|
|
|
63
|
-
| `count` | `number \| undefined` | `undefined` | Número de notificaciones. `undefined`/`0` = dot, `1-99` = número, `100+` = "99+" |
|
|
64
|
-
| `color` | `'red' \| 'orange' \| 'yellow' \| 'green' \| 'blue' \| 'purple' \| 'zinc' \| ...` | `'red'` | Color del badge (20+ colores disponibles) |
|
|
65
|
-
| `className` | `string` | `''` | Clases CSS adicionales para posicionamiento |
|
|
66
|
-
| `ariaLabel` | `string` | Auto-generado | Label de accesibilidad (incluye conteo automático) |
|
|
67
|
-
|
|
68
|
-
## 📏 Especificaciones
|
|
69
|
-
|
|
70
|
-
### Badge Simple (Dot)
|
|
71
|
-
- **Dimensiones**: 8px × 8px (w-2 h-2)
|
|
72
|
-
- **Forma**: rounded-full (circular)
|
|
73
|
-
- **Uso**: Indica notificaciones sin especificar cantidad
|
|
74
|
-
|
|
75
|
-
### Badge con Número
|
|
76
|
-
- **Altura**: 16px (h-4)
|
|
77
|
-
- **Ancho mínimo**: 16px (min-w-[16px])
|
|
78
|
-
- **Padding horizontal**: 4px (px-1)
|
|
79
|
-
- **Tipografía**: 10px Bold, leading-none
|
|
80
|
-
- **Forma**: rounded-full (pill)
|
|
81
|
-
- **Límite**: Números ≥ 100 muestran "99+"
|
|
82
|
-
|
|
83
|
-
## 🎨 Colores Disponibles
|
|
84
|
-
|
|
85
|
-
El badge soporta 20+ colores para diferentes contextos:
|
|
86
|
-
|
|
87
|
-
| Color | Uso Recomendado | Ejemplo |
|
|
88
|
-
|-------|-----------------|---------|
|
|
89
|
-
| `red` (default) | Errores, alertas críticas | `<Notification count={5} color="red" />` |
|
|
90
|
-
| `orange` | Advertencias importantes | `<Notification count={3} color="orange" />` |
|
|
91
|
-
| `yellow` | Avisos, atención requerida | `<Notification count={2} color="yellow" />` |
|
|
92
|
-
| `green` | Confirmaciones, éxitos | `<Notification count={8} color="green" />` |
|
|
93
|
-
| `blue` | Información general | `<Notification count={7} color="blue" />` |
|
|
94
|
-
| `purple` | Especiales, premium | `<Notification count={1} color="purple" />` |
|
|
95
|
-
| `zinc` | Notificaciones neutras | `<Notification count={4} color="zinc" />` |
|
|
96
|
-
|
|
97
|
-
**Colores adicionales disponibles**: `amber`, `lime`, `emerald`, `teal`, `cyan`, `sky`, `indigo`, `violet`, `fuchsia`, `pink`, `rose`, `primary`, `secondary`, `tertiary`
|
|
98
|
-
|
|
99
|
-
## 🎯 Casos de Uso
|
|
100
|
-
|
|
101
|
-
### 1. Overlay en Botón de Navegación
|
|
102
|
-
```tsx
|
|
103
|
-
<nav className="flex items-center justify-between p-4">
|
|
104
|
-
<Logo />
|
|
105
|
-
<div className="flex items-center gap-4">
|
|
106
|
-
<button className="relative p-2 hover:bg-gray-100 rounded">
|
|
107
|
-
<BellIcon className="w-5 h-5" />
|
|
108
|
-
<Notification count={3} className="absolute -top-1 -right-1" />
|
|
109
|
-
</button>
|
|
110
|
-
<UserMenu />
|
|
111
|
-
</div>
|
|
112
|
-
</nav>
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### 2. Contador en Menú Lateral
|
|
116
|
-
```tsx
|
|
117
|
-
<aside className="w-64">
|
|
118
|
-
<MenuItem href="/dashboard">Dashboard</MenuItem>
|
|
119
|
-
<MenuItem href="/notifications">
|
|
120
|
-
Notificaciones
|
|
121
|
-
<Notification count={12} className="ml-auto" />
|
|
122
|
-
</MenuItem>
|
|
123
|
-
<MenuItem href="/messages">
|
|
124
|
-
Mensajes
|
|
125
|
-
<Notification count={5} className="ml-auto" />
|
|
126
|
-
</MenuItem>
|
|
127
|
-
</aside>
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### 3. Overlay en Avatar
|
|
131
|
-
```tsx
|
|
132
|
-
<div className="relative">
|
|
133
|
-
<img src="/avatar.jpg" className="w-12 h-12 rounded-full" />
|
|
134
|
-
<Notification count={3} className="absolute -top-1 -right-1" />
|
|
135
|
-
</div>
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
### 4. Indicador de Estado en Lista
|
|
139
|
-
```tsx
|
|
140
|
-
<div className="space-y-2">
|
|
141
|
-
<div className="flex items-center gap-3 p-2">
|
|
142
|
-
<Notification color="red" />
|
|
143
|
-
<span>Urgente: Revisar servidor</span>
|
|
144
|
-
</div>
|
|
145
|
-
<div className="flex items-center gap-3 p-2">
|
|
146
|
-
<Notification color="orange" />
|
|
147
|
-
<span>Advertencia: Actualización disponible</span>
|
|
148
|
-
</div>
|
|
149
|
-
<div className="flex items-center gap-3 p-2">
|
|
150
|
-
<Notification color="blue" />
|
|
151
|
-
<span>Info: Nuevo feature disponible</span>
|
|
152
|
-
</div>
|
|
153
|
-
</div>
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
### 5. Contador en Tabs
|
|
157
|
-
```tsx
|
|
158
|
-
<div className="flex border-b">
|
|
159
|
-
<button className="flex items-center gap-2 px-4 py-2 border-b-2 border-blue-600">
|
|
160
|
-
Pendientes
|
|
161
|
-
<Notification count={8} />
|
|
162
|
-
</button>
|
|
163
|
-
<button className="flex items-center gap-2 px-4 py-2">
|
|
164
|
-
En Progreso
|
|
165
|
-
<Notification count={3} color="blue" />
|
|
166
|
-
</button>
|
|
167
|
-
<button className="px-4 py-2">
|
|
168
|
-
Completados
|
|
169
|
-
</button>
|
|
170
|
-
</div>
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
## 🌓 Dark Mode
|
|
174
|
-
|
|
175
|
-
El componente se adapta automáticamente a dark mode:
|
|
176
|
-
|
|
177
|
-
```tsx
|
|
178
|
-
// Funciona automáticamente con la clase 'dark' en <html>
|
|
179
|
-
<html className="dark">
|
|
180
|
-
<body>
|
|
181
|
-
<Notification count={5} />
|
|
182
|
-
{/* Badge mantiene visibilidad y contraste en dark mode */}
|
|
183
|
-
</body>
|
|
184
|
-
</html>
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
**Adaptaciones en Dark Mode:**
|
|
188
|
-
- Colores mantienen intensidad (ej: content-extensions-red #b91c1c)
|
|
189
|
-
- Texto siempre blanco para máximo contraste
|
|
190
|
-
- Sin bordes en badge simple para mantener limpieza visual
|
|
191
|
-
|
|
192
|
-
## ♿ Accesibilidad
|
|
193
|
-
|
|
194
|
-
### ARIA Labels Automáticos
|
|
195
|
-
El componente genera automáticamente labels descriptivos:
|
|
196
|
-
|
|
197
|
-
```tsx
|
|
198
|
-
// Badge simple
|
|
199
|
-
<Notification />
|
|
200
|
-
// → aria-label="Notificación pendiente"
|
|
201
|
-
|
|
202
|
-
// Badge con número
|
|
203
|
-
<Notification count={5} />
|
|
204
|
-
// → aria-label="5 notificaciones"
|
|
205
|
-
|
|
206
|
-
<Notification count={1} />
|
|
207
|
-
// → aria-label="1 notificación"
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
### ARIA Label Personalizado
|
|
211
|
-
Proporciona un label específico cuando necesites más contexto:
|
|
212
|
-
|
|
213
|
-
```tsx
|
|
214
|
-
<Notification
|
|
215
|
-
count={5}
|
|
216
|
-
ariaLabel="5 mensajes no leídos de soporte"
|
|
217
|
-
/>
|
|
218
|
-
|
|
219
|
-
<Notification
|
|
220
|
-
ariaLabel="Nueva alerta de seguridad crítica"
|
|
221
|
-
/>
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Role Status
|
|
225
|
-
Todos los badges incluyen `role="status"` para anunciar cambios a lectores de pantalla.
|
|
226
|
-
|
|
227
|
-
## 🎨 Tokens de Color Utilizados
|
|
228
|
-
|
|
229
|
-
El componente usa **exclusivamente tokens del sistema de diseño**:
|
|
230
|
-
|
|
231
|
-
### Light Mode
|
|
232
|
-
- Badge red (default): `bg-content-extensions-red` (#b91c1c)
|
|
233
|
-
- Otros colores: `bg-{color}-700` (ej: orange-700, green-700)
|
|
234
|
-
- Texto: `text-white` (#ffffff)
|
|
235
|
-
|
|
236
|
-
### Dark Mode
|
|
237
|
-
- Colores mantienen intensidad: `dark:bg-content-extensions-red`, `dark:bg-{color}-700`
|
|
238
|
-
- Texto: `dark:text-white` (#ffffff)
|
|
239
|
-
|
|
240
|
-
### Token Extensions
|
|
241
|
-
El token `content-extensions-red` está definido en `tailwind.config.js` y garantiza consistencia en todos los badges del sistema.
|
|
242
|
-
|
|
243
|
-
## 💡 Mejores Prácticas
|
|
244
|
-
|
|
245
|
-
### ✅ Hacer
|
|
246
|
-
- Usa badge simple (sin count) cuando no necesites mostrar número exacto
|
|
247
|
-
- Usa badge con número para mostrar cantidad de notificaciones pendientes
|
|
248
|
-
- Posiciona como overlay usando `className="absolute -top-1 -right-1"` en elemento `relative`
|
|
249
|
-
- Proporciona `ariaLabel` descriptivo cuando el contexto no sea obvio
|
|
250
|
-
- Usa colores semánticos (red=error, orange=warning, green=success, blue=info)
|
|
251
|
-
- Combina con botones, iconos o avatares para indicar estado
|
|
252
|
-
|
|
253
|
-
### ❌ Evitar
|
|
254
|
-
- No uses el badge como botón interactivo (es un indicador de estado)
|
|
255
|
-
- No muestres números mayores a 99 sin usar el límite automático (ya incluido)
|
|
256
|
-
- No uses como reemplazo de texto explicativo (es complementario)
|
|
257
|
-
- No olvides envolver en `relative` cuando uses posicionamiento absoluto
|
|
258
|
-
- No uses colores sin significado semántico consistente
|
|
259
|
-
|
|
260
|
-
## 📐 Posicionamiento
|
|
261
|
-
|
|
262
|
-
### Posicionamiento Absoluto (Overlay)
|
|
263
|
-
Para usar como overlay sobre otro elemento:
|
|
264
|
-
|
|
265
|
-
```tsx
|
|
266
|
-
{/* Elemento padre debe tener position: relative */}
|
|
267
|
-
<div className="relative">
|
|
268
|
-
<YourElement />
|
|
269
|
-
<Notification count={5} className="absolute -top-1 -right-1" />
|
|
270
|
-
</div>
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
**Variantes de posición comunes:**
|
|
274
|
-
- Esquina superior derecha: `-top-1 -right-1`
|
|
275
|
-
- Esquina superior izquierda: `-top-1 -left-1`
|
|
276
|
-
- Sin overflow: `top-0 right-0`
|
|
277
|
-
- Con más separación: `-top-2 -right-2`
|
|
278
|
-
|
|
279
|
-
### Posicionamiento Inline
|
|
280
|
-
Para usar dentro del flujo normal:
|
|
281
|
-
|
|
282
|
-
```tsx
|
|
283
|
-
<div className="flex items-center gap-2">
|
|
284
|
-
<span>Notificaciones</span>
|
|
285
|
-
<Notification count={12} />
|
|
286
|
-
</div>
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
## 🔗 Recursos Relacionados
|
|
290
|
-
|
|
291
|
-
- **Figma**: [Notification Badge](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4310-22651&m=dev)
|
|
292
|
-
- **Storybook**: Ejecuta `npm run storybook` y navega a "Siesa UI Kit/Notification"
|
|
293
|
-
- **Documentación**:
|
|
294
|
-
- [Sistema de colores](../../../docs/colors.md)
|
|
295
|
-
- [Guía de dark mode](../../../docs/dark-mode-guide.md)
|
|
296
|
-
- [Tipografía](../../../docs/typography.md)
|
|
297
|
-
|
|
298
|
-
## 📝 Ejemplo Completo
|
|
299
|
-
|
|
300
|
-
```tsx
|
|
301
|
-
import { useState } from 'react';
|
|
302
|
-
import { Notification } from './components/Notification';
|
|
303
|
-
|
|
304
|
-
function NotificationCenter() {
|
|
305
|
-
const [unreadCount, setUnreadCount] = useState(5);
|
|
306
|
-
|
|
307
|
-
const handleMarkAllRead = () => {
|
|
308
|
-
setUnreadCount(0);
|
|
309
|
-
};
|
|
310
|
-
|
|
311
|
-
return (
|
|
312
|
-
<nav className="flex items-center justify-between p-4 bg-white border-b">
|
|
313
|
-
<h1 className="text-lg font-bold">Mi App</h1>
|
|
314
|
-
|
|
315
|
-
<div className="flex items-center gap-4">
|
|
316
|
-
{/* Badge como overlay en botón */}
|
|
317
|
-
<button
|
|
318
|
-
className="relative p-2 hover:bg-gray-100 rounded transition-colors"
|
|
319
|
-
onClick={() => console.log('Ver notificaciones')}
|
|
320
|
-
aria-label={
|
|
321
|
-
unreadCount > 0
|
|
322
|
-
? `${unreadCount} notificaciones no leídas`
|
|
323
|
-
: 'Notificaciones'
|
|
324
|
-
}
|
|
325
|
-
>
|
|
326
|
-
<BellIcon className="w-5 h-5" />
|
|
327
|
-
{unreadCount > 0 && (
|
|
328
|
-
<Notification
|
|
329
|
-
count={unreadCount}
|
|
330
|
-
className="absolute -top-1 -right-1"
|
|
331
|
-
/>
|
|
332
|
-
)}
|
|
333
|
-
</button>
|
|
334
|
-
|
|
335
|
-
{/* Badge inline en menú */}
|
|
336
|
-
<div className="flex items-center gap-2 px-3 py-2 bg-blue-50 rounded">
|
|
337
|
-
<span className="text-sm">Mensajes</span>
|
|
338
|
-
<Notification count={3} color="blue" />
|
|
339
|
-
</div>
|
|
340
|
-
|
|
341
|
-
<button
|
|
342
|
-
onClick={handleMarkAllRead}
|
|
343
|
-
className="text-sm text-blue-600 hover:underline"
|
|
344
|
-
>
|
|
345
|
-
Marcar todo como leído
|
|
346
|
-
</button>
|
|
347
|
-
</div>
|
|
348
|
-
</nav>
|
|
349
|
-
);
|
|
350
|
-
}
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
## 🐛 Solución de Problemas
|
|
354
|
-
|
|
355
|
-
### El badge no se ve
|
|
356
|
-
- Verifica que el componente esté renderizándose (inspecciona en DevTools)
|
|
357
|
-
- Si usas posicionamiento absoluto, verifica que el padre tenga `relative`
|
|
358
|
-
- Verifica que los colores de Tailwind estén cargados correctamente
|
|
359
|
-
|
|
360
|
-
### El badge se solapa con otros elementos
|
|
361
|
-
- Ajusta el offset usando `-top-2 -right-2` en lugar de `-top-1 -right-1`
|
|
362
|
-
- Considera usar `z-10` o `z-20` en className si hay problemas de z-index
|
|
363
|
-
|
|
364
|
-
### El número no se muestra
|
|
365
|
-
- Verifica que `count` sea mayor a 0
|
|
366
|
-
- Si `count={0}` o `count={undefined}`, se muestra badge simple (dot)
|
|
367
|
-
|
|
368
|
-
### El color no se aplica
|
|
369
|
-
- Verifica que el color esté en la lista de colores disponibles
|
|
370
|
-
- Usa nombres en minúscula (ej: `"red"`, no `"Red"`)
|
|
371
|
-
|
|
372
|
-
---
|
|
373
|
-
|
|
374
|
-
## 📋 Historial de Cambios
|
|
375
|
-
|
|
376
|
-
### v2.0.0 (2025-11-19) - Refactorización Mayor ⭐⭐⭐
|
|
377
|
-
- 🚨 **BREAKING CHANGE**: Componente completamente refactorizado
|
|
378
|
-
- ✅ **ELIMINADO**: Icono de campana - ahora es badge puro (sin botón)
|
|
379
|
-
- ✅ **ELIMINADAS** props: `size`, `showBadge`, `onClick` (ya no es interactivo)
|
|
380
|
-
- ✅ **RENOMBRADAS** props: `badgeCount` → `count`, `badgeColor` → `color`
|
|
381
|
-
- ✅ **NUEVA API**: Componente ahora es `<span>` para uso como overlay o inline
|
|
382
|
-
- ✅ **Simplificado**: De 7 props a 4 props (count, color, className, ariaLabel)
|
|
383
|
-
- ✅ **Alineado con Figma**: Badge puro sin elementos adicionales
|
|
384
|
-
- ✅ **Specs estandarizadas**:
|
|
385
|
-
- Badge simple: 8px × 8px fijo (w-2 h-2)
|
|
386
|
-
- Badge con número: 16px altura (h-4), min-w-[16px], 10px Bold
|
|
387
|
-
- ✅ **ARIA label dinámico mejorado**: Genera automáticamente labels con singular/plural correcto
|
|
388
|
-
- ✅ **Build validado**: Sin errores ni warnings
|
|
389
|
-
- ✅ **Stories actualizadas**: 7 historias nuevas con ejemplos de overlay y uso real
|
|
390
|
-
|
|
391
|
-
### v1.2.0 (2025-11-19)
|
|
392
|
-
- ✅ Prop `badgeColor` con 20+ colores personalizables
|
|
393
|
-
- ✅ Estandarización de tamaños de badges
|
|
394
|
-
- ✅ ARIA label dinámico automático
|
|
395
|
-
- ✅ Alineación con componente Button
|
|
396
|
-
|
|
397
|
-
### v1.1.0 (2025-11-19)
|
|
398
|
-
- ✅ Migración a tokens del sistema
|
|
399
|
-
- ✅ Dark mode mejorado
|
|
400
|
-
- ✅ Tipografía pixel-perfect
|
|
401
|
-
|
|
402
|
-
### v1.0.0 (2025-11-11)
|
|
403
|
-
- 🎉 Versión inicial
|
|
404
|
-
|
|
405
|
-
---
|
|
406
|
-
|
|
407
|
-
**Versión**: 2.0.0
|
|
408
|
-
**Última actualización**: 2025-11-19
|
|
409
|
-
**Autor**: Siesa UI Kit Team
|