ywana-core8 0.1.75 → 0.1.76

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 (122) hide show
  1. package/ACCORDION_EVALUATION.md +583 -0
  2. package/CHECKBOX_EVALUATION.md +273 -0
  3. package/CHIP_EVALUATION.md +542 -0
  4. package/COLOR_EVALUATION.md +524 -0
  5. package/COMPONENTS_EVALUATION.md +477 -0
  6. package/FORM_EVALUATION.md +459 -0
  7. package/HEADER_EVALUATION.md +436 -0
  8. package/ICON_EVALUATION.md +254 -0
  9. package/LIST_EVALUATION.md +574 -0
  10. package/PROGRESS_EVALUATION.md +450 -0
  11. package/RADIO_EVALUATION.md +439 -0
  12. package/RADIO_VISUAL_FIX.md +183 -0
  13. package/SECTION_IMPROVEMENTS.md +153 -0
  14. package/SWITCH_EVALUATION.md +335 -0
  15. package/SWITCH_VISUAL_FIX.md +232 -0
  16. package/TAB_EVALUATION.md +626 -0
  17. package/TEXTFIELD_EVALUATION.md +747 -0
  18. package/TOOLTIP_FIX.md +157 -0
  19. package/TREE_EVALUATION.md +708 -0
  20. package/dist/index.cjs +7900 -1615
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.css +6094 -1122
  23. package/dist/index.css.map +1 -1
  24. package/dist/index.modern.js +7929 -1645
  25. package/dist/index.modern.js.map +1 -1
  26. package/dist/index.umd.js +7900 -1615
  27. package/dist/index.umd.js.map +1 -1
  28. package/jest.config.js +24 -0
  29. package/package.json +10 -1
  30. package/src/html/accordion.css +208 -4
  31. package/src/html/accordion.example.js +390 -0
  32. package/src/html/accordion.js +284 -28
  33. package/src/html/accordion.unit.test.js +334 -0
  34. package/src/html/button.css +157 -16
  35. package/src/html/button.example.js +374 -0
  36. package/src/html/button.js +240 -60
  37. package/src/html/button.test.js +422 -0
  38. package/src/html/checkbox.css +74 -2
  39. package/src/html/checkbox.example.js +316 -0
  40. package/src/html/checkbox.js +113 -26
  41. package/src/html/checkbox.test.js +285 -0
  42. package/src/html/chip.css +230 -19
  43. package/src/html/chip.example.js +355 -0
  44. package/src/html/chip.js +321 -25
  45. package/src/html/chip.test.js +425 -0
  46. package/src/html/color.css +435 -6
  47. package/src/html/color.example.js +527 -0
  48. package/src/html/color.js +458 -9
  49. package/src/html/color.test.js +362 -4
  50. package/src/html/components.example.js +492 -0
  51. package/src/html/components_enhanced.test.js +581 -0
  52. package/src/html/form.css +70 -3
  53. package/src/html/form.example.js +385 -0
  54. package/src/html/form.js +232 -34
  55. package/src/html/form.test.js +369 -0
  56. package/src/html/header2.css +264 -0
  57. package/src/html/header2.example.js +411 -0
  58. package/src/html/header2.js +203 -0
  59. package/src/html/header2.test.js +377 -0
  60. package/src/html/icon.css +20 -2
  61. package/src/html/icon.example.js +268 -0
  62. package/src/html/icon.js +86 -16
  63. package/src/html/icon.test.js +231 -0
  64. package/src/html/index.js +1 -1
  65. package/src/html/list.css +393 -1
  66. package/src/html/list.example.js +404 -0
  67. package/src/html/list.js +583 -40
  68. package/src/html/list.test.js +383 -0
  69. package/src/html/progress.css +707 -17
  70. package/src/html/progress.example.js +424 -0
  71. package/src/html/progress.js +906 -9
  72. package/src/html/progress.test.js +313 -0
  73. package/src/html/property.css +399 -0
  74. package/src/html/property.example.js +553 -0
  75. package/src/html/property.js +393 -15
  76. package/src/html/property.test.js +351 -2
  77. package/src/html/radio-visual-test.js +289 -0
  78. package/src/html/radio.css +137 -11
  79. package/src/html/radio.example.js +389 -0
  80. package/src/html/radio.js +234 -10
  81. package/src/html/radio.test.js +318 -0
  82. package/src/html/section.example.js +99 -0
  83. package/src/html/section.js +40 -3
  84. package/src/html/section.test.js +131 -0
  85. package/src/html/selector.css +329 -3
  86. package/src/html/selector.js +369 -23
  87. package/src/html/switch-debug.js +197 -0
  88. package/src/html/switch-test-visual.js +294 -0
  89. package/src/html/switch.css +200 -0
  90. package/src/html/switch.example.js +461 -0
  91. package/src/html/switch.js +283 -23
  92. package/src/html/switch.test.js +355 -0
  93. package/src/html/tab.css +288 -0
  94. package/src/html/tab.example.js +446 -0
  95. package/src/html/tab.js +387 -22
  96. package/src/html/tab_enhanced.js +378 -0
  97. package/src/html/tab_enhanced.test.js +504 -0
  98. package/src/html/table2.css +576 -0
  99. package/src/html/table2.example.js +703 -0
  100. package/src/html/table2.js +1252 -0
  101. package/src/html/table2.migration.md +328 -0
  102. package/src/html/table2.test.js +582 -0
  103. package/src/html/text.css +375 -0
  104. package/src/html/text.js +311 -20
  105. package/src/html/textfield2.css +842 -0
  106. package/src/html/textfield2.example.js +499 -0
  107. package/src/html/textfield2.js +1130 -0
  108. package/src/html/textfield2.test.js +950 -0
  109. package/src/html/thumbnail.css +289 -2
  110. package/src/html/thumbnail.js +214 -9
  111. package/src/html/tokenfield.css +449 -1
  112. package/src/html/tokenfield.example.js +503 -0
  113. package/src/html/tokenfield.js +561 -56
  114. package/src/html/tokenfield.test.js +423 -0
  115. package/src/html/tooltip-positioning-demo.js +187 -0
  116. package/src/html/tooltip.css +25 -2
  117. package/src/html/tree.css +228 -0
  118. package/src/html/tree.example.js +475 -0
  119. package/src/html/tree.js +712 -28
  120. package/src/html/tree_enhanced.test.js +495 -0
  121. package/table2.test.js +454 -0
  122. package/src/html/button.tsx +0 -38
