@asteby/storefront-react 0.4.0 → 0.6.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/cookie.ts","../src/cart.tsx","../src/components.tsx","../src/variants.tsx","../src/seo.ts","../src/json-ld.tsx","../src/sections.tsx","../src/theme.tsx","../src/geolocation.ts","../src/nearest.ts","../src/selected-location.ts","../src/locations.tsx"],"names":["createContext","useMemo","createStorefrontClient","jsx","useContext","isStorefrontError","useRef","useState","useCallback","p","useEffect","formatMoney","createElement","parseMoney","jsxs","Fragment","toSchemaOpeningHours","isValidPoint","fail","rankByDistance","EMPTY","location","openStatus","directionsUrl","useId"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { createStorefrontClient, type Shop, type StorefrontClient, type StorefrontClientOptions } from '@asteby/storefront'\n\nexport type StorefrontContextValue = {\n /** Client for browser-side calls (use a public `pk_` token). */\n client: StorefrontClient | null\n shop: Shop | null\n /** BCP 47 locale used for formatting (defaults to `shop.locale`, then `es-MX`). */\n locale: string\n /** ISO 4217 currency (defaults to `shop.currency_code`, then `MXN`). */\n currency: string\n}\n\nconst StorefrontContext = createContext<StorefrontContextValue | null>(null)\n\nexport type StorefrontProviderProps = {\n /** A ready client. Takes precedence over `config`. */\n client?: StorefrontClient\n /** Options to create the browser client (use a `pk_` token). */\n config?: StorefrontClientOptions\n /** Shop info loaded on the server (root loader). */\n shop?: Shop | null\n locale?: string\n currency?: string\n children?: ReactNode\n}\n\n/**\n * Makes the storefront client, shop, locale and currency available to the\n * tree. SSR-safe: creating the client does not touch `window`.\n */\nexport function StorefrontProvider({ client, config, shop = null, locale, currency, children }: StorefrontProviderProps) {\n const configKey = config ? `${config.baseUrl}|${config.token}|${config.locale ?? ''}|${config.customerToken ?? ''}` : ''\n const resolvedClient = useMemo(\n () => client ?? (config ? createStorefrontClient(config) : null),\n [client, configKey],\n )\n const value = useMemo<StorefrontContextValue>(\n () => ({\n client: resolvedClient,\n shop,\n locale: locale ?? config?.locale ?? shop?.locale ?? 'es-MX',\n currency: currency ?? shop?.currency_code ?? 'MXN',\n }),\n [resolvedClient, shop, locale, currency, config?.locale],\n )\n return <StorefrontContext.Provider value={value}>{children}</StorefrontContext.Provider>\n}\n\n/** Storefront context. Throws outside `<StorefrontProvider>`. */\nexport function useStorefront(): StorefrontContextValue {\n const ctx = useContext(StorefrontContext)\n if (!ctx) throw new Error('useStorefront must be used inside <StorefrontProvider>')\n return ctx\n}\n\n/** Storefront context or `null` outside a provider (for components that work standalone). */\nexport function useOptionalStorefront(): StorefrontContextValue | null {\n return useContext(StorefrontContext)\n}\n\n/** The client from context; throws when the provider has none. */\nexport function useStorefrontClient(): StorefrontClient {\n const { client } = useStorefront()\n if (!client) throw new Error('<StorefrontProvider> needs a `client` or `config` for browser-side calls')\n return client\n}\n","/** Default name of the cookie that holds the cart id. */\nexport const CART_COOKIE_NAME = 'sf_cart'\n\nexport type CartCookieOptions = {\n /** Cookie name (default `sf_cart`). */\n name?: string\n /** Lifetime in days (default 30). */\n maxAgeDays?: number\n path?: string\n domain?: string\n sameSite?: 'Lax' | 'Strict' | 'None'\n /** Defaults to true on https pages / when `sameSite` is `None`. */\n secure?: boolean\n}\n\n/**\n * Reads the cart id from a `Cookie` header. Use it in SSR loaders:\n * `getCartIdFromCookie(request.headers.get('Cookie'))`.\n */\nexport function getCartIdFromCookie(cookieHeader: string | null | undefined, name: string = CART_COOKIE_NAME): string | null {\n if (!cookieHeader) return null\n for (const part of cookieHeader.split(';')) {\n const eq = part.indexOf('=')\n if (eq < 0) continue\n if (part.slice(0, eq).trim() !== name) continue\n const raw = part.slice(eq + 1).trim().replace(/^\"(.*)\"$/, '$1')\n if (!raw) return null\n try {\n return decodeURIComponent(raw)\n } catch {\n return raw\n }\n }\n return null\n}\n\n/**\n * Serializes the cart cookie for a `Set-Cookie` header (SSR actions) or for\n * `document.cookie`. Pass `null` to clear it.\n */\nexport function serializeCartCookie(cartId: string | null, options: CartCookieOptions = {}): string {\n const name = options.name ?? CART_COOKIE_NAME\n const parts = [`${name}=${cartId ? encodeURIComponent(cartId) : ''}`]\n parts.push(`Path=${options.path ?? '/'}`)\n const maxAge = cartId ? Math.round((options.maxAgeDays ?? 30) * 86_400) : 0\n parts.push(`Max-Age=${maxAge}`)\n if (options.domain) parts.push(`Domain=${options.domain}`)\n const sameSite = options.sameSite ?? 'Lax'\n parts.push(`SameSite=${sameSite}`)\n if (options.secure ?? sameSite === 'None') parts.push('Secure')\n return parts.join('; ')\n}\n\n/** Browser-only: writes the cart cookie. No-op on the server. */\nexport function writeCartCookie(cartId: string | null, options: CartCookieOptions = {}): void {\n if (typeof document === 'undefined') return\n const secure = options.secure ?? (typeof location !== 'undefined' && location.protocol === 'https:')\n document.cookie = serializeCartCookie(cartId, { ...options, secure })\n}\n\n/** Browser-only: reads the cart cookie. `null` on the server. */\nexport function readCartCookie(name: string = CART_COOKIE_NAME): string | null {\n if (typeof document === 'undefined') return null\n return getCartIdFromCookie(document.cookie, name)\n}\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport {\n isStorefrontError,\n type AddressInput,\n type Cart,\n type CartBuyerInput,\n type CartLine,\n type CartLineInput,\n type CartLineMerchandise,\n type CartLineUpdateInput,\n type DeliveryInput,\n type DeliveryOptions,\n type Money,\n type StorefrontClient,\n} from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\nimport { CART_COOKIE_NAME, readCartCookie, writeCartCookie, type CartCookieOptions } from './cookie.js'\n\nexport type CartLineAddInput = CartLineInput & {\n /** Variant data for an instant optimistic line (otherwise only the count updates until the server answers). */\n merchandise?: CartLineMerchandise\n}\n\nexport type CartStatus = 'idle' | 'loading' | 'updating'\n\nexport type CartContextValue = {\n cart: Cart | null\n cartId: string | null\n status: CartStatus\n /** Last mutation error (cleared on the next successful mutation). */\n error: Error | null\n totalQuantity: number\n /** Adds lines, creating the cart on first use. Optimistic. */\n addLines: (lines: CartLineAddInput[]) => Promise<Cart | null>\n /** Sets line quantities (`0` removes). Optimistic. */\n updateLines: (lines: CartLineUpdateInput[]) => Promise<Cart | null>\n /** Removes lines. Optimistic. */\n removeLines: (lineIds: string[]) => Promise<Cart | null>\n setDiscountCodes: (codes: string[]) => Promise<Cart | null>\n setBuyer: (buyer: CartBuyerInput) => Promise<Cart | null>\n setShippingAddress: (address: AddressInput) => Promise<Cart | null>\n setDelivery: (delivery: DeliveryInput) => Promise<Cart | null>\n deliveryOptions: () => Promise<DeliveryOptions | null>\n /** Reloads the cart from the API. */\n refresh: () => Promise<Cart | null>\n /** Forgets the cart (clears state and cookie), e.g. after checkout. */\n clear: () => void\n}\n\nconst CartContext = createContext<CartContextValue | null>(null)\n\nexport type CartProviderProps = {\n /** Cart loaded in the SSR loader (hydrates without a client fetch). */\n initialCart?: Cart | null\n /** Cart id known on the server when `initialCart` is not loaded. */\n cartId?: string | null\n /** Client override (defaults to the `StorefrontProvider` client). */\n client?: StorefrontClient\n /** Cookie settings for the persisted cart id (`sf_cart`). Pass `false` to disable the cookie. */\n cookie?: CartCookieOptions | false\n /** Currency for the optimistic placeholder cart (defaults to the provider currency). */\n currency?: string\n onError?: (error: Error) => void\n onCartChange?: (cart: Cart | null) => void\n children?: ReactNode\n}\n\ntype PendingOp = { id: number; apply: (cart: Cart | null) => Cart | null }\n\nconst toCents = (m: Money | null | undefined) => (m ? Math.round(Number.parseFloat(m.amount) * 100) : 0)\nconst money = (cents: number, currency: string): Money => ({ amount: (cents / 100).toFixed(2), currency_code: currency })\n\nfunction emptyCart(currency: string): Cart {\n const zero = money(0, currency)\n return {\n id: '',\n lines: [],\n total_quantity: 0,\n discount_codes: [],\n buyer: { email: null, phone: null, customer_id: null },\n shipping_address: null,\n delivery: { method: null, rate_id: null, branch_id: null },\n cost: { subtotal: zero, discount: zero, shipping: null, tax: null, total: zero, tax_included: true },\n updated_at: new Date(0).toISOString(),\n }\n}\n\nfunction withLines(cart: Cart, lines: CartLine[], totalQuantity?: number): Cart {\n const currency = cart.cost.subtotal.currency_code\n const subtotal = lines.reduce((sum, l) => sum + toCents(l.cost.total), 0)\n const total = Math.max(0, subtotal - toCents(cart.cost.discount) + toCents(cart.cost.shipping))\n return {\n ...cart,\n lines,\n total_quantity: totalQuantity ?? lines.reduce((sum, l) => sum + l.quantity, 0),\n cost: { ...cart.cost, subtotal: money(subtotal, currency), total: money(total, currency) },\n }\n}\n\nfunction lineWithQuantity(line: CartLine, quantity: number): CartLine {\n const unit = toCents(line.cost.unit)\n return { ...line, quantity, cost: { ...line.cost, total: money(unit * quantity, line.cost.unit.currency_code) } }\n}\n\n/** Pure optimistic reducers (exported for tests and custom carts). */\nexport const optimisticCart = {\n add(cart: Cart | null, input: CartLineAddInput[], currency: string): Cart {\n const base = cart ?? emptyCart(currency)\n let lines = base.lines.slice()\n let unknownQuantity = 0\n for (const l of input) {\n const idx = lines.findIndex((x) => x.merchandise.id === l.variant_id)\n if (idx >= 0) lines[idx] = lineWithQuantity(lines[idx]!, lines[idx]!.quantity + l.quantity)\n else if (l.merchandise) {\n const unit = l.merchandise.price\n lines.push({\n id: `optimistic:${l.variant_id}`,\n quantity: l.quantity,\n merchandise: l.merchandise,\n cost: { unit, compare_at_unit: l.merchandise.compare_at_price, total: money(toCents(unit) * l.quantity, unit.currency_code) },\n })\n } else unknownQuantity += l.quantity\n }\n const known = lines.reduce((sum, l) => sum + l.quantity, 0)\n return withLines(base, lines, known + unknownQuantity + (base.total_quantity - base.lines.reduce((s, l) => s + l.quantity, 0)))\n },\n update(cart: Cart | null, input: CartLineUpdateInput[]): Cart | null {\n if (!cart) return cart\n const byId = new Map(input.map((l) => [l.id, l.quantity]))\n const lines = cart.lines\n .map((l) => (byId.has(l.id) ? lineWithQuantity(l, byId.get(l.id)!) : l))\n .filter((l) => l.quantity > 0)\n return withLines(cart, lines)\n },\n remove(cart: Cart | null, lineIds: string[]): Cart | null {\n if (!cart) return cart\n return withLines(cart, cart.lines.filter((l) => !lineIds.includes(l.id)))\n },\n}\n\nconst isNotFound = (err: unknown) => isStorefrontError(err) && err.status === 404\n\n/**\n * Holds the cart and exposes optimistic mutations. Mutations run one at a\n * time in order; a failed one is rolled back without discarding the others.\n * The cart id is persisted in the `sf_cart` cookie (read it in loaders with\n * `getCartIdFromCookie`). No `window`/`document` access during render.\n */\nexport function CartProvider({\n initialCart = null,\n cartId: initialCartId = null,\n client: clientProp,\n cookie,\n currency: currencyProp,\n onError,\n onCartChange,\n children,\n}: CartProviderProps) {\n const sf = useOptionalStorefront()\n const client = clientProp ?? sf?.client ?? null\n const currency = currencyProp ?? initialCart?.cost.subtotal.currency_code ?? sf?.currency ?? 'MXN'\n const cookieOptions = cookie === false ? null : (cookie ?? {})\n\n const confirmedRef = useRef<Cart | null>(initialCart)\n const pendingRef = useRef<PendingOp[]>([])\n const idRef = useRef<string | null>(initialCart?.id ?? initialCartId ?? null)\n const queueRef = useRef<Promise<unknown>>(Promise.resolve())\n const seqRef = useRef(0)\n const callbacks = useRef({ onError, onCartChange })\n callbacks.current = { onError, onCartChange }\n\n const [cart, setCart] = useState<Cart | null>(initialCart)\n const [cartId, setCartId] = useState<string | null>(idRef.current)\n const [pending, setPending] = useState(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const render = useCallback(() => {\n const next = pendingRef.current.reduce<Cart | null>((acc, op) => op.apply(acc), confirmedRef.current)\n setCart(next)\n }, [])\n\n const persistId = useCallback(\n (id: string | null) => {\n if (idRef.current === id) return\n idRef.current = id\n setCartId(id)\n if (cookieOptions) writeCartCookie(id, cookieOptions)\n },\n // cookieOptions is a plain options bag; its identity is irrelevant\n [cookie === false, cookieOptions?.name],\n )\n\n const confirm = useCallback(\n (next: Cart | null) => {\n confirmedRef.current = next\n if (next) persistId(next.id)\n callbacks.current.onCartChange?.(next)\n },\n [persistId],\n )\n\n const requireClient = useCallback((): StorefrontClient => {\n if (!client) throw new Error('CartProvider needs a client: pass `client` or wrap it in <StorefrontProvider config|client>')\n return client\n }, [client])\n\n /** Queues a remote mutation with an optional optimistic layer. */\n const mutate = useCallback(\n <T,>(remote: (c: StorefrontClient) => Promise<T>, toCart: (r: T) => Cart | null, optimistic?: PendingOp['apply']): Promise<T | null> => {\n const op: PendingOp | null = optimistic ? { id: ++seqRef.current, apply: optimistic } : null\n if (op) {\n pendingRef.current = [...pendingRef.current, op]\n render()\n }\n setPending((n) => n + 1)\n const run = async (): Promise<T | null> => {\n try {\n const result = await remote(requireClient())\n const next = toCart(result)\n if (next) confirm(next)\n setError(null)\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n callbacks.current.onError?.(e)\n return null\n } finally {\n if (op) pendingRef.current = pendingRef.current.filter((p) => p !== op)\n render()\n setPending((n) => n - 1)\n }\n }\n const p = queueRef.current.then(run, run)\n queueRef.current = p\n return p\n },\n [confirm, render, requireClient],\n )\n\n const asCart = (c: Cart) => c\n\n // Hydrate from the cookie / id on the client when the server did not load the cart.\n useEffect(() => {\n if (confirmedRef.current) {\n if (cookieOptions && idRef.current) writeCartCookie(idRef.current, cookieOptions)\n return\n }\n const id = idRef.current ?? (cookieOptions ? readCartCookie(cookieOptions.name ?? CART_COOKIE_NAME) : null)\n if (!id || !client) return\n idRef.current = id\n setCartId(id)\n let cancelled = false\n setLoading(true)\n client.carts\n .get(id)\n .then((loaded) => {\n if (cancelled) return\n if (loaded) confirm(loaded)\n else persistId(null)\n render()\n })\n .catch((err: unknown) => {\n if (cancelled) return\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n callbacks.current.onError?.(e)\n })\n .finally(() => !cancelled && setLoading(false))\n return () => {\n cancelled = true\n }\n // Runs once on mount.\n }, [])\n\n const value = useMemo<CartContextValue>(() => {\n const withId = <T,>(fn: (c: StorefrontClient, id: string) => Promise<T>) => async (c: StorefrontClient) => {\n if (!idRef.current) throw new Error('No cart yet: add a line first')\n return fn(c, idRef.current)\n }\n return {\n cart,\n cartId,\n status: loading ? 'loading' : pending > 0 ? 'updating' : 'idle',\n error,\n totalQuantity: cart?.total_quantity ?? 0,\n addLines: (lines) => {\n const payload = lines.map(({ variant_id, quantity }) => ({ variant_id, quantity }))\n return mutate(\n async (c) => {\n if (!idRef.current) return c.carts.create({ lines: payload })\n try {\n return await c.carts.addLines(idRef.current, payload)\n } catch (err) {\n // Expired or unknown cart: start a new one.\n if (isNotFound(err)) return c.carts.create({ lines: payload })\n throw err\n }\n },\n asCart,\n (current) => optimisticCart.add(current, lines, currency),\n )\n },\n updateLines: (lines) => mutate(withId((c, id) => c.carts.updateLines(id, lines)), asCart, (current) => optimisticCart.update(current, lines)),\n removeLines: (lineIds) => mutate(withId((c, id) => c.carts.removeLines(id, lineIds)), asCart, (current) => optimisticCart.remove(current, lineIds)),\n setDiscountCodes: (codes) => mutate(withId((c, id) => c.carts.setDiscountCodes(id, codes)), asCart),\n setBuyer: (buyer) => mutate(withId((c, id) => c.carts.setBuyer(id, buyer)), asCart),\n setShippingAddress: (address) => mutate(withId((c, id) => c.carts.setShippingAddress(id, address)), asCart),\n setDelivery: (delivery) => mutate(withId((c, id) => c.carts.setDelivery(id, delivery)), asCart),\n deliveryOptions: () => mutate(withId((c, id) => c.carts.deliveryOptions(id)), () => null),\n refresh: () =>\n mutate(\n async (c) => (idRef.current ? c.carts.get(idRef.current) : null),\n (r) => {\n if (r === null) {\n confirmedRef.current = null\n persistId(null)\n }\n return r\n },\n ),\n clear: () => {\n confirmedRef.current = null\n pendingRef.current = []\n persistId(null)\n render()\n callbacks.current.onCartChange?.(null)\n },\n }\n }, [cart, cartId, loading, pending, error, mutate, currency, persistId, render])\n\n return <CartContext.Provider value={value}>{children}</CartContext.Provider>\n}\n\n/** Cart state and actions. Throws outside `<CartProvider>`. */\nexport function useCart(): CartContextValue {\n const ctx = useContext(CartContext)\n if (!ctx) throw new Error('useCart must be used inside <CartProvider>')\n return ctx\n}\n\n/** Cart context or `null` outside a provider. */\nexport function useOptionalCart(): CartContextValue | null {\n return useContext(CartContext)\n}\n","import { createElement, type ComponentPropsWithoutRef, type ElementType, type ReactNode } from 'react'\nimport { formatMoney, parseMoney, type FormatMoneyOptions, type Image as ImageData, type Money as MoneyData, type Product, type ProductVariant } from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\n\n// ---------------------------------------------------------------------------\n// Money\n// ---------------------------------------------------------------------------\n\nexport type MoneyProps<As extends ElementType = 'span'> = FormatMoneyOptions & {\n data: MoneyData\n /** Element to render (default `span`). */\n as?: As\n /** Overrides the provider locale. */\n locale?: string\n} & Omit<ComponentPropsWithoutRef<As>, 'children' | 'as'>\n\n/** Formats `Money` with the provider locale (or `locale`). */\nexport function Money<As extends ElementType = 'span'>({\n data,\n as,\n locale,\n withoutTrailingZeros,\n withoutCurrency,\n currencyDisplay,\n ...rest\n}: MoneyProps<As>) {\n const sf = useOptionalStorefront()\n const text = formatMoney(data, locale ?? sf?.locale, {\n ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}),\n ...(withoutCurrency !== undefined ? { withoutCurrency } : {}),\n ...(currencyDisplay !== undefined ? { currencyDisplay } : {}),\n })\n return createElement(as ?? 'span', rest, text)\n}\n\n// ---------------------------------------------------------------------------\n// Image\n// ---------------------------------------------------------------------------\n\nexport const DEFAULT_IMAGE_WIDTHS = [320, 480, 640, 768, 1024, 1280, 1600] as const\n\n/** Builds the URL for one srcset width. */\nexport type ImageLoader = (src: string, width: number, height?: number) => string\n\n/**\n * Default loader: adds `?width=<w>` (the convention of most image CDNs and of\n * the OPS image proxy). URLs that cannot be parsed are returned unchanged.\n */\nexport const defaultImageLoader: ImageLoader = (src, width, height) => {\n try {\n const isAbsolute = /^[a-z][a-z0-9+.-]*:/i.test(src)\n const url = new URL(src, 'http://relative.invalid')\n url.searchParams.set('width', String(width))\n if (height) url.searchParams.set('height', String(height))\n return isAbsolute ? url.toString() : url.pathname + url.search + url.hash\n } catch {\n return src\n }\n}\n\nexport type ImageProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'srcSet' | 'width' | 'height'> & {\n data: ImageData\n /** `sizes` attribute (default `100vw`). */\n sizes?: string\n /** Candidate widths for `srcset` (capped at the intrinsic width when known). */\n widths?: readonly number[]\n /** URL builder per width (default adds `?width=`). Pass `null` to disable srcset. */\n loader?: ImageLoader | null\n /** Above-the-fold image: eager loading and `fetchpriority=\"high\"`. */\n priority?: boolean\n /** Forces an aspect ratio, e.g. `1/1` or `4/3`, used for width/height and srcset heights. */\n aspectRatio?: string\n}\n\nfunction parseRatio(ratio: string | undefined): number | null {\n if (!ratio) return null\n const [w, h] = ratio.split(/[/:]/).map((n) => Number.parseFloat(n))\n return w && h ? w / h : null\n}\n\n/** Responsive `<img>` with `srcset`, lazy by default, intrinsic size to avoid layout shift. */\nexport function Image({\n data,\n sizes = '100vw',\n widths = DEFAULT_IMAGE_WIDTHS,\n loader = defaultImageLoader,\n priority = false,\n aspectRatio,\n alt,\n loading,\n decoding,\n ...rest\n}: ImageProps) {\n const ratio = parseRatio(aspectRatio) ?? (data.width && data.height ? data.width / data.height : null)\n let candidates = [...widths].sort((a, b) => a - b)\n if (data.width) {\n const capped = candidates.filter((w) => w <= data.width!)\n candidates = capped.length ? capped : [data.width]\n }\n const srcSet = loader\n ? candidates.map((w) => `${loader(data.url, w, ratio ? Math.round(w / ratio) : undefined)} ${w}w`).join(', ')\n : undefined\n const width = data.width ?? candidates[candidates.length - 1]\n const height = data.height ?? (ratio && width ? Math.round(width / ratio) : undefined)\n return (\n <img\n src={data.url}\n alt={alt ?? data.alt ?? ''}\n {...(srcSet ? { srcSet, sizes } : {})}\n {...(width ? { width } : {})}\n {...(height ? { height } : {})}\n loading={loading ?? (priority ? 'eager' : 'lazy')}\n decoding={decoding ?? (priority ? 'auto' : 'async')}\n {...(priority ? { fetchPriority: 'high' as const } : {})}\n {...rest}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// ProductPrice\n// ---------------------------------------------------------------------------\n\nconst VISUALLY_HIDDEN = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n} as const\n\nexport type ProductPriceProps = Omit<ComponentPropsWithoutRef<'div'>, 'children'> & {\n product?: Pick<Product, 'price_range' | 'compare_at_price_range'> | null\n variant?: Pick<ProductVariant, 'price' | 'compare_at_price'> | null\n /** Prefix shown when the product has a price range and no variant is selected (default `Desde`). */\n fromLabel?: ReactNode\n /** Accessible label for the compare-at price (default `Precio anterior`). */\n compareAtLabel?: string\n locale?: string\n withoutTrailingZeros?: boolean\n}\n\n/**\n * Price with optional compare-at (strikethrough). With a `variant` it shows\n * that variant; otherwise the product's minimum price (prefixed with\n * `fromLabel` when prices vary).\n */\nexport function ProductPrice({\n product,\n variant,\n fromLabel = 'Desde',\n compareAtLabel = 'Precio anterior',\n locale,\n withoutTrailingZeros,\n ...rest\n}: ProductPriceProps) {\n let price: MoneyData | null = null\n let compareAt: MoneyData | null = null\n let isRange = false\n if (variant) {\n price = variant.price\n compareAt = variant.compare_at_price\n } else if (product) {\n price = product.price_range.min\n compareAt = product.compare_at_price_range?.min ?? null\n isRange = product.price_range.min.amount !== product.price_range.max.amount\n }\n if (!price) return null\n const onSale = compareAt !== null && parseMoney(compareAt) > parseMoney(price)\n const opts = { ...(locale ? { locale } : {}), ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}) }\n return (\n <div data-on-sale={onSale || undefined} {...rest}>\n {isRange ? <span data-price-prefix=\"\">{fromLabel} </span> : null}\n <Money data={price} data-price=\"\" {...opts} />\n {onSale && compareAt ? (\n <>\n {' '}\n <s data-compare-at-price=\"\">\n <span style={VISUALLY_HIDDEN}>{compareAtLabel}: </span>\n <Money data={compareAt} {...opts} />\n </s>\n </>\n ) : null}\n </div>\n )\n}\n","import { Fragment, useCallback, useMemo, useRef, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react'\nimport type { CartLineMerchandise, Product, ProductVariant } from '@asteby/storefront'\nimport { useCart } from './cart.js'\n\nexport type ProductOptionValueState = {\n value: string\n /** Part of the current selection. */\n selected: boolean\n /** A variant with this value (and the other selected options) exists. */\n exists: boolean\n /** That variant is available for sale. */\n available: boolean\n /** The variant this value would select, if it exists. */\n variant: ProductVariant | null\n /** Query string (`?Talla=M&Color=Rojo`) selecting this value, preserving other params. */\n search: string\n}\n\nexport type ProductOptionState = { name: string; values: ProductOptionValueState[] }\n\nexport type ProductOptionsState = {\n options: ProductOptionState[]\n selectedOptions: Record<string, string>\n /** Variant matching every selected option, or `null` while incomplete. */\n selectedVariant: ProductVariant | null\n setOption: (name: string, value: string) => void\n}\n\nexport type UseProductOptionsConfig = {\n /** Current URL search params; option names are read as keys (`?Talla=M`), plus `variant=<id>`. */\n searchParams?: URLSearchParams | string | null\n /** Select the first available variant when nothing is in the URL (default true). */\n defaultToFirstAvailable?: boolean\n onChange?: (variant: ProductVariant | null, selectedOptions: Record<string, string>) => void\n}\n\ntype ProductLike = Pick<Product, 'options' | 'variants'> & { id?: string }\n\nfunction toParams(input: URLSearchParams | string | null | undefined): URLSearchParams {\n if (!input) return new URLSearchParams()\n return input instanceof URLSearchParams ? new URLSearchParams(input) : new URLSearchParams(input)\n}\n\nfunction optionsOf(variant: ProductVariant): Record<string, string> {\n return Object.fromEntries(variant.selected_options.map((o) => [o.name, o.value]))\n}\n\nfunction findVariant(product: ProductLike, selection: Record<string, string>): ProductVariant | null {\n if (product.options.length === 0) return product.variants[0] ?? null\n return (\n product.variants.find((v) => v.selected_options.length > 0 && v.selected_options.every((o) => selection[o.name] === o.value)) ?? null\n )\n}\n\nfunction initialSelection(product: ProductLike, params: URLSearchParams, defaultToFirstAvailable: boolean): Record<string, string> {\n const byId = params.get('variant')\n const fromId = byId ? product.variants.find((v) => v.id === byId) : undefined\n if (fromId) return optionsOf(fromId)\n const selection: Record<string, string> = {}\n for (const opt of product.options) {\n const v = params.get(opt.name)\n if (v !== null && opt.values.includes(v)) selection[opt.name] = v\n }\n if (Object.keys(selection).length === 0 && defaultToFirstAvailable) {\n const first = product.variants.find((v) => v.available_for_sale) ?? product.variants[0]\n return first ? optionsOf(first) : {}\n }\n return selection\n}\n\n/**\n * Option → values matrix with availability, the selected variant (from the\n * URL or local state) and links for each value. Pure React: works in SSR.\n */\nexport function useProductOptions(product: ProductLike, config: UseProductOptionsConfig = {}): ProductOptionsState {\n const { defaultToFirstAvailable = true, onChange } = config\n const params = useMemo(() => toParams(config.searchParams), [String(config.searchParams ?? '')])\n const sourceKey = `${product.id ?? ''}|${params.toString()}`\n const fromSource = useMemo(\n () => initialSelection(product, params, defaultToFirstAvailable),\n // product identity is keyed by id + params\n [sourceKey, defaultToFirstAvailable],\n )\n\n // Local selection overrides the URL until the URL (or product) changes.\n const [local, setLocal] = useState<{ key: string; selection: Record<string, string> } | null>(null)\n const selectedOptions = local && local.key === sourceKey ? local.selection : fromSource\n\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n const setOption = useCallback(\n (name: string, value: string) => {\n const next = { ...selectedOptions, [name]: value }\n setLocal({ key: sourceKey, selection: next })\n onChangeRef.current?.(findVariant(product, next), next)\n },\n [selectedOptions, sourceKey, product],\n )\n\n const selectedVariant = useMemo(() => findVariant(product, selectedOptions), [product, selectedOptions])\n\n const options = useMemo<ProductOptionState[]>(\n () =>\n product.options.map((opt) => ({\n name: opt.name,\n values: opt.values.map((value) => {\n const candidate = { ...selectedOptions, [opt.name]: value }\n const exact = findVariant(product, candidate)\n // When other options are not chosen yet, availability = any available variant with this value.\n const loose = product.variants.filter((v) => v.selected_options.some((o) => o.name === opt.name && o.value === value))\n const search = new URLSearchParams(params)\n search.delete('variant')\n for (const [k, v] of Object.entries(candidate)) search.set(k, v)\n return {\n value,\n selected: selectedOptions[opt.name] === value,\n exists: exact ? true : loose.length > 0 && Object.keys(selectedOptions).length < product.options.length,\n available: exact ? exact.available_for_sale : Object.keys(selectedOptions).length < product.options.length && loose.some((v) => v.available_for_sale),\n variant: exact,\n search: `?${search.toString()}`,\n }\n }),\n })),\n [product, selectedOptions, params],\n )\n\n return { options, selectedOptions, selectedVariant, setOption }\n}\n\nexport type VariantSelectorRenderProps = {\n option: ProductOptionState\n selectedVariant: ProductVariant | null\n selectedOptions: Record<string, string>\n setOption: (name: string, value: string) => void\n}\n\nexport type VariantSelectorProps = UseProductOptionsConfig & {\n product: ProductLike\n /** Called once per option; render the buttons/links for `option.values`. */\n children: (props: VariantSelectorRenderProps) => ReactNode\n}\n\n/**\n * Render-prop variant picker. Example:\n *\n * <VariantSelector product={product} searchParams={searchParams}>\n * {({ option }) => (\n * <fieldset>\n * <legend>{option.name}</legend>\n * {option.values.map((v) => (\n * <Link key={v.value} to={v.search} replace preventScrollReset aria-current={v.selected}\n * aria-disabled={!v.available}>{v.value}</Link>\n * ))}\n * </fieldset>\n * )}\n * </VariantSelector>\n */\nexport function VariantSelector({ product, children, ...config }: VariantSelectorProps) {\n const state = useProductOptions(product, config)\n return (\n <>\n {state.options.map((option) => (\n <Fragment key={option.name}>\n {children({ option, selectedVariant: state.selectedVariant, selectedOptions: state.selectedOptions, setOption: state.setOption })}\n </Fragment>\n ))}\n </>\n )\n}\n\n/** Builds the optimistic cart-line merchandise for a product variant. */\nexport function toMerchandise(product: Pick<Product, 'handle' | 'title' | 'featured_image'>, variant: ProductVariant): CartLineMerchandise {\n return { ...variant, product: { handle: product.handle, title: product.title, featured_image: product.featured_image } }\n}\n\nexport type AddToCartButtonProps = Omit<ComponentPropsWithoutRef<'button'>, 'onClick'> & {\n variantId: string | null | undefined\n quantity?: number\n /** Variant data for an instant optimistic cart line. */\n merchandise?: CartLineMerchandise\n onAdded?: () => void\n onClick?: ComponentPropsWithoutRef<'button'>['onClick']\n}\n\n/** Adds a variant to the cart via `useCart().addLines`. Disabled without a variant or while adding. */\nexport function AddToCartButton({\n variantId,\n quantity = 1,\n merchandise,\n onAdded,\n onClick,\n disabled,\n children = 'Agregar al carrito',\n type = 'button',\n ...rest\n}: AddToCartButtonProps) {\n const cart = useCart()\n const [adding, setAdding] = useState(false)\n return (\n <button\n type={type}\n disabled={disabled || !variantId || adding}\n aria-busy={adding || undefined}\n data-adding={adding || undefined}\n onClick={async (event) => {\n onClick?.(event)\n if (event.defaultPrevented || !variantId) return\n setAdding(true)\n try {\n const result = await cart.addLines([{ variant_id: variantId, quantity, ...(merchandise ? { merchandise } : {}) }])\n if (result) onAdded?.()\n } finally {\n setAdding(false)\n }\n }}\n {...rest}\n >\n {children}\n </button>\n )\n}\n","/**\n * SEO helpers: pure functions returning meta descriptors (React Router v7\n * `meta` export shape) and schema.org JSON-LD objects (`<JsonLd>` renders them).\n * Nothing here touches the DOM, so it is safe in loaders and SSR.\n */\nimport type { Collection, Image, Product, SEO, Shop } from '@asteby/storefront'\nimport { isValidPoint, toSchemaOpeningHours, type OpeningHours } from '@asteby/storefront/geo'\n\n/** Same shape as React Router's `MetaDescriptor`. */\nexport type MetaDescriptor =\n | { title: string }\n | { name: string; content: string }\n | { property: string; content: string }\n | { tagName: 'link'; rel: string; href: string; [attr: string]: string }\n | { 'script:ld+json': JsonLdObject | JsonLdObject[] }\n\nexport type JsonLdObject = { '@context'?: string; '@type': string | string[]; [key: string]: unknown }\n\nexport type SeoMetaInput = {\n title?: string | null\n description?: string | null\n /** Canonical absolute URL. */\n url?: string | null\n image?: Image | string | null\n /** `og:type` (default `website`). */\n type?: string\n siteName?: string | null\n locale?: string | null\n noindex?: boolean\n /** Appended to the title as `Title | Suffix` unless already present. */\n titleSuffix?: string | null\n}\n\nconst clean = (s: string | null | undefined, max?: number): string | undefined => {\n if (!s) return undefined\n const text = s.replace(/<[^>]*>/g, ' ').replace(/\\s+/g, ' ').trim()\n if (!text) return undefined\n return max && text.length > max ? text.slice(0, max - 1).trimEnd() + '…' : text\n}\n\n/** Generic title/description/canonical/Open Graph/Twitter descriptors. */\nexport function seoMeta(input: SeoMetaInput): MetaDescriptor[] {\n const out: MetaDescriptor[] = []\n let title = clean(input.title)\n if (title && input.titleSuffix && !title.includes(input.titleSuffix)) title = `${title} | ${input.titleSuffix}`\n const description = clean(input.description, 160)\n const image = typeof input.image === 'string' ? { url: input.image, alt: null } : (input.image ?? null)\n if (title) out.push({ title }, { property: 'og:title', content: title }, { name: 'twitter:title', content: title })\n if (description) {\n out.push({ name: 'description', content: description }, { property: 'og:description', content: description }, { name: 'twitter:description', content: description })\n }\n if (input.url) out.push({ tagName: 'link', rel: 'canonical', href: input.url }, { property: 'og:url', content: input.url })\n out.push({ property: 'og:type', content: input.type ?? 'website' })\n if (input.siteName) out.push({ property: 'og:site_name', content: input.siteName })\n if (input.locale) out.push({ property: 'og:locale', content: input.locale.replace('-', '_') })\n if (image) {\n out.push({ property: 'og:image', content: image.url })\n if (image.width) out.push({ property: 'og:image:width', content: String(image.width) })\n if (image.height) out.push({ property: 'og:image:height', content: String(image.height) })\n if (image.alt) out.push({ property: 'og:image:alt', content: image.alt })\n }\n out.push({ name: 'twitter:card', content: image ? 'summary_large_image' : 'summary' })\n if (input.noindex) out.push({ name: 'robots', content: 'noindex, nofollow' })\n return out\n}\n\nfunction seoOf(seo: SEO, fallbackTitle: string, fallbackDescription: string | null | undefined) {\n return { title: seo.title ?? fallbackTitle, description: seo.description ?? fallbackDescription ?? null }\n}\n\n/** Product page descriptors (`og:type=product` and price tags). */\nexport function productMeta(product: Product, shop: Pick<Shop, 'name' | 'locale'> | null, url: string): MetaDescriptor[] {\n const { title, description } = seoOf(product.seo, product.title, product.description)\n const meta = seoMeta({\n title,\n description,\n url,\n image: product.featured_image,\n type: 'product',\n siteName: shop?.name ?? null,\n locale: shop?.locale ?? null,\n titleSuffix: shop?.name ?? null,\n })\n meta.push(\n { property: 'product:price:amount', content: product.price_range.min.amount },\n { property: 'product:price:currency', content: product.price_range.min.currency_code },\n { property: 'product:availability', content: product.available_for_sale ? 'in stock' : 'out of stock' },\n )\n if (product.vendor) meta.push({ property: 'product:brand', content: product.vendor })\n return meta\n}\n\n/** Collection page descriptors. */\nexport function collectionMeta(collection: Collection, shop: Pick<Shop, 'name' | 'locale'> | null, url: string): MetaDescriptor[] {\n const { title, description } = seoOf(collection.seo, collection.title, collection.description)\n return seoMeta({ title, description, url, image: collection.image, siteName: shop?.name ?? null, locale: shop?.locale ?? null, titleSuffix: shop?.name ?? null })\n}\n\n// ---------------------------------------------------------------------------\n// JSON-LD\n// ---------------------------------------------------------------------------\n\nconst CONTEXT = 'https://schema.org'\n\nfunction shopUrl(shop: Pick<Shop, 'domain'>, fallback?: string): string | undefined {\n if (shop.domain) return /^https?:\\/\\//.test(shop.domain) ? shop.domain : `https://${shop.domain}`\n if (fallback) {\n try {\n return new URL(fallback).origin\n } catch {\n return undefined\n }\n }\n return undefined\n}\n\nfunction compact<T extends Record<string, unknown>>(obj: T): T {\n for (const k of Object.keys(obj)) {\n const v = obj[k]\n if (v === undefined || v === null || v === '' || (Array.isArray(v) && v.length === 0)) delete obj[k]\n }\n return obj\n}\n\nfunction withVariant(url: string, variantId: string): string {\n try {\n const u = new URL(url)\n u.searchParams.set('variant', variantId)\n return u.toString()\n } catch {\n return `${url}${url.includes('?') ? '&' : '?'}variant=${encodeURIComponent(variantId)}`\n }\n}\n\n/** schema.org `Product` with one `Offer` per variant. */\nexport function productJsonLd(product: Product, shop: Pick<Shop, 'name' | 'domain'> | null, url: string): JsonLdObject {\n const images = product.images.length ? product.images.map((i) => i.url) : product.featured_image ? [product.featured_image.url] : []\n const offers = product.variants.map((v) =>\n compact({\n '@type': 'Offer',\n sku: v.sku,\n gtin: v.barcode ?? undefined,\n name: product.variants.length > 1 ? `${product.title} - ${v.title}` : undefined,\n price: v.price.amount,\n priceCurrency: v.price.currency_code,\n availability: v.available_for_sale ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock',\n itemCondition: 'https://schema.org/NewCondition',\n url: product.variants.length > 1 ? withVariant(url, v.id) : url,\n seller: shop ? { '@type': 'Organization', name: shop.name } : undefined,\n }),\n )\n const additionalProperty = Object.entries(product.attributes).map(([name, value]) => ({ '@type': 'PropertyValue', name, value }))\n return compact({\n '@context': CONTEXT,\n '@type': 'Product',\n '@id': `${url}#product`,\n name: product.title,\n description: clean(product.description) ?? undefined,\n url,\n image: images,\n sku: product.variants.length === 1 ? product.variants[0]!.sku : undefined,\n brand: product.vendor ? { '@type': 'Brand', name: product.vendor } : undefined,\n category: product.category?.title ?? product.product_type ?? undefined,\n additionalProperty,\n offers: offers.length === 1 ? offers[0] : offers,\n })\n}\n\n/** schema.org `Organization` for the shop (logo, contact, url). */\nexport function organizationJsonLd(shop: Shop, url?: string): JsonLdObject {\n const site = shopUrl(shop, url)\n const contactPoint = shop.contact.email || shop.contact.phone\n ? [compact({ '@type': 'ContactPoint', contactType: 'customer service', email: shop.contact.email ?? undefined, telephone: shop.contact.phone ?? undefined })]\n : []\n return compact({\n '@context': CONTEXT,\n '@type': 'Organization',\n '@id': site ? `${site}#organization` : undefined,\n name: shop.name,\n description: shop.description ?? undefined,\n url: site,\n logo: shop.logo?.url,\n email: shop.contact.email ?? undefined,\n telephone: shop.contact.phone ?? undefined,\n contactPoint,\n })\n}\n\nexport type LocalBusinessOptions = {\n /** schema.org type (default `Store`), e.g. `AutoPartsStore`, `ClothingStore`. */\n type?: string\n /** Shop URL fallback when `shop.domain` is empty. */\n url?: string\n priceRange?: string\n}\n\nconst SCHEMA_HOURS = /^(Mo|Tu|We|Th|Fr|Sa|Su)(-(Mo|Tu|We|Th|Fr|Sa|Su))?( \\d{2}:\\d{2}-\\d{2}:\\d{2})?$/\n\n/**\n * schema.org `openingHours` values from structured hours or a legacy string.\n * A string is accepted only if EVERY comma-separated token is strict schema.org\n * syntax (`Mo-Fr 09:00-19:00`); free text such as `Lun-Sáb 8:00 a 18:00` yields\n * `undefined` so no invalid markup is ever emitted.\n */\nexport function openingHoursJsonLd(hours: OpeningHours | string | null | undefined): string[] | undefined {\n if (!hours) return undefined\n if (typeof hours !== 'string') {\n const list = hours.weekly ? toSchemaOpeningHours(hours) : []\n return list.length ? list : undefined\n }\n const tokens = hours.split(',').map((t) => t.trim())\n return tokens.length && tokens.every((t) => SCHEMA_HOURS.test(t)) ? tokens : undefined\n}\n\n/**\n * One schema.org `LocalBusiness` (default `Store`) per shop branch. Hours come\n * from `opening_hours` when present, else from the legacy `hours` string.\n */\nexport function localBusinessJsonLd(shop: Shop, options: LocalBusinessOptions = {}): JsonLdObject[] {\n const site = shopUrl(shop, options.url)\n return shop.branches.map((b) =>\n compact({\n '@context': CONTEXT,\n '@type': options.type ?? 'Store',\n '@id': site ? `${site}#branch-${b.id}` : undefined,\n name: `${shop.name} - ${b.name}`,\n url: site,\n image: shop.logo?.url,\n telephone: b.phone ?? shop.contact.phone ?? undefined,\n priceRange: options.priceRange,\n address: compact({ '@type': 'PostalAddress', streetAddress: b.address, addressLocality: b.city, addressCountry: shop.country_code }),\n geo: isValidPoint(b) ? { '@type': 'GeoCoordinates', latitude: b.lat, longitude: b.lng } : undefined,\n openingHours: openingHoursJsonLd(b.opening_hours ?? b.hours),\n parentOrganization: site ? { '@id': `${site}#organization` } : { '@type': 'Organization', name: shop.name },\n }),\n )\n}\n\nexport type BreadcrumbItem = { name: string; url: string }\n\nexport function breadcrumbJsonLd(items: BreadcrumbItem[]): JsonLdObject {\n return {\n '@context': CONTEXT,\n '@type': 'BreadcrumbList',\n itemListElement: items.map((item, i) => ({ '@type': 'ListItem', position: i + 1, name: item.name, item: item.url })),\n }\n}\n\nexport type FaqItem = { question: string; answer: string }\n\nexport function faqJsonLd(items: FaqItem[]): JsonLdObject {\n return {\n '@context': CONTEXT,\n '@type': 'FAQPage',\n mainEntity: items.map((item) => ({\n '@type': 'Question',\n name: item.question,\n acceptedAnswer: { '@type': 'Answer', text: item.answer },\n })),\n }\n}\n\n/** schema.org `CollectionPage` with an `ItemList` of the products shown. */\nexport function collectionJsonLd(\n collection: Collection,\n products: Pick<Product, 'handle' | 'title' | 'featured_image'>[],\n url: string,\n options: { productUrl?: (handle: string) => string } = {},\n): JsonLdObject {\n const origin = (() => {\n try {\n return new URL(url).origin\n } catch {\n return ''\n }\n })()\n const productUrl = options.productUrl ?? ((handle: string) => `${origin}/products/${handle}`)\n return compact({\n '@context': CONTEXT,\n '@type': 'CollectionPage',\n name: collection.seo.title ?? collection.title,\n description: clean(collection.seo.description ?? collection.description) ?? undefined,\n url,\n image: collection.image?.url,\n mainEntity: {\n '@type': 'ItemList',\n numberOfItems: products.length,\n itemListElement: products.map((p, i) =>\n compact({ '@type': 'ListItem', position: i + 1, url: productUrl(p.handle), name: p.title, image: p.featured_image?.url }),\n ),\n },\n })\n}\n\n/**\n * Serializes JSON-LD for a `<script>` tag, escaping `<`, `>`, `&` and line\n * separators so the payload cannot close the tag or inject markup.\n */\nexport function serializeJsonLd(data: unknown): string {\n return JSON.stringify(data)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n","import { serializeJsonLd, type JsonLdObject } from './seo.js'\n\nexport type JsonLdProps = { data: JsonLdObject | JsonLdObject[] | null | undefined; nonce?: string }\n\n/** Renders `<script type=\"application/ld+json\">` safely (works in SSR). */\nexport function JsonLd({ data, nonce }: JsonLdProps) {\n if (!data || (Array.isArray(data) && data.length === 0)) return null\n return <script type=\"application/ld+json\" nonce={nonce} dangerouslySetInnerHTML={{ __html: serializeJsonLd(data) }} />\n}\n","/**\n * Section registry: pages are ordered lists of `{ id, type, props }` (from\n * `content.page()`), and each `type` maps to a React component with a closed\n * props schema. The schema is what the OPS editor (and its AI agent) uses to\n * know which props exist, so props are validated and defaults merged before\n * rendering — the content is data, never markup.\n */\nimport { Fragment, type ComponentType, type ReactNode } from 'react'\nimport type { Section } from '@asteby/storefront'\n\nexport type SectionPropKind =\n | 'text'\n | 'textarea'\n | 'richtext'\n | 'number'\n | 'boolean'\n | 'url'\n | 'image'\n | 'color'\n | 'select'\n | 'collection'\n | 'product'\n | 'products'\n | 'list'\n\nexport type SectionPropSchema = {\n label: string\n kind: SectionPropKind\n description?: string\n default?: unknown\n required?: boolean\n /** `select` choices. */\n options?: readonly { value: string; label: string }[]\n /** `number` bounds. */\n min?: number\n max?: number\n /** `list` item schema. */\n items?: SectionSchema\n}\n\nexport type SectionSchema = { readonly [prop: string]: SectionPropSchema }\n\ntype KindType<P extends SectionPropSchema> = P['kind'] extends 'number'\n ? number\n : P['kind'] extends 'boolean'\n ? boolean\n : P['kind'] extends 'products'\n ? string[]\n : P['kind'] extends 'list'\n ? P['items'] extends SectionSchema\n ? InferSectionProps<P['items']>[]\n : Record<string, unknown>[]\n : P['kind'] extends 'select'\n ? P['options'] extends readonly { value: infer V }[]\n ? V\n : string\n : string\n\ntype RequiredKeys<S extends SectionSchema> = {\n [K in keyof S]: S[K]['required'] extends true ? K : 'default' extends keyof S[K] ? K : never\n}[keyof S]\n\n/** Props type derived from a section schema (props with `default` or `required` are non-optional). */\nexport type InferSectionProps<S extends SectionSchema> = { [K in RequiredKeys<S>]: KindType<S[K]> } & {\n [K in Exclude<keyof S, RequiredKeys<S>>]?: KindType<S[K]>\n}\n\nexport type SectionComponentProps<P, C = unknown> = P & {\n section: { id: string; type: string }\n /** Arbitrary data passed to `<Sections context>` (e.g. loader data). */\n context: C\n}\n\nexport type SectionDefinition<P = Record<string, unknown>, C = any> = {\n type: string\n label?: string\n description?: string\n schema: SectionSchema\n component: ComponentType<SectionComponentProps<P, C>>\n}\n\n/**\n * Declares a section. Prop types are inferred from the schema:\n *\n * export const hero = defineSection({\n * type: 'hero',\n * label: 'Hero',\n * schema: {\n * title: { label: 'Título', kind: 'text', required: true },\n * cta_url: { label: 'Enlace', kind: 'url', default: '/' },\n * },\n * component: ({ title, cta_url }) => <section><h1>{title}</h1><a href={cta_url}>Ver</a></section>,\n * })\n */\nexport function defineSection<const S extends SectionSchema, C = any>(definition: {\n type: string\n label?: string\n description?: string\n schema: S\n component: ComponentType<SectionComponentProps<InferSectionProps<S>, C>>\n}): SectionDefinition<InferSectionProps<S>, C> {\n return definition as SectionDefinition<InferSectionProps<S>, C>\n}\n\nexport type SectionPropError = { prop: string; message: string }\n\nconst STRING_KINDS = new Set<SectionPropKind>(['text', 'textarea', 'richtext', 'url', 'image', 'color', 'collection', 'product'])\n\nfunction cloneDefault(value: unknown): unknown {\n return value !== null && typeof value === 'object' ? structuredClone(value) : value\n}\n\n/**\n * Validates raw props against a schema: merges defaults, coerces numeric\n * strings, drops unknown props and replaces invalid values with the default.\n */\nexport function resolveSectionProps(schema: SectionSchema, raw: Record<string, unknown> | null | undefined, path = ''): { props: Record<string, unknown>; errors: SectionPropError[] } {\n const props: Record<string, unknown> = {}\n const errors: SectionPropError[] = []\n const input = raw ?? {}\n for (const [name, spec] of Object.entries(schema)) {\n const key = path ? `${path}.${name}` : name\n let value = input[name]\n const fail = (message: string) => {\n errors.push({ prop: key, message })\n if ('default' in spec) props[name] = cloneDefault(spec.default)\n }\n if (value === undefined || value === null || value === '') {\n if ('default' in spec) props[name] = cloneDefault(spec.default)\n else if (spec.required) errors.push({ prop: key, message: 'is required' })\n continue\n }\n if (STRING_KINDS.has(spec.kind)) {\n if (typeof value !== 'string') {\n fail('must be a string')\n continue\n }\n } else if (spec.kind === 'number') {\n if (typeof value === 'string' && value.trim() !== '' && Number.isFinite(Number(value))) value = Number(value)\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n fail('must be a number')\n continue\n }\n if ((spec.min !== undefined && value < spec.min) || (spec.max !== undefined && value > spec.max)) {\n fail(`must be between ${spec.min ?? '-∞'} and ${spec.max ?? '∞'}`)\n continue\n }\n } else if (spec.kind === 'boolean') {\n if (typeof value !== 'boolean') {\n fail('must be a boolean')\n continue\n }\n } else if (spec.kind === 'select') {\n if (typeof value !== 'string' || (spec.options && !spec.options.some((o) => o.value === value))) {\n fail(`must be one of ${(spec.options ?? []).map((o) => o.value).join(', ')}`)\n continue\n }\n } else if (spec.kind === 'products') {\n if (!Array.isArray(value) || value.some((v) => typeof v !== 'string')) {\n fail('must be a list of product handles')\n continue\n }\n } else if (spec.kind === 'list') {\n if (!Array.isArray(value)) {\n fail('must be a list')\n continue\n }\n const items: unknown[] = []\n value.forEach((item, i) => {\n if (!spec.items) {\n items.push(item)\n return\n }\n if (typeof item !== 'object' || item === null || Array.isArray(item)) {\n errors.push({ prop: `${key}[${i}]`, message: 'must be an object' })\n return\n }\n const resolved = resolveSectionProps(spec.items, item as Record<string, unknown>, `${key}[${i}]`)\n errors.push(...resolved.errors)\n items.push(resolved.props)\n })\n value = items\n }\n props[name] = value\n }\n return { props, errors }\n}\n\n/** JSON Schema (draft 2020-12) of a section, for the OPS editor (`section.schema.json`). */\nexport function sectionJsonSchema(definition: Pick<SectionDefinition, 'type' | 'label' | 'description' | 'schema'>): Record<string, unknown> {\n const toSchema = (schema: SectionSchema): Record<string, unknown> => {\n const properties: Record<string, unknown> = {}\n const required: string[] = []\n for (const [name, spec] of Object.entries(schema)) {\n const base: Record<string, unknown> = { title: spec.label, 'x-kind': spec.kind }\n if (spec.description) base.description = spec.description\n if ('default' in spec) base.default = spec.default\n if (spec.required) required.push(name)\n switch (spec.kind) {\n case 'number':\n Object.assign(base, { type: 'number' }, spec.min !== undefined ? { minimum: spec.min } : {}, spec.max !== undefined ? { maximum: spec.max } : {})\n break\n case 'boolean':\n base.type = 'boolean'\n break\n case 'select':\n Object.assign(base, { type: 'string', enum: (spec.options ?? []).map((o) => o.value), 'x-options': spec.options ?? [] })\n break\n case 'products':\n Object.assign(base, { type: 'array', items: { type: 'string' } })\n break\n case 'list':\n Object.assign(base, { type: 'array', items: spec.items ? toSchema(spec.items) : { type: 'object' } })\n break\n case 'url':\n Object.assign(base, { type: 'string', format: 'uri-reference' })\n break\n default:\n base.type = 'string'\n }\n properties[name] = base\n }\n return { type: 'object', additionalProperties: false, properties, ...(required.length ? { required } : {}) }\n }\n return {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: `section:${definition.type}`,\n title: definition.label ?? definition.type,\n ...(definition.description ? { description: definition.description } : {}),\n ...toSchema(definition.schema),\n }\n}\n\n/** Map of section `type` → definition. */\nexport class SectionRegistry {\n private readonly defs = new Map<string, SectionDefinition<any, any>>()\n\n constructor(definitions: readonly SectionDefinition<any, any>[] = []) {\n for (const d of definitions) this.register(d)\n }\n\n register(definition: SectionDefinition<any, any>): this {\n this.defs.set(definition.type, definition)\n return this\n }\n\n get(type: string): SectionDefinition<any, any> | undefined {\n return this.defs.get(type)\n }\n\n has(type: string): boolean {\n return this.defs.has(type)\n }\n\n types(): string[] {\n return [...this.defs.keys()]\n }\n\n definitions(): SectionDefinition<any, any>[] {\n return [...this.defs.values()]\n }\n\n /** JSON Schemas of every registered section, keyed by type. */\n toJSONSchema(): Record<string, Record<string, unknown>> {\n return Object.fromEntries(this.definitions().map((d) => [d.type, sectionJsonSchema(d)]))\n }\n}\n\nexport function createSectionRegistry(definitions: readonly SectionDefinition<any, any>[] = []): SectionRegistry {\n return new SectionRegistry(definitions)\n}\n\nconst isDev = () => {\n const p = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n return p?.env?.NODE_ENV !== 'production'\n}\n\nexport type SectionsProps<C = unknown> = {\n sections: readonly Section[] | null | undefined\n registry: SectionRegistry\n /** Passed to every section component as `context`. */\n context?: C\n /** Rendered for unknown types (default: nothing). */\n renderUnknown?: (section: Section) => ReactNode\n /** Called with validation problems (default: `console.warn` outside production). */\n onInvalid?: (section: Section, errors: SectionPropError[]) => void\n}\n\n/**\n * Renders sections in order. Unknown types are skipped (with a dev warning),\n * props are validated against the schema and defaults are merged; a section\n * missing a required prop is skipped.\n */\nexport function Sections<C = unknown>({ sections, registry, context, renderUnknown, onInvalid }: SectionsProps<C>) {\n if (!sections?.length) return null\n return (\n <>\n {sections.map((section, index) => {\n const key = section.id || `${section.type}-${index}`\n const def = registry.get(section.type)\n if (!def) {\n if (isDev()) console.warn(`[storefront-react] Unknown section type \"${section.type}\" (id ${section.id}); skipping.`)\n return renderUnknown ? <Fragment key={key}>{renderUnknown(section)}</Fragment> : null\n }\n const { props, errors } = resolveSectionProps(def.schema, section.props)\n if (errors.length) {\n if (onInvalid) onInvalid(section, errors)\n else if (isDev()) console.warn(`[storefront-react] Section \"${section.type}\" (id ${section.id}) has invalid props:`, errors)\n }\n // A missing required prop would break the component: skip the section.\n if (errors.some((e) => e.message === 'is required' && !e.prop.includes('[') && !e.prop.includes('.'))) return null\n const Component = def.component\n return <Component key={key} {...props} section={{ id: section.id, type: section.type }} context={context} />\n })}\n </>\n )\n}\n","/**\n * Server-side theme (S3): turns the content theme from\n * `content.theme()` into CSS custom properties so the first SSR byte already\n * carries the store's brand — no localStorage, no anti-flicker script.\n *\n * Token naming follows `@asteby/metacore-theme`: camelCase keys become\n * kebab-case (`primaryForeground` → `--primary-foreground`), and each color is\n * also exposed as a Tailwind 4 theme variable (`--color-primary-foreground`).\n * metacore-theme ships its tokens as static CSS with no reusable naming\n * helper, so this module is standalone and does not depend on it.\n */\nimport type { Theme } from '@asteby/storefront'\n\nexport type ThemeCssOptions = {\n /** Selector that receives the variables (default `:root`). */\n selector?: string\n /**\n * Variable names for color tokens:\n * `both` (default) → `--color-<name>` and `--<name>`;\n * `color` → only `--color-<name>` (Tailwind 4); `metacore` → only `--<name>`.\n */\n naming?: 'both' | 'color' | 'metacore'\n /** Fallback stack appended to every font (default system sans-serif). */\n fontFallback?: string\n}\n\nconst DEFAULT_FONT_FALLBACK = 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif'\nconst MONO_FALLBACK = 'ui-monospace, SFMono-Regular, Menlo, monospace'\n\n/** `primaryForeground`, `primary_foreground`, `--color-primary-foreground` → `primary-foreground`. */\nexport function tokenName(key: string): string {\n return key\n .trim()\n .replace(/^-+/, '')\n .replace(/^color-/, '')\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_.]+/g, '-')\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\n/** Rejects values that could escape the declaration or the `<style>` element. */\nexport function isSafeCssValue(value: string): boolean {\n if (!value || value.length > 200) return false\n if (/[;{}<>\\\\]/.test(value)) return false\n if (/url\\s*\\(|expression\\s*\\(|@import/i.test(value)) return false\n return true\n}\n\nfunction fontStack(family: string, role: string, fallback: string): string | null {\n const name = family.replace(/[\"']/g, '').trim()\n if (!name || !isSafeCssValue(name)) return null\n return `\"${name}\", ${role === 'mono' ? MONO_FALLBACK : fallback}`\n}\n\n/** CSS declarations (`--x:value`) for a theme, without selector. */\nexport function themeToCssVariables(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): Record<string, string> {\n const naming = options.naming ?? 'both'\n const vars: Record<string, string> = {}\n for (const [key, raw] of Object.entries(theme?.tokens ?? {})) {\n const name = tokenName(key)\n const value = String(raw).trim()\n if (!name || !isSafeCssValue(value)) continue\n if (naming !== 'metacore') vars[`--color-${name}`] = value\n if (naming !== 'color') vars[`--${name}`] = value\n }\n const fallback = options.fontFallback ?? DEFAULT_FONT_FALLBACK\n for (const [role, family] of Object.entries(theme?.fonts ?? {})) {\n const name = tokenName(role)\n const stack = typeof family === 'string' ? fontStack(family, name, fallback) : null\n if (name && stack) vars[`--font-${name}`] = stack\n }\n if (theme?.radius && isSafeCssValue(theme.radius.trim())) vars['--radius'] = theme.radius.trim()\n return vars\n}\n\n/** `:root{--color-primary:#0f766e;--primary:#0f766e;...}` from a content theme. */\nexport function themeToCss(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): string {\n const vars = themeToCssVariables(theme, options)\n const body = Object.entries(vars)\n .map(([k, v]) => `${k}:${v}`)\n .join(';')\n if (!body) return ''\n const selector = (options.selector ?? ':root').replace(/[{}<>]/g, '')\n return `${selector}{${body}}`\n}\n\n/** Google Fonts stylesheet URL for the theme fonts (or `null` when there are none). */\nexport function themeFontsHref(theme: Partial<Theme> | null | undefined, weights: number[] = [400, 500, 600, 700]): string | null {\n const families = [...new Set(Object.values(theme?.fonts ?? {}).map((f) => String(f).replace(/[\"']/g, '').trim()).filter((f) => f && isSafeCssValue(f)))]\n if (!families.length) return null\n const params = families.map((f) => `family=${encodeURIComponent(f).replace(/%20/g, '+')}:wght@${weights.join(';')}`).join('&')\n return `https://fonts.googleapis.com/css2?${params}&display=swap`\n}\n\nexport type ThemeStyleProps = ThemeCssOptions & {\n theme: Partial<Theme> | null | undefined\n nonce?: string\n id?: string\n}\n\n/** Emits the theme variables as a `<style>` (render it in `<head>` from the root route). */\nexport function ThemeStyle({ theme, nonce, id = 'storefront-theme', ...options }: ThemeStyleProps) {\n const css = themeToCss(theme, options)\n if (!css) return null\n return <style id={id} nonce={nonce} data-storefront-theme=\"\" dangerouslySetInnerHTML={{ __html: css }} />\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { GeoPoint } from '@asteby/storefront'\n\nexport type GeolocationErrorCode = 'unsupported' | 'insecure' | 'denied' | 'unavailable' | 'timeout'\n\n/** Typed failure of `request()`. `message` is a ready-to-show es-MX text. */\nexport type GeolocationFailure = { code: GeolocationErrorCode; message: string }\n\n/** State of the browser permission. `unknown` when the Permissions API is missing. */\nexport type GeolocationPermission = 'granted' | 'denied' | 'prompt' | 'unknown'\n\nexport type UseGeolocationOptions = {\n enableHighAccuracy?: boolean\n /** Give up after this long (default 10 s). */\n timeoutMs?: number\n /** Accept a cached position up to this old (default 5 min). */\n maximumAge?: number\n}\n\nexport type UseGeolocationResult = {\n /** `false` on the server and until mounted, so SSR and hydration agree. */\n supported: boolean\n permission: GeolocationPermission\n status: 'idle' | 'locating' | 'success' | 'error'\n position: GeoPoint | null\n error: GeolocationFailure | null\n /**\n * Asks the browser for the position. Call it ONLY from a user gesture (a button's onClick): the hook never\n * asks by itself. Resolves to the point, or `null` on failure (see `error`).\n */\n request: () => Promise<GeoPoint | null>\n reset: () => void\n}\n\nconst MESSAGES: Record<GeolocationErrorCode, string> = {\n unsupported: 'Tu navegador no permite obtener tu ubicación.',\n insecure: 'La ubicación solo está disponible en conexiones seguras (HTTPS).',\n denied: 'No tenemos permiso para usar tu ubicación. Puedes activarlo en el navegador o escribir tu código postal.',\n unavailable: 'No pudimos determinar tu ubicación. Escribe tu código postal.',\n timeout: 'Tardó demasiado en obtener tu ubicación. Intenta de nuevo o escribe tu código postal.',\n}\n\nconst fail = (code: GeolocationErrorCode): GeolocationFailure => ({ code, message: MESSAGES[code] })\n\nconst hasGeolocation = () => typeof navigator !== 'undefined' && !!navigator.geolocation\n\n/**\n * Browser geolocation that only runs under a user action. Reading the permission state (when the Permissions\n * API exists) does not prompt. The point stays in React state: it is never stored or sent anywhere here.\n */\nexport function useGeolocation(options: UseGeolocationOptions = {}): UseGeolocationResult {\n const { enableHighAccuracy = false, timeoutMs = 10_000, maximumAge = 300_000 } = options\n const [supported, setSupported] = useState(false)\n const [permission, setPermission] = useState<GeolocationPermission>('unknown')\n const [status, setStatus] = useState<UseGeolocationResult['status']>('idle')\n const [position, setPosition] = useState<GeoPoint | null>(null)\n const [error, setError] = useState<GeolocationFailure | null>(null)\n const alive = useRef(true)\n\n useEffect(() => {\n alive.current = true\n setSupported(hasGeolocation())\n let off = () => {}\n try {\n const perms = typeof navigator !== 'undefined' ? navigator.permissions : undefined\n void perms?.query({ name: 'geolocation' }).then((p) => {\n if (!alive.current) return\n const sync = () => setPermission(p.state)\n sync()\n p.addEventListener?.('change', sync)\n off = () => p.removeEventListener?.('change', sync)\n }, () => {})\n } catch {\n // Permissions API unavailable or rejects 'geolocation': stay `unknown`.\n }\n return () => {\n alive.current = false\n off()\n }\n }, [])\n\n const request = useCallback((): Promise<GeoPoint | null> => {\n const failWith = (code: GeolocationErrorCode) => {\n if (alive.current) {\n setStatus('error')\n setError(fail(code))\n }\n return null\n }\n if (!hasGeolocation()) return Promise.resolve(failWith('unsupported'))\n if (typeof window !== 'undefined' && window.isSecureContext === false) return Promise.resolve(failWith('insecure'))\n setStatus('locating')\n setError(null)\n return new Promise((resolve) => {\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n const point = { lat: pos.coords.latitude, lng: pos.coords.longitude }\n if (alive.current) {\n setPosition(point)\n setStatus('success')\n setPermission('granted')\n }\n resolve(point)\n },\n (err) => resolve(failWith(err.code === 1 ? 'denied' : err.code === 3 ? 'timeout' : 'unavailable')),\n { enableHighAccuracy, timeout: timeoutMs, maximumAge },\n )\n })\n }, [enableHighAccuracy, timeoutMs, maximumAge])\n\n const reset = useCallback(() => {\n setStatus('idle')\n setPosition(null)\n setError(null)\n }, [])\n\n return { supported, permission, status, position, error, request, reset }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport type { ShopBranch, StorefrontClient } from '@asteby/storefront'\nimport { rankByDistance, type GeoPoint } from '@asteby/storefront/geo'\nimport { useOptionalStorefront } from './context.js'\n\nexport type NearbyLocation<L extends ShopBranch = ShopBranch> = L & { distance_km: number | null }\n\nexport type UseNearestLocationsOptions<L extends ShopBranch = ShopBranch> = {\n /** The buyer's point (from `useGeolocation().request()`). */\n origin?: GeoPoint | null\n /** Postal code typed by the buyer (5 digits). The server resolves it to coordinates, so this always asks the server. */\n postalCode?: string | null\n /** Branches to rank. Defaults to `shop.branches` from the provider. */\n locations?: readonly L[]\n /** Keep the closest N. */\n limit?: number\n /** Keep those within this many km. */\n radiusKm?: number\n /** Force the server (`locations.nearest`) for `origin` instead of ranking `locations` in the browser. */\n remote?: boolean\n /** Defaults to the provider's client. */\n client?: StorefrontClient\n}\n\nexport type UseNearestLocationsResult<L extends ShopBranch = ShopBranch> = {\n locations: NearbyLocation<L>[]\n status: 'idle' | 'loading' | 'success' | 'error'\n error: Error | null\n /** `local`: ranked in the browser, the point never leaves it. `remote`: answered by the server. */\n source: 'local' | 'remote' | null\n}\n\nconst EMPTY: readonly ShopBranch[] = []\nconst IDLE = { locations: [], status: 'idle', error: null, source: null } as const\n\n/**\n * Branches ordered by distance. With an `origin` and branches at hand (explicit or `shop.branches`) the ranking\n * runs in the browser with haversine and the coordinates are sent nowhere. `postalCode` (or `remote`) asks the\n * server, which rounds and never stores the point. With zero branches, or neither origin nor postal code, the\n * result is empty and `idle`.\n */\nexport function useNearestLocations<L extends ShopBranch = ShopBranch>(options: UseNearestLocationsOptions<L> = {}): UseNearestLocationsResult<L> {\n const { origin = null, postalCode = null, limit, radiusKm, remote = false } = options\n const sf = useOptionalStorefront()\n const client = options.client ?? sf?.client ?? null\n const branches = (options.locations ?? sf?.shop?.branches ?? EMPTY) as readonly L[]\n const lat = origin?.lat\n const lng = origin?.lng\n const hasOrigin = lat !== undefined && lng !== undefined\n const cp = postalCode?.trim() || null\n\n const mode = useMemo<'local' | 'remote' | null>(() => {\n if (cp) return client ? 'remote' : null\n if (!hasOrigin) return null\n if (remote) return client ? 'remote' : null\n return branches.length ? 'local' : null\n }, [cp, hasOrigin, remote, client, branches.length])\n\n const local = useMemo<NearbyLocation<L>[]>(() => {\n if (mode !== 'local' || !hasOrigin) return []\n return rankByDistance(branches, { lat, lng }, { ...(radiusKm !== undefined ? { radiusKm } : {}), ...(limit !== undefined ? { limit } : {}) })\n .map(({ item, distanceKm }) => ({ ...item, distance_km: distanceKm }))\n }, [mode, branches, lat, lng, radiusKm, limit, hasOrigin])\n\n const [remoteState, setRemoteState] = useState<{ key: string; nodes: NearbyLocation<L>[] } | { key: string; error: Error } | null>(null)\n const key = mode === 'remote' ? (cp ? `cp:${cp}` : `ll:${lat},${lng}`) : ''\n\n useEffect(() => {\n if (mode !== 'remote' || !client) return\n const ctrl = new AbortController()\n const req = cp\n ? client.locations.list({ postal_code: cp }, { signal: ctrl.signal })\n : client.locations.nearest({ lat: lat!, lng: lng! }, { signal: ctrl.signal })\n req.then(\n (res) => !ctrl.signal.aborted && setRemoteState({ key, nodes: res.nodes as unknown as NearbyLocation<L>[] }),\n (err: unknown) => !ctrl.signal.aborted && setRemoteState({ key, error: err instanceof Error ? err : new Error(String(err)) }),\n )\n return () => ctrl.abort()\n }, [mode, client, key, cp, lat, lng])\n\n return useMemo(() => {\n if (mode === 'local') return { locations: local, status: 'success', error: null, source: 'local' } as const\n if (mode !== 'remote') return IDLE as unknown as UseNearestLocationsResult<L>\n if (!remoteState || remoteState.key !== key) return { locations: [], status: 'loading', error: null, source: 'remote' } as const\n if ('error' in remoteState) return { locations: [], status: 'error', error: remoteState.error, source: 'remote' } as const\n let nodes = remoteState.nodes\n if (radiusKm !== undefined) nodes = nodes.filter((n) => n.distance_km == null || n.distance_km <= radiusKm)\n if (limit !== undefined) nodes = nodes.slice(0, Math.max(0, limit))\n return { locations: nodes, status: 'success', error: null, source: 'remote' } as const\n }, [mode, local, remoteState, key, radiusKm, limit])\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport type { ShopBranch } from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\n\n/** Query param that carries the chosen branch (also the default `name` of `<LocationPicker>`). */\nexport const SELECTED_LOCATION_PARAM = 'sucursal'\n/** localStorage key of \"Mi sucursal\". Never a cookie: the choice is per browser and is not sent to the server. */\nexport const SELECTED_LOCATION_STORAGE_KEY = 'sf_sucursal'\n\nconst CHANGE_EVENT = 'storefront:selected-location'\n\nconst storage = (): Storage | null => {\n try {\n return typeof localStorage === 'undefined' ? null : localStorage\n } catch {\n return null // blocked storage throws on access\n }\n}\n\n/**\n * The saved branch id: `?sucursal=` wins over localStorage. Pure helper for loaders and tests; on the server\n * pass the request's search string (`new URL(request.url).search`) and no storage.\n */\nexport function readSelectedLocationId(\n { search = typeof location === 'undefined' ? '' : location.search, store = storage(), param = SELECTED_LOCATION_PARAM, storageKey = SELECTED_LOCATION_STORAGE_KEY }:\n { search?: string; store?: Pick<Storage, 'getItem'> | null; param?: string; storageKey?: string } = {},\n): string | null {\n const fromUrl = new URLSearchParams(search).get(param)\n if (fromUrl) return fromUrl\n try {\n return store?.getItem(storageKey) || null\n } catch {\n return null\n }\n}\n\nexport type UseSelectedLocationOptions = {\n /** Branches to validate against. Defaults to `shop.branches` from `<StorefrontProvider>`. */\n locations?: readonly ShopBranch[]\n /** Id already known on the server (from `?sucursal=`), so SSR and hydration render the same. */\n initialId?: string | null\n param?: string\n storageKey?: string\n /** Mirror the choice in the address bar with `history.replaceState` (default true). */\n syncUrl?: boolean\n}\n\nexport type UseSelectedLocationResult<L extends ShopBranch = ShopBranch> = {\n id: string | null\n location: L | null\n /** `false` until the saved choice has been read on the client. */\n ready: boolean\n select: (id: string) => void\n clear: () => void\n}\n\nconst EMPTY: readonly ShopBranch[] = []\n\n/**\n * \"Mi sucursal\": the chosen branch lives in the URL (`?sucursal=<id>`, shareable) and in localStorage. It is\n * never written to a cookie, so it does not travel with every request. An id that is not among `locations`\n * is ignored and forgotten; with zero branches nothing is ever selected.\n */\nexport function useSelectedLocation<L extends ShopBranch = ShopBranch>(options: UseSelectedLocationOptions & { locations?: readonly L[] } = {}): UseSelectedLocationResult<L> {\n const { initialId = null, param = SELECTED_LOCATION_PARAM, storageKey = SELECTED_LOCATION_STORAGE_KEY, syncUrl = true } = options\n const sf = useOptionalStorefront()\n const locations = (options.locations ?? sf?.shop?.branches ?? EMPTY) as readonly L[]\n const [raw, setRaw] = useState<string | null>(initialId)\n const [ready, setReady] = useState(false)\n\n useEffect(() => {\n const read = () => setRaw(readSelectedLocationId({ param, storageKey }))\n read()\n setReady(true)\n window.addEventListener(CHANGE_EVENT, read)\n window.addEventListener('storage', read)\n window.addEventListener('popstate', read)\n return () => {\n window.removeEventListener(CHANGE_EVENT, read)\n window.removeEventListener('storage', read)\n window.removeEventListener('popstate', read)\n }\n }, [param, storageKey])\n\n const location = useMemo(() => (raw ? locations.find((l) => l.id === raw) ?? null : null), [raw, locations])\n const id = location?.id ?? null\n\n // A valid choice that came from a shared link is remembered; a stale id (branch removed or hidden) is forgotten.\n useEffect(() => {\n if (!ready || !raw || !locations.length) return\n try {\n if (location) storage()?.setItem(storageKey, raw)\n else storage()?.removeItem(storageKey)\n } catch { /* storage blocked */ }\n }, [ready, raw, locations, location, storageKey])\n\n const write = useCallback(\n (next: string | null) => {\n try {\n if (next) storage()?.setItem(storageKey, next)\n else storage()?.removeItem(storageKey)\n } catch {\n // Storage full or blocked: the URL (if synced) and React state still carry the choice.\n }\n if (syncUrl && typeof history !== 'undefined') {\n const url = new URL(window.location.href)\n if (next) url.searchParams.set(param, next)\n else url.searchParams.delete(param)\n history.replaceState(history.state, '', url)\n }\n setRaw(next)\n window.dispatchEvent(new Event(CHANGE_EVENT))\n },\n [param, storageKey, syncUrl],\n )\n\n const select = useCallback((next: string) => write(next), [write])\n const clear = useCallback(() => write(null), [write])\n return { id, location, ready, select, clear }\n}\n","import {\n useEffect,\n useId,\n useState,\n type ComponentPropsWithoutRef,\n type FormEvent,\n type ReactNode,\n} from 'react'\nimport { formatMoney, type Money, type ShopBranch } from '@asteby/storefront'\nimport { directionsUrl, openStatus, type GeoPoint, type OpeningHours, type OpenStatus as OpenStatusData } from '@asteby/storefront/geo'\nimport { useOptionalStorefront } from './context.js'\nimport { useGeolocation } from './geolocation.js'\nimport { SELECTED_LOCATION_PARAM } from './selected-location.js'\n\n// Headless: no styles and no class names. Every component renders `null` when there are no branches.\n\nconst EMPTY: readonly ShopBranch[] = []\n\n/** `locations` prop, else `shop.branches` from the provider, else none. */\nfunction useLocationsOrShop<L extends ShopBranch>(locations: readonly L[] | undefined): readonly L[] {\n const sf = useOptionalStorefront()\n return locations ?? ((sf?.shop?.branches ?? EMPTY) as readonly L[])\n}\n\n// ---------------------------------------------------------------------------\n// LocationList\n// ---------------------------------------------------------------------------\n\nexport type LocationItemState = { index: number; selected: boolean }\n\nexport type LocationListProps<L extends ShopBranch = ShopBranch> = {\n locations?: readonly L[]\n /** Marks one item with `data-selected` / `aria-current`. */\n selectedId?: string | null\n /** Renders each item's content. Defaults to name and address. */\n children?: (location: L, state: LocationItemState) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'ul'>, 'children'>\n\n/** `<ul>` of branches; the content of every `<li>` is yours (render prop). */\nexport function LocationList<L extends ShopBranch = ShopBranch>({ locations, selectedId, children, ...rest }: LocationListProps<L>) {\n const list = useLocationsOrShop(locations)\n if (!list.length) return null\n return (\n <ul {...rest}>\n {list.map((loc, index) => {\n const selected = loc.id === selectedId\n return (\n <li key={loc.id} data-selected={selected || undefined} aria-current={selected || undefined}>\n {children ? children(loc, { index, selected }) : (\n <>\n <span>{loc.name}</span> <span>{loc.address}</span>\n </>\n )}\n </li>\n )\n })}\n </ul>\n )\n}\n\n// ---------------------------------------------------------------------------\n// LocationPicker\n// ---------------------------------------------------------------------------\n\nexport type LocationPickerProps<L extends ShopBranch = ShopBranch> = {\n /** Accessible name of the group (rendered as `<legend>`). */\n legend: ReactNode\n locations?: readonly L[]\n /** Controlled value (branch id). */\n value?: string | null\n defaultValue?: string | null\n onChange?: (id: string, location: L) => void\n /** Radio `name` (default `sucursal`, the same param `useSelectedLocation` reads). */\n name?: string\n /** Content of each option next to its radio. Defaults to name and address. */\n children?: (location: L, state: { checked: boolean }) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'fieldset'>, 'children' | 'onChange' | 'defaultValue'>\n\n/**\n * `<fieldset>` of native radio buttons: keyboard and screen-reader behaviour comes from the browser, and inside\n * a GET `<form>` it submits `?sucursal=<id>` without JavaScript.\n */\nexport function LocationPicker<L extends ShopBranch = ShopBranch>({\n legend, locations, value, defaultValue = null, onChange, name = SELECTED_LOCATION_PARAM, children, ...rest\n}: LocationPickerProps<L>) {\n const list = useLocationsOrShop(locations)\n const [inner, setInner] = useState<string | null>(defaultValue)\n if (!list.length) return null\n const current = value !== undefined ? value : inner\n return (\n <fieldset {...rest}>\n <legend>{legend}</legend>\n {list.map((loc) => {\n const checked = loc.id === current\n return (\n <label key={loc.id} data-checked={checked || undefined}>\n <input\n type=\"radio\"\n name={name}\n value={loc.id}\n checked={checked}\n onChange={() => {\n if (value === undefined) setInner(loc.id)\n onChange?.(loc.id, loc)\n }}\n />{' '}\n {children ? children(loc, { checked }) : (\n <>\n <span>{loc.name}</span> <span>{loc.address}</span>\n </>\n )}\n </label>\n )\n })}\n </fieldset>\n )\n}\n\n// ---------------------------------------------------------------------------\n// OpenStatus\n// ---------------------------------------------------------------------------\n\nexport type OpenStatusLabels = { open: string; closed: string }\n\nexport type OpenStatusProps = {\n /** Reads `opening_hours` and `timezone` from it. */\n location?: Pick<ShopBranch, 'opening_hours' | 'timezone'>\n hours?: OpeningHours\n /** IANA zone (default: the branch's, else `America/Mexico_City`). */\n timezone?: string\n /** Fixed instant, for tests and SSR snapshots. Without it the status is computed after mount and refreshed every minute. */\n now?: Date\n labels?: Partial<OpenStatusLabels>\n children?: (status: OpenStatusData) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'span'>, 'children'>\n\nconst DEFAULT_TZ = 'America/Mexico_City'\n\n/**\n * \"Abierto\" / \"Cerrado\" from `openStatus`. The clock makes server and client disagree, so without `now` it\n * renders nothing until mounted. Renders `null` without hours or with an unknown time zone.\n */\nexport function OpenStatus({ location, hours, timezone, now, labels, children, ...rest }: OpenStatusProps) {\n const h = hours ?? location?.opening_hours\n const tz = timezone ?? location?.timezone ?? DEFAULT_TZ\n const [tick, setTick] = useState<Date | null>(null)\n useEffect(() => {\n if (now) return\n setTick(new Date())\n const t = setInterval(() => setTick(new Date()), 60_000)\n return () => clearInterval(t)\n }, [now])\n const at = now ?? tick\n if (!h || !at) return null\n let status: OpenStatusData\n try {\n status = openStatus(h, tz, at)\n } catch {\n return null // RangeError: unknown time zone\n }\n const text = { open: 'Abierto', closed: 'Cerrado', ...labels }\n return (\n <span data-state={status.open ? 'open' : 'closed'} {...rest}>\n {children ? children(status) : status.open ? text.open : text.closed}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DirectionsLink\n// ---------------------------------------------------------------------------\n\nexport type DirectionsLinkProps = {\n location: Pick<ShopBranch, 'lat' | 'lng' | 'address' | 'city'>\n provider?: 'google' | 'apple' | 'geo'\n children?: ReactNode\n} & Omit<ComponentPropsWithoutRef<'a'>, 'href' | 'children'>\n\n/** Link to directions in the maps app. `null` when the branch has neither coordinates nor address. */\nexport function DirectionsLink({ location, provider, children = 'Cómo llegar', ...rest }: DirectionsLinkProps) {\n const href = directionsUrl(location, provider ? { provider } : {})\n if (!href) return null\n return (\n <a target=\"_blank\" rel=\"noopener noreferrer\" {...rest} href={href}>\n {children}\n </a>\n )\n}\n\n// ---------------------------------------------------------------------------\n// PickupOption\n// ---------------------------------------------------------------------------\n\nexport type PickupInfo<L extends ShopBranch = ShopBranch> = {\n location: L\n /** `null` = free. Amount as sent by OPS; nothing is calculated here. */\n fee: Money | null\n free: boolean\n /** Formatted `fee` (`null` when free). */\n feeText: string | null\n prepDays: number\n}\n\nexport type PickupOptionProps<L extends ShopBranch = ShopBranch> = {\n location: L\n locale?: string\n children?: (info: PickupInfo<L>) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'span'>, 'children'>\n\nconst readyText = (days: number) => (days <= 0 ? 'listo hoy' : days === 1 ? 'listo en 1 día' : `listo en ${days} días`)\n\n/** \"Recoge en sucursal\" terms: fee and preparation time. `null` when the branch does not offer pickup. */\nexport function PickupOption<L extends ShopBranch = ShopBranch>({ location, locale, children, ...rest }: PickupOptionProps<L>) {\n const sf = useOptionalStorefront()\n const p = location.pickup\n if (!p?.enabled) return null\n const free = !p.fee || Number(p.fee.amount) === 0\n const feeText = free ? null : formatMoney(p.fee!, locale ?? sf?.locale)\n const info: PickupInfo<L> = { location, fee: free ? null : p.fee, free, feeText, prepDays: p.prep_days }\n return (\n <span {...rest}>\n {children ? children(info) : `Recoge en sucursal · ${free ? 'gratis' : feeText} · ${readyText(p.prep_days)}`}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// NearestLocationForm\n// ---------------------------------------------------------------------------\n\nexport type NearestLocationFormLabels = { postalCode: string; submit: string; locate: string; locating: string }\n\nexport type NearestLocationFormProps<L extends ShopBranch = ShopBranch> = {\n locations?: readonly L[]\n /** Destination of the GET (default: the current page). */\n action?: string\n /** Query param and input name (default `cp`). */\n name?: string\n defaultValue?: string\n /** With JavaScript: intercept the submit and receive the postal code. Without it the browser navigates to `?cp=`. */\n onSubmitPostalCode?: (postalCode: string, event: FormEvent<HTMLFormElement>) => void\n /** Shows a \"use my location\" button (only when the browser supports it); it asks permission on click. */\n onLocate?: (point: GeoPoint) => void\n labels?: Partial<NearestLocationFormLabels>\n} & Omit<ComponentPropsWithoutRef<'form'>, 'action' | 'method' | 'onSubmit' | 'defaultValue'>\n\n/**\n * `<form method=\"get\">` with a postal-code field: works without JavaScript (navigates to `?cp=06000`). Add\n * `onSubmitPostalCode` / `onLocate` to enhance it. Renders `null` when there are no branches.\n */\nexport function NearestLocationForm<L extends ShopBranch = ShopBranch>({\n locations, action, name = 'cp', defaultValue, onSubmitPostalCode, onLocate, labels, children, ...rest\n}: NearestLocationFormProps<L>) {\n const list = useLocationsOrShop(locations)\n const id = useId()\n const geo = useGeolocation()\n if (!list.length) return null\n const text = { postalCode: 'Código postal', submit: 'Buscar sucursales', locate: 'Usar mi ubicación', locating: 'Buscando…', ...labels }\n return (\n <form\n method=\"get\"\n {...(action !== undefined ? { action } : {})}\n {...rest}\n onSubmit={onSubmitPostalCode ? (e) => {\n e.preventDefault()\n const value = new FormData(e.currentTarget).get(name)\n onSubmitPostalCode(typeof value === 'string' ? value.trim() : '', e)\n } : undefined}\n >\n <label htmlFor={id}>{text.postalCode}</label>{' '}\n <input\n id={id}\n name={name}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"postal-code\"\n pattern=\"[0-9]{5}\"\n maxLength={5}\n required\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n />{' '}\n <button type=\"submit\">{text.submit}</button>\n {onLocate && geo.supported && (\n <button\n type=\"button\"\n disabled={geo.status === 'locating'}\n onClick={() => void geo.request().then((p) => p && onLocate(p))}\n >\n {geo.status === 'locating' ? text.locating : text.locate}\n </button>\n )}\n {geo.error && <span role=\"alert\">{geo.error.message}</span>}\n {children}\n </form>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/context.tsx","../src/cookie.ts","../src/cart.tsx","../src/components.tsx","../src/variants.tsx","../src/availability.tsx","../src/seo.ts","../src/json-ld.tsx","../src/section-types.ts","../src/sections.tsx","../src/theme.tsx","../src/geolocation.ts","../src/nearest.ts","../src/selected-location.ts","../src/locations.tsx"],"names":["createContext","useMemo","createStorefrontClient","jsx","useContext","isStorefrontError","useRef","useState","useCallback","p","useEffect","formatMoney","createElement","parseMoney","jsxs","Fragment","resolveAvailability","productAvailability","availabilityView","availabilityMessages","formatAvailabilityMessage","useId","cartLineProblemView","schemaAvailability","toSchemaOpeningHours","isValidPoint","StorefrontError","fail","rankByDistance","EMPTY","location","openStatus","directionsUrl"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from 'react'\nimport { createStorefrontClient, type Shop, type StorefrontClient, type StorefrontClientOptions } from '@asteby/storefront'\n\nexport type StorefrontContextValue = {\n /** Client for browser-side calls (use a public `pk_` token). */\n client: StorefrontClient | null\n shop: Shop | null\n /** BCP 47 locale used for formatting (defaults to `shop.locale`, then `es-MX`). */\n locale: string\n /** ISO 4217 currency (defaults to `shop.currency_code`, then `MXN`). */\n currency: string\n}\n\nconst StorefrontContext = createContext<StorefrontContextValue | null>(null)\n\nexport type StorefrontProviderProps = {\n /** A ready client. Takes precedence over `config`. */\n client?: StorefrontClient\n /** Options to create the browser client (use a `pk_` token). */\n config?: StorefrontClientOptions\n /** Shop info loaded on the server (root loader). */\n shop?: Shop | null\n locale?: string\n currency?: string\n children?: ReactNode\n}\n\n/**\n * Makes the storefront client, shop, locale and currency available to the\n * tree. SSR-safe: creating the client does not touch `window`.\n */\nexport function StorefrontProvider({ client, config, shop = null, locale, currency, children }: StorefrontProviderProps) {\n const configKey = config ? `${config.baseUrl}|${config.token}|${config.locale ?? ''}|${config.customerToken ?? ''}` : ''\n const resolvedClient = useMemo(\n () => client ?? (config ? createStorefrontClient(config) : null),\n [client, configKey],\n )\n const value = useMemo<StorefrontContextValue>(\n () => ({\n client: resolvedClient,\n shop,\n locale: locale ?? config?.locale ?? shop?.locale ?? 'es-MX',\n currency: currency ?? shop?.currency_code ?? 'MXN',\n }),\n [resolvedClient, shop, locale, currency, config?.locale],\n )\n return <StorefrontContext.Provider value={value}>{children}</StorefrontContext.Provider>\n}\n\n/** Storefront context. Throws outside `<StorefrontProvider>`. */\nexport function useStorefront(): StorefrontContextValue {\n const ctx = useContext(StorefrontContext)\n if (!ctx) throw new Error('useStorefront must be used inside <StorefrontProvider>')\n return ctx\n}\n\n/** Storefront context or `null` outside a provider (for components that work standalone). */\nexport function useOptionalStorefront(): StorefrontContextValue | null {\n return useContext(StorefrontContext)\n}\n\n/** The client from context; throws when the provider has none. */\nexport function useStorefrontClient(): StorefrontClient {\n const { client } = useStorefront()\n if (!client) throw new Error('<StorefrontProvider> needs a `client` or `config` for browser-side calls')\n return client\n}\n","/** Default name of the cookie that holds the cart id. */\nexport const CART_COOKIE_NAME = 'sf_cart'\n\nexport type CartCookieOptions = {\n /** Cookie name (default `sf_cart`). */\n name?: string\n /** Lifetime in days (default 30). */\n maxAgeDays?: number\n path?: string\n domain?: string\n sameSite?: 'Lax' | 'Strict' | 'None'\n /** Defaults to true on https pages / when `sameSite` is `None`. */\n secure?: boolean\n}\n\n/**\n * Reads the cart id from a `Cookie` header. Use it in SSR loaders:\n * `getCartIdFromCookie(request.headers.get('Cookie'))`.\n */\nexport function getCartIdFromCookie(cookieHeader: string | null | undefined, name: string = CART_COOKIE_NAME): string | null {\n if (!cookieHeader) return null\n for (const part of cookieHeader.split(';')) {\n const eq = part.indexOf('=')\n if (eq < 0) continue\n if (part.slice(0, eq).trim() !== name) continue\n const raw = part.slice(eq + 1).trim().replace(/^\"(.*)\"$/, '$1')\n if (!raw) return null\n try {\n return decodeURIComponent(raw)\n } catch {\n return raw\n }\n }\n return null\n}\n\n/**\n * Serializes the cart cookie for a `Set-Cookie` header (SSR actions) or for\n * `document.cookie`. Pass `null` to clear it.\n */\nexport function serializeCartCookie(cartId: string | null, options: CartCookieOptions = {}): string {\n const name = options.name ?? CART_COOKIE_NAME\n const parts = [`${name}=${cartId ? encodeURIComponent(cartId) : ''}`]\n parts.push(`Path=${options.path ?? '/'}`)\n const maxAge = cartId ? Math.round((options.maxAgeDays ?? 30) * 86_400) : 0\n parts.push(`Max-Age=${maxAge}`)\n if (options.domain) parts.push(`Domain=${options.domain}`)\n const sameSite = options.sameSite ?? 'Lax'\n parts.push(`SameSite=${sameSite}`)\n if (options.secure ?? sameSite === 'None') parts.push('Secure')\n return parts.join('; ')\n}\n\n/** Browser-only: writes the cart cookie. No-op on the server. */\nexport function writeCartCookie(cartId: string | null, options: CartCookieOptions = {}): void {\n if (typeof document === 'undefined') return\n const secure = options.secure ?? (typeof location !== 'undefined' && location.protocol === 'https:')\n document.cookie = serializeCartCookie(cartId, { ...options, secure })\n}\n\n/** Browser-only: reads the cart cookie. `null` on the server. */\nexport function readCartCookie(name: string = CART_COOKIE_NAME): string | null {\n if (typeof document === 'undefined') return null\n return getCartIdFromCookie(document.cookie, name)\n}\n","import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport {\n isStorefrontError,\n type AddressInput,\n type Cart,\n type CartBuyerInput,\n type CartLine,\n type CartLineInput,\n type CartLineMerchandise,\n type CartLineUpdateInput,\n type DeliveryInput,\n type DeliveryOptions,\n type Money,\n type StorefrontClient,\n} from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\nimport { CART_COOKIE_NAME, readCartCookie, writeCartCookie, type CartCookieOptions } from './cookie.js'\n\nexport type CartLineAddInput = CartLineInput & {\n /** Variant data for an instant optimistic line (otherwise only the count updates until the server answers). */\n merchandise?: CartLineMerchandise\n}\n\nexport type CartStatus = 'idle' | 'loading' | 'updating'\n\nexport type CartContextValue = {\n cart: Cart | null\n cartId: string | null\n status: CartStatus\n /** Last mutation error (cleared on the next successful mutation). */\n error: Error | null\n totalQuantity: number\n /** Adds lines, creating the cart on first use. Optimistic. */\n addLines: (lines: CartLineAddInput[]) => Promise<Cart | null>\n /** Sets line quantities (`0` removes). Optimistic. */\n updateLines: (lines: CartLineUpdateInput[]) => Promise<Cart | null>\n /** Removes lines. Optimistic. */\n removeLines: (lineIds: string[]) => Promise<Cart | null>\n setDiscountCodes: (codes: string[]) => Promise<Cart | null>\n setBuyer: (buyer: CartBuyerInput) => Promise<Cart | null>\n setShippingAddress: (address: AddressInput) => Promise<Cart | null>\n setDelivery: (delivery: DeliveryInput) => Promise<Cart | null>\n deliveryOptions: () => Promise<DeliveryOptions | null>\n /** Reloads the cart from the API. */\n refresh: () => Promise<Cart | null>\n /** Forgets the cart (clears state and cookie), e.g. after checkout. */\n clear: () => void\n}\n\nconst CartContext = createContext<CartContextValue | null>(null)\n\nexport type CartProviderProps = {\n /** Cart loaded in the SSR loader (hydrates without a client fetch). */\n initialCart?: Cart | null\n /** Cart id known on the server when `initialCart` is not loaded. */\n cartId?: string | null\n /** Client override (defaults to the `StorefrontProvider` client). */\n client?: StorefrontClient\n /** Cookie settings for the persisted cart id (`sf_cart`). Pass `false` to disable the cookie. */\n cookie?: CartCookieOptions | false\n /** Currency for the optimistic placeholder cart (defaults to the provider currency). */\n currency?: string\n onError?: (error: Error) => void\n onCartChange?: (cart: Cart | null) => void\n children?: ReactNode\n}\n\ntype PendingOp = { id: number; apply: (cart: Cart | null) => Cart | null }\n\nconst toCents = (m: Money | null | undefined) => (m ? Math.round(Number.parseFloat(m.amount) * 100) : 0)\nconst money = (cents: number, currency: string): Money => ({ amount: (cents / 100).toFixed(2), currency_code: currency })\n\nfunction emptyCart(currency: string): Cart {\n const zero = money(0, currency)\n return {\n id: '',\n lines: [],\n total_quantity: 0,\n discount_codes: [],\n buyer: { email: null, phone: null, customer_id: null },\n shipping_address: null,\n delivery: { method: null, rate_id: null, branch_id: null },\n cost: { subtotal: zero, discount: zero, shipping: null, tax: null, total: zero, tax_included: true },\n updated_at: new Date(0).toISOString(),\n }\n}\n\nfunction withLines(cart: Cart, lines: CartLine[], totalQuantity?: number): Cart {\n const currency = cart.cost.subtotal.currency_code\n const subtotal = lines.reduce((sum, l) => sum + toCents(l.cost.total), 0)\n const total = Math.max(0, subtotal - toCents(cart.cost.discount) + toCents(cart.cost.shipping))\n return {\n ...cart,\n lines,\n total_quantity: totalQuantity ?? lines.reduce((sum, l) => sum + l.quantity, 0),\n cost: { ...cart.cost, subtotal: money(subtotal, currency), total: money(total, currency) },\n }\n}\n\nfunction lineWithQuantity(line: CartLine, quantity: number): CartLine {\n const unit = toCents(line.cost.unit)\n return { ...line, quantity, cost: { ...line.cost, total: money(unit * quantity, line.cost.unit.currency_code) } }\n}\n\n/** Pure optimistic reducers (exported for tests and custom carts). */\nexport const optimisticCart = {\n add(cart: Cart | null, input: CartLineAddInput[], currency: string): Cart {\n const base = cart ?? emptyCart(currency)\n let lines = base.lines.slice()\n let unknownQuantity = 0\n for (const l of input) {\n const idx = lines.findIndex((x) => x.merchandise.id === l.variant_id)\n if (idx >= 0) lines[idx] = lineWithQuantity(lines[idx]!, lines[idx]!.quantity + l.quantity)\n else if (l.merchandise) {\n const unit = l.merchandise.price\n lines.push({\n id: `optimistic:${l.variant_id}`,\n quantity: l.quantity,\n merchandise: l.merchandise,\n cost: { unit, compare_at_unit: l.merchandise.compare_at_price, total: money(toCents(unit) * l.quantity, unit.currency_code) },\n })\n } else unknownQuantity += l.quantity\n }\n const known = lines.reduce((sum, l) => sum + l.quantity, 0)\n return withLines(base, lines, known + unknownQuantity + (base.total_quantity - base.lines.reduce((s, l) => s + l.quantity, 0)))\n },\n update(cart: Cart | null, input: CartLineUpdateInput[]): Cart | null {\n if (!cart) return cart\n const byId = new Map(input.map((l) => [l.id, l.quantity]))\n const lines = cart.lines\n .map((l) => (byId.has(l.id) ? lineWithQuantity(l, byId.get(l.id)!) : l))\n .filter((l) => l.quantity > 0)\n return withLines(cart, lines)\n },\n remove(cart: Cart | null, lineIds: string[]): Cart | null {\n if (!cart) return cart\n return withLines(cart, cart.lines.filter((l) => !lineIds.includes(l.id)))\n },\n}\n\nconst isNotFound = (err: unknown) => isStorefrontError(err) && err.status === 404\n\n/**\n * Holds the cart and exposes optimistic mutations. Mutations run one at a\n * time in order; a failed one is rolled back without discarding the others.\n * The cart id is persisted in the `sf_cart` cookie (read it in loaders with\n * `getCartIdFromCookie`). No `window`/`document` access during render.\n */\nexport function CartProvider({\n initialCart = null,\n cartId: initialCartId = null,\n client: clientProp,\n cookie,\n currency: currencyProp,\n onError,\n onCartChange,\n children,\n}: CartProviderProps) {\n const sf = useOptionalStorefront()\n const client = clientProp ?? sf?.client ?? null\n const currency = currencyProp ?? initialCart?.cost.subtotal.currency_code ?? sf?.currency ?? 'MXN'\n const cookieOptions = cookie === false ? null : (cookie ?? {})\n\n const confirmedRef = useRef<Cart | null>(initialCart)\n const pendingRef = useRef<PendingOp[]>([])\n const idRef = useRef<string | null>(initialCart?.id ?? initialCartId ?? null)\n const queueRef = useRef<Promise<unknown>>(Promise.resolve())\n const seqRef = useRef(0)\n const callbacks = useRef({ onError, onCartChange })\n callbacks.current = { onError, onCartChange }\n\n const [cart, setCart] = useState<Cart | null>(initialCart)\n const [cartId, setCartId] = useState<string | null>(idRef.current)\n const [pending, setPending] = useState(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const render = useCallback(() => {\n const next = pendingRef.current.reduce<Cart | null>((acc, op) => op.apply(acc), confirmedRef.current)\n setCart(next)\n }, [])\n\n const persistId = useCallback(\n (id: string | null) => {\n if (idRef.current === id) return\n idRef.current = id\n setCartId(id)\n if (cookieOptions) writeCartCookie(id, cookieOptions)\n },\n // cookieOptions is a plain options bag; its identity is irrelevant\n [cookie === false, cookieOptions?.name],\n )\n\n const confirm = useCallback(\n (next: Cart | null) => {\n confirmedRef.current = next\n if (next) persistId(next.id)\n callbacks.current.onCartChange?.(next)\n },\n [persistId],\n )\n\n const requireClient = useCallback((): StorefrontClient => {\n if (!client) throw new Error('CartProvider needs a client: pass `client` or wrap it in <StorefrontProvider config|client>')\n return client\n }, [client])\n\n /** Queues a remote mutation with an optional optimistic layer. */\n const mutate = useCallback(\n <T,>(remote: (c: StorefrontClient) => Promise<T>, toCart: (r: T) => Cart | null, optimistic?: PendingOp['apply']): Promise<T | null> => {\n const op: PendingOp | null = optimistic ? { id: ++seqRef.current, apply: optimistic } : null\n if (op) {\n pendingRef.current = [...pendingRef.current, op]\n render()\n }\n setPending((n) => n + 1)\n const run = async (): Promise<T | null> => {\n try {\n const result = await remote(requireClient())\n const next = toCart(result)\n if (next) confirm(next)\n setError(null)\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n callbacks.current.onError?.(e)\n return null\n } finally {\n if (op) pendingRef.current = pendingRef.current.filter((p) => p !== op)\n render()\n setPending((n) => n - 1)\n }\n }\n const p = queueRef.current.then(run, run)\n queueRef.current = p\n return p\n },\n [confirm, render, requireClient],\n )\n\n const asCart = (c: Cart) => c\n\n // Hydrate from the cookie / id on the client when the server did not load the cart.\n useEffect(() => {\n if (confirmedRef.current) {\n if (cookieOptions && idRef.current) writeCartCookie(idRef.current, cookieOptions)\n return\n }\n const id = idRef.current ?? (cookieOptions ? readCartCookie(cookieOptions.name ?? CART_COOKIE_NAME) : null)\n if (!id || !client) return\n idRef.current = id\n setCartId(id)\n let cancelled = false\n setLoading(true)\n client.carts\n .get(id)\n .then((loaded) => {\n if (cancelled) return\n if (loaded) confirm(loaded)\n else persistId(null)\n render()\n })\n .catch((err: unknown) => {\n if (cancelled) return\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n callbacks.current.onError?.(e)\n })\n .finally(() => !cancelled && setLoading(false))\n return () => {\n cancelled = true\n }\n // Runs once on mount.\n }, [])\n\n const value = useMemo<CartContextValue>(() => {\n const withId = <T,>(fn: (c: StorefrontClient, id: string) => Promise<T>) => async (c: StorefrontClient) => {\n if (!idRef.current) throw new Error('No cart yet: add a line first')\n return fn(c, idRef.current)\n }\n return {\n cart,\n cartId,\n status: loading ? 'loading' : pending > 0 ? 'updating' : 'idle',\n error,\n totalQuantity: cart?.total_quantity ?? 0,\n addLines: (lines) => {\n const payload = lines.map(({ variant_id, quantity }) => ({ variant_id, quantity }))\n return mutate(\n async (c) => {\n if (!idRef.current) return c.carts.create({ lines: payload })\n try {\n return await c.carts.addLines(idRef.current, payload)\n } catch (err) {\n // Expired or unknown cart: start a new one.\n if (isNotFound(err)) return c.carts.create({ lines: payload })\n throw err\n }\n },\n asCart,\n (current) => optimisticCart.add(current, lines, currency),\n )\n },\n updateLines: (lines) => mutate(withId((c, id) => c.carts.updateLines(id, lines)), asCart, (current) => optimisticCart.update(current, lines)),\n removeLines: (lineIds) => mutate(withId((c, id) => c.carts.removeLines(id, lineIds)), asCart, (current) => optimisticCart.remove(current, lineIds)),\n setDiscountCodes: (codes) => mutate(withId((c, id) => c.carts.setDiscountCodes(id, codes)), asCart),\n setBuyer: (buyer) => mutate(withId((c, id) => c.carts.setBuyer(id, buyer)), asCart),\n setShippingAddress: (address) => mutate(withId((c, id) => c.carts.setShippingAddress(id, address)), asCart),\n setDelivery: (delivery) => mutate(withId((c, id) => c.carts.setDelivery(id, delivery)), asCart),\n deliveryOptions: () => mutate(withId((c, id) => c.carts.deliveryOptions(id)), () => null),\n refresh: () =>\n mutate(\n async (c) => (idRef.current ? c.carts.get(idRef.current) : null),\n (r) => {\n if (r === null) {\n confirmedRef.current = null\n persistId(null)\n }\n return r\n },\n ),\n clear: () => {\n confirmedRef.current = null\n pendingRef.current = []\n persistId(null)\n render()\n callbacks.current.onCartChange?.(null)\n },\n }\n }, [cart, cartId, loading, pending, error, mutate, currency, persistId, render])\n\n return <CartContext.Provider value={value}>{children}</CartContext.Provider>\n}\n\n/** Cart state and actions. Throws outside `<CartProvider>`. */\nexport function useCart(): CartContextValue {\n const ctx = useContext(CartContext)\n if (!ctx) throw new Error('useCart must be used inside <CartProvider>')\n return ctx\n}\n\n/** Cart context or `null` outside a provider. */\nexport function useOptionalCart(): CartContextValue | null {\n return useContext(CartContext)\n}\n","import { createElement, type ComponentPropsWithoutRef, type ElementType, type ReactNode } from 'react'\nimport { formatMoney, parseMoney, type FormatMoneyOptions, type Image as ImageData, type Money as MoneyData, type Product, type ProductVariant } from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\n\n// ---------------------------------------------------------------------------\n// Money\n// ---------------------------------------------------------------------------\n\nexport type MoneyProps<As extends ElementType = 'span'> = FormatMoneyOptions & {\n data: MoneyData\n /** Element to render (default `span`). */\n as?: As\n /** Overrides the provider locale. */\n locale?: string\n} & Omit<ComponentPropsWithoutRef<As>, 'children' | 'as'>\n\n/** Formats `Money` with the provider locale (or `locale`). */\nexport function Money<As extends ElementType = 'span'>({\n data,\n as,\n locale,\n withoutTrailingZeros,\n withoutCurrency,\n currencyDisplay,\n ...rest\n}: MoneyProps<As>) {\n const sf = useOptionalStorefront()\n const text = formatMoney(data, locale ?? sf?.locale, {\n ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}),\n ...(withoutCurrency !== undefined ? { withoutCurrency } : {}),\n ...(currencyDisplay !== undefined ? { currencyDisplay } : {}),\n })\n return createElement(as ?? 'span', rest, text)\n}\n\n// ---------------------------------------------------------------------------\n// Image\n// ---------------------------------------------------------------------------\n\nexport const DEFAULT_IMAGE_WIDTHS = [320, 480, 640, 768, 1024, 1280, 1600] as const\n\n/** Builds the URL for one srcset width. */\nexport type ImageLoader = (src: string, width: number, height?: number) => string\n\n/**\n * Default loader: adds `?width=<w>` (the convention of most image CDNs and of\n * the OPS image proxy). URLs that cannot be parsed are returned unchanged.\n */\nexport const defaultImageLoader: ImageLoader = (src, width, height) => {\n try {\n const isAbsolute = /^[a-z][a-z0-9+.-]*:/i.test(src)\n const url = new URL(src, 'http://relative.invalid')\n url.searchParams.set('width', String(width))\n if (height) url.searchParams.set('height', String(height))\n return isAbsolute ? url.toString() : url.pathname + url.search + url.hash\n } catch {\n return src\n }\n}\n\nexport type ImageProps = Omit<ComponentPropsWithoutRef<'img'>, 'src' | 'srcSet' | 'width' | 'height'> & {\n data: ImageData\n /** `sizes` attribute (default `100vw`). */\n sizes?: string\n /** Candidate widths for `srcset` (capped at the intrinsic width when known). */\n widths?: readonly number[]\n /** URL builder per width (default adds `?width=`). Pass `null` to disable srcset. */\n loader?: ImageLoader | null\n /** Above-the-fold image: eager loading and `fetchpriority=\"high\"`. */\n priority?: boolean\n /** Forces an aspect ratio, e.g. `1/1` or `4/3`, used for width/height and srcset heights. */\n aspectRatio?: string\n}\n\nfunction parseRatio(ratio: string | undefined): number | null {\n if (!ratio) return null\n const [w, h] = ratio.split(/[/:]/).map((n) => Number.parseFloat(n))\n return w && h ? w / h : null\n}\n\n/** Responsive `<img>` with `srcset`, lazy by default, intrinsic size to avoid layout shift. */\nexport function Image({\n data,\n sizes = '100vw',\n widths = DEFAULT_IMAGE_WIDTHS,\n loader = defaultImageLoader,\n priority = false,\n aspectRatio,\n alt,\n loading,\n decoding,\n ...rest\n}: ImageProps) {\n const ratio = parseRatio(aspectRatio) ?? (data.width && data.height ? data.width / data.height : null)\n let candidates = [...widths].sort((a, b) => a - b)\n if (data.width) {\n const capped = candidates.filter((w) => w <= data.width!)\n candidates = capped.length ? capped : [data.width]\n }\n const srcSet = loader\n ? candidates.map((w) => `${loader(data.url, w, ratio ? Math.round(w / ratio) : undefined)} ${w}w`).join(', ')\n : undefined\n const width = data.width ?? candidates[candidates.length - 1]\n const height = data.height ?? (ratio && width ? Math.round(width / ratio) : undefined)\n return (\n <img\n src={data.url}\n alt={alt ?? data.alt ?? ''}\n {...(srcSet ? { srcSet, sizes } : {})}\n {...(width ? { width } : {})}\n {...(height ? { height } : {})}\n loading={loading ?? (priority ? 'eager' : 'lazy')}\n decoding={decoding ?? (priority ? 'auto' : 'async')}\n {...(priority ? { fetchPriority: 'high' as const } : {})}\n {...rest}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// ProductPrice\n// ---------------------------------------------------------------------------\n\nconst VISUALLY_HIDDEN = {\n position: 'absolute',\n width: 1,\n height: 1,\n padding: 0,\n margin: -1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n} as const\n\nexport type ProductPriceProps = Omit<ComponentPropsWithoutRef<'div'>, 'children'> & {\n product?: Pick<Product, 'price_range' | 'compare_at_price_range'> | null\n variant?: Pick<ProductVariant, 'price' | 'compare_at_price'> | null\n /** Prefix shown when the product has a price range and no variant is selected (default `Desde`). */\n fromLabel?: ReactNode\n /** Accessible label for the compare-at price (default `Precio anterior`). */\n compareAtLabel?: string\n locale?: string\n withoutTrailingZeros?: boolean\n}\n\n/**\n * Price with optional compare-at (strikethrough). With a `variant` it shows\n * that variant; otherwise the product's minimum price (prefixed with\n * `fromLabel` when prices vary).\n */\nexport function ProductPrice({\n product,\n variant,\n fromLabel = 'Desde',\n compareAtLabel = 'Precio anterior',\n locale,\n withoutTrailingZeros,\n ...rest\n}: ProductPriceProps) {\n let price: MoneyData | null = null\n let compareAt: MoneyData | null = null\n let isRange = false\n if (variant) {\n price = variant.price\n compareAt = variant.compare_at_price\n } else if (product) {\n price = product.price_range.min\n compareAt = product.compare_at_price_range?.min ?? null\n isRange = product.price_range.min.amount !== product.price_range.max.amount\n }\n if (!price) return null\n const onSale = compareAt !== null && parseMoney(compareAt) > parseMoney(price)\n const opts = { ...(locale ? { locale } : {}), ...(withoutTrailingZeros !== undefined ? { withoutTrailingZeros } : {}) }\n return (\n <div data-on-sale={onSale || undefined} {...rest}>\n {isRange ? <span data-price-prefix=\"\">{fromLabel} </span> : null}\n <Money data={price} data-price=\"\" {...opts} />\n {onSale && compareAt ? (\n <>\n {' '}\n <s data-compare-at-price=\"\">\n <span style={VISUALLY_HIDDEN}>{compareAtLabel}: </span>\n <Money data={compareAt} {...opts} />\n </s>\n </>\n ) : null}\n </div>\n )\n}\n","import { Fragment, useCallback, useMemo, useRef, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react'\nimport { availabilityView, productAvailability, resolveAvailability, type Availability, type CartLineMerchandise, type Product, type ProductVariant } from '@asteby/storefront'\nimport { useCart } from './cart.js'\nimport { useOptionalStorefront } from './context.js'\n\nexport type ProductOptionValueState = {\n value: string\n /** Part of the current selection. */\n selected: boolean\n /** A variant with this value (and the other selected options) exists. */\n exists: boolean\n /** That variant is available for sale. */\n available: boolean\n /** The variant this value would select, if it exists. */\n variant: ProductVariant | null\n /** Availability of that variant (polyfilled for servers older than contract 1.1); with the other options not chosen yet, the best among matching variants. `null` when no variant matches. Feed it to `<VariantOptionState availability>`. */\n availability: Availability | null\n /** Query string (`?Talla=M&Color=Rojo`) selecting this value, preserving other params. */\n search: string\n}\n\nexport type ProductOptionState = { name: string; values: ProductOptionValueState[] }\n\nexport type ProductOptionsState = {\n options: ProductOptionState[]\n selectedOptions: Record<string, string>\n /** Variant matching every selected option, or `null` while incomplete. */\n selectedVariant: ProductVariant | null\n setOption: (name: string, value: string) => void\n}\n\nexport type UseProductOptionsConfig = {\n /** Current URL search params; option names are read as keys (`?Talla=M`), plus `variant=<id>`. */\n searchParams?: URLSearchParams | string | null\n /** Select the first available variant when nothing is in the URL (default true). */\n defaultToFirstAvailable?: boolean\n onChange?: (variant: ProductVariant | null, selectedOptions: Record<string, string>) => void\n}\n\ntype ProductLike = Pick<Product, 'options' | 'variants'> & { id?: string }\n\nfunction toParams(input: URLSearchParams | string | null | undefined): URLSearchParams {\n if (!input) return new URLSearchParams()\n return input instanceof URLSearchParams ? new URLSearchParams(input) : new URLSearchParams(input)\n}\n\nfunction optionsOf(variant: ProductVariant): Record<string, string> {\n return Object.fromEntries(variant.selected_options.map((o) => [o.name, o.value]))\n}\n\nfunction findVariant(product: ProductLike, selection: Record<string, string>): ProductVariant | null {\n if (product.options.length === 0) return product.variants[0] ?? null\n return (\n product.variants.find((v) => v.selected_options.length > 0 && v.selected_options.every((o) => selection[o.name] === o.value)) ?? null\n )\n}\n\nfunction initialSelection(product: ProductLike, params: URLSearchParams, defaultToFirstAvailable: boolean): Record<string, string> {\n const byId = params.get('variant')\n const fromId = byId ? product.variants.find((v) => v.id === byId) : undefined\n if (fromId) return optionsOf(fromId)\n const selection: Record<string, string> = {}\n for (const opt of product.options) {\n const v = params.get(opt.name)\n if (v !== null && opt.values.includes(v)) selection[opt.name] = v\n }\n if (Object.keys(selection).length === 0 && defaultToFirstAvailable) {\n const first = product.variants.find((v) => v.available_for_sale) ?? product.variants[0]\n return first ? optionsOf(first) : {}\n }\n return selection\n}\n\n/**\n * Option → values matrix with availability, the selected variant (from the\n * URL or local state) and links for each value. Pure React: works in SSR.\n */\nexport function useProductOptions(product: ProductLike, config: UseProductOptionsConfig = {}): ProductOptionsState {\n const { defaultToFirstAvailable = true, onChange } = config\n const params = useMemo(() => toParams(config.searchParams), [String(config.searchParams ?? '')])\n const sourceKey = `${product.id ?? ''}|${params.toString()}`\n const fromSource = useMemo(\n () => initialSelection(product, params, defaultToFirstAvailable),\n // product identity is keyed by id + params\n [sourceKey, defaultToFirstAvailable],\n )\n\n // Local selection overrides the URL until the URL (or product) changes.\n const [local, setLocal] = useState<{ key: string; selection: Record<string, string> } | null>(null)\n const selectedOptions = local && local.key === sourceKey ? local.selection : fromSource\n\n const onChangeRef = useRef(onChange)\n onChangeRef.current = onChange\n\n const setOption = useCallback(\n (name: string, value: string) => {\n const next = { ...selectedOptions, [name]: value }\n setLocal({ key: sourceKey, selection: next })\n onChangeRef.current?.(findVariant(product, next), next)\n },\n [selectedOptions, sourceKey, product],\n )\n\n const selectedVariant = useMemo(() => findVariant(product, selectedOptions), [product, selectedOptions])\n\n const options = useMemo<ProductOptionState[]>(\n () =>\n product.options.map((opt) => ({\n name: opt.name,\n values: opt.values.map((value) => {\n const candidate = { ...selectedOptions, [opt.name]: value }\n const exact = findVariant(product, candidate)\n // When other options are not chosen yet, availability = any available variant with this value.\n const loose = product.variants.filter((v) => v.selected_options.some((o) => o.name === opt.name && o.value === value))\n const search = new URLSearchParams(params)\n search.delete('variant')\n for (const [k, v] of Object.entries(candidate)) search.set(k, v)\n return {\n value,\n selected: selectedOptions[opt.name] === value,\n exists: exact ? true : loose.length > 0 && Object.keys(selectedOptions).length < product.options.length,\n available: exact ? exact.available_for_sale : Object.keys(selectedOptions).length < product.options.length && loose.some((v) => v.available_for_sale),\n variant: exact,\n availability: exact ? resolveAvailability(exact) : loose.length ? productAvailability({ variants: loose, available_for_sale: loose.some((v) => v.available_for_sale) }) : null,\n search: `?${search.toString()}`,\n }\n }),\n })),\n [product, selectedOptions, params],\n )\n\n return { options, selectedOptions, selectedVariant, setOption }\n}\n\nexport type VariantSelectorRenderProps = {\n option: ProductOptionState\n selectedVariant: ProductVariant | null\n selectedOptions: Record<string, string>\n setOption: (name: string, value: string) => void\n}\n\nexport type VariantSelectorProps = UseProductOptionsConfig & {\n product: ProductLike\n /** Called once per option; render the buttons/links for `option.values`. */\n children: (props: VariantSelectorRenderProps) => ReactNode\n}\n\n/**\n * Render-prop variant picker. Example:\n *\n * <VariantSelector product={product} searchParams={searchParams}>\n * {({ option }) => (\n * <fieldset>\n * <legend>{option.name}</legend>\n * {option.values.map((v) => (\n * <Link key={v.value} to={v.search} replace preventScrollReset aria-current={v.selected}\n * aria-disabled={!v.available}>{v.value}</Link>\n * ))}\n * </fieldset>\n * )}\n * </VariantSelector>\n */\nexport function VariantSelector({ product, children, ...config }: VariantSelectorProps) {\n const state = useProductOptions(product, config)\n return (\n <>\n {state.options.map((option) => (\n <Fragment key={option.name}>\n {children({ option, selectedVariant: state.selectedVariant, selectedOptions: state.selectedOptions, setOption: state.setOption })}\n </Fragment>\n ))}\n </>\n )\n}\n\n/** Builds the optimistic cart-line merchandise for a product variant. */\nexport function toMerchandise(product: Pick<Product, 'handle' | 'title' | 'featured_image'>, variant: ProductVariant): CartLineMerchandise {\n return { ...variant, product: { handle: product.handle, title: product.title, featured_image: product.featured_image } }\n}\n\nexport type AddToCartButtonProps = Omit<ComponentPropsWithoutRef<'button'>, 'onClick'> & {\n variantId: string | null | undefined\n quantity?: number\n /**\n * Availability of the variant (server `availability`, or the variant itself to polyfill). When given: the label\n * comes from the server state (\"Agotado\", \"Pedir bajo pedido\"...) unless `children` is set, the button is\n * disabled when it cannot be bought, and the quantity is capped at `max_per_order`.\n */\n availability?: Availability | null\n /** Variant to derive the availability from when the server did not send it. */\n availabilitySource?: ProductVariant | null\n /** Polyfill only: shop-level low-stock threshold. */\n lowStockThreshold?: number | null\n /** BCP 47; defaults to the provider locale. */\n locale?: string\n /** Variant data for an instant optimistic cart line. */\n merchandise?: CartLineMerchandise\n onAdded?: () => void\n onClick?: ComponentPropsWithoutRef<'button'>['onClick']\n}\n\n/** Adds a variant to the cart via `useCart().addLines`. Disabled without a variant or while adding. */\nexport function AddToCartButton({\n variantId,\n quantity = 1,\n availability,\n availabilitySource,\n lowStockThreshold,\n locale,\n merchandise,\n onAdded,\n onClick,\n disabled,\n children,\n type = 'button',\n ...rest\n}: AddToCartButtonProps) {\n const cart = useCart()\n const sf = useOptionalStorefront()\n const resolved = availability ?? (availabilitySource ? resolveAvailability(availabilitySource, { lowStockThreshold: lowStockThreshold ?? null }) : null)\n const view = resolved ? availabilityView(resolved, locale ?? sf?.locale ?? 'es-MX') : null\n const blocked = view ? !view.ctaEnabled : false\n const qty = view?.maxPerOrder != null ? Math.min(quantity, view.maxPerOrder) : quantity\n const label = children ?? view?.ctaLabel ?? 'Agregar al carrito'\n const [adding, setAdding] = useState(false)\n return (\n <button\n type={type}\n disabled={disabled || !variantId || adding || blocked}\n data-availability={view?.status}\n aria-busy={adding || undefined}\n data-adding={adding || undefined}\n onClick={async (event) => {\n onClick?.(event)\n if (event.defaultPrevented || !variantId) return\n setAdding(true)\n try {\n const result = await cart.addLines([{ variant_id: variantId, quantity: qty, ...(merchandise ? { merchandise } : {}) }])\n if (result) onAdded?.()\n } finally {\n setAdding(false)\n }\n }}\n {...rest}\n >\n {label}\n </button>\n )\n}\n","import {\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type FormEvent,\n type ReactNode,\n} from 'react'\nimport {\n availabilityMessages,\n availabilityView,\n cartLineProblemView,\n formatAvailabilityMessage,\n isStorefrontError,\n resolveAvailability,\n type Availability,\n type AvailabilityMessages,\n type AvailabilityView,\n type Cart,\n type CartLine,\n type CartLineProblem as CartLineProblemData,\n type InsufficientStockLine,\n type ResolveAvailabilityOptions,\n type StorefrontClient,\n} from '@asteby/storefront'\nimport { useOptionalCart } from './cart.js'\nimport { useOptionalStorefront } from './context.js'\n\n// Headless: no styles and no class names; state is exposed through `data-*`.\n// The server decides the state; every text comes from `availabilityView` /\n// `availabilityMessages` (es/en by key, overridable per key with `messages`).\n\nconst SR_ONLY: CSSProperties = {\n position: 'absolute',\n width: 1,\n height: 1,\n margin: -1,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n whiteSpace: 'nowrap',\n border: 0,\n}\n\n/** Visually hidden text for screen readers. */\nexport function SrOnly({ children }: { children: ReactNode }) {\n return <span style={SR_ONLY}>{children}</span>\n}\n\ntype AvailabilitySource = Parameters<typeof resolveAvailability>[0]\n\nexport type AvailabilityInput = {\n /** Availability sent by the server. */\n availability?: Availability | null\n /** Variant or product: used when `availability` is absent (polyfill for servers older than contract 1.1). */\n source?: AvailabilitySource | null\n /** Polyfill only: shop-level low-stock threshold (never hard-coded here). */\n lowStockThreshold?: number | null\n /** BCP 47; defaults to the provider locale, then `es-MX`. */\n locale?: string\n /** Per-key text overrides. */\n messages?: Partial<AvailabilityMessages>\n}\n\nfunction useLocale(locale: string | undefined): string {\n const sf = useOptionalStorefront()\n return locale ?? sf?.locale ?? 'es-MX'\n}\n\nfunction pickAvailability({ availability, source, lowStockThreshold }: AvailabilityInput): Availability | null {\n const opts: ResolveAvailabilityOptions = { lowStockThreshold: lowStockThreshold ?? null }\n if (availability) return availability\n return source ? resolveAvailability(source, opts) : null\n}\n\n/** `AvailabilityView` for a server `availability` or a variant/product (polyfilled). `null` when nothing is given. */\nexport function useAvailability(input: AvailabilityInput): AvailabilityView | null {\n const locale = useLocale(input.locale)\n const a = pickAvailability(input)\n return useMemo(\n () => (a ? availabilityView(a, locale, { messages: input.messages ?? null }) : null),\n // `a` is rebuilt from props each render; key by its content\n [JSON.stringify(a), locale, input.messages],\n )\n}\n\n// ---------------------------------------------------------------------------\n// AvailabilityBadge\n// ---------------------------------------------------------------------------\n\nexport type AvailabilityBadgeProps = AvailabilityInput & {\n /**\n * `card` (listing): renders `null` for plain `in_stock` so cards are not saturated.\n * `detail` (product page): always renders, with the ETA and the order cap.\n */\n placement?: 'card' | 'detail'\n /** Announce changes (e.g. after the client refreshes the stock): `role=\"status\"`. */\n live?: boolean\n} & Omit<ComponentPropsWithoutRef<'span'>, 'children'>\n\n/**\n * Availability label. `data-availability` is the status and `data-tone` the tone, so a\n * card can dim its image with CSS (`[data-availability=out_of_stock]`).\n */\nexport function AvailabilityBadge({\n availability, source, lowStockThreshold, locale, messages, placement = 'detail', live, ...rest\n}: AvailabilityBadgeProps) {\n const view = useAvailability({ availability, source, lowStockThreshold, locale, messages })\n const loc = useLocale(locale)\n if (!view) return null\n if (placement === 'card' && !view.showOnCard) return null\n const m = availabilityMessages(loc, messages)\n return (\n <span\n data-availability={view.status}\n data-tone={view.tone}\n data-placement={placement}\n {...(live ? { role: 'status' } : {})}\n {...rest}\n >\n <span aria-hidden={view.srText !== view.label ? true : undefined}>{view.label}</span>\n {view.srText !== view.label && <SrOnly>{view.srText}</SrOnly>}\n {placement === 'detail' && view.sublabel && <> <span data-availability-note=\"eta\">{view.sublabel}</span></>}\n {placement === 'detail' && view.maxPerOrder !== null && view.status !== 'out_of_stock' && (\n <> <span data-availability-note=\"max\">{formatAvailabilityMessage(m.max_per_order, { n: view.maxPerOrder })}</span></>\n )}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// VariantOptionState\n// ---------------------------------------------------------------------------\n\nexport type VariantOptionStateProps = AvailabilityInput & {\n /** The option text (e.g. the flavor). */\n children: ReactNode\n} & Omit<ComponentPropsWithoutRef<'span'>, 'children'>\n\n/**\n * Content for one option of a flavor/variant selector. A sold-out option is struck through\n * (`<s>`) and announced as \"agotado\" to screen readers; it stays selectable so the buyer can\n * see it and subscribe. Backorder / preorder options get a visible tag. Plain in-stock: just the text.\n * Without any availability it renders `children` untouched.\n */\nexport function VariantOptionState({ children, availability, source, lowStockThreshold, locale, messages, ...rest }: VariantOptionStateProps) {\n const a = pickAvailability({ availability, source, lowStockThreshold })\n const loc = useLocale(locale)\n if (!a) return <span {...rest}>{children}</span>\n const m = availabilityMessages(loc, messages)\n const status = availabilityView(a, loc, { messages: messages ?? null }).status\n if (status === 'out_of_stock') {\n return (\n <span data-availability={status} {...rest}>\n <s>{children}</s>\n <SrOnly> ({m['option.sold_out']})</SrOnly>\n </span>\n )\n }\n if (status === 'backorder' || status === 'preorder') {\n return (\n <span data-availability={status} {...rest}>\n {children} <span data-availability-tag>({m[status === 'backorder' ? 'option.backorder' : 'option.preorder']})</span>\n </span>\n )\n }\n return (\n <span data-availability={status} {...rest}>\n {children}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// RestockNotifyForm (\"Avísame cuando vuelva\")\n// ---------------------------------------------------------------------------\n\nexport type RestockNotifyFormProps = AvailabilityInput & {\n sku: string\n /** Market (country) of the buyer, if the shop has several. */\n market?: string\n /** Offer a phone / WhatsApp field next to the email. Default false (email only). */\n allowPhone?: boolean\n /**\n * Destination of the native POST. Without JavaScript the browser posts `sku`, `email`, `phone`, `locale`,\n * `market` and `consent` there, so the shop's own route can call `client.restock.subscribe`. Default: the current page.\n */\n action?: string\n /** Client override (defaults to the `StorefrontProvider` client). */\n client?: StorefrontClient\n /** With JavaScript the form submits through the SDK; set `false` to always post natively. */\n enhance?: boolean\n onSubscribed?: () => void\n onError?: (error: unknown) => void\n} & Omit<ComponentPropsWithoutRef<'form'>, 'action' | 'method' | 'onSubmit' | 'children'>\n\n/**\n * Subscription form. Renders `null` unless the server says `notify_available` and the state is\n * `out_of_stock`. Works without JavaScript (native POST); with it, submits via the SDK and shows\n * the result in place (`role=\"status\"` / `role=\"alert\"`).\n */\nexport function RestockNotifyForm({\n sku, market, allowPhone = false, action, client: clientProp, enhance = true, onSubscribed, onError,\n availability, source, lowStockThreshold, locale, messages, ...rest\n}: RestockNotifyFormProps) {\n const sf = useOptionalStorefront()\n const view = useAvailability({ availability, source, lowStockThreshold, locale, messages })\n const loc = useLocale(locale)\n const id = useId()\n const [state, setState] = useState<'idle' | 'sending' | 'done' | 'error'>('idle')\n if (!view?.showNotify) return null\n const m = availabilityMessages(loc, messages)\n const client = clientProp ?? sf?.client ?? null\n\n if (state === 'done') {\n return (\n <p role=\"status\" data-restock=\"done\">\n {m['notify.done']}\n </p>\n )\n }\n\n const submit = enhance && client\n ? (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n const form = new FormData(e.currentTarget)\n const email = String(form.get('email') ?? '').trim()\n const phone = String(form.get('phone') ?? '').trim()\n if (!email && !phone) {\n setState('error')\n return\n }\n setState('sending')\n client.restock\n .subscribe({ sku, locale: loc, consent: true, ...(email ? { email } : {}), ...(phone ? { phone } : {}), ...(market ? { market } : {}) })\n .then(() => {\n setState('done')\n onSubscribed?.()\n })\n .catch((err: unknown) => {\n setState('error')\n onError?.(err)\n })\n }\n : undefined\n\n return (\n <form method=\"post\" {...(action !== undefined ? { action } : {})} {...rest} onSubmit={submit} data-restock={state}>\n <fieldset>\n <legend>{m['notify.title']}</legend>\n <input type=\"hidden\" name=\"sku\" value={sku} />\n <input type=\"hidden\" name=\"locale\" value={loc} />\n {market && <input type=\"hidden\" name=\"market\" value={market} />}\n <p>\n <label htmlFor={`${id}-email`}>{m['notify.email']}</label>{' '}\n <input id={`${id}-email`} name=\"email\" type=\"email\" autoComplete=\"email\" required={!allowPhone} />\n </p>\n {allowPhone && (\n <p>\n <label htmlFor={`${id}-phone`}>{m['notify.phone']}</label>{' '}\n <input id={`${id}-phone`} name=\"phone\" type=\"tel\" autoComplete=\"tel\" />\n </p>\n )}\n <p>\n <input id={`${id}-consent`} name=\"consent\" type=\"checkbox\" value=\"true\" required />{' '}\n <label htmlFor={`${id}-consent`}>{m['notify.consent']}</label>\n </p>\n <button type=\"submit\" disabled={state === 'sending'} aria-busy={state === 'sending' || undefined}>\n {m['notify.submit']}\n </button>\n {state === 'error' && <p role=\"alert\">{m['notify.error']}</p>}\n </fieldset>\n </form>\n )\n}\n\n// ---------------------------------------------------------------------------\n// CartLineProblem\n// ---------------------------------------------------------------------------\n\nexport type CartLineProblemProps = {\n /** The cart line; its `problem` is shown. Renders `null` when there is none. */\n line: Pick<CartLine, 'id' | 'quantity'> & { problem?: CartLineProblemData | null }\n locale?: string\n messages?: Partial<AvailabilityMessages>\n /** Defaults to `useCart().updateLines` when inside a `CartProvider`. */\n onAdjust?: (lineId: string, quantity: number) => void | Promise<unknown>\n /** Defaults to `useCart().removeLines` when inside a `CartProvider`. */\n onRemove?: (lineId: string) => void | Promise<unknown>\n} & Omit<ComponentPropsWithoutRef<'div'>, 'children'>\n\n/**\n * Problem of one cart line, shown as soon as the cart loads (before checkout): \"Ya no hay existencias\" or\n * \"Solo puedes llevar N\", with \"Ajustar a N\" (only when the server lets the number be seen) and \"Quitar\".\n */\nexport function CartLineProblem({ line, locale, messages, onAdjust, onRemove, ...rest }: CartLineProblemProps) {\n const cart = useOptionalCart()\n const loc = useLocale(locale)\n if (!line.problem) return null\n const view = cartLineProblemView(line.problem, loc, { messages: messages ?? null, lineQuantity: line.quantity })\n const adjust = onAdjust ?? (cart ? (id: string, q: number) => cart.updateLines([{ id, quantity: q }]) : undefined)\n const remove = onRemove ?? (cart ? (id: string) => cart.removeLines([id]) : undefined)\n return (\n <div data-cart-line-problem={view.code} {...rest}>\n <p>{view.message}</p>\n {view.adjustTo !== null && adjust && (\n <button type=\"button\" onClick={() => void adjust(line.id, view.adjustTo!)}>\n {view.adjustLabel}\n </button>\n )}\n {remove && (\n <button type=\"button\" onClick={() => void remove(line.id)}>\n {view.removeLabel}\n </button>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// StockConflictAlert (recoverable 409 insufficient_stock)\n// ---------------------------------------------------------------------------\n\nexport type StockConflictAlertProps = {\n /** Error to inspect. Defaults to `useCart().error`. Renders `null` unless it is a `409 insufficient_stock`. */\n error?: unknown\n /** Cart used to name the affected lines. Defaults to `useCart().cart`. */\n cart?: Cart | null\n locale?: string\n messages?: Partial<AvailabilityMessages>\n onAdjust?: (lineId: string, quantity: number) => void | Promise<unknown>\n onRemove?: (lineId: string) => void | Promise<unknown>\n onDismiss?: () => void\n /** Move focus to the alert when it appears (default true). */\n autoFocus?: boolean\n} & Omit<ComponentPropsWithoutRef<'div'>, 'children' | 'role' | 'tabIndex'>\n\n/**\n * Recoverable stock conflict. The cart and the form data are NOT touched: it shows our own text (never the raw\n * `error.message`), the affected lines with \"Ajustar a N\" / \"Quitar\", and takes focus (`role=\"alert\"`) without\n * moving the page. Drop it above the checkout form: `<StockConflictAlert />` reads the error from the cart.\n */\nexport function StockConflictAlert({\n error: errorProp, cart: cartProp, locale, messages, onAdjust, onRemove, onDismiss, autoFocus = true, ...rest\n}: StockConflictAlertProps) {\n const cartCtx = useOptionalCart()\n const loc = useLocale(locale)\n const ref = useRef<HTMLDivElement>(null)\n const error = errorProp !== undefined ? errorProp : (cartCtx?.error ?? null)\n const cart = cartProp !== undefined ? cartProp : (cartCtx?.cart ?? null)\n const active = isStorefrontError(error) && error.code === 'insufficient_stock'\n useEffect(() => {\n if (active && autoFocus) ref.current?.focus({ preventScroll: true })\n }, [active, error, autoFocus])\n if (!active) return null\n const m = availabilityMessages(loc, messages)\n const lines: InsufficientStockLine[] = error.stockLines\n const adjust = onAdjust ?? (cartCtx ? (id: string, q: number) => cartCtx.updateLines([{ id, quantity: q }]) : undefined)\n const remove = onRemove ?? (cartCtx ? (id: string) => cartCtx.removeLines([id]) : undefined)\n return (\n <div ref={ref} role=\"alert\" tabIndex={-1} data-stock-conflict {...rest}>\n <p>\n <strong>{m['conflict.title']}</strong>\n </p>\n <p>{m['conflict.body']}</p>\n {lines.length > 0 && (\n <ul>\n {lines.map((l) => {\n const cartLine = cart?.lines.find((x) => (l.line_id ? x.id === l.line_id : x.merchandise.sku === l.sku))\n const lineId = l.line_id ?? cartLine?.id ?? null\n const view = cartLineProblemView(l, loc, { messages: messages ?? null, ...(cartLine ? { lineQuantity: cartLine.quantity } : {}) })\n return (\n <li key={`${l.sku}:${l.line_id ?? ''}`} data-cart-line-problem={view.code}>\n <span>{cartLine ? `${cartLine.merchandise.product.title}${cartLine.merchandise.title ? ` (${cartLine.merchandise.title})` : ''}` : l.sku}</span>\n {': '}\n <span>{view.message}</span>\n {lineId && view.adjustTo !== null && adjust && (\n <>\n {' '}\n <button type=\"button\" onClick={() => void adjust(lineId, view.adjustTo!)}>\n {view.adjustLabel}\n </button>\n </>\n )}\n {lineId && remove && (\n <>\n {' '}\n <button type=\"button\" onClick={() => void remove(lineId)}>\n {view.removeLabel}\n </button>\n </>\n )}\n </li>\n )\n })}\n </ul>\n )}\n {onDismiss && (\n <button type=\"button\" onClick={onDismiss}>\n {m['conflict.dismiss']}\n </button>\n )}\n </div>\n )\n}\n","/**\n * SEO helpers: pure functions returning meta descriptors (React Router v7\n * `meta` export shape) and schema.org JSON-LD objects (`<JsonLd>` renders them).\n * Nothing here touches the DOM, so it is safe in loaders and SSR.\n */\nimport { productAvailability, resolveAvailability, schemaAvailability, type Collection, type Image, type Product, type ResolveAvailabilityOptions, type SEO, type Shop } from '@asteby/storefront'\nimport { isValidPoint, toSchemaOpeningHours, type OpeningHours } from '@asteby/storefront/geo'\n\n/** Same shape as React Router's `MetaDescriptor`. */\nexport type MetaDescriptor =\n | { title: string }\n | { name: string; content: string }\n | { property: string; content: string }\n | { tagName: 'link'; rel: string; href: string; [attr: string]: string }\n | { 'script:ld+json': JsonLdObject | JsonLdObject[] }\n\nexport type JsonLdObject = { '@context'?: string; '@type': string | string[]; [key: string]: unknown }\n\nexport type SeoMetaInput = {\n title?: string | null\n description?: string | null\n /** Canonical absolute URL. */\n url?: string | null\n image?: Image | string | null\n /** `og:type` (default `website`). */\n type?: string\n siteName?: string | null\n locale?: string | null\n noindex?: boolean\n /** Appended to the title as `Title | Suffix` unless already present. */\n titleSuffix?: string | null\n}\n\nconst clean = (s: string | null | undefined, max?: number): string | undefined => {\n if (!s) return undefined\n const text = s.replace(/<[^>]*>/g, ' ').replace(/\\s+/g, ' ').trim()\n if (!text) return undefined\n return max && text.length > max ? text.slice(0, max - 1).trimEnd() + '…' : text\n}\n\n/** Generic title/description/canonical/Open Graph/Twitter descriptors. */\nexport function seoMeta(input: SeoMetaInput): MetaDescriptor[] {\n const out: MetaDescriptor[] = []\n let title = clean(input.title)\n if (title && input.titleSuffix && !title.includes(input.titleSuffix)) title = `${title} | ${input.titleSuffix}`\n const description = clean(input.description, 160)\n const image = typeof input.image === 'string' ? { url: input.image, alt: null } : (input.image ?? null)\n if (title) out.push({ title }, { property: 'og:title', content: title }, { name: 'twitter:title', content: title })\n if (description) {\n out.push({ name: 'description', content: description }, { property: 'og:description', content: description }, { name: 'twitter:description', content: description })\n }\n if (input.url) out.push({ tagName: 'link', rel: 'canonical', href: input.url }, { property: 'og:url', content: input.url })\n out.push({ property: 'og:type', content: input.type ?? 'website' })\n if (input.siteName) out.push({ property: 'og:site_name', content: input.siteName })\n if (input.locale) out.push({ property: 'og:locale', content: input.locale.replace('-', '_') })\n if (image) {\n out.push({ property: 'og:image', content: image.url })\n if (image.width) out.push({ property: 'og:image:width', content: String(image.width) })\n if (image.height) out.push({ property: 'og:image:height', content: String(image.height) })\n if (image.alt) out.push({ property: 'og:image:alt', content: image.alt })\n }\n out.push({ name: 'twitter:card', content: image ? 'summary_large_image' : 'summary' })\n if (input.noindex) out.push({ name: 'robots', content: 'noindex, nofollow' })\n return out\n}\n\nfunction seoOf(seo: SEO, fallbackTitle: string, fallbackDescription: string | null | undefined) {\n return { title: seo.title ?? fallbackTitle, description: seo.description ?? fallbackDescription ?? null }\n}\n\n/** Product page descriptors (`og:type=product` and price tags). */\nconst OG_AVAILABILITY = { in_stock: 'in stock', low_stock: 'in stock', out_of_stock: 'out of stock', backorder: 'backorder', preorder: 'preorder' } as const\n\nexport function productMeta(product: Product, shop: Pick<Shop, 'name' | 'locale'> | null, url: string, options: ResolveAvailabilityOptions = {}): MetaDescriptor[] {\n const { title, description } = seoOf(product.seo, product.title, product.description)\n const meta = seoMeta({\n title,\n description,\n url,\n image: product.featured_image,\n type: 'product',\n siteName: shop?.name ?? null,\n locale: shop?.locale ?? null,\n titleSuffix: shop?.name ?? null,\n })\n meta.push(\n { property: 'product:price:amount', content: product.price_range.min.amount },\n { property: 'product:price:currency', content: product.price_range.min.currency_code },\n { property: 'product:availability', content: OG_AVAILABILITY[productAvailability(product, options).status] ?? 'out of stock' },\n )\n if (product.vendor) meta.push({ property: 'product:brand', content: product.vendor })\n return meta\n}\n\n/** Collection page descriptors. */\nexport function collectionMeta(collection: Collection, shop: Pick<Shop, 'name' | 'locale'> | null, url: string): MetaDescriptor[] {\n const { title, description } = seoOf(collection.seo, collection.title, collection.description)\n return seoMeta({ title, description, url, image: collection.image, siteName: shop?.name ?? null, locale: shop?.locale ?? null, titleSuffix: shop?.name ?? null })\n}\n\n// ---------------------------------------------------------------------------\n// JSON-LD\n// ---------------------------------------------------------------------------\n\nconst CONTEXT = 'https://schema.org'\n\nfunction shopUrl(shop: Pick<Shop, 'domain'>, fallback?: string): string | undefined {\n if (shop.domain) return /^https?:\\/\\//.test(shop.domain) ? shop.domain : `https://${shop.domain}`\n if (fallback) {\n try {\n return new URL(fallback).origin\n } catch {\n return undefined\n }\n }\n return undefined\n}\n\nfunction compact<T extends Record<string, unknown>>(obj: T): T {\n for (const k of Object.keys(obj)) {\n const v = obj[k]\n if (v === undefined || v === null || v === '' || (Array.isArray(v) && v.length === 0)) delete obj[k]\n }\n return obj\n}\n\nfunction withVariant(url: string, variantId: string): string {\n try {\n const u = new URL(url)\n u.searchParams.set('variant', variantId)\n return u.toString()\n } catch {\n return `${url}${url.includes('?') ? '&' : '?'}variant=${encodeURIComponent(variantId)}`\n }\n}\n\n/** schema.org `Product` with one `Offer` per variant. */\nexport function productJsonLd(product: Product, shop: Pick<Shop, 'name' | 'domain'> | null, url: string, options: ResolveAvailabilityOptions = {}): JsonLdObject {\n const images = product.images.length ? product.images.map((i) => i.url) : product.featured_image ? [product.featured_image.url] : []\n const offers = product.variants.map((v) => {\n // schema.org availability comes from the server state; the quantity is never published.\n const availability = resolveAvailability(v, options)\n return compact({\n '@type': 'Offer',\n sku: v.sku,\n gtin: v.barcode ?? undefined,\n name: product.variants.length > 1 ? `${product.title} - ${v.title}` : undefined,\n price: v.price.amount,\n priceCurrency: v.price.currency_code,\n availability: schemaAvailability(availability.status),\n availabilityStarts: availability.status === 'preorder' ? (availability.preorder_release_at ?? undefined) : undefined,\n itemCondition: 'https://schema.org/NewCondition',\n url: product.variants.length > 1 ? withVariant(url, v.id) : url,\n seller: shop ? { '@type': 'Organization', name: shop.name } : undefined,\n })\n })\n const additionalProperty = Object.entries(product.attributes).map(([name, value]) => ({ '@type': 'PropertyValue', name, value }))\n return compact({\n '@context': CONTEXT,\n '@type': 'Product',\n '@id': `${url}#product`,\n name: product.title,\n description: clean(product.description) ?? undefined,\n url,\n image: images,\n sku: product.variants.length === 1 ? product.variants[0]!.sku : undefined,\n brand: product.vendor ? { '@type': 'Brand', name: product.vendor } : undefined,\n category: product.category?.title ?? product.product_type ?? undefined,\n additionalProperty,\n offers: offers.length === 1 ? offers[0] : offers,\n })\n}\n\n/** schema.org `Organization` for the shop (logo, contact, url). */\nexport function organizationJsonLd(shop: Shop, url?: string): JsonLdObject {\n const site = shopUrl(shop, url)\n const contactPoint = shop.contact.email || shop.contact.phone\n ? [compact({ '@type': 'ContactPoint', contactType: 'customer service', email: shop.contact.email ?? undefined, telephone: shop.contact.phone ?? undefined })]\n : []\n return compact({\n '@context': CONTEXT,\n '@type': 'Organization',\n '@id': site ? `${site}#organization` : undefined,\n name: shop.name,\n description: shop.description ?? undefined,\n url: site,\n logo: shop.logo?.url,\n email: shop.contact.email ?? undefined,\n telephone: shop.contact.phone ?? undefined,\n contactPoint,\n })\n}\n\nexport type LocalBusinessOptions = {\n /** schema.org type (default `Store`), e.g. `AutoPartsStore`, `ClothingStore`. */\n type?: string\n /** Shop URL fallback when `shop.domain` is empty. */\n url?: string\n priceRange?: string\n}\n\nconst SCHEMA_HOURS = /^(Mo|Tu|We|Th|Fr|Sa|Su)(-(Mo|Tu|We|Th|Fr|Sa|Su))?( \\d{2}:\\d{2}-\\d{2}:\\d{2})?$/\n\n/**\n * schema.org `openingHours` values from structured hours or a legacy string.\n * A string is accepted only if EVERY comma-separated token is strict schema.org\n * syntax (`Mo-Fr 09:00-19:00`); free text such as `Lun-Sáb 8:00 a 18:00` yields\n * `undefined` so no invalid markup is ever emitted.\n */\nexport function openingHoursJsonLd(hours: OpeningHours | string | null | undefined): string[] | undefined {\n if (!hours) return undefined\n if (typeof hours !== 'string') {\n const list = hours.weekly ? toSchemaOpeningHours(hours) : []\n return list.length ? list : undefined\n }\n const tokens = hours.split(',').map((t) => t.trim())\n return tokens.length && tokens.every((t) => SCHEMA_HOURS.test(t)) ? tokens : undefined\n}\n\n/**\n * One schema.org `LocalBusiness` (default `Store`) per shop branch. Hours come\n * from `opening_hours` when present, else from the legacy `hours` string.\n */\nexport function localBusinessJsonLd(shop: Shop, options: LocalBusinessOptions = {}): JsonLdObject[] {\n const site = shopUrl(shop, options.url)\n return shop.branches.map((b) =>\n compact({\n '@context': CONTEXT,\n '@type': options.type ?? 'Store',\n '@id': site ? `${site}#branch-${b.id}` : undefined,\n name: `${shop.name} - ${b.name}`,\n url: site,\n image: shop.logo?.url,\n telephone: b.phone ?? shop.contact.phone ?? undefined,\n priceRange: options.priceRange,\n address: compact({ '@type': 'PostalAddress', streetAddress: b.address, addressLocality: b.city, addressCountry: shop.country_code }),\n geo: isValidPoint(b) ? { '@type': 'GeoCoordinates', latitude: b.lat, longitude: b.lng } : undefined,\n openingHours: openingHoursJsonLd(b.opening_hours ?? b.hours),\n parentOrganization: site ? { '@id': `${site}#organization` } : { '@type': 'Organization', name: shop.name },\n }),\n )\n}\n\nexport type BreadcrumbItem = { name: string; url: string }\n\nexport function breadcrumbJsonLd(items: BreadcrumbItem[]): JsonLdObject {\n return {\n '@context': CONTEXT,\n '@type': 'BreadcrumbList',\n itemListElement: items.map((item, i) => ({ '@type': 'ListItem', position: i + 1, name: item.name, item: item.url })),\n }\n}\n\nexport type FaqItem = { question: string; answer: string }\n\nexport function faqJsonLd(items: FaqItem[]): JsonLdObject {\n return {\n '@context': CONTEXT,\n '@type': 'FAQPage',\n mainEntity: items.map((item) => ({\n '@type': 'Question',\n name: item.question,\n acceptedAnswer: { '@type': 'Answer', text: item.answer },\n })),\n }\n}\n\n/** schema.org `CollectionPage` with an `ItemList` of the products shown. */\nexport function collectionJsonLd(\n collection: Collection,\n products: Pick<Product, 'handle' | 'title' | 'featured_image'>[],\n url: string,\n options: { productUrl?: (handle: string) => string } = {},\n): JsonLdObject {\n const origin = (() => {\n try {\n return new URL(url).origin\n } catch {\n return ''\n }\n })()\n const productUrl = options.productUrl ?? ((handle: string) => `${origin}/products/${handle}`)\n return compact({\n '@context': CONTEXT,\n '@type': 'CollectionPage',\n name: collection.seo.title ?? collection.title,\n description: clean(collection.seo.description ?? collection.description) ?? undefined,\n url,\n image: collection.image?.url,\n mainEntity: {\n '@type': 'ItemList',\n numberOfItems: products.length,\n itemListElement: products.map((p, i) =>\n compact({ '@type': 'ListItem', position: i + 1, url: productUrl(p.handle), name: p.title, image: p.featured_image?.url }),\n ),\n },\n })\n}\n\n/**\n * Serializes JSON-LD for a `<script>` tag, escaping `<`, `>`, `&` and line\n * separators so the payload cannot close the tag or inject markup.\n */\nexport function serializeJsonLd(data: unknown): string {\n return JSON.stringify(data)\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/&/g, '\\\\u0026')\n .replace(/\\u2028/g, '\\\\u2028')\n .replace(/\\u2029/g, '\\\\u2029')\n}\n","import { serializeJsonLd, type JsonLdObject } from './seo.js'\n\nexport type JsonLdProps = { data: JsonLdObject | JsonLdObject[] | null | undefined; nonce?: string }\n\n/** Renders `<script type=\"application/ld+json\">` safely (works in SSR). */\nexport function JsonLd({ data, nonce }: JsonLdProps) {\n if (!data || (Array.isArray(data) && data.length === 0)) return null\n return <script type=\"application/ld+json\" nonce={nonce} dangerouslySetInnerHTML={{ __html: serializeJsonLd(data) }} />\n}\n","/**\n * Exporter of section types to the OPS `storefront_content` format, plus a\n * helper to sync them (`PUT /storefront/content/section-types`). Pure TS: no\n * React import, so it also runs in build scripts and CI.\n *\n * Kind mapping (SDK → OPS): `url`/`color` → `text` (the URL travels as text;\n * OPS `link` is a `{label,url}` object), `products` → `product_list`,\n * `items` → `fields` (recursive). The rest keep their name.\n */\nimport { StorefrontError } from '@asteby/storefront'\nimport type { SectionDefinition, SectionPropSchema, SectionSchema } from './sections.js'\n\n/** Types OPS ships built in; they cannot be redefined through the API. */\nexport const OPS_BUILTIN_SECTION_TYPES = ['hero', 'product_grid', 'collection_list', 'rich_text', 'faq', 'image_with_text'] as const\n\nexport const OPS_PROP_KINDS = ['text', 'textarea', 'richtext', 'image', 'link', 'number', 'select', 'boolean', 'collection', 'collection_list', 'product', 'product_list', 'list'] as const\nexport type OpsPropKind = (typeof OPS_PROP_KINDS)[number]\n\nexport type OpsSectionProp = {\n key: string\n kind: OpsPropKind\n label: string\n required?: boolean\n default?: unknown\n options?: { value: string; label: string }[]\n min?: number\n max?: number\n fields?: OpsSectionProp[]\n}\n\nexport type OpsSectionType = {\n type: string\n label: string\n description?: string\n category?: string\n schema: { props: OpsSectionProp[] }\n max_per_page?: number\n}\n\nexport type SectionTypeIssue = {\n /** Dotted path, e.g. `promo.schema.props[1].fields[0].key`. */\n path: string\n message: string\n}\n\nexport type SectionTypeWarning = {\n type: string\n /** Prop key when the warning is about a single prop. */\n prop?: string\n message: string\n}\n\nexport class SectionTypesValidationError extends Error {\n readonly issues: SectionTypeIssue[]\n constructor(issues: SectionTypeIssue[]) {\n super(`Invalid section types for OPS:\\n${issues.map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`)\n this.name = 'SectionTypesValidationError'\n this.issues = issues\n }\n}\n\nexport type ToOpsOptions = {\n /** Skip OPS built-in types (default true). */\n excludeBuiltin?: boolean\n /**\n * Prop keys OPS already knows for each built-in type (e.g. `{ hero: ['title','subtitle'] }`).\n * With it, only the extra local props are warned about; without it, every\n * locally-defined built-in type gets one generic warning.\n */\n builtinProps?: Record<string, readonly string[]>\n}\n\nexport type ToOpsResult = { types: OpsSectionType[]; warnings: SectionTypeWarning[] }\n\nconst SNAKE = /^[a-z][a-z0-9]*(_[a-z0-9]+)*$/\nconst KIND_MAP: Record<string, OpsPropKind> = {\n text: 'text',\n textarea: 'textarea',\n richtext: 'richtext',\n url: 'text',\n color: 'text',\n image: 'image',\n number: 'number',\n boolean: 'boolean',\n select: 'select',\n collection: 'collection',\n product: 'product',\n products: 'product_list',\n list: 'list',\n}\nconst LIST_KINDS = new Set<OpsPropKind>(['list'])\n\nfunction convertProps(schema: SectionSchema | undefined, path: string, issues: SectionTypeIssue[]): OpsSectionProp[] {\n const out: OpsSectionProp[] = []\n for (const [key, spec] of Object.entries(schema ?? {})) {\n const p = `${path}.${key}`\n const kind = KIND_MAP[(spec as SectionPropSchema).kind]\n if (!kind) {\n issues.push({ path: `${p}.kind`, message: `unknown kind \"${String((spec as SectionPropSchema).kind)}\"` })\n continue\n }\n const prop: OpsSectionProp = { key, kind, label: spec.label }\n if (spec.required) prop.required = true\n if ('default' in spec && spec.default !== undefined) prop.default = spec.default\n if (spec.options) prop.options = spec.options.map((o) => ({ value: o.value, label: o.label }))\n if (spec.min !== undefined) prop.min = spec.min\n if (spec.max !== undefined) prop.max = spec.max\n if (LIST_KINDS.has(kind)) prop.fields = convertProps(spec.items, `${p}.fields`, issues)\n out.push(prop)\n }\n return out\n}\n\n/** Local mirror of the OPS validation, so mistakes surface before the request. */\nexport function validateOpsSectionTypes(types: readonly OpsSectionType[]): SectionTypeIssue[] {\n const issues: SectionTypeIssue[] = []\n const seen = new Set<string>()\n const walk = (props: readonly OpsSectionProp[] | undefined, path: string) => {\n if (!Array.isArray(props)) {\n issues.push({ path, message: 'must be a list' })\n return\n }\n const keys = new Set<string>()\n props.forEach((prop, i) => {\n const p = `${path}[${i}]`\n if (typeof prop.key !== 'string' || !SNAKE.test(prop.key)) issues.push({ path: `${p}.key`, message: `\"${String(prop.key)}\" must be snake_case (a-z, 0-9, _)` })\n else if (keys.has(prop.key)) issues.push({ path: `${p}.key`, message: `duplicate key \"${prop.key}\"` })\n else keys.add(prop.key)\n if (typeof prop.label !== 'string' || !prop.label.trim()) issues.push({ path: `${p}.label`, message: 'label is required' })\n if (!(OPS_PROP_KINDS as readonly string[]).includes(prop.kind)) {\n issues.push({ path: `${p}.kind`, message: `unknown kind \"${String(prop.kind)}\"` })\n return\n }\n if (prop.kind === 'list') {\n if (!prop.fields || prop.fields.length === 0) issues.push({ path: `${p}.fields`, message: 'list requires a non-empty \"fields\"' })\n else walk(prop.fields, `${p}.fields`)\n }\n if (prop.kind === 'select' && (!prop.options || prop.options.length === 0)) issues.push({ path: `${p}.options`, message: 'select requires non-empty \"options\"' })\n if (prop.min !== undefined && prop.max !== undefined && prop.min > prop.max) issues.push({ path: `${p}.max`, message: 'max must be >= min' })\n })\n }\n types.forEach((t, i) => {\n const p = t.type ? t.type : `[${i}]`\n if (!t.type || !t.type.trim()) issues.push({ path: `${p}.type`, message: 'type is required' })\n else if (seen.has(t.type)) issues.push({ path: `${p}.type`, message: `duplicate type \"${t.type}\"` })\n else seen.add(t.type)\n if (!t.label || !t.label.trim()) issues.push({ path: `${p}.label`, message: 'label is required' })\n if (t.max_per_page !== undefined && (!Number.isInteger(t.max_per_page) || t.max_per_page < 1)) issues.push({ path: `${p}.max_per_page`, message: 'must be a positive integer' })\n walk(t.schema?.props, `${p}.schema.props`)\n })\n return issues\n}\n\ntype DefinitionsSource = { definitions(): SectionDefinition<any, any>[] } | readonly SectionDefinition<any, any>[]\n\n/**\n * Converts the registry (or a list of definitions) to OPS section types.\n * Throws `SectionTypesValidationError` (with `issues`) when something would\n * be rejected by OPS.\n */\nexport function sectionTypesToOps(source: DefinitionsSource, options: ToOpsOptions = {}): ToOpsResult {\n const excludeBuiltin = options.excludeBuiltin ?? true\n const defs = Array.isArray(source) ? (source as readonly SectionDefinition<any, any>[]) : (source as { definitions(): SectionDefinition<any, any>[] }).definitions()\n const builtin = new Set<string>(OPS_BUILTIN_SECTION_TYPES)\n const issues: SectionTypeIssue[] = []\n const warnings: SectionTypeWarning[] = []\n const types: OpsSectionType[] = []\n\n for (const def of defs) {\n if (excludeBuiltin && builtin.has(def.type)) {\n const known = options.builtinProps?.[def.type]\n if (known) {\n for (const name of Object.keys(def.schema ?? {})) {\n if (!known.includes(name)) warnings.push({ type: def.type, prop: name, message: `prop \"${name}\" of built-in type \"${def.type}\" does not exist in the OPS schema; built-in types cannot be redefined, so it will not be editable in OPS` })\n }\n } else {\n warnings.push({ type: def.type, message: `\"${def.type}\" is a built-in OPS type: not synced, and its local props cannot be verified against the OPS schema` })\n }\n continue\n }\n const entryIssues: SectionTypeIssue[] = []\n const props = convertProps(def.schema, `${def.type}.schema.props`, entryIssues)\n issues.push(...entryIssues)\n const out: OpsSectionType = { type: def.type, label: def.label ?? def.type, schema: { props } }\n if (def.description) out.description = def.description\n if (def.category) out.category = def.category\n if (def.maxPerPage !== undefined) out.max_per_page = def.maxPerPage\n types.push(out)\n }\n issues.push(...validateOpsSectionTypes(types))\n if (issues.length) throw new SectionTypesValidationError(issues)\n return { types, warnings }\n}\n\nexport type SectionTypesTarget =\n | { request<T>(spec: { method: 'PUT'; path: string; body?: unknown }): Promise<T> }\n | { baseUrl: string; token: string; fetch?: typeof fetch }\n\nexport type SyncResult = { created: number; updated: number; warnings: SectionTypeWarning[] }\n\nconst SYNC_PATH = '/storefront/content/section-types'\n\nconst count = (v: unknown): number => (Array.isArray(v) ? v.length : typeof v === 'number' ? v : 0)\n\n/**\n * Validates locally and then `PUT`s the section types to OPS. Needs an `sk_`\n * token with `content:write`. `target` is a `createStorefrontClient()` client or\n * `{ baseUrl, token, fetch? }`. Returns `{ created, updated, warnings }`.\n */\nexport async function syncSectionTypes(target: SectionTypesTarget, source: DefinitionsSource, options: ToOpsOptions = {}): Promise<SyncResult> {\n const { types, warnings } = sectionTypesToOps(source, options)\n let raw: unknown\n if ('request' in target && typeof target.request === 'function') {\n raw = await target.request<unknown>({ method: 'PUT', path: SYNC_PATH, body: { section_types: types } })\n } else {\n const t = target as { baseUrl: string; token: string; fetch?: typeof fetch }\n if (!t.token.startsWith('sk_')) throw new TypeError('syncSectionTypes: an sk_ token with content:write is required')\n const f = t.fetch ?? globalThis.fetch.bind(globalThis)\n const url = t.baseUrl.replace(/\\/+$/, '') + SYNC_PATH\n const res = await f(url, {\n method: 'PUT',\n headers: { Authorization: `Bearer ${t.token}`, 'Content-Type': 'application/json', Accept: 'application/json' },\n body: JSON.stringify({ section_types: types }),\n })\n const text = await res.text()\n let body: any\n try {\n body = text ? JSON.parse(text) : undefined\n } catch {\n body = undefined\n }\n if (!res.ok) {\n throw new StorefrontError({ status: res.status, code: (body?.code ?? body?.error?.code ?? 'unknown') as StorefrontError['code'], message: body?.message ?? body?.error?.message ?? `Section types sync failed (${res.status})`, url })\n }\n raw = body\n }\n const data = (raw && typeof raw === 'object' && 'data' in raw ? (raw as { data: unknown }).data : raw) as { created?: unknown; updated?: unknown } | undefined\n return { created: count(data?.created), updated: count(data?.updated), warnings }\n}\n","/**\n * Section registry: pages are ordered lists of `{ id, type, props }` (from\n * `content.page()`), and each `type` maps to a React component with a closed\n * props schema. The schema is what the OPS editor (and its AI agent) uses to\n * know which props exist, so props are validated and defaults merged before\n * rendering — the content is data, never markup.\n */\nimport { Fragment, type ComponentType, type ReactNode } from 'react'\nimport type { Section } from '@asteby/storefront'\nimport { sectionTypesToOps, type ToOpsOptions, type ToOpsResult } from './section-types.js'\n\nexport type SectionPropKind =\n | 'text'\n | 'textarea'\n | 'richtext'\n | 'number'\n | 'boolean'\n | 'url'\n | 'image'\n | 'color'\n | 'select'\n | 'collection'\n | 'product'\n | 'products'\n | 'list'\n\nexport type SectionPropSchema = {\n label: string\n kind: SectionPropKind\n description?: string\n default?: unknown\n required?: boolean\n /** `select` choices. */\n options?: readonly { value: string; label: string }[]\n /** `number` bounds. */\n min?: number\n max?: number\n /** `list` item schema. */\n items?: SectionSchema\n}\n\nexport type SectionSchema = { readonly [prop: string]: SectionPropSchema }\n\ntype KindType<P extends SectionPropSchema> = P['kind'] extends 'number'\n ? number\n : P['kind'] extends 'boolean'\n ? boolean\n : P['kind'] extends 'products'\n ? string[]\n : P['kind'] extends 'list'\n ? P['items'] extends SectionSchema\n ? InferSectionProps<P['items']>[]\n : Record<string, unknown>[]\n : P['kind'] extends 'select'\n ? P['options'] extends readonly { value: infer V }[]\n ? V\n : string\n : string\n\ntype RequiredKeys<S extends SectionSchema> = {\n [K in keyof S]: S[K]['required'] extends true ? K : 'default' extends keyof S[K] ? K : never\n}[keyof S]\n\n/** Props type derived from a section schema (props with `default` or `required` are non-optional). */\nexport type InferSectionProps<S extends SectionSchema> = { [K in RequiredKeys<S>]: KindType<S[K]> } & {\n [K in Exclude<keyof S, RequiredKeys<S>>]?: KindType<S[K]>\n}\n\nexport type SectionComponentProps<P, C = unknown> = P & {\n section: { id: string; type: string }\n /** Arbitrary data passed to `<Sections context>` (e.g. loader data). */\n context: C\n}\n\nexport type SectionDefinition<P = Record<string, unknown>, C = any> = {\n type: string\n label?: string\n description?: string\n /** OPS editor grouping (only used when exporting to OPS). */\n category?: string\n /** Max instances per page (only used when exporting to OPS). */\n maxPerPage?: number\n schema: SectionSchema\n component: ComponentType<SectionComponentProps<P, C>>\n}\n\n/**\n * Declares a section. Prop types are inferred from the schema:\n *\n * export const hero = defineSection({\n * type: 'hero',\n * label: 'Hero',\n * schema: {\n * title: { label: 'Título', kind: 'text', required: true },\n * cta_url: { label: 'Enlace', kind: 'url', default: '/' },\n * },\n * component: ({ title, cta_url }) => <section><h1>{title}</h1><a href={cta_url}>Ver</a></section>,\n * })\n */\nexport function defineSection<const S extends SectionSchema, C = any>(definition: {\n type: string\n label?: string\n description?: string\n category?: string\n maxPerPage?: number\n schema: S\n component: ComponentType<SectionComponentProps<InferSectionProps<S>, C>>\n}): SectionDefinition<InferSectionProps<S>, C> {\n return definition as SectionDefinition<InferSectionProps<S>, C>\n}\n\nexport type SectionPropError = { prop: string; message: string }\n\nconst STRING_KINDS = new Set<SectionPropKind>(['text', 'textarea', 'richtext', 'url', 'image', 'color', 'collection', 'product'])\n\nfunction cloneDefault(value: unknown): unknown {\n return value !== null && typeof value === 'object' ? structuredClone(value) : value\n}\n\n/**\n * Validates raw props against a schema: merges defaults, coerces numeric\n * strings, drops unknown props and replaces invalid values with the default.\n */\nexport function resolveSectionProps(schema: SectionSchema, raw: Record<string, unknown> | null | undefined, path = ''): { props: Record<string, unknown>; errors: SectionPropError[] } {\n const props: Record<string, unknown> = {}\n const errors: SectionPropError[] = []\n const input = raw ?? {}\n for (const [name, spec] of Object.entries(schema)) {\n const key = path ? `${path}.${name}` : name\n let value = input[name]\n const fail = (message: string) => {\n errors.push({ prop: key, message })\n if ('default' in spec) props[name] = cloneDefault(spec.default)\n }\n if (value === undefined || value === null || value === '') {\n if ('default' in spec) props[name] = cloneDefault(spec.default)\n else if (spec.required) errors.push({ prop: key, message: 'is required' })\n continue\n }\n // OPS normalizes `image` props to `{ url, alt }` when it publishes a page; the\n // schema (and the mock) carry the bare URL. Accept both and hand the URL on.\n if (spec.kind === 'image' && typeof value === 'object' && value !== null && typeof (value as { url?: unknown }).url === 'string') {\n value = (value as { url: string }).url\n }\n if (STRING_KINDS.has(spec.kind)) {\n if (typeof value !== 'string') {\n fail('must be a string')\n continue\n }\n } else if (spec.kind === 'number') {\n if (typeof value === 'string' && value.trim() !== '' && Number.isFinite(Number(value))) value = Number(value)\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n fail('must be a number')\n continue\n }\n if ((spec.min !== undefined && value < spec.min) || (spec.max !== undefined && value > spec.max)) {\n fail(`must be between ${spec.min ?? '-∞'} and ${spec.max ?? '∞'}`)\n continue\n }\n } else if (spec.kind === 'boolean') {\n if (typeof value !== 'boolean') {\n fail('must be a boolean')\n continue\n }\n } else if (spec.kind === 'select') {\n if (typeof value !== 'string' || (spec.options && !spec.options.some((o) => o.value === value))) {\n fail(`must be one of ${(spec.options ?? []).map((o) => o.value).join(', ')}`)\n continue\n }\n } else if (spec.kind === 'products') {\n if (!Array.isArray(value) || value.some((v) => typeof v !== 'string')) {\n fail('must be a list of product handles')\n continue\n }\n } else if (spec.kind === 'list') {\n if (!Array.isArray(value)) {\n fail('must be a list')\n continue\n }\n const items: unknown[] = []\n value.forEach((item, i) => {\n if (!spec.items) {\n items.push(item)\n return\n }\n if (typeof item !== 'object' || item === null || Array.isArray(item)) {\n errors.push({ prop: `${key}[${i}]`, message: 'must be an object' })\n return\n }\n const resolved = resolveSectionProps(spec.items, item as Record<string, unknown>, `${key}[${i}]`)\n errors.push(...resolved.errors)\n items.push(resolved.props)\n })\n value = items\n }\n props[name] = value\n }\n return { props, errors }\n}\n\n/** JSON Schema (draft 2020-12) of a section, for the OPS editor (`section.schema.json`). */\nexport function sectionJsonSchema(definition: Pick<SectionDefinition, 'type' | 'label' | 'description' | 'schema'>): Record<string, unknown> {\n const toSchema = (schema: SectionSchema): Record<string, unknown> => {\n const properties: Record<string, unknown> = {}\n const required: string[] = []\n for (const [name, spec] of Object.entries(schema)) {\n const base: Record<string, unknown> = { title: spec.label, 'x-kind': spec.kind }\n if (spec.description) base.description = spec.description\n if ('default' in spec) base.default = spec.default\n if (spec.required) required.push(name)\n switch (spec.kind) {\n case 'number':\n Object.assign(base, { type: 'number' }, spec.min !== undefined ? { minimum: spec.min } : {}, spec.max !== undefined ? { maximum: spec.max } : {})\n break\n case 'boolean':\n base.type = 'boolean'\n break\n case 'select':\n Object.assign(base, { type: 'string', enum: (spec.options ?? []).map((o) => o.value), 'x-options': spec.options ?? [] })\n break\n case 'products':\n Object.assign(base, { type: 'array', items: { type: 'string' } })\n break\n case 'list':\n Object.assign(base, { type: 'array', items: spec.items ? toSchema(spec.items) : { type: 'object' } })\n break\n case 'url':\n Object.assign(base, { type: 'string', format: 'uri-reference' })\n break\n default:\n base.type = 'string'\n }\n properties[name] = base\n }\n return { type: 'object', additionalProperties: false, properties, ...(required.length ? { required } : {}) }\n }\n return {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: `section:${definition.type}`,\n title: definition.label ?? definition.type,\n ...(definition.description ? { description: definition.description } : {}),\n ...toSchema(definition.schema),\n }\n}\n\n/** Map of section `type` → definition. */\nexport class SectionRegistry {\n private readonly defs = new Map<string, SectionDefinition<any, any>>()\n\n constructor(definitions: readonly SectionDefinition<any, any>[] = []) {\n for (const d of definitions) this.register(d)\n }\n\n register(definition: SectionDefinition<any, any>): this {\n this.defs.set(definition.type, definition)\n return this\n }\n\n get(type: string): SectionDefinition<any, any> | undefined {\n return this.defs.get(type)\n }\n\n has(type: string): boolean {\n return this.defs.has(type)\n }\n\n types(): string[] {\n return [...this.defs.keys()]\n }\n\n definitions(): SectionDefinition<any, any>[] {\n return [...this.defs.values()]\n }\n\n /** JSON Schemas of every registered section, keyed by type. */\n toJSONSchema(): Record<string, Record<string, unknown>> {\n return Object.fromEntries(this.definitions().map((d) => [d.type, sectionJsonSchema(d)]))\n }\n\n /**\n * Section types in the OPS `storefront_content` format, ready for\n * `PUT /storefront/content/section-types`. Throws `SectionTypesValidationError`\n * on anything OPS would reject; `warnings` flags built-in types.\n */\n toOpsSectionTypes(options?: ToOpsOptions): ToOpsResult {\n return sectionTypesToOps(this, options)\n }\n}\n\nexport function createSectionRegistry(definitions: readonly SectionDefinition<any, any>[] = []): SectionRegistry {\n return new SectionRegistry(definitions)\n}\n\nconst isDev = () => {\n const p = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n return p?.env?.NODE_ENV !== 'production'\n}\n\nexport type SectionsProps<C = unknown> = {\n sections: readonly Section[] | null | undefined\n registry: SectionRegistry\n /** Passed to every section component as `context`. */\n context?: C\n /** Rendered for unknown types (default: nothing). */\n renderUnknown?: (section: Section) => ReactNode\n /** Called with validation problems (default: `console.warn` outside production). */\n onInvalid?: (section: Section, errors: SectionPropError[]) => void\n}\n\n/**\n * Renders sections in order. Unknown types are skipped (with a dev warning),\n * props are validated against the schema and defaults are merged; a section\n * missing a required prop is skipped.\n */\nexport function Sections<C = unknown>({ sections, registry, context, renderUnknown, onInvalid }: SectionsProps<C>) {\n if (!sections?.length) return null\n return (\n <>\n {sections.map((section, index) => {\n const key = section.id || `${section.type}-${index}`\n const def = registry.get(section.type)\n if (!def) {\n if (isDev()) console.warn(`[storefront-react] Unknown section type \"${section.type}\" (id ${section.id}); skipping.`)\n return renderUnknown ? <Fragment key={key}>{renderUnknown(section)}</Fragment> : null\n }\n const { props, errors } = resolveSectionProps(def.schema, section.props)\n if (errors.length) {\n if (onInvalid) onInvalid(section, errors)\n else if (isDev()) console.warn(`[storefront-react] Section \"${section.type}\" (id ${section.id}) has invalid props:`, errors)\n }\n // A missing required prop would break the component: skip the section.\n if (errors.some((e) => e.message === 'is required' && !e.prop.includes('[') && !e.prop.includes('.'))) return null\n const Component = def.component\n return <Component key={key} {...props} section={{ id: section.id, type: section.type }} context={context} />\n })}\n </>\n )\n}\n","/**\n * Server-side theme (S3): turns the content theme from\n * `content.theme()` into CSS custom properties so the first SSR byte already\n * carries the store's brand — no localStorage, no anti-flicker script.\n *\n * Token naming follows `@asteby/metacore-theme`: camelCase keys become\n * kebab-case (`primaryForeground` → `--primary-foreground`), and each color is\n * also exposed as a Tailwind 4 theme variable (`--color-primary-foreground`).\n * metacore-theme ships its tokens as static CSS with no reusable naming\n * helper, so this module is standalone and does not depend on it.\n */\nimport type { Theme } from '@asteby/storefront'\n\nexport type ThemeCssOptions = {\n /** Selector that receives the variables (default `:root`). */\n selector?: string\n /**\n * Variable names for color tokens:\n * `both` (default) → `--color-<name>` and `--<name>`;\n * `color` → only `--color-<name>` (Tailwind 4); `metacore` → only `--<name>`.\n */\n naming?: 'both' | 'color' | 'metacore'\n /** Fallback stack appended to every font (default system sans-serif). */\n fontFallback?: string\n}\n\nconst DEFAULT_FONT_FALLBACK = 'ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", sans-serif'\nconst MONO_FALLBACK = 'ui-monospace, SFMono-Regular, Menlo, monospace'\n\n/** `primaryForeground`, `primary_foreground`, `--color-primary-foreground` → `primary-foreground`. */\nexport function tokenName(key: string): string {\n return key\n .trim()\n .replace(/^-+/, '')\n .replace(/^color-/, '')\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[\\s_.]+/g, '-')\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n}\n\n/** Rejects values that could escape the declaration or the `<style>` element. */\nexport function isSafeCssValue(value: string): boolean {\n if (!value || value.length > 200) return false\n if (/[;{}<>\\\\]/.test(value)) return false\n if (/url\\s*\\(|expression\\s*\\(|@import/i.test(value)) return false\n return true\n}\n\nfunction fontStack(family: string, role: string, fallback: string): string | null {\n const name = family.replace(/[\"']/g, '').trim()\n if (!name || !isSafeCssValue(name)) return null\n return `\"${name}\", ${role === 'mono' ? MONO_FALLBACK : fallback}`\n}\n\n/** CSS declarations (`--x:value`) for a theme, without selector. */\nexport function themeToCssVariables(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): Record<string, string> {\n const naming = options.naming ?? 'both'\n const vars: Record<string, string> = {}\n for (const [key, raw] of Object.entries(theme?.tokens ?? {})) {\n const name = tokenName(key)\n const value = String(raw).trim()\n if (!name || !isSafeCssValue(value)) continue\n if (naming !== 'metacore') vars[`--color-${name}`] = value\n if (naming !== 'color') vars[`--${name}`] = value\n }\n const fallback = options.fontFallback ?? DEFAULT_FONT_FALLBACK\n for (const [role, family] of Object.entries(theme?.fonts ?? {})) {\n const name = tokenName(role)\n const stack = typeof family === 'string' ? fontStack(family, name, fallback) : null\n if (name && stack) vars[`--font-${name}`] = stack\n }\n if (theme?.radius && isSafeCssValue(theme.radius.trim())) vars['--radius'] = theme.radius.trim()\n return vars\n}\n\n/** `:root{--color-primary:#0f766e;--primary:#0f766e;...}` from a content theme. */\nexport function themeToCss(theme: Partial<Theme> | null | undefined, options: ThemeCssOptions = {}): string {\n const vars = themeToCssVariables(theme, options)\n const body = Object.entries(vars)\n .map(([k, v]) => `${k}:${v}`)\n .join(';')\n if (!body) return ''\n const selector = (options.selector ?? ':root').replace(/[{}<>]/g, '')\n return `${selector}{${body}}`\n}\n\n/** Google Fonts stylesheet URL for the theme fonts (or `null` when there are none). */\nexport function themeFontsHref(theme: Partial<Theme> | null | undefined, weights: number[] = [400, 500, 600, 700]): string | null {\n const families = [...new Set(Object.values(theme?.fonts ?? {}).map((f) => String(f).replace(/[\"']/g, '').trim()).filter((f) => f && isSafeCssValue(f)))]\n if (!families.length) return null\n const params = families.map((f) => `family=${encodeURIComponent(f).replace(/%20/g, '+')}:wght@${weights.join(';')}`).join('&')\n return `https://fonts.googleapis.com/css2?${params}&display=swap`\n}\n\nexport type ThemeStyleProps = ThemeCssOptions & {\n theme: Partial<Theme> | null | undefined\n nonce?: string\n id?: string\n}\n\n/** Emits the theme variables as a `<style>` (render it in `<head>` from the root route). */\nexport function ThemeStyle({ theme, nonce, id = 'storefront-theme', ...options }: ThemeStyleProps) {\n const css = themeToCss(theme, options)\n if (!css) return null\n return <style id={id} nonce={nonce} data-storefront-theme=\"\" dangerouslySetInnerHTML={{ __html: css }} />\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { GeoPoint } from '@asteby/storefront'\n\nexport type GeolocationErrorCode = 'unsupported' | 'insecure' | 'denied' | 'unavailable' | 'timeout'\n\n/** Typed failure of `request()`. `message` is a ready-to-show es-MX text. */\nexport type GeolocationFailure = { code: GeolocationErrorCode; message: string }\n\n/** State of the browser permission. `unknown` when the Permissions API is missing. */\nexport type GeolocationPermission = 'granted' | 'denied' | 'prompt' | 'unknown'\n\nexport type UseGeolocationOptions = {\n enableHighAccuracy?: boolean\n /** Give up after this long (default 10 s). */\n timeoutMs?: number\n /** Accept a cached position up to this old (default 5 min). */\n maximumAge?: number\n}\n\nexport type UseGeolocationResult = {\n /** `false` on the server and until mounted, so SSR and hydration agree. */\n supported: boolean\n permission: GeolocationPermission\n status: 'idle' | 'locating' | 'success' | 'error'\n position: GeoPoint | null\n error: GeolocationFailure | null\n /**\n * Asks the browser for the position. Call it ONLY from a user gesture (a button's onClick): the hook never\n * asks by itself. Resolves to the point, or `null` on failure (see `error`).\n */\n request: () => Promise<GeoPoint | null>\n reset: () => void\n}\n\nconst MESSAGES: Record<GeolocationErrorCode, string> = {\n unsupported: 'Tu navegador no permite obtener tu ubicación.',\n insecure: 'La ubicación solo está disponible en conexiones seguras (HTTPS).',\n denied: 'No tenemos permiso para usar tu ubicación. Puedes activarlo en el navegador o escribir tu código postal.',\n unavailable: 'No pudimos determinar tu ubicación. Escribe tu código postal.',\n timeout: 'Tardó demasiado en obtener tu ubicación. Intenta de nuevo o escribe tu código postal.',\n}\n\nconst fail = (code: GeolocationErrorCode): GeolocationFailure => ({ code, message: MESSAGES[code] })\n\nconst hasGeolocation = () => typeof navigator !== 'undefined' && !!navigator.geolocation\n\n/**\n * Browser geolocation that only runs under a user action. Reading the permission state (when the Permissions\n * API exists) does not prompt. The point stays in React state: it is never stored or sent anywhere here.\n */\nexport function useGeolocation(options: UseGeolocationOptions = {}): UseGeolocationResult {\n const { enableHighAccuracy = false, timeoutMs = 10_000, maximumAge = 300_000 } = options\n const [supported, setSupported] = useState(false)\n const [permission, setPermission] = useState<GeolocationPermission>('unknown')\n const [status, setStatus] = useState<UseGeolocationResult['status']>('idle')\n const [position, setPosition] = useState<GeoPoint | null>(null)\n const [error, setError] = useState<GeolocationFailure | null>(null)\n const alive = useRef(true)\n\n useEffect(() => {\n alive.current = true\n setSupported(hasGeolocation())\n let off = () => {}\n try {\n const perms = typeof navigator !== 'undefined' ? navigator.permissions : undefined\n void perms?.query({ name: 'geolocation' }).then((p) => {\n if (!alive.current) return\n const sync = () => setPermission(p.state)\n sync()\n p.addEventListener?.('change', sync)\n off = () => p.removeEventListener?.('change', sync)\n }, () => {})\n } catch {\n // Permissions API unavailable or rejects 'geolocation': stay `unknown`.\n }\n return () => {\n alive.current = false\n off()\n }\n }, [])\n\n const request = useCallback((): Promise<GeoPoint | null> => {\n const failWith = (code: GeolocationErrorCode) => {\n if (alive.current) {\n setStatus('error')\n setError(fail(code))\n }\n return null\n }\n if (!hasGeolocation()) return Promise.resolve(failWith('unsupported'))\n if (typeof window !== 'undefined' && window.isSecureContext === false) return Promise.resolve(failWith('insecure'))\n setStatus('locating')\n setError(null)\n return new Promise((resolve) => {\n navigator.geolocation.getCurrentPosition(\n (pos) => {\n const point = { lat: pos.coords.latitude, lng: pos.coords.longitude }\n if (alive.current) {\n setPosition(point)\n setStatus('success')\n setPermission('granted')\n }\n resolve(point)\n },\n (err) => resolve(failWith(err.code === 1 ? 'denied' : err.code === 3 ? 'timeout' : 'unavailable')),\n { enableHighAccuracy, timeout: timeoutMs, maximumAge },\n )\n })\n }, [enableHighAccuracy, timeoutMs, maximumAge])\n\n const reset = useCallback(() => {\n setStatus('idle')\n setPosition(null)\n setError(null)\n }, [])\n\n return { supported, permission, status, position, error, request, reset }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport type { ShopBranch, StorefrontClient } from '@asteby/storefront'\nimport { rankByDistance, type GeoPoint } from '@asteby/storefront/geo'\nimport { useOptionalStorefront } from './context.js'\n\nexport type NearbyLocation<L extends ShopBranch = ShopBranch> = L & { distance_km: number | null }\n\nexport type UseNearestLocationsOptions<L extends ShopBranch = ShopBranch> = {\n /** The buyer's point (from `useGeolocation().request()`). */\n origin?: GeoPoint | null\n /** Postal code typed by the buyer (5 digits). The server resolves it to coordinates, so this always asks the server. */\n postalCode?: string | null\n /** Branches to rank. Defaults to `shop.branches` from the provider. */\n locations?: readonly L[]\n /** Keep the closest N. */\n limit?: number\n /** Keep those within this many km. */\n radiusKm?: number\n /** Force the server (`locations.nearest`) for `origin` instead of ranking `locations` in the browser. */\n remote?: boolean\n /** Defaults to the provider's client. */\n client?: StorefrontClient\n}\n\nexport type UseNearestLocationsResult<L extends ShopBranch = ShopBranch> = {\n locations: NearbyLocation<L>[]\n status: 'idle' | 'loading' | 'success' | 'error'\n error: Error | null\n /** `local`: ranked in the browser, the point never leaves it. `remote`: answered by the server. */\n source: 'local' | 'remote' | null\n}\n\nconst EMPTY: readonly ShopBranch[] = []\nconst IDLE = { locations: [], status: 'idle', error: null, source: null } as const\n\n/**\n * Branches ordered by distance. With an `origin` and branches at hand (explicit or `shop.branches`) the ranking\n * runs in the browser with haversine and the coordinates are sent nowhere. `postalCode` (or `remote`) asks the\n * server, which rounds and never stores the point. With zero branches, or neither origin nor postal code, the\n * result is empty and `idle`.\n */\nexport function useNearestLocations<L extends ShopBranch = ShopBranch>(options: UseNearestLocationsOptions<L> = {}): UseNearestLocationsResult<L> {\n const { origin = null, postalCode = null, limit, radiusKm, remote = false } = options\n const sf = useOptionalStorefront()\n const client = options.client ?? sf?.client ?? null\n const branches = (options.locations ?? sf?.shop?.branches ?? EMPTY) as readonly L[]\n const lat = origin?.lat\n const lng = origin?.lng\n const hasOrigin = lat !== undefined && lng !== undefined\n const cp = postalCode?.trim() || null\n\n const mode = useMemo<'local' | 'remote' | null>(() => {\n if (cp) return client ? 'remote' : null\n if (!hasOrigin) return null\n if (remote) return client ? 'remote' : null\n return branches.length ? 'local' : null\n }, [cp, hasOrigin, remote, client, branches.length])\n\n const local = useMemo<NearbyLocation<L>[]>(() => {\n if (mode !== 'local' || !hasOrigin) return []\n return rankByDistance(branches, { lat, lng }, { ...(radiusKm !== undefined ? { radiusKm } : {}), ...(limit !== undefined ? { limit } : {}) })\n .map(({ item, distanceKm }) => ({ ...item, distance_km: distanceKm }))\n }, [mode, branches, lat, lng, radiusKm, limit, hasOrigin])\n\n const [remoteState, setRemoteState] = useState<{ key: string; nodes: NearbyLocation<L>[] } | { key: string; error: Error } | null>(null)\n const key = mode === 'remote' ? (cp ? `cp:${cp}` : `ll:${lat},${lng}`) : ''\n\n useEffect(() => {\n if (mode !== 'remote' || !client) return\n const ctrl = new AbortController()\n const req = cp\n ? client.locations.list({ postal_code: cp }, { signal: ctrl.signal })\n : client.locations.nearest({ lat: lat!, lng: lng! }, { signal: ctrl.signal })\n req.then(\n (res) => !ctrl.signal.aborted && setRemoteState({ key, nodes: res.nodes as unknown as NearbyLocation<L>[] }),\n (err: unknown) => !ctrl.signal.aborted && setRemoteState({ key, error: err instanceof Error ? err : new Error(String(err)) }),\n )\n return () => ctrl.abort()\n }, [mode, client, key, cp, lat, lng])\n\n return useMemo(() => {\n if (mode === 'local') return { locations: local, status: 'success', error: null, source: 'local' } as const\n if (mode !== 'remote') return IDLE as unknown as UseNearestLocationsResult<L>\n if (!remoteState || remoteState.key !== key) return { locations: [], status: 'loading', error: null, source: 'remote' } as const\n if ('error' in remoteState) return { locations: [], status: 'error', error: remoteState.error, source: 'remote' } as const\n let nodes = remoteState.nodes\n if (radiusKm !== undefined) nodes = nodes.filter((n) => n.distance_km == null || n.distance_km <= radiusKm)\n if (limit !== undefined) nodes = nodes.slice(0, Math.max(0, limit))\n return { locations: nodes, status: 'success', error: null, source: 'remote' } as const\n }, [mode, local, remoteState, key, radiusKm, limit])\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport type { ShopBranch } from '@asteby/storefront'\nimport { useOptionalStorefront } from './context.js'\n\n/** Query param that carries the chosen branch (also the default `name` of `<LocationPicker>`). */\nexport const SELECTED_LOCATION_PARAM = 'sucursal'\n/** localStorage key of \"Mi sucursal\". Never a cookie: the choice is per browser and is not sent to the server. */\nexport const SELECTED_LOCATION_STORAGE_KEY = 'sf_sucursal'\n\nconst CHANGE_EVENT = 'storefront:selected-location'\n\nconst storage = (): Storage | null => {\n try {\n return typeof localStorage === 'undefined' ? null : localStorage\n } catch {\n return null // blocked storage throws on access\n }\n}\n\n/**\n * The saved branch id: `?sucursal=` wins over localStorage. Pure helper for loaders and tests; on the server\n * pass the request's search string (`new URL(request.url).search`) and no storage.\n */\nexport function readSelectedLocationId(\n { search = typeof location === 'undefined' ? '' : location.search, store = storage(), param = SELECTED_LOCATION_PARAM, storageKey = SELECTED_LOCATION_STORAGE_KEY }:\n { search?: string; store?: Pick<Storage, 'getItem'> | null; param?: string; storageKey?: string } = {},\n): string | null {\n const fromUrl = new URLSearchParams(search).get(param)\n if (fromUrl) return fromUrl\n try {\n return store?.getItem(storageKey) || null\n } catch {\n return null\n }\n}\n\nexport type UseSelectedLocationOptions = {\n /** Branches to validate against. Defaults to `shop.branches` from `<StorefrontProvider>`. */\n locations?: readonly ShopBranch[]\n /** Id already known on the server (from `?sucursal=`), so SSR and hydration render the same. */\n initialId?: string | null\n param?: string\n storageKey?: string\n /** Mirror the choice in the address bar with `history.replaceState` (default true). */\n syncUrl?: boolean\n}\n\nexport type UseSelectedLocationResult<L extends ShopBranch = ShopBranch> = {\n id: string | null\n location: L | null\n /** `false` until the saved choice has been read on the client. */\n ready: boolean\n select: (id: string) => void\n clear: () => void\n}\n\nconst EMPTY: readonly ShopBranch[] = []\n\n/**\n * \"Mi sucursal\": the chosen branch lives in the URL (`?sucursal=<id>`, shareable) and in localStorage. It is\n * never written to a cookie, so it does not travel with every request. An id that is not among `locations`\n * is ignored and forgotten; with zero branches nothing is ever selected.\n */\nexport function useSelectedLocation<L extends ShopBranch = ShopBranch>(options: UseSelectedLocationOptions & { locations?: readonly L[] } = {}): UseSelectedLocationResult<L> {\n const { initialId = null, param = SELECTED_LOCATION_PARAM, storageKey = SELECTED_LOCATION_STORAGE_KEY, syncUrl = true } = options\n const sf = useOptionalStorefront()\n const locations = (options.locations ?? sf?.shop?.branches ?? EMPTY) as readonly L[]\n const [raw, setRaw] = useState<string | null>(initialId)\n const [ready, setReady] = useState(false)\n\n useEffect(() => {\n const read = () => setRaw(readSelectedLocationId({ param, storageKey }))\n read()\n setReady(true)\n window.addEventListener(CHANGE_EVENT, read)\n window.addEventListener('storage', read)\n window.addEventListener('popstate', read)\n return () => {\n window.removeEventListener(CHANGE_EVENT, read)\n window.removeEventListener('storage', read)\n window.removeEventListener('popstate', read)\n }\n }, [param, storageKey])\n\n const location = useMemo(() => (raw ? locations.find((l) => l.id === raw) ?? null : null), [raw, locations])\n const id = location?.id ?? null\n\n // A valid choice that came from a shared link is remembered; a stale id (branch removed or hidden) is forgotten.\n useEffect(() => {\n if (!ready || !raw || !locations.length) return\n try {\n if (location) storage()?.setItem(storageKey, raw)\n else storage()?.removeItem(storageKey)\n } catch { /* storage blocked */ }\n }, [ready, raw, locations, location, storageKey])\n\n const write = useCallback(\n (next: string | null) => {\n try {\n if (next) storage()?.setItem(storageKey, next)\n else storage()?.removeItem(storageKey)\n } catch {\n // Storage full or blocked: the URL (if synced) and React state still carry the choice.\n }\n if (syncUrl && typeof history !== 'undefined') {\n const url = new URL(window.location.href)\n if (next) url.searchParams.set(param, next)\n else url.searchParams.delete(param)\n history.replaceState(history.state, '', url)\n }\n setRaw(next)\n window.dispatchEvent(new Event(CHANGE_EVENT))\n },\n [param, storageKey, syncUrl],\n )\n\n const select = useCallback((next: string) => write(next), [write])\n const clear = useCallback(() => write(null), [write])\n return { id, location, ready, select, clear }\n}\n","import {\n useEffect,\n useId,\n useState,\n type ComponentPropsWithoutRef,\n type FormEvent,\n type ReactNode,\n} from 'react'\nimport { formatMoney, type Money, type ShopBranch } from '@asteby/storefront'\nimport { directionsUrl, openStatus, type GeoPoint, type OpeningHours, type OpenStatus as OpenStatusData } from '@asteby/storefront/geo'\nimport { useOptionalStorefront } from './context.js'\nimport { useGeolocation } from './geolocation.js'\nimport { SELECTED_LOCATION_PARAM } from './selected-location.js'\n\n// Headless: no styles and no class names. Every component renders `null` when there are no branches.\n\nconst EMPTY: readonly ShopBranch[] = []\n\n/** `locations` prop, else `shop.branches` from the provider, else none. */\nfunction useLocationsOrShop<L extends ShopBranch>(locations: readonly L[] | undefined): readonly L[] {\n const sf = useOptionalStorefront()\n return locations ?? ((sf?.shop?.branches ?? EMPTY) as readonly L[])\n}\n\n// ---------------------------------------------------------------------------\n// LocationList\n// ---------------------------------------------------------------------------\n\nexport type LocationItemState = { index: number; selected: boolean }\n\nexport type LocationListProps<L extends ShopBranch = ShopBranch> = {\n locations?: readonly L[]\n /** Marks one item with `data-selected` / `aria-current`. */\n selectedId?: string | null\n /** Renders each item's content. Defaults to name and address. */\n children?: (location: L, state: LocationItemState) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'ul'>, 'children'>\n\n/** `<ul>` of branches; the content of every `<li>` is yours (render prop). */\nexport function LocationList<L extends ShopBranch = ShopBranch>({ locations, selectedId, children, ...rest }: LocationListProps<L>) {\n const list = useLocationsOrShop(locations)\n if (!list.length) return null\n return (\n <ul {...rest}>\n {list.map((loc, index) => {\n const selected = loc.id === selectedId\n return (\n <li key={loc.id} data-selected={selected || undefined} aria-current={selected || undefined}>\n {children ? children(loc, { index, selected }) : (\n <>\n <span>{loc.name}</span> <span>{loc.address}</span>\n </>\n )}\n </li>\n )\n })}\n </ul>\n )\n}\n\n// ---------------------------------------------------------------------------\n// LocationPicker\n// ---------------------------------------------------------------------------\n\nexport type LocationPickerProps<L extends ShopBranch = ShopBranch> = {\n /** Accessible name of the group (rendered as `<legend>`). */\n legend: ReactNode\n locations?: readonly L[]\n /** Controlled value (branch id). */\n value?: string | null\n defaultValue?: string | null\n onChange?: (id: string, location: L) => void\n /** Radio `name` (default `sucursal`, the same param `useSelectedLocation` reads). */\n name?: string\n /** Content of each option next to its radio. Defaults to name and address. */\n children?: (location: L, state: { checked: boolean }) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'fieldset'>, 'children' | 'onChange' | 'defaultValue'>\n\n/**\n * `<fieldset>` of native radio buttons: keyboard and screen-reader behaviour comes from the browser, and inside\n * a GET `<form>` it submits `?sucursal=<id>` without JavaScript.\n */\nexport function LocationPicker<L extends ShopBranch = ShopBranch>({\n legend, locations, value, defaultValue = null, onChange, name = SELECTED_LOCATION_PARAM, children, ...rest\n}: LocationPickerProps<L>) {\n const list = useLocationsOrShop(locations)\n const [inner, setInner] = useState<string | null>(defaultValue)\n if (!list.length) return null\n const current = value !== undefined ? value : inner\n return (\n <fieldset {...rest}>\n <legend>{legend}</legend>\n {list.map((loc) => {\n const checked = loc.id === current\n return (\n <label key={loc.id} data-checked={checked || undefined}>\n <input\n type=\"radio\"\n name={name}\n value={loc.id}\n checked={checked}\n onChange={() => {\n if (value === undefined) setInner(loc.id)\n onChange?.(loc.id, loc)\n }}\n />{' '}\n {children ? children(loc, { checked }) : (\n <>\n <span>{loc.name}</span> <span>{loc.address}</span>\n </>\n )}\n </label>\n )\n })}\n </fieldset>\n )\n}\n\n// ---------------------------------------------------------------------------\n// OpenStatus\n// ---------------------------------------------------------------------------\n\nexport type OpenStatusLabels = { open: string; closed: string }\n\nexport type OpenStatusProps = {\n /** Reads `opening_hours` and `timezone` from it. */\n location?: Pick<ShopBranch, 'opening_hours' | 'timezone'>\n hours?: OpeningHours\n /** IANA zone (default: the branch's, else `America/Mexico_City`). */\n timezone?: string\n /** Fixed instant, for tests and SSR snapshots. Without it the status is computed after mount and refreshed every minute. */\n now?: Date\n labels?: Partial<OpenStatusLabels>\n children?: (status: OpenStatusData) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'span'>, 'children'>\n\nconst DEFAULT_TZ = 'America/Mexico_City'\n\n/**\n * \"Abierto\" / \"Cerrado\" from `openStatus`. The clock makes server and client disagree, so without `now` it\n * renders nothing until mounted. Renders `null` without hours or with an unknown time zone.\n */\nexport function OpenStatus({ location, hours, timezone, now, labels, children, ...rest }: OpenStatusProps) {\n const h = hours ?? location?.opening_hours\n const tz = timezone ?? location?.timezone ?? DEFAULT_TZ\n const [tick, setTick] = useState<Date | null>(null)\n useEffect(() => {\n if (now) return\n setTick(new Date())\n const t = setInterval(() => setTick(new Date()), 60_000)\n return () => clearInterval(t)\n }, [now])\n const at = now ?? tick\n if (!h || !at) return null\n let status: OpenStatusData\n try {\n status = openStatus(h, tz, at)\n } catch {\n return null // RangeError: unknown time zone\n }\n const text = { open: 'Abierto', closed: 'Cerrado', ...labels }\n return (\n <span data-state={status.open ? 'open' : 'closed'} {...rest}>\n {children ? children(status) : status.open ? text.open : text.closed}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// DirectionsLink\n// ---------------------------------------------------------------------------\n\nexport type DirectionsLinkProps = {\n location: Pick<ShopBranch, 'lat' | 'lng' | 'address' | 'city'>\n provider?: 'google' | 'apple' | 'geo'\n children?: ReactNode\n} & Omit<ComponentPropsWithoutRef<'a'>, 'href' | 'children'>\n\n/** Link to directions in the maps app. `null` when the branch has neither coordinates nor address. */\nexport function DirectionsLink({ location, provider, children = 'Cómo llegar', ...rest }: DirectionsLinkProps) {\n const href = directionsUrl(location, provider ? { provider } : {})\n if (!href) return null\n return (\n <a target=\"_blank\" rel=\"noopener noreferrer\" {...rest} href={href}>\n {children}\n </a>\n )\n}\n\n// ---------------------------------------------------------------------------\n// PickupOption\n// ---------------------------------------------------------------------------\n\nexport type PickupInfo<L extends ShopBranch = ShopBranch> = {\n location: L\n /** `null` = free. Amount as sent by OPS; nothing is calculated here. */\n fee: Money | null\n free: boolean\n /** Formatted `fee` (`null` when free). */\n feeText: string | null\n prepDays: number\n}\n\nexport type PickupOptionProps<L extends ShopBranch = ShopBranch> = {\n location: L\n locale?: string\n children?: (info: PickupInfo<L>) => ReactNode\n} & Omit<ComponentPropsWithoutRef<'span'>, 'children'>\n\nconst readyText = (days: number) => (days <= 0 ? 'listo hoy' : days === 1 ? 'listo en 1 día' : `listo en ${days} días`)\n\n/** \"Recoge en sucursal\" terms: fee and preparation time. `null` when the branch does not offer pickup. */\nexport function PickupOption<L extends ShopBranch = ShopBranch>({ location, locale, children, ...rest }: PickupOptionProps<L>) {\n const sf = useOptionalStorefront()\n const p = location.pickup\n if (!p?.enabled) return null\n const free = !p.fee || Number(p.fee.amount) === 0\n const feeText = free ? null : formatMoney(p.fee!, locale ?? sf?.locale)\n const info: PickupInfo<L> = { location, fee: free ? null : p.fee, free, feeText, prepDays: p.prep_days }\n return (\n <span {...rest}>\n {children ? children(info) : `Recoge en sucursal · ${free ? 'gratis' : feeText} · ${readyText(p.prep_days)}`}\n </span>\n )\n}\n\n// ---------------------------------------------------------------------------\n// NearestLocationForm\n// ---------------------------------------------------------------------------\n\nexport type NearestLocationFormLabels = { postalCode: string; submit: string; locate: string; locating: string }\n\nexport type NearestLocationFormProps<L extends ShopBranch = ShopBranch> = {\n locations?: readonly L[]\n /** Destination of the GET (default: the current page). */\n action?: string\n /** Query param and input name (default `cp`). */\n name?: string\n defaultValue?: string\n /** With JavaScript: intercept the submit and receive the postal code. Without it the browser navigates to `?cp=`. */\n onSubmitPostalCode?: (postalCode: string, event: FormEvent<HTMLFormElement>) => void\n /** Shows a \"use my location\" button (only when the browser supports it); it asks permission on click. */\n onLocate?: (point: GeoPoint) => void\n labels?: Partial<NearestLocationFormLabels>\n} & Omit<ComponentPropsWithoutRef<'form'>, 'action' | 'method' | 'onSubmit' | 'defaultValue'>\n\n/**\n * `<form method=\"get\">` with a postal-code field: works without JavaScript (navigates to `?cp=06000`). Add\n * `onSubmitPostalCode` / `onLocate` to enhance it. Renders `null` when there are no branches.\n */\nexport function NearestLocationForm<L extends ShopBranch = ShopBranch>({\n locations, action, name = 'cp', defaultValue, onSubmitPostalCode, onLocate, labels, children, ...rest\n}: NearestLocationFormProps<L>) {\n const list = useLocationsOrShop(locations)\n const id = useId()\n const geo = useGeolocation()\n if (!list.length) return null\n const text = { postalCode: 'Código postal', submit: 'Buscar sucursales', locate: 'Usar mi ubicación', locating: 'Buscando…', ...labels }\n return (\n <form\n method=\"get\"\n {...(action !== undefined ? { action } : {})}\n {...rest}\n onSubmit={onSubmitPostalCode ? (e) => {\n e.preventDefault()\n const value = new FormData(e.currentTarget).get(name)\n onSubmitPostalCode(typeof value === 'string' ? value.trim() : '', e)\n } : undefined}\n >\n <label htmlFor={id}>{text.postalCode}</label>{' '}\n <input\n id={id}\n name={name}\n type=\"text\"\n inputMode=\"numeric\"\n autoComplete=\"postal-code\"\n pattern=\"[0-9]{5}\"\n maxLength={5}\n required\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n />{' '}\n <button type=\"submit\">{text.submit}</button>\n {onLocate && geo.supported && (\n <button\n type=\"button\"\n disabled={geo.status === 'locating'}\n onClick={() => void geo.request().then((p) => p && onLocate(p))}\n >\n {geo.status === 'locating' ? text.locating : text.locate}\n </button>\n )}\n {geo.error && <span role=\"alert\">{geo.error.message}</span>}\n {children}\n </form>\n )\n}\n"]}