@arielgonzaguer/michi-router 1.0.3 → 1.0.5

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 (2) hide show
  1. package/README.md +256 -277
  2. package/package.json +40 -39
package/README.md CHANGED
@@ -1,277 +1,256 @@
1
- # Michi Router
2
-
3
- ![npm version](https://img.shields.io/npm/v/@arielgonzaguer/michi-router)
4
- ![bundle size](https://img.shields.io/bundlephobia/minzip/@arielgonzaguer/michi-router)
5
- ![license](https://img.shields.io/npm/l/@arielgonzaguer/michi-router)
6
-
7
- El router minimalista y simple para React.
8
- El objetivo principal de esta herramienta es proporcionar la funcionalidad básica de enrutamiento.
9
-
10
- ## Características
11
-
12
- - Es ideal para proyectos pequeños o que solo necesitan una funcionalidad básica de enrutamiento.
13
- - No requiere de ninguna configuración adicional.
14
- - No requiere de ninguna dependencia externa.
15
- - Creado con TypeScript.
16
- - Ultra ligero. Menos de 20kb (más ligero y básico que otras librerías).
17
-
18
- ## Compatibilidad
19
-
20
- - React 16.8+.
21
- - Funciona con proyectos creados con Create React App, Vite, Next.js, etc.
22
- - Totalmente tipado con TypeScript.
23
-
24
- ## Installation
25
-
26
- ```bash
27
- npm install @arielgonzaguer/michi-router
28
- ```
29
-
30
- ## Uso básico
31
-
32
- ```jsx
33
- // src/App.jsx //
34
- import { RouterProvider, Link } from "@arielgonzaguer/michi-router";
35
-
36
- // puede crear rutas en un archivo separado o en el mismo archivo
37
- const routes = [
38
- { path: "/", component: <Home /> },
39
- { path: "/about", component: <About /> },
40
- ];
41
-
42
- function App() {
43
- return (
44
- <RouterProvider routes={routes}>
45
- {/* Esto se muestra si no se encuentra una ruta */}
46
- <div>404: Page not found</div>
47
- </RouterProvider>
48
- );
49
- }
50
- ```
51
-
52
- ### Usando Link
53
-
54
- #### Usando el componente Link solo con prop to
55
- ```jsx
56
- function NavigationComponent() {
57
- return (
58
- <nav>
59
- <Link to="/">Home</Link>
60
- <Link to="/about">About</Link>
61
- </nav>
62
- );
63
- }
64
- ```
65
-
66
- #### Usando el componente Link con todas las props
67
- ```jsx
68
- <Link
69
- to="/contact"
70
- className="nav-link"
71
- target="_blank"
72
- rel="noopener noreferrer"
73
- aria-label="Contacto"
74
- >
75
- Contacto
76
- </Link>
77
- ```
78
-
79
-
80
-
81
- ### Navegación programática (Hook useNavigate)
82
-
83
- ```jsx
84
- import { useNavigate } from "@arielgonzaguer/michi-router";
85
-
86
- function NavigateButton() {
87
- const navigate = useNavigate();
88
- return <button onClick={() => navigate("/about")}>Ir a About</button>;
89
- }
90
- ```
91
-
92
- ### Organización de rutas en archivos separados
93
-
94
- Para aplicaciones más grandes, puedes organizar tus rutas en archivos separados:
95
-
96
- ```jsx
97
- // routes.js
98
- import Home from "./pages/Home";
99
- import About from "./pages/About";
100
- import Products from "./pages/Products";
101
- import NotFound from "./pages/NotFound";
102
-
103
- export const routes = [
104
- { path: "/", component: <Home /> },
105
- { path: "/about", component: <About /> },
106
- { path: "/products", component: <Products /> },
107
- ];
108
-
109
- export const notFoundPage = <NotFound />;
110
- ```
111
-
112
- ```jsx
113
- // App.jsx
114
- import { RouterProvider } from "@arielgonzaguer/michi-router";
115
- import { routes, notFoundPage } from "./routes";
116
-
117
- function App() {
118
- return <RouterProvider routes={routes}>{notFoundPage}</RouterProvider>;
119
- }
120
- ```
121
-
122
- ### Integración con sistemas de autenticación
123
-
124
- ```jsx
125
- import { RouterProvider } from "@arielgonzaguer/michi-router";
126
- import { useAuth } from "./auth-context";
127
-
128
- function App() {
129
- const { isAuthenticated } = useAuth();
130
-
131
- // Definimos rutas condicionalmente basadas en autenticación
132
- const routes = [
133
- { path: "/", component: <Home /> },
134
- { path: "/login", component: <Login /> },
135
- // Solo agregamos estas rutas si el usuario está autenticado
136
- ...(isAuthenticated
137
- ? [
138
- { path: "/profile", component: <Profile /> },
139
- { path: "/admin", component: <Admin /> },
140
- ]
141
- : []),
142
- ];
143
-
144
- return (
145
- <RouterProvider routes={routes}>
146
- <div>404: Page not found</div>
147
- </RouterProvider>
148
- );
149
- }
150
- ```
151
-
152
- ### Usando un Layout General
153
-
154
- Puedes aplicar un layout común a todas tus rutas:
155
-
156
- ```jsx
157
- import { RouterProvider } from "@arielgonzaguer/michi-router";
158
- import MainLayout from "./layouts/MainLayout";
159
-
160
- const routes = [
161
- { path: "/", component: <Home /> },
162
- { path: "/about", component: <About /> },
163
- ];
164
-
165
- function App() {
166
- return (
167
- <RouterProvider routes={routes} layout={MainLayout}>
168
- <div>404: Page not found</div>
169
- </RouterProvider>
170
- );
171
- }
172
-
173
- // Ejemplo de un componente Layout
174
- function MainLayout({ children }) {
175
- return (
176
- <div className="layout">
177
- <header>
178
- <nav>
179
- <Link to="/">Home</Link>
180
- <Link to="/about">About</Link>
181
- </nav>
182
- </header>
183
- <main>{children}</main>
184
- <footer>Michi-router 😸</footer>
185
- </div>
186
- );
187
- }
188
- ```
189
-
190
- ## API
191
-
192
- ### `<RouterProvider>`
193
-
194
- Componente principal para el enrutamiento.
195
-
196
- **Props:**
197
-
198
- - `routes`: Array de objetos con `path` y `component`.
199
- - `children`: Elemento a mostrar cuando no hay ruta coincidente.
200
- - `layout`: Componente opcional que funciona como layout general para todas las rutas.
201
-
202
- ### `<Link>`
203
-
204
- Componente para navegación declarativa.
205
-
206
- **Props:**
207
-
208
- - `to`: Ruta destino.
209
- - `children`: Contenido del enlace.
210
- - `className`: Clases CSS opcionales.
211
- - `...rest`: Cualquier otra prop válida para elementos `<a>` de HTML.
212
-
213
- ### `useNavigate()`
214
-
215
- Hook para navegación programática.
216
-
217
- **Retorna:**
218
-
219
- - Función navigate que acepta la ruta como parámetro.
220
-
221
- ## Próximas características
222
-
223
- - [ ] Soporte para rutas anidadas.
224
-
225
- ```jsx
226
- const routes = [
227
- {
228
- path: "/dashboard",
229
- component: <Dashboard />,
230
- children: [
231
- { path: "/users", component: <Users /> },
232
- { path: "/settings", component: <Settings /> },
233
- ],
234
- },
235
- ];
236
- ```
237
-
238
- - [ ] Transiciones entre rutas.
239
-
240
- ```jsx
241
- <RouterProvider routes={routes} transitions={true} transitionDuration={300}>
242
- <NotFound />
243
- </RouterProvider>
244
- ```
245
-
246
- ## Solución de problemas comunes
247
-
248
- ### El componente no se renderiza después de navegar
249
-
250
- Asegúrate de que la ruta en el array `routes` coincida exactamente con la URL, incluyendo barras diagonales.
251
-
252
- ### Errores con TypeScript
253
-
254
- Si estás usando TypeScript, asegúrate de importar los tipos correctamente:
255
-
256
- ```typescript
257
- import {
258
- RouterProvider,
259
- Link,
260
- useNavigate,
261
- } from "@arielgonzaguer/michi-router";
262
- import type { RouterProviderProps } from "@arielgonzaguer/michi-router";
263
- ```
264
-
265
- ## Contribuir
266
-
267
- Las contribuciones son bienvenidas. Por favor, sigue estos pasos:
268
-
269
- 1. Fork el repositorio.
270
- 2. Crea una rama para tu feature (`git checkout -b feature/amazing-feature`).
271
- 3. Haz commit de tus cambios (`git commit -m 'Add some amazing feature'`).
272
- 4. Push a la rama (`git push origin feature/amazing-feature`).
273
- 5. Abre un Pull Request.
274
-
275
- ## Licencia
276
-
277
- MIT
1
+ # Michi Router
2
+
3
+ ![npm version](https://img.shields.io/npm/v/@arielgonzaguer/michi-router)
4
+ ![bundle size](https://img.shields.io/bundlephobia/minzip/@arielgonzaguer/michi-router)
5
+ ![license](https://img.shields.io/npm/l/@arielgonzaguer/michi-router)
6
+
7
+ El router minimalista y simple para React.
8
+ El objetivo principal de esta herramienta es proporcionar la funcionalidad básica de enrutamiento.
9
+
10
+ ## Características
11
+
12
+ - Es ideal para proyectos pequeños o que solo necesitan una funcionalidad básica de enrutamiento.
13
+ - No requiere de ninguna configuración adicional.
14
+ - No requiere de ninguna dependencia externa.
15
+ - Creado con TypeScript.
16
+ - Ultra ligero.
17
+
18
+ ## Compatibilidad
19
+
20
+ - React 16.8+.
21
+ - Funciona con proyectos creados con Vite, Next.js, etc.
22
+ - Totalmente tipado con TypeScript.
23
+
24
+ ## Instalación
25
+
26
+ ```bash
27
+ npm install @arielgonzaguer/michi-router
28
+ ```
29
+
30
+ ## Uso básico
31
+
32
+ ```jsx
33
+ // src/App.jsx //
34
+ import { RouterProvider} from "@arielgonzaguer/michi-router";
35
+
36
+ // puede crear rutas en un archivo separado o en el mismo archivo
37
+ const routes = [
38
+ { path: "/", component: <Home /> },
39
+ { path: "/about", component: <About /> },
40
+ ];
41
+
42
+ function App() {
43
+ return (
44
+ <RouterProvider routes={routes}>
45
+ {/* Esto se muestra si no se encuentra una ruta */}
46
+ <div>404: Page not found</div>
47
+ </RouterProvider>
48
+ );
49
+ }
50
+ ```
51
+
52
+ ### Usando Link
53
+
54
+ #### Usando el componente Link solo con prop to
55
+ ```jsx
56
+ import { Link} from "@arielgonzaguer/michi-router";
57
+
58
+ function NavigationComponent() {
59
+ return (
60
+ <nav>
61
+ <Link to="/">Home</Link>
62
+ <Link to="/about">About</Link>
63
+ </nav>
64
+ );
65
+ }
66
+ ```
67
+
68
+ #### Usando el componente Link con todas las props
69
+ ```jsx
70
+ import { Link} from "@arielgonzaguer/michi-router";
71
+
72
+ <Link
73
+ to="/contact"
74
+ className="nav-link"
75
+ target="_blank"
76
+ rel="noopener noreferrer"
77
+ aria-label="Contacto"
78
+ >
79
+ Contacto
80
+ </Link>
81
+ ```
82
+
83
+
84
+
85
+ ### Navegación programática (Hook useNavigate)
86
+
87
+ ```jsx
88
+ import { useNavigate } from "@arielgonzaguer/michi-router";
89
+
90
+ function NavigateButton() {
91
+ const navigate = useNavigate();
92
+ return <button onClick={() => navigate("/about")}>Ir a About</button>;
93
+ }
94
+ ```
95
+
96
+ ### Organización de rutas en archivos separados
97
+
98
+ Para aplicaciones más grandes, puedes organizar tus rutas en archivos separados:
99
+
100
+ ```jsx
101
+ // routes.js
102
+ import Home from "./pages/Home";
103
+ import About from "./pages/About";
104
+ import Products from "./pages/Products";
105
+ import NotFound from "./pages/NotFound";
106
+
107
+ export const routes = [
108
+ { path: "/", component: <Home /> },
109
+ { path: "/about", component: <About /> },
110
+ { path: "/products", component: <Products /> },
111
+ ];
112
+
113
+ export const notFoundPage = <NotFound />;
114
+ ```
115
+
116
+ ```jsx
117
+ // App.jsx
118
+ import { RouterProvider } from "@arielgonzaguer/michi-router";
119
+ import { routes, notFoundPage } from "./routes";
120
+
121
+ function App() {
122
+ return <RouterProvider routes={routes}>{notFoundPage}</RouterProvider>;
123
+ }
124
+ ```
125
+
126
+ ### Integración con sistemas de autenticación
127
+
128
+ ```jsx
129
+ import { RouterProvider } from "@arielgonzaguer/michi-router";
130
+ import { useAuth } from "./auth-context";
131
+
132
+ function App() {
133
+ const { isAuthenticated } = useAuth();
134
+
135
+ // Definimos rutas condicionalmente basadas en autenticación
136
+ const routes = [
137
+ { path: "/", component: <Home /> },
138
+ { path: "/login", component: <Login /> },
139
+ // Solo agregamos estas rutas si el usuario está autenticado
140
+ ...(isAuthenticated
141
+ ? [
142
+ { path: "/profile", component: <Profile /> },
143
+ { path: "/admin", component: <Admin /> },
144
+ ]
145
+ : []),
146
+ ];
147
+
148
+ return (
149
+ <RouterProvider routes={routes}>
150
+ <div>404: Page not found</div>
151
+ </RouterProvider>
152
+ );
153
+ }
154
+ ```
155
+
156
+ ### Usando un Layout General
157
+
158
+ Puedes aplicar un layout común a todas tus rutas:
159
+
160
+ ```jsx
161
+ import { RouterProvider } from "@arielgonzaguer/michi-router";
162
+ import MainLayout from "./layouts/MainLayout";
163
+
164
+ const routes = [
165
+ { path: "/", component: <Home /> },
166
+ { path: "/about", component: <About /> },
167
+ ];
168
+
169
+ function App() {
170
+ return (
171
+ <RouterProvider routes={routes} layout={MainLayout}>
172
+ <div>404: Page not found</div>
173
+ </RouterProvider>
174
+ );
175
+ }
176
+
177
+ // Ejemplo de un componente Layout
178
+ function MainLayout({ children }) {
179
+ return (
180
+ <div className="layout">
181
+ <header>
182
+ <nav>
183
+ <Link to="/">Home</Link>
184
+ <Link to="/about">About</Link>
185
+ </nav>
186
+ </header>
187
+ <main>{children}</main>
188
+ <footer>Michi-router 😸</footer>
189
+ </div>
190
+ );
191
+ }
192
+ ```
193
+
194
+ ## API
195
+
196
+ ### `<RouterProvider>`
197
+
198
+ Componente principal para el enrutamiento.
199
+
200
+ **Props:**
201
+
202
+ - `routes`: Array de objetos con `path` y `component`.
203
+ - `children`: Elemento a mostrar cuando no hay ruta coincidente.
204
+ - `layout`: Componente opcional que funciona como layout general para todas las rutas.
205
+
206
+ ### `<Link>`
207
+
208
+ Componente para navegación declarativa.
209
+
210
+ **Props:**
211
+
212
+ - `to`: Ruta destino.
213
+ - `children`: Contenido del enlace.
214
+ - `className`: Clases CSS opcionales.
215
+ - `...rest`: Cualquier otra prop válida para elementos `<a>` de HTML.
216
+
217
+ ### `useNavigate()`
218
+
219
+ Hook para navegación programática.
220
+
221
+ **Retorna:**
222
+
223
+ - Función navigate que acepta la ruta como parámetro.
224
+
225
+ ## Solución de problemas comunes
226
+
227
+ ### El componente no se renderiza después de navegar
228
+
229
+ Asegúrate de que la ruta en el array `routes` coincida exactamente con la URL, incluyendo barras diagonales.
230
+
231
+ ### Errores con TypeScript
232
+
233
+ Si estás usando TypeScript, asegúrate de importar los tipos correctamente:
234
+
235
+ ```typescript
236
+ import {
237
+ RouterProvider,
238
+ Link,
239
+ useNavigate,
240
+ } from "@arielgonzaguer/michi-router";
241
+ import type { RouterProviderProps } from "@arielgonzaguer/michi-router";
242
+ ```
243
+
244
+ ## Contribuir
245
+
246
+ Las contribuciones son bienvenidas. Por favor, sigue estos pasos:
247
+
248
+ 1. Fork el repositorio.
249
+ 2. Crea una rama para tu feature (`git checkout -b feature/amazing-feature`).
250
+ 3. Haz commit de tus cambios (`git commit -m 'Add some amazing feature'`).
251
+ 4. Push a la rama (`git push origin feature/amazing-feature`).
252
+ 5. Abre un Pull Request.
253
+
254
+ ## Licencia
255
+
256
+ MIT
package/package.json CHANGED
@@ -1,39 +1,40 @@
1
- {
2
- "name": "@arielgonzaguer/michi-router",
3
- "private": false,
4
- "version": "1.0.3",
5
- "description": "The minimalist and simple router for React",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "files": [
9
- "dist"
10
- ],
11
- "scripts": {
12
- "build": "tsc",
13
- "prepare": "npm run build",
14
- "clean": "rimraf dist",
15
- "prebuild": "npm run clean",
16
- "prepublishOnly": "npm run build"
17
- },
18
- "keywords": [
19
- "react",
20
- "router",
21
- "typescript",
22
- "michi",
23
- "cats"
24
- ],
25
- "peerDependencies": {
26
- "react": ">=16.8.0",
27
- "react-dom": ">=16.8.0"
28
- },
29
- "devDependencies": {
30
- "@types/react": "^18.3.18",
31
- "@types/react-dom": "^18.3.5",
32
- "react": "^18.3.1",
33
- "react-dom": "^18.3.1",
34
- "rimraf": "^6.0.1",
35
- "typescript": "^4.9.5"
36
- },
37
- "author": "Ariel González Agüero",
38
- "license": "MIT"
39
- }
1
+ {
2
+ "name": "@arielgonzaguer/michi-router",
3
+ "private": false,
4
+ "version": "1.0.5",
5
+ "description": "El router minimalista y simple para React.\nEl objetivo principal de esta herramienta es proporcionar la funcionalidad básica de enrutamiento.",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "prepare": "npm run build",
14
+ "clean": "rimraf dist",
15
+ "prebuild": "npm run clean",
16
+ "prepublishOnly": "npm run build"
17
+ },
18
+ "keywords": [
19
+ "react",
20
+ "router",
21
+ "typescript",
22
+ "michi",
23
+ "cats",
24
+ "gatos"
25
+ ],
26
+ "peerDependencies": {
27
+ "react": ">=16.8.0",
28
+ "react-dom": ">=16.8.0"
29
+ },
30
+ "devDependencies": {
31
+ "@types/react": "^18.3.18",
32
+ "@types/react-dom": "^18.3.5",
33
+ "react": "^18.3.1",
34
+ "react-dom": "^18.3.1",
35
+ "rimraf": "^6.0.1",
36
+ "typescript": "^4.9.5"
37
+ },
38
+ "author": "Ariel González Agüero",
39
+ "license": "MIT"
40
+ }