anima-ds-nucleus 1.0.0

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 (116) hide show
  1. package/LICENSE.md +20 -0
  2. package/README.md +109 -0
  3. package/dist/anima-ds.cjs.js +1332 -0
  4. package/dist/anima-ds.esm.js +88297 -0
  5. package/dist/vite.svg +1 -0
  6. package/package.json +76 -0
  7. package/src/assets/charly.png +0 -0
  8. package/src/components/Atoms/Alert/Alert.jsx +52 -0
  9. package/src/components/Atoms/Alert/Alert.stories.jsx +62 -0
  10. package/src/components/Atoms/Avatar/Avatar.jsx +60 -0
  11. package/src/components/Atoms/Avatar/Avatar.stories.jsx +61 -0
  12. package/src/components/Atoms/Badge/Badge.jsx +34 -0
  13. package/src/components/Atoms/Badge/Badge.stories.jsx +55 -0
  14. package/src/components/Atoms/Button/Button.jsx +281 -0
  15. package/src/components/Atoms/Button/Button.stories.jsx +365 -0
  16. package/src/components/Atoms/Divider/Divider.jsx +49 -0
  17. package/src/components/Atoms/Divider/Divider.stories.jsx +62 -0
  18. package/src/components/Atoms/Icon/Icon.jsx +361 -0
  19. package/src/components/Atoms/Icon/Icon.stories.jsx +115 -0
  20. package/src/components/Atoms/Label/Label.jsx +22 -0
  21. package/src/components/Atoms/Progress/Progress.jsx +49 -0
  22. package/src/components/Atoms/Progress/Progress.stories.jsx +88 -0
  23. package/src/components/Atoms/Radios/Radios.jsx +39 -0
  24. package/src/components/Atoms/Radios/Radios.stories.jsx +119 -0
  25. package/src/components/Atoms/Shadow/Shadow.stories.jsx +25 -0
  26. package/src/components/Atoms/Skeleton/Skeleton.jsx +50 -0
  27. package/src/components/Atoms/Skeleton/Skeleton.stories.jsx +55 -0
  28. package/src/components/Atoms/Spacing/Spacing.jsx +56 -0
  29. package/src/components/Atoms/Spacing/Spacing.stories.jsx +78 -0
  30. package/src/components/Atoms/Spinner/Spinner.jsx +47 -0
  31. package/src/components/Atoms/Spinner/Spinner.stories.jsx +56 -0
  32. package/src/components/Atoms/Toast/Toast.jsx +74 -0
  33. package/src/components/Atoms/Toast/Toast.stories.jsx +101 -0
  34. package/src/components/Atoms/Tooltip/Tooltip.jsx +49 -0
  35. package/src/components/Atoms/Tooltip/Tooltip.stories.jsx +58 -0
  36. package/src/components/Atoms/Typography/Typography.jsx +52 -0
  37. package/src/components/Atoms/Typography/Typography.stories.jsx +267 -0
  38. package/src/components/DataDisplay/AreaChart/AreaChart.jsx +95 -0
  39. package/src/components/DataDisplay/AreaChart/AreaChart.stories.jsx +51 -0
  40. package/src/components/DataDisplay/BarChart/BarChart.jsx +90 -0
  41. package/src/components/DataDisplay/BarChart/BarChart.stories.jsx +60 -0
  42. package/src/components/DataDisplay/Card/Card.jsx +31 -0
  43. package/src/components/DataDisplay/Card/Card.stories.jsx +50 -0
  44. package/src/components/DataDisplay/ColumnChart/ColumnChart.jsx +92 -0
  45. package/src/components/DataDisplay/ColumnChart/ColumnChart.stories.jsx +65 -0
  46. package/src/components/DataDisplay/DBGrid/DBGrid.jsx +138 -0
  47. package/src/components/DataDisplay/DBGrid/DBGrid.stories.jsx +126 -0
  48. package/src/components/DataDisplay/DonutChart/DonutChart.jsx +83 -0
  49. package/src/components/DataDisplay/DonutChart/DonutChart.stories.jsx +48 -0
  50. package/src/components/DataDisplay/EmptyState/EmptyState.jsx +30 -0
  51. package/src/components/DataDisplay/EmptyState/EmptyState.stories.jsx +42 -0
  52. package/src/components/DataDisplay/LineChart/LineChart.jsx +86 -0
  53. package/src/components/DataDisplay/LineChart/LineChart.stories.jsx +67 -0
  54. package/src/components/DataDisplay/List/List.jsx +30 -0
  55. package/src/components/DataDisplay/List/List.stories.jsx +59 -0
  56. package/src/components/DataDisplay/PieChart/PieChart.jsx +64 -0
  57. package/src/components/DataDisplay/PieChart/PieChart.stories.jsx +47 -0
  58. package/src/components/DataDisplay/StatCard/StatCard.jsx +55 -0
  59. package/src/components/DataDisplay/StatCard/StatCard.stories.jsx +59 -0
  60. package/src/components/DataDisplay/TagList/TagList.jsx +37 -0
  61. package/src/components/DataDisplay/TagList/TagList.stories.jsx +48 -0
  62. package/src/components/DataDisplay/Timeline/Timeline.jsx +41 -0
  63. package/src/components/DataDisplay/Timeline/Timeline.stories.jsx +64 -0
  64. package/src/components/Inputs/Checkbox/Checkbox.jsx +27 -0
  65. package/src/components/Inputs/Checkbox/Checkbox.stories.jsx +51 -0
  66. package/src/components/Inputs/DatePicker/DatePicker.jsx +55 -0
  67. package/src/components/Inputs/DatePicker/DatePicker.stories.jsx +52 -0
  68. package/src/components/Inputs/FileUpload/FileUpload.jsx +108 -0
  69. package/src/components/Inputs/FileUpload/FileUpload.stories.jsx +52 -0
  70. package/src/components/Inputs/Input/Input.jsx +50 -0
  71. package/src/components/Inputs/Input/Input.stories.jsx +63 -0
  72. package/src/components/Inputs/RadioButton/RadioButton.jsx +31 -0
  73. package/src/components/Inputs/RadioButton/RadioButton.stories.jsx +59 -0
  74. package/src/components/Inputs/Select/Select.jsx +59 -0
  75. package/src/components/Inputs/Select/Select.stories.jsx +66 -0
  76. package/src/components/Inputs/Switch/Switch.jsx +44 -0
  77. package/src/components/Inputs/Switch/Switch.stories.jsx +51 -0
  78. package/src/components/Inputs/Textarea/Textarea.jsx +51 -0
  79. package/src/components/Inputs/Textarea/Textarea.stories.jsx +65 -0
  80. package/src/components/Layout/Accordion/Accordion.jsx +58 -0
  81. package/src/components/Layout/Accordion/Accordion.stories.jsx +55 -0
  82. package/src/components/Layout/Breadcrumbs/Breadcrumbs.jsx +49 -0
  83. package/src/components/Layout/Breadcrumbs/Breadcrumbs.stories.jsx +44 -0
  84. package/src/components/Layout/Breakpoint/Breakpoint.jsx +35 -0
  85. package/src/components/Layout/Breakpoint/Breakpoint.stories.jsx +348 -0
  86. package/src/components/Layout/Drawer/Drawer.jsx +75 -0
  87. package/src/components/Layout/Drawer/Drawer.stories.jsx +77 -0
  88. package/src/components/Layout/Dropdown/Dropdown.jsx +83 -0
  89. package/src/components/Layout/Dropdown/Dropdown.stories.jsx +53 -0
  90. package/src/components/Layout/Grid/Grid.jsx +39 -0
  91. package/src/components/Layout/Grid/Grid.stories.jsx +546 -0
  92. package/src/components/Layout/Header/Header.jsx +50 -0
  93. package/src/components/Layout/Header/Header.stories.jsx +36 -0
  94. package/src/components/Layout/Layout/Layout.jsx +14 -0
  95. package/src/components/Layout/Layout/Layout.stories.jsx +34 -0
  96. package/src/components/Layout/Modal/Modal.jsx +78 -0
  97. package/src/components/Layout/Modal/Modal.stories.jsx +98 -0
  98. package/src/components/Layout/Pagination/Pagination.jsx +109 -0
  99. package/src/components/Layout/Pagination/Pagination.stories.jsx +62 -0
  100. package/src/components/Layout/Sidebar/Sidebar.jsx +57 -0
  101. package/src/components/Layout/Sidebar/Sidebar.stories.jsx +51 -0
  102. package/src/components/Layout/Stepper/Stepper.jsx +132 -0
  103. package/src/components/Layout/Stepper/Stepper.stories.jsx +78 -0
  104. package/src/components/Layout/Tabs/Tabs.jsx +63 -0
  105. package/src/components/Layout/Tabs/Tabs.stories.jsx +62 -0
  106. package/src/components/Views/ChangePasswordForm/ChangePasswordForm.jsx +125 -0
  107. package/src/components/Views/ChangePasswordForm/ChangePasswordForm.stories.jsx +55 -0
  108. package/src/components/Views/Chat/Chat.jsx +134 -0
  109. package/src/components/Views/Chat/Chat.stories.jsx +143 -0
  110. package/src/components/Views/LoginForm/LoginForm.jsx +98 -0
  111. package/src/components/Views/LoginForm/LoginForm.stories.jsx +55 -0
  112. package/src/i18n/config.js +209 -0
  113. package/src/index.js +60 -0
  114. package/src/main.jsx +510 -0
  115. package/src/providers/I18nProvider.jsx +13 -0
  116. package/src/style.css +721 -0
