lkd-web-kit 0.10.4 → 0.10.6
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/.agents/skills/create-nextjs-page/SKILL.md +104 -0
- package/.agents/skills/create-nextjs-page/agents/openai.yaml +3 -0
- package/dist/mantine/my-default-theme.cjs +2 -1
- package/dist/mantine/my-default-theme.d.ts.map +1 -1
- package/dist/mantine/my-default-theme.js +2 -1
- package/package.json +1 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-nextjs-page
|
|
3
|
+
description: Crear o refactorizar paginas de Next.js App Router manteniendo app limpio y delegando la UI a componentes de pagina en src/components/pages. Usar cuando Codex deba crear page.tsx, mover UI fuera de app, organizar subcomponentes privados de una pagina, envolver paginas con PageProviders o normalizar nombres/rutas de componentes Page en proyectos que consumen lkd-web-kit.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Create Next.js Page
|
|
7
|
+
|
|
8
|
+
Usar este skill para crear o refactorizar paginas de Next.js App Router en proyectos que usan `lkd-web-kit`.
|
|
9
|
+
|
|
10
|
+
## Lectura obligatoria
|
|
11
|
+
|
|
12
|
+
1. Leer la documentacion relevante de Next.js antes de tocar rutas. Si existe `node_modules/next/dist/docs/`, usarla como fuente local.
|
|
13
|
+
2. Leer la documentacion local del proyecto sobre `lkd-web-kit`, componentes compartidos y patrones de UI si existe.
|
|
14
|
+
3. Revisar una pagina cercana antes de editar para respetar imports, providers, carga de datos, traducciones y convenciones del proyecto.
|
|
15
|
+
|
|
16
|
+
## Regla principal
|
|
17
|
+
|
|
18
|
+
- Mantener `app` como capa de routing de Next.js.
|
|
19
|
+
- En `app`, dejar solo `layout.tsx`, `page.tsx` y archivos especiales de Next.js cuando correspondan: `not-found.tsx`, `loading.tsx`, `error.tsx`, `route.ts`, `template.tsx`, `default.tsx` o metadata files.
|
|
20
|
+
- No colocar vistas, subcomponentes, hooks privados, helpers de UI, schemas, columnas de tabla ni componentes de pagina dentro de `app`.
|
|
21
|
+
- Colocar la UI real de cada ruta en `src/components/pages`.
|
|
22
|
+
|
|
23
|
+
## Estructura de pagina
|
|
24
|
+
|
|
25
|
+
Para una pagina simple:
|
|
26
|
+
|
|
27
|
+
```txt
|
|
28
|
+
src/app/[locale]/(app-layout)/development/page.tsx
|
|
29
|
+
src/components/pages/app/DevelopmentPage.tsx
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Para una pagina con subcomponentes privados:
|
|
33
|
+
|
|
34
|
+
```txt
|
|
35
|
+
src/app/[locale]/(app-layout)/development/page.tsx
|
|
36
|
+
src/components/pages/app/DevelopmentPage/index.tsx
|
|
37
|
+
src/components/pages/app/DevelopmentPage/Header.tsx
|
|
38
|
+
src/components/pages/app/DevelopmentPage/helpers.ts
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
- Usar archivo plano `{PageName}Page.tsx` si el componente es de una pieza.
|
|
42
|
+
- Usar carpeta `{PageName}Page/index.tsx` si hay subcomponentes, helpers, schemas o piezas privadas.
|
|
43
|
+
- Mantener dentro de esa carpeta solo lo privado de esa pagina.
|
|
44
|
+
- Mover a componentes compartidos solo cuando exista reutilizacion real.
|
|
45
|
+
|
|
46
|
+
## PageProviders
|
|
47
|
+
|
|
48
|
+
Cada `page.tsx` debe retornar el componente Page envuelto con `PageProviders`.
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
import PageProviders from "src/app/PageProviders";
|
|
52
|
+
import DevelopmentPage from "src/components/pages/app/DevelopmentPage";
|
|
53
|
+
|
|
54
|
+
const Page = async () => {
|
|
55
|
+
return (
|
|
56
|
+
<PageProviders>
|
|
57
|
+
<DevelopmentPage />
|
|
58
|
+
</PageProviders>
|
|
59
|
+
);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export default Page;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- Usar el import real de `PageProviders` del proyecto si difiere del ejemplo.
|
|
66
|
+
- Pasar a `PageProviders` solo las props que existan y sean necesarias en ese proyecto.
|
|
67
|
+
- Mantener en `page.tsx` solo responsabilidades de entrypoint: params, metadata, fetch server-side, redirects/notFound y providers.
|
|
68
|
+
- No duplicar providers dentro del componente de pagina salvo que el proyecto tenga una razon documentada.
|
|
69
|
+
|
|
70
|
+
## Mapeo de area
|
|
71
|
+
|
|
72
|
+
Derivar `{area}` desde el route group principal cuando exista:
|
|
73
|
+
|
|
74
|
+
- `(app-layout)` -> `app`
|
|
75
|
+
- `(admin-layout)` -> `admin`
|
|
76
|
+
- `(home-layout)` -> `home`
|
|
77
|
+
- `(developer-layout)` -> `developer`
|
|
78
|
+
- `(agency-layout)` -> `agency`
|
|
79
|
+
|
|
80
|
+
Regla general:
|
|
81
|
+
|
|
82
|
+
- Si el route group termina en `-layout`, quitar ese sufijo.
|
|
83
|
+
- Si no termina en `-layout`, usar el nombre limpio del group sin parentesis.
|
|
84
|
+
- Si no hay route group claro, usar el primer segmento estable de la ruta.
|
|
85
|
+
- Ignorar `[locale]`, route groups y segmentos dinamicos para elegir el area.
|
|
86
|
+
|
|
87
|
+
## Nombres
|
|
88
|
+
|
|
89
|
+
- Usar PascalCase y sufijo `Page`.
|
|
90
|
+
- Para rutas estaticas, usar el ultimo segmento estable: `(app-layout)/development/page.tsx` -> `DevelopmentPage`.
|
|
91
|
+
- Para rutas dinamicas, usar el ultimo segmento estatico util y agregar `DetailPage`: `development/[development_slug]/page.tsx` -> `DevelopmentDetailPage`.
|
|
92
|
+
- Para rutas dinamicas anidadas, preferir el ultimo segmento estatico util: `development/[development_slug]/property/[property_slug]` -> `PropertyDetailPage`.
|
|
93
|
+
- Si el nombre colisiona o pierde contexto, anteponer el segmento padre: `DevelopmentPropertyDetailPage`.
|
|
94
|
+
- No incluir nombres de route groups, `[locale]` ni nombres de parametros como `Slug` salvo que haga falta para evitar ambiguedad real.
|
|
95
|
+
|
|
96
|
+
## Checklist
|
|
97
|
+
|
|
98
|
+
- `app` queda limpio y sin UI privada.
|
|
99
|
+
- `page.tsx` importa un componente desde `src/components/pages/{area}`.
|
|
100
|
+
- `page.tsx` envuelve siempre con `PageProviders`.
|
|
101
|
+
- Las props de `PageProviders` corresponden al proyecto actual, no a otro consumidor.
|
|
102
|
+
- El componente de pagina no usa `any`.
|
|
103
|
+
- Los subcomponentes privados viven junto a la pagina, no en `app`.
|
|
104
|
+
- Se ejecuta una verificacion focalizada cuando el cambio toca codigo de aplicacion.
|
|
@@ -17,7 +17,8 @@ var myDefaultTheme = {
|
|
|
17
17
|
Container: _mantine_core.Container.extend({
|
|
18
18
|
defaultProps: {
|
|
19
19
|
size: "xl",
|
|
20
|
-
px: "md"
|
|
20
|
+
px: "md",
|
|
21
|
+
w: "100%"
|
|
21
22
|
},
|
|
22
23
|
vars: (_, { size, fluid }) => ({ root: { "--container-size": fluid ? "100%" : typeof size === "string" && size in CONTAINER_SIZES ? (0, _mantine_core.rem)(CONTAINER_SIZES[size]) : typeof size === "number" ? (0, _mantine_core.rem)(size) : void 0 } })
|
|
23
24
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"my-default-theme.d.ts","sourceRoot":"","sources":["../../src/mantine/my-default-theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EAM1B,MAAM,eAAe,CAAA;AAWtB,eAAO,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"my-default-theme.d.ts","sourceRoot":"","sources":["../../src/mantine/my-default-theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EAM1B,MAAM,eAAe,CAAA;AAWtB,eAAO,MAAM,cAAc,EAAE,oBAoD5B,CAAA"}
|
|
@@ -16,7 +16,8 @@ var myDefaultTheme = {
|
|
|
16
16
|
Container: Container.extend({
|
|
17
17
|
defaultProps: {
|
|
18
18
|
size: "xl",
|
|
19
|
-
px: "md"
|
|
19
|
+
px: "md",
|
|
20
|
+
w: "100%"
|
|
20
21
|
},
|
|
21
22
|
vars: (_, { size, fluid }) => ({ root: { "--container-size": fluid ? "100%" : typeof size === "string" && size in CONTAINER_SIZES ? rem(CONTAINER_SIZES[size]) : typeof size === "number" ? rem(size) : void 0 } })
|
|
22
23
|
}),
|