@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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/client/store-api-client.ts","../src/react/nextjs/actions/getHostName.ts","../src/core/client/store-api-store.service.ts","../src/core/client/storefront-settings-kv.service.ts","../src/react/shell/lib/public-store-settings-source.ts","../src/react/nextjs/actions/getPublicStore.ts","../src/core/client/store-api-errors.ts","../src/core/client/store-api-product.service.ts","../src/core/client/store-api-collection.service.ts","../src/core/client/store-api-pages.service.ts","../src/core/client/store-api-cart.service.ts","../src/core/client/store-api-customer.service.ts","../src/core/client/store-api-customer-order.service.ts","../src/core/models/order-draft.ts","../src/core/client/store-api-order-draft.service.ts","../src/react/shell/hooks/use-store-products.ts","../src/react/shell/hooks/use-store-collections.ts","../src/react/shell/hooks/use-store-pages.ts","../src/react/shell/hooks/use-store-cart.ts","../src/react/stores/use-store.ts","../src/react/shell/lib/find-storefront-cms-page.ts","../src/react/shell/components/safe-theme-injector.tsx","../src/react/shell/components/product-variant-selector/ProductVariantSelector.tsx","../src/react/components/cms-sections/utils.ts","../src/react/components/cms-sections/shared.tsx","../src/react/components/cms-sections/content-sections.tsx","../src/core/constants/currency.ts","../src/core/utils/format-currency.ts","../src/react/components/cms-sections/ecommerce-sections.tsx","../src/react/components/cms-sections/layout-sections.tsx","../src/react/components/cms-sections-renderer.tsx","../src/react/nextjs/cms/default-section-renderer.tsx","../src/npm/nextjs.ts"],"names":["headers","StorefrontSettingsSchema","z","useQuery","useQueryClient","useMutation","StorefrontPageDetailSchema","useEffect","jsx","jsxs","formatCurrency","settingNumber","orderedBlocks","settingString"],"mappings":"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","file":"nextjs.js","sourcesContent":["/**\n * Cliente para el proxy Next.js (`/api/store/*`), que a su vez llama al API Ecomiq con headers\n * definidos allí (`Authorization`, `X-Store-Id`, etc.). Ecomiq upstream no recibe `Cookie` del navegador.\n *\n * - En browser: base = `/api/store` + `credentials: \"include\"`. Cada request debe llevar `X-Store-Id`\n * (`setClientStoreId` desde `EcomiqProvider`); el proxy no resuelve tienda sin ese header.\n * - En server: URL absoluta vía `setServerRequestOrigin()` y `X-Store-Id` vía `setServerStoreId()` tras\n * `getPublicStore` (settings vía upstream o KV, nunca el proxy sin id).\n */\n\nconst STORE_API_PATH = \"/api/store\";\n\n/** Getter inyectado por la app (usa next/headers). Solo se llama en server. */\nlet serverRequestOriginGetter: string | null = null;\n\n/** Store id inyectado en server tras resolver settings (misma idea que `setServerRequestOrigin`). */\nlet serverStoreIdGetter: string | null = null;\n\n/** Store id en browser; lo asigna `EcomiqProvider` al hidratar la tienda. */\nlet clientStoreIdGetter: string | null = null;\n\n/**\n * Inyectar en server para que las llamadas al proxy usen el mismo origen que la request.\n * Ejemplo en la app: setServerRequestOrigin(getRequestOrigin) con getRequestOrigin usando headers().\n */\nexport function setServerRequestOrigin(getter: string | null): void {\n serverRequestOriginGetter = getter;\n}\n\n/** Inyectar en server el id de tienda ya resuelto (p. ej. tras `getPublicStore`). */\nexport function setServerStoreId(storeId: string | null): void {\n serverStoreIdGetter = storeId?.trim() || null;\n}\n\n/** Inyectar en el cliente el id de tienda (p. ej. desde `EcomiqProvider` con el payload de layout). */\nexport function setClientStoreId(storeId: string | null): void {\n if (typeof window === \"undefined\") return;\n clientStoreIdGetter = storeId?.trim() || null;\n}\n\n/**\n * Resuelve la URL base del API de store.\n * En server usa el getter inyectado; en browser devuelve path relativo.\n */\nexport async function getStoreApiBaseUrl(): Promise<string> {\n if (typeof window !== \"undefined\") {\n return STORE_API_PATH;\n }\n if (serverRequestOriginGetter) {\n return `${serverRequestOriginGetter.replace(/\\/$/, \"\")}/${STORE_API_PATH.replace(/^\\//, \"\")}`;\n }\n return STORE_API_PATH;\n}\n\n/**\n * Crea una instancia del cliente con la base URL indicada.\n * Para obtener la base correcta (sobre todo en server) usar getStoreApiClient().\n */\nexport function createStoreApiClient(baseUrl: string): StoreApiClient {\n return new StoreApiClient(baseUrl);\n}\n\n/**\n * Devuelve una instancia del cliente con la base URL resuelta (misma origen en server).\n * Usar este en servicios en lugar del singleton.\n */\nexport async function getStoreApiClient(): Promise<StoreApiClient> {\n const baseUrl = await getStoreApiBaseUrl();\n return new StoreApiClient(baseUrl);\n}\n\n/** Opciones de request al proxy /api/store (se reenvían al upstream salvo las filtradas por el handler). */\nexport type StoreApiGetOptions = {\n /** Header `X-Store-Id` (prioridad sobre los setters de runtime). */\n xStoreId?: string;\n /** Header X-Store-Domain para que el proxy resuelva la tienda cuando aún no hay `X-Store-Id`. */\n xStoreDomain?: string;\n xCartId?: string;\n /**\n * Bearer hacia `/api/store`. El proxy reenvía ese `Authorization` a Ecomiq (API privada solo acepta Bearer).\n * Omitir cuando el navegador use solo la cookie HttpOnly acotada a `/api/store`.\n */\n bearerToken?: string;\n /**\n * Cache key para el cache incremental.\n */\n cacheKey?: string;\n /**\n * Fuerza lectura fresca en Next/server. Usar cuando el backend ya aplica cache-aside.\n */\n noStore?: boolean;\n};\n\nexport class StoreApiClient {\n private readonly baseUrl: string;\n\n constructor(baseUrl: string = STORE_API_PATH) {\n this.baseUrl = baseUrl.replace(/\\/$/, \"\");\n }\n\n private async request<T>(\n path: string,\n init: RequestInit,\n options?: StoreApiGetOptions\n ): Promise<T> {\n const pathNorm = path.replace(/^\\/+/, \"\");\n const url = path.startsWith(\"http\")\n ? path\n : `${this.baseUrl}/${pathNorm}`;\n\n const headers = new Headers(init.headers ?? {});\n headers.set(\"Content-Type\", \"application/json\");\n headers.set(\"Accept-Encoding\", \"identity\");\n\n const explicitStoreId = options?.xStoreId?.trim();\n const runtimeStoreId =\n explicitStoreId ||\n (typeof window === \"undefined\" ? serverStoreIdGetter : clientStoreIdGetter);\n if (runtimeStoreId && !headers.has(\"x-store-id\")) {\n headers.set(\"X-Store-Id\", runtimeStoreId);\n }\n\n if (options?.xStoreDomain) {\n headers.set(\"X-Store-Domain\", options.xStoreDomain);\n }\n if (options?.xCartId) {\n headers.set(\"X-Cart-Token\", options.xCartId);\n }\n\n const bearer =\n typeof options?.bearerToken === \"string\" && options.bearerToken.trim().length > 0\n ? options.bearerToken.trim()\n : undefined;\n if (bearer) {\n headers.set(\n \"Authorization\",\n bearer.toLowerCase().startsWith(\"bearer \") ? bearer : `Bearer ${bearer}`\n );\n }\n\n const isServer = typeof window === \"undefined\";\n\n const res = await fetch(url, {\n ...init,\n headers,\n credentials: isServer ? \"same-origin\" : \"include\",\n ...(options?.noStore ? { cache: \"no-store\" as RequestCache } : {}),\n ...((options?.cacheKey && isServer && !options?.noStore) ? {\n next: {\n revalidate: 60,\n tags: [options.cacheKey],\n },\n } : {}),\n });\n if (!res.ok) {\n let body: unknown;\n try {\n const errorText = await res.text();\n body = errorText ? JSON.parse(errorText) : undefined;\n } catch {\n body = undefined;\n }\n const msg =\n typeof body === \"object\" &&\n body !== null &&\n \"title\" in body &&\n typeof (body as { title?: unknown }).title === \"string\"\n ? (body as { title: string }).title\n : res.statusText || \"Store API error\";\n const err = new Error(msg) as Error & {\n status?: number;\n body?: unknown;\n };\n err.status = res.status;\n err.body = body;\n throw err;\n }\n const text = await res.text();\n if (!text) return undefined as T;\n return JSON.parse(text) as T;\n }\n\n get<T>(path: string, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, { method: \"GET\" }, options);\n }\n\n post<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(\n path,\n {\n method: \"POST\",\n body: data != null ? JSON.stringify(data) : undefined,\n },\n options\n );\n }\n\n patch<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, {\n method: \"PATCH\",\n body: data != null ? JSON.stringify(data) : undefined,\n }, options);\n }\n\n put<T>(path: string, data?: unknown, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(\n path,\n {\n method: \"PUT\",\n body: data != null ? JSON.stringify(data) : undefined,\n },\n options\n );\n }\n\n delete<T>(path: string, options?: StoreApiGetOptions): Promise<T> {\n return this.request<T>(path, { method: \"DELETE\" }, options);\n }\n}\n\n/** Cliente por defecto (base relativa). En server preferir getStoreApiClient(). */\nexport const storeApiClient = new StoreApiClient(STORE_API_PATH);\n","\"use server\";\n\nimport { setServerRequestOrigin } from \"../../../core/client/store-api-client\";\nimport { headers } from \"next/headers\";\n\n/**\n * Devuelve el host completo de la request (ej. \"plata950.ecomiq.pe\", \"localhost:3000\").\n * Se pasa a getPublicStore(host) para que use la misma base en las llamadas al proxy.\n */\nexport async function getHostname(): Promise<string | null> {\n const hd = await headers();\n const host = hd.get(\"host\");\n const hostname = host?.replace(/^www\\./, \"\") ?? null;\n const proto = hd.get(\"x-forwarded-proto\") ?? hd.get(\"x-forwarded-ssl\") ?? \"http\";\n const secure = proto === \"https\" || (hd.get(\"x-forwarded-ssl\") ?? \"\") === \"on\";\n setServerRequestOrigin(`${secure ? \"https\" : \"http\"}://${hostname}`);\n return hostname;\n}\n","import { getStoreApiClient } from \"./store-api-client\";\nimport { StorefrontSettingsSchema } from \"@ecomiq/storefront/core\";\nimport type { StorefrontSettings } from \"@ecomiq/storefront/core\";\n\n/**\n * Obtiene la configuración de la tienda vía proxy /api/store.\n * Solo para esta API se envía X-Store-Domain con el subdomain cuando no hay cookie.\n */\nexport async function getStorefrontSettings(\n subdomain: string,\n cacheKey?: string\n): Promise<StorefrontSettings> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"settings\", {\n xStoreDomain: subdomain?.trim() || undefined,\n cacheKey,\n noStore: true,\n });\n return StorefrontSettingsSchema.parse(response);\n}\n","import { getCloudflareContext } from \"@opennextjs/cloudflare\";\nimport { StorefrontSettingsSchema } from \"@ecomiq/storefront/core\";\nimport type { StorefrontSettings } from \"@ecomiq/storefront/core\";\n\n/** Debe coincidir con el `binding` en wrangler.jsonc (`kv_namespaces`). */\nexport const ECOMIQ_CLIENTS_STORE_KV_BINDING = \"ecomiq_clients_store\" as const;\n\nconst ECOMIQ_APP_APEX = \"ecomiq.app\";\nconst ECOMIQ_APP_SUFFIX = [`.${ECOMIQ_APP_APEX}`, `.localhost`];\n\ntype KvJsonGet = {\n get(key: string, options: { type: \"json\" }): Promise<unknown>;\n};\n\n/** Host sin puerto, minúsculas, sin `www.`. */\nexport function normalizeStoreHost(hostHeader: string): string {\n let h = hostHeader.trim().toLowerCase();\n const colon = h.indexOf(\":\");\n if (colon !== -1) h = h.slice(0, colon);\n if (h.startsWith(\"www.\")) h = h.slice(4);\n return h;\n}\n\n/**\n * Identificador de tienda a partir del `Host`: slug en `*.ecomiq.app`, FQDN en dominio propio.\n * Misma semántica que el sufijo de `buildStorefrontKvSnapshotKey` (sin el prefijo KV).\n */\nexport function resolveStorefrontSettingsHost(hostHeader: string): string {\n const host = normalizeStoreHost(hostHeader);\n if (!host) {\n throw Object.assign(new Error(\"Host inválido para tienda\"), { status: 400 });\n }\n if (host === ECOMIQ_APP_APEX) {\n throw Object.assign(new Error(\"Host apex ecomiq.app sin slug de tienda\"), { status: 400 });\n }\n if (ECOMIQ_APP_SUFFIX.some(suffix => host.endsWith(suffix))) {\n const slug = host.slice(0, -(ECOMIQ_APP_SUFFIX.find(suffix => host.endsWith(suffix))?.length ?? 0));\n if (!slug) {\n throw Object.assign(new Error(\"Host sin slug para ecomiq.app\"), { status: 400 });\n }\n return slug;\n }\n return host;\n}\n\n/**\n * Clave KV del snapshot de tienda.\n * - `*.ecomiq.app` → `storefront:snapshots:store:<slug>` (todo lo que va antes de `.ecomiq.app`, p. ej. `plata950`).\n * - Dominio propio (p. ej. `plata950.com`) → `storefront:snapshots:store:<dominio completo>`.\n */\nexport function buildStorefrontKvSnapshotKey(hostHeader: string): string {\n return `storefront:snapshots:store:${resolveStorefrontSettingsHost(hostHeader)}`;\n}\n\nfunction getKvNamespace(env: unknown): KvJsonGet | undefined {\n if (!env || typeof env !== \"object\") return undefined;\n const ns = (env as Record<string, unknown>)[ECOMIQ_CLIENTS_STORE_KV_BINDING];\n if (!ns || typeof ns !== \"object\" || typeof (ns as KvJsonGet).get !== \"function\") {\n return undefined;\n }\n return ns as KvJsonGet;\n}\n\n/**\n * Lee settings desde KV (`ecomiq_clients_store`) usando la clave según el host.\n */\nexport async function getStorefrontSettingsFromKv(hostHeader: string): Promise<StorefrontSettings> {\n const { env } = await getCloudflareContext({ async: true });\n const kv = getKvNamespace(env);\n if (!kv) {\n const err = new Error(\n `Binding KV \"${ECOMIQ_CLIENTS_STORE_KV_BINDING}\" no encontrado. Configura kv_namespaces en wrangler.`\n );\n throw Object.assign(err, { status: 500 });\n }\n\n const cacheKey = buildStorefrontKvSnapshotKey(hostHeader);\n const raw = await kv.get(cacheKey, { type: \"json\" });\n if (raw == null) {\n const err = new Error(\"Store settings not found in KV\");\n throw Object.assign(err, { status: 404 });\n }\n\n return StorefrontSettingsSchema.parse(raw);\n}\n","/** Origen de `StorefrontSettings`: API interna o Cloudflare KV (mismo contrato tras validar con Zod). */\nexport type PublicStoreSettingsSource = \"api\" | \"kv\";\n\nconst ENV_PUBLIC_STORE_SETTINGS_SOURCE = \"PUBLIC_STORE_SETTINGS_SOURCE\";\n\n/**\n * Resuelve el origen desde `process.env.PUBLIC_STORE_SETTINGS_SOURCE` (`api` | `kv`, por defecto `api`).\n * Úsalo en GitHub Actions / wrangler `--var` para elegir la fuente en runtime del Worker.\n *\n * Vive fuera de un archivo `\"use server\"`: Next.js exige que todas las exportaciones de función ahí sean async.\n */\nexport function resolvePublicStoreSettingsSource(\n envValue: string | undefined = process.env[ENV_PUBLIC_STORE_SETTINGS_SOURCE]\n): PublicStoreSettingsSource {\n const v = (envValue ?? \"api\").trim().toLowerCase();\n return v === \"kv\" ? \"kv\" : \"api\";\n}\n","\"use server\";\n\nimport { headers } from \"next/headers\";\nimport { getStorefrontSettings } from \"../../../core/client/store-api-store.service\";\nimport { getStorefrontSettingsFromKv, normalizeStoreHost, resolveStorefrontSettingsHost } from \"../../../core/client/storefront-settings-kv.service\";\nimport {\n resolvePublicStoreSettingsSource,\n type PublicStoreSettingsSource,\n} from \"../../shell/lib/public-store-settings-source\";\nimport type { StorefrontSettings } from \"@ecomiq/storefront/core\";\nimport { setServerRequestOrigin, setServerStoreId } from \"../../../core/client/store-api-client\";\n\n/** Tipo de retorno de `getPublicStore`. */\ntype PublicStoreResult = {\n data: StorefrontSettings | null;\n error: {\n message: string;\n statusCode: number;\n isNotFound?: boolean;\n subdomain?: string;\n } | null;\n};\n\ntype GetPublicStoreOptions = {\n /** Si se omite, se usa `resolvePublicStoreSettingsSource()` (variable de entorno). */\n source?: PublicStoreSettingsSource;\n};\n\n/**\n * Obtiene la tienda pública: vía proxy `/api/store` o vía KV (`getCloudflareContext` + binding `ecomiq_clients_store`),\n * según `options.source` o `PUBLIC_STORE_SETTINGS_SOURCE`.\n * Usa el mismo criterio slug vs dominio que KV (`resolveStorefrontSettingsHost`).\n */\nexport async function getPublicStore(options?: GetPublicStoreOptions): Promise<PublicStoreResult> {\n const headerList = await headers();\n const host = headerList.get(\"host\");\n\n if (!host?.trim()) {\n return {\n data: null,\n error: {\n message: \"Host is required\",\n statusCode: 400,\n isNotFound: true,\n subdomain: undefined,\n },\n };\n }\n\n const storeHost = normalizeStoreHost(host);\n const proto = headerList.get(\"x-forwarded-proto\") ?? headerList.get(\"x-forwarded-ssl\") ?? \"http\";\n const secure = proto === \"https\" || (headerList.get(\"x-forwarded-ssl\") ?? \"\") === \"on\";\n // importante usar el host para que el proxy funcione correctamente\n setServerRequestOrigin(`${secure ? \"https\" : \"http\"}://${host}`);\n\n const source = options?.source ?? resolvePublicStoreSettingsSource();\n\n let storeDomain: string | undefined;\n try {\n storeDomain = resolveStorefrontSettingsHost(host);\n setServerStoreId(null);\n const data =\n source === \"kv\"\n ? await getStorefrontSettingsFromKv(storeHost)\n : await getStorefrontSettings(storeDomain, `storefront-settings-${storeDomain}`);\n setServerStoreId(data.store.id);\n return { data, error: null };\n } catch (error: unknown) {\n const err = error as { status?: number; message?: string };\n const statusCode = err.status ?? 500;\n return {\n data: null,\n error: {\n message: err.message ?? \"Error fetching store settings\",\n statusCode,\n isNotFound: statusCode === 404,\n subdomain: storeDomain,\n },\n };\n }\n}\n","/**\n * Respuesta ProblemDetails / validation típica de la API cuando el carrito ya no existe o no está activo.\n */\nexport function isCartNotActiveApiError(error: unknown): boolean {\n if (!error || typeof error !== \"object\") return false;\n const e = error as { status?: number; body?: unknown };\n if (e.status !== 400) return false;\n const body = e.body as { errors?: Record<string, string[]> } | undefined;\n const keys = body?.errors ? Object.keys(body.errors) : [];\n return keys.includes(\"Carts.NotActive\");\n}\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type {\n StorefrontProductsParamsInput,\n StorefrontProductsResponse,\n StorefrontProductDetail,\n} from \"@ecomiq/storefront/core\";\nimport {\n StorefrontProductsParamsSchema,\n StorefrontProductsResponseSchema,\n StorefrontProductDetailSchema,\n} from \"@ecomiq/storefront/core\";\n\n/**\n * Servicio de productos vía proxy /api/store.\n * El proxy resuelve la tienda por cookie.\n */\nexport async function getStorefrontProducts(\n params?: StorefrontProductsParamsInput,\n cacheKey?: string\n): Promise<StorefrontProductsResponse> {\n const parsed = StorefrontProductsParamsSchema.parse(params ?? {});\n const searchParams = new URLSearchParams();\n searchParams.set(\"page\", String(parsed.page));\n searchParams.set(\"pageSize\", String(parsed.pageSize));\n if (parsed.sort) searchParams.set(\"sort\", parsed.sort);\n if (parsed.sellerId) searchParams.set(\"sellerId\", parsed.sellerId);\n if (parsed.search) searchParams.set(\"search\", parsed.search);\n if (parsed.collection) searchParams.set(\"collection\", parsed.collection);\n if (parsed.category) searchParams.set(\"category\", parsed.category);\n if (parsed.brand) searchParams.set(\"brand\", parsed.brand);\n if (parsed.productType) searchParams.set(\"productType\", parsed.productType);\n if (parsed.inStock != null) searchParams.set(\"inStock\", String(parsed.inStock));\n if (parsed.minPrice != null) searchParams.set(\"minPrice\", String(parsed.minPrice));\n if (parsed.maxPrice != null) searchParams.set(\"maxPrice\", String(parsed.maxPrice));\n\n const path = `products?${searchParams.toString()}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path, {\n cacheKey,\n });\n return StorefrontProductsResponseSchema.parse(response);\n}\n\nexport async function getStorefrontProductBySlug(\n slug: string\n): Promise<StorefrontProductDetail> {\n const path = `products/${encodeURIComponent(slug)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontProductDetailSchema.parse(response);\n}\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type { StorefrontCollection, StorefrontCollectionDetail } from \"@ecomiq/storefront/core\";\nimport {\n StorefrontCollectionsResponseSchema,\n StorefrontCollectionDetailSchema,\n} from \"@ecomiq/storefront/core\";\n\n/**\n * Servicio de colecciones vía proxy /api/store.\n * GET /v1/collections.\n */\nexport async function getStorefrontCollections(): Promise<StorefrontCollection[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"collections\");\n return StorefrontCollectionsResponseSchema.parse(response);\n}\n\nexport async function getStorefrontCollectionBySlug(\n slug: string\n): Promise<StorefrontCollectionDetail> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\n `collections/by-slug/${encodeURIComponent(slug)}`\n );\n return StorefrontCollectionDetailSchema.parse(response);\n}\n\n","import { getStoreApiClient } from \"./store-api-client\";\nimport type {\n StorefrontPageListItem,\n StorefrontPageDetail,\n} from \"@ecomiq/storefront/core\";\nimport {\n StorefrontPageListItemSchema,\n StorefrontPageDetailSchema,\n} from \"@ecomiq/storefront/core\";\nimport { z } from \"zod\";\n\n/**\n * Servicio de páginas vía proxy /api/store.\n * GET /v1/pages y GET /v1/pages/{slug}.\n */\nexport async function getStorefrontPages(): Promise<StorefrontPageListItem[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"pages\");\n return z.array(StorefrontPageListItemSchema).parse(response);\n}\n\nexport async function getStorefrontPageBySlug(\n slug: string\n): Promise<StorefrontPageDetail> {\n const path = `pages/${encodeURIComponent(slug)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontPageDetailSchema.parse(response);\n}\n\nexport async function getStorefrontPagePreview(\n slug: string,\n token: string\n): Promise<StorefrontPageDetail> {\n const path = `pages/${encodeURIComponent(slug)}/preview?token=${encodeURIComponent(token)}`;\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(path);\n return StorefrontPageDetailSchema.parse(response);\n}\n","import { getStoreApiBaseUrl, getStoreApiClient } from \"./store-api-client\";\nimport type {\n CartBuyerRequest,\n CartAddressesRequest,\n CartCreateRequest,\n CartResponse,\n CartCheckoutRequest,\n CartCheckoutResponse,\n CartCheckoutReadResponse,\n CartPaymentReceiptResponse,\n CartPaymentMethodsResponse,\n CartShippingMethodPutRequest,\n CartCouponRequest,\n CartItemRequest,\n ShippingOptionsResponse,\n} from \"@ecomiq/storefront/core\";\nimport {\n CartBuyerRequestSchema,\n CartAddressesRequestSchema,\n CartCreateRequestSchema,\n CartItemRequestSchema,\n CartResponseSchema,\n CartCheckoutRequestSchema,\n CartCheckoutResponseSchema,\n CartCheckoutReadResponseSchema,\n CartPaymentReceiptResponseSchema,\n CartShippingMethodPutRequestSchema,\n CartCouponRequestSchema,\n ShippingOptionsResponseSchema,\n} from \"@ecomiq/storefront/core\";\n\n/**\n * Servicio de carrito vía proxy /api/store.\n * El proxy resuelve el carrito/tienda por cookie o contexto.\n */\nexport async function createCart(\n data: CartCreateRequest,\n): Promise<CartResponse> {\n const payload = CartCreateRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\"carts\", payload);\n return CartResponseSchema.parse(response);\n}\n\nexport async function getCart(cartId?: string): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(`carts/${cartId}`);\n return CartResponseSchema.parse(response);\n}\n\nexport async function addCartItem(\n data: CartItemRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartItemRequestSchema.parse(data);\n const variantId = Number(payload.variantId);\n if (!Number.isSafeInteger(variantId) || variantId <= 0) {\n throw new Error(\"variantId must be a valid public id\");\n }\n const modifiers = payload.modifiers?.map((modifier) => {\n const modifierGroupId = Number(modifier.modifierGroupId);\n const optionIds = modifier.optionIds.map((optionId) => Number(optionId));\n if (\n !Number.isSafeInteger(modifierGroupId) ||\n modifierGroupId <= 0 ||\n optionIds.some((optionId) => !Number.isSafeInteger(optionId) || optionId <= 0)\n ) {\n throw new Error(\"modifiers must use valid public ids\");\n }\n\n return { modifierGroupId, optionIds };\n });\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(`carts/${cartId}/items`, {\n ...payload,\n variantId,\n ...(modifiers ? { modifiers } : {}),\n });\n return CartResponseSchema.parse(response);\n}\n\nexport async function patchCartBuyer(\n data: CartBuyerRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartBuyerRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.patch<unknown>(\n `carts/${cartId}/buyer`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function patchCartAddresses(\n data: CartAddressesRequest,\n cartId?: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartAddressesRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.patch<unknown>(\n `carts/${cartId}/addresses`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function addCartCoupon(\n cartId: string,\n data: CartCouponRequest,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartCouponRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\n `carts/${cartId}/promotion-codes`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\nexport async function removeCartCoupon(\n cartId: string,\n code: string,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!code.trim()) throw new Error(\"code is required\");\n const client = await getStoreApiClient();\n const response = await client.delete<unknown>(\n `carts/${cartId}/promotion-codes/${encodeURIComponent(code.trim())}`,\n );\n return CartResponseSchema.parse(response);\n}\n\n/**\n * Inicializa checkout de pago (POST /v1/carts/checkout).\n * Body: { paymentMethodCode, externalRef }\n */\nexport async function checkoutCart(\n data: CartCheckoutRequest,\n cartId?: string,\n): Promise<CartCheckoutResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartCheckoutRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.post<unknown>(\n `carts/${cartId}/checkout`,\n payload,\n );\n return CartCheckoutResponseSchema.parse(response);\n}\n\nexport async function uploadPaymentReceipt(\n cartId: string,\n file: File,\n): Promise<CartPaymentReceiptResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const baseUrl = await getStoreApiBaseUrl();\n const form = new FormData();\n form.set(\"file\", file);\n\n const response = await fetch(\n `${baseUrl.replace(/\\/$/, \"\")}/carts/${encodeURIComponent(cartId)}/payment-receipt`,\n {\n method: \"POST\",\n body: form,\n ...(typeof window === \"undefined\" && { cache: \"no-store\" }),\n },\n );\n\n if (!response.ok) {\n let body: unknown;\n try {\n const errorText = await response.text();\n body = errorText ? JSON.parse(errorText) : undefined;\n } catch {\n body = undefined;\n }\n const message =\n typeof body === \"object\" &&\n body !== null &&\n \"title\" in body &&\n typeof (body as { title?: unknown }).title === \"string\"\n ? (body as { title: string }).title\n : response.statusText || \"Store API error\";\n const error = new Error(message) as Error & {\n status?: number;\n body?: unknown;\n };\n error.status = response.status;\n error.body = body;\n throw error;\n }\n\n return CartPaymentReceiptResponseSchema.parse(await response.json());\n}\n\n/**\n * GET /carts/{cartId}/checkout — carrito + métodos de pago (vista checkout).\n */\nexport async function getCartCheckout(\n cartId: string,\n): Promise<CartCheckoutReadResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(`carts/${cartId}/checkout`);\n return CartCheckoutReadResponseSchema.parse(response);\n}\n\nexport async function getShippingOptions(\n cartId: string,\n postalCode: string,\n): Promise<ShippingOptionsResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n if (!postalCode?.trim()) throw new Error(\"postalCode is required\");\n const client = await getStoreApiClient();\n const q = new URLSearchParams({ postalCode: postalCode.trim() });\n const response = await client.get<unknown>(\n `carts/${cartId}/shipping-options?${q.toString()}`,\n );\n return ShippingOptionsResponseSchema.parse(response);\n}\n\nexport async function putCartShippingMethod(\n cartId: string,\n data: CartShippingMethodPutRequest,\n): Promise<CartResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const payload = CartShippingMethodPutRequestSchema.parse(data);\n const client = await getStoreApiClient();\n const response = await client.put<unknown>(\n `carts/${cartId}/shipping-method`,\n payload,\n );\n return CartResponseSchema.parse(response);\n}\n\n/**\n * Solo métodos de pago (misma respuesta que {@link getCartCheckout}; evita duplicar llamadas si ya tienes el checkout).\n */\nexport async function getCartPaymentMethods(\n cartId?: string,\n): Promise<CartPaymentMethodsResponse> {\n if (!cartId) throw new Error(\"cartId is required\");\n const { paymentMethods } = await getCartCheckout(cartId);\n return paymentMethods;\n}\n","import { z } from \"zod\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nexport const CustomerRegisterRequestSchema = z.object({\n email: z.string().email(),\n firstName: z.string().trim().min(1),\n lastName: z.string().trim().min(1),\n countryIsoCode: z.string().trim().length(2),\n password: z.string(),\n phone: z.string().trim().optional(),\n});\n\nexport type CustomerRegisterRequest = z.infer<typeof CustomerRegisterRequestSchema>;\n\n/** GET/POST/PUT cuerpo de dirección (upstream `customer/me/addresses` vía proxy). */\nexport const CustomerAddressSchema = z.object({\n /** Presente en listados cuando el upstream expone el id para PUT/DELETE. */\n id: z.string().optional(),\n addressKey: z.string(),\n countryIsoCode: z.string(),\n addressLine: z.string(),\n addressNumber: z.string(),\n department: z.string(),\n province: z.string(),\n district: z.string(),\n phone: z.string(),\n cellPhone: z.string(),\n postalCode: z.string(),\n reference: z.string(),\n latitude: z.number().nullable(),\n longitude: z.number().nullable(),\n isDefault: z.boolean(),\n});\n\nexport type CustomerAddress = z.infer<typeof CustomerAddressSchema>;\n\nexport const CustomerAddressUpsertSchema = CustomerAddressSchema.omit({ id: true });\n\nexport type CustomerAddressUpsert = z.infer<typeof CustomerAddressUpsertSchema>;\n\n/** GET /v1/customer/me (upstream vía proxy `/api/store/customer/me`). */\nexport const CustomerMeSchema = z.object({\n id: z.string(),\n storeId: z.string(),\n email: z.string().email(),\n firstName: z.string(),\n lastName: z.string(),\n phone: z.string(),\n identificationNumber: z.string().nullable(),\n identificationType: z.string().nullable(),\n entityName: z.string().nullable(),\n dateOfBirth: z.string().nullable(),\n gender: z.string().nullable(),\n countryIsoCode: z.string(),\n role: z.string().nullable(),\n companyName: z.string().nullable(),\n consent: z.boolean(),\n userId: z.string(),\n customerType: z.string(),\n status: z.string(),\n entityIdentificationNumber: z.string().nullable(),\n defaultAddressId: z.string().nullable(),\n metadata: z.unknown().nullable(),\n totalOrders: z.number(),\n avgOrders: z.number(),\n lastOrderId: z.string().nullable(),\n lastOrderDate: z.string().nullable(),\n loyaltyPoints: z.number(),\n addresses: z.array(CustomerAddressSchema),\n createdOn: z.string(),\n updatedOn: z.string().nullable(),\n});\n\nexport type CustomerMe = z.infer<typeof CustomerMeSchema>;\n\n/** PATCH /v1/customer (upstream vía proxy `customer`, respuesta 204). */\nexport const CustomerProfilePatchSchema = z.object({\n firstName: z.string().trim().min(1),\n lastName: z.string().trim().min(1),\n phone: z.string().trim(),\n identificationNumber: z.string().nullable(),\n identificationType: z.string().nullable(),\n entityName: z.string().nullable(),\n entityIdentificationNumber: z.string().nullable(),\n gender: z.string().nullable(),\n role: z.string().nullable(),\n companyName: z.string().nullable(),\n dateOfBirth: z.string().nullable(),\n consent: z.boolean(),\n countryIsoCode: z.string().trim().length(2),\n});\n\nexport type CustomerProfilePatch = z.infer<typeof CustomerProfilePatchSchema>;\n\nexport function customerMeToProfilePatch(me: CustomerMe): CustomerProfilePatch {\n return {\n firstName: me.firstName,\n lastName: me.lastName,\n phone: me.phone ?? \"\",\n identificationNumber: me.identificationNumber,\n identificationType: me.identificationType,\n entityName: me.entityName,\n entityIdentificationNumber: me.entityIdentificationNumber,\n gender: me.gender,\n role: me.role,\n companyName: me.companyName,\n dateOfBirth: me.dateOfBirth,\n consent: me.consent,\n countryIsoCode: me.countryIsoCode || \"PE\",\n };\n}\n\nfunction customerAuthOptions(accessToken?: string) {\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n return token ? { bearerToken: token } : {};\n}\n\n/**\n * Registra un cliente vía proxy /api/store.\n * El proxy agrega X-Store-Id igual que en el resto de endpoints de storefront.\n */\nexport async function registerCustomer(data: CustomerRegisterRequest): Promise<unknown> {\n const payload = CustomerRegisterRequestSchema.parse(data);\n const client = await getStoreApiClient();\n return client.post<unknown>(\"customer/register\", payload);\n}\n\n/**\n * Direcciones del cliente autenticado (Ecomiq upstream: rutas privadas con `Authorization: Bearer` solamente).\n *\n * - Con `accessToken`, el cliente lo manda al proxy y este lo reenvía tal cual a upstream.\n * - Sin token, el proxy usa la cookie HttpOnly de storefront (mismo Bearer hacia Ecomiq).\n */\nexport async function getCustomerAddresses(accessToken?: string): Promise<CustomerAddress[]> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const response = await client.get<unknown>(\"customer/addresses\", {\n ...(token ? { bearerToken: token } : {}),\n });\n return z.array(CustomerAddressSchema).parse(response);\n}\n\nexport async function createCustomerAddress(\n data: CustomerAddressUpsert,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const payload = CustomerAddressUpsertSchema.parse(data);\n return client.post<unknown>(\"customer/addresses\", payload, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\nexport async function updateCustomerAddress(\n addressId: string,\n data: CustomerAddressUpsert,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const payload = CustomerAddressUpsertSchema.parse(data);\n const id = addressId.trim();\n if (!id) throw new Error(\"addressId requerido\");\n return client.put<unknown>(`customer/addresses/${encodeURIComponent(id)}`, payload, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\nexport async function deleteCustomerAddress(\n addressId: string,\n accessToken?: string\n): Promise<unknown> {\n const client = await getStoreApiClient();\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0 ? accessToken.trim() : undefined;\n const id = addressId.trim();\n if (!id) throw new Error(\"addressId requerido\");\n return client.delete<unknown>(`customer/addresses/${encodeURIComponent(id)}`, {\n ...(token ? { bearerToken: token } : {}),\n });\n}\n\n/**\n * Perfil del cliente autenticado (`GET /v1/customer/me`).\n * Autenticación igual que `getCustomerAddresses`: Bearer opcional o cookie HttpOnly en el proxy.\n */\nexport async function getCustomerMe(accessToken?: string): Promise<CustomerMe> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"customer\", customerAuthOptions(accessToken));\n return CustomerMeSchema.parse(response);\n}\n\n/** Actualiza el perfil del cliente autenticado (`PATCH /v1/customer`). */\nexport async function patchCustomer(\n data: CustomerProfilePatch,\n accessToken?: string\n): Promise<void> {\n const client = await getStoreApiClient();\n const payload = CustomerProfilePatchSchema.parse(data);\n await client.patch<unknown>(\"customer\", payload, customerAuthOptions(accessToken));\n}\n","import { z } from \"zod\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nconst CustomerOrderShippingAddressSchema = z\n .object({\n name: z.string().nullable().optional(),\n company: z.string().nullable().optional(),\n address1: z.string(),\n address2: z.string().nullable().optional(),\n city: z.string().nullable().optional(),\n countryCode: z.string(),\n province: z.string().nullable().optional(),\n postalCode: z.string().nullable().optional(),\n district: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n latitude: z.number().nullable().optional(),\n longitude: z.number().nullable().optional(),\n metadata: z.record(z.unknown()).nullable().optional(),\n })\n .passthrough();\n\nconst CustomerOrderLineItemSchema = z.object({\n id: z.string(),\n orderId: z.coerce.string(),\n productId: z.coerce.string().nullable(),\n variantId: z.coerce.string().nullable(),\n title: z.string(),\n subtitle: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n variantTitle: z.string().nullable().optional(),\n productHandle: z.string().nullable().optional(),\n quantity: z.number(),\n unitPrice: z.number(),\n total: z.number(),\n status: z.string(),\n});\n\n/** GET /v1/customer/orders (listado agrupado vía proxy `customer/orders`). */\nexport const CustomerOrderListItemSchema = z.object({\n orderId: z.coerce.string(),\n orderNumber: z.string(),\n orderGroup: z.string(),\n orderIds: z.array(z.coerce.string()),\n status: z.string(),\n total: z.number(),\n totalPaid: z.number(),\n currencyCode: z.string(),\n orderDate: z.string(),\n createdOn: z.string(),\n updatedOn: z.string().nullable().optional(),\n paymentAt: z.string().nullable().optional(),\n shippingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n shippingAddressSummary: z.string().nullable().optional(),\n items: z.array(CustomerOrderLineItemSchema),\n});\n\nexport type CustomerOrderListItemDto = z.infer<typeof CustomerOrderListItemSchema>;\n\nconst CustomerOrderPaymentSchema = z.object({\n id: z.string(),\n paymentMethod: z.string(),\n paymentCode: z.string(),\n amount: z.number(),\n paymentStatus: z.string(),\n receiptUrl: z.string().nullable().optional(),\n createdOn: z.string(),\n});\n\nconst CustomerOrderStatusTimelineSchema = z.object({\n key: z.string(),\n label: z.string(),\n occurredAt: z.string(),\n description: z.string().nullable().optional(),\n status: z.string(),\n source: z.string(),\n});\n\n/** GET /v1/customer/orders/{orderId} (detalle vía proxy). */\nexport const CustomerOrderDetailSchema = z.object({\n id: z.coerce.string(),\n orderNumber: z.string(),\n orderGroup: z.string(),\n status: z.string(),\n total: z.number(),\n totalPaid: z.number(),\n currencyCode: z.string(),\n orderDate: z.string(),\n createdOn: z.string(),\n updatedOn: z.string().nullable().optional(),\n paymentAt: z.string().nullable().optional(),\n subTotal: z.number(),\n discount: z.number(),\n shipping: z.number(),\n tax: z.number(),\n email: z.string(),\n phone: z.string(),\n firstName: z.string(),\n lastName: z.string(),\n shippingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n shippingAddressSummary: z.string().nullable().optional(),\n billingAddress: CustomerOrderShippingAddressSchema.nullable().optional(),\n items: z.array(CustomerOrderLineItemSchema),\n payments: z.array(CustomerOrderPaymentSchema),\n statusTimeline: z.array(CustomerOrderStatusTimelineSchema),\n});\n\nexport type CustomerOrderDetailDto = z.infer<typeof CustomerOrderDetailSchema>;\n\nfunction authOptions(accessToken?: string) {\n const token =\n typeof accessToken === \"string\" && accessToken.trim().length > 0\n ? accessToken.trim()\n : undefined;\n return token ? { bearerToken: token } : {};\n}\n\nexport async function getCustomerOrders(\n accessToken?: string\n): Promise<CustomerOrderListItemDto[]> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\"customer/orders\", authOptions(accessToken));\n return z.array(CustomerOrderListItemSchema).parse(response);\n}\n\nexport async function getCustomerOrder(\n orderId: string,\n accessToken?: string\n): Promise<CustomerOrderDetailDto> {\n const client = await getStoreApiClient();\n const id = orderId.trim();\n if (!id) throw new Error(\"orderId requerido\");\n const response = await client.get<unknown>(\n `customer/orders/${encodeURIComponent(id)}`,\n authOptions(accessToken)\n );\n return CustomerOrderDetailSchema.parse(response);\n}\n","import { z } from \"zod\";\n\n/** Dirección mínima para validar borradores de pedido en el storefront (sin depender de `@ecomiq/core`). */\nexport const StorefrontOrderAddressSchema = z\n .object({\n address1: z.string().optional(),\n address2: z.string().optional(),\n city: z.string().optional(),\n province: z.string().optional(),\n country: z.string().optional(),\n zip: z.string().optional(),\n phone: z.string().optional(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n })\n .passthrough();\n\nexport const OrderDraftItemSchema = z.object({\n id: z.string(),\n productId: z.coerce.string().nullable().optional(),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n variantId: z.coerce.string().nullable().optional(),\n title: z.string(),\n subtitle: z.string().nullable().optional(),\n thumbnail: z.string().nullable().optional(),\n quantity: z.number().optional().default(1),\n unitPrice: z.number().optional().default(0),\n subTotal: z.number().optional().default(0),\n discount: z.number().optional().default(0),\n shipping: z.number().optional().default(0),\n tax: z.number().optional().default(0),\n warranty: z.number().optional().default(0),\n total: z.number().optional().default(0),\n requiresShipping: z.boolean().optional().default(true),\n isTaxInclusive: z.boolean().optional().default(true),\n metadata: z.record(z.unknown()).optional().default({}),\n});\n\nexport const OrderDraftShippingMethodSchema = z.object({\n id: z.string(),\n name: z.string().optional().default(\"\"),\n description: z.string().nullable().optional(),\n subtotal: z.number().optional().default(0),\n discountTotal: z.number().optional().default(0),\n taxTotal: z.number().optional().default(0),\n total: z.number().optional().default(0),\n isTaxInclusive: z.boolean().optional().default(true),\n sellerId: z.string().nullable().optional(),\n shippingProfileId: z.string().nullable().optional(),\n shippingMethodId: z.string().nullable().optional(),\n connectionId: z.string().nullable().optional(),\n providerName: z.string().nullable().optional(),\n trackingCode: z.string().nullable().optional(),\n estimatedDays: z.number().nullable().optional(),\n zoneCode: z.string().nullable().optional(),\n locationId: z.string().nullable().optional(),\n pickupPointId: z.string().nullable().optional(),\n scheduledDate: z.string().nullable().optional(),\n scheduledTime: z.string().nullable().optional(),\n data: z.record(z.unknown()).optional().default({}),\n});\n\nexport const OrderDraftSchema = z.object({\n id: z.string(),\n storeId: z.string().optional(),\n customerId: z.coerce.string().nullable().optional(),\n cartId: z.string().nullable().optional(),\n draftNumber: z.string(),\n currencyCode: z.string().optional().default(\"PEN\"),\n source: z.string().nullable().optional(),\n notes: z.string().nullable().optional(),\n email: z.string().nullable().optional(),\n phone: z.string().nullable().optional(),\n firstName: z.string().nullable().optional(),\n lastName: z.string().nullable().optional(),\n identificationType: z.string().nullable().optional(),\n identificationNumber: z.string().nullable().optional(),\n entityTaxId: z.string().nullable().optional(),\n entityName: z.string().nullable().optional(),\n status: z.string(),\n draftDate: z.string().nullable().optional(),\n sentAt: z.string().nullable().optional(),\n viewedAt: z.string().nullable().optional(),\n acceptedAt: z.string().nullable().optional(),\n rejectedAt: z.string().nullable().optional(),\n expiredAt: z.string().nullable().optional(),\n cancelledAt: z.string().nullable().optional(),\n convertedAt: z.string().nullable().optional(),\n shareToken: z.string().nullable().optional(),\n shareExpiresAt: z.string().nullable().optional(),\n allowAnonymousShareAccess: z.boolean().optional().default(false),\n sharedAt: z.string().nullable().optional(),\n billingAddress: StorefrontOrderAddressSchema.optional().nullable(),\n shippingAddress: StorefrontOrderAddressSchema.optional().nullable(),\n metadata: z.record(z.unknown()).optional().default({}),\n subTotal: z.number().optional().default(0),\n discount: z.number().optional().default(0),\n shipping: z.number().optional().default(0),\n tax: z.number().optional().default(0),\n warranty: z.number().optional().default(0),\n total: z.number().optional().default(0),\n paymentMethod: z.string().optional().default(\"\"),\n paymentCode: z.string().optional().default(\"\"),\n items: z.array(OrderDraftItemSchema).optional().default([]),\n shippingMethods: z.array(OrderDraftShippingMethodSchema).optional().default([]),\n createdOn: z.string().optional(),\n updatedOn: z.string().nullable().optional(),\n});\n\nexport type OrderDraft = z.infer<typeof OrderDraftSchema>;\n","import { OrderDraftSchema, type OrderDraft } from \"../models/order-draft\";\nimport { getStoreApiClient } from \"./store-api-client\";\n\nexport async function getSharedOrderDraft(\n shareToken: string,\n): Promise<OrderDraft> {\n const client = await getStoreApiClient();\n const response = await client.get<unknown>(\n `order-drafts/share/${encodeURIComponent(shareToken)}`,\n { noStore: true },\n );\n return OrderDraftSchema.parse(response);\n}\n","\"use client\";\n\nimport { useQuery, useInfiniteQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontProducts,\n getStorefrontProductBySlug,\n} from \"../../../core/client/store-api-product.service\";\nimport type {\n StorefrontProductsParamsInput,\n StorefrontProductsResponse,\n} from \"@ecomiq/storefront/react\";\n\n/**\n * Hooks de productos que usan el proxy /api/store (cookie store_id).\n * No requiere storeId: el proxy lo resuelve por cookie.\n */\nexport function useStoreProducts() {\n const useStorefrontProductsList = (params?: StorefrontProductsParamsInput) => {\n return useQuery({\n queryKey: [\"storefront\", \"products\", params],\n queryFn: () => getStorefrontProducts(params),\n });\n };\n\n const useStorefrontInfiniteProducts = (\n params?: Omit<StorefrontProductsParamsInput, \"page\">\n ) => {\n return useInfiniteQuery({\n queryKey: [\"storefront\", \"products\", \"infinite\", params],\n queryFn: ({ pageParam = 1 }) =>\n getStorefrontProducts({ ...params, page: pageParam }),\n getNextPageParam: (lastPage: StorefrontProductsResponse) =>\n lastPage.pageIndex < lastPage.totalPages ? lastPage.pageIndex + 1 : undefined,\n initialPageParam: 1,\n });\n };\n\n const useProductBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"product\", \"slug\", slug],\n queryFn: () => getStorefrontProductBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontProducts = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: (params?: StorefrontProductsParamsInput) =>\n getStorefrontProducts(params),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"products\"] });\n },\n });\n };\n\n return {\n useStorefrontProductsList,\n useStorefrontInfiniteProducts,\n useProductBySlug,\n useRefreshStorefrontProducts,\n };\n}\n","\"use client\";\n\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontCollections,\n getStorefrontCollectionBySlug,\n} from \"../../../core/client/store-api-collection.service\";\n\n/**\n * Hooks de colecciones que usan el proxy /api/store.\n */\nexport function useStoreCollections() {\n const useStorefrontCollectionsList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"collections\"],\n queryFn: () => getStorefrontCollections(),\n });\n };\n\n const useCollectionBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"collection\", \"slug\", slug],\n queryFn: () => getStorefrontCollectionBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontCollections = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => getStorefrontCollections(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"collections\"] });\n },\n });\n };\n\n return {\n useStorefrontCollectionsList,\n useCollectionBySlug,\n useRefreshStorefrontCollections,\n };\n}\n\n","\"use client\";\n\nimport { useQuery, useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport {\n getStorefrontPages,\n getStorefrontPageBySlug,\n} from \"../../../core/client/store-api-pages.service\";\n\n/**\n * Hooks de páginas que usan el proxy /api/store.\n */\nexport function useStorePages() {\n const useStorefrontPagesList = () => {\n return useQuery({\n queryKey: [\"storefront\", \"pages\"],\n queryFn: () => getStorefrontPages(),\n });\n };\n\n const usePageBySlug = (slug: string) => {\n return useQuery({\n queryKey: [\"storefront\", \"page\", \"slug\", slug],\n queryFn: () => getStorefrontPageBySlug(slug),\n enabled: !!slug,\n });\n };\n\n const useRefreshStorefrontPages = () => {\n const queryClient = useQueryClient();\n return useMutation({\n mutationFn: () => getStorefrontPages(),\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: [\"storefront\", \"pages\"] });\n },\n });\n };\n\n return {\n useStorefrontPagesList,\n usePageBySlug,\n useRefreshStorefrontPages,\n };\n}\n","\"use client\";\n\nimport { useMutation, useQuery } from \"@tanstack/react-query\";\nimport { useEffect, useRef } from \"react\";\nimport { toast } from \"sonner\";\nimport { useCart } from \"@ecomiq/storefront/react\";\nimport { isCartNotActiveApiError } from \"../../../core/client/store-api-errors\";\nimport {\n getCart,\n createCart,\n patchCartBuyer,\n patchCartAddresses,\n addCartItem,\n checkoutCart,\n uploadPaymentReceipt,\n getCartCheckout,\n getCartPaymentMethods,\n getShippingOptions,\n putCartShippingMethod,\n addCartCoupon,\n removeCartCoupon,\n} from \"../../../core/client/store-api-cart.service\";\nimport type {\n CartBuyerRequest,\n CartAddressesRequest,\n CartCreateRequest,\n CartResponse,\n CartCheckoutRequest,\n CartCheckoutResponse,\n CartCheckoutReadResponse,\n CartPaymentReceiptResponse,\n CartPaymentMethodsResponse,\n CartShippingMethodPutRequest,\n CartCouponRequest,\n CartItemRequest,\n ShippingOptionsResponse,\n} from \"@ecomiq/storefront/react\";\n\n/**\n * Hooks de carrito que usan el proxy /api/store (`X-Store-Id` vía provider / server setters).\n */\nexport function useStoreCart() {\n const useGetCart = (cartId?: string | null) =>\n useQuery<CartResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null],\n queryFn: () => getCart(cartId ?? undefined),\n // Si devuelve 404 no reintentar; para otros errores solo un intento adicional como máximo.\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n // Evitar refetch automático al enfocar la ventana; el carrito se carga una sola vez aquí.\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n const useCreateCart = () =>\n useMutation<CartResponse, Error, CartCreateRequest>({\n mutationFn: (data) => createCart(data),\n });\n\n const useUpdateCartBuyer = () =>\n useMutation<\n CartResponse,\n Error,\n { data: CartBuyerRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => patchCartBuyer(data, cartId),\n });\n\n const useUpdateCartAddresses = () =>\n useMutation<\n CartResponse,\n Error,\n { data: CartAddressesRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => patchCartAddresses(data, cartId),\n });\n\n const useAddCartItem = () =>\n useMutation<\n CartResponse,\n Error,\n CartItemRequest & { cartId: string }\n >({\n mutationFn: ({ cartId, ...data }) => addCartItem(data, cartId),\n });\n\n const useCheckoutCart = () =>\n useMutation<\n CartCheckoutResponse,\n Error,\n { data: CartCheckoutRequest; cartId: string }\n >({\n mutationFn: ({ data, cartId }) => checkoutCart(data, cartId),\n });\n\n const useUploadPaymentReceipt = () =>\n useMutation<\n CartPaymentReceiptResponse,\n Error,\n { cartId: string; file: File }\n >({\n mutationFn: ({ cartId, file }) => uploadPaymentReceipt(cartId, file),\n });\n\n const useGetCartCheckout = (cartId?: string | null) => {\n const inactiveHandledRef = useRef<string | null>(null);\n\n const query = useQuery<CartCheckoutReadResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null, \"checkout\"],\n queryFn: () => getCartCheckout(cartId!),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n if (status === 400 && isCartNotActiveApiError(error)) return false;\n return failureCount < 1;\n },\n /** Evita GET repetidos al cambiar de paso / re-render; `refetch()` sigue forzando actualización tras mutaciones. */\n staleTime: 60_000,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n useEffect(() => {\n inactiveHandledRef.current = null;\n }, [cartId]);\n\n useEffect(() => {\n if (!cartId) return;\n if (!query.isError || !query.error) return;\n if (!isCartNotActiveApiError(query.error)) return;\n if (inactiveHandledRef.current === cartId) return;\n inactiveHandledRef.current = cartId;\n toast.error(\n \"Este carrito ya no está disponible. Se ha vaciado tu bolsa para que puedas empezar de nuevo.\",\n );\n useCart.getState().clearCartSession();\n }, [cartId, query.isError, query.error]);\n\n return query;\n };\n\n const useGetCartPaymentMethods = (cartId?: string | null) =>\n useQuery<CartPaymentMethodsResponse, Error>({\n queryKey: [\"storefront\", \"cart\", cartId ?? null, \"payment-methods\"],\n queryFn: () => getCartPaymentMethods(cartId ?? undefined),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n refetchOnWindowFocus: false,\n enabled: !!cartId,\n });\n\n const useGetShippingOptions = (\n cartId: string | null | undefined,\n postalCode: string | undefined,\n enabled: boolean,\n ) =>\n useQuery<ShippingOptionsResponse, Error>({\n queryKey: [\n \"storefront\",\n \"cart\",\n cartId ?? null,\n \"shipping-options\",\n postalCode ?? \"\",\n ],\n queryFn: () => getShippingOptions(cartId!, postalCode!),\n retry: (failureCount, error) => {\n const status = (error as Error & { status?: number }).status;\n if (status === 404) return false;\n return failureCount < 1;\n },\n refetchOnWindowFocus: false,\n enabled: !!cartId && !!postalCode?.trim() && enabled,\n });\n\n const usePutCartShippingMethod = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; data: CartShippingMethodPutRequest }\n >({\n mutationFn: ({ cartId, data }) => putCartShippingMethod(cartId, data),\n });\n\n const useAddCartCoupon = () =>\n useMutation<\n CartResponse,\n Error,\n { cartId: string; data: CartCouponRequest }\n >({\n mutationFn: ({ cartId, data }) => addCartCoupon(cartId, data),\n });\n\n const useRemoveCartCoupon = () =>\n useMutation<CartResponse, Error, { cartId: string; code: string }>({\n mutationFn: ({ cartId, code }) => removeCartCoupon(cartId, code),\n });\n\n return {\n useCreateCart,\n useGetCart,\n useGetCartCheckout,\n useUpdateCartBuyer,\n useUpdateCartAddresses,\n useAddCartItem,\n useCheckoutCart,\n useUploadPaymentReceipt,\n useGetCartPaymentMethods,\n useGetShippingOptions,\n usePutCartShippingMethod,\n useAddCartCoupon,\n useRemoveCartCoupon,\n };\n}\n","import { create } from 'zustand';\nimport { StorefrontSettings } from '../../core/models/store';\n\ntype Drawers = {\n cart: boolean;\n search: boolean;\n menu: boolean;\n filter: boolean;\n [key: string]: boolean;\n};\ntype Modals = {\n login: boolean;\n signup: boolean;\n [key: string]: boolean;\n};\n\ntype StoreState = {\n data: StorefrontSettings | null;\n drawers: Drawers;\n modals: Modals;\n openDrawer: (drawer: keyof Drawers) => void;\n closeDrawer: (drawer: keyof Drawers) => void;\n toggleDrawer: (drawer: keyof Drawers) => void;\n closeAllDrawers: () => void;\n openModal: (modal: keyof Modals) => void;\n closeModal: (modal: keyof Modals) => void;\n toggleModal: (modal: keyof Modals) => void;\n closeAllModals: () => void;\n};\n\nexport const useStore = create<StoreState>()(\n (set) => ({\n data: null,\n drawers: {\n cart: false,\n search: false,\n menu: false,\n filter: false,\n },\n openDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: true,\n },\n })),\n closeDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: false,\n },\n })),\n toggleDrawer: (drawer) =>\n set((state) => ({\n drawers: {\n ...state.drawers,\n [drawer]: !state.drawers[drawer],\n },\n })),\n closeAllDrawers: () =>\n set((state) => ({\n drawers: Object.keys(state.drawers).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Drawers\n ),\n })),\n modals: {\n login: false,\n signup: false,\n },\n openModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: true,\n },\n })),\n closeModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n login: false,\n signup: false,\n [modal]: false,\n },\n })),\n toggleModal: (modal) =>\n set((state) => ({\n modals: {\n ...state.modals,\n [modal]: !state.modals[modal],\n },\n })),\n closeAllModals: () =>\n set((state) => ({\n modals: Object.keys(state.modals).reduce(\n (acc, key) => ({ ...acc, [key]: false }),\n {} as Modals\n ),\n })),\n }),\n);\n","import type { StorefrontPageDetail, StorefrontSettings } from \"@ecomiq/storefront/react\";\nimport { StorefrontPageDetailSchema } from \"@ecomiq/storefront/react\";\n\nfunction isRenderableCmsPage(p: { status?: string }): boolean {\n if (!p.status) return true;\n return p.status === \"published\";\n}\n\n/**\n * Busca una página CMS en `settings.cms.pages` (payload de `getPublicStore` / settings)\n * y la valida como `StorefrontPageDetail` para `DynamicPage`.\n */\nexport function findStorefrontCmsPageBySlug(\n settings: StorefrontSettings | null | undefined,\n slug: string\n): StorefrontPageDetail | null {\n const pages = settings?.cms?.pages;\n if (!pages?.length) return null;\n const raw = pages.find(\n (p) => p.slug === slug && isRenderableCmsPage(p as { status?: string })\n );\n if (!raw) return null;\n const parsed = StorefrontPageDetailSchema.safeParse(raw);\n return parsed.success ? parsed.data : null;\n}\n","import { StoreTheme } from \"@ecomiq/storefront/react\"\nimport { JSX } from \"react\"\n\ninterface ThemeInjectorProps {\n theme: StoreTheme\n className?: string\n}\n\nexport function SafeThemeInjector({ theme, className }: ThemeInjectorProps): JSX.Element | null {\n try {\n // Validación de theme\n if (!theme || typeof theme !== 'object') {\n console.warn('ThemeInjector: Invalid theme provided')\n return null\n }\n\n if (!theme.colors || typeof theme.colors !== 'object') {\n console.warn('ThemeInjector: Theme colors are required')\n return null\n }\n\n const generateSafeCSSVariables = (): string => {\n const cssRules: string[] = [':root {']\n\n const toKebabCase = (input: string): string =>\n input\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/_/g, '-')\n .toLowerCase();\n \n // Helper function para validar y sanitizar valores CSS\n const sanitizeCSSValue = (value: unknown): string | null => {\n if (typeof value !== 'string') return null\n const trimmed = value.trim()\n if (!trimmed) return null\n \n // Basic CSS value validation (puedes expandir según necesites)\n const isValidCSSValue = /^[a-zA-Z0-9\\s,()#.-]+$/.test(trimmed)\n return isValidCSSValue ? trimmed : null\n }\n\n // Colors: --color-* (Tailwind) and --theme-* (globals.css var(--theme-border), etc.)\n if (theme.colors && typeof theme.colors === 'object') {\n Object.entries(theme.colors).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --color-${key}: ${sanitizedValue};`)\n cssRules.push(` --theme-${key}: ${sanitizedValue};`)\n // También inyectamos variables “raw” para componentes que usan var(--popover), var(--background), etc.\n cssRules.push(` --${key}: ${sanitizedValue};`)\n cssRules.push(` --${toKebabCase(key)}: ${sanitizedValue};`)\n }\n })\n }\n\n // Fonts con validación\n if (theme.fonts && typeof theme.fonts === 'object') {\n Object.entries(theme.fonts).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --font-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n // Spacing con validación\n if (theme.spacing && typeof theme.spacing === 'object') {\n Object.entries(theme.spacing).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --spacing-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n // Border Radius con validación\n if (theme.borderRadius && typeof theme.borderRadius === 'object') {\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --radius-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n // Shadows con validación\n if (theme.shadows && typeof theme.shadows === 'object') {\n Object.entries(theme.shadows).forEach(([key, value]) => {\n const sanitizedValue = sanitizeCSSValue(value)\n if (sanitizedValue) {\n cssRules.push(` --shadow-${key}: ${sanitizedValue};`)\n }\n })\n }\n\n cssRules.push('}')\n return cssRules.join('\\n')\n }\n\n const cssVariables = generateSafeCSSVariables()\n\n return (\n <style\n dangerouslySetInnerHTML={{ __html: cssVariables }}\n data-theme-injector={theme.id}\n data-theme-name={theme.name}\n className={className}\n suppressHydrationWarning\n />\n )\n } catch (error) {\n console.error('ThemeInjector: Error generating theme styles', error)\n return null\n }\n}","\"use client\";\n\nimport { useMemo, useState, useCallback, useEffect } from \"react\";\nimport { formatCurrency, type StorefrontProductDetail, type StorefrontVariant } from \"@ecomiq/storefront/react\";\nimport type { OptionGroup, SelectedOptions } from \"./types\";\n\nfunction buildOptionGroups(variants: StorefrontVariant[]): OptionGroup[] {\n const map = new Map<string, Map<string, string>>();\n for (const v of variants) {\n for (const opt of v.options ?? []) {\n const key = opt.key;\n const name = opt.name ?? key;\n if (!map.has(key)) map.set(key, new Map());\n map.get(key)!.set(opt.value, name);\n }\n }\n return Array.from(map.entries()).map(([key, valueMap]) => ({\n key,\n name: Array.from(valueMap.values())[0] ?? key,\n values: Array.from(valueMap.keys()),\n }));\n}\n\nfunction findVariant(\n variants: StorefrontVariant[],\n selected: SelectedOptions,\n hasConfigurableOptions: boolean\n): StorefrontVariant | null {\n // Producto con variante(s) pero sin opciones (p. ej. options: []): una sola variante implícita\n if (!hasConfigurableOptions && variants.length > 0) {\n return variants[0] ?? null;\n }\n if (Object.keys(selected).length === 0) return null;\n for (const v of variants) {\n const opts = v.options ?? [];\n const match =\n opts.length > 0 &&\n opts.every((o: { key: string; value: string }) => selected[o.key] === o.value);\n if (match) return v;\n }\n return null;\n}\n\nfunction getInitialOptions(\n variants: StorefrontVariant[],\n optionGroups: OptionGroup[]\n): SelectedOptions {\n const first = variants[0];\n if (!first) return {};\n const opts = first.options ?? [];\n const selected: SelectedOptions = {};\n for (const g of optionGroups) {\n const o = opts.find((x: { key: string; value: string }) => x.key === g.key);\n if (o) selected[g.key] = o.value;\n }\n return selected;\n}\n\nexport type ProductVariantSelectorProps = {\n product: StorefrontProductDetail;\n currency?: string;\n features?: string[];\n onVariantChange?: (variant: StorefrontVariant | null, price: number) => void;\n children?: (props: {\n product: StorefrontProductDetail;\n selectedVariant: StorefrontVariant | null;\n displayPrice: number;\n compareAtPrice: number | null | undefined;\n isAvailable: boolean;\n selectedOptions: SelectedOptions;\n }) => React.ReactNode;\n};\n\nexport function ProductVariantSelector({\n product,\n currency = \"USD\",\n features = [],\n onVariantChange,\n children,\n}: ProductVariantSelectorProps) {\n const variants = useMemo(() => product.variants ?? [], [product.variants]);\n const optionGroups = useMemo(() => buildOptionGroups(variants), [variants]);\n const hasConfigurableOptions = optionGroups.length > 0;\n\n const [selectedOptions, setSelectedOptions] = useState<SelectedOptions>(() =>\n getInitialOptions(variants, optionGroups)\n );\n\n const selectedVariant = useMemo(\n () => findVariant(variants, selectedOptions, hasConfigurableOptions),\n [variants, selectedOptions, hasConfigurableOptions]\n );\n\n const displayPrice = selectedVariant?.price ?? product.price ?? 0;\n const compareAtPrice = selectedVariant?.compareAtPrice ?? product.compareAtPrice;\n const isAvailable =\n (selectedVariant ? (selectedVariant.quantity ?? 0) > 0 : product.isAvailable) ?? true;\n\n useEffect(() => {\n onVariantChange?.(selectedVariant, displayPrice);\n }, [selectedVariant, displayPrice, onVariantChange]);\n\n const setOption = useCallback((key: string, value: string) => {\n setSelectedOptions((prev) => ({ ...prev, [key]: value }));\n }, []);\n\n const hasVariants = hasConfigurableOptions;\n\n return (\n <div className=\"space-y-5\">\n <div className=\"flex items-baseline gap-2 flex-wrap\">\n <span\n className=\"inline-flex items-center rounded-md bg-primary/10 px-2.5 py-0.5 text-base font-semibold text-primary\"\n data-testid=\"product-display-price\"\n >\n {formatCurrency(displayPrice, currency)}\n </span>\n {compareAtPrice != null && compareAtPrice > displayPrice && (\n <span className=\"text-sm text-muted-foreground line-through\">\n {formatCurrency(compareAtPrice, currency)}\n </span>\n )}\n </div>\n\n {/* Option groups (Color, Size, etc.) */}\n {hasVariants &&\n optionGroups.map((group) => (\n <div key={group.key} className=\"space-y-2\">\n <span className=\"text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {group.name}\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.values.map((value) => {\n const isSelected = selectedOptions[group.key] === value;\n const isColorLike =\n group.key.toLowerCase().includes(\"color\") ||\n group.key.toLowerCase().includes(\"colour\");\n return (\n <button\n key={value}\n type=\"button\"\n onClick={() => setOption(group.key, value)}\n className={\n isColorLike\n ? `min-w-[72px] rounded-md border-2 px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-primary text-foreground\"\n : \"border-border bg-muted/30 text-foreground hover:border-muted-foreground/50\"\n }`\n : `rounded-md border px-3 py-2 text-sm font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 ${\n isSelected\n ? \"border-primary bg-muted ring-1 ring-primary\"\n : \"border-border bg-transparent text-muted-foreground hover:border-muted-foreground/50 hover:text-foreground\"\n }`\n }\n style={\n isColorLike && isSelected && value.toLowerCase() === \"black\"\n ? { backgroundColor: \"#1a1a1a\", borderColor: \"#1a1a1a\", color: \"#fff\" }\n : isColorLike && value.toLowerCase() === \"white\"\n ? { backgroundColor: \"#fafafa\", color: \"#1a1a1a\", borderColor: \"#e5e5e5\" }\n : undefined\n }\n data-testid={`variant-option-${group.key}-${value}`}\n >\n {value}\n </button>\n );\n })}\n </div>\n </div>\n ))}\n\n {features.length > 0 && (\n <ul className=\"list-disc list-inside space-y-1 text-sm text-muted-foreground\">\n {features.map((f, i) => (\n <li key={i}>{f}</li>\n ))}\n </ul>\n )}\n\n {/* Add to cart slot */}\n {children?.({\n product,\n selectedVariant,\n displayPrice,\n compareAtPrice,\n isAvailable,\n selectedOptions,\n })}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport type {\n CmsRenderBlock,\n CmsRenderSection,\n CmsRenderSettings,\n} from \"./types\";\n\nconst PRODUCT_SORTS = new Set([\n \"price_asc\",\n \"price_desc\",\n \"name_asc\",\n \"name_desc\",\n \"newest\",\n]);\n\nexport function orderedBlocks(blocks: CmsRenderBlock[] | undefined) {\n return [...(blocks ?? [])].sort((a, b) => a.order - b.order);\n}\n\nexport function getCmsSectionKey(section: CmsRenderSection, index: number) {\n return (\n section.id ??\n `${canonicalSectionType(section.type)}-${section.order}-${index}`\n );\n}\n\nexport function getCmsBlockKey(block: CmsRenderBlock, index: number) {\n return block.id ?? `${block.type}-${block.order}-${index}`;\n}\n\nexport function canonicalSectionType(type: string) {\n if (type === \"page-hero\") {\n return \"hero\";\n }\n\n if (type === \"featured-products\") {\n return \"product-list\";\n }\n\n return type;\n}\n\nexport function storefrontHref(value: string) {\n const href = value.trim();\n if (!href) {\n return \"#\";\n }\n\n if (\n href === \"#\" ||\n href.startsWith(\"http://\") ||\n href.startsWith(\"https://\") ||\n href.startsWith(\"mailto:\") ||\n href.startsWith(\"tel:\")\n ) {\n return href;\n }\n\n if (href === \"/\") {\n return \"/store\";\n }\n\n if (href.startsWith(\"/store\") || href.startsWith(\"/product\")) {\n return href;\n }\n\n if (\n href.startsWith(\"/collections\") ||\n href.startsWith(\"/pages\") ||\n href.startsWith(\"/account\")\n ) {\n return `/store${href}`;\n }\n\n return href;\n}\n\nexport function sectionTitle(section: CmsRenderSection) {\n return (\n settingString(section.settings, \"title\") ||\n settingString(section.settings, \"name\")\n );\n}\n\nexport function sectionTitleContent(section: CmsRenderSection) {\n return (\n settingContent(section.settings, \"title\") ||\n settingContent(section.settings, \"name\")\n );\n}\n\nexport function settingString(\n settings: CmsRenderSettings | undefined,\n key: string,\n) {\n const value = settings?.[key];\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function settingContent(\n settings: CmsRenderSettings | undefined,\n key: string,\n): ReactNode {\n const value = settings?.[key];\n\n if (typeof value === \"string\" || typeof value === \"number\") {\n return value;\n }\n\n if (value == null || typeof value === \"boolean\") {\n return \"\";\n }\n\n return value as ReactNode;\n}\n\nexport function settingNumber(\n settings: CmsRenderSettings | undefined,\n key: string,\n fallback: number,\n) {\n const value = settings?.[key];\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value === \"string\") {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n }\n\n return fallback;\n}\n\nexport function layoutChildren(settings: CmsRenderSettings, key: string) {\n const children = settings.children;\n if (\n typeof children !== \"object\" ||\n children === null ||\n Array.isArray(children)\n ) {\n return [];\n }\n\n const value = (children as Record<string, unknown>)[key];\n return Array.isArray(value) ? (value as CmsRenderSection[]) : [];\n}\n\nexport function layoutPadding(value: string) {\n switch (value) {\n case \"none\":\n return \"py-0\";\n case \"small\":\n return \"py-6\";\n case \"large\":\n return \"py-16\";\n default:\n return \"py-10\";\n }\n}\n\nexport function layoutMaxWidth(value: string) {\n switch (value) {\n case \"full\":\n return \"max-w-none\";\n case \"narrow\":\n return \"max-w-3xl\";\n default:\n return \"max-w-7xl\";\n }\n}\n\nexport function layoutBackground(value: string) {\n switch (value) {\n case \"muted\":\n return \"bg-neutral-50\";\n case \"dark\":\n return \"bg-neutral-950 text-white\";\n default:\n return \"bg-white\";\n }\n}\n\nexport function layoutGap(value: string) {\n switch (value) {\n case \"none\":\n return \"gap-0\";\n case \"small\":\n return \"gap-3\";\n case \"large\":\n return \"gap-8\";\n default:\n return \"gap-5\";\n }\n}\n\nexport function layoutAlign(value: string) {\n switch (value) {\n case \"start\":\n return \"items-start\";\n case \"center\":\n return \"items-center\";\n case \"end\":\n return \"items-end\";\n default:\n return \"items-stretch\";\n }\n}\n\nexport function layoutJustify(value: string) {\n switch (value) {\n case \"center\":\n return \"justify-center\";\n case \"end\":\n return \"justify-end\";\n case \"between\":\n return \"justify-between\";\n default:\n return \"justify-start\";\n }\n}\n\nexport function productSortValue(value: string) {\n return PRODUCT_SORTS.has(value) ? value : \"newest\";\n}\n\nexport function sanitizeHtml(html: string) {\n return html\n .replace(/<script[\\s\\S]*?>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/<style[\\s\\S]*?>[\\s\\S]*?<\\/style>/gi, \"\")\n .replace(/<(iframe|object|embed|link|meta)[\\s\\S]*?>/gi, \"\")\n .replace(/\\son\\w+\\s*=\\s*(['\"]).*?\\1/gi, \"\")\n .replace(/\\s(href|src)\\s*=\\s*(['\"])\\s*javascript:[\\s\\S]*?\\2/gi, \"\");\n}\n\nexport const DEFAULT_CMS_IMAGE_URL =\n \"data:image/svg+xml;charset=UTF-8,\" +\n encodeURIComponent(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"640\" height=\"360\" viewBox=\"0 0 640 360\">\n <rect width=\"640\" height=\"360\" fill=\"#f4f4f5\"/>\n <rect x=\"40\" y=\"36\" width=\"560\" height=\"288\" rx=\"20\" fill=\"#ffffff\" stroke=\"#d4d4d8\"/>\n <path d=\"M148 246l102-102 78 78 48-48 120 120H148z\" fill=\"#d4d4d8\"/>\n <circle cx=\"456\" cy=\"118\" r=\"32\" fill=\"#e4e4e7\"/>\n </svg>\n `);\n","import type { ImgHTMLAttributes, ReactNode } from \"react\";\nimport type { CmsLinkProps, CmsRenderSection } from \"./types\";\nimport {\n DEFAULT_CMS_IMAGE_URL,\n sectionTitleContent,\n settingContent,\n} from \"./utils\";\n\nexport function SectionHeading({ section }: { section: CmsRenderSection }) {\n const title = sectionTitleContent(section);\n const subtitle = settingContent(section.settings, \"subtitle\");\n\n if (!title && !subtitle) {\n return null;\n }\n\n return (\n <div className=\"mb-6\">\n {title ? (\n <h2 className=\"text-2xl font-semibold tracking-tight text-neutral-950\">\n {title}\n </h2>\n ) : null}\n {subtitle ? (\n <p className=\"mt-2 text-sm text-neutral-600\">{subtitle}</p>\n ) : null}\n </div>\n );\n}\n\nexport function EmptyState({ children }: { children: ReactNode }) {\n return (\n <p className=\"rounded-lg border border-dashed p-6 text-center text-sm text-neutral-500\">\n {children}\n </p>\n );\n}\n\nexport function DefaultLink({ href, className, children }: CmsLinkProps) {\n return (\n <a href={href} className={className}>\n {children}\n </a>\n );\n}\n\ntype CmsImageProps = Omit<ImgHTMLAttributes<HTMLImageElement>, \"src\"> & {\n src?: string | null;\n fallbackSrc?: string;\n};\n\nexport function CmsImage({\n src,\n fallbackSrc = DEFAULT_CMS_IMAGE_URL,\n onError,\n ...props\n}: CmsImageProps) {\n const imageSrc = src?.trim() || fallbackSrc;\n\n return (\n <img\n src={imageSrc}\n onError={(event) => {\n onError?.(event);\n const image = event.currentTarget;\n\n if (image.dataset.cmsFallback === \"true\") {\n return;\n }\n\n image.dataset.cmsFallback = \"true\";\n image.src = fallbackSrc;\n }}\n {...props}\n />\n );\n}\n","import type { ComponentType } from \"react\";\nimport { CmsImage, SectionHeading } from \"./shared\";\nimport type { CmsLinkProps, CmsRenderBlock, CmsRenderSection } from \"./types\";\nimport {\n getCmsBlockKey,\n storefrontHref,\n orderedBlocks,\n sanitizeHtml,\n sectionTitleContent,\n settingContent,\n settingNumber,\n settingString,\n} from \"./utils\";\n\nexport function RichTextSection({ section }: { section: CmsRenderSection }) {\n const html =\n settingString(section.settings, \"html\") ||\n settingString(section.settings, \"content\") ||\n settingString(section.settings, \"richText\");\n\n return (\n <section className=\"container mx-auto px-4 py-10\">\n <SectionHeading section={section} />\n {html ? (\n <div\n className=\"prose prose-neutral max-w-none\"\n dangerouslySetInnerHTML={{ __html: sanitizeHtml(html) }}\n />\n ) : null}\n </section>\n );\n}\n\nexport function CustomHtmlSection({ section }: { section: CmsRenderSection }) {\n const html =\n settingString(section.settings, \"html\") ||\n settingString(section.settings, \"content\");\n\n if (!html) {\n return null;\n }\n\n return (\n <section\n className=\"cms-custom-html\"\n dangerouslySetInnerHTML={{ __html: sanitizeHtml(html) }}\n />\n );\n}\n\nexport function FloatingBlockSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const settings = section.settings ?? {};\n const title = settingContent(settings, \"title\");\n const text = settingContent(settings, \"text\");\n const imageUrl = settingString(settings, \"imageUrl\");\n const linkText = settingContent(settings, \"linkText\");\n const linkUrl = storefrontHref(settingString(settings, \"linkUrl\"));\n const x = boundedPercent(settingNumber(settings, \"x\", 8));\n const y = boundedPercent(settingNumber(settings, \"y\", 12));\n const width = Math.min(\n Math.max(boundedPercent(settingNumber(settings, \"width\", 28)), 12),\n 90,\n );\n const zIndex = Math.max(Math.round(settingNumber(settings, \"zIndex\", 20)), 1);\n\n if (!title && !text && !imageUrl) {\n return null;\n }\n\n const content = (\n <div className=\"overflow-hidden rounded-lg border border-black/10 bg-white text-neutral-950 shadow-lg\">\n {imageUrl ? (\n <div className=\"aspect-[16/9] bg-neutral-100\">\n <CmsImage\n src={imageUrl}\n alt=\"\"\n className=\"h-full w-full object-cover\"\n loading=\"lazy\"\n />\n </div>\n ) : null}\n <div className=\"p-4\">\n {title ? (\n <p className=\"text-base font-semibold leading-6\">{title}</p>\n ) : null}\n {text ? (\n <p className=\"mt-1 text-sm leading-5 text-neutral-600\">{text}</p>\n ) : null}\n {linkText && linkUrl !== \"#\" ? (\n <span className=\"mt-3 inline-flex text-sm font-medium underline underline-offset-4\">\n {linkText}\n </span>\n ) : null}\n </div>\n </div>\n );\n\n return (\n <div\n className=\"absolute\"\n style={{\n left: `${x}%`,\n top: `${y}%`,\n width: `${width}%`,\n zIndex,\n }}\n >\n {linkText && linkUrl !== \"#\" ? (\n <LinkComponent href={linkUrl}>{content}</LinkComponent>\n ) : (\n content\n )}\n </div>\n );\n}\n\nexport function FaqSection({ section }: { section: CmsRenderSection }) {\n const items = orderedBlocks(section.blocks);\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"divide-y rounded-lg border bg-white\">\n {items.map((item, index) => (\n <details key={getCmsBlockKey(item, index)} className=\"group p-4\">\n <summary className=\"cursor-pointer text-sm font-medium text-neutral-950\">\n {settingContent(item.settings, \"question\") ||\n settingContent(item.settings, \"title\")}\n </summary>\n <p className=\"mt-2 text-sm leading-6 text-neutral-600\">\n {settingContent(item.settings, \"answer\") ||\n settingContent(item.settings, \"content\")}\n </p>\n </details>\n ))}\n </div>\n </section>\n );\n}\n\nfunction boundedPercent(value: number) {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), 100);\n}\n\nexport function NewsletterSection({ section }: { section: CmsRenderSection }) {\n const title = sectionTitleContent(section) || \"Recibe novedades\";\n const subtitle = settingContent(section.settings, \"subtitle\");\n const placeholder =\n settingString(section.settings, \"placeholder\") || \"tu@email.com\";\n const buttonText =\n settingContent(section.settings, \"buttonText\") || \"Suscribirme\";\n\n return (\n <section className=\"bg-neutral-950 px-4 py-14 text-white\">\n <div className=\"mx-auto max-w-2xl text-center\">\n <h2 className=\"text-3xl font-semibold\">{title}</h2>\n {subtitle ? <p className=\"mt-3 text-white/70\">{subtitle}</p> : null}\n <form className=\"mt-6 flex flex-col gap-2 sm:flex-row\">\n <input\n type=\"email\"\n placeholder={placeholder}\n className=\"h-10 flex-1 rounded-md border border-white/20 bg-white px-3 text-sm text-neutral-950 outline-none\"\n />\n <button\n type=\"submit\"\n className=\"h-10 rounded-md bg-white px-5 text-sm font-medium text-neutral-950\"\n >\n {buttonText}\n </button>\n </form>\n </div>\n </section>\n );\n}\n\nexport function IconRowSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n return (\n <section className=\"container mx-auto px-4 py-10\">\n <SectionHeading section={section} />\n <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n {orderedBlocks(section.blocks).map((block, index) => {\n const settings = block.settings ?? {};\n const href = storefrontHref(settingString(settings, \"linkUrl\"));\n const content = (\n <div className=\"rounded-lg border bg-white p-4\">\n <p className=\"text-sm font-medium text-neutral-950\">\n {settingContent(settings, \"title\") ||\n settingContent(settings, \"label\")}\n </p>\n <p className=\"mt-1 text-sm text-neutral-600\">\n {settingContent(settings, \"subtitle\") ||\n settingContent(settings, \"description\")}\n </p>\n </div>\n );\n\n return href === \"#\" ? (\n <div key={getCmsBlockKey(block, index)}>{content}</div>\n ) : (\n <LinkComponent key={getCmsBlockKey(block, index)} href={href}>\n {content}\n </LinkComponent>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function TestimonialsSection({\n section,\n}: {\n section: CmsRenderSection;\n}) {\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"grid gap-4 md:grid-cols-3\">\n {orderedBlocks(section.blocks).map((block, index) => (\n <blockquote\n key={getCmsBlockKey(block, index)}\n className=\"rounded-lg border bg-white p-5\"\n >\n <p className=\"text-sm leading-6 text-neutral-700\">\n {settingString(block.settings, \"quote\") ||\n settingContent(block.settings, \"content\") ||\n settingContent(block.settings, \"text\")}\n </p>\n <footer className=\"mt-4 text-sm font-medium text-neutral-950\">\n {settingContent(block.settings, \"author\") ||\n settingContent(block.settings, \"name\")}\n </footer>\n </blockquote>\n ))}\n </div>\n </section>\n );\n}\n\nexport function StatsSection({ section }: { section: CmsRenderSection }) {\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n {orderedBlocks(section.blocks).map((block, index) => (\n <div\n key={getCmsBlockKey(block, index)}\n className=\"rounded-lg border bg-white p-5\"\n >\n <p className=\"text-3xl font-semibold text-neutral-950\">\n {settingContent(block.settings, \"value\")}\n </p>\n <p className=\"mt-2 text-sm text-neutral-600\">\n {settingContent(block.settings, \"label\") ||\n settingContent(block.settings, \"title\")}\n </p>\n </div>\n ))}\n </div>\n </section>\n );\n}\n\nexport function TimelineSection({ section }: { section: CmsRenderSection }) {\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"space-y-4 border-l pl-5\">\n {orderedBlocks(section.blocks).map((block, index) => (\n <article key={getCmsBlockKey(block, index)} className=\"relative\">\n <span className=\"absolute -left-[27px] top-1 size-3 rounded-full bg-neutral-950\" />\n <p className=\"text-sm font-medium text-neutral-950\">\n {settingContent(block.settings, \"title\")}\n </p>\n <p className=\"mt-1 text-sm text-neutral-600\">\n {settingContent(block.settings, \"description\") ||\n settingContent(block.settings, \"content\")}\n </p>\n </article>\n ))}\n </div>\n </section>\n );\n}\n\nexport function ContactFormSection({ section }: { section: CmsRenderSection }) {\n const fields = orderedBlocks(section.blocks);\n const submitText = settingString(section.settings, \"submitText\") || \"Enviar\";\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <form className=\"mx-auto grid max-w-2xl gap-3\">\n {(fields.length > 0 ? fields : defaultContactFields()).map(\n (field, index) => (\n <ContactField key={getCmsBlockKey(field, index)} field={field} />\n ),\n )}\n <button className=\"h-10 rounded-md bg-neutral-950 px-4 text-sm font-medium text-white\">\n {submitText}\n </button>\n </form>\n </section>\n );\n}\n\nfunction ContactField({ field }: { field: CmsRenderBlock }) {\n const type = settingString(field.settings, \"type\") || \"text\";\n const label = settingString(field.settings, \"label\");\n const placeholder = settingString(field.settings, \"placeholder\");\n const name = settingString(field.settings, \"name\");\n const className = \"h-10 rounded-md border px-3 text-sm\";\n\n if (type === \"textarea\") {\n return (\n <textarea\n name={name}\n aria-label={label || placeholder}\n className=\"min-h-32 rounded-md border px-3 py-2 text-sm\"\n placeholder={placeholder || label}\n />\n );\n }\n\n if (type === \"select\") {\n const rawOptions = field.settings?.options;\n const options = Array.isArray(rawOptions)\n ? rawOptions.filter((item): item is string => typeof item === \"string\")\n : settingString(field.settings, \"options\")\n .split(\"\\n\")\n .map((item) => item.trim())\n .filter(Boolean);\n\n return (\n <select name={name} aria-label={label} className={className}>\n <option value=\"\">{placeholder || label}</option>\n {options.map((option) => (\n <option key={option} value={option}>\n {option}\n </option>\n ))}\n </select>\n );\n }\n\n return (\n <input\n name={name}\n type={type}\n aria-label={label || placeholder}\n className={className}\n placeholder={placeholder || label}\n />\n );\n}\n\nfunction defaultContactFields(): CmsRenderBlock[] {\n return [\n {\n type: \"field\",\n order: 1,\n settings: { name: \"fullName\", type: \"text\", label: \"Nombre\" },\n },\n {\n type: \"field\",\n order: 2,\n settings: { name: \"email\", type: \"email\", label: \"Email\" },\n },\n {\n type: \"field\",\n order: 3,\n settings: { name: \"message\", type: \"textarea\", label: \"Mensaje\" },\n },\n ];\n}\n\nexport function UnknownSection({ section }: { section: CmsRenderSection }) {\n return (\n <section className=\"container mx-auto px-4 py-8\">\n <div className=\"rounded border border-dashed p-4 text-sm text-neutral-500\">\n Seccion tipo &quot;{section.type}&quot; pendiente de renderer.\n </div>\n </section>\n );\n}\n","export const countryCurrency = {\n \"PEN\": \"es-PE\",\n \"USD\": \"en-US\",\n \"COP\": \"es-CO\",\n \"MXN\": \"es-MX\",\n}\n","import { countryCurrency } from \"../constants/currency\";\n\n/**\n * Formats a number as currency using the store's locale for the given currency code.\n * Uses countryCurrency to pick the right locale (e.g. PEN → es-PE, USD → en-US).\n */\nexport function formatCurrency(\n amount: number,\n currency: string = \"USD\"\n): string {\n const locale =\n countryCurrency[currency as keyof typeof countryCurrency] ?? \"en-US\";\n return new Intl.NumberFormat(locale, {\n style: \"currency\",\n currency,\n }).format(amount);\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport type { StorefrontCollection } from \"../../../core/models/collection\";\nimport { formatCurrency } from \"../../../core/utils/format-currency\";\nimport { CmsImage, EmptyState, SectionHeading } from \"./shared\";\nimport type {\n CmsLinkProps,\n CmsProduct,\n CmsRenderBlock,\n CmsRenderSection,\n} from \"./types\";\nimport {\n DEFAULT_CMS_IMAGE_URL,\n getCmsBlockKey,\n storefrontHref,\n orderedBlocks,\n sectionTitleContent,\n settingContent,\n settingNumber,\n settingString,\n} from \"./utils\";\n\nexport function AnnouncementBarSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const text =\n settingContent(section.settings, \"text\") || sectionTitleContent(section);\n const linkText = settingContent(section.settings, \"linkText\");\n const href = storefrontHref(settingString(section.settings, \"linkUrl\"));\n\n if (!text) {\n return null;\n }\n\n return (\n <section className=\"bg-neutral-950 px-4 py-2 text-white\">\n <div className=\"container mx-auto flex flex-wrap items-center justify-center gap-2 text-center text-sm\">\n <span>{text}</span>\n {linkText && href !== \"#\" ? (\n <LinkComponent\n href={href}\n className=\"font-medium underline underline-offset-4\"\n >\n {linkText}\n </LinkComponent>\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function HeroSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const slides = orderedBlocks(section.blocks);\n const fallbackSlide: CmsRenderBlock = {\n id: `${section.id ?? \"section\"}-fallback`,\n type: \"slide\",\n order: 1,\n settings: section.settings ?? {},\n };\n const visibleSlides = slides.length > 0 ? slides : [fallbackSlide];\n\n return (\n <section className=\"bg-neutral-950 text-white\">\n <div className=\"flex snap-x overflow-x-auto\">\n {visibleSlides.map((slide, index) => {\n const settings = slide.settings ?? {};\n const imageUrl =\n settingString(settings, \"imageUrl\") ||\n settingString(section.settings, \"imageUrl\") ||\n DEFAULT_CMS_IMAGE_URL;\n const title =\n settingContent(settings, \"title\") ||\n settingContent(section.settings, \"title\") ||\n sectionTitleContent(section);\n const subtitle =\n settingContent(settings, \"subtitle\") ||\n settingContent(section.settings, \"subtitle\");\n const ctaText =\n settingContent(settings, \"ctaText\") ||\n settingContent(section.settings, \"ctaText\");\n const ctaUrl =\n settingString(settings, \"ctaUrl\") ||\n settingString(section.settings, \"ctaUrl\");\n const href = storefrontHref(ctaUrl);\n\n return (\n <article\n key={getCmsBlockKey(slide, index)}\n className=\"relative min-h-[520px] w-full shrink-0 snap-start overflow-hidden\"\n >\n <CmsImage\n src={imageUrl}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover opacity-75\"\n />\n <div className=\"absolute inset-0 bg-gradient-to-r from-black/70 via-black/35 to-transparent\" />\n <div className=\"container relative z-10 mx-auto flex min-h-[520px] items-center px-4\">\n <div className=\"max-w-2xl py-16\">\n <h1 className=\"text-4xl font-semibold tracking-tight md:text-6xl\">\n {title}\n </h1>\n {subtitle ? (\n <p className=\"mt-4 max-w-xl text-base text-white/85 md:text-lg\">\n {subtitle}\n </p>\n ) : null}\n {ctaText && href !== \"#\" ? (\n <LinkComponent\n href={href}\n className=\"mt-8 inline-flex h-10 items-center rounded-md bg-white px-5 text-sm font-medium text-neutral-950 transition hover:bg-white/90\"\n >\n {ctaText}\n </LinkComponent>\n ) : null}\n </div>\n </div>\n </article>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function ProductsSection({\n section,\n products,\n carousel,\n linkComponent,\n currency,\n preview,\n}: {\n section: CmsRenderSection;\n products: CmsProduct[];\n carousel: boolean;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n preview: boolean;\n}) {\n const placeholders = preview && products.length === 0;\n const count = Math.min(\n productPreviewCount(section, carousel),\n carousel ? 5 : 8,\n );\n\n return (\n <section className={carousel ? \"py-12\" : \"container mx-auto px-4 py-12\"}>\n {carousel ? (\n <div className=\"container mx-auto px-4\">\n <SectionHeading section={section} />\n </div>\n ) : (\n <SectionHeading section={section} />\n )}\n\n <div className={carousel ? \"container mx-auto overflow-x-auto px-4\" : \"\"}>\n <div\n className={\n carousel\n ? \"flex min-w-full gap-4 pb-2\"\n : \"grid grid-cols-2 gap-4 sm:grid-cols-3 lg:grid-cols-4\"\n }\n >\n {placeholders\n ? Array.from({ length: count }).map((_, index) => (\n <ProductPlaceholder key={index} carousel={carousel} />\n ))\n : products.map((product) => (\n <ProductCard\n key={product.id}\n product={product}\n carousel={carousel}\n linkComponent={linkComponent}\n currency={currency}\n />\n ))}\n </div>\n </div>\n\n {!placeholders && products.length === 0 ? (\n <EmptyState>No hay productos para mostrar.</EmptyState>\n ) : null}\n </section>\n );\n}\n\nexport function CategoryGridSection({\n section,\n collections,\n linkComponent: LinkComponent,\n preview,\n}: {\n section: CmsRenderSection;\n collections: StorefrontCollection[];\n linkComponent: ComponentType<CmsLinkProps>;\n preview: boolean;\n}) {\n const blockItems = orderedBlocks(section.blocks)\n .map((block) => {\n const settings = block.settings ?? {};\n const name =\n settingContent(settings, \"name\") || settingContent(settings, \"title\");\n const url =\n settingString(settings, \"url\") || settingString(settings, \"linkUrl\");\n const imageUrl = settingString(settings, \"imageUrl\");\n\n if (!name) {\n return null;\n }\n\n return {\n id: getCmsBlockKey(block, block.order),\n name,\n href: storefrontHref(url || \"/collections\"),\n imageUrl: imageUrl || DEFAULT_CMS_IMAGE_URL,\n };\n })\n .filter(Boolean) as Array<{\n id: string;\n name: ReactNode;\n href: string;\n imageUrl: string;\n }>;\n const collectionItems = collections.map((collection) => ({\n id: collection.id,\n name: collection.name,\n href: `/store/collections/${collection.slug}`,\n imageUrl: collection.imageUrl || DEFAULT_CMS_IMAGE_URL,\n }));\n const previewItems = preview ? createPreviewCollections(section) : [];\n const items =\n blockItems.length > 0\n ? blockItems\n : collectionItems.length > 0\n ? collectionItems\n : previewItems;\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n {items.length > 0 ? (\n <div className=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-3\">\n {items.map((item) => (\n <LinkComponent\n key={item.id}\n href={item.href}\n className=\"group overflow-hidden rounded-lg border bg-white\"\n >\n <div className=\"aspect-[4/3] overflow-hidden bg-neutral-100\">\n <CmsImage\n src={item.imageUrl}\n alt=\"\"\n className=\"h-full w-full object-cover transition duration-300 group-hover:scale-105\"\n />\n </div>\n <div className=\"p-4\">\n <h3 className=\"text-base font-medium text-neutral-950\">\n {item.name}\n </h3>\n </div>\n </LinkComponent>\n ))}\n </div>\n ) : (\n <EmptyState>No hay categorias para mostrar.</EmptyState>\n )}\n </section>\n );\n}\n\nexport function PromoCardsSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n const cards = orderedBlocks(section.blocks);\n\n return (\n <section className=\"container mx-auto px-4 py-12\">\n <SectionHeading section={section} />\n <div className=\"grid gap-4 md:grid-cols-2\">\n {cards.map((card, index) => {\n const settings = card.settings ?? {};\n const title = settingContent(settings, \"title\");\n const subtitle = settingContent(settings, \"subtitle\");\n const imageUrl =\n settingString(settings, \"imageUrl\") || DEFAULT_CMS_IMAGE_URL;\n const ctaText = settingContent(settings, \"ctaText\");\n const ctaUrl = storefrontHref(\n settingString(settings, \"ctaUrl\") || settingString(settings, \"url\"),\n );\n\n return (\n <LinkComponent\n key={getCmsBlockKey(card, index)}\n href={ctaUrl}\n className=\"group relative min-h-[260px] overflow-hidden rounded-lg bg-neutral-900 text-white\"\n >\n <CmsImage\n src={imageUrl}\n alt=\"\"\n className=\"absolute inset-0 h-full w-full object-cover opacity-75 transition duration-300 group-hover:scale-105\"\n />\n <div className=\"absolute inset-0 bg-black/35\" />\n <div className=\"relative z-10 flex min-h-[260px] flex-col justify-end p-6\">\n <h3 className=\"text-2xl font-semibold\">{title}</h3>\n {subtitle ? (\n <p className=\"mt-2 text-white/85\">{subtitle}</p>\n ) : null}\n {ctaText ? (\n <span className=\"mt-4 text-sm font-medium\">{ctaText}</span>\n ) : null}\n </div>\n </LinkComponent>\n );\n })}\n </div>\n </section>\n );\n}\n\nexport function LogoSliderSection({\n section,\n linkComponent: LinkComponent,\n}: {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n}) {\n return (\n <section className=\"container mx-auto px-4 py-10\">\n <SectionHeading section={section} />\n <div className=\"flex gap-4 overflow-x-auto\">\n {orderedBlocks(section.blocks).map((block, index) => {\n const settings = block.settings ?? {};\n const imageUrl =\n settingString(settings, \"imageUrl\") || DEFAULT_CMS_IMAGE_URL;\n const alt = settingString(settings, \"alt\") || \"Logo\";\n const href = storefrontHref(settingString(settings, \"linkUrl\"));\n const logo = (\n <div className=\"flex h-24 w-40 shrink-0 items-center justify-center rounded-lg border bg-white p-4\">\n <CmsImage\n src={imageUrl}\n alt={alt}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n );\n\n return href !== \"#\" ? (\n <LinkComponent key={getCmsBlockKey(block, index)} href={href}>\n {logo}\n </LinkComponent>\n ) : (\n <div key={getCmsBlockKey(block, index)}>{logo}</div>\n );\n })}\n </div>\n </section>\n );\n}\n\nfunction ProductCard({\n product,\n carousel,\n linkComponent: LinkComponent,\n currency,\n}: {\n product: CmsProduct;\n carousel: boolean;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n}) {\n const onSale =\n product.compareAtPrice != null && product.compareAtPrice > product.price;\n\n return (\n <LinkComponent\n href={`/product/${product.slug}`}\n className={\n carousel\n ? \"group w-[220px] shrink-0 sm:w-[250px] md:w-[280px]\"\n : \"group\"\n }\n >\n <div className=\"aspect-square overflow-hidden rounded-lg border border-neutral-200 bg-neutral-100 transition-all duration-300 group-hover:border-neutral-300\">\n <CmsImage\n src={product.imageUrl || DEFAULT_CMS_IMAGE_URL}\n alt={product.name}\n className=\"h-full w-full object-cover object-center transition-transform duration-500 group-hover:scale-105\"\n />\n </div>\n <div className=\"mt-4 flex flex-col\">\n <h3 className=\"line-clamp-2 text-sm font-medium text-neutral-950\">\n {product.name}\n </h3>\n <div className=\"mt-1 flex items-center gap-2\">\n <span className=\"text-sm font-medium text-neutral-950\">\n {formatCurrency(product.price, currency)}\n </span>\n {onSale ? (\n <span className=\"text-sm text-neutral-500 line-through\">\n {formatCurrency(product.compareAtPrice ?? 0, currency)}\n </span>\n ) : null}\n </div>\n </div>\n </LinkComponent>\n );\n}\n\nfunction ProductPlaceholder({ carousel }: { carousel: boolean }) {\n return (\n <div\n className={carousel ? \"w-[220px] shrink-0 sm:w-[250px] md:w-[280px]\" : \"\"}\n >\n <div className=\"aspect-square rounded-lg bg-neutral-100\" />\n <div className=\"mt-4 h-3 w-3/4 rounded bg-neutral-200\" />\n <div className=\"mt-2 h-3 w-1/2 rounded bg-neutral-100\" />\n </div>\n );\n}\n\nfunction productPreviewCount(section: CmsRenderSection, carousel: boolean) {\n const configuredBlocks = orderedBlocks(section.blocks).length;\n if (configuredBlocks > 0) {\n return configuredBlocks;\n }\n\n return settingNumber(section.settings, \"limit\", carousel ? 5 : 8);\n}\n\nfunction createPreviewCollections(section: CmsRenderSection) {\n const count = Math.min(settingNumber(section.settings, \"limit\", 6), 6);\n\n return Array.from({ length: count }, (_, index) => ({\n id: `preview-collection-${index + 1}`,\n name: `Categoria ${index + 1}`,\n href: \"/store/collections/all\",\n imageUrl: DEFAULT_CMS_IMAGE_URL,\n }));\n}\n","import type { ComponentType, ReactNode } from \"react\";\nimport type { CmsLinkProps, CmsRenderSection } from \"./types\";\nimport {\n layoutAlign,\n layoutBackground,\n layoutChildren,\n layoutGap,\n layoutJustify,\n layoutMaxWidth,\n layoutPadding,\n settingNumber,\n settingString,\n} from \"./utils\";\n\ntype LayoutSectionProps = {\n section: CmsRenderSection;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n preview: boolean;\n renderSections: (sections: CmsRenderSection[]) => ReactNode;\n};\n\nexport function LayoutSection({ section, renderSections }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n const paddingY = settingString(settings, \"paddingY\") || \"medium\";\n const maxWidth = settingString(settings, \"maxWidth\") || \"container\";\n const background = settingString(settings, \"background\") || \"default\";\n\n return (\n <section\n className={`${layoutBackground(background)} ${layoutPadding(paddingY)}`}\n >\n <div className={`mx-auto px-4 ${layoutMaxWidth(maxWidth)}`}>\n {renderSections(layoutChildren(settings, \"content\"))}\n </div>\n </section>\n );\n}\n\nexport function LayoutGrid({ section, renderSections }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n const columnCount = Math.min(\n Math.max(Math.round(settingNumber(settings, \"columnCount\", 2)), 1),\n 6,\n );\n\n return (\n <div\n className={`grid ${layoutGap(settingString(settings, \"gap\"))}`}\n style={{\n gridTemplateColumns: `repeat(${columnCount}, minmax(0, 1fr))`,\n }}\n >\n {renderSections(layoutChildren(settings, \"content\"))}\n </div>\n );\n}\n\nexport function LayoutFlex({ section, renderSections }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n\n return (\n <div\n className={[\n \"flex\",\n settingString(settings, \"direction\") === \"column\"\n ? \"flex-col\"\n : \"flex-col md:flex-row\",\n settingString(settings, \"wrap\") === \"nowrap\"\n ? \"flex-nowrap\"\n : \"flex-wrap\",\n layoutGap(settingString(settings, \"gap\")),\n layoutAlign(settingString(settings, \"align\")),\n layoutJustify(settingString(settings, \"justify\")),\n ].join(\" \")}\n >\n {renderSections(layoutChildren(settings, \"content\"))}\n </div>\n );\n}\n\nexport function LayoutSpace({ section }: LayoutSectionProps) {\n const settings = section.settings ?? {};\n const size = settingString(settings, \"size\") || \"24px\";\n const direction = settingString(settings, \"direction\") || \"vertical\";\n const isHorizontal = direction === \"horizontal\";\n const isBoth = direction === \"both\";\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n display: \"block\",\n width: isHorizontal || isBoth ? size : \"100%\",\n height: isHorizontal ? \"100%\" : size,\n }}\n />\n );\n}\n","import type { ComponentType } from \"react\";\nimport {\n ContactFormSection,\n CustomHtmlSection,\n FaqSection,\n FloatingBlockSection,\n IconRowSection,\n NewsletterSection,\n RichTextSection,\n StatsSection,\n TestimonialsSection,\n TimelineSection,\n UnknownSection,\n} from \"./cms-sections/content-sections\";\nimport {\n AnnouncementBarSection,\n CategoryGridSection,\n HeroSection,\n LogoSliderSection,\n ProductsSection,\n PromoCardsSection,\n} from \"./cms-sections/ecommerce-sections\";\nimport {\n LayoutFlex,\n LayoutGrid,\n LayoutSection,\n LayoutSpace,\n} from \"./cms-sections/layout-sections\";\nimport { DefaultLink } from \"./cms-sections/shared\";\nimport type {\n CmsLinkProps,\n CmsRenderSection,\n CmsSectionData,\n CmsSectionsRendererProps,\n} from \"./cms-sections/types\";\nimport {\n DEFAULT_CMS_IMAGE_URL,\n canonicalSectionType,\n getCmsSectionKey,\n productSortValue,\n sanitizeHtml,\n storefrontHref,\n} from \"./cms-sections/utils\";\n\nexport type {\n CmsLinkProps,\n CmsProduct,\n CmsRenderBlock,\n CmsRenderSection,\n CmsRenderSettings,\n CmsSectionData,\n CmsSectionsRendererProps,\n} from \"./cms-sections/types\";\n\nexport {\n DEFAULT_CMS_IMAGE_URL,\n canonicalSectionType,\n getCmsSectionKey,\n productSortValue,\n sanitizeHtml,\n storefrontHref,\n};\n\nexport function CmsSectionsRenderer({\n sections,\n sectionData,\n linkComponent,\n currency = \"PEN\",\n preview = false,\n wrap = true,\n}: CmsSectionsRendererProps) {\n const LinkComponent = linkComponent ?? DefaultLink;\n const sortedSections = [...sections].sort((a, b) => a.order - b.order);\n const content = (\n <>\n {sortedSections.map((section, index) => {\n const sectionKey = getCmsSectionKey(section, index);\n\n return (\n <CmsSection\n key={sectionKey}\n section={section}\n data={sectionData?.[sectionKey]}\n linkComponent={LinkComponent}\n currency={currency}\n preview={preview}\n />\n );\n })}\n </>\n );\n\n return wrap ? <div className=\"relative\">{content}</div> : content;\n}\n\nfunction CmsSection({\n section,\n data,\n linkComponent,\n currency,\n preview,\n}: {\n section: CmsRenderSection;\n data?: CmsSectionData;\n linkComponent: ComponentType<CmsLinkProps>;\n currency: string;\n preview: boolean;\n}) {\n const type = canonicalSectionType(section.type);\n const renderSections = (sections: CmsRenderSection[]) => (\n <CmsSectionsRenderer\n sections={sections}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n wrap={false}\n />\n );\n\n if (type === \"layout-section\") {\n return (\n <LayoutSection\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"layout-grid\") {\n return (\n <LayoutGrid\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"layout-flex\") {\n return (\n <LayoutFlex\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"layout-space\") {\n return (\n <LayoutSpace\n section={section}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n renderSections={renderSections}\n />\n );\n }\n\n if (type === \"hero\") {\n return <HeroSection section={section} linkComponent={linkComponent} />;\n }\n\n if (type === \"announcement-bar\") {\n return (\n <AnnouncementBarSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"product-list\" || type === \"product-carousel\") {\n return (\n <ProductsSection\n section={section}\n products={data?.products ?? []}\n carousel={type === \"product-carousel\"}\n linkComponent={linkComponent}\n currency={currency}\n preview={preview}\n />\n );\n }\n\n if (type === \"category-grid\" || type === \"collection-list\") {\n return (\n <CategoryGridSection\n section={section}\n collections={data?.collections ?? []}\n linkComponent={linkComponent}\n preview={preview}\n />\n );\n }\n\n if (type === \"promo-cards\") {\n return (\n <PromoCardsSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"rich-text\" || type === \"seo-text\") {\n return <RichTextSection section={section} />;\n }\n\n if (type === \"custom-html\") {\n return <CustomHtmlSection section={section} />;\n }\n\n if (type === \"floating-block\") {\n return (\n <FloatingBlockSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"faq\") {\n return <FaqSection section={section} />;\n }\n\n if (type === \"newsletter\") {\n return <NewsletterSection section={section} />;\n }\n\n if (type === \"trust-badges\" || type === \"widget-row\") {\n return <IconRowSection section={section} linkComponent={linkComponent} />;\n }\n\n if (type === \"logo-slider\") {\n return (\n <LogoSliderSection section={section} linkComponent={linkComponent} />\n );\n }\n\n if (type === \"testimonials\") {\n return <TestimonialsSection section={section} />;\n }\n\n if (type === \"stats\") {\n return <StatsSection section={section} />;\n }\n\n if (type === \"timeline\") {\n return <TimelineSection section={section} />;\n }\n\n if (type === \"contact-form\") {\n return <ContactFormSection section={section} />;\n }\n\n return <UnknownSection section={section} />;\n}\n","import Link from \"next/link\";\nimport type {\n StorefrontCollection,\n StorefrontPageBlock,\n StorefrontPageSection,\n StorefrontProduct,\n StorefrontProductDetail,\n StorefrontProductsParamsInput,\n} from \"@ecomiq/storefront/react\";\nimport {\n CmsSectionsRenderer,\n canonicalSectionType,\n getCmsSectionKey,\n productSortValue,\n type CmsSectionData,\n} from \"../../components/cms-sections-renderer\";\nimport { getStorefrontCollections } from \"../../../core/client/store-api-collection.service\";\nimport {\n getStorefrontProductBySlug,\n getStorefrontProducts,\n} from \"../../../core/client/store-api-product.service\";\n\nexport type DefaultCmsSectionsRendererProps = {\n sections: StorefrontPageSection[];\n};\n\nexport async function DefaultCmsSectionsRenderer({\n sections,\n}: DefaultCmsSectionsRendererProps) {\n const sortedSections = [...sections].sort((a, b) => a.order - b.order);\n const dataEntries = await Promise.all(\n sortedSections.map(async (section, index) => {\n const data = await resolveSectionData(section);\n return [getCmsSectionKey(section, index), data] as const;\n }),\n );\n const sectionData = Object.fromEntries(dataEntries) as Record<\n string,\n CmsSectionData\n >;\n\n return (\n <CmsSectionsRenderer\n sections={sections}\n sectionData={sectionData}\n linkComponent={Link}\n />\n );\n}\n\nasync function resolveSectionData(\n section: StorefrontPageSection,\n): Promise<CmsSectionData> {\n const type = canonicalSectionType(section.type);\n\n if (type === \"product-list\" || type === \"product-carousel\") {\n return { products: await resolveSectionProducts(section) };\n }\n\n if (\n (type === \"category-grid\" || type === \"collection-list\") &&\n !hasConfiguredCollectionBlocks(section)\n ) {\n return {\n collections: (await getCollectionsSafe()).slice(\n 0,\n settingNumber(section.settings, \"limit\", 6),\n ),\n };\n }\n\n return {};\n}\n\nasync function resolveSectionProducts(\n section: StorefrontPageSection,\n): Promise<StorefrontProductLike[]> {\n const slugs = orderedBlocks(section.blocks)\n .map((block) => settingString(block.settings, \"productSlug\"))\n .filter(Boolean)\n .slice(0, settingNumber(section.settings, \"limit\", 8));\n\n if (slugs.length > 0) {\n const products = await Promise.all(\n slugs.map((slug) => getStorefrontProductBySlug(slug).catch(() => null)),\n );\n return products.filter(Boolean) as StorefrontProductDetail[];\n }\n\n const settings = section.settings ?? {};\n const limit = settingNumber(\n settings,\n \"limit\",\n settingNumber(settings, \"pageSize\", 8),\n );\n const sort = productSortValue(\n settingString(settings, \"sort\"),\n ) as StorefrontProductsParamsInput[\"sort\"];\n const collection =\n settingString(settings, \"collectionSlug\") ||\n settingString(settings, \"collection\") ||\n undefined;\n const category = settingString(settings, \"category\") || undefined;\n const brand = settingString(settings, \"brand\") || undefined;\n const search = settingString(settings, \"search\") || undefined;\n\n const params: StorefrontProductsParamsInput = {\n page: 1,\n pageSize: limit,\n sort,\n collection,\n category,\n brand,\n search,\n };\n\n const response = await getStorefrontProducts(params).catch(() => null);\n return response?.products ?? [];\n}\n\nasync function getCollectionsSafe(): Promise<StorefrontCollection[]> {\n return getStorefrontCollections().catch(() => []);\n}\n\nfunction hasConfiguredCollectionBlocks(section: StorefrontPageSection) {\n return orderedBlocks(section.blocks).some(\n (block) =>\n settingString(block.settings, \"name\") ||\n settingString(block.settings, \"title\"),\n );\n}\n\ntype StorefrontProductLike = StorefrontProduct | StorefrontProductDetail;\n\nfunction orderedBlocks(blocks: StorefrontPageBlock[] | undefined) {\n return [...(blocks ?? [])].sort((a, b) => a.order - b.order);\n}\n\nfunction settingString(\n settings: Record<string, unknown> | undefined,\n key: string,\n) {\n const value = settings?.[key];\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction settingNumber(\n settings: Record<string, unknown> | undefined,\n key: string,\n fallback: number,\n) {\n const value = settings?.[key];\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n","/**\n * Entry npm público: acciones server, cliente BFF, hooks shell y CMS headless.\n * Sin ShellRouter, export-pages, EcomiqProvider, temas precargados ni UI de `@ecomiq/ui`.\n */\nexport * from \"../react/nextjs/actions/index\";\nexport * from \"../core/client/index\";\nexport * from \"../react/shell/hooks/index\";\n\nimport { useStore } from \"../react/stores/use-store\";\n\nexport { useStore };\nexport const usePublicStore = () => useStore.getState().data;\n\nexport { findStorefrontCmsPageBySlug } from \"../react/shell/lib/find-storefront-cms-page\";\nexport { SafeThemeInjector } from \"../react/shell/components/safe-theme-injector\";\nexport * from \"../react/shell/components/product-variant-selector/index\";\n\nexport {\n DefaultCmsSectionsRenderer,\n type DefaultCmsSectionsRendererProps,\n} from \"../react/nextjs/cms/default-section-renderer\";\nexport { sanitizeHtml } from \"../react/components/cms-sections-renderer\";\n\nexport type {\n StorefrontProduct,\n StorefrontProductDetail,\n StorefrontProductsResponse,\n StorefrontProductsParamsInput,\n StorefrontCollection,\n} from \"../core/index\";\n"]}
@@ -0,0 +1,6 @@
1
+ export default {
2
+ plugins: {
3
+ '@tailwindcss/postcss': {},
4
+ autoprefixer: {},
5
+ },
6
+ };