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.
Files changed (198) hide show
  1. package/dist/index.cjs +1479 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.js +1479 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +23 -14
  6. package/claude/agents/siesa-ui-kit-specialist.md +0 -2401
  7. package/claude/prompts/component-template.md +0 -121
  8. package/claude/settings.local.json +0 -61
  9. package/docs/border-radius.md +0 -1261
  10. package/docs/colors.md +0 -832
  11. package/docs/dark-mode-guide.md +0 -1426
  12. package/docs/filters.md +0 -1243
  13. package/docs/icons.md +0 -1283
  14. package/docs/shadows.md +0 -1377
  15. package/docs/spacing.md +0 -1684
  16. package/docs/typography.md +0 -1268
  17. package/postcss.config.cjs +0 -6
  18. package/src/App.css +0 -42
  19. package/src/App.tsx +0 -8
  20. package/src/ButtonTest.tsx +0 -147
  21. package/src/assets/fonts/README.md +0 -261
  22. package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
  23. package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
  24. package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
  25. package/src/assets/react.svg +0 -1
  26. package/src/components/Alert/Alert.stories.tsx +0 -332
  27. package/src/components/Alert/Alert.tsx +0 -106
  28. package/src/components/Alert/Alert.types.ts +0 -54
  29. package/src/components/Avatar/Avatar.stories.tsx +0 -494
  30. package/src/components/Avatar/Avatar.tsx +0 -143
  31. package/src/components/Avatar/Avatar.types.ts +0 -53
  32. package/src/components/Badge/Badge.stories.tsx +0 -339
  33. package/src/components/Badge/Badge.tsx +0 -278
  34. package/src/components/Badge/Badge.types.ts +0 -58
  35. package/src/components/Button/Button.stories.tsx +0 -950
  36. package/src/components/Button/Button.tsx +0 -337
  37. package/src/components/Button/Button.types.ts +0 -180
  38. package/src/components/Button/icons.tsx +0 -87
  39. package/src/components/Button/index.ts +0 -3
  40. package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
  41. package/src/components/Checkbox/Checkbox.tsx +0 -208
  42. package/src/components/Checkbox/Checkbox.types.ts +0 -61
  43. package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
  44. package/src/components/DescriptionList/DescriptionList.tsx +0 -96
  45. package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
  46. package/src/components/Divider/Divider.stories.tsx +0 -263
  47. package/src/components/Divider/Divider.tsx +0 -80
  48. package/src/components/Divider/Divider.types.ts +0 -24
  49. package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
  50. package/src/components/Dropdown/Dropdown.tsx +0 -422
  51. package/src/components/Dropdown/Dropdown.types.ts +0 -146
  52. package/src/components/Dropdown/README.md +0 -266
  53. package/src/components/Dropdown/icons.tsx +0 -72
  54. package/src/components/Dropdown/index.ts +0 -8
  55. package/src/components/Input/Input.stories.tsx +0 -583
  56. package/src/components/Input/Input.tsx +0 -204
  57. package/src/components/Input/Input.types.ts +0 -80
  58. package/src/components/Input/icons.tsx +0 -145
  59. package/src/components/Input/index.ts +0 -2
  60. package/src/components/LoginView/LoginView.stories.tsx +0 -148
  61. package/src/components/LoginView/LoginView.tsx +0 -426
  62. package/src/components/LoginView/LoginView.types.ts +0 -52
  63. package/src/components/LoginView/README.md +0 -396
  64. package/src/components/LoginView/icons.tsx +0 -85
  65. package/src/components/LoginView/index.ts +0 -3
  66. package/src/components/Navbar/Navbar.stories.tsx +0 -810
  67. package/src/components/Navbar/Navbar.tsx +0 -755
  68. package/src/components/Navbar/Navbar.types.ts +0 -219
  69. package/src/components/Navbar/README.md +0 -279
  70. package/src/components/Navbar/icons.tsx +0 -102
  71. package/src/components/Navbar/index.ts +0 -8
  72. package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
  73. package/src/components/NavigationBar/NavigationBar.tsx +0 -246
  74. package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
  75. package/src/components/NavigationBar/README.md +0 -469
  76. package/src/components/NavigationBar/index.ts +0 -2
  77. package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
  78. package/src/components/NavigationRail/NavigationRail.tsx +0 -418
  79. package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
  80. package/src/components/NavigationRail/README.md +0 -224
  81. package/src/components/NavigationRail/index.ts +0 -2
  82. package/src/components/Notification/Notification.stories.tsx +0 -513
  83. package/src/components/Notification/Notification.tsx +0 -145
  84. package/src/components/Notification/Notification.types.ts +0 -142
  85. package/src/components/Notification/README.md +0 -409
  86. package/src/components/Notification/index.ts +0 -3
  87. package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
  88. package/src/components/POSConvention/POSConvention.tsx +0 -129
  89. package/src/components/POSConvention/POSConvention.types.ts +0 -38
  90. package/src/components/POSConvention/README.md +0 -123
  91. package/src/components/POSConvention/icons.tsx +0 -45
  92. package/src/components/POSConvention/index.ts +0 -3
  93. package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
  94. package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
  95. package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
  96. package/src/components/POSLocationButton/README.md +0 -253
  97. package/src/components/POSLocationButton/icons.tsx +0 -120
  98. package/src/components/POSLocationButton/index.ts +0 -14
  99. package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
  100. package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
  101. package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
  102. package/src/components/POSNumberButton/README.md +0 -321
  103. package/src/components/POSNumberButton/index.ts +0 -3
  104. package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
  105. package/src/components/POSProductButton/POSProductButton.tsx +0 -152
  106. package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
  107. package/src/components/POSProductButton/README.md +0 -269
  108. package/src/components/POSProductButton/index.ts +0 -2
  109. package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
  110. package/src/components/POSProductCard/POSProductCard.tsx +0 -208
  111. package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
  112. package/src/components/POSProductCard/README.md +0 -179
  113. package/src/components/POSProductCard/icons.tsx +0 -26
  114. package/src/components/POSProductCard/index.ts +0 -2
  115. package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
  116. package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
  117. package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
  118. package/src/components/POSProductSidebarItems/README.md +0 -198
  119. package/src/components/POSProductSidebarItems/icons.tsx +0 -21
  120. package/src/components/POSProductSidebarItems/index.ts +0 -3
  121. package/src/components/POSTable/POSTable.stories.tsx +0 -737
  122. package/src/components/POSTable/POSTable.tsx +0 -401
  123. package/src/components/POSTable/POSTable.types.ts +0 -83
  124. package/src/components/POSTable/README.md +0 -286
  125. package/src/components/POSTable/index.ts +0 -7
  126. package/src/components/Pagination/Pagination.stories.tsx +0 -555
  127. package/src/components/Pagination/Pagination.tsx +0 -286
  128. package/src/components/Pagination/Pagination.types.ts +0 -93
  129. package/src/components/Pagination/README.md +0 -298
  130. package/src/components/Pagination/icons.tsx +0 -47
  131. package/src/components/Pagination/index.ts +0 -3
  132. package/src/components/Quantity/Quantity.stories.tsx +0 -457
  133. package/src/components/Quantity/Quantity.tsx +0 -289
  134. package/src/components/Quantity/Quantity.types.ts +0 -70
  135. package/src/components/Radio/Radio.stories.tsx +0 -523
  136. package/src/components/Radio/Radio.tsx +0 -170
  137. package/src/components/Radio/Radio.types.ts +0 -122
  138. package/src/components/Select/README.md +0 -299
  139. package/src/components/Select/Select.stories.tsx +0 -673
  140. package/src/components/Select/Select.tsx +0 -454
  141. package/src/components/Select/Select.types.ts +0 -148
  142. package/src/components/Select/icons.tsx +0 -50
  143. package/src/components/Select/index.ts +0 -3
  144. package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
  145. package/src/components/SignUpView/SignUpView.tsx +0 -503
  146. package/src/components/SignUpView/SignUpView.types.ts +0 -58
  147. package/src/components/SignUpView/icons.tsx +0 -71
  148. package/src/components/SignUpView/index.ts +0 -3
  149. package/src/components/Switch/README.md +0 -112
  150. package/src/components/Switch/Switch.stories.tsx +0 -550
  151. package/src/components/Switch/Switch.tsx +0 -246
  152. package/src/components/Switch/Switch.types.ts +0 -67
  153. package/src/components/Table/README.md +0 -369
  154. package/src/components/Table/Table.stories.tsx +0 -805
  155. package/src/components/Table/Table.tsx +0 -688
  156. package/src/components/Table/Table.types.ts +0 -204
  157. package/src/components/Table/index.ts +0 -9
  158. package/src/components/Tabs/README.md +0 -201
  159. package/src/components/Tabs/Tabs.stories.tsx +0 -580
  160. package/src/components/Tabs/Tabs.tsx +0 -356
  161. package/src/components/Tabs/Tabs.types.ts +0 -127
  162. package/src/components/Tabs/icons.tsx +0 -129
  163. package/src/components/Tabs/index.ts +0 -11
  164. package/src/components/Textarea/Textarea.stories.tsx +0 -535
  165. package/src/components/Textarea/Textarea.tsx +0 -188
  166. package/src/components/Textarea/Textarea.types.ts +0 -54
  167. package/src/context/ThemeContext.tsx +0 -99
  168. package/src/context/index.ts +0 -1
  169. package/src/index.css +0 -29
  170. package/src/index.ts +0 -39
  171. package/src/main.tsx +0 -10
  172. package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
  173. package/src/views/ProductsView/ProductsView.tsx +0 -480
  174. package/src/views/ProductsView/ProductsView.types.ts +0 -238
  175. package/src/views/ProductsView/README.md +0 -312
  176. package/src/views/ProductsView/icons.tsx +0 -38
  177. package/src/views/ProductsView/index.ts +0 -8
  178. package/src/views/RecoverPasswordView/README.md +0 -269
  179. package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
  180. package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
  181. package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
  182. package/src/views/RecoverPasswordView/icons.tsx +0 -17
  183. package/src/views/RecoverPasswordView/index.ts +0 -2
  184. package/src/views/TableLayoutView/README.md +0 -268
  185. package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
  186. package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
  187. package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
  188. package/src/views/TableLayoutView/icons.tsx +0 -113
  189. package/src/views/TableLayoutView/index.ts +0 -6
  190. package/storybook/main.ts +0 -20
  191. package/storybook/preview.tsx +0 -84
  192. package/storybook/vitest.setup.ts +0 -7
  193. package/tailwind.config.js +0 -128
  194. /package/{public → dist}/,Business Logo.png +0 -0
  195. /package/{public → dist}/.Siesa Logo.png +0 -0
  196. /package/{public → dist}/bg_siesa.png +0 -0
  197. /package/{public → dist}/siesa_logo_mobile.png +0 -0
  198. /package/{public → dist}/vite.svg +0 -0