package/src/main.jsx ADDED
@@ -0,0 +1,510 @@
1
+ import React, { useState } from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import './style.css';
4
+ import { I18nProvider } from './providers/I18nProvider';
5
+ import { Button } from './components/Atoms/Button/Button';
6
+ import { StatCard } from './components/DataDisplay/StatCard/StatCard';
7
+ import { Card } from './components/DataDisplay/Card/Card';
8
+ import { AreaChart } from './components/DataDisplay/AreaChart/AreaChart';
9
+ import { Typography } from './components/Atoms/Typography/Typography';
10
+ import { Badge } from './components/Atoms/Badge/Badge';
11
+ import { Icon } from './components/Atoms/Icon/Icon';
12
+ import { Tooltip } from './components/Atoms/Tooltip/Tooltip';
13
+ import { Input } from './components/Inputs/Input/Input';
14
+ import { Tabs } from './components/Layout/Tabs/Tabs';
15
+ import { Modal } from './components/Layout/Modal/Modal';
16
+ import charlyImg from './assets/charly.png';
17
+
18
+ function App() {
19
+ const [isBeeTraveling, setIsBeeTraveling] = useState(false);
20
+ const [isModalOpen, setIsModalOpen] = useState(false);
21
+
22
+ const handleBeeClick = () => {
23
+ if (isBeeTraveling) return;
24
+ setIsBeeTraveling(true);
25
+
26
+ // Duración total de la animación CSS de viaje (debe coincidir con bee-travel)
27
+ setTimeout(() => {
28
+ setIsBeeTraveling(false);
29
+ }, 3600);
30
+ };
31
+
32
+ const handleExploreComponents = () => {
33
+ const componentsSection = document.getElementById('components-section');
34
+ if (componentsSection) {
35
+ componentsSection.scrollIntoView({ behavior: 'smooth', block: 'start' });
36
+ }
37
+ };
38
+
39
+ return (
40
+ <I18nProvider>
41
+ <div className="min-h-screen bg-gradient-to-br from-gray-50 via-white to-gray-50">
42
+ {/* Bee viajera en capa superior */}
43
+ {isBeeTraveling && (
44
+ <div className="fixed inset-x-0 top-16 z-50 flex justify-center pointer-events-none">
45
+ <div className="bee-travel">
46
+ <div className="bee-travel-inner">
47
+ <img
48
+ src={charlyImg}
49
+ alt="Bee viajando por Anima DS"
50
+ className="w-20 h-20 object-contain"
51
+ />
52
+ </div>
53
+ </div>
54
+ </div>
55
+ )}
56
+ {/* Header Premium */}
57
+ <header className="bg-gradient-to-r from-[#003300] via-[#004d00] to-[#003300] shadow-2xl header-honeycomb">
58
+ <div className="max-w-7xl mx-auto px-6 py-16">
59
+ <div className="flex flex-col items-center text-center space-y-4">
60
+ <div className="flex items-center space-x-3">
61
+ <Tooltip
62
+ content="Soy Bee, la IA de Nucleus Labs, y te presento el Anima Design System"
63
+ position="right"
64
+ >
65
+ <div
66
+ className={`w-20 h-20 rounded-lg flex items-center justify-center overflow-hidden cursor-pointer transition-opacity duration-200 ${
67
+ isBeeTraveling ? 'opacity-0' : 'opacity-100'
68
+ }`}
69
+ onClick={handleBeeClick}
70
+ >
71
+ <img
72
+ src={charlyImg}
73
+ alt="Bee, IA de Nucleus Labs"
74
+ className="w-18 h-18 object-contain charly-float"
75
+ />
76
+ </div>
77
+ </Tooltip>
78
+ <Typography variant="h1" className="text-white font-bold tracking-tight">
79
+ Anima Design System
80
+ </Typography>
81
+ </div>
82
+ <Typography variant="body1" className="text-green-100 max-w-2xl">
83
+ Sistema de diseño premium de Nucleus, con componentes modulares, documentación completa y
84
+ herramientas de desarrollo integradas para todos los proyectos de la empresa.
85
+ </Typography>
86
+ <Badge variant="success" size="large" className="bg-white/20 text-white border-white/30 mt-2">
87
+ v1.0.0
88
+ </Badge>
89
+ </div>
90
+ </div>
91
+ </header>
92
+
93
+ {/* Main Content */}
94
+ <main className="max-w-7xl mx-auto px-6 py-12">
95
+ {/* Welcome Section */}
96
+ <section className="mb-16">
97
+ <Card className="border-0 shadow-xl bg-white/80 backdrop-blur-sm">
98
+ <div className="p-8">
99
+ <div className="flex items-start justify-between mb-6">
100
+ <div>
101
+ <Typography variant="h2" className="text-gray-900 mb-3">
102
+ Bienvenido a Anima DS
103
+ </Typography>
104
+ <Typography variant="body1" className="text-gray-600 max-w-3xl leading-relaxed">
105
+ Tu librería de componentes está lista para usar. Explora más de 45 componentes
106
+ cuidadosamente diseñados, todos documentados en Storybook y listos para integrarse
107
+ en tus proyectos.
108
+ </Typography>
109
+ </div>
110
+ <div className="hidden md:block">
111
+ <div className="w-24 h-24 bg-gradient-to-br from-[#003300] to-[#006600] rounded-2xl flex items-center justify-center shadow-lg">
112
+ <Icon name="ChartBarIcon" className="h-12 w-12 text-white" />
113
+ </div>
114
+ </div>
115
+ </div>
116
+
117
+ <div className="flex flex-wrap gap-3 mt-6">
118
+ <Button
119
+ variant="primary"
120
+ className="bg-[#003300] hover:bg-[#004d00] border-[#003300]"
121
+ onClick={() => window.open('http://localhost:6006', '_blank')}
122
+ >
123
+ Ver Documentación
124
+ </Button>
125
+ <Button
126
+ variant="outline"
127
+ className="border-[#003300] text-[#003300] hover:bg-[#003300] hover:text-white"
128
+ onClick={handleExploreComponents}
129
+ >
130
+ Explorar Componentes
131
+ </Button>
132
+ </div>
133
+ </div>
134
+ </Card>
135
+ </section>
136
+
137
+ {/* Quick Install Section */}
138
+ <section className="mb-16">
139
+ <Card className="border-0 shadow-lg bg-gradient-to-br from-[#003300]/5 to-[#004d00]/5">
140
+ <div className="p-6">
141
+ <Typography variant="h3" className="text-gray-900 mb-4">
142
+ Instalación Rápida
143
+ </Typography>
144
+ <div className="bg-gray-900 rounded-lg p-4 mb-4">
145
+ <code className="text-green-400 text-sm">npm install anima-ds</code>
146
+ </div>
147
+ <div className="bg-gray-50 rounded-lg p-4">
148
+ <Typography variant="body2" className="text-gray-700 mb-2 font-medium">
149
+ Ejemplo de uso:
150
+ </Typography>
151
+ <pre className="text-xs text-gray-600 overflow-x-auto">
152
+ {`import { Button, Card } from 'anima-ds';
153
+
154
+ <Card title="Mi Card">
155
+ <Button variant="Primary">Click aquí</Button>
156
+ </Card>`}
157
+ </pre>
158
+ </div>
159
+ </div>
160
+ </Card>
161
+ </section>
162
+
163
+ {/* Stats Section */}
164
+ <section className="mb-16">
165
+ <Typography variant="h3" className="text-gray-900 mb-6">
166
+ Estadísticas del Sistema
167
+ </Typography>
168
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
169
+ <StatCard
170
+ title="Componentes"
171
+ value="45+"
172
+ change="Todos documentados"
173
+ changeType="positive"
174
+ icon="ChartBarIcon"
175
+ iconColor="green"
176
+ className="border-l-4 border-[#003300]"
177
+ />
178
+ <StatCard
179
+ title="Categorías"
180
+ value="5"
181
+ change="Organizados por tipo"
182
+ changeType="positive"
183
+ icon="Cog6ToothIcon"
184
+ iconColor="green"
185
+ className="border-l-4 border-[#003300]"
186
+ />
187
+ <StatCard
188
+ title="Idiomas"
189
+ value="2"
190
+ change="ES-AR y PT-BR"
191
+ changeType="positive"
192
+ icon="UserIcon"
193
+ iconColor="green"
194
+ className="border-l-4 border-[#003300]"
195
+ />
196
+ <StatCard
197
+ title="Gráficos"
198
+ value="6"
199
+ change="Con ApexCharts"
200
+ changeType="positive"
201
+ icon="ChartBarIcon"
202
+ iconColor="green"
203
+ className="border-l-4 border-[#003300]"
204
+ />
205
+ </div>
206
+ </section>
207
+
208
+ {/* Components Overview Section */}
209
+ <section id="components-section" className="mb-16">
210
+ <Typography variant="h3" className="text-gray-900 mb-6">
211
+ Componentes Principales
212
+ </Typography>
213
+ <div className="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-4">
214
+ {[
215
+ { name: 'Button', icon: 'ChartBarIcon', category: 'Atoms' },
216
+ { name: 'Input', icon: 'Cog6ToothIcon', category: 'Inputs' },
217
+ { name: 'Card', icon: 'ChartBarIcon', category: 'DataDisplay' },
218
+ { name: 'Modal', icon: 'UserIcon', category: 'Layout' },
219
+ { name: 'Tabs', icon: 'Cog6ToothIcon', category: 'Layout' },
220
+ { name: 'Badge', icon: 'ChartBarIcon', category: 'Atoms' },
221
+ { name: 'Select', icon: 'Cog6ToothIcon', category: 'Inputs' },
222
+ { name: 'DBGrid', icon: 'ChartBarIcon', category: 'DataDisplay' },
223
+ { name: 'AreaChart', icon: 'ChartBarIcon', category: 'DataDisplay' },
224
+ { name: 'LoginForm', icon: 'UserIcon', category: 'Views' },
225
+ ].map((comp, idx) => (
226
+ <Card key={idx} className="border border-gray-200 shadow-sm hover:shadow-md transition-shadow text-center p-4">
227
+ <div className="w-10 h-10 bg-gradient-to-br from-[#003300] to-[#006600] rounded-lg flex items-center justify-center mx-auto mb-2">
228
+ <Icon name={comp.icon} className="h-5 w-5 text-white" />
229
+ </div>
230
+ <Typography variant="body2" className="text-gray-900 font-medium mb-1">
231
+ {comp.name}
232
+ </Typography>
233
+ <Typography variant="body2" className="text-gray-500 text-xs">
234
+ {comp.category}
235
+ </Typography>
236
+ </Card>
237
+ ))}
238
+ </div>
239
+ </section>
240
+
241
+ {/* Requirements Section */}
242
+ <section className="mb-16">
243
+ <Card className="border-l-4 border-[#003300] shadow-md">
244
+ <div className="p-6">
245
+ <Typography variant="h4" className="text-gray-900 mb-4">
246
+ Requisitos Técnicos
247
+ </Typography>
248
+ <div className="space-y-2">
249
+ <div className="flex items-center gap-2">
250
+ <Badge variant="primary" className="bg-[#003300] text-white">React 18+</Badge>
251
+ <Typography variant="body2" className="text-gray-600">
252
+ Versión mínima requerida
253
+ </Typography>
254
+ </div>
255
+ <div className="flex items-center gap-2">
256
+ <Badge variant="success">Tailwind CSS</Badge>
257
+ <Typography variant="body2" className="text-gray-600">
258
+ Sistema de estilos recomendado
259
+ </Typography>
260
+ </div>
261
+ <div className="flex items-center gap-2 flex-wrap">
262
+ <Badge variant="warning">Opcional</Badge>
263
+ <Typography variant="body2" className="text-gray-600">
264
+ i18next, MUI, ApexCharts (según componentes usados)
265
+ </Typography>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ </Card>
270
+ </section>
271
+
272
+ {/* Button Variants Section - Para probar todas las variantes */}
273
+ <section className="mb-16">
274
+ <Typography variant="h3" className="text-gray-900 mb-6">
275
+ Variantes del Botón
276
+ </Typography>
277
+ <Card className="border-0 shadow-xl bg-white/80 backdrop-blur-sm">
278
+ <div className="p-8">
279
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-10 items-start">
280
+ {/* Columna izquierda: Variantes de botón */}
281
+ <div>
282
+ {/* Primary Row */}
283
+ <div className="mb-8">
284
+ <Typography variant="h4" className="text-gray-700 mb-4">Primary</Typography>
285
+ <div className="flex items-center gap-6 flex-wrap">
286
+ <div className="flex flex-col items-center gap-2">
287
+ <span className="text-xs text-gray-500">Small</span>
288
+ <Button texto="Button" tipo="Primary" tamaño="Small" onClick={() => alert('Primary Small clicked!')} />
289
+ </div>
290
+ <div className="flex flex-col items-center gap-2">
291
+ <span className="text-xs text-gray-500">Default</span>
292
+ <Button texto="Button" tipo="Primary" tamaño="Default" onClick={() => alert('Primary Default clicked!')} />
293
+ </div>
294
+ <div className="flex flex-col items-center gap-2">
295
+ <span className="text-xs text-gray-500">Large</span>
296
+ <Button texto="Button" tipo="Primary" tamaño="Large" onClick={() => alert('Primary Large clicked!')} />
297
+ </div>
298
+ </div>
299
+ </div>
300
+
301
+ {/* Secondary Row */}
302
+ <div className="mb-8">
303
+ <Typography variant="h4" className="text-gray-700 mb-4">Secondary</Typography>
304
+ <div className="flex items-center gap-6 flex-wrap">
305
+ <div className="flex flex-col items-center gap-2">
306
+ <span className="text-xs text-gray-500">Small</span>
307
+ <Button texto="Button" tipo="Secondary" tamaño="Small" onClick={() => alert('Secondary Small clicked!')} />
308
+ </div>
309
+ <div className="flex flex-col items-center gap-2">
310
+ <span className="text-xs text-gray-500">Default</span>
311
+ <Button texto="Button" tipo="Secondary" tamaño="Default" onClick={() => alert('Secondary Default clicked!')} />
312
+ </div>
313
+ <div className="flex flex-col items-center gap-2">
314
+ <span className="text-xs text-gray-500">Large</span>
315
+ <Button texto="Button" tipo="Secondary" tamaño="Large" onClick={() => alert('Secondary Large clicked!')} />
316
+ </div>
317
+ </div>
318
+ </div>
319
+
320
+ {/* Ghost Row */}
321
+ <div className="mb-8">
322
+ <Typography variant="h4" className="text-gray-700 mb-4">Ghost</Typography>
323
+ <div className="flex items-center gap-6 flex-wrap">
324
+ <div className="flex flex-col items-center gap-2">
325
+ <span className="text-xs text-gray-500">Small</span>
326
+ <Button texto="Button" tipo="Ghost" tamaño="Small" onClick={() => alert('Ghost Small clicked!')} />
327
+ </div>
328
+ <div className="flex flex-col items-center gap-2">
329
+ <span className="text-xs text-gray-500">Default</span>
330
+ <Button texto="Button" tipo="Ghost" tamaño="Default" onClick={() => alert('Ghost Default clicked!')} />
331
+ </div>
332
+ <div className="flex flex-col items-center gap-2">
333
+ <span className="text-xs text-gray-500">Large</span>
334
+ <Button texto="Button" tipo="Ghost" tamaño="Large" onClick={() => alert('Ghost Large clicked!')} />
335
+ </div>
336
+ </div>
337
+ </div>
338
+
339
+ {/* Disabled Row */}
340
+ <div>
341
+ <Typography variant="h4" className="text-gray-700 mb-4">Disabled</Typography>
342
+ <div className="flex items-center gap-6 flex-wrap">
343
+ <div className="flex flex-col items-center gap-2">
344
+ <span className="text-xs text-gray-500">Small</span>
345
+ <Button texto="Button" tipo="Disabled" tamaño="Small" />
346
+ </div>
347
+ <div className="flex flex-col items-center gap-2">
348
+ <span className="text-xs text-gray-500">Default</span>
349
+ <Button texto="Button" tipo="Disabled" tamaño="Default" />
350
+ </div>
351
+ <div className="flex flex-col items-center gap-2">
352
+ <span className="text-xs text-gray-500">Large</span>
353
+ <Button texto="Button" tipo="Disabled" tamaño="Large" />
354
+ </div>
355
+ </div>
356
+ </div>
357
+ </div>
358
+
359
+ {/* Columna derecha: otros componentes de ejemplo */}
360
+ <div className="space-y-6">
361
+ <Typography variant="h4" className="text-gray-700 mb-2">
362
+ Otros componentes en acción
363
+ </Typography>
364
+ <Card className="border border-gray-100 shadow-md">
365
+ <div className="p-5 space-y-3">
366
+ <Typography variant="body1" className="text-gray-800 font-medium">
367
+ Card + StatCard
368
+ </Typography>
369
+ <StatCard
370
+ title="Sesiones activas"
371
+ value="128"
372
+ change="+12% esta semana"
373
+ changeType="positive"
374
+ icon="UserIcon"
375
+ iconColor="green"
376
+ />
377
+ <Button
378
+ variant="outline"
379
+ tamaño="Small"
380
+ onClick={() => setIsModalOpen(true)}
381
+ className="w-full mt-2"
382
+ >
383
+ Ver Modal
384
+ </Button>
385
+ </div>
386
+ </Card>
387
+
388
+ <Card className="border border-gray-100 shadow-md">
389
+ <div className="p-5 space-y-3">
390
+ <Typography variant="body1" className="text-gray-800 font-medium">
391
+ Input y Tabs
392
+ </Typography>
393
+ <Input
394
+ label="Email"
395
+ type="email"
396
+ placeholder="tu@email.com"
397
+ helperText="Campo de ejemplo"
398
+ />
399
+ <div className="mt-4">
400
+ <Tabs
401
+ items={[
402
+ { label: 'Tab 1', content: <div className="p-2 text-sm text-gray-600">Contenido Tab 1</div> },
403
+ { label: 'Tab 2', content: <div className="p-2 text-sm text-gray-600">Contenido Tab 2</div> },
404
+ { label: 'Tab 3', content: <div className="p-2 text-sm text-gray-600">Contenido Tab 3</div> },
405
+ ]}
406
+ />
407
+ </div>
408
+ </div>
409
+ </Card>
410
+ </div>
411
+ </div>
412
+ </div>
413
+ </Card>
414
+ </section>
415
+
416
+ {/* Features Section */}
417
+ <section>
418
+ <Typography variant="h3" className="text-gray-900 mb-6">
419
+ Características Principales
420
+ </Typography>
421
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-6">
422
+ <Card className="border-0 shadow-lg hover:shadow-xl transition-shadow bg-gradient-to-br from-white to-gray-50">
423
+ <div className="p-6">
424
+ <div className="w-14 h-14 bg-gradient-to-br from-[#003300] to-[#006600] rounded-xl flex items-center justify-center mb-4 shadow-md">
425
+ <Icon name="Cog6ToothIcon" className="h-7 w-7 text-white" />
426
+ </div>
427
+ <Typography variant="h4" className="text-gray-900 mb-2">
428
+ Componentes Modulares
429
+ </Typography>
430
+ <Typography variant="body2" className="text-gray-600">
431
+ Estructura organizada por tipo: Atoms, Inputs, Layout, DataDisplay y Views.
432
+ </Typography>
433
+ </div>
434
+ </Card>
435
+
436
+ <Card className="border-0 shadow-lg hover:shadow-xl transition-shadow bg-gradient-to-br from-white to-gray-50">
437
+ <div className="p-6">
438
+ <div className="w-14 h-14 bg-gradient-to-br from-[#003300] to-[#006600] rounded-xl flex items-center justify-center mb-4 shadow-md">
439
+ <Icon name="ChartBarIcon" className="h-7 w-7 text-white" />
440
+ </div>
441
+ <Typography variant="h4" className="text-gray-900 mb-2">
442
+ Storybook Integrado
443
+ </Typography>
444
+ <Typography variant="body2" className="text-gray-600">
445
+ Cada componente incluye historias interactivas para visualización y pruebas.
446
+ </Typography>
447
+ </div>
448
+ </Card>
449
+
450
+ <Card className="border-0 shadow-lg hover:shadow-xl transition-shadow bg-gradient-to-br from-white to-gray-50">
451
+ <div className="p-6">
452
+ <div className="w-14 h-14 bg-gradient-to-br from-[#003300] to-[#006600] rounded-xl flex items-center justify-center mb-4 shadow-md">
453
+ <Icon name="UserIcon" className="h-7 w-7 text-white" />
454
+ </div>
455
+ <Typography variant="h4" className="text-gray-900 mb-2">
456
+ Internacionalización
457
+ </Typography>
458
+ <Typography variant="body2" className="text-gray-600">
459
+ Soporte completo para español (AR) y portugués (BR) con i18n.
460
+ </Typography>
461
+ </div>
462
+ </Card>
463
+ </div>
464
+ </section>
465
+
466
+ {/* Footer */}
467
+ <footer className="mt-16 bg-gradient-to-r from-[#003300] via-[#004d00] to-[#003300]">
468
+ <div className="max-w-7xl mx-auto px-6 py-8 border-t border-white/10">
469
+ <div className="flex flex-col md:flex-row items-center justify-between gap-4">
470
+ <Typography variant="body2" className="text-green-100 text-center md:text-left">
471
+ © 2025 Anima Design System. Creado por Equipo Nucleus Labs. Todos los derechos reservados.
472
+ </Typography>
473
+ <div className="flex items-center gap-4">
474
+ <a
475
+ href="https://github.com/NucleusNova/anima-ds"
476
+ target="_blank"
477
+ rel="noopener noreferrer"
478
+ className="text-green-100 hover:text-white transition-colors text-sm underline"
479
+ >
480
+ GitHub
481
+ </a>
482
+ </div>
483
+ </div>
484
+ </div>
485
+ </footer>
486
+
487
+ {/* Modal Example */}
488
+ <Modal
489
+ isOpen={isModalOpen}
490
+ onClose={() => setIsModalOpen(false)}
491
+ title="Ejemplo de Modal"
492
+ >
493
+ <Typography variant="body1" className="text-gray-600 mb-4">
494
+ Este es un ejemplo del componente Modal de Anima DS.
495
+ </Typography>
496
+ <Button variant="primary" onClick={() => setIsModalOpen(false)}>
497
+ Cerrar
498
+ </Button>
499
+ </Modal>
500
+ </main>
501
+ </div>
502
+ </I18nProvider>
503
+ );
504
+ }
505
+
506
+ ReactDOM.createRoot(document.getElementById('app')).render(
507
+ <React.StrictMode>
508
+ <App />
509
+ </React.StrictMode>
510
+ );
@@ -0,0 +1,13 @@
1
+ import { I18nextProvider } from 'react-i18next';
2
+ import i18n from '../i18n/config';
3
+
4
+ export const I18nProvider = ({ children, language = 'es-AR' }) => {
5
+ if (i18n.language !== language) {
6
+ i18n.changeLanguage(language);
7
+ }
8
+
9
+ return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;
10
+ };
11
+
12
+ export default I18nProvider;
13
+