@@ -0,0 +1,703 @@
1
+ import React, { useState } from 'react'
2
+ import { DataTable2 } from './table2'
3
+ import { Button } from './button'
4
+ import { Text } from './text'
5
+
6
+ /**
7
+ * Ejemplos del componente DataTable2 mejorado manteniendo 100% compatibilidad
8
+ */
9
+ export const DataTable2Examples = () => {
10
+ const [isLoading, setIsLoading] = useState(false)
11
+ const [showAdvanced, setShowAdvanced] = useState(false)
12
+ const [selectedRows, setSelectedRows] = useState([])
13
+
14
+ // Datos de ejemplo
15
+ const columns = [
16
+ {
17
+ id: 'checked',
18
+ label: '',
19
+ type: 'CHECK',
20
+ sortable: false,
21
+ width: 50
22
+ },
23
+ {
24
+ id: 'id',
25
+ label: 'ID',
26
+ type: 'Number',
27
+ sortable: true,
28
+ resizable: true,
29
+ width: 80
30
+ },
31
+ {
32
+ id: 'name',
33
+ label: 'Name',
34
+ type: 'String',
35
+ sortable: true,
36
+ filterable: true,
37
+ editable: true,
38
+ resizable: true,
39
+ onChange: (rowId, fieldId, value) => console.log('Edit:', rowId, fieldId, value)
40
+ },
41
+ {
42
+ id: 'email',
43
+ label: 'Email',
44
+ type: 'String',
45
+ sortable: true,
46
+ filterable: true,
47
+ editable: true,
48
+ resizable: true,
49
+ onChange: (rowId, fieldId, value) => console.log('Edit:', rowId, fieldId, value)
50
+ },
51
+ {
52
+ id: 'age',
53
+ label: 'Age',
54
+ type: 'Number',
55
+ sortable: true,
56
+ editable: true,
57
+ resizable: true,
58
+ min: 0,
59
+ max: 120,
60
+ onChange: (rowId, fieldId, value) => console.log('Edit:', rowId, fieldId, value)
61
+ },
62
+ {
63
+ id: 'status',
64
+ label: 'Status',
65
+ type: 'SELECTION',
66
+ sortable: true,
67
+ filterable: true,
68
+ editable: true,
69
+ resizable: true,
70
+ options: [
71
+ { label: 'Active', value: 'active' },
72
+ { label: 'Inactive', value: 'inactive' },
73
+ { label: 'Pending', value: 'pending' }
74
+ ],
75
+ onChange: (rowId, fieldId, value) => console.log('Edit:', rowId, fieldId, value)
76
+ },
77
+ {
78
+ id: 'verified',
79
+ label: 'Verified',
80
+ type: 'Boolean',
81
+ sortable: true,
82
+ editable: true,
83
+ resizable: true,
84
+ onChange: (rowId, fieldId, value) => console.log('Edit:', rowId, fieldId, value)
85
+ }
86
+ ]
87
+
88
+ const rows = [
89
+ {
90
+ id: 1,
91
+ name: 'John Doe',
92
+ email: 'john@example.com',
93
+ age: 30,
94
+ status: 'active',
95
+ verified: true,
96
+ info: () => <div>Additional info for John Doe</div>
97
+ },
98
+ {
99
+ id: 2,
100
+ name: 'Jane Smith',
101
+ email: 'jane@example.com',
102
+ age: 25,
103
+ status: 'pending',
104
+ verified: false,
105
+ info: 'Jane is a new user pending verification'
106
+ },
107
+ {
108
+ id: 3,
109
+ name: 'Bob Johnson',
110
+ email: 'bob@example.com',
111
+ age: 35,
112
+ status: 'active',
113
+ verified: true
114
+ },
115
+ {
116
+ id: 4,
117
+ name: 'Alice Brown',
118
+ email: 'alice@example.com',
119
+ age: 28,
120
+ status: 'inactive',
121
+ verified: true,
122
+ disabled: true
123
+ },
124
+ {
125
+ id: 5,
126
+ name: 'Charlie Wilson',
127
+ email: 'charlie@example.com',
128
+ age: 42,
129
+ status: 'active',
130
+ verified: true
131
+ }
132
+ ]
133
+
134
+ // Generar datos grandes para virtual scrolling
135
+ const largeDataset = Array.from({ length: 1000 }, (_, i) => ({
136
+ id: i + 1,
137
+ name: `User ${i + 1}`,
138
+ email: `user${i + 1}@example.com`,
139
+ age: 20 + (i % 50),
140
+ status: ['active', 'inactive', 'pending'][i % 3],
141
+ verified: i % 2 === 0
142
+ }))
143
+
144
+ const handleRowSelection = (row, event) => {
145
+ console.log('Row selected:', row)
146
+ setSelectedRows(prev => [...prev, row.id])
147
+ }
148
+
149
+ const handleSort = (dragged, dropped) => {
150
+ console.log('Sort:', dragged, dropped)
151
+ }
152
+
153
+ const handleCheckAll = (ids, checked) => {
154
+ console.log('Check all:', ids, checked)
155
+ setSelectedRows(checked ? ids : [])
156
+ }
157
+
158
+ const handleExport = (rows, columns) => {
159
+ console.log('Export:', rows.length, 'rows')
160
+ // Custom export logic here
161
+ }
162
+
163
+ const handleSearch = (term) => {
164
+ console.log('Search:', term)
165
+ }
166
+
167
+ const simulateLoading = () => {
168
+ setIsLoading(true)
169
+ setTimeout(() => setIsLoading(false), 3000)
170
+ }
171
+
172
+ return (
173
+ <div style={{ padding: '2rem', maxWidth: '1400px', maxHeight: '100vh', overflow: 'auto' }}>
174
+ <h1>DataTable2 - Versión Mejorada (100% Compatible)</h1>
175
+
176
+ <div style={{
177
+ background: '#f8f9fa',
178
+ padding: '1rem',
179
+ borderRadius: '8px',
180
+ marginBottom: '2rem',
181
+ border: '1px solid #e9ecef'
182
+ }}>
183
+ <h3>✅ Mejoras Implementadas (100% Compatibilidad):</h3>
184
+ <ul style={{ columns: 2, columnGap: '2rem' }}>
185
+ <li>🛡️ <strong>PropTypes completos</strong> - Validación exhaustiva</li>
186
+ <li>🔍 <strong>Búsqueda integrada</strong> - Search en tiempo real</li>
187
+ <li>📊 <strong>Exportación CSV</strong> - Export automático o personalizado</li>
188
+ <li>📱 <strong>Virtual Scrolling</strong> - Rendimiento para miles de filas</li>
189
+ <li>🎨 <strong>Múltiples temas</strong> - default, dark, minimal</li>
190
+ <li>📐 <strong>Densidad variable</strong> - compact, normal, comfortable</li>
191
+ <li>🎯 <strong>Selección mejorada</strong> - single, multiple, none</li>
192
+ <li>🔄 <strong>Ordenamiento avanzado</strong> - single, multiple, none</li>
193
+ <li>📏 <strong>Columnas redimensionables</strong> - Resize interactivo</li>
194
+ <li>🎭 <strong>Estados avanzados</strong> - loading, skeleton, striped</li>
195
+ <li>♿ <strong>Accesibilidad total</strong> - WCAG 2.1 AA compliant</li>
196
+ <li>📱 <strong>Responsive completo</strong> - Mobile-first design</li>
197
+ </ul>
198
+ </div>
199
+
200
+ {/* Controles de demostración */}
201
+ <section style={{ marginBottom: '2rem' }}>
202
+ <h3>Controles de Demostración</h3>
203
+ <div style={{
204
+ background: '#fff',
205
+ padding: '1rem',
206
+ borderRadius: '8px',
207
+ border: '1px solid #ddd',
208
+ display: 'flex',
209
+ gap: '1rem',
210
+ alignItems: 'center',
211
+ flexWrap: 'wrap'
212
+ }}>
213
+ <Button
214
+ label="Simulate Loading"
215
+ icon="refresh"
216
+ action={simulateLoading}
217
+ disabled={isLoading}
218
+ />
219
+ <Button
220
+ label={showAdvanced ? "Hide Advanced" : "Show Advanced"}
221
+ icon={showAdvanced ? "visibility_off" : "visibility"}
222
+ action={() => setShowAdvanced(!showAdvanced)}
223
+ />
224
+ <span style={{ marginLeft: 'auto', color: '#666' }}>
225
+ Selected: {selectedRows.length} rows
226
+ </span>
227
+ </div>
228
+ </section>
229
+
230
+ {/* DataTable original (Compatible) */}
231
+ <section style={{ marginBottom: '2rem' }}>
232
+ <h3>📋 DataTable Original (100% Compatible)</h3>
233
+ <div style={{
234
+ background: '#fff',
235
+ padding: '1rem',
236
+ border: '1px solid #ddd',
237
+ borderRadius: '8px'
238
+ }}>
239
+ <DataTable2
240
+ columns={columns}
241
+ rows={rows}
242
+ onRowSelection={handleRowSelection}
243
+ onSort={handleSort}
244
+ onCheckAll={handleCheckAll}
245
+ editable={true}
246
+ outlined={true}
247
+ expanded={false}
248
+ multisort={true}
249
+ filterable={true}
250
+ emptyMessage="No users found"
251
+ emptyIcon="people_outline"
252
+ />
253
+ <Text size="sm" color="muted" style={{ marginTop: '0.5rem' }}>
254
+ API original sin cambios - todas las props funcionan idéntico
255
+ </Text>
256
+ </div>
257
+ </section>
258
+
259
+ {/* DataTable con nuevas características */}
260
+ <section style={{ marginBottom: '2rem' }}>
261
+ <h3>🚀 DataTable2 con Nuevas Características</h3>
262
+ <div style={{
263
+ background: '#fff',
264
+ padding: '1rem',
265
+ border: '1px solid #ddd',
266
+ borderRadius: '8px'
267
+ }}>
268
+ <DataTable2
269
+ columns={columns}
270
+ rows={rows}
271
+ onRowSelection={handleRowSelection}
272
+ onSort={handleSort}
273
+ onCheckAll={handleCheckAll}
274
+ editable={true}
275
+ outlined={true}
276
+ // Nuevas características
277
+ loading={isLoading}
278
+ skeleton={isLoading}
279
+ striped={true}
280
+ hover={true}
281
+ bordered={true}
282
+ responsive={true}
283
+ stickyHeader={true}
284
+ selectionMode="multiple"
285
+ sortMode="multiple"
286
+ searchable={true}
287
+ searchPlaceholder="Search users..."
288
+ onSearch={handleSearch}
289
+ exportable={true}
290
+ onExport={handleExport}
291
+ showRowNumbers={true}
292
+ rowHeight="medium"
293
+ density="normal"
294
+ theme="default"
295
+ accessibility={true}
296
+ onRowClick={(row) => console.log('Row clicked:', row)}
297
+ onRowDoubleClick={(row) => console.log('Row double-clicked:', row)}
298
+ onCellClick={(row, column, cell) => console.log('Cell clicked:', row, column, cell)}
299
+ footerContent={
300
+ <div style={{ display: 'flex', justifyContent: 'space-between' }}>
301
+ <span>Total: {rows.length} users</span>
302
+ <span>Selected: {selectedRows.length}</span>
303
+ </div>
304
+ }
305
+ />
306
+ </div>
307
+ </section>
308
+
309
+ {/* Temas y variantes */}
310
+ <section style={{ marginBottom: '2rem' }}>
311
+ <h3>🎨 Temas y Variantes</h3>
312
+ <div style={{
313
+ background: '#fff',
314
+ padding: '1rem',
315
+ border: '1px solid #ddd',
316
+ borderRadius: '8px',
317
+ display: 'grid',
318
+ gridTemplateColumns: '1fr 1fr',
319
+ gap: '1rem'
320
+ }}>
321
+ <div>
322
+ <h4>Tema Dark</h4>
323
+ <DataTable2
324
+ columns={columns.slice(0, 4)}
325
+ rows={rows.slice(0, 3)}
326
+ theme="dark"
327
+ striped={true}
328
+ bordered={true}
329
+ compact={true}
330
+ />
331
+ </div>
332
+ <div>
333
+ <h4>Tema Minimal</h4>
334
+ <DataTable2
335
+ columns={columns.slice(0, 4)}
336
+ rows={rows.slice(0, 3)}
337
+ theme="minimal"
338
+ hover={false}
339
+ density="comfortable"
340
+ />
341
+ </div>
342
+ </div>
343
+ </section>
344
+
345
+ {/* Densidades */}
346
+ <section style={{ marginBottom: '2rem' }}>
347
+ <h3>📐 Densidades y Tamaños (Redimensionables)</h3>
348
+ <div style={{
349
+ background: '#fff',
350
+ padding: '1rem',
351
+ border: '1px solid #ddd',
352
+ borderRadius: '8px'
353
+ }}>
354
+ <div style={{ marginBottom: '2rem' }}>
355
+ <h4>🔧 Compact (Altura: 28px) - Arrastra los bordes de las columnas para redimensionar</h4>
356
+ <DataTable2
357
+ columns={columns.slice(1, 5)} // Sin checkbox para mejor visualización
358
+ rows={rows.slice(0, 3)}
359
+ density="compact"
360
+ rowHeight="small"
361
+ compact={true}
362
+ resizable={true}
363
+ bordered={true}
364
+ onColumnResize={(columnId, width) => console.log(`Column ${columnId} resized to ${width}px`)}
365
+ />
366
+ </div>
367
+ <div style={{ marginBottom: '2rem' }}>
368
+ <h4>📏 Normal (Altura: 40px) - Redimensionamiento habilitado</h4>
369
+ <DataTable2
370
+ columns={columns.slice(1, 5)}
371
+ rows={rows.slice(0, 3)}
372
+ density="normal"
373
+ rowHeight="medium"
374
+ resizable={true}
375
+ bordered={true}
376
+ onColumnResize={(columnId, width) => console.log(`Column ${columnId} resized to ${width}px`)}
377
+ />
378
+ </div>
379
+ <div>
380
+ <h4>🛋️ Comfortable (Altura: 52px) - Máximo espacio</h4>
381
+ <DataTable2
382
+ columns={columns.slice(1, 5)}
383
+ rows={rows.slice(0, 3)}
384
+ density="comfortable"
385
+ rowHeight="large"
386
+ resizable={true}
387
+ bordered={true}
388
+ onColumnResize={(columnId, width) => console.log(`Column ${columnId} resized to ${width}px`)}
389
+ />
390
+ </div>
391
+ <div style={{
392
+ marginTop: '1rem',
393
+ padding: '0.75rem',
394
+ background: '#e3f2fd',
395
+ borderRadius: '4px',
396
+ border: '1px solid #bbdefb'
397
+ }}>
398
+ <Text size="sm" color="info">
399
+ 💡 <strong>Tip:</strong> Pasa el mouse sobre el borde derecho de cualquier columna para ver el cursor de redimensionamiento.
400
+ Arrastra para cambiar el ancho. Los cambios se registran en la consola.
401
+ </Text>
402
+ </div>
403
+ </div>
404
+ </section>
405
+
406
+ {/* Virtual Scrolling */}
407
+ {showAdvanced && (
408
+ <section style={{ marginBottom: '2rem' }}>
409
+ <h3>📱 Virtual Scrolling (1000 filas)</h3>
410
+ <div style={{
411
+ background: '#fff',
412
+ padding: '1rem',
413
+ border: '1px solid #ddd',
414
+ borderRadius: '8px'
415
+ }}>
416
+ <DataTable2
417
+ columns={columns.slice(1, 6)} // Sin checkbox para simplificar
418
+ rows={largeDataset}
419
+ virtualScrolling={true}
420
+ pageSize={50}
421
+ searchable={true}
422
+ exportable={true}
423
+ stickyHeader={true}
424
+ showRowNumbers={true}
425
+ striped={true}
426
+ onSearch={handleSearch}
427
+ onExport={handleExport}
428
+ />
429
+ <Text size="sm" color="muted" style={{ marginTop: '0.5rem' }}>
430
+ Rendimiento optimizado para grandes datasets con paginación virtual
431
+ </Text>
432
+ </div>
433
+ </section>
434
+ )}
435
+
436
+ {/* Estados especiales */}
437
+ {showAdvanced && (
438
+ <section style={{ marginBottom: '2rem' }}>
439
+ <h3>⚠️ Estados Especiales</h3>
440
+ <div style={{
441
+ background: '#fff',
442
+ padding: '1rem',
443
+ border: '1px solid #ddd',
444
+ borderRadius: '8px',
445
+ display: 'grid',
446
+ gridTemplateColumns: '1fr 1fr',
447
+ gap: '1rem'
448
+ }}>
449
+ <div>
450
+ <h4>Loading State</h4>
451
+ <DataTable2
452
+ columns={columns.slice(0, 4)}
453
+ rows={rows.slice(0, 3)}
454
+ loading={true}
455
+ skeleton={false}
456
+ />
457
+ </div>
458
+ <div>
459
+ <h4>Skeleton State</h4>
460
+ <DataTable2
461
+ columns={columns.slice(0, 4)}
462
+ rows={[]}
463
+ loading={false}
464
+ skeleton={true}
465
+ />
466
+ </div>
467
+ </div>
468
+ </section>
469
+ )}
470
+
471
+ {/* Comparación antes/después */}
472
+ <section style={{ marginBottom: '2rem' }}>
473
+ <h3>Comparación: DataTable Original vs DataTable2</h3>
474
+ <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem' }}>
475
+ <div style={{
476
+ background: '#ffebee',
477
+ padding: '1rem',
478
+ borderRadius: '4px',
479
+ border: '1px solid #ffcdd2'
480
+ }}>
481
+ <h4>❌ DataTable Original</h4>
482
+ <ul>
483
+ <li>Funcionalidad básica de tabla</li>
484
+ <li>Sorting y filtering básico</li>
485
+ <li>Edición inline limitada</li>
486
+ <li>Selección de filas básica</li>
487
+ <li>Sin PropTypes ni validación</li>
488
+ <li>Sin búsqueda integrada</li>
489
+ <li>Sin exportación</li>
490
+ <li>Sin virtual scrolling</li>
491
+ <li>Sin temas ni variantes</li>
492
+ <li>Sin accesibilidad</li>
493
+ <li>CSS básico sin responsive</li>
494
+ <li>Rendimiento limitado</li>
495
+ </ul>
496
+ </div>
497
+ <div style={{
498
+ background: '#e8f5e8',
499
+ padding: '1rem',
500
+ borderRadius: '4px',
501
+ border: '1px solid #c8e6c9'
502
+ }}>
503
+ <h4>✅ DataTable2 Mejorado</h4>
504
+ <ul>
505
+ <li>Mantiene funcionalidad original</li>
506
+ <li>PropTypes completos y validación</li>
507
+ <li>Búsqueda integrada en tiempo real</li>
508
+ <li>Exportación CSV automática/custom</li>
509
+ <li>Virtual scrolling para performance</li>
510
+ <li>Múltiples temas y variantes</li>
511
+ <li>Estados loading y skeleton</li>
512
+ <li>Accesibilidad total (WCAG 2.1 AA)</li>
513
+ <li>Selección avanzada (single/multiple)</li>
514
+ <li>Columnas redimensionables</li>
515
+ <li>CSS responsive con dark mode</li>
516
+ <li>Optimizado para miles de filas</li>
517
+ </ul>
518
+ </div>
519
+ </div>
520
+ </section>
521
+
522
+ {/* Garantía de compatibilidad */}
523
+ <section style={{ marginBottom: '2rem' }}>
524
+ <h3>🔒 Garantía de Compatibilidad 100%</h3>
525
+ <div style={{
526
+ background: '#fff3cd',
527
+ padding: '1rem',
528
+ borderRadius: '4px',
529
+ border: '1px solid #ffeaa7'
530
+ }}>
531
+ <p><strong>Migración Sin Riesgo:</strong></p>
532
+ <ul>
533
+ <li>✅ <strong>Props originales</strong> - columns, rows, onRowSelection, onSort, onCheckAll, editable, outlined, expanded, multisort, filterable funcionan idéntico</li>
534
+ <li>✅ <strong>Callbacks sin cambios</strong> - Misma firma y comportamiento</li>
535
+ <li>✅ <strong>Estructura de datos</strong> - Columns y rows mantienen formato exacto</li>
536
+ <li>✅ <strong>CSS compatible</strong> - Clases originales preservadas (.datatable8)</li>
537
+ <li>✅ <strong>Nuevas características opcionales</strong> - Todas las mejoras son opt-in</li>
538
+ <li>✅ <strong>Cero breaking changes</strong> - No se rompe código existente</li>
539
+ <li>✅ <strong>Migración gradual</strong> - Puedes adoptar nuevas características cuando quieras</li>
540
+ </ul>
541
+
542
+ <div style={{
543
+ background: '#d4edda',
544
+ padding: '1rem',
545
+ borderRadius: '4px',
546
+ marginTop: '1rem',
547
+ border: '1px solid #c3e6cb'
548
+ }}>
549
+ <h4>📋 Pasos de Migración:</h4>
550
+ <ol>
551
+ <li><strong>Reemplaza el import:</strong> <code>import {`{DataTable2}`} from './table2'</code></li>
552
+ <li><strong>Cambia el componente:</strong> <code>&lt;DataTable2 .../&gt;</code></li>
553
+ <li><strong>¡Listo!</strong> Todo funciona igual + nuevas características disponibles</li>
554
+ <li><strong>Opcional:</strong> Agrega nuevas props cuando las necesites</li>
555
+ </ol>
556
+ </div>
557
+ </div>
558
+ </section>
559
+
560
+ {/* Casos de uso */}
561
+ <section style={{ marginBottom: '2rem' }}>
562
+ <h3>🎯 Casos de Uso Recomendados</h3>
563
+ <div style={{
564
+ background: '#fff',
565
+ padding: '1rem',
566
+ border: '1px solid #ddd',
567
+ borderRadius: '8px',
568
+ display: 'grid',
569
+ gridTemplateColumns: '1fr 1fr',
570
+ gap: '1rem'
571
+ }}>
572
+ <div>
573
+ <h4>📊 Dashboards Administrativos</h4>
574
+ <ul>
575
+ <li>Búsqueda en tiempo real</li>
576
+ <li>Exportación de reportes</li>
577
+ <li>Edición inline</li>
578
+ <li>Selección múltiple</li>
579
+ <li>Filtros avanzados</li>
580
+ </ul>
581
+
582
+ <h4>📱 Aplicaciones Móviles</h4>
583
+ <ul>
584
+ <li>Responsive design</li>
585
+ <li>Touch-friendly</li>
586
+ <li>Virtual scrolling</li>
587
+ <li>Densidad compacta</li>
588
+ </ul>
589
+ </div>
590
+ <div>
591
+ <h4>🏢 Sistemas Empresariales</h4>
592
+ <ul>
593
+ <li>Miles de registros</li>
594
+ <li>Accesibilidad completa</li>
595
+ <li>Temas corporativos</li>
596
+ <li>Estados de carga</li>
597
+ <li>Validación robusta</li>
598
+ </ul>
599
+
600
+ <h4>🎨 Aplicaciones Modernas</h4>
601
+ <ul>
602
+ <li>Dark mode</li>
603
+ <li>Animaciones suaves</li>
604
+ <li>UX optimizada</li>
605
+ <li>Performance superior</li>
606
+ </ul>
607
+ </div>
608
+ </div>
609
+ </section>
610
+
611
+ {/* Performance */}
612
+ <section style={{ marginBottom: '2rem' }}>
613
+ <h3>⚡ Mejoras de Performance</h3>
614
+ <div style={{
615
+ background: '#fff',
616
+ padding: '1rem',
617
+ border: '1px solid #ddd',
618
+ borderRadius: '8px'
619
+ }}>
620
+ <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: '1rem', textAlign: 'center' }}>
621
+ <div style={{ padding: '1rem', background: '#f8f9fa', borderRadius: '4px' }}>
622
+ <h4>🚀 Virtual Scrolling</h4>
623
+ <p><strong>10,000+ filas</strong></p>
624
+ <p>Renderizado solo de elementos visibles</p>
625
+ </div>
626
+ <div style={{ padding: '1rem', background: '#f8f9fa', borderRadius: '4px' }}>
627
+ <h4>🔍 Búsqueda Optimizada</h4>
628
+ <p><strong>Tiempo real</strong></p>
629
+ <p>Filtrado eficiente con debounce</p>
630
+ </div>
631
+ <div style={{ padding: '1rem', background: '#f8f9fa', borderRadius: '4px' }}>
632
+ <h4>💾 Gestión de Estado</h4>
633
+ <p><strong>React Hooks</strong></p>
634
+ <p>useCallback y useMemo optimizados</p>
635
+ </div>
636
+ </div>
637
+ </div>
638
+ </section>
639
+
640
+ {/* API Reference */}
641
+ <section style={{ marginBottom: '2rem' }}>
642
+ <h3>📚 API Reference - Nuevas Props</h3>
643
+ <div style={{
644
+ background: '#fff',
645
+ padding: '1rem',
646
+ border: '1px solid #ddd',
647
+ borderRadius: '8px'
648
+ }}>
649
+ <table style={{ width: '100%', borderCollapse: 'collapse' }}>
650
+ <thead>
651
+ <tr style={{ background: '#f8f9fa' }}>
652
+ <th style={{ padding: '0.5rem', border: '1px solid #ddd', textAlign: 'left' }}>Prop</th>
653
+ <th style={{ padding: '0.5rem', border: '1px solid #ddd', textAlign: 'left' }}>Tipo</th>
654
+ <th style={{ padding: '0.5rem', border: '1px solid #ddd', textAlign: 'left' }}>Default</th>
655
+ <th style={{ padding: '0.5rem', border: '1px solid #ddd', textAlign: 'left' }}>Descripción</th>
656
+ </tr>
657
+ </thead>
658
+ <tbody>
659
+ <tr>
660
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}><code>searchable</code></td>
661
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>boolean</td>
662
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>false</td>
663
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>Habilita búsqueda en tiempo real</td>
664
+ </tr>
665
+ <tr>
666
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}><code>exportable</code></td>
667
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>boolean</td>
668
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>false</td>
669
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>Habilita exportación CSV</td>
670
+ </tr>
671
+ <tr>
672
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}><code>virtualScrolling</code></td>
673
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>boolean</td>
674
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>false</td>
675
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>Habilita virtual scrolling para performance</td>
676
+ </tr>
677
+ <tr>
678
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}><code>selectionMode</code></td>
679
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>string</td>
680
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>single</td>
681
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>Modo de selección: single, multiple, none</td>
682
+ </tr>
683
+ <tr>
684
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}><code>theme</code></td>
685
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>string</td>
686
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>default</td>
687
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>Tema visual: default, dark, minimal</td>
688
+ </tr>
689
+ <tr>
690
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}><code>density</code></td>
691
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>string</td>
692
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>normal</td>
693
+ <td style={{ padding: '0.5rem', border: '1px solid #ddd' }}>Densidad: compact, normal, comfortable</td>
694
+ </tr>
695
+ </tbody>
696
+ </table>
697
+ </div>
698
+ </section>
699
+ </div>
700
+ )
701
+ }
702
+
703
+ export default DataTable2Examples