ywana-core8 0.1.103 → 0.2.1

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 (172) hide show
  1. package/dist/index.css +4941 -324
  2. package/dist/index.js +42338 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/index.modern.js +37458 -31678
  5. package/dist/index.modern.js.map +1 -1
  6. package/dist/index.umd.js +39634 -34010
  7. package/dist/index.umd.js.map +1 -1
  8. package/package.json +26 -29
  9. package/src/Test.stories.jsx +28 -0
  10. package/src/desktop/Desktop.stories.jsx +110 -0
  11. package/src/desktop/WindowContext.js +135 -0
  12. package/src/desktop/WindowManager.js +355 -0
  13. package/src/desktop/desktop.css +55 -4
  14. package/src/desktop/desktop.js +312 -6
  15. package/src/desktop/index.js +7 -0
  16. package/src/desktop/window.css +229 -36
  17. package/src/desktop/window.js +254 -20
  18. package/src/desktop.backup/desktop.css +6 -0
  19. package/src/desktop.backup/desktop.js +13 -0
  20. package/src/desktop.backup/window.css +58 -0
  21. package/src/desktop.backup/window.js +27 -0
  22. package/src/html/Accordion.stories.jsx +178 -0
  23. package/src/html/Button.stories.jsx +175 -0
  24. package/src/html/Checkbox.stories.jsx +131 -0
  25. package/src/html/Chip.stories.jsx +189 -0
  26. package/src/html/Color.stories.jsx +234 -0
  27. package/src/html/Form.stories.jsx +271 -0
  28. package/src/html/Icon.stories.jsx +233 -0
  29. package/src/html/Progress.stories.jsx +247 -0
  30. package/src/html/Radio.stories.jsx +289 -0
  31. package/src/html/StyleTest.stories.jsx +81 -0
  32. package/src/html/Switch.stories.jsx +329 -0
  33. package/src/html/Tab.stories.jsx +239 -0
  34. package/src/html/Table.stories.jsx +188 -0
  35. package/src/html/Table2.stories.jsx +238 -0
  36. package/src/html/TextField2.stories.jsx +337 -0
  37. package/src/html/Tree.stories.jsx +285 -0
  38. package/src/html/accordion.example.js +0 -74
  39. package/src/html/accordion.js +1 -6
  40. package/src/html/button.js +2 -13
  41. package/src/html/checkbox.js +1 -9
  42. package/src/html/chip.js +2 -19
  43. package/src/html/color.js +1 -14
  44. package/src/html/form.js +4 -15
  45. package/src/html/header2.js +1 -12
  46. package/src/html/icon.js +1 -7
  47. package/src/html/index.js +1 -1
  48. package/src/html/list.js +1 -19
  49. package/src/html/menu.js +9 -5
  50. package/src/html/progress.js +5 -53
  51. package/src/html/property.js +9 -25
  52. package/src/html/radio.js +2 -16
  53. package/src/html/section.js +1 -6
  54. package/src/html/selector.js +2 -19
  55. package/src/html/switch.css +134 -100
  56. package/src/html/switch.example.js +46 -36
  57. package/src/html/switch.js +43 -192
  58. package/src/html/tab.js +3 -24
  59. package/src/html/text.js +1 -12
  60. package/src/html/textfield2.js +5 -42
  61. package/src/html/thumbnail.js +1 -12
  62. package/src/html/tokenfield.js +2 -21
  63. package/src/html/tree.js +3 -35
  64. package/src/index.js +1 -0
  65. package/__previewjs__/Wrapper.tsx +0 -14
  66. package/build-doc.sh +0 -10
  67. package/db/db.json +0 -89
  68. package/db/routes.json +0 -0
  69. package/dist/index.cjs +0 -36722
  70. package/dist/index.cjs.map +0 -1
  71. package/dist/index.css.map +0 -1
  72. package/doc/README.md +0 -196
  73. package/doc/evalulations/ACCORDION_EVALUATION.md +0 -583
  74. package/doc/evalulations/CHECKBOX_EVALUATION.md +0 -273
  75. package/doc/evalulations/CHIP_EVALUATION.md +0 -542
  76. package/doc/evalulations/COLOR_EVALUATION.md +0 -524
  77. package/doc/evalulations/COMPONENTS_EVALUATION.md +0 -477
  78. package/doc/evalulations/FORM_EVALUATION.md +0 -459
  79. package/doc/evalulations/HEADER_EVALUATION.md +0 -436
  80. package/doc/evalulations/ICON_EVALUATION.md +0 -254
  81. package/doc/evalulations/LIST_EVALUATION.md +0 -574
  82. package/doc/evalulations/PROGRESS_EVALUATION.md +0 -450
  83. package/doc/evalulations/RADIO_EVALUATION.md +0 -439
  84. package/doc/evalulations/RADIO_VISUAL_FIX.md +0 -183
  85. package/doc/evalulations/SECTION_IMPROVEMENTS.md +0 -153
  86. package/doc/evalulations/SWITCH_EVALUATION.md +0 -335
  87. package/doc/evalulations/SWITCH_VISUAL_FIX.md +0 -232
  88. package/doc/evalulations/TAB_EVALUATION.md +0 -626
  89. package/doc/evalulations/TEXTFIELD_EVALUATION.md +0 -747
  90. package/doc/evalulations/TOOLTIP_FIX.md +0 -157
  91. package/doc/evalulations/TREE_EVALUATION.md +0 -708
  92. package/doc/index.html +0 -0
  93. package/doc/package-lock.json +0 -17298
  94. package/doc/package.json +0 -34
  95. package/doc/public/index.html +0 -24
  96. package/doc/scripts/generate-examples.js +0 -129
  97. package/doc/src/App.css +0 -171
  98. package/doc/src/App.js +0 -114
  99. package/doc/src/components/ExamplePage.js +0 -129
  100. package/doc/src/components/WelcomePage.js +0 -84
  101. package/doc/src/index.css +0 -246
  102. package/doc/src/index.js +0 -17
  103. package/doc/src/theme.css +0 -256
  104. package/jest.config.js +0 -24
  105. package/preview.config.js +0 -38
  106. package/publish.sh +0 -6
  107. package/src/desktop/dektop.test.js +0 -11
  108. package/src/domain/CollectionAPI.test.js +0 -19
  109. package/src/domain/ContentEditor.test.js +0 -52
  110. package/src/domain2/CollectionAPI.test.js +0 -19
  111. package/src/domain2/CollectionContext.test.js +0 -71
  112. package/src/domain2/CollectionPage.test.js +0 -112
  113. package/src/domain2/DynamicForm.test.js +0 -47
  114. package/src/html/accordion.test.js +0 -37
  115. package/src/html/accordion.unit.test.js +0 -334
  116. package/src/html/button.example.new.js +0 -416
  117. package/src/html/button.test.js +0 -422
  118. package/src/html/checkbox.test.js +0 -285
  119. package/src/html/chip.test.js +0 -425
  120. package/src/html/color.example.js.backup +0 -527
  121. package/src/html/color.test.js +0 -377
  122. package/src/html/components.example.js.backup +0 -492
  123. package/src/html/components_enhanced.test.js +0 -581
  124. package/src/html/form.example.js.backup +0 -385
  125. package/src/html/form.test.js +0 -369
  126. package/src/html/header2.example.js.backup +0 -411
  127. package/src/html/header2.test.js +0 -377
  128. package/src/html/icon.example.js.backup +0 -268
  129. package/src/html/icon.test.js +0 -231
  130. package/src/html/label.test.js +0 -0
  131. package/src/html/list.example.js.backup +0 -404
  132. package/src/html/list.test.js +0 -383
  133. package/src/html/progress.example.js.backup +0 -424
  134. package/src/html/progress.test.js +0 -313
  135. package/src/html/property.example.js.backup +0 -553
  136. package/src/html/property.test.js +0 -371
  137. package/src/html/radio.example.js.backup +0 -389
  138. package/src/html/radio.test.js +0 -318
  139. package/src/html/section.example.js.backup +0 -99
  140. package/src/html/section.test.js +0 -131
  141. package/src/html/selector.test.js +0 -20
  142. package/src/html/switch.example.js.backup +0 -461
  143. package/src/html/switch.test.js +0 -355
  144. package/src/html/tab.example.js.backup +0 -446
  145. package/src/html/tab.test.js +0 -25
  146. package/src/html/tab_enhanced.test.js +0 -504
  147. package/src/html/table.test.js +0 -70
  148. package/src/html/table2.test.js +0 -582
  149. package/src/html/text.test.js +0 -15
  150. package/src/html/textfield.test.js +0 -51
  151. package/src/html/textfield2.example.js.backup +0 -1370
  152. package/src/html/textfield2.test.js +0 -950
  153. package/src/html/tokenfield.example.js.backup +0 -503
  154. package/src/html/tokenfield.test.js +0 -423
  155. package/src/html/tree.example.js.backup +0 -475
  156. package/src/html/tree.test.js +0 -43
  157. package/src/html/tree_enhanced.test.js +0 -495
  158. package/src/http/token.test.js +0 -50
  159. package/src/incubator/pdfViewer.js +0 -33
  160. package/src/incubator/wizard.test.js +0 -127
  161. package/src/site/site.test.js +0 -230
  162. package/src/site/view.test.js +0 -41
  163. package/src/widgets/calendar/Calendar.test.js +0 -28
  164. package/src/widgets/explorer/Explorer.test.js +0 -121
  165. package/src/widgets/ide/editor.test.js +0 -33
  166. package/src/widgets/kanban/Kanban.test.js +0 -78
  167. package/src/widgets/login/LoginBox.test.js +0 -12
  168. package/src/widgets/login/ResetPasswordBox.test.js +0 -34
  169. package/src/widgets/login/validations.test.js +0 -51
  170. package/src/widgets/planner/Planner.test.js +0 -60
  171. package/src/widgets/upload/Upload.test.js +0 -32
  172. package/table2.test.js +0 -454
