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
@@ -1,513 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/react';
2
- import { Notification } from './Notification';
3
-
4
- const meta = {
5
- title: 'Siesa UI Kit/Notification',
6
- component: Notification,
7
- parameters: {
8
- layout: 'centered',
9
- docs: {
10
- description: {
11
- component:
12
- '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+. Ideal para usar como overlay en iconos o botones.',
13
- },
14
- },
15
- },
16
- tags: ['autodocs'],
17
- argTypes: {
18
- count: {
19
- control: 'number',
20
- description: 'Número de notificaciones (undefined = punto simple, 1-99 = número exacto, 100+ = "99+")',
21
- },
22
- color: {
23
- control: 'select',
24
- options: ['red', 'orange', 'yellow', 'green', 'blue', 'purple', 'zinc', 'primary'],
25
- description: 'Color del badge (default: red)',
26
- },
27
- className: {
28
- control: 'text',
29
- description: 'Clases CSS adicionales para posicionamiento',
30
- },
31
- ariaLabel: {
32
- control: 'text',
33
- description: 'Label para accesibilidad (se genera automáticamente si no se especifica)',
34
- },
35
- },
36
- } satisfies Meta<typeof Notification>;
37
-
38
- export default meta;
39
- type Story = StoryObj<typeof meta>;
40
-
41
- // ============================================
42
- // 1. PLAYGROUND INTERACTIVO
43
- // ============================================
44
- export const Playground: Story = {
45
- name: 'Playground',
46
- args: {
47
- count: 5,
48
- color: 'red',
49
- },
50
- };
51
-
52
- // ============================================
53
- // 2. VARIANTES BÁSICAS
54
- // ============================================
55
- export const VariantesBasicas: Story = {
56
- name: 'Variantes Básicas',
57
- render: () => (
58
- <div className="space-y-8 p-6">
59
- {/* Badge Simple (Dot) */}
60
- <div>
61
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
62
- Badge Simple (Dot)
63
- </h3>
64
- <div className="flex items-center gap-6">
65
- <div className="flex flex-col items-center gap-2">
66
- <Notification />
67
- <span className="text-xs text-gray-500 dark:text-gray-300">Default (sin count)</span>
68
- </div>
69
- <div className="flex flex-col items-center gap-2">
70
- <Notification count={0} />
71
- <span className="text-xs text-gray-500 dark:text-gray-300">count={0}</span>
72
- </div>
73
- </div>
74
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
75
- Punto rojo de 8px × 8px para indicar notificaciones sin especificar cantidad
76
- </p>
77
- </div>
78
-
79
- {/* Badge con Número */}
80
- <div>
81
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
82
- Badge con Número
83
- </h3>
84
- <div className="flex items-center gap-6">
85
- <div className="flex flex-col items-center gap-2">
86
- <Notification count={1} />
87
- <span className="text-xs text-gray-500 dark:text-gray-300">1</span>
88
- </div>
89
- <div className="flex flex-col items-center gap-2">
90
- <Notification count={5} />
91
- <span className="text-xs text-gray-500 dark:text-gray-300">5</span>
92
- </div>
93
- <div className="flex flex-col items-center gap-2">
94
- <Notification count={12} />
95
- <span className="text-xs text-gray-500 dark:text-gray-300">12</span>
96
- </div>
97
- <div className="flex flex-col items-center gap-2">
98
- <Notification count={99} />
99
- <span className="text-xs text-gray-500 dark:text-gray-300">99</span>
100
- </div>
101
- <div className="flex flex-col items-center gap-2">
102
- <Notification count={150} />
103
- <span className="text-xs text-gray-500 dark:text-gray-300">99+ (150)</span>
104
- </div>
105
- </div>
106
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
107
- Badge de 16px altura con número. Límite automático a &quot;99+&quot; para valores ≥ 100
108
- </p>
109
- </div>
110
-
111
- <div className="mt-6 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
112
- <p className="text-xs text-gray-600 dark:text-gray-300">
113
- <strong>💡 Especificaciones:</strong>
114
- <br />• Badge simple: 8px × 8px (w-2 h-2), rounded-full
115
- <br />• Badge con número: 16px altura, 10px Bold, padding horizontal 4px
116
- <br />• Límite automático: números ≥ 100 muestran &quot;99+&quot;
117
- <br />• Color default: content-extensions-red (#b91c1c)
118
- </p>
119
- </div>
120
- </div>
121
- ),
122
- };
123
-
124
- // ============================================
125
- // 3. RANGOS DE CONTEO
126
- // ============================================
127
- export const RangosDeConteo: Story = {
128
- name: 'Rangos de Conteo',
129
- render: () => (
130
- <div className="space-y-8 p-6">
131
- <div>
132
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
133
- Pocas Notificaciones (1-9)
134
- </h3>
135
- <div className="flex gap-4">
136
- <Notification count={1} />
137
- <Notification count={3} />
138
- <Notification count={5} />
139
- <Notification count={9} />
140
- </div>
141
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
142
- Badge angosto para números de un dígito
143
- </p>
144
- </div>
145
-
146
- <div>
147
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
148
- Muchas Notificaciones (10-99)
149
- </h3>
150
- <div className="flex gap-4">
151
- <Notification count={10} />
152
- <Notification count={25} />
153
- <Notification count={50} />
154
- <Notification count={99} />
155
- </div>
156
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
157
- Badge se expande automáticamente para dos dígitos
158
- </p>
159
- </div>
160
-
161
- <div>
162
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
163
- Demasiadas Notificaciones (100+)
164
- </h3>
165
- <div className="flex gap-4">
166
- <Notification count={100} />
167
- <Notification count={250} />
168
- <Notification count={500} />
169
- <Notification count={999} />
170
- </div>
171
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
172
- Todos muestran &quot;99+&quot; para mantener badge compacto
173
- </p>
174
- </div>
175
- </div>
176
- ),
177
- };
178
-
179
- // ============================================
180
- // 4. COLORES
181
- // ============================================
182
- export const Colores: Story = {
183
- name: 'Colores',
184
- render: () => (
185
- <div className="space-y-8 p-6">
186
- <div>
187
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
188
- Badge con Número - Colores Disponibles
189
- </h3>
190
- <div className="flex flex-wrap items-center gap-6">
191
- <div className="flex flex-col items-center gap-2">
192
- <Notification count={5} color="red" />
193
- <span className="text-xs text-gray-500 dark:text-gray-300">Red (default)</span>
194
- </div>
195
- <div className="flex flex-col items-center gap-2">
196
- <Notification count={8} color="orange" />
197
- <span className="text-xs text-gray-500 dark:text-gray-300">Orange</span>
198
- </div>
199
- <div className="flex flex-col items-center gap-2">
200
- <Notification count={3} color="yellow" />
201
- <span className="text-xs text-gray-500 dark:text-gray-300">Yellow</span>
202
- </div>
203
- <div className="flex flex-col items-center gap-2">
204
- <Notification count={12} color="green" />
205
- <span className="text-xs text-gray-500 dark:text-gray-300">Green</span>
206
- </div>
207
- <div className="flex flex-col items-center gap-2">
208
- <Notification count={7} color="blue" />
209
- <span className="text-xs text-gray-500 dark:text-gray-300">Blue</span>
210
- </div>
211
- <div className="flex flex-col items-center gap-2">
212
- <Notification count={15} color="purple" />
213
- <span className="text-xs text-gray-500 dark:text-gray-300">Purple</span>
214
- </div>
215
- <div className="flex flex-col items-center gap-2">
216
- <Notification count={2} color="zinc" />
217
- <span className="text-xs text-gray-500 dark:text-gray-300">Zinc</span>
218
- </div>
219
- <div className="flex flex-col items-center gap-2">
220
- <Notification count={9} color="primary" />
221
- <span className="text-xs text-gray-500 dark:text-gray-300">Primary</span>
222
- </div>
223
- </div>
224
- </div>
225
-
226
- <div>
227
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
228
- Badge Simple - Colores Disponibles
229
- </h3>
230
- <div className="flex flex-wrap items-center gap-6">
231
- <div className="flex flex-col items-center gap-2">
232
- <Notification color="red" />
233
- <span className="text-xs text-gray-500 dark:text-gray-300">Red</span>
234
- </div>
235
- <div className="flex flex-col items-center gap-2">
236
- <Notification color="orange" />
237
- <span className="text-xs text-gray-500 dark:text-gray-300">Orange</span>
238
- </div>
239
- <div className="flex flex-col items-center gap-2">
240
- <Notification color="green" />
241
- <span className="text-xs text-gray-500 dark:text-gray-300">Green</span>
242
- </div>
243
- <div className="flex flex-col items-center gap-2">
244
- <Notification color="blue" />
245
- <span className="text-xs text-gray-500 dark:text-gray-300">Blue</span>
246
- </div>
247
- <div className="flex flex-col items-center gap-2">
248
- <Notification color="purple" />
249
- <span className="text-xs text-gray-500 dark:text-gray-300">Purple</span>
250
- </div>
251
- </div>
252
- </div>
253
-
254
- <div className="mt-6 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
255
- <p className="text-xs text-gray-600 dark:text-gray-300">
256
- <strong>💡 Uso recomendado:</strong>
257
- <br />• <strong>Red:</strong> Errores, alertas críticas
258
- <br />• <strong>Orange:</strong> Advertencias importantes
259
- <br />• <strong>Yellow:</strong> Avisos, atención requerida
260
- <br />• <strong>Green:</strong> Confirmaciones, éxitos
261
- <br />• <strong>Blue:</strong> Información general
262
- <br />• <strong>Purple:</strong> Especiales o premium
263
- <br />• <strong>Zinc:</strong> Neutras
264
- </p>
265
- </div>
266
- </div>
267
- ),
268
- };
269
-
270
- // ============================================
271
- // 5. DARK MODE
272
- // ============================================
273
- export const DarkMode: Story = {
274
- name: 'Dark Mode',
275
- parameters: {
276
- backgrounds: {
277
- default: 'dark',
278
- },
279
- },
280
- render: () => (
281
- <div className="dark bg-dark-bg-primary p-8 rounded-lg space-y-8">
282
- <div>
283
- <h3 className="text-sm font-bold mb-4 text-dark-content-primary">
284
- Badge Simple en Dark Mode
285
- </h3>
286
- <div className="flex gap-6">
287
- <Notification />
288
- <Notification color="orange" />
289
- <Notification color="green" />
290
- <Notification color="blue" />
291
- </div>
292
- <p className="text-xs text-gray-400 mt-4">
293
- Punto de 8px mantiene visibilidad en fondos oscuros
294
- </p>
295
- </div>
296
-
297
- <div>
298
- <h3 className="text-sm font-bold mb-4 text-dark-content-primary">
299
- Badge con Número en Dark Mode
300
- </h3>
301
- <div className="flex gap-6">
302
- <Notification count={3} />
303
- <Notification count={12} color="orange" />
304
- <Notification count={25} color="green" />
305
- <Notification count={99} color="blue" />
306
- </div>
307
- <p className="text-xs text-gray-400 mt-4">
308
- Badge con contraste óptimo: colores mantienen intensidad en dark mode
309
- </p>
310
- </div>
311
-
312
- <div className="mt-6 p-4 bg-blue-900/20 border border-blue-800 rounded-lg">
313
- <p className="text-xs text-gray-300">
314
- <strong>✨ Dark Mode:</strong>
315
- <br />• Colores mantienen intensidad (ej: content-extensions-red #b91c1c)
316
- <br />• Texto siempre blanco para máximo contraste
317
- <br />• Sin bordes en badge simple
318
- </p>
319
- </div>
320
- </div>
321
- ),
322
- };
323
-
324
- // ============================================
325
- // 6. COMO OVERLAY
326
- // ============================================
327
- export const ComoOverlay: Story = {
328
- name: 'Como Overlay',
329
- render: () => (
330
- <div className="space-y-8 p-6">
331
- <div>
332
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
333
- Overlay en Botón
334
- </h3>
335
- <div className="flex gap-6">
336
- <button className="relative p-3 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors">
337
- <svg className="w-6 h-6 text-gray-700 dark:text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
338
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
339
- </svg>
340
- <Notification count={5} className="absolute -top-1 -right-1" />
341
- </button>
342
-
343
- <button className="relative p-3 bg-white dark:bg-gray-800 border border-gray-300 dark:border-gray-600 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors">
344
- <svg className="w-6 h-6 text-gray-700 dark:text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
345
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
346
- </svg>
347
- <Notification className="absolute -top-1 -right-1" />
348
- </button>
349
-
350
- <button className="relative p-3 bg-primary-custom-600 text-white rounded-lg hover:bg-primary-custom-500 transition-colors">
351
- <svg className="w-6 h-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
352
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
353
- </svg>
354
- <Notification count={12} className="absolute -top-1 -right-1" />
355
- </button>
356
- </div>
357
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
358
- Usa <code className="px-1 bg-gray-100 dark:bg-gray-700">className=&quot;absolute -top-1 -right-1&quot;</code> para posicionar
359
- </p>
360
- </div>
361
-
362
- <div>
363
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
364
- Overlay en Avatar
365
- </h3>
366
- <div className="flex gap-6">
367
- <div className="relative">
368
- <div className="w-12 h-12 bg-gradient-to-br from-purple-400 to-pink-500 rounded-full flex items-center justify-center text-white font-bold">
369
- JD
370
- </div>
371
- <Notification count={3} className="absolute -top-1 -right-1" />
372
- </div>
373
-
374
- <div className="relative">
375
- <div className="w-12 h-12 bg-gradient-to-br from-blue-400 to-cyan-500 rounded-full flex items-center justify-center text-white font-bold">
376
- AS
377
- </div>
378
- <Notification className="absolute -top-1 -right-1" />
379
- </div>
380
- </div>
381
- <p className="text-xs text-gray-500 dark:text-gray-300 mt-2">
382
- Badge como indicador de estado en avatares
383
- </p>
384
- </div>
385
-
386
- <div>
387
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
388
- En Barra de Navegación
389
- </h3>
390
- <div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg p-4">
391
- <div className="flex items-center justify-between">
392
- <span className="text-sm font-medium text-gray-700 dark:text-white">Mi App</span>
393
- <div className="flex items-center gap-4">
394
- <button className="relative p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors">
395
- <svg className="w-5 h-5 text-gray-700 dark:text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
396
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" />
397
- </svg>
398
- <Notification count={7} className="absolute top-0 right-0" />
399
- </button>
400
- <button className="relative p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded transition-colors">
401
- <svg className="w-5 h-5 text-gray-700 dark:text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
402
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
403
- </svg>
404
- <Notification count={2} className="absolute top-0 right-0" />
405
- </button>
406
- </div>
407
- </div>
408
- </div>
409
- </div>
410
-
411
- <div className="mt-6 p-4 bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-lg">
412
- <p className="text-xs text-gray-600 dark:text-gray-300">
413
- <strong>💡 Posicionamiento:</strong>
414
- <br />• Envuelve el elemento en <code className="px-1 bg-white dark:bg-gray-700">relative</code>
415
- <br />• Agrega badge con <code className="px-1 bg-white dark:bg-gray-700">absolute -top-1 -right-1</code>
416
- <br />• Ajusta offset según necesites (top-0, -top-2, etc.)
417
- </p>
418
- </div>
419
- </div>
420
- ),
421
- };
422
-
423
- // ============================================
424
- // 7. CASOS DE USO REALES
425
- // ============================================
426
- export const CasosDeUso: Story = {
427
- name: 'Casos de Uso Reales',
428
- render: () => (
429
- <div className="space-y-8 p-6">
430
- {/* Menú Lateral */}
431
- <div>
432
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
433
- Menú Lateral con Notificaciones
434
- </h3>
435
- <div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg p-4 w-64">
436
- <div className="space-y-2">
437
- <div className="flex items-center justify-between p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded cursor-pointer">
438
- <span className="text-sm text-gray-700 dark:text-white">Dashboard</span>
439
- </div>
440
- <div className="flex items-center justify-between p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded cursor-pointer">
441
- <span className="text-sm text-gray-700 dark:text-white">Notificaciones</span>
442
- <Notification count={12} />
443
- </div>
444
- <div className="flex items-center justify-between p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded cursor-pointer">
445
- <span className="text-sm text-gray-700 dark:text-white">Mensajes</span>
446
- <Notification count={5} />
447
- </div>
448
- <div className="flex items-center justify-between p-2 hover:bg-gray-100 dark:hover:bg-gray-700 rounded cursor-pointer">
449
- <span className="text-sm text-gray-700 dark:text-white">Configuración</span>
450
- </div>
451
- </div>
452
- </div>
453
- </div>
454
-
455
- {/* Lista de Tareas */}
456
- <div>
457
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
458
- Lista de Tareas con Prioridades
459
- </h3>
460
- <div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg p-4 space-y-3">
461
- <div className="flex items-center gap-3 p-2 hover:bg-gray-50 dark:hover:bg-gray-700 rounded cursor-pointer">
462
- <Notification color="red" />
463
- <div className="flex-1">
464
- <p className="text-sm font-medium text-gray-700 dark:text-white">Urgente: Revisar servidor</p>
465
- <p className="text-xs text-gray-500 dark:text-gray-400">Prioridad alta</p>
466
- </div>
467
- </div>
468
- <div className="flex items-center gap-3 p-2 hover:bg-gray-50 dark:hover:bg-gray-700 rounded cursor-pointer">
469
- <Notification color="orange" />
470
- <div className="flex-1">
471
- <p className="text-sm font-medium text-gray-700 dark:text-white">Advertencia: Actualización disponible</p>
472
- <p className="text-xs text-gray-500 dark:text-gray-400">Prioridad media</p>
473
- </div>
474
- </div>
475
- <div className="flex items-center gap-3 p-2 hover:bg-gray-50 dark:hover:bg-gray-700 rounded cursor-pointer">
476
- <Notification color="blue" />
477
- <div className="flex-1">
478
- <p className="text-sm font-medium text-gray-700 dark:text-white">Info: Nuevo feature disponible</p>
479
- <p className="text-xs text-gray-500 dark:text-gray-400">Prioridad baja</p>
480
- </div>
481
- </div>
482
- </div>
483
- </div>
484
-
485
- {/* Tabs con Contadores */}
486
- <div>
487
- <h3 className="text-sm font-bold mb-4 text-gray-700 dark:text-white">
488
- Tabs con Contadores
489
- </h3>
490
- <div className="bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg">
491
- <div className="flex border-b border-gray-200 dark:border-gray-700">
492
- <button className="flex items-center gap-2 px-4 py-3 border-b-2 border-primary-custom-600 text-sm font-medium text-primary-custom-600">
493
- Pendientes
494
- <Notification count={8} />
495
- </button>
496
- <button className="flex items-center gap-2 px-4 py-3 text-sm font-medium text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300">
497
- En Progreso
498
- <Notification count={3} color="blue" />
499
- </button>
500
- <button className="flex items-center gap-2 px-4 py-3 text-sm font-medium text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300">
501
- Completados
502
- </button>
503
- </div>
504
- <div className="p-4">
505
- <p className="text-sm text-gray-600 dark:text-gray-300">
506
- Contenido de la pestaña seleccionada
507
- </p>
508
- </div>
509
- </div>
510
- </div>
511
- </div>
512
- ),
513
- };
@@ -1,145 +0,0 @@
1
- import React from 'react';
2
- import type { NotificationProps } from './Notification.types';
3
-
4
- /**
5
- * Componente Notification del sistema de diseño Siesa
6
- *
7
- * Badge de notificación para indicar alertas, mensajes o notificaciones pendientes.
8
- * Puede mostrar un punto simple o un contador numérico con límite automático a 99+.
9
- *
10
- * **Especificaciones de Figma:**
11
- * - Badge con número: 27px × 13px (aprox), Label/XXSmall (10px Bold, line-height 12px)
12
- * - Badge simple (dot): 13px × 13px
13
- * - Color: `content-extensions-red` (#b91c1c) por defecto
14
- * - Border radius: Pill (rounded-full)
15
- * - Padding: 4px horizontal
16
- *
17
- * **Variantes:**
18
- * - Sin count: Muestra punto circular (dot)
19
- * - Con count: Muestra badge con número (máximo 99+)
20
- *
21
- * **Uso típico:**
22
- * - Como overlay en iconos o botones
23
- * - En elementos de menú o navegación
24
- * - Standalone para indicar estado
25
- *
26
- * @see docs/colors.md - Sistema de colores (token content-extensions-red)
27
- * @see docs/typography.md - Sistema tipográfico (Label/XXSmall)
28
- * @see src/components/Button/Button.tsx - Referencia de badges en botones
29
- * @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4310-22651
30
- *
31
- * @example
32
- * ```tsx
33
- * // Badge simple (punto)
34
- * <Notification />
35
- *
36
- * // Badge con número
37
- * <Notification count={5} />
38
- *
39
- * // Badge con muchos (muestra 99+)
40
- * <Notification count={150} />
41
- *
42
- * // Con color personalizado
43
- * <Notification count={3} color="green" />
44
- *
45
- * // Como overlay en botón
46
- * <button className="relative">
47
- * <BellIcon />
48
- * <Notification count={5} className="absolute -top-1 -right-1" />
49
- * </button>
50
- * ```
51
- */
52
- export const Notification: React.FC<NotificationProps> = ({
53
- count,
54
- color = 'red',
55
- className = '',
56
- ariaLabel,
57
- }) => {
58
- // ===== MAPA DE COLORES =====
59
- // Sistema de colores consistente con Button y Badge
60
- const colorClasses: Record<string, { bg: string; text: string }> = {
61
- zinc: { bg: 'bg-zinc-600', text: 'text-white' },
62
- red: { bg: 'bg-content-extensions-red', text: 'text-white' },
63
- orange: { bg: 'bg-orange-700', text: 'text-white' },
64
- amber: { bg: 'bg-amber-700', text: 'text-white' },
65
- yellow: { bg: 'bg-yellow-700', text: 'text-white' },
66
- lime: { bg: 'bg-lime-700', text: 'text-white' },
67
- green: { bg: 'bg-green-700', text: 'text-white' },
68
- emerald: { bg: 'bg-emerald-700', text: 'text-white' },
69
- teal: { bg: 'bg-teal-700', text: 'text-white' },
70
- cyan: { bg: 'bg-cyan-700', text: 'text-white' },
71
- sky: { bg: 'bg-sky-700', text: 'text-white' },
72
- blue: { bg: 'bg-blue-700', text: 'text-white' },
73
- indigo: { bg: 'bg-indigo-700', text: 'text-white' },
74
- violet: { bg: 'bg-violet-700', text: 'text-white' },
75
- purple: { bg: 'bg-purple-700', text: 'text-white' },
76
- fuchsia: { bg: 'bg-fuchsia-700', text: 'text-white' },
77
- pink: { bg: 'bg-pink-700', text: 'text-white' },
78
- rose: { bg: 'bg-rose-700', text: 'text-white' },
79
- primary: { bg: 'bg-primary-custom-600', text: 'text-white' },
80
- secondary: { bg: 'bg-zinc-600', text: 'text-white' },
81
- tertiary: { bg: 'bg-zinc-600', text: 'text-white' },
82
- };
83
-
84
- const colors = colorClasses[color] || colorClasses.red;
85
-
86
- // ===== ARIA LABEL DINÁMICO =====
87
- const dynamicAriaLabel = ariaLabel ||
88
- (count !== undefined && count > 0
89
- ? `${count} notificaci${count === 1 ? 'ón' : 'ones'}`
90
- : 'Notificación pendiente');
91
-
92
- // ===== BADGE CON NÚMERO =====
93
- if (count !== undefined && count > 0) {
94
- const displayCount = count > 99 ? '99+' : count.toString();
95
-
96
- return (
97
- <span
98
- className={`
99
- inline-flex
100
- items-center
101
- justify-center
102
- min-w-[16px]
103
- h-4
104
- px-1
105
- rounded-full
106
- text-[10px]
107
- font-bold
108
- leading-none
109
- ${colors.bg}
110
- ${colors.text}
111
- pointer-events-none
112
- dark:${colors.bg}
113
- dark:${colors.text}
114
- ${className}
115
- `
116
- .trim()
117
- .replace(/\s+/g, ' ')}
118
- role="status"
119
- aria-label={dynamicAriaLabel}
120
- >
121
- {displayCount}
122
- </span>
123
- );
124
- }
125
-
126
- // ===== BADGE SIMPLE (DOT) =====
127
- return (
128
- <span
129
- className={`
130
- inline-block
131
- w-2
132
- h-2
133
- rounded-full
134
- ${colors.bg}
135
- pointer-events-none
136
- dark:${colors.bg}
137
- ${className}
138
- `
139
- .trim()
140
- .replace(/\s+/g, ' ')}
141
- role="status"
142
- aria-label={dynamicAriaLabel}
143
- />
144
- );
145
- };