ywana-core8 0.1.95 → 0.1.98
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/README-PUBLISH.md +166 -0
- package/dist/index.css +4502 -242
- package/dist/index.js +42641 -0
- package/dist/index.js.map +1 -0
- package/dist/index.modern.js +37447 -31364
- package/dist/index.modern.js.map +1 -1
- package/dist/index.umd.js +40345 -34418
- package/dist/index.umd.js.map +1 -1
- package/doc/src/index.js +1 -2
- package/doc/src/ywana-core8.css +16646 -0
- package/package.json +25 -19
- package/publish.sh +288 -5
- package/src/html/accordion.example.js +0 -74
- package/src/html/textfield2.css +1 -16
- package/src/setupTests.js +38 -0
- package/src/widgets/login/LoginBox.example.js +195 -0
- package/test-publish.sh +159 -0
- package/vite.config.js +86 -0
- package/vitest.config.js +42 -0
- package/dist/index.cjs +0 -36722
- package/dist/index.cjs.map +0 -1
- package/dist/index.css.map +0 -1
- package/src/incubator/pdfViewer.js +0 -33
- package/test-textfield2-icons.html +0 -150
@@ -0,0 +1,195 @@
|
|
1
|
+
import React, { useState } from 'react'
|
2
|
+
import { LoginBox } from './LoginBox'
|
3
|
+
|
4
|
+
/**
|
5
|
+
* LoginBox Examples
|
6
|
+
*
|
7
|
+
* Ejemplos de uso del componente LoginBox con diferentes configuraciones
|
8
|
+
* para verificar el centrado de iconos en los textfields.
|
9
|
+
*/
|
10
|
+
|
11
|
+
export const LoginBoxExamples = () => {
|
12
|
+
const [loginState, setLoginState] = useState({
|
13
|
+
loading: false,
|
14
|
+
message: '',
|
15
|
+
lastLogin: null
|
16
|
+
})
|
17
|
+
|
18
|
+
const handleLogin = (user, password) => {
|
19
|
+
console.log('Login attempt:', { user, password })
|
20
|
+
|
21
|
+
setLoginState(prev => ({ ...prev, loading: true, message: '' }))
|
22
|
+
|
23
|
+
// Simular proceso de login
|
24
|
+
setTimeout(() => {
|
25
|
+
if (user === 'admin' && password === 'admin') {
|
26
|
+
setLoginState({
|
27
|
+
loading: false,
|
28
|
+
message: '',
|
29
|
+
lastLogin: { user, timestamp: new Date() }
|
30
|
+
})
|
31
|
+
console.log('Login successful!')
|
32
|
+
} else {
|
33
|
+
setLoginState({
|
34
|
+
loading: false,
|
35
|
+
message: 'Usuario o contraseña incorrectos',
|
36
|
+
lastLogin: null
|
37
|
+
})
|
38
|
+
}
|
39
|
+
}, 2000)
|
40
|
+
}
|
41
|
+
|
42
|
+
const resetLogin = () => {
|
43
|
+
setLoginState({
|
44
|
+
loading: false,
|
45
|
+
message: '',
|
46
|
+
lastLogin: null
|
47
|
+
})
|
48
|
+
}
|
49
|
+
|
50
|
+
return (
|
51
|
+
<div style={{
|
52
|
+
padding: '2rem',
|
53
|
+
backgroundColor: '#f5f5f5',
|
54
|
+
minHeight: '100vh',
|
55
|
+
display: 'flex',
|
56
|
+
flexDirection: 'column',
|
57
|
+
gap: '2rem'
|
58
|
+
}}>
|
59
|
+
<h1>LoginBox Examples</h1>
|
60
|
+
|
61
|
+
{/* Ejemplo 1: LoginBox básico */}
|
62
|
+
<div style={{
|
63
|
+
backgroundColor: 'white',
|
64
|
+
padding: '2rem',
|
65
|
+
borderRadius: '8px',
|
66
|
+
boxShadow: '0 2px 10px rgba(0,0,0,0.1)',
|
67
|
+
maxWidth: '400px'
|
68
|
+
}}>
|
69
|
+
<h2>1. LoginBox Básico</h2>
|
70
|
+
<p>LoginBox estándar con labels en español</p>
|
71
|
+
<LoginBox
|
72
|
+
userLabel="Usuario"
|
73
|
+
passwordLabel="Contraseña"
|
74
|
+
loginLabel="Iniciar Sesión"
|
75
|
+
onOK={handleLogin}
|
76
|
+
loading={loginState.loading}
|
77
|
+
message={loginState.message}
|
78
|
+
/>
|
79
|
+
{loginState.lastLogin && (
|
80
|
+
<div style={{
|
81
|
+
marginTop: '1rem',
|
82
|
+
padding: '1rem',
|
83
|
+
backgroundColor: '#e8f5e8',
|
84
|
+
borderRadius: '4px',
|
85
|
+
fontSize: '0.9rem'
|
86
|
+
}}>
|
87
|
+
✅ Login exitoso: {loginState.lastLogin.user}
|
88
|
+
<br />
|
89
|
+
{loginState.lastLogin.timestamp.toLocaleString()}
|
90
|
+
<br />
|
91
|
+
<button onClick={resetLogin} style={{ marginTop: '0.5rem' }}>
|
92
|
+
Reset
|
93
|
+
</button>
|
94
|
+
</div>
|
95
|
+
)}
|
96
|
+
</div>
|
97
|
+
|
98
|
+
{/* Ejemplo 2: LoginBox con valores predefinidos */}
|
99
|
+
<div style={{
|
100
|
+
backgroundColor: 'white',
|
101
|
+
padding: '2rem',
|
102
|
+
borderRadius: '8px',
|
103
|
+
boxShadow: '0 2px 10px rgba(0,0,0,0.1)',
|
104
|
+
maxWidth: '400px'
|
105
|
+
}}>
|
106
|
+
<h2>2. LoginBox con Valores Predefinidos</h2>
|
107
|
+
<p>Para probar el centrado de iconos con texto existente</p>
|
108
|
+
<LoginBox
|
109
|
+
userLabel="Email"
|
110
|
+
userValue="usuario@ejemplo.com"
|
111
|
+
passwordLabel="Password"
|
112
|
+
passwordValue="password123"
|
113
|
+
loginLabel="Sign In"
|
114
|
+
onOK={(user, pass) => console.log('Login with preset values:', { user, pass })}
|
115
|
+
/>
|
116
|
+
</div>
|
117
|
+
|
118
|
+
{/* Ejemplo 3: LoginBox en inglés */}
|
119
|
+
<div style={{
|
120
|
+
backgroundColor: 'white',
|
121
|
+
padding: '2rem',
|
122
|
+
borderRadius: '8px',
|
123
|
+
boxShadow: '0 2px 10px rgba(0,0,0,0.1)',
|
124
|
+
maxWidth: '400px'
|
125
|
+
}}>
|
126
|
+
<h2>3. LoginBox en Inglés</h2>
|
127
|
+
<p>Labels en inglés para verificar diferentes longitudes de texto</p>
|
128
|
+
<LoginBox
|
129
|
+
userLabel="Username"
|
130
|
+
passwordLabel="Password"
|
131
|
+
loginLabel="Log In"
|
132
|
+
onOK={(user, pass) => console.log('English login:', { user, pass })}
|
133
|
+
/>
|
134
|
+
</div>
|
135
|
+
|
136
|
+
{/* Ejemplo 4: LoginBox con contenido adicional */}
|
137
|
+
<div style={{
|
138
|
+
backgroundColor: 'white',
|
139
|
+
padding: '2rem',
|
140
|
+
borderRadius: '8px',
|
141
|
+
boxShadow: '0 2px 10px rgba(0,0,0,0.1)',
|
142
|
+
maxWidth: '400px'
|
143
|
+
}}>
|
144
|
+
<h2>4. LoginBox con Contenido Adicional</h2>
|
145
|
+
<p>LoginBox con elementos adicionales en el footer</p>
|
146
|
+
<LoginBox
|
147
|
+
userLabel="Usuario"
|
148
|
+
passwordLabel="Contraseña"
|
149
|
+
loginLabel="Entrar"
|
150
|
+
onOK={(user, pass) => console.log('Login with extra content:', { user, pass })}
|
151
|
+
>
|
152
|
+
<div style={{
|
153
|
+
width: '100%',
|
154
|
+
textAlign: 'center',
|
155
|
+
marginTop: '1rem',
|
156
|
+
fontSize: '0.9rem',
|
157
|
+
color: '#666'
|
158
|
+
}}>
|
159
|
+
<a href="#" style={{ color: '#2196f3', textDecoration: 'none' }}>
|
160
|
+
¿Olvidaste tu contraseña?
|
161
|
+
</a>
|
162
|
+
<br />
|
163
|
+
<span style={{ fontSize: '0.8rem' }}>
|
164
|
+
¿No tienes cuenta? <a href="#" style={{ color: '#2196f3' }}>Regístrate</a>
|
165
|
+
</span>
|
166
|
+
</div>
|
167
|
+
</LoginBox>
|
168
|
+
</div>
|
169
|
+
|
170
|
+
{/* Información de prueba */}
|
171
|
+
<div style={{
|
172
|
+
backgroundColor: '#fff3cd',
|
173
|
+
padding: '1rem',
|
174
|
+
borderRadius: '4px',
|
175
|
+
border: '1px solid #ffeaa7',
|
176
|
+
maxWidth: '600px'
|
177
|
+
}}>
|
178
|
+
<h3>💡 Información de Prueba</h3>
|
179
|
+
<p><strong>Para probar el login exitoso:</strong></p>
|
180
|
+
<ul>
|
181
|
+
<li>Usuario: <code>admin</code></li>
|
182
|
+
<li>Contraseña: <code>admin</code></li>
|
183
|
+
</ul>
|
184
|
+
<p><strong>Verificar centrado de iconos:</strong></p>
|
185
|
+
<ul>
|
186
|
+
<li>Los iconos de "clear" (X) deben aparecer centrados verticalmente en los campos</li>
|
187
|
+
<li>El icono de "visibility toggle" en el campo de contraseña debe estar centrado</li>
|
188
|
+
<li>Probar en diferentes tamaños de pantalla (responsive)</li>
|
189
|
+
</ul>
|
190
|
+
</div>
|
191
|
+
</div>
|
192
|
+
)
|
193
|
+
}
|
194
|
+
|
195
|
+
export default LoginBoxExamples
|
package/test-publish.sh
ADDED
@@ -0,0 +1,159 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# 🧪 Script de Prueba para el Publisher
|
4
|
+
# ====================================
|
5
|
+
# Este script muestra cómo se ve el publisher sin hacer cambios reales
|
6
|
+
|
7
|
+
# Colores para output
|
8
|
+
RED='\033[0;31m'
|
9
|
+
GREEN='\033[0;32m'
|
10
|
+
YELLOW='\033[1;33m'
|
11
|
+
BLUE='\033[0;34m'
|
12
|
+
PURPLE='\033[0;35m'
|
13
|
+
CYAN='\033[0;36m'
|
14
|
+
NC='\033[0m' # No Color
|
15
|
+
|
16
|
+
# Función para mostrar barras de progreso
|
17
|
+
show_progress() {
|
18
|
+
local duration=$1
|
19
|
+
local message=$2
|
20
|
+
local progress=0
|
21
|
+
local bar_length=50
|
22
|
+
|
23
|
+
echo -e "${CYAN}${message}${NC}"
|
24
|
+
|
25
|
+
while [ $progress -le $duration ]; do
|
26
|
+
local filled=$((progress * bar_length / duration))
|
27
|
+
local empty=$((bar_length - filled))
|
28
|
+
|
29
|
+
printf "\r${GREEN}["
|
30
|
+
printf "%*s" $filled | tr ' ' '='
|
31
|
+
printf "%*s" $empty | tr ' ' '-'
|
32
|
+
printf "]${NC} %d%%" $((progress * 100 / duration))
|
33
|
+
|
34
|
+
sleep 0.05
|
35
|
+
progress=$((progress + 1))
|
36
|
+
done
|
37
|
+
echo ""
|
38
|
+
}
|
39
|
+
|
40
|
+
# Función para mostrar spinner
|
41
|
+
show_spinner() {
|
42
|
+
local duration=$1
|
43
|
+
local message=$2
|
44
|
+
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
|
45
|
+
local i=0
|
46
|
+
local count=0
|
47
|
+
|
48
|
+
echo -e "${CYAN}${message}${NC}"
|
49
|
+
while [ $count -lt $duration ]; do
|
50
|
+
i=$(( (i+1) %10 ))
|
51
|
+
printf "\r${YELLOW}${spin:$i:1}${NC} Procesando..."
|
52
|
+
sleep 0.1
|
53
|
+
count=$((count + 1))
|
54
|
+
done
|
55
|
+
printf "\r${GREEN}✓${NC} Completado\n"
|
56
|
+
}
|
57
|
+
|
58
|
+
# Función para log con timestamp
|
59
|
+
log() {
|
60
|
+
local level=$1
|
61
|
+
local message=$2
|
62
|
+
local timestamp=$(date '+%H:%M:%S')
|
63
|
+
|
64
|
+
case $level in
|
65
|
+
"INFO") echo -e "${BLUE}[${timestamp}]${NC} ${message}" ;;
|
66
|
+
"SUCCESS") echo -e "${GREEN}[${timestamp}] ✓${NC} ${message}" ;;
|
67
|
+
"WARNING") echo -e "${YELLOW}[${timestamp}] ⚠${NC} ${message}" ;;
|
68
|
+
"ERROR") echo -e "${RED}[${timestamp}] ✗${NC} ${message}" ;;
|
69
|
+
esac
|
70
|
+
}
|
71
|
+
|
72
|
+
# Banner inicial
|
73
|
+
echo -e "${PURPLE}"
|
74
|
+
echo "╔══════════════════════════════════════════════════════════════╗"
|
75
|
+
echo "║ 🧪 DEMO PUBLISHER ║"
|
76
|
+
echo "║ (Modo de Prueba - Sin Cambios) ║"
|
77
|
+
echo "╚══════════════════════════════════════════════════════════════╝"
|
78
|
+
echo -e "${NC}"
|
79
|
+
|
80
|
+
COMMIT_MESSAGE="Demo: Migración completa a Vite con mejoras de rendimiento"
|
81
|
+
log "INFO" "Mensaje de commit: ${COMMIT_MESSAGE}"
|
82
|
+
|
83
|
+
echo ""
|
84
|
+
log "INFO" "Iniciando pipeline de publicación (DEMO)..."
|
85
|
+
|
86
|
+
# PASO 1: Verificaciones Previas
|
87
|
+
echo -e "\n${PURPLE}📋 PASO 1: Verificaciones Previas${NC}"
|
88
|
+
log "INFO" "Rama actual: main"
|
89
|
+
log "SUCCESS" "Working directory limpio"
|
90
|
+
log "SUCCESS" "Conexión a internet OK"
|
91
|
+
log "SUCCESS" "Verificaciones previas completadas"
|
92
|
+
|
93
|
+
# PASO 2: Tests
|
94
|
+
echo -e "\n${PURPLE}🧪 PASO 2: Ejecutando Tests${NC}"
|
95
|
+
log "INFO" "Ejecutando suite de tests..."
|
96
|
+
show_spinner 25 "Ejecutando tests"
|
97
|
+
log "SUCCESS" "Todos los tests pasaron (19 suites, 348 tests)"
|
98
|
+
|
99
|
+
# PASO 3: Build
|
100
|
+
echo -e "\n${PURPLE}🔨 PASO 3: Building Proyecto${NC}"
|
101
|
+
log "SUCCESS" "Build anterior eliminado"
|
102
|
+
log "INFO" "Iniciando build con Vite..."
|
103
|
+
show_spinner 15 "Compilando con Vite"
|
104
|
+
log "SUCCESS" "Build completado en 1.37s"
|
105
|
+
|
106
|
+
echo -e "${CYAN}📦 Archivos generados:${NC}"
|
107
|
+
echo -e " index.css (1.4M)"
|
108
|
+
echo -e " index.js (1.6M)"
|
109
|
+
echo -e " index.modern.js (1.6M)"
|
110
|
+
echo -e " index.umd.js (1.7M)"
|
111
|
+
|
112
|
+
# PASO 4: Versión
|
113
|
+
echo -e "\n${PURPLE}📈 PASO 4: Incrementando Versión${NC}"
|
114
|
+
CURRENT_VERSION=$(node -p "require('./package.json').version" 2>/dev/null || echo "0.1.95")
|
115
|
+
NEW_VERSION="0.1.96"
|
116
|
+
log "INFO" "Versión actual: v${CURRENT_VERSION}"
|
117
|
+
log "SUCCESS" "Nueva versión: v${NEW_VERSION}"
|
118
|
+
|
119
|
+
# PASO 5: Git
|
120
|
+
echo -e "\n${PURPLE}📤 PASO 5: Git Commit y Push${NC}"
|
121
|
+
log "INFO" "Añadiendo archivos al staging..."
|
122
|
+
show_progress 20 "Preparando commit..."
|
123
|
+
FULL_COMMIT_MESSAGE="v${NEW_VERSION}: ${COMMIT_MESSAGE}"
|
124
|
+
log "INFO" "Creando commit: ${FULL_COMMIT_MESSAGE}"
|
125
|
+
log "SUCCESS" "Commit creado (DEMO - no real)"
|
126
|
+
log "SUCCESS" "Tag v${NEW_VERSION} creado (DEMO - no real)"
|
127
|
+
show_spinner 20 "Subiendo cambios a GitHub"
|
128
|
+
log "SUCCESS" "Push completado exitosamente (DEMO - no real)"
|
129
|
+
|
130
|
+
# PASO 6: NPM
|
131
|
+
echo -e "\n${PURPLE}📦 PASO 6: Publicando a NPM${NC}"
|
132
|
+
log "INFO" "Usuario NPM: demo-user"
|
133
|
+
show_spinner 30 "Publicando a NPM Registry"
|
134
|
+
log "SUCCESS" "Paquete publicado exitosamente (DEMO - no real)"
|
135
|
+
|
136
|
+
# RESUMEN FINAL
|
137
|
+
echo -e "\n${GREEN}"
|
138
|
+
echo "╔══════════════════════════════════════════════════════════════╗"
|
139
|
+
echo "║ 🎉 DEMO COMPLETADO ║"
|
140
|
+
echo "╚══════════════════════════════════════════════════════════════╝"
|
141
|
+
echo -e "${NC}"
|
142
|
+
|
143
|
+
echo -e "${CYAN}📊 Resumen de la publicación (DEMO):${NC}"
|
144
|
+
echo -e " ${GREEN}✓${NC} Versión: v${CURRENT_VERSION} → v${NEW_VERSION}"
|
145
|
+
echo -e " ${GREEN}✓${NC} Commit: ${FULL_COMMIT_MESSAGE}"
|
146
|
+
echo -e " ${GREEN}✓${NC} Rama: main"
|
147
|
+
echo -e " ${GREEN}✓${NC} Usuario NPM: demo-user"
|
148
|
+
echo -e " ${GREEN}✓${NC} Build time: 1.37s"
|
149
|
+
|
150
|
+
echo -e "\n${CYAN}🔗 Enlaces útiles:${NC}"
|
151
|
+
echo -e " 📦 NPM: https://www.npmjs.com/package/ywana-core8"
|
152
|
+
echo -e " 🐙 GitHub: https://github.com/ywana/ywana-core8"
|
153
|
+
echo -e " 📋 Tag: https://github.com/ywana/ywana-core8/releases/tag/v${NEW_VERSION}"
|
154
|
+
|
155
|
+
echo -e "\n${CYAN}📥 Para instalar la nueva versión:${NC}"
|
156
|
+
echo -e " ${YELLOW}npm install ywana-core8@${NEW_VERSION}${NC}"
|
157
|
+
|
158
|
+
echo -e "\n${GREEN}🚀 ¡Demo completado exitosamente!${NC}"
|
159
|
+
echo -e "${PURPLE}Para usar el publisher real, ejecuta: ./publish.sh${NC}\n"
|
package/vite.config.js
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
import { defineConfig } from 'vite'
|
2
|
+
import react from '@vitejs/plugin-react'
|
3
|
+
import { resolve } from 'path'
|
4
|
+
|
5
|
+
export default defineConfig({
|
6
|
+
plugins: [
|
7
|
+
react({
|
8
|
+
// Usar React.createElement como microbundle
|
9
|
+
jsxRuntime: 'classic',
|
10
|
+
// Incluir archivos .js que contengan JSX
|
11
|
+
include: /\.(jsx|js|ts|tsx)$/
|
12
|
+
})
|
13
|
+
],
|
14
|
+
|
15
|
+
build: {
|
16
|
+
lib: {
|
17
|
+
entry: resolve(__dirname, 'src/index.js'),
|
18
|
+
name: 'YwanaCore8',
|
19
|
+
formats: ['es', 'cjs', 'umd'],
|
20
|
+
fileName: (format) => {
|
21
|
+
switch (format) {
|
22
|
+
case 'es':
|
23
|
+
return 'index.modern.js'
|
24
|
+
case 'cjs':
|
25
|
+
return 'index.js'
|
26
|
+
case 'umd':
|
27
|
+
return 'index.umd.js'
|
28
|
+
default:
|
29
|
+
return `index.${format}.js`
|
30
|
+
}
|
31
|
+
}
|
32
|
+
},
|
33
|
+
|
34
|
+
rollupOptions: {
|
35
|
+
// Externalizar peer dependencies
|
36
|
+
external: ['react', 'react-dom'],
|
37
|
+
output: {
|
38
|
+
globals: {
|
39
|
+
react: 'React',
|
40
|
+
'react-dom': 'ReactDOM'
|
41
|
+
},
|
42
|
+
// Configurar nombres de archivos CSS
|
43
|
+
assetFileNames: (assetInfo) => {
|
44
|
+
if (assetInfo.name && assetInfo.name.endsWith('.css')) {
|
45
|
+
return 'index.css'
|
46
|
+
}
|
47
|
+
return assetInfo.name
|
48
|
+
}
|
49
|
+
}
|
50
|
+
},
|
51
|
+
|
52
|
+
// No comprimir como microbundle --no-compress
|
53
|
+
minify: false,
|
54
|
+
|
55
|
+
// Generar sourcemaps
|
56
|
+
sourcemap: true
|
57
|
+
},
|
58
|
+
|
59
|
+
// Configuración para desarrollo
|
60
|
+
server: {
|
61
|
+
port: 3000,
|
62
|
+
open: false
|
63
|
+
},
|
64
|
+
|
65
|
+
// Configurar esbuild para JSX en archivos .js
|
66
|
+
esbuild: {
|
67
|
+
loader: 'jsx',
|
68
|
+
include: /src\/.*\.js$/,
|
69
|
+
exclude: []
|
70
|
+
},
|
71
|
+
|
72
|
+
// Resolver alias si es necesario
|
73
|
+
resolve: {
|
74
|
+
alias: {
|
75
|
+
'@': resolve(__dirname, 'src')
|
76
|
+
}
|
77
|
+
},
|
78
|
+
|
79
|
+
// Configuración para testing con Vitest
|
80
|
+
test: {
|
81
|
+
environment: 'jsdom',
|
82
|
+
setupFiles: ['./src/setupTests.js'],
|
83
|
+
globals: true,
|
84
|
+
css: true
|
85
|
+
}
|
86
|
+
})
|
package/vitest.config.js
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
import { defineConfig } from 'vitest/config'
|
2
|
+
import react from '@vitejs/plugin-react'
|
3
|
+
import { resolve } from 'path'
|
4
|
+
|
5
|
+
export default defineConfig({
|
6
|
+
plugins: [
|
7
|
+
react({
|
8
|
+
jsxRuntime: 'classic'
|
9
|
+
})
|
10
|
+
],
|
11
|
+
|
12
|
+
test: {
|
13
|
+
environment: 'jsdom',
|
14
|
+
setupFiles: ['./src/setupTests.js'],
|
15
|
+
globals: true,
|
16
|
+
css: true,
|
17
|
+
|
18
|
+
// Configuración similar a Jest
|
19
|
+
include: [
|
20
|
+
'src/**/__tests__/**/*.(js|jsx)',
|
21
|
+
'src/**/?(*.)(spec|test).(js|jsx)'
|
22
|
+
],
|
23
|
+
|
24
|
+
coverage: {
|
25
|
+
include: [
|
26
|
+
'src/**/*.(js|jsx)'
|
27
|
+
],
|
28
|
+
exclude: [
|
29
|
+
'src/index.js',
|
30
|
+
'src/setupTests.js',
|
31
|
+
'src/**/*.test.(js|jsx)',
|
32
|
+
'src/**/*.spec.(js|jsx)'
|
33
|
+
]
|
34
|
+
}
|
35
|
+
},
|
36
|
+
|
37
|
+
resolve: {
|
38
|
+
alias: {
|
39
|
+
'@': resolve(__dirname, 'src')
|
40
|
+
}
|
41
|
+
}
|
42
|
+
})
|