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.
Files changed (222) hide show
  1. package/bin/create-huenei-frontend.js +2 -0
  2. package/dist/index.js +99 -0
  3. package/dist/templates/clean/.cursor/skills/architecture/SKILL.md +26 -0
  4. package/dist/templates/clean/.cursor/skills/components-shadcn/SKILL.md +23 -0
  5. package/dist/templates/clean/.cursor/skills/daisyui/SKILL.md +98 -0
  6. package/dist/templates/clean/.cursor/skills/routing/SKILL.md +32 -0
  7. package/dist/templates/clean/.cursor/skills/testing/SKILL.md +55 -0
  8. package/dist/templates/clean/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
  9. package/dist/templates/clean/.cursor/skills/ui-and-styling/SKILL.md +32 -0
  10. package/dist/templates/clean/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
  11. package/dist/templates/clean/.prettierrc +6 -0
  12. package/dist/templates/clean/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
  13. package/dist/templates/clean/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
  14. package/dist/templates/clean/.vscode/extensions.json +7 -0
  15. package/dist/templates/clean/README.md +75 -0
  16. package/dist/templates/clean/components.json +22 -0
  17. package/dist/templates/clean/eslint.config.js +31 -0
  18. package/dist/templates/clean/index.html +13 -0
  19. package/dist/templates/clean/package.json +62 -0
  20. package/dist/templates/clean/pnpm-lock.yaml +4487 -0
  21. package/dist/templates/clean/pnpm-workspace.yaml +2 -0
  22. package/dist/templates/clean/src/assets/react.svg +1 -0
  23. package/dist/templates/clean/src/components/ui/badge.tsx +37 -0
  24. package/dist/templates/clean/src/components/ui/breadcrumb.tsx +106 -0
  25. package/dist/templates/clean/src/components/ui/button.tsx +58 -0
  26. package/dist/templates/clean/src/components/ui/card.tsx +72 -0
  27. package/dist/templates/clean/src/components/ui/form.tsx +165 -0
  28. package/dist/templates/clean/src/components/ui/input.tsx +22 -0
  29. package/dist/templates/clean/src/components/ui/label.tsx +24 -0
  30. package/dist/templates/clean/src/components/ui/password-input.tsx +41 -0
  31. package/dist/templates/clean/src/components/ui/separator.tsx +28 -0
  32. package/dist/templates/clean/src/components/ui/tabs.tsx +62 -0
  33. package/dist/templates/clean/src/components/ui/textarea.tsx +21 -0
  34. package/dist/templates/clean/src/index.css +104 -0
  35. package/dist/templates/clean/src/lib/queryClient.ts +11 -0
  36. package/dist/templates/clean/src/lib/utils.ts +6 -0
  37. package/dist/templates/clean/src/main.tsx +33 -0
  38. package/dist/templates/clean/src/routeTree.gen.ts +77 -0
  39. package/dist/templates/clean/src/router.tsx +13 -0
  40. package/dist/templates/clean/src/routes/__root.tsx +82 -0
  41. package/dist/templates/clean/src/routes/index.tsx +187 -0
  42. package/dist/templates/clean/src/routes/otra-ruta.tsx +319 -0
  43. package/dist/templates/clean/src/test/setup.ts +1 -0
  44. package/dist/templates/clean/tsconfig.app.json +34 -0
  45. package/dist/templates/clean/tsconfig.json +10 -0
  46. package/dist/templates/clean/tsconfig.node.json +26 -0
  47. package/dist/templates/clean/vite.config.ts +22 -0
  48. package/dist/templates/clean/vitest.config.ts +9 -0
  49. package/dist/templates/help/.cursor/skills/architecture/SKILL.md +26 -0
  50. package/dist/templates/help/.cursor/skills/components-shadcn/SKILL.md +23 -0
  51. package/dist/templates/help/.cursor/skills/daisyui/SKILL.md +98 -0
  52. package/dist/templates/help/.cursor/skills/routing/SKILL.md +32 -0
  53. package/dist/templates/help/.cursor/skills/testing/SKILL.md +55 -0
  54. package/dist/templates/help/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
  55. package/dist/templates/help/.cursor/skills/ui-and-styling/SKILL.md +32 -0
  56. package/dist/templates/help/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
  57. package/dist/templates/help/.prettierrc +6 -0
  58. package/dist/templates/help/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
  59. package/dist/templates/help/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
  60. package/dist/templates/help/.vscode/extensions.json +7 -0
  61. package/dist/templates/help/README.md +75 -0
  62. package/dist/templates/help/components.json +22 -0
  63. package/dist/templates/help/eslint.config.js +31 -0
  64. package/dist/templates/help/index.html +13 -0
  65. package/dist/templates/help/package.json +62 -0
  66. package/dist/templates/help/pnpm-lock.yaml +4487 -0
  67. package/dist/templates/help/pnpm-workspace.yaml +2 -0
  68. package/dist/templates/help/src/assets/react.svg +1 -0
  69. package/dist/templates/help/src/components/documentacion/entorno.tsx +99 -0
  70. package/dist/templates/help/src/components/documentacion/estructura.tsx +100 -0
  71. package/dist/templates/help/src/components/documentacion/figma-mcp.tsx +200 -0
  72. package/dist/templates/help/src/components/documentacion/inicio.tsx +69 -0
  73. package/dist/templates/help/src/components/documentacion/instalacion.tsx +72 -0
  74. package/dist/templates/help/src/components/documentacion/personalizacion.tsx +163 -0
  75. package/dist/templates/help/src/components/documentacion/rutas.tsx +138 -0
  76. package/dist/templates/help/src/components/documentacion/stack.tsx +401 -0
  77. package/dist/templates/help/src/components/ui/badge.tsx +37 -0
  78. package/dist/templates/help/src/components/ui/breadcrumb.tsx +106 -0
  79. package/dist/templates/help/src/components/ui/button.tsx +58 -0
  80. package/dist/templates/help/src/components/ui/card.tsx +72 -0
  81. package/dist/templates/help/src/components/ui/form.tsx +165 -0
  82. package/dist/templates/help/src/components/ui/input.tsx +22 -0
  83. package/dist/templates/help/src/components/ui/label.tsx +24 -0
  84. package/dist/templates/help/src/components/ui/password-input.tsx +41 -0
  85. package/dist/templates/help/src/components/ui/separator.tsx +28 -0
  86. package/dist/templates/help/src/components/ui/tabs.tsx +62 -0
  87. package/dist/templates/help/src/components/ui/textarea.tsx +21 -0
  88. package/dist/templates/help/src/data/proyectos.json +56 -0
  89. package/dist/templates/help/src/index.css +104 -0
  90. package/dist/templates/help/src/lib/queryClient.ts +11 -0
  91. package/dist/templates/help/src/lib/utils.ts +6 -0
  92. package/dist/templates/help/src/main.tsx +33 -0
  93. package/dist/templates/help/src/routeTree.gen.ts +241 -0
  94. package/dist/templates/help/src/router.tsx +13 -0
  95. package/dist/templates/help/src/routes/__root.tsx +92 -0
  96. package/dist/templates/help/src/routes/auth/iniciar-sesion.tsx +139 -0
  97. package/dist/templates/help/src/routes/auth/registro.tsx +205 -0
  98. package/dist/templates/help/src/routes/contacto.tsx +60 -0
  99. package/dist/templates/help/src/routes/dashbord.tsx +9 -0
  100. package/dist/templates/help/src/routes/documentacion.tsx +80 -0
  101. package/dist/templates/help/src/routes/index.test.tsx +42 -0
  102. package/dist/templates/help/src/routes/index.tsx +211 -0
  103. package/dist/templates/help/src/routes/perfil.tsx +9 -0
  104. package/dist/templates/help/src/routes/proyectos.$proyectoId.tsx +156 -0
  105. package/dist/templates/help/src/routes/proyectos.tsx +93 -0
  106. package/dist/templates/help/src/test/setup.ts +1 -0
  107. package/dist/templates/help/tsconfig.app.json +34 -0
  108. package/dist/templates/help/tsconfig.json +10 -0
  109. package/dist/templates/help/tsconfig.node.json +26 -0
  110. package/dist/templates/help/vite.config.ts +22 -0
  111. package/dist/templates/help/vitest.config.ts +9 -0
  112. package/dist/test-cli.js +48 -0
  113. package/package.json +25 -0
  114. package/templates/clean/.cursor/skills/architecture/SKILL.md +26 -0
  115. package/templates/clean/.cursor/skills/components-shadcn/SKILL.md +23 -0
  116. package/templates/clean/.cursor/skills/daisyui/SKILL.md +98 -0
  117. package/templates/clean/.cursor/skills/routing/SKILL.md +32 -0
  118. package/templates/clean/.cursor/skills/testing/SKILL.md +55 -0
  119. package/templates/clean/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
  120. package/templates/clean/.cursor/skills/ui-and-styling/SKILL.md +32 -0
  121. package/templates/clean/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
  122. package/templates/clean/.prettierrc +6 -0
  123. package/templates/clean/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
  124. package/templates/clean/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
  125. package/templates/clean/.vscode/extensions.json +7 -0
  126. package/templates/clean/README.md +75 -0
  127. package/templates/clean/components.json +22 -0
  128. package/templates/clean/eslint.config.js +31 -0
  129. package/templates/clean/index.html +13 -0
  130. package/templates/clean/package.json +62 -0
  131. package/templates/clean/pnpm-lock.yaml +4487 -0
  132. package/templates/clean/pnpm-workspace.yaml +2 -0
  133. package/templates/clean/src/assets/react.svg +1 -0
  134. package/templates/clean/src/components/ui/badge.tsx +37 -0
  135. package/templates/clean/src/components/ui/breadcrumb.tsx +106 -0
  136. package/templates/clean/src/components/ui/button.tsx +58 -0
  137. package/templates/clean/src/components/ui/card.tsx +72 -0
  138. package/templates/clean/src/components/ui/form.tsx +165 -0
  139. package/templates/clean/src/components/ui/input.tsx +22 -0
  140. package/templates/clean/src/components/ui/label.tsx +24 -0
  141. package/templates/clean/src/components/ui/password-input.tsx +41 -0
  142. package/templates/clean/src/components/ui/separator.tsx +28 -0
  143. package/templates/clean/src/components/ui/tabs.tsx +62 -0
  144. package/templates/clean/src/components/ui/textarea.tsx +21 -0
  145. package/templates/clean/src/index.css +104 -0
  146. package/templates/clean/src/lib/queryClient.ts +11 -0
  147. package/templates/clean/src/lib/utils.ts +6 -0
  148. package/templates/clean/src/main.tsx +33 -0
  149. package/templates/clean/src/routeTree.gen.ts +77 -0
  150. package/templates/clean/src/router.tsx +13 -0
  151. package/templates/clean/src/routes/__root.tsx +82 -0
  152. package/templates/clean/src/routes/index.tsx +187 -0
  153. package/templates/clean/src/routes/otra-ruta.tsx +319 -0
  154. package/templates/clean/src/test/setup.ts +1 -0
  155. package/templates/clean/tsconfig.app.json +34 -0
  156. package/templates/clean/tsconfig.json +10 -0
  157. package/templates/clean/tsconfig.node.json +26 -0
  158. package/templates/clean/vite.config.ts +22 -0
  159. package/templates/clean/vitest.config.ts +9 -0
  160. package/templates/help/.cursor/skills/architecture/SKILL.md +26 -0
  161. package/templates/help/.cursor/skills/components-shadcn/SKILL.md +23 -0
  162. package/templates/help/.cursor/skills/daisyui/SKILL.md +98 -0
  163. package/templates/help/.cursor/skills/routing/SKILL.md +32 -0
  164. package/templates/help/.cursor/skills/testing/SKILL.md +55 -0
  165. package/templates/help/.cursor/skills/tooling-and-scripts/SKILL.md +24 -0
  166. package/templates/help/.cursor/skills/ui-and-styling/SKILL.md +32 -0
  167. package/templates/help/.cursor/skills/vibe-and-ia/SKILL.md +23 -0
  168. package/templates/help/.prettierrc +6 -0
  169. package/templates/help/.tanstack/tmp/c28007bb-2319511cf318e28129c8d8eb723db5fd +9 -0
  170. package/templates/help/.tanstack/tmp/c28007bb-bcef89e9e4593777e1c15ec4b4f32eea +9 -0
  171. package/templates/help/.vscode/extensions.json +7 -0
  172. package/templates/help/README.md +75 -0
  173. package/templates/help/components.json +22 -0
  174. package/templates/help/eslint.config.js +31 -0
  175. package/templates/help/index.html +13 -0
  176. package/templates/help/package.json +62 -0
  177. package/templates/help/pnpm-lock.yaml +4487 -0
  178. package/templates/help/pnpm-workspace.yaml +2 -0
  179. package/templates/help/src/assets/react.svg +1 -0
  180. package/templates/help/src/components/documentacion/entorno.tsx +99 -0
  181. package/templates/help/src/components/documentacion/estructura.tsx +100 -0
  182. package/templates/help/src/components/documentacion/figma-mcp.tsx +200 -0
  183. package/templates/help/src/components/documentacion/inicio.tsx +69 -0
  184. package/templates/help/src/components/documentacion/instalacion.tsx +72 -0
  185. package/templates/help/src/components/documentacion/personalizacion.tsx +163 -0
  186. package/templates/help/src/components/documentacion/rutas.tsx +138 -0
  187. package/templates/help/src/components/documentacion/stack.tsx +401 -0
  188. package/templates/help/src/components/ui/badge.tsx +37 -0
  189. package/templates/help/src/components/ui/breadcrumb.tsx +106 -0
  190. package/templates/help/src/components/ui/button.tsx +58 -0
  191. package/templates/help/src/components/ui/card.tsx +72 -0
  192. package/templates/help/src/components/ui/form.tsx +165 -0
  193. package/templates/help/src/components/ui/input.tsx +22 -0
  194. package/templates/help/src/components/ui/label.tsx +24 -0
  195. package/templates/help/src/components/ui/password-input.tsx +41 -0
  196. package/templates/help/src/components/ui/separator.tsx +28 -0
  197. package/templates/help/src/components/ui/tabs.tsx +62 -0
  198. package/templates/help/src/components/ui/textarea.tsx +21 -0
  199. package/templates/help/src/data/proyectos.json +56 -0
  200. package/templates/help/src/index.css +104 -0
  201. package/templates/help/src/lib/queryClient.ts +11 -0
  202. package/templates/help/src/lib/utils.ts +6 -0
  203. package/templates/help/src/main.tsx +33 -0
  204. package/templates/help/src/routeTree.gen.ts +241 -0
  205. package/templates/help/src/router.tsx +13 -0
  206. package/templates/help/src/routes/__root.tsx +92 -0
  207. package/templates/help/src/routes/auth/iniciar-sesion.tsx +139 -0
  208. package/templates/help/src/routes/auth/registro.tsx +205 -0
  209. package/templates/help/src/routes/contacto.tsx +60 -0
  210. package/templates/help/src/routes/dashbord.tsx +9 -0
  211. package/templates/help/src/routes/documentacion.tsx +80 -0
  212. package/templates/help/src/routes/index.test.tsx +42 -0
  213. package/templates/help/src/routes/index.tsx +211 -0
  214. package/templates/help/src/routes/perfil.tsx +9 -0
  215. package/templates/help/src/routes/proyectos.$proyectoId.tsx +156 -0
  216. package/templates/help/src/routes/proyectos.tsx +93 -0
  217. package/templates/help/src/test/setup.ts +1 -0
  218. package/templates/help/tsconfig.app.json +34 -0
  219. package/templates/help/tsconfig.json +10 -0
  220. package/templates/help/tsconfig.node.json +26 -0
  221. package/templates/help/vite.config.ts +22 -0
  222. 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>&copy; {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
+ }