package/docs/colors.md DELETED
@@ -1,832 +0,0 @@
1
- # 🎨 Sistema de Colores - Siesa UI Kit
2
-
3
- ## 📋 Tabla de Contenidos
4
-
5
- 1. [Introducción](#introducción)
6
- 2. [Arquitectura de Colores](#arquitectura-de-colores)
7
- 3. [Colores Primitivos](#colores-primitivos)
8
- 4. [Tokens Semánticos](#tokens-semánticos)
9
- 5. [Modos de Color (Light/Dark)](#modos-de-color-lightdark)
10
- 6. [Guía de Uso en Componentes](#guía-de-uso-en-componentes)
11
- 7. [Ejemplos de Código](#ejemplos-de-código)
12
- 8. [Mejores Prácticas](#mejores-prácticas)
13
- 9. [Referencia Rápida](#referencia-rápida)
14
-
15
- ---
16
-
17
- ## Introducción
18
-
19
- Este documento describe el sistema de colores del **Siesa UI Kit**, diseñado para garantizar consistencia visual, accesibilidad y mantenibilidad en todos los componentes de la interfaz.
20
-
21
- ### 🎯 Objetivos del Sistema
22
-
23
- - **Consistencia**: Colores unificados en toda la aplicación
24
- - **Accesibilidad**: Ratios de contraste WCAG AA/AAA
25
- - **Mantenibilidad**: Tokens semánticos fáciles de actualizar
26
- - **Escalabilidad**: Sistema extensible para nuevos componentes
27
- - **Dark Mode**: Soporte completo para modo oscuro
28
-
29
- ---
30
-
31
- ## Arquitectura de Colores
32
-
33
- El sistema de colores está estructurado en 3 capas:
34
-
35
- ```
36
- ┌─────────────────────────────────────┐
37
- │ CAPA 3: Componentes │
38
- │ (Button, Alert, Badge, etc.) │
39
- └─────────────────────────────────────┘
40
-
41
- │ usa tokens
42
-
43
- ┌─────────────────────────────────────┐
44
- │ CAPA 2: Tokens Semánticos │
45
- │ (content-primary, bg-primary, etc) │
46
- └─────────────────────────────────────┘
47
-
48
- │ mapea a
49
-
50
- ┌─────────────────────────────────────┐
51
- │ CAPA 1: Colores Primitivos │
52
- │ (primary-custom-600, gray-100, etc)│
53
- └─────────────────────────────────────┘
54
- ```
55
-
56
- ### Principios de Diseño
57
-
58
- 1. **Primitivos = Valores Hex**: Colores base inmutables
59
- 2. **Tokens = Intención de Uso**: Nombres semánticos que describen propósito
60
- 3. **Componentes = Aplicación**: Uso consistente de tokens
61
-
62
- ---
63
-
64
- ## Colores Primitivos
65
-
66
- Los colores primitivos son la base del sistema. Están organizados en escalas de 100-700 (actualmente) con planes de expandir a 50-950.
67
-
68
- ### 📘 Primary Custom (Azul Principal)
69
-
70
- Color primario de marca Siesa. Usado en botones, enlaces y elementos interactivos principales.
71
-
72
- | Escala | Valor Hex | CSS Class | Uso Principal |
73
- |--------|-----------|-----------|---------------|
74
- | **100** | `#dbeefe` | `primary-custom-100` | Hover backgrounds (outline buttons) |
75
- | **300** | `#93d1fd` | `primary-custom-300` | Bordes (outline buttons, inputs) |
76
- | **400** | `#60b6fa` | `primary-custom-400` | Focus rings |
77
- | **500** | `#3c9bf6` | `primary-custom-500` | Hover state (default buttons) |
78
- | **600** | `#0e79fd` | `primary-custom-600` | **Color principal** (contenido, íconos) |
79
- | **700** | `#0c6ade` | `primary-custom-700` | Active/Pressed states |
80
-
81
- **Ejemplo de Aplicación**:
82
- ```tsx
83
- // Botón primario
84
- <button className="bg-primary-custom-600 hover:bg-primary-custom-500 focus:ring-primary-custom-400">
85
- Click me
86
- </button>
87
- ```
88
-
89
- ---
90
-
91
- ### 🎨 Colores Inverse (Para fondos oscuros)
92
-
93
- Colores optimizados para usar sobre fondos de color primario.
94
-
95
- | Token | Valor Hex | Uso |
96
- |-------|-----------|-----|
97
- | `primary-inverse-content` | `#eff8ff` | Texto sobre fondo primario |
98
- | `primary-inverse-background` | `#0e79fd` | Fondo de botones primarios |
99
- | `primary-inverse-border` | `#3c9bf6` | Bordes sobre fondo primario |
100
-
101
- **Ejemplo de Aplicación**:
102
- ```tsx
103
- // Botón con fondo primario y texto claro
104
- <button className="bg-primary-inverse-background text-primary-inverse-content border-primary-inverse-border">
105
- Botón Primario
106
- </button>
107
- ```
108
-
109
- ---
110
-
111
- ### 🌈 Colores del Sistema (Light Mode)
112
-
113
- Paleta neutral para textos, fondos y bordes en modo claro.
114
-
115
- #### Contenido (Texto)
116
-
117
- | Token | Valor Hex | Uso | Contraste |
118
- |-------|-----------|-----|-----------|
119
- | `content-primary` | `#18181b` | Texto principal | AAA (18:1) |
120
- | `content-secondary` | `#a1a1aa` | Descripciones, labels | AA (4.5:1) |
121
- | `content-tertiary` | `#71717a` | Placeholders, disabled text | AA (4.5:1) |
122
-
123
- #### Fondos
124
-
125
- | Token | Valor Hex | Uso |
126
- |-------|-----------|-----|
127
- | `bg-primary` | `#ffffff` | Fondo principal de la app |
128
- | `background-secondary` | `#f4f4f5` | Cards, fondos disabled |
129
-
130
- #### Bordes
131
-
132
- | Token | Valor Hex | Uso |
133
- |-------|-----------|-----|
134
- | `border-primary` | `#e4e4e7` | Bordes normales (inputs, cards) |
135
- | `border-secondary` | `#f4f4f5` | Dividers, bordes suaves |
136
-
137
- **Ejemplo de Aplicación**:
138
- ```tsx
139
- // Card con sistema de colores semánticos
140
- <div className="bg-bg-primary border border-border-primary">
141
- <h3 className="text-content-primary">Título Principal</h3>
142
- <p className="text-content-secondary">Descripción secundaria</p>
143
- </div>
144
- ```
145
-
146
- ---
147
-
148
- ### 🔴 Colores de Error
149
-
150
- Paleta para estados de error y validación.
151
-
152
- | Token | Valor Hex | Base Color | Uso |
153
- |-------|-----------|------------|-----|
154
- | `error-bg` | `#fef2f2` | Red 50 | Fondo de alertas de error |
155
- | `error-border` | `#ef4444` | Red 500 | Bordes de inputs con error |
156
- | `error-content` | `#dc2626` | Red 600 | Texto de mensajes de error |
157
-
158
- **Ejemplo de Aplicación**:
159
- ```tsx
160
- // Input con error
161
- <div className="border-2 border-error-border bg-error-bg">
162
- <input type="text" />
163
- <span className="text-error-content">Email inválido</span>
164
- </div>
165
- ```
166
-
167
- > **⚠️ PENDIENTE**: Agregar colores para Success, Warning, Info con la misma estructura.
168
-
169
- ---
170
-
171
- ## Tokens Semánticos
172
-
173
- Los tokens semánticos describen **dónde y cómo** usar los colores, no **qué color** son.
174
-
175
- ### 📊 Estructura de Tokens
176
-
177
- ```
178
- {categoria}-{proposito}-{variante}
179
-
180
- Ejemplos:
181
- - content-primary (Categoría: content, Propósito: primary)
182
- - bg-secondary (Categoría: bg, Propósito: secondary)
183
- - border-custom (Categoría: border, Propósito: custom)
184
- ```
185
-
186
- ### Categorías de Tokens
187
-
188
- | Categoría | Prefijo | Uso | Ejemplos |
189
- |-----------|---------|-----|----------|
190
- | **Content** | `content-` | Texto, íconos | `content-primary`, `content-secondary` |
191
- | **Background** | `bg-`, `background-` | Fondos | `bg-primary`, `background-secondary` |
192
- | **Border** | `border-` | Bordes, divisores | `border-primary`, `border-secondary` |
193
- | **Primary Custom** | `primary-custom-` | Color de marca | `primary-custom-600`, `primary-custom-300` |
194
- | **Error** | `error-` | Estados de error | `error-bg`, `error-border`, `error-content` |
195
-
196
- ---
197
-
198
- ## Modos de Color (Light/Dark)
199
-
200
- ### Configuración de Tailwind CSS
201
-
202
- Siesa UI Kit utiliza la estrategia **class-based** de Tailwind CSS para dark mode:
203
-
204
- ```javascript
205
- // tailwind.config.js
206
- module.exports = {
207
- darkMode: 'class', // ✅ Estrategia basada en clases
208
- // ... resto de la configuración
209
- }
210
- ```
211
-
212
- Con `darkMode: 'class'`, el modificador `dark:` se activa cuando un elemento ancestro (típicamente `<html>`) tiene la clase `dark`:
213
-
214
- ### 🌞 Light Mode (Por Defecto)
215
-
216
- ```html
217
- <html>
218
- <!-- Sin clase 'dark' = Light Mode activo -->
219
- <body>
220
- <div class="bg-white text-content-primary">
221
- Contenido en light mode
222
- </div>
223
- </body>
224
- </html>
225
- ```
226
-
227
- ### 🌙 Dark Mode
228
-
229
- ```html
230
- <html class="dark">
231
- <!-- Con clase 'dark' = Dark Mode activo -->
232
- <body>
233
- <div class="bg-white dark:bg-dark-bg-primary text-content-primary dark:text-dark-content-primary">
234
- Contenido adaptado a dark mode
235
- </div>
236
- </body>
237
- </html>
238
- ```
239
-
240
- ### Modificador dark: en Tailwind
241
-
242
- El modificador `dark:` funciona como prefijo para cualquier utilidad de Tailwind:
243
-
244
- ```tsx
245
- // Sintaxis básica
246
- dark:{utility}
247
-
248
- // Ejemplos
249
- dark:bg-dark-bg-primary // Background en dark mode
250
- dark:text-white // Texto en dark mode
251
- dark:border-gray-700 // Borde en dark mode
252
- dark:hover:bg-blue-600 // Hover en dark mode
253
- ```
254
-
255
- ### Colores para Dark Mode
256
-
257
- | Token (Dark) | Valor Hex | Descripción |
258
- |--------------|-----------|-------------|
259
- | `dark-bg-primary` | `#000000` | Fondo principal oscuro |
260
- | `dark-content-primary` | `#ffffff` | Texto principal claro (blanco) |
261
- | `dark-border-primary` | `#71717a` | Bordes en dark mode |
262
- | `dark-border-custom` | `#0f6ae3` | Bordes de componentes interactivos |
263
- | `dark-bg-inverse` | `#bfe2fe` | Fondos inversos (botones) |
264
- | `dark-content-inverse` | `#0e79fd` | Texto inverso |
265
-
266
- ### Combinación con Otros Modificadores
267
-
268
- El modificador `dark:` se puede combinar con cualquier otro modificador de Tailwind:
269
-
270
- ```tsx
271
- // dark: + hover:
272
- <button className="
273
- bg-primary-custom-600
274
- hover:bg-primary-custom-500
275
- dark:bg-dark-bg-inverse
276
- dark:hover:bg-dark-bg-inverse/90
277
- ">
278
- Button con hover en ambos modos
279
- </button>
280
-
281
- // dark: + focus:
282
- <input className="
283
- border-border-primary
284
- focus:border-primary-custom-400
285
- dark:border-dark-border-primary
286
- dark:focus:border-dark-border-custom
287
- " />
288
-
289
- // dark: + responsive (orden correcto: responsive → dark → state)
290
- <div className="
291
- bg-white
292
- md:bg-gray-50
293
- dark:bg-dark-bg-primary
294
- dark:md:bg-gray-900
295
- ">
296
- Responsive + dark mode
297
- </div>
298
-
299
- // dark: + group-hover:
300
- <div className="group">
301
- <p className="
302
- text-content-secondary
303
- group-hover:text-content-primary
304
- dark:text-gray-400
305
- dark:group-hover:text-white
306
- ">
307
- Text con group hover
308
- </p>
309
- </div>
310
- ```
311
-
312
- ### Orden de Modificadores
313
-
314
- Cuando combines múltiples modificadores, sigue este orden:
315
-
316
- **Formato**: `{responsive}:{dark}:{state}:{utility}`
317
-
318
- ```tsx
319
- // ✅ CORRECTO - Orden consistente
320
- <button className="
321
- md:bg-blue-500
322
- md:dark:bg-blue-700
323
- md:dark:hover:bg-blue-800
324
- ">
325
-
326
- // ❌ INCORRECTO - Orden inconsistente
327
- <button className="
328
- dark:md:hover:bg-blue-800
329
- ">
330
- ```
331
-
332
- Ejemplos correctos:
333
- ```tsx
334
- sm:dark:hover:bg-blue-500 // responsive → dark → state
335
- lg:dark:focus:text-white // responsive → dark → state
336
- md:dark:group-hover:opacity-100 // responsive → dark → state
337
- ```
338
-
339
- ### Estados Hover con Dark Mode
340
-
341
- | Token | Light Mode | Dark Mode | Uso |
342
- |-------|------------|-----------|-----|
343
- | Hover Overlay | `rgba(0, 0, 0, 0.1)` | `rgba(255, 255, 255, 0.2)` | Botones ghost |
344
- | Hover Primary | `-primary-custom-500` | `dark-bg-inverse/90` | Botones primarios |
345
- | Hover Border | `-primary-custom-300` | `dark-border-custom` | Cards interactivas |
346
-
347
- ```tsx
348
- // Hover overlay para botones ghost
349
- <button className="
350
- bg-transparent
351
- hover:bg-hover-overlay
352
- dark:hover:bg-hover-overlay-dark
353
- ">
354
- Ghost Button
355
- </button>
356
-
357
- // Hover para botones primarios
358
- <button className="
359
- bg-primary-custom-600
360
- hover:bg-primary-custom-500
361
- dark:bg-dark-bg-inverse
362
- dark:hover:bg-dark-bg-inverse/90
363
- ">
364
- Primary Button
365
- </button>
366
-
367
- // Hover para cards interactivas
368
- <div className="
369
- border-border-primary
370
- hover:border-primary-custom-300
371
- dark:border-dark-border-primary
372
- dark:hover:border-dark-border-custom
373
- ">
374
- Interactive Card
375
- </div>
376
- ```
377
-
378
- ### Implementación con JavaScript
379
-
380
- Para alternar entre modos, agrega/quita la clase `dark` del elemento `<html>`:
381
-
382
- ```tsx
383
- // Toggle básico
384
- const toggleDarkMode = () => {
385
- document.documentElement.classList.toggle('dark');
386
- };
387
-
388
- // Con persistencia en localStorage
389
- const toggleDarkMode = () => {
390
- const isDark = document.documentElement.classList.contains('dark');
391
-
392
- if (isDark) {
393
- document.documentElement.classList.remove('dark');
394
- localStorage.setItem('theme', 'light');
395
- } else {
396
- document.documentElement.classList.add('dark');
397
- localStorage.setItem('theme', 'dark');
398
- }
399
- };
400
-
401
- // Aplicar tema guardado al cargar
402
- const savedTheme = localStorage.getItem('theme');
403
- if (savedTheme === 'dark') {
404
- document.documentElement.classList.add('dark');
405
- }
406
- ```
407
-
408
- **Ver**: `docs/dark-mode-guide.md` para implementación completa con React hooks y Context API.
409
-
410
- ### Ejemplo Completo de Componente
411
-
412
- ```tsx
413
- // Card que adapta todos sus colores a dark mode
414
- export const AdaptiveCard = () => {
415
- return (
416
- <div className="
417
- p-6
418
- bg-white dark:bg-dark-bg-primary
419
- border border-border-primary dark:border-dark-border-primary
420
- rounded-2xl
421
- shadow-base
422
- hover:shadow-lg
423
- transition-shadow
424
- ">
425
- {/* Header */}
426
- <div className="mb-4 flex items-center justify-between">
427
- <h3 className="
428
- text-content-primary dark:text-dark-content-primary
429
- font-bold
430
- text-lg
431
- ">
432
- Card Title
433
- </h3>
434
- <span className="
435
- text-content-secondary dark:text-content-secondary
436
- text-sm
437
- ">
438
- Just now
439
- </span>
440
- </div>
441
-
442
- {/* Content */}
443
- <p className="
444
- mb-4
445
- text-content-secondary dark:text-content-secondary
446
- ">
447
- Card content que se adapta automáticamente según el modo activo.
448
- Todos los colores usan el modificador dark: correctamente.
449
- </p>
450
-
451
- {/* Actions */}
452
- <div className="flex gap-3">
453
- <button className="
454
- px-4 py-2
455
- bg-primary-custom-600 dark:bg-dark-bg-inverse
456
- text-primary-inverse-content dark:text-dark-content-inverse
457
- hover:bg-primary-custom-500 dark:hover:bg-dark-bg-inverse/90
458
- rounded-md
459
- font-bold
460
- transition-colors
461
- ">
462
- Primary
463
- </button>
464
-
465
- <button className="
466
- px-4 py-2
467
- border border-border-primary dark:border-dark-border-custom
468
- text-content-primary dark:text-dark-content-primary
469
- hover:bg-background-secondary dark:hover:bg-dark-bg-primary
470
- rounded-md
471
- font-bold
472
- transition-colors
473
- ">
474
- Secondary
475
- </button>
476
- </div>
477
- </div>
478
- );
479
- };
480
- ```
481
-
482
- ---
483
-
484
- ## Guía de Uso en Componentes
485
-
486
- ### ✅ Buenas Prácticas
487
-
488
- #### 1. **Usar Tokens Semánticos, NO Primitivos**
489
-
490
- ```tsx
491
- // ✅ CORRECTO - Usa tokens semánticos
492
- <p className="text-content-primary">Texto principal</p>
493
-
494
- // ❌ INCORRECTO - Usa primitivos directamente
495
- <p className="text-primary-custom-600">Texto</p>
496
- ```
497
-
498
- **Razón**: Los tokens permiten cambiar el sistema de colores sin tocar componentes.
499
-
500
- ---
501
-
502
- #### 2. **Especificar Dark Mode Explícitamente**
503
-
504
- ```tsx
505
- // ✅ CORRECTO - Dark mode explícito
506
- <div className="bg-white dark:bg-dark-bg-primary">
507
- Contenido
508
- </div>
509
-
510
- // ⚠️ EVITAR - Confiar en defaults
511
- <div className="bg-white">
512
- Contenido
513
- </div>
514
- ```
515
-
516
- ---
517
-
518
- #### 3. **Agrupar Colores Relacionados**
519
-
520
- ```tsx
521
- // ✅ CORRECTO - Colores agrupados por propósito
522
- <button className="
523
- bg-primary-inverse-background
524
- text-primary-inverse-content
525
- border-primary-inverse-border
526
- ">
527
- Botón
528
- </button>
529
- ```
530
-
531
- ---
532
-
533
- #### 4. **Usar Hover Overlay para Interacciones Sutiles**
534
-
535
- ```tsx
536
- // ✅ CORRECTO - Hover overlay ligero
537
- <button className="
538
- bg-transparent
539
- hover:bg-hover-overlay
540
- dark:hover:bg-hover-overlay-dark
541
- ">
542
- Plain Button
543
- </button>
544
- ```
545
-
546
- ---
547
-
548
- ### ❌ Anti-Patrones a Evitar
549
-
550
- #### 1. **NO mezclar capas**
551
-
552
- ```tsx
553
- // ❌ INCORRECTO - Mezcla tokens y primitivos
554
- <div className="text-content-primary bg-primary-custom-600">
555
- Contenido
556
- </div>
557
- ```
558
-
559
- #### 2. **NO hardcodear valores hex**
560
-
561
- ```tsx
562
- // ❌ INCORRECTO - Valor hex hardcodeado
563
- <div style={{ backgroundColor: '#0e79fd' }}>
564
- Contenido
565
- </div>
566
- ```
567
-
568
- #### 3. **NO usar colores Tailwind nativos en componentes core**
569
-
570
- ```tsx
571
- // ❌ INCORRECTO - Tailwind nativo (inconsistente)
572
- <div className="bg-blue-500 text-white">
573
- Contenido
574
- </div>
575
-
576
- // ✅ CORRECTO - Tokens del sistema
577
- <div className="bg-primary-inverse-background text-primary-inverse-content">
578
- Contenido
579
- </div>
580
- ```
581
-
582
- ---
583
-
584
- ## Ejemplos de Código
585
-
586
- ### Ejemplo 1: Botón Primario
587
-
588
- ```tsx
589
- import React from 'react';
590
-
591
- export const PrimaryButton = ({ children, onClick }) => {
592
- return (
593
- <button
594
- onClick={onClick}
595
- className="
596
- bg-primary-inverse-background
597
- text-primary-inverse-content
598
- border border-primary-inverse-border
599
- hover:bg-primary-custom-500
600
- focus:ring-2 focus:ring-primary-custom-400 focus:ring-offset-2
601
- active:scale-95
602
- disabled:opacity-50 disabled:cursor-not-allowed
603
- px-4 py-2 rounded-md font-bold
604
- transition-all duration-150
605
- dark:bg-primary-inverse-background
606
- dark:text-primary-inverse-content
607
- dark:hover:bg-primary-custom-500
608
- "
609
- >
610
- {children}
611
- </button>
612
- );
613
- };
614
- ```
615
-
616
- ---
617
-
618
- ### Ejemplo 2: Card con Dark Mode
619
-
620
- ```tsx
621
- import React from 'react';
622
-
623
- export const Card = ({ title, description }) => {
624
- return (
625
- <div className="
626
- bg-white dark:bg-dark-bg-primary
627
- border border-border-primary dark:border-dark-border-primary
628
- rounded-lg p-6
629
- shadow-sm
630
- ">
631
- <h3 className="
632
- text-content-primary dark:text-dark-content-primary
633
- text-xl font-bold mb-2
634
- ">
635
- {title}
636
- </h3>
637
- <p className="
638
- text-content-secondary dark:text-dark-content-primary
639
- opacity-80
640
- ">
641
- {description}
642
- </p>
643
- </div>
644
- );
645
- };
646
- ```
647
-
648
- ---
649
-
650
- ### Ejemplo 3: Input con Validación
651
-
652
- ```tsx
653
- import React from 'react';
654
-
655
- export const Input = ({ label, error, ...props }) => {
656
- return (
657
- <div className="space-y-1">
658
- <label className="text-content-primary dark:text-dark-content-primary text-sm font-medium">
659
- {label}
660
- </label>
661
- <input
662
- {...props}
663
- className={`
664
- w-full px-3 py-2 rounded-md
665
- bg-white dark:bg-dark-bg-primary
666
- text-content-primary dark:text-dark-content-primary
667
- border-2
668
- ${error
669
- ? 'border-error-border bg-error-bg focus:ring-error-border'
670
- : 'border-border-primary dark:border-dark-border-primary focus:ring-primary-custom-400'
671
- }
672
- focus:outline-none focus:ring-2 focus:ring-offset-1
673
- disabled:opacity-50 disabled:cursor-not-allowed
674
- `}
675
- />
676
- {error && (
677
- <p className="text-error-content text-sm">
678
- {error}
679
- </p>
680
- )}
681
- </div>
682
- );
683
- };
684
- ```
685
-
686
- ---
687
-
688
- ## Mejores Prácticas
689
-
690
- ### 🎯 Principios de Uso
691
-
692
- 1. **Jerarquía de Texto**
693
- - `content-primary`: Títulos y contenido principal
694
- - `content-secondary`: Descripciones y labels
695
- - `content-tertiary`: Placeholders y texto deshabilitado
696
-
697
- 2. **Contraste y Accesibilidad**
698
- - Verificar ratios de contraste (WCAG AA mínimo: 4.5:1)
699
- - Usar herramientas como [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)
700
- - Contenido principal debe tener AAA (7:1)
701
-
702
- 3. **Estados Interactivos**
703
- - **Default**: Color base del token
704
- - **Hover**: Tono más claro/oscuro (+100 en escala)
705
- - **Active**: Tono más oscuro (-100 en escala)
706
- - **Focus**: Ring con `primary-custom-400`
707
- - **Disabled**: Reducir opacity a 50%
708
-
709
- 4. **Consistencia en Componentes**
710
- - Todos los botones primarios usan los mismos colores
711
- - Todos los inputs usan los mismos bordes
712
- - Todos los errores usan la misma paleta
713
-
714
- ---
715
-
716
- ### 🔧 Flujo de Trabajo Recomendado
717
-
718
- ```
719
- 1. Diseño en Figma
720
-
721
- 2. Identificar colores usados
722
-
723
- 3. Mapear a tokens existentes
724
-
725
- 4. Si no existe token → Crear nuevo en tailwind.config.js
726
-
727
- 5. Implementar en componente
728
-
729
- 6. Probar en Light y Dark mode
730
-
731
- 7. Verificar accesibilidad (contraste)
732
- ```
733
-
734
- ---
735
-
736
- ## Referencia Rápida
737
-
738
- ### Cheat Sheet: Colores por Caso de Uso
739
-
740
- | Caso de Uso | Light Mode | Dark Mode |
741
- |-------------|------------|-----------|
742
- | **Fondo principal** | `bg-white` | `dark:bg-dark-bg-primary` |
743
- | **Fondo secundario** | `background-secondary` | `dark:bg-dark-bg-primary` |
744
- | **Texto principal** | `text-content-primary` | `dark:text-dark-content-primary` |
745
- | **Texto secundario** | `text-content-secondary` | `dark:text-dark-content-primary opacity-80` |
746
- | **Bordes normales** | `border-border-primary` | `dark:border-dark-border-primary` |
747
- | **Botón primario BG** | `bg-primary-inverse-background` | `dark:bg-primary-inverse-background` |
748
- | **Botón primario texto** | `text-primary-inverse-content` | `dark:text-primary-inverse-content` |
749
- | **Focus ring** | `focus:ring-primary-custom-400` | `focus:ring-primary-custom-400` |
750
- | **Error BG** | `bg-error-bg` | `bg-error-bg` |
751
- | **Error texto** | `text-error-content` | `text-error-content` |
752
- | **Hover overlay** | `hover:bg-hover-overlay` | `dark:hover:bg-hover-overlay-dark` |
753
-
754
- ---
755
-
756
- ### Configuración en `tailwind.config.js`
757
-
758
- ```javascript
759
- // Archivo: tailwind.config.js
760
- module.exports = {
761
- darkMode: 'class',
762
- theme: {
763
- extend: {
764
- colors: {
765
- // Primary Custom Colors
766
- 'primary-custom': {
767
- 100: '#dbeefe',
768
- 300: '#93d1fd',
769
- 400: '#60b6fa',
770
- 500: '#3c9bf6',
771
- 600: '#0e79fd',
772
- 700: '#0c6ade',
773
- },
774
-
775
- // Primary Inverse
776
- 'primary-inverse-content': '#eff8ff',
777
- 'primary-inverse-background': '#0e79fd',
778
- 'primary-inverse-border': '#3c9bf6',
779
-
780
- // System Colors (Light)
781
- 'content-primary': '#18181b',
782
- 'content-secondary': '#a1a1aa',
783
- 'content-tertiary': '#71717a',
784
- 'bg-primary': '#ffffff',
785
- 'background-secondary': '#f4f4f5',
786
- 'border-primary': '#e4e4e7',
787
- 'border-secondary': '#f4f4f5',
788
-
789
- // Error Colors
790
- 'error-border': '#ef4444',
791
- 'error-content': '#dc2626',
792
- 'error-bg': '#fef2f2',
793
-
794
- // Dark Mode Colors
795
- 'dark-bg-primary': '#18181b', // zinc-900 - gris muy oscuro
796
- 'dark-content-primary': '#ffffff',
797
- 'dark-border-primary': '#71717a',
798
- 'dark-border-custom': '#0f6ae3',
799
- 'dark-bg-inverse': '#bfe2fe',
800
- 'dark-content-inverse': '#0e79fd',
801
- },
802
-
803
- backgroundColor: {
804
- 'hover-overlay': 'rgba(0, 0, 0, 0.1)',
805
- 'hover-overlay-dark': 'rgba(255, 255, 255, 0.2)',
806
- },
807
- },
808
- },
809
- };
810
- ```
811
-
812
- ---
813
-
814
- ## 📚 Referencias
815
-
816
- - **Figma**: [Color Primitives](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=16-4560&m=dev)
817
- - **Figma**: [Color Tokens](https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4001-1314&m=dev)
818
- - **Código**: `tailwind.config.js` (líneas 15-73)
819
- - **WCAG**: [Web Content Accessibility Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
820
-
821
- ---
822
-
823
- ## 🔄 Historial de Cambios
824
-
825
- | Versión | Fecha | Cambios |
826
- |---------|-------|---------|
827
- | 1.0.0 | 2025-11-11 | Documentación inicial del sistema de colores |
828
-
829
- ---
830
-
831
- **Última actualización**: 2025-11-11
832
- **Mantenido por**: Equipo de Siesa UI Kit