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.
- package/LICENSE.md +20 -0
- package/README.md +109 -0
- package/dist/anima-ds.cjs.js +1332 -0
- package/dist/anima-ds.esm.js +88297 -0
- package/dist/vite.svg +1 -0
- package/package.json +76 -0
- package/src/assets/charly.png +0 -0
- package/src/components/Atoms/Alert/Alert.jsx +52 -0
- package/src/components/Atoms/Alert/Alert.stories.jsx +62 -0
- package/src/components/Atoms/Avatar/Avatar.jsx +60 -0
- package/src/components/Atoms/Avatar/Avatar.stories.jsx +61 -0
- package/src/components/Atoms/Badge/Badge.jsx +34 -0
- package/src/components/Atoms/Badge/Badge.stories.jsx +55 -0
- package/src/components/Atoms/Button/Button.jsx +281 -0
- package/src/components/Atoms/Button/Button.stories.jsx +365 -0
- package/src/components/Atoms/Divider/Divider.jsx +49 -0
- package/src/components/Atoms/Divider/Divider.stories.jsx +62 -0
- package/src/components/Atoms/Icon/Icon.jsx +361 -0
- package/src/components/Atoms/Icon/Icon.stories.jsx +115 -0
- package/src/components/Atoms/Label/Label.jsx +22 -0
- package/src/components/Atoms/Progress/Progress.jsx +49 -0
- package/src/components/Atoms/Progress/Progress.stories.jsx +88 -0
- package/src/components/Atoms/Radios/Radios.jsx +39 -0
- package/src/components/Atoms/Radios/Radios.stories.jsx +119 -0
- package/src/components/Atoms/Shadow/Shadow.stories.jsx +25 -0
- package/src/components/Atoms/Skeleton/Skeleton.jsx +50 -0
- package/src/components/Atoms/Skeleton/Skeleton.stories.jsx +55 -0
- package/src/components/Atoms/Spacing/Spacing.jsx +56 -0
- package/src/components/Atoms/Spacing/Spacing.stories.jsx +78 -0
- package/src/components/Atoms/Spinner/Spinner.jsx +47 -0
- package/src/components/Atoms/Spinner/Spinner.stories.jsx +56 -0
- package/src/components/Atoms/Toast/Toast.jsx +74 -0
- package/src/components/Atoms/Toast/Toast.stories.jsx +101 -0
- package/src/components/Atoms/Tooltip/Tooltip.jsx +49 -0
- package/src/components/Atoms/Tooltip/Tooltip.stories.jsx +58 -0
- package/src/components/Atoms/Typography/Typography.jsx +52 -0
- package/src/components/Atoms/Typography/Typography.stories.jsx +267 -0
- package/src/components/DataDisplay/AreaChart/AreaChart.jsx +95 -0
- package/src/components/DataDisplay/AreaChart/AreaChart.stories.jsx +51 -0
- package/src/components/DataDisplay/BarChart/BarChart.jsx +90 -0
- package/src/components/DataDisplay/BarChart/BarChart.stories.jsx +60 -0
- package/src/components/DataDisplay/Card/Card.jsx +31 -0
- package/src/components/DataDisplay/Card/Card.stories.jsx +50 -0
- package/src/components/DataDisplay/ColumnChart/ColumnChart.jsx +92 -0
- package/src/components/DataDisplay/ColumnChart/ColumnChart.stories.jsx +65 -0
- package/src/components/DataDisplay/DBGrid/DBGrid.jsx +138 -0
- package/src/components/DataDisplay/DBGrid/DBGrid.stories.jsx +126 -0
- package/src/components/DataDisplay/DonutChart/DonutChart.jsx +83 -0
- package/src/components/DataDisplay/DonutChart/DonutChart.stories.jsx +48 -0
- package/src/components/DataDisplay/EmptyState/EmptyState.jsx +30 -0
- package/src/components/DataDisplay/EmptyState/EmptyState.stories.jsx +42 -0
- package/src/components/DataDisplay/LineChart/LineChart.jsx +86 -0
- package/src/components/DataDisplay/LineChart/LineChart.stories.jsx +67 -0
- package/src/components/DataDisplay/List/List.jsx +30 -0
- package/src/components/DataDisplay/List/List.stories.jsx +59 -0
- package/src/components/DataDisplay/PieChart/PieChart.jsx +64 -0
- package/src/components/DataDisplay/PieChart/PieChart.stories.jsx +47 -0
- package/src/components/DataDisplay/StatCard/StatCard.jsx +55 -0
- package/src/components/DataDisplay/StatCard/StatCard.stories.jsx +59 -0
- package/src/components/DataDisplay/TagList/TagList.jsx +37 -0
- package/src/components/DataDisplay/TagList/TagList.stories.jsx +48 -0
- package/src/components/DataDisplay/Timeline/Timeline.jsx +41 -0
- package/src/components/DataDisplay/Timeline/Timeline.stories.jsx +64 -0
- package/src/components/Inputs/Checkbox/Checkbox.jsx +27 -0
- package/src/components/Inputs/Checkbox/Checkbox.stories.jsx +51 -0
- package/src/components/Inputs/DatePicker/DatePicker.jsx +55 -0
- package/src/components/Inputs/DatePicker/DatePicker.stories.jsx +52 -0
- package/src/components/Inputs/FileUpload/FileUpload.jsx +108 -0
- package/src/components/Inputs/FileUpload/FileUpload.stories.jsx +52 -0
- package/src/components/Inputs/Input/Input.jsx +50 -0
- package/src/components/Inputs/Input/Input.stories.jsx +63 -0
- package/src/components/Inputs/RadioButton/RadioButton.jsx +31 -0
- package/src/components/Inputs/RadioButton/RadioButton.stories.jsx +59 -0
- package/src/components/Inputs/Select/Select.jsx +59 -0
- package/src/components/Inputs/Select/Select.stories.jsx +66 -0
- package/src/components/Inputs/Switch/Switch.jsx +44 -0
- package/src/components/Inputs/Switch/Switch.stories.jsx +51 -0
- package/src/components/Inputs/Textarea/Textarea.jsx +51 -0
- package/src/components/Inputs/Textarea/Textarea.stories.jsx +65 -0
- package/src/components/Layout/Accordion/Accordion.jsx +58 -0
- package/src/components/Layout/Accordion/Accordion.stories.jsx +55 -0
- package/src/components/Layout/Breadcrumbs/Breadcrumbs.jsx +49 -0
- package/src/components/Layout/Breadcrumbs/Breadcrumbs.stories.jsx +44 -0
- package/src/components/Layout/Breakpoint/Breakpoint.jsx +35 -0
- package/src/components/Layout/Breakpoint/Breakpoint.stories.jsx +348 -0
- package/src/components/Layout/Drawer/Drawer.jsx +75 -0
- package/src/components/Layout/Drawer/Drawer.stories.jsx +77 -0
- package/src/components/Layout/Dropdown/Dropdown.jsx +83 -0
- package/src/components/Layout/Dropdown/Dropdown.stories.jsx +53 -0
- package/src/components/Layout/Grid/Grid.jsx +39 -0
- package/src/components/Layout/Grid/Grid.stories.jsx +546 -0
- package/src/components/Layout/Header/Header.jsx +50 -0
- package/src/components/Layout/Header/Header.stories.jsx +36 -0
- package/src/components/Layout/Layout/Layout.jsx +14 -0
- package/src/components/Layout/Layout/Layout.stories.jsx +34 -0
- package/src/components/Layout/Modal/Modal.jsx +78 -0
- package/src/components/Layout/Modal/Modal.stories.jsx +98 -0
- package/src/components/Layout/Pagination/Pagination.jsx +109 -0
- package/src/components/Layout/Pagination/Pagination.stories.jsx +62 -0
- package/src/components/Layout/Sidebar/Sidebar.jsx +57 -0
- package/src/components/Layout/Sidebar/Sidebar.stories.jsx +51 -0
- package/src/components/Layout/Stepper/Stepper.jsx +132 -0
- package/src/components/Layout/Stepper/Stepper.stories.jsx +78 -0
- package/src/components/Layout/Tabs/Tabs.jsx +63 -0
- package/src/components/Layout/Tabs/Tabs.stories.jsx +62 -0
- package/src/components/Views/ChangePasswordForm/ChangePasswordForm.jsx +125 -0
- package/src/components/Views/ChangePasswordForm/ChangePasswordForm.stories.jsx +55 -0
- package/src/components/Views/Chat/Chat.jsx +134 -0
- package/src/components/Views/Chat/Chat.stories.jsx +143 -0
- package/src/components/Views/LoginForm/LoginForm.jsx +98 -0
- package/src/components/Views/LoginForm/LoginForm.stories.jsx +55 -0
- package/src/i18n/config.js +209 -0
- package/src/index.js +60 -0
- package/src/main.jsx +510 -0
- package/src/providers/I18nProvider.jsx +13 -0
- 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
|
+
|