@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 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.