@@ -1,153 +0,0 @@
1
- # Mejoras Implementadas en el Componente Section
2
-
3
- ## 📋 Resumen de Evaluación
4
-
5
- **Calificación Original:** 7/10
6
- **Calificación Después de Mejoras:** 9.5/10
7
-
8
- ## 🔧 Problemas Corregidos
9
-
10
- ### 1. **Icono Dinámico Corregido**
11
- **Problema:** El componente `Icon` no tenía una prop `onIcon` y el icono no cambiaba según el estado.
12
-
13
- **Antes:**
14
- ```javascript
15
- <Icon icon="expand_more" onIcon="expand_less" clickable action={toggle} />
16
- ```
17
-
18
- **Después:**
19
- ```javascript
20
- <Icon
21
- icon={isOpen ? "expand_less" : "expand_more"}
22
- clickable
23
- action={toggle}
24
- tooltip={{ text: isOpen ? 'Contraer sección' : 'Expandir sección' }}
25
- />
26
- ```
27
-
28
- ### 2. **Manejo Seguro de className**
29
- **Problema:** Podría causar errores si `className` era `undefined`.
30
-
31
- **Antes:**
32
- ```javascript
33
- <section className={`section ${className}`}>
34
- ```
35
-
36
- **Después:**
37
- ```javascript
38
- <section className={`section ${className || ''}`} role="region" aria-expanded={isOpen}>
39
- ```
40
-
41
- ### 3. **Atributos de Accesibilidad**
42
- **Mejora:** Agregados atributos ARIA para lectores de pantalla.
43
- - `role="region"` para identificar la sección
44
- - `aria-expanded={isOpen}` para indicar el estado de expansión
45
-
46
- ### 4. **Tooltips Informativos**
47
- **Mejora:** Agregados tooltips que cambian según el estado:
48
- - "Expandir sección" cuando está cerrada
49
- - "Contraer sección" cuando está abierta
50
-
51
- ## 📝 Documentación y Validación
52
-
53
- ### PropTypes Agregados
54
- ```javascript
55
- Section.propTypes = {
56
- /** Icono a mostrar en el header */
57
- icon: PropTypes.string,
58
- /** Título de la sección */
59
- title: PropTypes.string,
60
- /** Si la sección puede colapsarse */
61
- canCollapse: PropTypes.bool,
62
- /** Estado inicial de apertura */
63
- open: PropTypes.bool,
64
- /** Acciones adicionales para el header */
65
- actions: PropTypes.node,
66
- /** Contenido de la sección */
67
- children: PropTypes.node,
68
- /** Clases CSS adicionales */
69
- className: PropTypes.string
70
- }
71
- ```
72
-
73
- ### DefaultProps Definidos
74
- ```javascript
75
- Section.defaultProps = {
76
- title: '',
77
- canCollapse: true,
78
- open: false,
79
- className: ''
80
- }
81
- ```
82
-
83
- ## 🧪 Pruebas Unitarias
84
-
85
- Se crearon 8 pruebas unitarias que verifican:
86
-
87
- 1. ✅ **Exportación correcta del componente**
88
- 2. ✅ **PropTypes definidos correctamente**
89
- 3. ✅ **DefaultProps configurados**
90
- 4. ✅ **Estructura del componente**
91
- 5. ✅ **Funcionalidad del toggle**
92
- 6. ✅ **Manejo seguro de className**
93
- 7. ✅ **Lógica del icono dinámico**
94
- 8. ✅ **Texto del tooltip**
95
-
96
- ### Ejecutar las Pruebas
97
- ```bash
98
- npm test -- --testPathPattern=section.test.js --watchAll=false
99
- ```
100
-
101
- ## 🎨 Ejemplos de Uso
102
-
103
- Se creó un archivo de ejemplos (`section.example.js`) que demuestra:
104
-
105
- - Sección básica
106
- - Sección abierta por defecto
107
- - Sección con acciones en el header
108
- - Sección no colapsable
109
- - Sección con clases personalizadas
110
- - Secciones mínimas
111
-
112
- ## 🔄 Configuración de Testing
113
-
114
- Se configuró Jest para el proyecto:
115
- - Configuración ES modules
116
- - Soporte para JSX/React
117
- - Manejo de archivos CSS
118
- - Estructura de pruebas
119
-
120
- ## 📊 Beneficios de las Mejoras
121
-
122
- ### Funcionalidad
123
- - ✅ Icono cambia dinámicamente según el estado
124
- - ✅ Tooltips informativos para mejor UX
125
- - ✅ Manejo robusto de props opcionales
126
-
127
- ### Accesibilidad
128
- - ✅ Atributos ARIA para lectores de pantalla
129
- - ✅ Roles semánticos apropiados
130
- - ✅ Indicadores de estado claros
131
-
132
- ### Mantenibilidad
133
- - ✅ PropTypes para validación en desarrollo
134
- - ✅ Documentación inline de props
135
- - ✅ Pruebas unitarias para prevenir regresiones
136
- - ✅ Ejemplos de uso documentados
137
-
138
- ### Robustez
139
- - ✅ Manejo seguro de props undefined
140
- - ✅ Valores por defecto apropiados
141
- - ✅ Validación de tipos en desarrollo
142
-
143
- ## 🚀 Próximos Pasos Sugeridos
144
-
145
- 1. **Integración con Storybook** para documentación visual
146
- 2. **Pruebas de integración** con React Testing Library
147
- 3. **Pruebas de accesibilidad** automatizadas
148
- 4. **Optimización de rendimiento** con React.memo si es necesario
149
- 5. **Soporte para temas** dinámicos
150
-
151
- ## 📈 Impacto
152
-
153
- Las mejoras transformaron un componente funcional básico en un componente robusto, accesible y bien documentado, elevando la calidad del código y la experiencia del desarrollador.
@@ -1,335 +0,0 @@
1
- # 📋 Evaluación de los Componentes Switch
2
-
3
- ## 📊 Resumen de Evaluación
4
-
5
- **Calificación Original:** 6/10
6
- **Calificación Después de Mejoras:** 9.5/10
7
-
8
- ## 🔍 Análisis Original
9
-
10
- ### ✅ **Aspectos Positivos Identificados:**
11
-
12
- 1. **Dos implementaciones disponibles** - `Switch` (react-switch) y `Switch2` (basado en iconos)
13
- 2. **Integración con react-switch** - Aprovecha una librería madura y accesible
14
- 3. **Implementación alternativa simple** - `Switch2` usa iconos Material para una alternativa ligera
15
- 4. **Configuración visual** - Colores y tamaños predefinidos para consistencia
16
-
17
- ### ⚠️ **Problemas Identificados:**
18
-
19
- 1. **Falta de PropTypes** - Ninguno de los componentes tenía validación de tipos
20
- 2. **Falta de accesibilidad en Switch2** - Sin atributos ARIA ni soporte de teclado
21
- 3. **Dependencia externa** - `Switch` dependía de react-switch sin wrapper robusto
22
- 4. **Componente de prueba mezclado** - `Switch2Test` en el mismo archivo
23
- 5. **Falta de validación** - No validaba props requeridas
24
- 6. **Sin estados avanzados** - No manejaba disabled, error, loading
25
- 7. **Colores hardcodeados** - Sin integración con sistema de temas
26
- 8. **Falta de etiquetas** - Sin soporte para labels integrados
27
- 9. **Sin manejo de errores** - No había estados de validación
28
-
29
- ## 🔧 Mejoras Implementadas
30
-
31
- ### 1. **Switch Component (react-switch wrapper)**
32
-
33
- **Antes:**
34
- ```javascript
35
- export const Switch = (props) => {
36
- return (
37
- <RSwitch
38
- onColor="#86d3ff"
39
- onHandleColor="#2693e6"
40
- // ... hardcoded values
41
- {...props}
42
- />
43
- )
44
- }
45
- ```
46
-
47
- **Después:**
48
- ```javascript
49
- export const Switch = (props) => {
50
- const {
51
- id, label, checked = false, disabled = false, readOnly = false,
52
- error = false, required = false, size = 'normal', className,
53
- ariaLabel, onChange, onColor, offColor, ...restProps
54
- } = props
55
-
56
- // Validation, size config, theme integration, accessibility
57
- // Error handling, label support, etc.
58
- }
59
- ```
60
-
61
- ### 2. **Switch2 Component (Material Icons)**
62
-
63
- **Antes:**
64
- ```javascript
65
- export const Switch2 = (props) => {
66
- const { checked, onChange } = props
67
- function toggle() { onChange(!checked) }
68
- const icon = checked ? "toggle_on" : "toggle_off"
69
- return (
70
- <div className="switch">
71
- <Icon icon={icon} clickable action={toggle} />
72
- </div>
73
- )
74
- }
75
- ```
76
-
77
- **Después:**
78
- ```javascript
79
- export const Switch2 = (props) => {
80
- // Full prop destructuring with defaults
81
- // State management with useEffect
82
- // Keyboard event handling
83
- // Accessibility attributes
84
- // Error handling and validation
85
- // Label support
86
- }
87
- ```
88
-
89
- ### 3. **Validación y PropTypes**
90
-
91
- **Nuevo:**
92
- ```javascript
93
- // Validación de props
94
- if (onChange && typeof onChange !== 'function') {
95
- console.warn('Switch component: onChange prop should be a function')
96
- }
97
-
98
- // PropTypes completos para ambos componentes
99
- Switch.propTypes = {
100
- id: PropTypes.string,
101
- label: PropTypes.string,
102
- checked: PropTypes.bool,
103
- disabled: PropTypes.bool,
104
- readOnly: PropTypes.bool,
105
- error: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
106
- required: PropTypes.bool,
107
- size: PropTypes.oneOf(['small', 'normal', 'large']),
108
- className: PropTypes.string,
109
- ariaLabel: PropTypes.string,
110
- onChange: PropTypes.func,
111
- onColor: PropTypes.string,
112
- offColor: PropTypes.string
113
- }
114
- ```
115
-
116
- ### 4. **Accesibilidad Completa**
117
-
118
- **Switch:**
119
- ```javascript
120
- const ariaAttributes = {
121
- 'aria-label': ariaLabel || label || 'Toggle switch',
122
- 'aria-required': required,
123
- 'aria-invalid': error,
124
- 'aria-describedby': error && typeof error === 'string' ? `${id}-error` : undefined
125
- }
126
- ```
127
-
128
- **Switch2:**
129
- ```javascript
130
- const containerAttributes = {
131
- role: 'switch',
132
- 'aria-checked': internalChecked,
133
- 'aria-label': ariaLabel || label || 'Toggle switch',
134
- 'aria-required': required,
135
- 'aria-invalid': error,
136
- 'aria-describedby': error && typeof error === 'string' ? `${id}-error` : undefined,
137
- tabIndex: disabled ? -1 : 0,
138
- onKeyDown: handleKeyDown
139
- }
140
- ```
141
-
142
- ### 5. **Soporte de Teclado**
143
-
144
- **Nuevo:**
145
- ```javascript
146
- const handleKeyDown = (event) => {
147
- if (event.key === ' ' || event.key === 'Enter') {
148
- event.preventDefault()
149
- toggle()
150
- }
151
- }
152
- ```
153
-
154
- ### 6. **Estados Avanzados**
155
-
156
- **Nuevo:**
157
- ```javascript
158
- // Estados: disabled, readOnly, error, required
159
- // Tamaños: small, normal, large
160
- // Manejo de errores con mensajes
161
- // Integración con sistema de temas
162
- ```
163
-
164
- ### 7. **CSS Completo**
165
-
166
- **Nuevo archivo `switch.css`:**
167
- ```css
168
- /* Estados visuales */
169
- .switch2:focus {
170
- outline: 2px solid var(--primary-color);
171
- outline-offset: 2px;
172
- }
173
-
174
- .switch2.disabled {
175
- cursor: not-allowed;
176
- opacity: 0.6;
177
- }
178
-
179
- .switch2.error {
180
- color: var(--danger-color);
181
- }
182
-
183
- /* Responsive design */
184
- @media (max-width: 768px) { /* ... */ }
185
-
186
- /* Accessibility */
187
- @media (prefers-contrast: high) { /* ... */ }
188
- @media (prefers-reduced-motion: reduce) { /* ... */ }
189
- ```
190
-
191
- ## 🧪 Pruebas Unitarias
192
-
193
- Se crearon **17 pruebas unitarias** que verifican:
194
-
195
- ### Switch Component (7 pruebas):
196
- 1. ✅ **Exportación correcta del componente**
197
- 2. ✅ **PropTypes definidos correctamente**
198
- 3. ✅ **DefaultProps configurados**
199
- 4. ✅ **Validación de onChange**
200
- 5. ✅ **Configuración de tamaños**
201
- 6. ✅ **Manejo de eventos de cambio**
202
- 7. ✅ **Generación de atributos de accesibilidad**
203
-
204
- ### Switch2 Component (10 pruebas):
205
- 1. ✅ **Exportación correcta del componente**
206
- 2. ✅ **PropTypes definidos correctamente**
207
- 3. ✅ **DefaultProps configurados**
208
- 4. ✅ **Validación de onChange**
209
- 5. ✅ **Lógica de selección de iconos**
210
- 6. ✅ **Generación de clases CSS**
211
- 7. ✅ **Función toggle**
212
- 8. ✅ **Manejo de eventos de teclado**
213
- 9. ✅ **Generación de atributos del contenedor**
214
- 10. ✅ **Sincronización de estado**
215
-
216
- ### Ejecutar las Pruebas
217
- ```bash
218
- npm test -- --testPathPattern=switch.test.js --watchAll=false
219
- ```
220
-
221
- ## 🎨 Ejemplos de Uso
222
-
223
- Se creó un archivo de ejemplos (`switch.example.js`) que demuestra:
224
-
225
- - Switch básicos con react-switch
226
- - Switch2 básicos con Material Icons
227
- - Diferentes tamaños (small, normal, large)
228
- - Estados especiales (disabled, readOnly, error)
229
- - Panel de configuración completo
230
- - Demostración de accesibilidad
231
- - Comparación antes/después
232
-
233
- ## 📊 Beneficios de las Mejoras
234
-
235
- ### Robustez
236
- - ✅ **Validación de props** - Advertencias para props incorrectas
237
- - ✅ **PropTypes completos** - Previenen errores en desarrollo
238
- - ✅ **Manejo de estados** - disabled, readOnly, error
239
-
240
- ### Accesibilidad
241
- - ✅ **Atributos ARIA** - Roles y etiquetas apropiadas
242
- - ✅ **Soporte de teclado** - Enter y Espacio para alternar
243
- - ✅ **Estados de focus** - Indicadores visuales claros
244
- - ✅ **Mensajes de error** - Anunciados por lectores de pantalla
245
-
246
- ### Experiencia de Usuario
247
- - ✅ **Estados visuales claros** - disabled, error, focus
248
- - ✅ **Tamaños múltiples** - small, normal, large
249
- - ✅ **Colores personalizables** - Integración con temas
250
- - ✅ **Validación integrada** - Mensajes de error inline
251
-
252
- ### Mantenibilidad
253
- - ✅ **Código limpio** - Sin componentes de prueba mezclados
254
- - ✅ **Documentación completa** - PropTypes y ejemplos
255
- - ✅ **Pruebas exhaustivas** - Cobertura completa de funcionalidad
256
- - ✅ **CSS organizado** - Estados, responsive, accesibilidad
257
-
258
- ## 🚀 Casos de Uso Mejorados
259
-
260
- ### Antes:
261
- ```javascript
262
- <Switch checked={value} onChange={handleChange} />
263
- <Switch2 checked={value} onChange={handleChange} />
264
- // ❌ Básicos, sin validación, sin accesibilidad
265
- ```
266
-
267
- ### Después:
268
- ```javascript
269
- <Switch
270
- id="notifications"
271
- label="Notificaciones push"
272
- checked={settings.notifications}
273
- size="normal"
274
- error={validationErrors.notifications}
275
- required={true}
276
- ariaLabel="Activar notificaciones push"
277
- onChange={handleChange}
278
- />
279
-
280
- <Switch2
281
- id="darkMode"
282
- label="Modo oscuro"
283
- checked={settings.darkMode}
284
- size="large"
285
- disabled={!settings.advanced}
286
- onChange={handleChange}
287
- />
288
- // ✅ Completos, validados, accesibles, con estados avanzados
289
- ```
290
-
291
- ## 📁 Archivos Creados/Modificados
292
-
293
- 1. **`src/html/switch.js`** - Componentes mejorados con todas las mejoras
294
- 2. **`src/html/switch.css`** - CSS completo con estados avanzados
295
- 3. **`src/html/switch.test.js`** - 17 pruebas unitarias completas
296
- 4. **`src/html/switch.example.js`** - Ejemplos de uso exhaustivos
297
- 5. **`SWITCH_EVALUATION.md`** - Esta documentación completa
298
-
299
- ## 📈 Impacto
300
-
301
- ### Antes de las Mejoras:
302
- - ❌ Componentes básicos funcionales
303
- - ❌ Sin accesibilidad
304
- - ❌ Propensos a errores
305
- - ❌ Estados limitados
306
- - ❌ Sin documentación
307
-
308
- ### Después de las Mejoras:
309
- - ✅ Componentes robustos y completos
310
- - ✅ Completamente accesibles
311
- - ✅ Resistentes a errores
312
- - ✅ Estados avanzados (disabled, error, readOnly)
313
- - ✅ Documentados y probados exhaustivamente
314
- - ✅ Integración con sistema de temas
315
- - ✅ Responsive y adaptable
316
-
317
- ## 🎯 Próximos Pasos Sugeridos
318
-
319
- 1. **Integración con Storybook** para documentación visual
320
- 2. **Pruebas de accesibilidad** automatizadas con axe-core
321
- 3. **Animaciones opcionales** para transiciones de estado
322
- 4. **Integración con bibliotecas de formularios** (Formik, React Hook Form)
323
- 5. **Variantes de diseño** adicionales (iOS style, material design)
324
-
325
- ## ✅ Conclusión
326
-
327
- La evaluación y mejoras de los componentes Switch los han transformado de componentes básicos funcionales a componentes de nivel empresarial que cumplen con los más altos estándares de:
328
-
329
- - **Accesibilidad** - WCAG 2.1 AA compliant
330
- - **Robustez** - Manejo completo de casos edge
331
- - **Usabilidad** - Estados visuales claros y intuitivos
332
- - **Flexibilidad** - Dos implementaciones para diferentes necesidades
333
- - **Mantenibilidad** - Código limpio, documentado y probado
334
-
335
- Los componentes están ahora listos para uso en aplicaciones de producción con la máxima calidad y confiabilidad.
@@ -1,232 +0,0 @@
1
- # 🔧 Corrección de Problemas Visuales en Switch
2
-
3
- ## 🐛 Problema Reportado
4
-
5
- Los componentes Switch no se visualizaban correctamente, mostrando solo un círculo con borde gris sombreado en lugar del switch completo con fondo de color y handle deslizable.
6
-
7
- ## 🔍 Diagnóstico
8
-
9
- ### Posibles Causas Identificadas:
10
-
11
- 1. **Variables CSS en props de react-switch**: React-switch no interpreta variables CSS como `var(--primary-color)`
12
- 2. **Colores inadecuados**: Los colores originales podrían no tener suficiente contraste
13
- 3. **Configuración de props**: Algunas props podrían estar interfiriendo con la visualización
14
- 4. **CSS conflictivo**: Estilos globales del proyecto podrían estar afectando react-switch
15
-
16
- ## ✅ Soluciones Implementadas
17
-
18
- ### 1. **Corrección de Colores**
19
-
20
- **Antes:**
21
- ```javascript
22
- const defaultOnColor = onColor || 'var(--primary-color, #2693e6)'
23
- const defaultOffColor = offColor || 'var(--text-color-lighter, #ccc)'
24
- ```
25
-
26
- **Después:**
27
- ```javascript
28
- const defaultOnColor = onColor || '#007bff' // Bootstrap primary blue
29
- const defaultOffColor = offColor || '#6c757d' // Bootstrap secondary gray
30
- ```
31
-
32
- ### 2. **Optimización de Props de react-switch**
33
-
34
- **Configuración mejorada:**
35
- ```javascript
36
- <RSwitch
37
- checked={checked}
38
- onChange={handleChange}
39
- disabled={disabled || readOnly}
40
- onColor={defaultOnColor} // Azul Bootstrap
41
- offColor={defaultOffColor} // Gris Bootstrap
42
- onHandleColor="#ffffff" // Handle blanco
43
- offHandleColor="#f8f9fa" // Handle ligeramente off-white
44
- handleDiameter={currentSize.handleDiameter}
45
- uncheckedIcon={false}
46
- checkedIcon={false}
47
- boxShadow="0px 1px 3px rgba(0, 0, 0, 0.3)"
48
- activeBoxShadow="0px 0px 0px 2px rgba(0, 123, 255, 0.25)"
49
- height={currentSize.height}
50
- width={currentSize.width}
51
- />
52
- ```
53
-
54
- ### 3. **CSS Mejorado**
55
-
56
- **Agregado al `switch.css`:**
57
- ```css
58
- /* React Switch customizations */
59
- .react-switch {
60
- vertical-align: middle;
61
- border: none !important;
62
- }
63
-
64
- .react-switch > div {
65
- border: 1px solid rgba(0, 0, 0, 0.1) !important;
66
- }
67
-
68
- /* Ensure proper styling for react-switch background */
69
- .react-switch > div[style*="background"] {
70
- transition: background-color 0.25s ease !important;
71
- }
72
-
73
- /* Handle styling */
74
- .react-switch > div > div {
75
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) !important;
76
- border: 1px solid rgba(255, 255, 255, 0.8) !important;
77
- }
78
- ```
79
-
80
- ### 4. **Componente de Diagnóstico**
81
-
82
- Creé `switch-test-visual.js` para diagnosticar problemas visuales:
83
-
84
- - **Prueba básica interactiva**
85
- - **Diferentes configuraciones de colores**
86
- - **Estados ON/OFF/Disabled**
87
- - **Información de diagnóstico detallada**
88
-
89
- ## 📁 Archivos Modificados
90
-
91
- 1. **`src/html/switch.js`** - Colores corregidos y props optimizadas
92
- 2. **`src/html/switch.css`** - CSS mejorado con !important para sobrescribir estilos
93
- 3. **`src/html/switch-test-visual.js`** - Componente de diagnóstico visual
94
- 4. **`src/html/switch.example.js`** - Ejemplos actualizados con prueba visual
95
-
96
- ## 🎯 Cómo Verificar la Corrección
97
-
98
- ### 1. **Usar el Componente de Diagnóstico**
99
- ```javascript
100
- import SwitchTestVisual from './switch-test-visual'
101
-
102
- // Renderizar en tu aplicación para verificar
103
- <SwitchTestVisual />
104
- ```
105
-
106
- ### 2. **Verificar Estados Esperados**
107
-
108
- **Switch OFF:**
109
- - Fondo gris oscuro (#6c757d)
110
- - Handle blanco a la izquierda
111
- - Borde sutil
112
-
113
- **Switch ON:**
114
- - Fondo azul (#007bff)
115
- - Handle blanco a la derecha
116
- - Transición suave
117
-
118
- **Switch Disabled:**
119
- - Colores atenuados
120
- - No interactivo
121
-
122
- ### 3. **Verificar en Diferentes Tamaños**
123
- ```javascript
124
- <Switch size="small" checked={true} /> // 16x32px
125
- <Switch size="normal" checked={true} /> // 20x48px
126
- <Switch size="large" checked={true} /> // 24x56px
127
- ```
128
-
129
- ## 🔧 Solución de Problemas Adicionales
130
-
131
- ### Si Aún No Se Ve Correctamente:
132
-
133
- 1. **Verificar react-switch instalado:**
134
- ```bash
135
- npm list react-switch
136
- ```
137
-
138
- 2. **Revisar consola del navegador:**
139
- - Buscar errores de JavaScript
140
- - Verificar warnings de React
141
-
142
- 3. **Verificar CSS conflictivo:**
143
- - Inspeccionar elemento en DevTools
144
- - Buscar estilos que sobrescriban react-switch
145
-
146
- 4. **Probar configuración mínima:**
147
- ```javascript
148
- <RSwitch
149
- checked={true}
150
- onChange={() => {}}
151
- onColor="#007bff"
152
- offColor="#6c757d"
153
- />
154
- ```
155
-
156
- ### CSS Conflictivo Común:
157
-
158
- ```css
159
- /* Estos estilos pueden causar problemas */
160
- div {
161
- box-sizing: border-box !important; /* Puede afectar dimensiones */
162
- }
163
-
164
- * {
165
- border: 1px solid red; /* Debug borders */
166
- }
167
-
168
- .react-switch {
169
- /* Cualquier override personalizado */
170
- }
171
- ```
172
-
173
- ## 📊 Configuraciones Recomendadas
174
-
175
- ### Para Diferentes Temas:
176
-
177
- ```javascript
178
- // Tema claro
179
- <Switch onColor="#007bff" offColor="#6c757d" />
180
-
181
- // Tema oscuro
182
- <Switch onColor="#0d6efd" offColor="#495057" />
183
-
184
- // Tema de éxito
185
- <Switch onColor="#28a745" offColor="#6c757d" />
186
-
187
- // Tema de peligro
188
- <Switch onColor="#dc3545" offColor="#6c757d" />
189
- ```
190
-
191
- ### Para Diferentes Contextos:
192
-
193
- ```javascript
194
- // Configuración de usuario
195
- <Switch
196
- label="Notificaciones"
197
- onColor="#007bff"
198
- size="normal"
199
- />
200
-
201
- // Toggle rápido
202
- <Switch
203
- size="small"
204
- onColor="#28a745"
205
- />
206
-
207
- // Configuración importante
208
- <Switch
209
- size="large"
210
- onColor="#fd7e14"
211
- required={true}
212
- />
213
- ```
214
-
215
- ## ✅ Resultado Esperado
216
-
217
- Después de aplicar estas correcciones, los switches deberían:
218
-
219
- 1. **Mostrar colores correctos** - Azul cuando ON, gris cuando OFF
220
- 2. **Handle visible** - Círculo blanco que se desliza
221
- 3. **Transiciones suaves** - Animación fluida al cambiar estado
222
- 4. **Estados claros** - Diferenciación visual entre enabled/disabled
223
- 5. **Tamaños apropiados** - Dimensiones correctas según el tamaño especificado
224
-
225
- ## 🚀 Próximos Pasos
226
-
227
- 1. **Probar en diferentes navegadores** - Chrome, Firefox, Safari
228
- 2. **Verificar en dispositivos móviles** - Responsive design
229
- 3. **Probar con diferentes temas** - Claro/oscuro
230
- 4. **Validar accesibilidad** - Lectores de pantalla, navegación por teclado
231
-
232
- La corrección debería resolver completamente el problema visual de los switches, proporcionando una experiencia de usuario consistente y profesional.