create-huenei-frontend 0.1.2
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/bin/create-huenei-frontend.js +2 -0
- package/dist/index.js +99 -0
- package/dist/templates/clean/.cursor/skills/architecture/SKILL.md +26 -0
- package/dist/templates/clean/.cursor/skills/components-shadcn/SKILL.md +23 -0
- package/dist/templates/clean/.cursor/skills/daisyui/SKILL.md +98 -0
- package/dist/templates/clean/.cursor/skills/routing/SKILL.md +32 -0
- package/dist/templates/clean/.cursor/skills/testing/SKILL.md +55 -0
- package/dist/templates/clean/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
- package/dist/templates/clean/.cursor/skills/ui-and-styling/SKILL.md +32 -0
- package/dist/templates/clean/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
- package/dist/templates/clean/.prettierrc +6 -0
- package/dist/templates/clean/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
- package/dist/templates/clean/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
- package/dist/templates/clean/.vscode/extensions.json +7 -0
- package/dist/templates/clean/README.md +75 -0
- package/dist/templates/clean/components.json +22 -0
- package/dist/templates/clean/eslint.config.js +31 -0
- package/dist/templates/clean/index.html +13 -0
- package/dist/templates/clean/package.json +62 -0
- package/dist/templates/clean/pnpm-lock.yaml +4487 -0
- package/dist/templates/clean/pnpm-workspace.yaml +2 -0
- package/dist/templates/clean/src/assets/react.svg +1 -0
- package/dist/templates/clean/src/components/ui/badge.tsx +37 -0
- package/dist/templates/clean/src/components/ui/breadcrumb.tsx +106 -0
- package/dist/templates/clean/src/components/ui/button.tsx +58 -0
- package/dist/templates/clean/src/components/ui/card.tsx +72 -0
- package/dist/templates/clean/src/components/ui/form.tsx +165 -0
- package/dist/templates/clean/src/components/ui/input.tsx +22 -0
- package/dist/templates/clean/src/components/ui/label.tsx +24 -0
- package/dist/templates/clean/src/components/ui/password-input.tsx +41 -0
- package/dist/templates/clean/src/components/ui/separator.tsx +28 -0
- package/dist/templates/clean/src/components/ui/tabs.tsx +62 -0
- package/dist/templates/clean/src/components/ui/textarea.tsx +21 -0
- package/dist/templates/clean/src/index.css +104 -0
- package/dist/templates/clean/src/lib/queryClient.ts +11 -0
- package/dist/templates/clean/src/lib/utils.ts +6 -0
- package/dist/templates/clean/src/main.tsx +33 -0
- package/dist/templates/clean/src/routeTree.gen.ts +77 -0
- package/dist/templates/clean/src/router.tsx +13 -0
- package/dist/templates/clean/src/routes/__root.tsx +82 -0
- package/dist/templates/clean/src/routes/index.tsx +187 -0
- package/dist/templates/clean/src/routes/otra-ruta.tsx +319 -0
- package/dist/templates/clean/src/test/setup.ts +1 -0
- package/dist/templates/clean/tsconfig.app.json +34 -0
- package/dist/templates/clean/tsconfig.json +10 -0
- package/dist/templates/clean/tsconfig.node.json +26 -0
- package/dist/templates/clean/vite.config.ts +22 -0
- package/dist/templates/clean/vitest.config.ts +9 -0
- package/dist/templates/help/.cursor/skills/architecture/SKILL.md +26 -0
- package/dist/templates/help/.cursor/skills/components-shadcn/SKILL.md +23 -0
- package/dist/templates/help/.cursor/skills/daisyui/SKILL.md +98 -0
- package/dist/templates/help/.cursor/skills/routing/SKILL.md +32 -0
- package/dist/templates/help/.cursor/skills/testing/SKILL.md +55 -0
- package/dist/templates/help/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
- package/dist/templates/help/.cursor/skills/ui-and-styling/SKILL.md +32 -0
- package/dist/templates/help/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
- package/dist/templates/help/.prettierrc +6 -0
- package/dist/templates/help/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
- package/dist/templates/help/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
- package/dist/templates/help/.vscode/extensions.json +7 -0
- package/dist/templates/help/README.md +75 -0
- package/dist/templates/help/components.json +22 -0
- package/dist/templates/help/eslint.config.js +31 -0
- package/dist/templates/help/index.html +13 -0
- package/dist/templates/help/package.json +62 -0
- package/dist/templates/help/pnpm-lock.yaml +4487 -0
- package/dist/templates/help/pnpm-workspace.yaml +2 -0
- package/dist/templates/help/src/assets/react.svg +1 -0
- package/dist/templates/help/src/components/documentacion/entorno.tsx +99 -0
- package/dist/templates/help/src/components/documentacion/estructura.tsx +100 -0
- package/dist/templates/help/src/components/documentacion/figma-mcp.tsx +200 -0
- package/dist/templates/help/src/components/documentacion/inicio.tsx +69 -0
- package/dist/templates/help/src/components/documentacion/instalacion.tsx +72 -0
- package/dist/templates/help/src/components/documentacion/personalizacion.tsx +163 -0
- package/dist/templates/help/src/components/documentacion/rutas.tsx +138 -0
- package/dist/templates/help/src/components/documentacion/stack.tsx +401 -0
- package/dist/templates/help/src/components/ui/badge.tsx +37 -0
- package/dist/templates/help/src/components/ui/breadcrumb.tsx +106 -0
- package/dist/templates/help/src/components/ui/button.tsx +58 -0
- package/dist/templates/help/src/components/ui/card.tsx +72 -0
- package/dist/templates/help/src/components/ui/form.tsx +165 -0
- package/dist/templates/help/src/components/ui/input.tsx +22 -0
- package/dist/templates/help/src/components/ui/label.tsx +24 -0
- package/dist/templates/help/src/components/ui/password-input.tsx +41 -0
- package/dist/templates/help/src/components/ui/separator.tsx +28 -0
- package/dist/templates/help/src/components/ui/tabs.tsx +62 -0
- package/dist/templates/help/src/components/ui/textarea.tsx +21 -0
- package/dist/templates/help/src/data/proyectos.json +56 -0
- package/dist/templates/help/src/index.css +104 -0
- package/dist/templates/help/src/lib/queryClient.ts +11 -0
- package/dist/templates/help/src/lib/utils.ts +6 -0
- package/dist/templates/help/src/main.tsx +33 -0
- package/dist/templates/help/src/routeTree.gen.ts +241 -0
- package/dist/templates/help/src/router.tsx +13 -0
- package/dist/templates/help/src/routes/__root.tsx +92 -0
- package/dist/templates/help/src/routes/auth/iniciar-sesion.tsx +139 -0
- package/dist/templates/help/src/routes/auth/registro.tsx +205 -0
- package/dist/templates/help/src/routes/contacto.tsx +60 -0
- package/dist/templates/help/src/routes/dashbord.tsx +9 -0
- package/dist/templates/help/src/routes/documentacion.tsx +80 -0
- package/dist/templates/help/src/routes/index.test.tsx +42 -0
- package/dist/templates/help/src/routes/index.tsx +211 -0
- package/dist/templates/help/src/routes/perfil.tsx +9 -0
- package/dist/templates/help/src/routes/proyectos.$proyectoId.tsx +156 -0
- package/dist/templates/help/src/routes/proyectos.tsx +93 -0
- package/dist/templates/help/src/test/setup.ts +1 -0
- package/dist/templates/help/tsconfig.app.json +34 -0
- package/dist/templates/help/tsconfig.json +10 -0
- package/dist/templates/help/tsconfig.node.json +26 -0
- package/dist/templates/help/vite.config.ts +22 -0
- package/dist/templates/help/vitest.config.ts +9 -0
- package/dist/test-cli.js +48 -0
- package/package.json +25 -0
- package/templates/clean/.cursor/skills/architecture/SKILL.md +26 -0
- package/templates/clean/.cursor/skills/components-shadcn/SKILL.md +23 -0
- package/templates/clean/.cursor/skills/daisyui/SKILL.md +98 -0
- package/templates/clean/.cursor/skills/routing/SKILL.md +32 -0
- package/templates/clean/.cursor/skills/testing/SKILL.md +55 -0
- package/templates/clean/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
- package/templates/clean/.cursor/skills/ui-and-styling/SKILL.md +32 -0
- package/templates/clean/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
- package/templates/clean/.prettierrc +6 -0
- package/templates/clean/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
- package/templates/clean/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
- package/templates/clean/.vscode/extensions.json +7 -0
- package/templates/clean/README.md +75 -0
- package/templates/clean/components.json +22 -0
- package/templates/clean/eslint.config.js +31 -0
- package/templates/clean/index.html +13 -0
- package/templates/clean/package.json +62 -0
- package/templates/clean/pnpm-lock.yaml +4487 -0
- package/templates/clean/pnpm-workspace.yaml +2 -0
- package/templates/clean/src/assets/react.svg +1 -0
- package/templates/clean/src/components/ui/badge.tsx +37 -0
- package/templates/clean/src/components/ui/breadcrumb.tsx +106 -0
- package/templates/clean/src/components/ui/button.tsx +58 -0
- package/templates/clean/src/components/ui/card.tsx +72 -0
- package/templates/clean/src/components/ui/form.tsx +165 -0
- package/templates/clean/src/components/ui/input.tsx +22 -0
- package/templates/clean/src/components/ui/label.tsx +24 -0
- package/templates/clean/src/components/ui/password-input.tsx +41 -0
- package/templates/clean/src/components/ui/separator.tsx +28 -0
- package/templates/clean/src/components/ui/tabs.tsx +62 -0
- package/templates/clean/src/components/ui/textarea.tsx +21 -0
- package/templates/clean/src/index.css +104 -0
- package/templates/clean/src/lib/queryClient.ts +11 -0
- package/templates/clean/src/lib/utils.ts +6 -0
- package/templates/clean/src/main.tsx +33 -0
- package/templates/clean/src/routeTree.gen.ts +77 -0
- package/templates/clean/src/router.tsx +13 -0
- package/templates/clean/src/routes/__root.tsx +82 -0
- package/templates/clean/src/routes/index.tsx +187 -0
- package/templates/clean/src/routes/otra-ruta.tsx +319 -0
- package/templates/clean/src/test/setup.ts +1 -0
- package/templates/clean/tsconfig.app.json +34 -0
- package/templates/clean/tsconfig.json +10 -0
- package/templates/clean/tsconfig.node.json +26 -0
- package/templates/clean/vite.config.ts +22 -0
- package/templates/clean/vitest.config.ts +9 -0
- package/templates/help/.cursor/skills/architecture/SKILL.md +26 -0
- package/templates/help/.cursor/skills/components-shadcn/SKILL.md +23 -0
- package/templates/help/.cursor/skills/daisyui/SKILL.md +98 -0
- package/templates/help/.cursor/skills/routing/SKILL.md +32 -0
- package/templates/help/.cursor/skills/testing/SKILL.md +55 -0
- package/templates/help/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
- package/templates/help/.cursor/skills/ui-and-styling/SKILL.md +32 -0
- package/templates/help/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
- package/templates/help/.prettierrc +6 -0
- package/templates/help/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
- package/templates/help/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
- package/templates/help/.vscode/extensions.json +7 -0
- package/templates/help/README.md +75 -0
- package/templates/help/components.json +22 -0
- package/templates/help/eslint.config.js +31 -0
- package/templates/help/index.html +13 -0
- package/templates/help/package.json +62 -0
- package/templates/help/pnpm-lock.yaml +4487 -0
- package/templates/help/pnpm-workspace.yaml +2 -0
- package/templates/help/src/assets/react.svg +1 -0
- package/templates/help/src/components/documentacion/entorno.tsx +99 -0
- package/templates/help/src/components/documentacion/estructura.tsx +100 -0
- package/templates/help/src/components/documentacion/figma-mcp.tsx +200 -0
- package/templates/help/src/components/documentacion/inicio.tsx +69 -0
- package/templates/help/src/components/documentacion/instalacion.tsx +72 -0
- package/templates/help/src/components/documentacion/personalizacion.tsx +163 -0
- package/templates/help/src/components/documentacion/rutas.tsx +138 -0
- package/templates/help/src/components/documentacion/stack.tsx +401 -0
- package/templates/help/src/components/ui/badge.tsx +37 -0
- package/templates/help/src/components/ui/breadcrumb.tsx +106 -0
- package/templates/help/src/components/ui/button.tsx +58 -0
- package/templates/help/src/components/ui/card.tsx +72 -0
- package/templates/help/src/components/ui/form.tsx +165 -0
- package/templates/help/src/components/ui/input.tsx +22 -0
- package/templates/help/src/components/ui/label.tsx +24 -0
- package/templates/help/src/components/ui/password-input.tsx +41 -0
- package/templates/help/src/components/ui/separator.tsx +28 -0
- package/templates/help/src/components/ui/tabs.tsx +62 -0
- package/templates/help/src/components/ui/textarea.tsx +21 -0
- package/templates/help/src/data/proyectos.json +56 -0
- package/templates/help/src/index.css +104 -0
- package/templates/help/src/lib/queryClient.ts +11 -0
- package/templates/help/src/lib/utils.ts +6 -0
- package/templates/help/src/main.tsx +33 -0
- package/templates/help/src/routeTree.gen.ts +241 -0
- package/templates/help/src/router.tsx +13 -0
- package/templates/help/src/routes/__root.tsx +92 -0
- package/templates/help/src/routes/auth/iniciar-sesion.tsx +139 -0
- package/templates/help/src/routes/auth/registro.tsx +205 -0
- package/templates/help/src/routes/contacto.tsx +60 -0
- package/templates/help/src/routes/dashbord.tsx +9 -0
- package/templates/help/src/routes/documentacion.tsx +80 -0
- package/templates/help/src/routes/index.test.tsx +42 -0
- package/templates/help/src/routes/index.tsx +211 -0
- package/templates/help/src/routes/perfil.tsx +9 -0
- package/templates/help/src/routes/proyectos.$proyectoId.tsx +156 -0
- package/templates/help/src/routes/proyectos.tsx +93 -0
- package/templates/help/src/test/setup.ts +1 -0
- package/templates/help/tsconfig.app.json +34 -0
- package/templates/help/tsconfig.json +10 -0
- package/templates/help/tsconfig.node.json +26 -0
- package/templates/help/vite.config.ts +22 -0
- package/templates/help/vitest.config.ts +9 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
|
|
5
|
+
// noinspection JSUnusedGlobalSymbols
|
|
6
|
+
|
|
7
|
+
// This file was automatically generated by TanStack Router.
|
|
8
|
+
// You should NOT make any changes in this file as it will be overwritten.
|
|
9
|
+
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
|
|
10
|
+
|
|
11
|
+
import { Route as rootRouteImport } from './routes/__root'
|
|
12
|
+
import { Route as ProyectosRouteImport } from './routes/proyectos'
|
|
13
|
+
import { Route as PerfilRouteImport } from './routes/perfil'
|
|
14
|
+
import { Route as DocumentacionRouteImport } from './routes/documentacion'
|
|
15
|
+
import { Route as DashbordRouteImport } from './routes/dashbord'
|
|
16
|
+
import { Route as ContactoRouteImport } from './routes/contacto'
|
|
17
|
+
import { Route as IndexRouteImport } from './routes/index'
|
|
18
|
+
import { Route as ProyectosProyectoIdRouteImport } from './routes/proyectos.$proyectoId'
|
|
19
|
+
import { Route as AuthRegistroRouteImport } from './routes/auth/registro'
|
|
20
|
+
import { Route as AuthIniciarSesionRouteImport } from './routes/auth/iniciar-sesion'
|
|
21
|
+
|
|
22
|
+
const ProyectosRoute = ProyectosRouteImport.update({
|
|
23
|
+
id: '/proyectos',
|
|
24
|
+
path: '/proyectos',
|
|
25
|
+
getParentRoute: () => rootRouteImport,
|
|
26
|
+
} as any)
|
|
27
|
+
const PerfilRoute = PerfilRouteImport.update({
|
|
28
|
+
id: '/perfil',
|
|
29
|
+
path: '/perfil',
|
|
30
|
+
getParentRoute: () => rootRouteImport,
|
|
31
|
+
} as any)
|
|
32
|
+
const DocumentacionRoute = DocumentacionRouteImport.update({
|
|
33
|
+
id: '/documentacion',
|
|
34
|
+
path: '/documentacion',
|
|
35
|
+
getParentRoute: () => rootRouteImport,
|
|
36
|
+
} as any)
|
|
37
|
+
const DashbordRoute = DashbordRouteImport.update({
|
|
38
|
+
id: '/dashbord',
|
|
39
|
+
path: '/dashbord',
|
|
40
|
+
getParentRoute: () => rootRouteImport,
|
|
41
|
+
} as any)
|
|
42
|
+
const ContactoRoute = ContactoRouteImport.update({
|
|
43
|
+
id: '/contacto',
|
|
44
|
+
path: '/contacto',
|
|
45
|
+
getParentRoute: () => rootRouteImport,
|
|
46
|
+
} as any)
|
|
47
|
+
const IndexRoute = IndexRouteImport.update({
|
|
48
|
+
id: '/',
|
|
49
|
+
path: '/',
|
|
50
|
+
getParentRoute: () => rootRouteImport,
|
|
51
|
+
} as any)
|
|
52
|
+
const ProyectosProyectoIdRoute = ProyectosProyectoIdRouteImport.update({
|
|
53
|
+
id: '/$proyectoId',
|
|
54
|
+
path: '/$proyectoId',
|
|
55
|
+
getParentRoute: () => ProyectosRoute,
|
|
56
|
+
} as any)
|
|
57
|
+
const AuthRegistroRoute = AuthRegistroRouteImport.update({
|
|
58
|
+
id: '/auth/registro',
|
|
59
|
+
path: '/auth/registro',
|
|
60
|
+
getParentRoute: () => rootRouteImport,
|
|
61
|
+
} as any)
|
|
62
|
+
const AuthIniciarSesionRoute = AuthIniciarSesionRouteImport.update({
|
|
63
|
+
id: '/auth/iniciar-sesion',
|
|
64
|
+
path: '/auth/iniciar-sesion',
|
|
65
|
+
getParentRoute: () => rootRouteImport,
|
|
66
|
+
} as any)
|
|
67
|
+
|
|
68
|
+
export interface FileRoutesByFullPath {
|
|
69
|
+
'/': typeof IndexRoute
|
|
70
|
+
'/contacto': typeof ContactoRoute
|
|
71
|
+
'/dashbord': typeof DashbordRoute
|
|
72
|
+
'/documentacion': typeof DocumentacionRoute
|
|
73
|
+
'/perfil': typeof PerfilRoute
|
|
74
|
+
'/proyectos': typeof ProyectosRouteWithChildren
|
|
75
|
+
'/auth/iniciar-sesion': typeof AuthIniciarSesionRoute
|
|
76
|
+
'/auth/registro': typeof AuthRegistroRoute
|
|
77
|
+
'/proyectos/$proyectoId': typeof ProyectosProyectoIdRoute
|
|
78
|
+
}
|
|
79
|
+
export interface FileRoutesByTo {
|
|
80
|
+
'/': typeof IndexRoute
|
|
81
|
+
'/contacto': typeof ContactoRoute
|
|
82
|
+
'/dashbord': typeof DashbordRoute
|
|
83
|
+
'/documentacion': typeof DocumentacionRoute
|
|
84
|
+
'/perfil': typeof PerfilRoute
|
|
85
|
+
'/proyectos': typeof ProyectosRouteWithChildren
|
|
86
|
+
'/auth/iniciar-sesion': typeof AuthIniciarSesionRoute
|
|
87
|
+
'/auth/registro': typeof AuthRegistroRoute
|
|
88
|
+
'/proyectos/$proyectoId': typeof ProyectosProyectoIdRoute
|
|
89
|
+
}
|
|
90
|
+
export interface FileRoutesById {
|
|
91
|
+
__root__: typeof rootRouteImport
|
|
92
|
+
'/': typeof IndexRoute
|
|
93
|
+
'/contacto': typeof ContactoRoute
|
|
94
|
+
'/dashbord': typeof DashbordRoute
|
|
95
|
+
'/documentacion': typeof DocumentacionRoute
|
|
96
|
+
'/perfil': typeof PerfilRoute
|
|
97
|
+
'/proyectos': typeof ProyectosRouteWithChildren
|
|
98
|
+
'/auth/iniciar-sesion': typeof AuthIniciarSesionRoute
|
|
99
|
+
'/auth/registro': typeof AuthRegistroRoute
|
|
100
|
+
'/proyectos/$proyectoId': typeof ProyectosProyectoIdRoute
|
|
101
|
+
}
|
|
102
|
+
export interface FileRouteTypes {
|
|
103
|
+
fileRoutesByFullPath: FileRoutesByFullPath
|
|
104
|
+
fullPaths:
|
|
105
|
+
| '/'
|
|
106
|
+
| '/contacto'
|
|
107
|
+
| '/dashbord'
|
|
108
|
+
| '/documentacion'
|
|
109
|
+
| '/perfil'
|
|
110
|
+
| '/proyectos'
|
|
111
|
+
| '/auth/iniciar-sesion'
|
|
112
|
+
| '/auth/registro'
|
|
113
|
+
| '/proyectos/$proyectoId'
|
|
114
|
+
fileRoutesByTo: FileRoutesByTo
|
|
115
|
+
to:
|
|
116
|
+
| '/'
|
|
117
|
+
| '/contacto'
|
|
118
|
+
| '/dashbord'
|
|
119
|
+
| '/documentacion'
|
|
120
|
+
| '/perfil'
|
|
121
|
+
| '/proyectos'
|
|
122
|
+
| '/auth/iniciar-sesion'
|
|
123
|
+
| '/auth/registro'
|
|
124
|
+
| '/proyectos/$proyectoId'
|
|
125
|
+
id:
|
|
126
|
+
| '__root__'
|
|
127
|
+
| '/'
|
|
128
|
+
| '/contacto'
|
|
129
|
+
| '/dashbord'
|
|
130
|
+
| '/documentacion'
|
|
131
|
+
| '/perfil'
|
|
132
|
+
| '/proyectos'
|
|
133
|
+
| '/auth/iniciar-sesion'
|
|
134
|
+
| '/auth/registro'
|
|
135
|
+
| '/proyectos/$proyectoId'
|
|
136
|
+
fileRoutesById: FileRoutesById
|
|
137
|
+
}
|
|
138
|
+
export interface RootRouteChildren {
|
|
139
|
+
IndexRoute: typeof IndexRoute
|
|
140
|
+
ContactoRoute: typeof ContactoRoute
|
|
141
|
+
DashbordRoute: typeof DashbordRoute
|
|
142
|
+
DocumentacionRoute: typeof DocumentacionRoute
|
|
143
|
+
PerfilRoute: typeof PerfilRoute
|
|
144
|
+
ProyectosRoute: typeof ProyectosRouteWithChildren
|
|
145
|
+
AuthIniciarSesionRoute: typeof AuthIniciarSesionRoute
|
|
146
|
+
AuthRegistroRoute: typeof AuthRegistroRoute
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
declare module '@tanstack/react-router' {
|
|
150
|
+
interface FileRoutesByPath {
|
|
151
|
+
'/proyectos': {
|
|
152
|
+
id: '/proyectos'
|
|
153
|
+
path: '/proyectos'
|
|
154
|
+
fullPath: '/proyectos'
|
|
155
|
+
preLoaderRoute: typeof ProyectosRouteImport
|
|
156
|
+
parentRoute: typeof rootRouteImport
|
|
157
|
+
}
|
|
158
|
+
'/perfil': {
|
|
159
|
+
id: '/perfil'
|
|
160
|
+
path: '/perfil'
|
|
161
|
+
fullPath: '/perfil'
|
|
162
|
+
preLoaderRoute: typeof PerfilRouteImport
|
|
163
|
+
parentRoute: typeof rootRouteImport
|
|
164
|
+
}
|
|
165
|
+
'/documentacion': {
|
|
166
|
+
id: '/documentacion'
|
|
167
|
+
path: '/documentacion'
|
|
168
|
+
fullPath: '/documentacion'
|
|
169
|
+
preLoaderRoute: typeof DocumentacionRouteImport
|
|
170
|
+
parentRoute: typeof rootRouteImport
|
|
171
|
+
}
|
|
172
|
+
'/dashbord': {
|
|
173
|
+
id: '/dashbord'
|
|
174
|
+
path: '/dashbord'
|
|
175
|
+
fullPath: '/dashbord'
|
|
176
|
+
preLoaderRoute: typeof DashbordRouteImport
|
|
177
|
+
parentRoute: typeof rootRouteImport
|
|
178
|
+
}
|
|
179
|
+
'/contacto': {
|
|
180
|
+
id: '/contacto'
|
|
181
|
+
path: '/contacto'
|
|
182
|
+
fullPath: '/contacto'
|
|
183
|
+
preLoaderRoute: typeof ContactoRouteImport
|
|
184
|
+
parentRoute: typeof rootRouteImport
|
|
185
|
+
}
|
|
186
|
+
'/': {
|
|
187
|
+
id: '/'
|
|
188
|
+
path: '/'
|
|
189
|
+
fullPath: '/'
|
|
190
|
+
preLoaderRoute: typeof IndexRouteImport
|
|
191
|
+
parentRoute: typeof rootRouteImport
|
|
192
|
+
}
|
|
193
|
+
'/proyectos/$proyectoId': {
|
|
194
|
+
id: '/proyectos/$proyectoId'
|
|
195
|
+
path: '/$proyectoId'
|
|
196
|
+
fullPath: '/proyectos/$proyectoId'
|
|
197
|
+
preLoaderRoute: typeof ProyectosProyectoIdRouteImport
|
|
198
|
+
parentRoute: typeof ProyectosRoute
|
|
199
|
+
}
|
|
200
|
+
'/auth/registro': {
|
|
201
|
+
id: '/auth/registro'
|
|
202
|
+
path: '/auth/registro'
|
|
203
|
+
fullPath: '/auth/registro'
|
|
204
|
+
preLoaderRoute: typeof AuthRegistroRouteImport
|
|
205
|
+
parentRoute: typeof rootRouteImport
|
|
206
|
+
}
|
|
207
|
+
'/auth/iniciar-sesion': {
|
|
208
|
+
id: '/auth/iniciar-sesion'
|
|
209
|
+
path: '/auth/iniciar-sesion'
|
|
210
|
+
fullPath: '/auth/iniciar-sesion'
|
|
211
|
+
preLoaderRoute: typeof AuthIniciarSesionRouteImport
|
|
212
|
+
parentRoute: typeof rootRouteImport
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
interface ProyectosRouteChildren {
|
|
218
|
+
ProyectosProyectoIdRoute: typeof ProyectosProyectoIdRoute
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const ProyectosRouteChildren: ProyectosRouteChildren = {
|
|
222
|
+
ProyectosProyectoIdRoute: ProyectosProyectoIdRoute,
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const ProyectosRouteWithChildren = ProyectosRoute._addFileChildren(
|
|
226
|
+
ProyectosRouteChildren,
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
const rootRouteChildren: RootRouteChildren = {
|
|
230
|
+
IndexRoute: IndexRoute,
|
|
231
|
+
ContactoRoute: ContactoRoute,
|
|
232
|
+
DashbordRoute: DashbordRoute,
|
|
233
|
+
DocumentacionRoute: DocumentacionRoute,
|
|
234
|
+
PerfilRoute: PerfilRoute,
|
|
235
|
+
ProyectosRoute: ProyectosRouteWithChildren,
|
|
236
|
+
AuthIniciarSesionRoute: AuthIniciarSesionRoute,
|
|
237
|
+
AuthRegistroRoute: AuthRegistroRoute,
|
|
238
|
+
}
|
|
239
|
+
export const routeTree = rootRouteImport
|
|
240
|
+
._addFileChildren(rootRouteChildren)
|
|
241
|
+
._addFileTypes<FileRouteTypes>()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createRouter } from '@tanstack/react-router'
|
|
2
|
+
import { routeTree } from './routeTree.gen'
|
|
3
|
+
|
|
4
|
+
export const router = createRouter({
|
|
5
|
+
routeTree,
|
|
6
|
+
defaultPreload: 'intent',
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
declare module '@tanstack/react-router' {
|
|
10
|
+
interface Register {
|
|
11
|
+
router: typeof router
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createRootRoute, Link, Outlet } from "@tanstack/react-router";
|
|
2
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
|
3
|
+
import { Button } from "@/components/ui/button";
|
|
4
|
+
|
|
5
|
+
function NotFound() {
|
|
6
|
+
return (
|
|
7
|
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
|
|
8
|
+
<Card>
|
|
9
|
+
<CardHeader>
|
|
10
|
+
<CardTitle className="text-4xl">404 - Página no encontrada</CardTitle>
|
|
11
|
+
<CardDescription>La página que buscas no existe o ha sido movida.</CardDescription>
|
|
12
|
+
</CardHeader>
|
|
13
|
+
<CardContent>
|
|
14
|
+
<Button asChild>
|
|
15
|
+
<Link to="/">Volver al inicio</Link>
|
|
16
|
+
</Button>
|
|
17
|
+
</CardContent>
|
|
18
|
+
</Card>
|
|
19
|
+
</div>
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const Route = createRootRoute({
|
|
24
|
+
component: () => (
|
|
25
|
+
<>
|
|
26
|
+
<div className="min-h-screen bg-base-100">
|
|
27
|
+
{/* Header */}
|
|
28
|
+
<header className="bg-base-100 shadow-sm">
|
|
29
|
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
30
|
+
<div className="flex justify-between items-center py-6">
|
|
31
|
+
<div className="flex items-center">
|
|
32
|
+
<Link to="/" className="text-2xl font-bold text-base-content">
|
|
33
|
+
Huenei
|
|
34
|
+
</Link>
|
|
35
|
+
</div>
|
|
36
|
+
<nav className="hidden md:flex space-x-8">
|
|
37
|
+
<Link
|
|
38
|
+
to="/"
|
|
39
|
+
className="text-base-content/70 hover:text-base-content transition-colors [&.active]:text-base-content [&.active]:font-semibold"
|
|
40
|
+
>
|
|
41
|
+
Inicio
|
|
42
|
+
</Link>
|
|
43
|
+
<Link
|
|
44
|
+
to="/proyectos"
|
|
45
|
+
className="text-base-content/70 hover:text-base-content transition-colors [&.active]:text-base-content [&.active]:font-semibold"
|
|
46
|
+
>
|
|
47
|
+
Proyectos
|
|
48
|
+
</Link>
|
|
49
|
+
<Link
|
|
50
|
+
to="/documentacion"
|
|
51
|
+
className="text-base-content/70 hover:text-base-content transition-colors [&.active]:text-base-content [&.active]:font-semibold"
|
|
52
|
+
>
|
|
53
|
+
Documentación
|
|
54
|
+
</Link>
|
|
55
|
+
<Link
|
|
56
|
+
to="/contacto"
|
|
57
|
+
className="text-base-content/70 hover:text-base-content transition-colors [&.active]:text-base-content [&.active]:font-semibold"
|
|
58
|
+
>
|
|
59
|
+
Contacto
|
|
60
|
+
</Link>
|
|
61
|
+
</nav>
|
|
62
|
+
<div className="flex items-center gap-3">
|
|
63
|
+
<Button variant="ghost" asChild>
|
|
64
|
+
<Link to="/auth/iniciar-sesion">Iniciar Sesión</Link>
|
|
65
|
+
</Button>
|
|
66
|
+
<Button asChild>
|
|
67
|
+
<Link to="/auth/registro">Registrarse</Link>
|
|
68
|
+
</Button>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</header>
|
|
73
|
+
|
|
74
|
+
{/* Main Content */}
|
|
75
|
+
<main>
|
|
76
|
+
<Outlet />
|
|
77
|
+
</main>
|
|
78
|
+
|
|
79
|
+
{/* Footer */}
|
|
80
|
+
<footer className="bg-base-100 border-t border-base-300 mt-16">
|
|
81
|
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
82
|
+
<div className="text-center text-base-content/70">
|
|
83
|
+
<p>© {new Date().getFullYear()} Huenei. Todos los derechos reservados.</p>
|
|
84
|
+
<p className="mt-2 text-sm">Template base para proyectos de frontend</p>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</footer>
|
|
88
|
+
</div>
|
|
89
|
+
</>
|
|
90
|
+
),
|
|
91
|
+
notFoundComponent: NotFound,
|
|
92
|
+
});
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { createFileRoute, Link } from "@tanstack/react-router";
|
|
2
|
+
import { useForm } from "react-hook-form";
|
|
3
|
+
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
|
|
4
|
+
import * as z from "zod";
|
|
5
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
|
6
|
+
import { Button } from "@/components/ui/button";
|
|
7
|
+
import { Input } from "@/components/ui/input";
|
|
8
|
+
import { PasswordInput } from "@/components/ui/password-input";
|
|
9
|
+
import {
|
|
10
|
+
Form,
|
|
11
|
+
FormControl,
|
|
12
|
+
FormField,
|
|
13
|
+
FormItem,
|
|
14
|
+
FormLabel,
|
|
15
|
+
FormMessage,
|
|
16
|
+
} from "@/components/ui/form";
|
|
17
|
+
import { Separator } from "@/components/ui/separator";
|
|
18
|
+
import { LogIn, Mail, Lock } from "lucide-react";
|
|
19
|
+
|
|
20
|
+
const loginSchema = z.object({
|
|
21
|
+
email: z.string().email("El email no es válido"),
|
|
22
|
+
password: z.string().min(6, "La contraseña debe tener al menos 6 caracteres"),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
type LoginFormValues = z.infer<typeof loginSchema>;
|
|
26
|
+
|
|
27
|
+
export const Route = createFileRoute("/auth/iniciar-sesion")({
|
|
28
|
+
component: RouteComponent,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
function RouteComponent() {
|
|
32
|
+
const form = useForm<LoginFormValues>({
|
|
33
|
+
resolver: standardSchemaResolver(loginSchema),
|
|
34
|
+
defaultValues: {
|
|
35
|
+
email: "",
|
|
36
|
+
password: "",
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const onSubmit = (data: LoginFormValues) => {
|
|
41
|
+
console.log("Login data:", data);
|
|
42
|
+
// Aquí iría la lógica de autenticación
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<div className="min-h-screen flex items-center justify-center bg-base-100 px-4 py-12">
|
|
47
|
+
<div className="w-full max-w-md">
|
|
48
|
+
<div className="text-center mb-8">
|
|
49
|
+
<h1 className="text-3xl font-bold text-base-content mb-2">
|
|
50
|
+
Iniciar Sesión
|
|
51
|
+
</h1>
|
|
52
|
+
<p className="text-base-content/70">
|
|
53
|
+
Ingresa tus credenciales para acceder a tu cuenta
|
|
54
|
+
</p>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<Card>
|
|
58
|
+
<CardHeader>
|
|
59
|
+
<CardTitle className="flex items-center gap-2">
|
|
60
|
+
<LogIn className="h-5 w-5" />
|
|
61
|
+
Acceso
|
|
62
|
+
</CardTitle>
|
|
63
|
+
<CardDescription>Completa los siguientes campos para iniciar sesión</CardDescription>
|
|
64
|
+
</CardHeader>
|
|
65
|
+
<CardContent>
|
|
66
|
+
<Form {...form}>
|
|
67
|
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
|
|
68
|
+
<FormField
|
|
69
|
+
control={form.control}
|
|
70
|
+
name="email"
|
|
71
|
+
render={({ field }) => (
|
|
72
|
+
<FormItem>
|
|
73
|
+
<FormLabel className="flex items-center gap-2">
|
|
74
|
+
<Mail className="h-4 w-4" />
|
|
75
|
+
Email
|
|
76
|
+
</FormLabel>
|
|
77
|
+
<FormControl>
|
|
78
|
+
<Input type="email" placeholder="tu@email.com" {...field} />
|
|
79
|
+
</FormControl>
|
|
80
|
+
<FormMessage />
|
|
81
|
+
</FormItem>
|
|
82
|
+
)}
|
|
83
|
+
/>
|
|
84
|
+
|
|
85
|
+
<FormField
|
|
86
|
+
control={form.control}
|
|
87
|
+
name="password"
|
|
88
|
+
render={({ field }) => (
|
|
89
|
+
<FormItem>
|
|
90
|
+
<FormLabel className="flex items-center gap-2">
|
|
91
|
+
<Lock className="h-4 w-4" />
|
|
92
|
+
Contraseña
|
|
93
|
+
</FormLabel>
|
|
94
|
+
<FormControl>
|
|
95
|
+
<PasswordInput placeholder="••••••••" {...field} />
|
|
96
|
+
</FormControl>
|
|
97
|
+
<FormMessage />
|
|
98
|
+
</FormItem>
|
|
99
|
+
)}
|
|
100
|
+
/>
|
|
101
|
+
|
|
102
|
+
<div className="flex items-center justify-between text-sm">
|
|
103
|
+
<label className="flex items-center gap-2 cursor-pointer">
|
|
104
|
+
<input type="checkbox" className="rounded border-border" />
|
|
105
|
+
<span className="text-base-content/70">Recordarme</span>
|
|
106
|
+
</label>
|
|
107
|
+
<button
|
|
108
|
+
type="button"
|
|
109
|
+
className="text-primary hover:underline"
|
|
110
|
+
onClick={() => {
|
|
111
|
+
// TODO: Implementar recuperación de contraseña
|
|
112
|
+
console.log("Recuperar contraseña");
|
|
113
|
+
}}
|
|
114
|
+
>
|
|
115
|
+
¿Olvidaste tu contraseña?
|
|
116
|
+
</button>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<Button type="submit" className="w-full" size="lg">
|
|
120
|
+
Iniciar Sesión
|
|
121
|
+
</Button>
|
|
122
|
+
</form>
|
|
123
|
+
</Form>
|
|
124
|
+
|
|
125
|
+
<div className="mt-6">
|
|
126
|
+
<Separator />
|
|
127
|
+
<div className="mt-6 text-center text-sm">
|
|
128
|
+
<span className="text-base-content/70">¿No tienes una cuenta? </span>
|
|
129
|
+
<Link to="/auth/registro" className="text-primary font-medium hover:underline">
|
|
130
|
+
Regístrate aquí
|
|
131
|
+
</Link>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</CardContent>
|
|
135
|
+
</Card>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
);
|
|
139
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { createFileRoute, Link } from "@tanstack/react-router";
|
|
2
|
+
import { useForm } from "react-hook-form";
|
|
3
|
+
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
|
|
4
|
+
import * as z from "zod";
|
|
5
|
+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
|
6
|
+
import { Button } from "@/components/ui/button";
|
|
7
|
+
import { Input } from "@/components/ui/input";
|
|
8
|
+
import { PasswordInput } from "@/components/ui/password-input";
|
|
9
|
+
import {
|
|
10
|
+
Form,
|
|
11
|
+
FormControl,
|
|
12
|
+
FormField,
|
|
13
|
+
FormItem,
|
|
14
|
+
FormLabel,
|
|
15
|
+
FormMessage,
|
|
16
|
+
} from "@/components/ui/form";
|
|
17
|
+
import { Separator } from "@/components/ui/separator";
|
|
18
|
+
import { UserPlus, Mail, Lock, User } from "lucide-react";
|
|
19
|
+
|
|
20
|
+
const registerSchema = z
|
|
21
|
+
.object({
|
|
22
|
+
name: z.string().min(2, "El nombre debe tener al menos 2 caracteres"),
|
|
23
|
+
email: z.string().email("El email no es válido"),
|
|
24
|
+
password: z
|
|
25
|
+
.string()
|
|
26
|
+
.min(8, "La contraseña debe tener al menos 8 caracteres")
|
|
27
|
+
.regex(
|
|
28
|
+
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/,
|
|
29
|
+
"La contraseña debe contener al menos una mayúscula, una minúscula y un número"
|
|
30
|
+
),
|
|
31
|
+
confirmPassword: z.string(),
|
|
32
|
+
})
|
|
33
|
+
.refine((data) => data.password === data.confirmPassword, {
|
|
34
|
+
message: "Las contraseñas no coinciden",
|
|
35
|
+
path: ["confirmPassword"],
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
type RegisterFormValues = z.infer<typeof registerSchema>;
|
|
39
|
+
|
|
40
|
+
export const Route = createFileRoute("/auth/registro")({
|
|
41
|
+
component: RouteComponent,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
function RouteComponent() {
|
|
45
|
+
const form = useForm<RegisterFormValues>({
|
|
46
|
+
resolver: standardSchemaResolver(registerSchema),
|
|
47
|
+
defaultValues: {
|
|
48
|
+
name: "",
|
|
49
|
+
email: "",
|
|
50
|
+
password: "",
|
|
51
|
+
confirmPassword: "",
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const onSubmit = (data: RegisterFormValues) => {
|
|
56
|
+
console.log("Register data:", data);
|
|
57
|
+
// Aquí iría la lógica de registro
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<div className="min-h-screen flex items-center justify-center bg-base-100 px-4 py-12">
|
|
62
|
+
<div className="w-full max-w-md">
|
|
63
|
+
<div className="text-center mb-8">
|
|
64
|
+
<h1 className="text-3xl font-bold text-base-content mb-2">
|
|
65
|
+
Crear Cuenta
|
|
66
|
+
</h1>
|
|
67
|
+
<p className="text-base-content/70">
|
|
68
|
+
Completa el formulario para crear tu cuenta
|
|
69
|
+
</p>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
<Card>
|
|
73
|
+
<CardHeader>
|
|
74
|
+
<CardTitle className="flex items-center gap-2">
|
|
75
|
+
<UserPlus className="h-5 w-5" />
|
|
76
|
+
Registro
|
|
77
|
+
</CardTitle>
|
|
78
|
+
<CardDescription>Ingresa tus datos para crear una nueva cuenta</CardDescription>
|
|
79
|
+
</CardHeader>
|
|
80
|
+
<CardContent>
|
|
81
|
+
<Form {...form}>
|
|
82
|
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
|
|
83
|
+
<FormField
|
|
84
|
+
control={form.control}
|
|
85
|
+
name="name"
|
|
86
|
+
render={({ field }) => (
|
|
87
|
+
<FormItem>
|
|
88
|
+
<FormLabel className="flex items-center gap-2">
|
|
89
|
+
<User className="h-4 w-4" />
|
|
90
|
+
Nombre completo
|
|
91
|
+
</FormLabel>
|
|
92
|
+
<FormControl>
|
|
93
|
+
<Input type="text" placeholder="Juan Pérez" {...field} />
|
|
94
|
+
</FormControl>
|
|
95
|
+
<FormMessage />
|
|
96
|
+
</FormItem>
|
|
97
|
+
)}
|
|
98
|
+
/>
|
|
99
|
+
|
|
100
|
+
<FormField
|
|
101
|
+
control={form.control}
|
|
102
|
+
name="email"
|
|
103
|
+
render={({ field }) => (
|
|
104
|
+
<FormItem>
|
|
105
|
+
<FormLabel className="flex items-center gap-2">
|
|
106
|
+
<Mail className="h-4 w-4" />
|
|
107
|
+
Email
|
|
108
|
+
</FormLabel>
|
|
109
|
+
<FormControl>
|
|
110
|
+
<Input type="email" placeholder="tu@email.com" {...field} />
|
|
111
|
+
</FormControl>
|
|
112
|
+
<FormMessage />
|
|
113
|
+
</FormItem>
|
|
114
|
+
)}
|
|
115
|
+
/>
|
|
116
|
+
|
|
117
|
+
<FormField
|
|
118
|
+
control={form.control}
|
|
119
|
+
name="password"
|
|
120
|
+
render={({ field }) => (
|
|
121
|
+
<FormItem>
|
|
122
|
+
<FormLabel className="flex items-center gap-2">
|
|
123
|
+
<Lock className="h-4 w-4" />
|
|
124
|
+
Contraseña
|
|
125
|
+
</FormLabel>
|
|
126
|
+
<FormControl>
|
|
127
|
+
<PasswordInput placeholder="••••••••" {...field} />
|
|
128
|
+
</FormControl>
|
|
129
|
+
<FormMessage />
|
|
130
|
+
<p className="text-xs text-muted-foreground">
|
|
131
|
+
Mínimo 8 caracteres, con mayúscula, minúscula y número
|
|
132
|
+
</p>
|
|
133
|
+
</FormItem>
|
|
134
|
+
)}
|
|
135
|
+
/>
|
|
136
|
+
|
|
137
|
+
<FormField
|
|
138
|
+
control={form.control}
|
|
139
|
+
name="confirmPassword"
|
|
140
|
+
render={({ field }) => (
|
|
141
|
+
<FormItem>
|
|
142
|
+
<FormLabel className="flex items-center gap-2">
|
|
143
|
+
<Lock className="h-4 w-4" />
|
|
144
|
+
Confirmar contraseña
|
|
145
|
+
</FormLabel>
|
|
146
|
+
<FormControl>
|
|
147
|
+
<PasswordInput placeholder="••••••••" {...field} />
|
|
148
|
+
</FormControl>
|
|
149
|
+
<FormMessage />
|
|
150
|
+
</FormItem>
|
|
151
|
+
)}
|
|
152
|
+
/>
|
|
153
|
+
|
|
154
|
+
<div className="flex items-start gap-2 text-sm">
|
|
155
|
+
<input type="checkbox" className="mt-1 rounded border-border" required />
|
|
156
|
+
<span className="text-base-content/70">
|
|
157
|
+
Acepto los{" "}
|
|
158
|
+
<button
|
|
159
|
+
type="button"
|
|
160
|
+
className="text-primary hover:underline"
|
|
161
|
+
onClick={() => {
|
|
162
|
+
// TODO: Implementar página de términos
|
|
163
|
+
console.log("Términos y condiciones");
|
|
164
|
+
}}
|
|
165
|
+
>
|
|
166
|
+
términos y condiciones
|
|
167
|
+
</button>{" "}
|
|
168
|
+
y la{" "}
|
|
169
|
+
<button
|
|
170
|
+
type="button"
|
|
171
|
+
className="text-primary hover:underline"
|
|
172
|
+
onClick={() => {
|
|
173
|
+
// TODO: Implementar página de privacidad
|
|
174
|
+
console.log("Política de privacidad");
|
|
175
|
+
}}
|
|
176
|
+
>
|
|
177
|
+
política de privacidad
|
|
178
|
+
</button>
|
|
179
|
+
</span>
|
|
180
|
+
</div>
|
|
181
|
+
|
|
182
|
+
<Button type="submit" className="w-full" size="lg">
|
|
183
|
+
Crear Cuenta
|
|
184
|
+
</Button>
|
|
185
|
+
</form>
|
|
186
|
+
</Form>
|
|
187
|
+
|
|
188
|
+
<div className="mt-6">
|
|
189
|
+
<Separator />
|
|
190
|
+
<div className="mt-6 text-center text-sm">
|
|
191
|
+
<span className="text-base-content/70">¿Ya tienes una cuenta? </span>
|
|
192
|
+
<Link
|
|
193
|
+
to="/auth/iniciar-sesion"
|
|
194
|
+
className="text-primary font-medium hover:underline"
|
|
195
|
+
>
|
|
196
|
+
Inicia sesión aquí
|
|
197
|
+
</Link>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</CardContent>
|
|
201
|
+
</Card>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
);
|
|
205
|
+
}
|