@ecomiq/storefront 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +177 -0
- package/dist/core.d.ts +3400 -0
- package/dist/core.js +1127 -0
- package/dist/core.js.map +1 -0
- package/dist/find-storefront-cms-page-Bo0-G1FK.d.ts +119 -0
- package/dist/nextjs/api.d.ts +49 -0
- package/dist/nextjs/api.js +170 -0
- package/dist/nextjs/api.js.map +1 -0
- package/dist/nextjs/globals.css +14 -0
- package/dist/nextjs.d.ts +3208 -0
- package/dist/nextjs.js +2405 -0
- package/dist/nextjs.js.map +1 -0
- package/dist/postcss.config.mjs +6 -0
- package/dist/react.d.ts +1044 -0
- package/dist/react.js +3199 -0
- package/dist/react.js.map +1 -0
- package/dist/store-CYBCpY6v.d.ts +4333 -0
- package/package.json +73 -0
package/README.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# @ecomiq/storefront
|
|
2
|
+
|
|
3
|
+
SDK oficial para construir tiendas online con **Next.js** y **React** sobre la plataforma Ecomiq.
|
|
4
|
+
|
|
5
|
+
Incluye componentes de catálogo, carrito, checkout, cuenta de cliente, CMS, temas y un proxy listo para conectar tu app con la API de tienda.
|
|
6
|
+
|
|
7
|
+
## Requisitos
|
|
8
|
+
|
|
9
|
+
- Node.js 20+
|
|
10
|
+
- Next.js 15+ (App Router)
|
|
11
|
+
- React 19+
|
|
12
|
+
- Tailwind CSS 4+
|
|
13
|
+
|
|
14
|
+
## Instalación
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install @ecomiq/storefront
|
|
18
|
+
# o
|
|
19
|
+
pnpm add @ecomiq/storefront
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
En `next.config.js` (o `.mjs`), transpila el SDK:
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
/** @type {import('next').NextConfig} */
|
|
26
|
+
const nextConfig = {
|
|
27
|
+
transpilePackages: ["@ecomiq/storefront"],
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export default nextConfig;
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Inicio rápido
|
|
34
|
+
|
|
35
|
+
### 1. Estilos
|
|
36
|
+
|
|
37
|
+
En `app/globals.css`:
|
|
38
|
+
|
|
39
|
+
```css
|
|
40
|
+
@import "tailwindcss";
|
|
41
|
+
@import "@ecomiq/storefront/nextjs/css";
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### 2. Proxy de la API de tienda
|
|
45
|
+
|
|
46
|
+
Crea la ruta que reenvía las peticiones al backend de Ecomiq:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
// app/api/store/[...path]/route.ts
|
|
50
|
+
import { toNextJsStoreApiHandler } from "@ecomiq/storefront/nextjs/api";
|
|
51
|
+
|
|
52
|
+
export const { GET, POST, PUT, PATCH, DELETE } = toNextJsStoreApiHandler({
|
|
53
|
+
apiBaseUrl: process.env.STOREFRONT_API_URL!,
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 3. Layout y provider
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
// app/(shop)/layout.tsx
|
|
61
|
+
import { EcomiqProvider, getPublicStore, ThemeComponentLoader } from "@ecomiq/storefront/nextjs";
|
|
62
|
+
|
|
63
|
+
export default async function ShopLayout({ children }: { children: React.ReactNode }) {
|
|
64
|
+
const { data } = await getPublicStore();
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<EcomiqProvider store={data} authClient={yourAuthClient}>
|
|
68
|
+
<ThemeComponentLoader themeName="default" componentName="header" props={{ /* logo, etc. */ }} />
|
|
69
|
+
{children}
|
|
70
|
+
<ThemeComponentLoader themeName="default" componentName="footer" props={{ /* … */ }} />
|
|
71
|
+
</EcomiqProvider>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 4. Rutas de la tienda
|
|
77
|
+
|
|
78
|
+
Usa el enrutador incluido para catálogo, producto, carrito, checkout y cuenta:
|
|
79
|
+
|
|
80
|
+
```tsx
|
|
81
|
+
// app/(shop)/[[...route]]/page.tsx
|
|
82
|
+
import {
|
|
83
|
+
ShellRouter,
|
|
84
|
+
generateMetadata as generateStoreMetadata,
|
|
85
|
+
} from "@ecomiq/storefront/nextjs";
|
|
86
|
+
|
|
87
|
+
export default function StorePage(props: {
|
|
88
|
+
params: Promise<{ route?: string[] }>;
|
|
89
|
+
searchParams: Record<string, string | string[] | undefined>;
|
|
90
|
+
}) {
|
|
91
|
+
return <ShellRouter {...props} getServerSession={yourGetSession} />;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function generateMetadata(props: { params: Promise<{ route?: string[] }> }) {
|
|
95
|
+
return generateStoreMetadata({ params: props.params });
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Con esto tienes una tienda funcional: home, listados, ficha de producto, carrito, checkout y área de cliente.
|
|
100
|
+
|
|
101
|
+
## Puntos de entrada
|
|
102
|
+
|
|
103
|
+
Elige el subpath según lo que necesites en tu proyecto:
|
|
104
|
+
|
|
105
|
+
| Import | Cuándo usarlo |
|
|
106
|
+
|--------|----------------|
|
|
107
|
+
| `@ecomiq/storefront/nextjs` | App Next.js completa: layout, router, provider, páginas exportables, temas |
|
|
108
|
+
| `@ecomiq/storefront/nextjs/api` | Solo el handler del proxy `/api/store/*` |
|
|
109
|
+
| `@ecomiq/storefront/nextjs/css` | Estilos base del shell |
|
|
110
|
+
| `@ecomiq/storefront/react` | Componentes, hooks, tipos y utilidades para UI personalizada |
|
|
111
|
+
| `@ecomiq/storefront/client` | Llamadas a la API de tienda (catálogo, carrito, pedidos, cliente) sin componentes |
|
|
112
|
+
| `@ecomiq/storefront/core` | Tipos y schemas Zod (módulos sin React) |
|
|
113
|
+
|
|
114
|
+
En la mayoría de storefronts nuevos basta con **`/nextjs`** para el armazón y **`/react`** cuando añadas pantallas o bloques propios.
|
|
115
|
+
|
|
116
|
+
## Variables de entorno
|
|
117
|
+
|
|
118
|
+
| Variable | Descripción |
|
|
119
|
+
|----------|-------------|
|
|
120
|
+
| `STOREFRONT_API_URL` | URL base de la API de tienda Ecomiq (usada en el proxy) |
|
|
121
|
+
|
|
122
|
+
Configura también en tu app el identificador de tienda y auth según tu despliegue (subdominio, `X-Store-Id`, Better Auth, etc.).
|
|
123
|
+
|
|
124
|
+
## Personalización
|
|
125
|
+
|
|
126
|
+
### Temas
|
|
127
|
+
|
|
128
|
+
Los bloques visuales (header, footer, tarjeta de producto, etc.) se cargan por nombre de tema:
|
|
129
|
+
|
|
130
|
+
```tsx
|
|
131
|
+
import { ThemeComponentLoader } from "@ecomiq/storefront/nextjs";
|
|
132
|
+
|
|
133
|
+
<ThemeComponentLoader
|
|
134
|
+
themeName="default"
|
|
135
|
+
componentName="productCard"
|
|
136
|
+
props={{ product }}
|
|
137
|
+
/>
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Puedes registrar un tema propio y referenciarlo con `themeName`.
|
|
141
|
+
|
|
142
|
+
### UI y datos en componentes propios
|
|
143
|
+
|
|
144
|
+
```tsx
|
|
145
|
+
import { useProducts, ProductsSection, type StorefrontProduct } from "@ecomiq/storefront/react";
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
```ts
|
|
149
|
+
import { setClientStoreId, getStorefrontProducts } from "@ecomiq/storefront/client";
|
|
150
|
+
|
|
151
|
+
setClientStoreId("tu-store-id");
|
|
152
|
+
const page = await getStorefrontProducts({ page: 1, pageSize: 24 });
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Páginas preconstruidas
|
|
156
|
+
|
|
157
|
+
Importa páginas listas desde `@ecomiq/storefront/nextjs/export-pages/*` si prefieres componer rutas manualmente en lugar de `ShellRouter`.
|
|
158
|
+
|
|
159
|
+
## Ejemplo de dependencias
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"dependencies": {
|
|
164
|
+
"@ecomiq/storefront": "^0.1.0",
|
|
165
|
+
"next": "^15.3.0",
|
|
166
|
+
"react": "^19.0.0",
|
|
167
|
+
"react-dom": "^19.0.0",
|
|
168
|
+
"tailwindcss": "^4.0.0"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Soporte
|
|
174
|
+
|
|
175
|
+
Documentación de la plataforma y credenciales de API: [ecomiq.pe](https://ecomiq.pe) (o el portal que use tu organización).
|
|
176
|
+
|
|
177
|
+
Para incidencias del SDK, abre un issue en el repositorio del paquete o contacta al equipo Ecomiq.
|