@neowhale/storefront 0.2.9 → 0.2.11

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/react/context.ts","../../src/react/stores/cart-store.ts","../../src/react/stores/auth-store.ts","../../src/react/hooks/use-analytics.ts","../../src/react/hooks/use-auth.ts","../../src/react/components/analytics-tracker.tsx","../../src/react/hooks/use-cart.ts","../../src/react/components/cart-initializer.tsx","../../src/react/components/auth-initializer.tsx","../../src/react/components/pixel-initializer.tsx","../../src/react/provider.tsx","../../src/react/hooks/use-products.ts","../../src/react/hooks/use-client.ts","../../src/react/hooks/use-customer.ts","../../src/react/hooks/use-checkout.ts","../../src/react/hooks/use-search.ts","../../src/react/hooks/use-categories.ts","../../src/react/hooks/use-loyalty.ts","../../src/react/hooks/use-reviews.ts","../../src/react/hooks/use-wishlist.ts","../../src/react/hooks/use-recommendations.ts","../../src/react/hooks/use-locations.ts","../../src/react/hooks/use-shipping.ts","../../src/react/hooks/use-coupons.ts","../../src/react/components/qr-landing-page.tsx","../../src/react/components/landing-page.tsx"],"names":["createStore","persist","useContext","useRef","useStore","useShallow","useEffect","useCallback","useMemo","useState","jsx","jsxs","DefaultLoading","DefaultNotFound","DefaultExpired","DefaultError","containerStyle"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext } from 'react'\nimport type { WhaleClient } from '../client.js'\nimport type { Product } from '../types.js'\nimport type { CartStore } from './stores/cart-store.js'\nimport type { AuthStore } from './stores/auth-store.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\n\nexport interface WhaleContextValue {\n client: WhaleClient\n config: {\n storeId: string\n apiKey: string\n gatewayUrl: string\n proxyPath: string\n mediaSigningSecret: string\n supabaseHost: string\n storagePrefix: string\n sessionTtl: number\n debug: boolean\n trackingEnabled: boolean\n recordingRate: number\n }\n cartStore: CartStore\n authStore: AuthStore\n /** Products fetched server-side and passed via provider */\n products: Product[]\n /** Pixel manager — set after storefront config loads */\n pixelManager: PixelManager | null\n}\n\nexport const WhaleContext = createContext<WhaleContextValue | null>(null)\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Cart, CartItem, TaxBreakdown, PaymentData, Order } from '../../types.js'\n\nexport interface CartState {\n cartId: string | null\n items: CartItem[]\n itemCount: number\n subtotal: number\n taxAmount: number\n total: number\n taxBreakdown: TaxBreakdown[]\n cartOpen: boolean\n cartLoading: boolean\n productImages: Record<string, string>\n addItemInFlight: boolean\n}\n\nexport interface CartActions {\n openCart: () => void\n closeCart: () => void\n toggleCart: () => void\n initCart: () => Promise<void>\n syncCart: () => Promise<void>\n addItem: (\n productId: string,\n quantity: number,\n tier?: string,\n unitPrice?: number,\n imageUrl?: string | null,\n productName?: string\n ) => Promise<void>\n updateQuantity: (itemId: string, quantity: number) => Promise<void>\n removeItem: (itemId: string, productName?: string) => Promise<void>\n clearCart: () => void\n checkout: (customerEmail?: string, payment?: PaymentData) => Promise<Order>\n}\n\nexport type CartStore = ReturnType<typeof createCartStore>\n\nexport function createCartStore(\n client: WhaleClient,\n storagePrefix: string,\n onAddToCart?: (productId: string, productName: string, quantity: number, price: number, tier?: string) => void,\n onRemoveFromCart?: (productId: string, productName: string) => void\n) {\n return createStore<CartState & CartActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n cartOpen: false,\n cartLoading: false,\n productImages: {},\n addItemInFlight: false,\n\n // ── Cart UI ──────────────────────────────────────────────────────\n openCart: () => set({ cartOpen: true }),\n closeCart: () => set({ cartOpen: false }),\n toggleCart: () => set((s) => ({ cartOpen: !s.cartOpen })),\n\n // ── Cart data ────────────────────────────────────────────────────\n initCart: async () => {\n const { cartId, syncCart } = get()\n\n if (cartId) {\n try {\n await syncCart()\n } catch {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n }\n return\n }\n\n try {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n } catch (err) {\n console.error('[whale-storefront] initCart failed:', err)\n }\n },\n\n syncCart: async () => {\n const { cartId, productImages } = get()\n if (!cartId) return\n\n try {\n const cart = await client.getCart(cartId)\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n } catch (err) {\n console.error('[whale-storefront] syncCart failed:', err)\n throw err\n }\n },\n\n addItem: async (productId, quantity, tier, unitPrice, imageUrl, productName) => {\n // Race-condition guard: prevent double-click\n if (get().addItemInFlight) return\n set({ cartLoading: true, addItemInFlight: true })\n\n try {\n let { cartId } = get()\n\n if (!cartId) {\n await get().initCart()\n cartId = get().cartId\n }\n\n if (!cartId) throw new Error('Could not initialise cart')\n\n if (imageUrl) {\n set((s) => ({ productImages: { ...s.productImages, [productId]: imageUrl } }))\n }\n\n try {\n await client.addToCart(cartId, productId, quantity, { tier, unitPrice })\n } catch (err: unknown) {\n // Cart expired (404/410) — auto-recover\n const status = (err as { status?: number }).status\n if (status === 404 || status === 410) {\n const newCart = await client.createCart()\n set({ cartId: newCart.id })\n await client.addToCart(newCart.id, productId, quantity, { tier, unitPrice })\n } else {\n throw err\n }\n }\n\n await get().syncCart()\n\n // Analytics callback\n onAddToCart?.(productId, productName || '', quantity, unitPrice || 0, tier)\n } finally {\n set({ cartLoading: false, addItemInFlight: false })\n }\n },\n\n updateQuantity: async (itemId, quantity) => {\n set({ cartLoading: true })\n try {\n const { cartId } = get()\n if (!cartId) return\n await client.updateCartItem(cartId, itemId, quantity)\n await get().syncCart()\n } finally {\n set({ cartLoading: false })\n }\n },\n\n removeItem: async (itemId, productName) => {\n set({ cartLoading: true })\n try {\n const { cartId, items } = get()\n if (!cartId) return\n\n const item = items.find((i) => i.id === itemId)\n await client.removeCartItem(cartId, itemId)\n await get().syncCart()\n\n if (item) {\n onRemoveFromCart?.(item.product_id, productName || item.product_name)\n }\n } finally {\n set({ cartLoading: false })\n }\n },\n\n clearCart: () => {\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n })\n },\n\n checkout: async (customerEmail, payment) => {\n const { cartId } = get()\n if (!cartId) throw new Error('No active cart')\n\n set({ cartLoading: true })\n try {\n const order = await client.checkout(cartId, customerEmail, payment)\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n cartOpen: false,\n })\n return order\n } finally {\n set({ cartLoading: false })\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-cart`,\n partialize: (state) => ({\n cartId: state.cartId,\n productImages: state.productImages,\n }),\n }\n )\n )\n}\n\nfunction applyCart(\n set: (partial: Partial<CartState>) => void,\n get: () => CartState,\n cart: Cart\n) {\n const productImages = get().productImages\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n cartId: cart.id,\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n}\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Customer } from '../../types.js'\n\nexport interface AuthState {\n customer: Customer | null\n sessionToken: string | null\n sessionExpiresAt: string | null\n authLoading: boolean\n}\n\nexport interface AuthActions {\n sendOTP: (email: string) => Promise<boolean>\n verifyOTP: (email: string, code: string) => Promise<boolean>\n restoreSession: () => Promise<void>\n isSessionValid: () => boolean\n logout: () => void\n fetchCustomer: (id: string) => Promise<void>\n}\n\nexport type AuthStore = ReturnType<typeof createAuthStore>\n\nexport function createAuthStore(client: WhaleClient, storagePrefix: string) {\n return createStore<AuthState & AuthActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n customer: null,\n sessionToken: null,\n sessionExpiresAt: null,\n authLoading: false,\n\n // ── Actions ──────────────────────────────────────────────────────\n sendOTP: async (email) => {\n set({ authLoading: true })\n try {\n const res = await client.sendCode(email)\n return res.sent\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Could not send code'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n verifyOTP: async (email, code) => {\n set({ authLoading: true })\n try {\n const res = await client.verifyCode(email, code)\n client.setSessionToken(res.token_hash)\n set({\n sessionToken: res.token_hash,\n sessionExpiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),\n })\n\n if (res.customer?.id) {\n try {\n const full = await client.getCustomer(res.customer.id)\n set({ customer: full })\n } catch {\n set({ customer: res.customer })\n }\n }\n\n return res.needs_profile ?? false\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Verification failed'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n restoreSession: async () => {\n const { sessionToken, sessionExpiresAt, customer } = get()\n if (!sessionToken || !sessionExpiresAt) return\n\n if (new Date(sessionExpiresAt) <= new Date()) {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n return\n }\n\n client.setSessionToken(sessionToken)\n\n if (customer?.id) {\n try {\n const fresh = await client.getCustomer(customer.id)\n set({ customer: fresh })\n } catch {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n }\n }\n },\n\n isSessionValid: () => {\n const { sessionToken, sessionExpiresAt } = get()\n if (!sessionToken || !sessionExpiresAt) return false\n return new Date(sessionExpiresAt) > new Date()\n },\n\n logout: () => {\n client.setSessionToken(null)\n set({ customer: null, sessionToken: null, sessionExpiresAt: null })\n },\n\n fetchCustomer: async (id) => {\n try {\n const customer = await client.getCustomer(id)\n set({ customer })\n } catch (err) {\n console.error('[whale-storefront] fetchCustomer failed:', err)\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-auth`,\n partialize: (state) => ({\n sessionToken: state.sessionToken,\n sessionExpiresAt: state.sessionExpiresAt,\n customer: state.customer\n ? {\n id: state.customer.id,\n email: state.customer.email,\n first_name: state.customer.first_name,\n last_name: state.customer.last_name,\n phone: state.customer.phone,\n loyalty_points: state.customer.loyalty_points,\n loyalty_tier: state.customer.loyalty_tier,\n total_spent: state.customer.total_spent,\n total_orders: state.customer.total_orders,\n }\n : null,\n }),\n }\n )\n )\n}\n","'use client'\n\nimport { useContext, useRef, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { EventType } from '../../types.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\n\ninterface SessionData {\n id: string\n createdAt: number\n}\n\nexport function useAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAnalytics must be used within <WhaleProvider>')\n\n const { client, config, pixelManager } = ctx\n const sessionPromiseRef = useRef<Promise<string> | null>(null)\n const sessionKey = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n\n const getOrCreateSession = useCallback(async (): Promise<string> => {\n if (sessionPromiseRef.current) return sessionPromiseRef.current\n\n sessionPromiseRef.current = (async () => {\n // Check stored session\n try {\n const raw = localStorage.getItem(sessionKey)\n if (raw) {\n const stored: SessionData = JSON.parse(raw)\n if (Date.now() - stored.createdAt < config.sessionTtl) {\n // Refresh last_active silently\n client.updateSession(stored.id, { last_active_at: new Date().toISOString() }).catch(() => {})\n return stored.id\n }\n }\n } catch {\n // ignore\n }\n\n // Create new\n try {\n const session = await client.createSession({\n user_agent: navigator.userAgent,\n referrer: document.referrer || undefined,\n })\n if (session?.id) {\n localStorage.setItem(sessionKey, JSON.stringify({ id: session.id, createdAt: Date.now() }))\n return session.id\n }\n } catch {\n // ignore\n }\n\n // Fallback local ID\n const fallbackId = `local-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\n localStorage.setItem(sessionKey, JSON.stringify({ id: fallbackId, createdAt: Date.now() }))\n return fallbackId\n })()\n\n sessionPromiseRef.current.finally(() => {\n sessionPromiseRef.current = null\n })\n\n return sessionPromiseRef.current\n }, [client, config.sessionTtl, sessionKey])\n\n const trackingEnabled = config.trackingEnabled\n\n const track = useCallback(\n async (eventType: EventType, data: Record<string, unknown> = {}) => {\n if (!trackingEnabled) return\n\n // Generate shared event_id for Meta CAPI deduplication\n const eventId = crypto.randomUUID()\n\n // Fire pixel events instantly (client-side) with eventID for fbq dedup\n pixelManager?.track(eventType, { ...data, eventID: eventId })\n\n // Then fire gateway event (server-side attribution) with same event_id\n try {\n const sessionId = await getOrCreateSession()\n await client.trackEvent({\n session_id: sessionId,\n event_type: eventType,\n event_data: { ...data, event_id: eventId },\n })\n } catch {\n // fire-and-forget\n }\n },\n [client, getOrCreateSession, pixelManager, trackingEnabled]\n )\n\n const linkCustomer = useCallback(\n async (customerId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { customer_id: customerId })\n } catch {\n // ignore\n }\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const trackPageView = useCallback(\n (url: string, referrer?: string) => {\n track('page_view', { url, referrer })\n },\n [track]\n )\n\n const trackProductView = useCallback(\n (productId: string, productName: string, category: string, price?: number) => {\n track('product_view', { product_id: productId, product_name: productName, category, price })\n },\n [track]\n )\n\n const trackCategoryView = useCallback(\n (categoryId: string, categoryName: string) => {\n track('category_view', { category_id: categoryId, category_name: categoryName })\n },\n [track]\n )\n\n const trackSearch = useCallback(\n (query: string, resultCount?: number) => {\n track('search', { query, result_count: resultCount })\n },\n [track]\n )\n\n const trackBeginCheckout = useCallback(\n (cartId: string, total: number, itemCount: number) => {\n track('begin_checkout', { cart_id: cartId, total, item_count: itemCount })\n },\n [track]\n )\n\n const trackPurchase = useCallback(\n (orderId: string, orderNumber: string, total: number) => {\n track('purchase', { order_id: orderId, order_number: orderNumber, total })\n },\n [track]\n )\n\n const trackAddToCart = useCallback(\n (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n track('add_to_cart', { product_id: productId, product_name: productName, quantity, price, tier })\n },\n [track]\n )\n\n const trackRemoveFromCart = useCallback(\n (productId: string, productName: string) => {\n track('remove_from_cart', { product_id: productId, product_name: productName })\n },\n [track]\n )\n\n return {\n track,\n trackPageView,\n trackProductView,\n trackCategoryView,\n trackSearch,\n trackBeginCheckout,\n trackPurchase,\n trackAddToCart,\n trackRemoveFromCart,\n linkCustomer,\n getOrCreateSession,\n /** Whether tracking is globally enabled for this storefront */\n trackingEnabled,\n /** Configured recording sample rate (0–1) for behavioral session replays */\n recordingRate: config.recordingRate,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\n\nexport function useAuth() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAuth must be used within <WhaleProvider>')\n\n return useStore(ctx.authStore, useShallow((s) => ({\n customer: s.customer,\n authLoading: s.authLoading,\n sessionToken: s.sessionToken,\n isAuthenticated: s.isSessionValid(),\n sendCode: s.sendOTP,\n verifyCode: s.verifyOTP,\n restoreSession: s.restoreSession,\n logout: s.logout,\n fetchCustomer: s.fetchCustomer,\n })))\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { useAnalytics } from '../hooks/use-analytics.js'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Auto-tracks page views on pathname change and links customer sessions.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n *\n * When `config.trackingEnabled` is false the component renders nothing and\n * skips all side-effects — the underlying hook guards individual calls too,\n * but short-circuiting here avoids session creation entirely.\n */\nexport function AnalyticsTracker({ pathname }: { pathname: string }) {\n const ctx = useContext(WhaleContext)\n const { trackPageView, linkCustomer } = useAnalytics()\n const { customer } = useAuth()\n const prevPathname = useRef<string | null>(null)\n const linkedCustomerId = useRef<string | null>(null)\n\n const trackingEnabled = ctx?.config.trackingEnabled ?? true\n\n // Track page views on route change\n useEffect(() => {\n if (!trackingEnabled) return\n if (pathname === prevPathname.current) return\n const referrer = prevPathname.current || (typeof document !== 'undefined' ? document.referrer : '')\n prevPathname.current = pathname\n trackPageView(pathname, referrer || undefined)\n }, [pathname, trackPageView, trackingEnabled])\n\n // Link customer session on login\n useEffect(() => {\n if (!trackingEnabled) return\n if (customer?.id && customer.id !== linkedCustomerId.current) {\n linkedCustomerId.current = customer.id\n linkCustomer(customer.id)\n }\n }, [customer?.id, linkCustomer, trackingEnabled])\n\n return null\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\nimport type { CartState, CartActions } from '../stores/cart-store.js'\n\ntype CartReturn = Pick<\n CartState & CartActions,\n 'cartId' | 'cartOpen' | 'cartLoading' | 'items' | 'itemCount' | 'subtotal' | 'taxAmount' | 'total' | 'taxBreakdown' | 'productImages' |\n 'addItem' | 'removeItem' | 'updateQuantity' | 'toggleCart' | 'openCart' | 'closeCart' | 'checkout' | 'initCart' | 'syncCart' | 'clearCart'\n>\n\nexport function useCart() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCart must be used within <WhaleProvider>')\n\n return useStore(ctx.cartStore, useShallow((s) => ({\n cartId: s.cartId,\n items: s.items,\n itemCount: s.itemCount,\n subtotal: s.subtotal,\n taxAmount: s.taxAmount,\n total: s.total,\n taxBreakdown: s.taxBreakdown,\n cartOpen: s.cartOpen,\n cartLoading: s.cartLoading,\n productImages: s.productImages,\n addItem: s.addItem,\n removeItem: s.removeItem,\n updateQuantity: s.updateQuantity,\n toggleCart: s.toggleCart,\n openCart: s.openCart,\n closeCart: s.closeCart,\n initCart: s.initCart,\n syncCart: s.syncCart,\n clearCart: s.clearCart,\n checkout: s.checkout,\n })))\n}\n\n/** Granular selector — only re-renders on count change */\nexport function useCartItemCount(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartItemCount must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.itemCount)\n}\n\n/** Granular selector — only re-renders on total change */\nexport function useCartTotal(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartTotal must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.total)\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useCart } from '../hooks/use-cart.js'\n\n/**\n * Hydrates cart from gateway on mount if a cartId is persisted.\n * Rendered internally by WhaleProvider.\n */\nexport function CartInitializer() {\n const { cartId, syncCart } = useCart()\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n if (cartId) {\n syncCart().catch(() => {\n // Cart may have expired — that's fine, addItem will auto-recover\n })\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Restores auth session on mount — syncs persisted token to client.\n * Rendered internally by WhaleProvider.\n */\nexport function AuthInitializer() {\n const { restoreSession } = useAuth()\n const restored = useRef(false)\n\n useEffect(() => {\n if (restored.current) return\n restored.current = true\n restoreSession()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { PixelManager } from '../../pixels/pixel-manager.js'\nimport type { StorefrontConfig } from '../../pixels/types.js'\n\nexport interface PixelInitializerProps {\n onReady: (manager: PixelManager) => void\n onTheme?: (theme: Record<string, unknown>) => void\n}\n\n/**\n * Fetches storefront config on mount and initializes pixel providers + theme.\n * Sets pixelManager on context so useAnalytics can dispatch events to it.\n * If the config includes a `theme` field, calls onTheme so the provider can apply it.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n */\nexport function PixelInitializer({ onReady, onTheme }: PixelInitializerProps) {\n const ctx = useContext(WhaleContext)\n const initialized = useRef(false)\n\n useEffect(() => {\n if (!ctx || initialized.current) return\n if (typeof window === 'undefined') return\n initialized.current = true\n\n const { client } = ctx\n\n client.fetchStorefrontConfig().then(async (config: StorefrontConfig) => {\n // Apply theme if present\n if (config.theme && onTheme) {\n onTheme(config.theme)\n }\n\n // Initialize pixels if tracking is enabled\n if (ctx.config.trackingEnabled && config.pixels && config.pixels.length > 0) {\n const manager = new PixelManager(config.pixels)\n await manager.initialize()\n onReady(manager)\n }\n }).catch(() => {\n // Storefront config fetch failed — degrade silently\n })\n }, [ctx, onReady, onTheme])\n\n return null\n}\n","'use client'\n\nimport { useMemo, useState, useCallback, type ReactNode } from 'react'\nimport { usePathname } from 'next/navigation'\nimport { WhaleClient } from '../client.js'\nimport type { WhaleStorefrontConfig, Product } from '../types.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\nimport { WhaleContext, type WhaleContextValue } from './context.js'\nimport { createCartStore } from './stores/cart-store.js'\nimport { createAuthStore } from './stores/auth-store.js'\nimport { AnalyticsTracker } from './components/analytics-tracker.js'\nimport { CartInitializer } from './components/cart-initializer.js'\nimport { AuthInitializer } from './components/auth-initializer.js'\nimport { PixelInitializer } from './components/pixel-initializer.js'\nimport { ThemeProvider, type ThemeTokens } from '@neowhale/ui'\n\n/** Read a boolean env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envBool(name: string): boolean | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n return raw !== '0' && raw.toLowerCase() !== 'false'\n}\n\n/** Read a numeric env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envNumber(name: string): number | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n const n = Number(raw)\n return Number.isFinite(n) ? n : undefined\n}\n\nexport interface WhaleProviderProps extends WhaleStorefrontConfig {\n children: ReactNode\n /** Server-fetched products passed to client for hooks */\n products?: Product[]\n /** Manual theme overrides — merged with store theme fetched from storefront config */\n theme?: Partial<ThemeTokens>\n}\n\nexport function WhaleProvider({\n children,\n products = [],\n theme: themeProp,\n storeId,\n apiKey,\n gatewayUrl,\n proxyPath,\n mediaSigningSecret,\n supabaseHost,\n storagePrefix,\n sessionTtl,\n debug,\n trackingEnabled,\n recordingRate,\n}: WhaleProviderProps) {\n const pathname = usePathname()\n const [pixelManager, setPixelManager] = useState<PixelManager | null>(null)\n const [storeTheme, setStoreTheme] = useState<Partial<ThemeTokens> | undefined>(undefined)\n\n const handlePixelReady = useCallback((manager: PixelManager) => {\n setPixelManager(manager)\n }, [])\n\n const handleTheme = useCallback((theme: Record<string, unknown>) => {\n setStoreTheme(theme as Partial<ThemeTokens>)\n }, [])\n\n const ctx = useMemo<WhaleContextValue>(() => {\n const resolvedConfig = {\n storeId,\n apiKey,\n gatewayUrl: gatewayUrl || 'https://whale-gateway.fly.dev',\n proxyPath: proxyPath || '/api/gw',\n mediaSigningSecret: mediaSigningSecret || '',\n supabaseHost: supabaseHost || '',\n storagePrefix: storagePrefix || 'whale',\n sessionTtl: sessionTtl || 30 * 60 * 1000,\n debug: debug || false,\n trackingEnabled: trackingEnabled ?? envBool('NEXT_PUBLIC_TRACKING_ENABLED') ?? true,\n recordingRate: recordingRate ?? envNumber('NEXT_PUBLIC_RECORDING_RATE') ?? 0.1,\n }\n\n const client = new WhaleClient({\n storeId,\n apiKey,\n gatewayUrl: resolvedConfig.gatewayUrl,\n proxyPath: resolvedConfig.proxyPath,\n })\n\n // Analytics callbacks wired into cart store\n // These get called by the cart store on add/remove and fire analytics events.\n // We can't use the useAnalytics hook here (not in a component), so we use\n // the client directly — the AnalyticsTracker manages sessions.\n const cartStore = createCartStore(client, resolvedConfig.storagePrefix)\n const authStore = createAuthStore(client, resolvedConfig.storagePrefix)\n\n return {\n client,\n config: resolvedConfig,\n cartStore,\n authStore,\n products,\n pixelManager: null,\n }\n // Only recreate when identity changes — storeId + apiKey\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storeId, apiKey])\n\n // Update products and pixelManager on the context when they change\n const value = useMemo<WhaleContextValue>(\n () => ({ ...ctx, products, pixelManager }),\n [ctx, products, pixelManager]\n )\n\n // Merge store-fetched theme with manual overrides (manual takes precedence)\n const mergedTheme = useMemo<Partial<ThemeTokens> | undefined>(() => {\n if (!storeTheme && !themeProp) return undefined\n return { ...storeTheme, ...themeProp }\n }, [storeTheme, themeProp])\n\n return (\n <WhaleContext.Provider value={value}>\n <ThemeProvider theme={mergedTheme}>\n <AuthInitializer />\n <CartInitializer />\n <AnalyticsTracker pathname={pathname} />\n <PixelInitializer onReady={handlePixelReady} onTheme={handleTheme} />\n {children}\n </ThemeProvider>\n </WhaleContext.Provider>\n )\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\n/**\n * Returns products passed via WhaleProvider.\n * Optionally filters by category or search.\n */\nexport function useProducts(opts?: {\n categoryId?: string\n search?: string\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProducts must be used within <WhaleProvider>')\n\n const allProducts = ctx.products\n\n const products = useMemo(() => {\n let result = allProducts\n if (opts?.categoryId) {\n result = result.filter((p) => p.primary_category_id === opts.categoryId)\n }\n if (opts?.search) {\n const q = opts.search.toLowerCase()\n result = result.filter(\n (p) =>\n p.name.toLowerCase().includes(q) ||\n p.description?.toLowerCase().includes(q) ||\n p.slug.toLowerCase().includes(q)\n )\n }\n return result\n }, [allProducts, opts?.categoryId, opts?.search])\n\n return {\n products,\n allProducts,\n loading: false,\n }\n}\n\n/**\n * Returns a single product by slug from the provider's product list.\n */\nexport function useProduct(slug: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProduct must be used within <WhaleProvider>')\n\n const product = useMemo(() => {\n if (!slug) return null\n return ctx.products.find((p) => p.slug === slug) ?? null\n }, [ctx.products, slug])\n\n return {\n product,\n loading: false,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { WhaleClient } from '../../client.js'\n\nexport function useWhaleClient(): WhaleClient {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWhaleClient must be used within <WhaleProvider>')\n return ctx.client\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { Order, CustomerAnalytics } from '../../types.js'\n\nexport function useCustomerOrders() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerOrders must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [orders, setOrders] = useState<Order[]>([])\n const [loading, setLoading] = useState(false)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setOrders([])\n return\n }\n setLoading(true)\n try {\n const data = await ctx.client.getCustomerOrders(customer.id)\n setOrders(data)\n } catch {\n setOrders([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { orders, loading, refresh }\n}\n\nexport function useCustomerAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerAnalytics must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [analytics, setAnalytics] = useState<CustomerAnalytics | null>(null)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (!customer?.id) {\n setAnalytics(null)\n return\n }\n setLoading(true)\n const name = `${customer.first_name} ${customer.last_name}`.trim()\n ctx.client\n .getCustomerAnalytics(customer.id, name || undefined)\n .then(setAnalytics)\n .catch(() => setAnalytics(null))\n .finally(() => setLoading(false))\n }, [customer?.id, customer?.first_name, customer?.last_name, ctx.client])\n\n return { analytics, loading }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { CheckoutSession, Order, Address, PaymentData } from '../../types.js'\n\nexport function useCheckout() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCheckout must be used within <WhaleProvider>')\n\n const [session, setSession] = useState<CheckoutSession | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const createSession = useCallback(async (params: {\n cart_id: string\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.createCheckoutSession(params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const updateSession = useCallback(async (params: {\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n }) => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.updateCheckoutSession(session.id, params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const complete = useCallback(async (payment?: PaymentData): Promise<Order> => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const order = await ctx.client.completeCheckout(session.id, payment)\n setSession(null)\n return order\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const reset = useCallback(() => {\n setSession(null)\n setError(null)\n }, [])\n\n return { session, loading, error, createSession, updateSession, complete, reset }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\nexport interface SearchParams {\n query: string\n category_id?: string\n min_price?: number\n max_price?: number\n sort_by?: string\n sort_order?: 'asc' | 'desc'\n limit?: number\n}\n\nexport function useSearch() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useSearch must be used within <WhaleProvider>')\n\n const [results, setResults] = useState<Product[]>([])\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [cursor, setCursor] = useState<string | undefined>(undefined)\n\n const search = useCallback(async (params: SearchParams) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts(params)\n setResults(data.data)\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setResults([])\n setHasMore(false)\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const loadMore = useCallback(async (params: SearchParams) => {\n if (!cursor || !hasMore) return\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts({ ...params, starting_after: cursor })\n setResults((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [ctx.client, cursor, hasMore])\n\n const clear = useCallback(() => {\n setResults([])\n setHasMore(false)\n setCursor(undefined)\n setError(null)\n }, [])\n\n return { results, hasMore, loading, error, search, loadMore, clear }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Category, CategoryTreeNode } from '../../types.js'\n\nfunction buildTree(categories: Category[]): CategoryTreeNode[] {\n const map = new Map<string, CategoryTreeNode>()\n const roots: CategoryTreeNode[] = []\n\n for (const cat of categories) {\n map.set(cat.id, { ...cat, children: [] })\n }\n\n for (const cat of categories) {\n const node = map.get(cat.id)!\n if (cat.parent_id && map.has(cat.parent_id)) {\n map.get(cat.parent_id)!.children.push(node)\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n\nexport function useCategories() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCategories must be used within <WhaleProvider>')\n\n const [categories, setCategories] = useState<Category[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listCategories()\n setCategories(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setCategories([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const tree = useMemo(() => buildTree(categories), [categories])\n\n const getCategory = useCallback(async (id: string) => {\n return ctx.client.getCategory(id)\n }, [ctx.client])\n\n return { categories, tree, loading, error, refresh, getCategory }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { LoyaltyAccount, LoyaltyReward, LoyaltyTransaction } from '../../types.js'\n\nexport function useLoyalty() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLoyalty must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [account, setAccount] = useState<LoyaltyAccount | null>(null)\n const [rewards, setRewards] = useState<LoyaltyReward[]>([])\n const [transactions, setTransactions] = useState<LoyaltyTransaction[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setAccount(null)\n setRewards([])\n setTransactions([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const [acct, rwds, txns] = await Promise.all([\n ctx.client.getLoyaltyAccount(customer.id),\n ctx.client.listLoyaltyRewards(),\n ctx.client.listLoyaltyTransactions(customer.id),\n ])\n setAccount(acct)\n setRewards(rwds.data)\n setTransactions(txns.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const redeemReward = useCallback(async (rewardId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n const result = await ctx.client.redeemLoyaltyReward(customer.id, rewardId)\n await refresh()\n return result\n }, [customer?.id, ctx.client, refresh])\n\n return { account, rewards, transactions, loading, error, refresh, redeemReward }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Review, ReviewSummary } from '../../types.js'\n\nexport function useReviews(productId: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReviews must be used within <WhaleProvider>')\n\n const [reviews, setReviews] = useState<Review[]>([])\n const [summary, setSummary] = useState<ReviewSummary | null>(null)\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!productId) {\n setReviews([])\n setSummary(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listProductReviews(productId)\n setReviews(data.data)\n setSummary(data.summary ?? null)\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setReviews([])\n setSummary(null)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const loadMore = useCallback(async () => {\n if (!productId || !hasMore || reviews.length === 0) return\n setLoading(true)\n setError(null)\n try {\n const cursor = reviews[reviews.length - 1].id\n const data = await ctx.client.listProductReviews(productId, { starting_after: cursor })\n setReviews((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client, hasMore, reviews])\n\n const submit = useCallback(async (data: {\n rating: number\n title?: string\n body?: string\n customer_name?: string\n }) => {\n if (!productId) throw new Error('No product ID provided')\n const review = await ctx.client.submitReview(productId, data)\n await refresh()\n return review\n }, [productId, ctx.client, refresh])\n\n return { reviews, summary, hasMore, loading, error, refresh, loadMore, submit }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { WishlistItem } from '../../types.js'\n\nexport function useWishlist() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWishlist must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [items, setItems] = useState<WishlistItem[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setItems([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listWishlistItems(customer.id)\n setItems(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setItems([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const add = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n const item = await ctx.client.addWishlistItem(customer.id, productId)\n setItems((prev) => [...prev, item])\n return item\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const remove = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n await ctx.client.removeWishlistItem(customer.id, productId)\n setItems((prev) => prev.filter((item) => item.product_id !== productId))\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const has = useCallback((productId: string): boolean => {\n return items.some((item) => item.product_id === productId)\n }, [items])\n\n const toggle = useCallback(async (productId: string) => {\n if (has(productId)) {\n await remove(productId)\n } else {\n await add(productId)\n }\n }, [has, add, remove])\n\n return { items, loading, error, refresh, add, remove, has, toggle }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Recommendation } from '../../types.js'\n\nexport function useRecommendations(params?: {\n product_id?: string\n customer_id?: string\n limit?: number\n type?: 'similar' | 'frequently_bought_together' | 'personalized'\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useRecommendations must be used within <WhaleProvider>')\n\n const [recommendations, setRecommendations] = useState<Recommendation[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n // Stable dependency key to avoid infinite re-renders\n const productId = params?.product_id\n const customerId = params?.customer_id\n const limit = params?.limit\n const type = params?.type\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.getRecommendations({\n product_id: productId,\n customer_id: customerId,\n limit,\n type,\n })\n setRecommendations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRecommendations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client, productId, customerId, limit, type])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { recommendations, loading, error, refresh }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Location } from '../../types.js'\n\nexport function useLocations() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLocations must be used within <WhaleProvider>')\n\n const [locations, setLocations] = useState<Location[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listLocations()\n setLocations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setLocations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const getLocation = useCallback(async (id: string) => {\n return ctx.client.getLocation(id)\n }, [ctx.client])\n\n return { locations, loading, error, refresh, getLocation }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { ShippingMethod, ShippingRate, Address } from '../../types.js'\n\nexport function useShipping() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useShipping must be used within <WhaleProvider>')\n\n const [methods, setMethods] = useState<ShippingMethod[]>([])\n const [rates, setRates] = useState<ShippingRate[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refreshMethods = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listShippingMethods()\n setMethods(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setMethods([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refreshMethods()\n }, [refreshMethods])\n\n const calculateRates = useCallback(async (params: {\n cart_id: string\n shipping_address: Address\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.calculateShippingRates(params)\n setRates(data.data)\n return data.data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRates([])\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n return { methods, rates, loading, error, refreshMethods, calculateRates }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { CouponValidation, Cart } from '../../types.js'\n\nexport function useCoupons() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCoupons must be used within <WhaleProvider>')\n\n const [validation, setValidation] = useState<CouponValidation | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const validate = useCallback(async (code: string, cartId?: string): Promise<CouponValidation> => {\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.validateCoupon(code, cartId ? { cart_id: cartId } : undefined)\n setValidation(result)\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setValidation(null)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const apply = useCallback(async (cartId: string, code: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.applyCoupon(cartId, code)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const remove = useCallback(async (cartId: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.removeCoupon(cartId)\n setValidation(null)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const clear = useCallback(() => {\n setValidation(null)\n setError(null)\n }, [])\n\n return { validation, loading, error, validate, apply, remove, clear }\n}\n","'use client'\n\nimport { useEffect, useState, useCallback } from 'react'\nimport type { QRLandingData } from '../../types.js'\n\nexport interface QRLandingPageProps {\n code: string\n gatewayUrl?: string\n renderProduct?: (data: QRLandingData) => React.ReactNode\n renderCOA?: (data: QRLandingData) => React.ReactNode\n renderPage?: (data: QRLandingData) => React.ReactNode\n onDataLoaded?: (data: QRLandingData) => void\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\nexport function QRLandingPage({\n code,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderProduct,\n renderCOA,\n renderPage,\n onDataLoaded,\n onError,\n}: QRLandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<QRLandingData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!code) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/q/${encodeURIComponent(code)}/page`)\n if (!cancelled) {\n if (res.status === 404) { setState('not_found'); return }\n if (res.status === 410) { setState('expired'); return }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: QRLandingData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [code, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n if (renderPage) return <>{renderPage(data)}</>\n\n return <ProductLanding data={data} renderProduct={renderProduct} renderCOA={renderCOA} />\n}\n\n// ─── Theme Extraction ───────────────────────────────────────────────────────\n\ninterface PageTheme {\n bg: string; fg: string; accent: string; accentDark: string\n surface: string; surfaceLight: string; muted: string; border: string\n fontDisplay: string; fontBody: string; radius: string\n}\n\nfunction extractTheme(data: QRLandingData): PageTheme {\n const lp = data.qr_code.landing_page\n const t = data.store?.theme as Record<string, unknown> | null | undefined\n return {\n bg: lp.background_color || (t?.background as string) || '#050505',\n fg: lp.text_color || (t?.foreground as string) || '#fafafa',\n accent: (t?.accent as string) || '#E8E2D9',\n accentDark: (t?.accentDark as string) || '#C8BFB2',\n surface: (t?.surface as string) || '#0C0C0C',\n surfaceLight: (t?.surfaceLight as string) || '#141414',\n muted: (t?.muted as string) || '#8A8A8A',\n border: (t?.border as string) || '#1C1C1C',\n fontDisplay: (t?.fontDisplay as string) || 'system-ui, -apple-system, sans-serif',\n fontBody: (t?.fontBody as string) || 'system-ui, -apple-system, sans-serif',\n radius: (t?.radius as string) || '0px',\n }\n}\n\n// ─── Product Landing (matches Flora Distro product page aesthetic) ──────────\n\nfunction ProductLanding({\n data,\n renderProduct,\n renderCOA,\n}: {\n data: QRLandingData\n renderProduct?: (data: QRLandingData) => React.ReactNode\n renderCOA?: (data: QRLandingData) => React.ReactNode\n}) {\n const { qr_code: qr, store, product, coa } = data\n const lp = qr.landing_page\n const theme = extractTheme(data)\n const [showCOA, setShowCOA] = useState(false)\n\n const logoUrl = qr.logo_url || store?.logo_url\n const productImage = lp.image_url || (product?.featured_image as string) || null\n const productName = lp.title || (product?.name as string) || qr.name\n const description = lp.description || (product?.description as string) || ''\n const ctaUrl = lp.cta_url || qr.destination_url\n const categoryName = (product?.category_name as string) ?? null\n\n // Custom fields\n const cf = product?.custom_fields as Record<string, unknown> | null | undefined\n const thca = (cf?.thca_percentage as number) ?? null\n const thc = (cf?.d9_percentage as number) ?? null\n const cbd = (cf?.cbd_total as number) ?? null\n const strainType = (cf?.strain_type as string) ?? null\n const batchNumber = (cf?.batch_number as string) ?? null\n const dateTested = (cf?.date_tested as string) ?? null\n const terpenes = (cf?.terpenes as string) ?? null\n const effects = (cf?.effects as string) ?? null\n const genetics = (cf?.genetics as string) ?? null\n const tagline = (cf?.tagline as string) ?? null\n\n // Pricing\n const pricingData = product?.pricing_data as { tiers?: PricingTier[] } | null\n const tiers = pricingData?.tiers?.sort((a, b) => (a.sort_order ?? 0) - (b.sort_order ?? 0)) ?? []\n const lowestPrice = tiers.length > 0 ? Math.min(...tiers.map(t => t.default_price)) : null\n\n const handleCOAClick = useCallback(() => { if (coa) setShowCOA(true) }, [coa])\n\n // Inline label style (matches product page section headers)\n const labelStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: `${theme.fg}40`, // 40 = 25% opacity\n }\n\n const dividerStyle: React.CSSProperties = {\n border: 'none',\n borderTop: `1px solid ${theme.fg}0A`, // 0A = 4% opacity\n margin: 0,\n }\n\n return (\n <div style={{\n minHeight: '100dvh',\n background: theme.bg,\n color: theme.fg,\n fontFamily: theme.fontBody,\n }}>\n {/* Navbar */}\n <nav style={{\n padding: '1.25rem 1.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n maxWidth: 1280,\n margin: '0 auto',\n }}>\n {logoUrl ? (\n <img src={logoUrl} alt={store?.name || ''} style={{ height: 28, objectFit: 'contain' }} />\n ) : store?.name ? (\n <span style={{ fontFamily: theme.fontDisplay, fontWeight: 600, fontSize: '1rem', letterSpacing: '-0.02em' }}>\n {store.name}\n </span>\n ) : <span />}\n\n <a\n href={ctaUrl}\n style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: theme.fg,\n textDecoration: 'none',\n padding: '0.5rem 1.25rem',\n border: `1px solid ${theme.fg}10`,\n transition: 'border-color 0.3s',\n }}\n >\n Shop\n </a>\n </nav>\n\n {/* Main content */}\n <main style={{ maxWidth: 560, margin: '0 auto', padding: '0 1.5rem 3rem' }}>\n\n {/* Product image */}\n {productImage && (\n <div style={{\n width: '100%',\n aspectRatio: '1',\n overflow: 'hidden',\n background: theme.surfaceLight,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2rem',\n }}>\n <img\n src={productImage}\n alt={productName}\n style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }}\n />\n </div>\n )}\n\n {/* Category + strain */}\n <div style={{ marginTop: '1.5rem', display: 'flex', gap: '0.75rem', alignItems: 'center' }}>\n {categoryName && (\n <span style={{\n fontSize: 11,\n fontWeight: 500,\n color: theme.accent,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n }}>\n {categoryName}\n </span>\n )}\n {strainType && (\n <span style={{\n fontSize: 10,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n padding: '0.2rem 0.5rem',\n background: strainBadgeColor(strainType),\n color: '#fff',\n }}>\n {strainType}\n </span>\n )}\n </div>\n\n {/* Product name */}\n <h1 style={{\n fontFamily: theme.fontDisplay,\n fontSize: 'clamp(2rem, 8vw, 3rem)',\n fontWeight: 300,\n margin: '0.5rem 0 0',\n lineHeight: 1.1,\n letterSpacing: '-0.02em',\n }}>\n {productName}\n </h1>\n\n {/* Tagline */}\n {tagline && (\n <p style={{\n fontFamily: theme.fontDisplay,\n fontSize: '1.1rem',\n fontWeight: 300,\n color: `${theme.fg}80`,\n margin: '0.5rem 0 0',\n }}>\n {tagline}\n </p>\n )}\n\n {/* Price */}\n {lowestPrice != null && (\n <p style={{\n fontFamily: theme.fontDisplay,\n fontSize: '1.5rem',\n fontWeight: 300,\n margin: '0.75rem 0 0',\n }}>\n ${lowestPrice.toFixed(2)}\n {tiers.length > 1 && (\n <span style={{ fontSize: '0.8rem', color: `${theme.fg}50`, marginLeft: '0.5rem', fontWeight: 400 }}>\n and up\n </span>\n )}\n </p>\n )}\n\n {/* Custom render slot */}\n {renderProduct ? renderProduct(data) : null}\n\n {/* Cannabinoid stats — large, prominent like the product page */}\n {(thca != null || thc != null || cbd != null) && (\n <div style={{\n marginTop: '1.75rem',\n border: `1px solid ${theme.fg}0F`,\n display: 'grid',\n gridTemplateColumns: `repeat(${[thca, thc, cbd].filter(v => v != null).length}, 1fr)`,\n }}>\n {thca != null && (\n <CannabinoidStat label=\"THCa\" value={thca} theme={theme} showBorder={thc != null || cbd != null} />\n )}\n {thc != null && (\n <CannabinoidStat label=\"Δ9 THC\" value={thc} theme={theme} showBorder={cbd != null} />\n )}\n {cbd != null && (\n <CannabinoidStat label=\"CBD\" value={cbd} theme={theme} showBorder={false} />\n )}\n </div>\n )}\n\n {/* Pricing tiers */}\n {tiers.length > 1 && (\n <div style={{ marginTop: '1.5rem' }}>\n <p style={{ ...labelStyle, marginBottom: '0.75rem' }}>Pricing</p>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 1 }}>\n {tiers.map((tier) => (\n <div key={tier.id} style={{\n flex: '1 1 0',\n minWidth: 90,\n padding: '0.75rem 0.5rem',\n background: theme.surfaceLight,\n textAlign: 'center',\n }}>\n <div style={{ fontSize: '1rem', fontWeight: 300, fontFamily: theme.fontDisplay }}>\n ${tier.default_price.toFixed(2)}\n </div>\n <div style={{ fontSize: 10, color: `${theme.fg}60`, letterSpacing: '0.1em', textTransform: 'uppercase', marginTop: 2 }}>\n {tier.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Details section */}\n {(genetics || terpenes || effects || batchNumber || dateTested) && (\n <div style={{ marginTop: '1.75rem' }}>\n <p style={{ ...labelStyle, marginBottom: '0.75rem' }}>Details</p>\n <div>\n {genetics && <><DetailRow label=\"Genetics\" value={genetics} theme={theme} /><hr style={dividerStyle} /></>}\n {terpenes && <><DetailRow label=\"Terpenes\" value={terpenes} theme={theme} /><hr style={dividerStyle} /></>}\n {effects && <><DetailRow label=\"Effects\" value={effects} theme={theme} /><hr style={dividerStyle} /></>}\n {batchNumber && <><DetailRow label=\"Batch\" value={batchNumber} theme={theme} /><hr style={dividerStyle} /></>}\n {dateTested && <DetailRow label=\"Tested\" value={formatDate(dateTested)} theme={theme} />}\n </div>\n </div>\n )}\n\n {/* Description */}\n {description && (\n <div style={{ marginTop: '1.75rem' }}>\n <p style={{ ...labelStyle, marginBottom: '0.75rem' }}>About</p>\n <p style={{\n fontSize: '0.9rem',\n fontWeight: 300,\n color: `${theme.fg}99`,\n lineHeight: 1.7,\n margin: 0,\n }}>\n {description}\n </p>\n </div>\n )}\n\n {/* COA section — preview card like the product page */}\n {coa && (\n <div style={{ marginTop: '1.75rem' }}>\n <p style={{ ...labelStyle, marginBottom: '0.75rem' }}>Lab Results</p>\n {batchNumber && (\n <p style={{ fontSize: 12, color: `${theme.fg}60`, margin: '0 0 0.5rem', letterSpacing: '0.05em' }}>\n Batch {batchNumber}{dateTested ? ` · ${formatDate(dateTested)}` : ''}\n </p>\n )}\n <button\n onClick={handleCOAClick}\n style={{\n width: '100%',\n position: 'relative',\n height: 180,\n border: `1px solid ${theme.fg}0F`,\n background: theme.surface,\n cursor: 'pointer',\n overflow: 'hidden',\n padding: 0,\n display: 'block',\n }}\n >\n <iframe\n src={coa.url}\n style={{\n width: '200%',\n height: '200%',\n border: 'none',\n transform: 'scale(0.5)',\n transformOrigin: 'top left',\n pointerEvents: 'none',\n }}\n title=\"COA Preview\"\n tabIndex={-1}\n />\n <div style={{\n position: 'absolute',\n inset: 0,\n background: `linear-gradient(to top, ${theme.bg}E6 0%, transparent 60%)`,\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'center',\n paddingBottom: '1.25rem',\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.2em',\n color: theme.accent,\n }}>\n View Certificate of Analysis\n </span>\n </div>\n </button>\n </div>\n )}\n\n {/* Custom COA render slot */}\n {renderCOA ? renderCOA(data) : null}\n\n {/* CTA */}\n <a\n href={ctaUrl}\n style={{\n display: 'block',\n width: '100%',\n marginTop: '2rem',\n padding: '1rem',\n background: theme.fg,\n color: theme.bg,\n fontFamily: theme.fontDisplay,\n fontSize: '0.85rem',\n fontWeight: 500,\n textAlign: 'center',\n textDecoration: 'none',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n boxSizing: 'border-box',\n }}\n >\n Shop Online\n </a>\n\n {/* Footer */}\n <footer style={{\n marginTop: '3rem',\n paddingTop: '1.5rem',\n borderTop: `1px solid ${theme.fg}0A`,\n textAlign: 'center',\n }}>\n <div style={{ display: 'flex', justifyContent: 'center', gap: '2rem', marginBottom: '0.75rem' }}>\n {coa && <FooterLabel text=\"Lab Verified\" />}\n <FooterLabel text=\"Authentic Product\" />\n </div>\n {store?.name && (\n <p style={{ fontSize: 11, color: `${theme.fg}40`, margin: '0.5rem 0 0', letterSpacing: '0.1em' }}>\n {store.name}\n {store?.tagline ? ` — ${store.tagline}` : ''}\n </p>\n )}\n </footer>\n </main>\n\n {/* COA Modal */}\n {showCOA && coa && <COAModal coa={coa} theme={theme} onClose={() => setShowCOA(false)} />}\n </div>\n )\n}\n\n// ─── Sub-components ─────────────────────────────────────────────────────────\n\ninterface PricingTier {\n id: string; unit: string; label: string; quantity: number; sort_order: number; default_price: number\n}\n\nfunction CannabinoidStat({ label, value, theme, showBorder }: {\n label: string; value: number; theme: PageTheme; showBorder: boolean\n}) {\n return (\n <div style={{\n padding: '1.25rem 0.5rem',\n textAlign: 'center',\n borderRight: showBorder ? `1px solid ${theme.fg}0F` : undefined,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay,\n fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300,\n lineHeight: 1,\n color: theme.fg,\n }}>\n {value.toFixed(value >= 1 ? 1 : 2)}\n <span style={{ fontSize: '0.6em', marginLeft: 1 }}>%</span>\n </div>\n <div style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: theme.accent,\n marginTop: '0.5rem',\n }}>\n {label}\n </div>\n </div>\n )\n}\n\nfunction DetailRow({ label, value, theme }: { label: string; value: string; theme: PageTheme }) {\n return (\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: '0.625rem 0',\n }}>\n <span style={{\n fontSize: 12,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: `${theme.fg}66`,\n }}>\n {label}\n </span>\n <span style={{\n fontSize: 14,\n fontWeight: 300,\n color: `${theme.fg}CC`,\n }}>\n {value}\n </span>\n </div>\n )\n}\n\nfunction FooterLabel({ text }: { text: string }) {\n return (\n <span style={{\n fontSize: 10,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: 'rgba(255,255,255,0.25)',\n }}>\n {text}\n </span>\n )\n}\n\nfunction COAModal({ coa, theme, onClose }: {\n coa: { url: string; document_name: string }; theme: PageTheme; onClose: () => void\n}) {\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 9999, background: 'rgba(0,0,0,0.95)', display: 'flex', flexDirection: 'column' }}>\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.75rem 1rem',\n borderBottom: `1px solid ${theme.fg}10`,\n }}>\n <span style={{\n color: '#fff',\n fontFamily: theme.fontDisplay,\n fontWeight: 500,\n fontSize: '0.85rem',\n letterSpacing: '-0.01em',\n }}>\n {coa.document_name || 'Lab Results'}\n </span>\n <button\n onClick={onClose}\n style={{\n background: `${theme.fg}10`,\n border: 'none',\n color: '#fff',\n fontSize: '0.85rem',\n cursor: 'pointer',\n padding: '0.375rem 0.75rem',\n letterSpacing: '0.05em',\n }}\n >\n Close\n </button>\n </div>\n <iframe src={coa.url} style={{ flex: 1, border: 'none', background: '#fff' }} title=\"Lab Results\" />\n </div>\n )\n}\n\nfunction strainBadgeColor(strain: string): string {\n const s = strain.toLowerCase()\n if (s === 'sativa') return '#22c55e'\n if (s === 'indica') return '#8b5cf6'\n if (s === 'hybrid') return '#f59e0b'\n return '#6b7280'\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n } catch { return dateStr }\n}\n\n// ─── State Screens ──────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Not Found</h1>\n <p style={{ color: '#888' }}>This QR code does not exist or has been deactivated.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Expired</h1>\n <p style={{ color: '#888' }}>This QR code is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try scanning again.'}</p>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useState, useCallback } from 'react'\nimport type { LandingPageRenderData, LandingSection, QRLandingStore } from '../../types.js'\n\n// ─── Theme ───────────────────────────────────────────────────────────────────\n\ninterface Theme {\n bg: string\n fg: string\n accent: string\n surface: string\n muted: string\n}\n\n// ─── Section Renderer Types ──────────────────────────────────────────────────\n\ninterface SectionRendererProps {\n section: LandingSection\n data: LandingPageRenderData\n theme: Theme\n}\n\nexport interface LandingPageProps {\n /** Landing page slug */\n slug: string\n /** Gateway URL — defaults to https://whale-gateway.fly.dev */\n gatewayUrl?: string\n /**\n * Override rendering for any section type.\n * Return the custom element, or call defaultRenderer() for the built-in output.\n */\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n /** Called when data is loaded */\n onDataLoaded?: (data: LandingPageRenderData) => void\n /** Called on error */\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\n/**\n * LandingPage — drop-in component that renders a configurable landing page\n * fetched from the gateway's public endpoint.\n *\n * Usage:\n * ```tsx\n * import { LandingPage } from '@neowhale/storefront/react'\n * export default function Page({ params }: { params: { slug: string } }) {\n * return <LandingPage slug={params.slug} />\n * }\n * ```\n */\nexport function LandingPage({\n slug,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n}: LandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<LandingPageRenderData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!slug) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/l/${encodeURIComponent(slug)}`)\n\n if (!cancelled) {\n if (res.status === 404) {\n setState('not_found')\n return\n }\n if (res.status === 410) {\n setState('expired')\n return\n }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: LandingPageRenderData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [slug, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n\n return <PageLayout data={data} renderSection={renderSection} />\n}\n\n// ─── Page Layout ─────────────────────────────────────────────────────────────\n\nfunction PageLayout({\n data,\n renderSection,\n}: {\n data: LandingPageRenderData\n renderSection?: LandingPageProps['renderSection']\n}) {\n const { landing_page: lp, store } = data\n const [showCOA, setShowCOA] = useState(false)\n\n const theme: Theme = {\n bg: lp.background_color || (store?.theme?.background as string) || '#050505',\n fg: lp.text_color || (store?.theme?.foreground as string) || '#fafafa',\n accent: lp.accent_color || (store?.theme?.accent as string) || '#E8E2D9',\n surface: (store?.theme?.surface as string) || '#111',\n muted: (store?.theme?.muted as string) || '#888',\n }\n\n const fontFamily = lp.font_family || 'system-ui, -apple-system, sans-serif'\n const logoUrl = store?.logo_url\n\n const sorted = [...lp.sections].sort((a, b) => a.order - b.order)\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {/* Custom CSS */}\n {lp.custom_css && <style>{lp.custom_css}</style>}\n\n {/* Header */}\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img\n src={logoUrl}\n alt={store?.name || 'Store'}\n style={{ height: 40, objectFit: 'contain' }}\n />\n </div>\n )}\n\n {/* Sections */}\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <DefaultSectionRenderer\n key={section.id}\n section={section}\n data={data}\n theme={theme}\n onShowCOA={() => setShowCOA(true)}\n />\n )\n\n if (renderSection) {\n return (\n <div key={section.id}>\n {renderSection(section, defaultRenderer)}\n </div>\n )\n }\n\n return (\n <DefaultSectionRenderer\n key={section.id}\n section={section}\n data={data}\n theme={theme}\n onShowCOA={() => setShowCOA(true)}\n />\n )\n })}\n\n {/* Footer */}\n {store?.name && (\n <div style={{ padding: '2rem 1.5rem', borderTop: `1px solid ${theme.surface}`, textAlign: 'center' }}>\n <p style={{ fontSize: '0.75rem', color: theme.muted, margin: 0 }}>\n Powered by {store.name}\n </p>\n </div>\n )}\n\n {/* COA Modal */}\n {showCOA && data.coa && (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n background: 'rgba(0,0,0,0.9)',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '1rem' }}>\n <span style={{ color: '#fff', fontWeight: 600 }}>{data.coa.document_name || 'Lab Results'}</span>\n <button\n onClick={() => setShowCOA(false)}\n style={{ background: 'none', border: 'none', color: '#fff', fontSize: '1.5rem', cursor: 'pointer', padding: '0.5rem' }}\n >\n ✕\n </button>\n </div>\n <iframe\n src={data.coa.url}\n style={{ flex: 1, border: 'none', background: '#fff' }}\n title=\"Lab Results\"\n />\n </div>\n )}\n </div>\n )\n}\n\n// ─── Section Router ──────────────────────────────────────────────────────────\n\nfunction DefaultSectionRenderer({\n section,\n data,\n theme,\n onShowCOA,\n}: SectionRendererProps & { onShowCOA: () => void }) {\n switch (section.type) {\n case 'hero': return <HeroSection section={section} theme={theme} />\n case 'text': return <TextSection section={section} theme={theme} />\n case 'image': return <ImageSection section={section} theme={theme} />\n case 'video': return <VideoSection section={section} theme={theme} />\n case 'gallery': return <GallerySection section={section} theme={theme} />\n case 'cta': return <CTASection section={section} theme={theme} />\n case 'stats': return <StatsSection section={section} theme={theme} />\n case 'product_card': return <ProductCardSection section={section} data={data} theme={theme} />\n case 'coa_viewer': return <COAViewerSection section={section} data={data} theme={theme} onShowCOA={onShowCOA} />\n case 'social_links': return <SocialLinksSection section={section} theme={theme} />\n case 'divider': return <DividerSection theme={theme} />\n default: return null\n }\n}\n\n// ─── Section Renderers ───────────────────────────────────────────────────────\n\nfunction HeroSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { title, subtitle, background_image, cta_text, cta_url } = section.content as {\n title?: string; subtitle?: string; background_image?: string; cta_text?: string; cta_url?: string\n }\n\n return (\n <div\n style={{\n position: 'relative',\n minHeight: '60vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: '3rem 1.5rem',\n backgroundImage: background_image ? `url(${background_image})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n >\n {background_image && (\n <div style={{ position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.5)' }} />\n )}\n <div style={{ position: 'relative', zIndex: 1, maxWidth: 640 }}>\n {title && (\n <h1 style={{ fontSize: '2.5rem', fontWeight: 700, margin: '0 0 1rem', lineHeight: 1.15, color: theme.fg }}>\n {title}\n </h1>\n )}\n {subtitle && (\n <p style={{ fontSize: '1.125rem', color: theme.muted, margin: '0 0 2rem', lineHeight: 1.6 }}>\n {subtitle}\n </p>\n )}\n {cta_text && cta_url && (\n <a\n href={cta_url}\n style={{\n display: 'inline-block',\n padding: '0.875rem 2rem',\n background: theme.accent,\n color: theme.bg,\n textDecoration: 'none',\n fontSize: '0.95rem',\n fontWeight: 600,\n borderRadius: 0,\n }}\n >\n {cta_text}\n </a>\n )}\n </div>\n </div>\n )\n}\n\nfunction TextSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { heading, body } = section.content as { heading?: string; body?: string }\n const align = (section.config?.align as string) || 'left'\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 640, margin: '0 auto', textAlign: align as 'left' | 'center' | 'right' }}>\n {heading && (\n <h2 style={{ fontSize: '1.5rem', fontWeight: 600, margin: '0 0 1rem', color: theme.fg }}>\n {heading}\n </h2>\n )}\n {body && (\n <div style={{ color: theme.muted, lineHeight: 1.7, fontSize: '0.95rem', whiteSpace: 'pre-wrap' }}>\n {body}\n </div>\n )}\n </div>\n )\n}\n\nfunction ImageSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { url, alt, caption } = section.content as { url?: string; alt?: string; caption?: string }\n const contained = section.config?.contained !== false\n\n if (!url) return null\n\n return (\n <div style={{ padding: contained ? '1.5rem' : 0, maxWidth: contained ? 640 : undefined, margin: contained ? '0 auto' : undefined }}>\n <img\n src={url}\n alt={alt || ''}\n style={{ width: '100%', display: 'block', objectFit: 'cover' }}\n />\n {caption && (\n <p style={{ fontSize: '0.8rem', color: theme.muted, textAlign: 'center', marginTop: '0.75rem' }}>\n {caption}\n </p>\n )}\n </div>\n )\n}\n\nfunction VideoSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { url, poster } = section.content as { url?: string; poster?: string }\n\n if (!url) return null\n\n const isEmbed = url.includes('youtube') || url.includes('youtu.be') || url.includes('vimeo')\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {isEmbed ? (\n <div style={{ position: 'relative', paddingBottom: '56.25%', height: 0 }}>\n <iframe\n src={toEmbedUrl(url)}\n style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', border: 'none' }}\n allow=\"autoplay; fullscreen\"\n title=\"Video\"\n />\n </div>\n ) : (\n <video\n src={url}\n poster={poster}\n controls\n style={{ width: '100%', display: 'block', background: theme.surface }}\n />\n )}\n </div>\n )\n}\n\nfunction GallerySection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { images } = section.content as { images?: Array<{ url: string; alt?: string }> }\n const columns = (section.config?.columns as number) || 3\n\n if (!images || images.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 800, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: '0.5rem' }}>\n {images.map((img, i) => (\n <div key={i} style={{ aspectRatio: '1', overflow: 'hidden', background: theme.surface }}>\n <img\n src={img.url}\n alt={img.alt || ''}\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}\n />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction CTASection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { buttons } = section.content as {\n buttons?: Array<{ text: string; url: string; style?: 'primary' | 'outline' }>\n }\n\n if (!buttons || buttons.length === 0) return null\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 480, margin: '0 auto', display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {buttons.map((btn, i) => {\n const isPrimary = btn.style !== 'outline'\n return (\n <a\n key={i}\n href={btn.url}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.875rem',\n background: isPrimary ? theme.accent : 'transparent',\n color: isPrimary ? theme.bg : theme.fg,\n border: isPrimary ? 'none' : `1px solid ${theme.muted}`,\n fontSize: '0.95rem',\n fontWeight: 600,\n textAlign: 'center',\n textDecoration: 'none',\n boxSizing: 'border-box',\n borderRadius: 0,\n }}\n >\n {btn.text}\n </a>\n )\n })}\n </div>\n )\n}\n\nfunction StatsSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { stats } = section.content as { stats?: Array<{ label: string; value: string }> }\n\n if (!stats || stats.length === 0) return null\n\n const columns = Math.min(stats.length, 4)\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: '0.75rem' }}>\n {stats.map((stat, i) => (\n <div key={i} style={{ background: theme.surface, padding: '1rem', textAlign: 'center' }}>\n <div style={{ fontSize: '1.25rem', fontWeight: 700, color: theme.fg }}>{stat.value}</div>\n <div style={{ fontSize: '0.7rem', color: theme.accent, textTransform: 'uppercase', letterSpacing: '0.05em', marginTop: '0.25rem' }}>{stat.label}</div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction ProductCardSection({ section, data, theme }: { section: LandingSection; data: LandingPageRenderData; theme: Theme }) {\n const product = data.product\n const c = section.content as { name?: string; description?: string; price?: string; image_url?: string; url?: string }\n\n const name = c.name || (product?.name as string) || ''\n const description = c.description || (product?.description as string) || ''\n const price = c.price || null\n const imageUrl = c.image_url || (product?.featured_image as string) || null\n const url = c.url || null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <div style={{ background: theme.surface, overflow: 'hidden' }}>\n {imageUrl && (\n <div style={{ width: '100%', aspectRatio: '1', overflow: 'hidden' }}>\n <img src={imageUrl} alt={name} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n </div>\n )}\n <div style={{ padding: '1.25rem' }}>\n <h3 style={{ fontSize: '1.25rem', fontWeight: 600, margin: '0 0 0.5rem', color: theme.fg }}>{name}</h3>\n {description && (\n <p style={{ fontSize: '0.9rem', color: theme.muted, margin: '0 0 1rem', lineHeight: 1.5 }}>{description}</p>\n )}\n {price && (\n <p style={{ fontSize: '1.125rem', fontWeight: 700, color: theme.accent, margin: '0 0 1rem' }}>{price}</p>\n )}\n {url && (\n <a\n href={url}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.75rem',\n background: theme.accent,\n color: theme.bg,\n textAlign: 'center',\n textDecoration: 'none',\n fontSize: '0.9rem',\n fontWeight: 600,\n boxSizing: 'border-box',\n borderRadius: 0,\n }}\n >\n View Product\n </a>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nfunction COAViewerSection({\n section,\n data,\n theme,\n onShowCOA,\n}: { section: LandingSection; data: LandingPageRenderData; theme: Theme; onShowCOA: () => void }) {\n const coa = data.coa\n const c = section.content as { button_text?: string }\n\n if (!coa) return null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <button\n onClick={onShowCOA}\n style={{\n width: '100%',\n padding: '0.875rem',\n background: theme.accent,\n color: theme.bg,\n border: 'none',\n fontSize: '0.95rem',\n fontWeight: 600,\n cursor: 'pointer',\n borderRadius: 0,\n }}\n >\n {c.button_text || 'View Lab Results'}\n </button>\n </div>\n )\n}\n\nfunction SocialLinksSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { links } = section.content as { links?: Array<{ platform: string; url: string }> }\n\n if (!links || links.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center', gap: '1.5rem', flexWrap: 'wrap' }}>\n {links.map((link, i) => (\n <a\n key={i}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: theme.muted,\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n textTransform: 'capitalize',\n letterSpacing: '0.03em',\n transition: 'color 0.15s',\n }}\n >\n {link.platform}\n </a>\n ))}\n </div>\n )\n}\n\nfunction DividerSection({ theme }: { theme: Theme }) {\n return (\n <div style={{ padding: '1rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.surface}`, margin: 0 }} />\n </div>\n )\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction toEmbedUrl(url: string): string {\n // YouTube\n const ytMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]+)/)\n if (ytMatch) return `https://www.youtube.com/embed/${ytMatch[1]}`\n\n // Vimeo\n const vimeoMatch = url.match(/vimeo\\.com\\/(\\d+)/)\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}`\n\n return url\n}\n\n// ─── State Screens ───────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Not Found</h1>\n <p style={{ color: '#888' }}>This page does not exist or has been removed.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Expired</h1>\n <p style={{ color: '#888' }}>This page is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try again later.'}</p>\n </div>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/react/context.ts","../../src/react/stores/cart-store.ts","../../src/react/stores/auth-store.ts","../../src/react/hooks/use-analytics.ts","../../src/react/hooks/use-auth.ts","../../src/react/components/analytics-tracker.tsx","../../src/react/hooks/use-cart.ts","../../src/react/components/cart-initializer.tsx","../../src/react/components/auth-initializer.tsx","../../src/react/components/pixel-initializer.tsx","../../src/react/provider.tsx","../../src/react/hooks/use-products.ts","../../src/react/hooks/use-client.ts","../../src/react/hooks/use-customer.ts","../../src/react/hooks/use-checkout.ts","../../src/react/hooks/use-search.ts","../../src/react/hooks/use-categories.ts","../../src/react/hooks/use-loyalty.ts","../../src/react/hooks/use-reviews.ts","../../src/react/hooks/use-wishlist.ts","../../src/react/hooks/use-recommendations.ts","../../src/react/hooks/use-locations.ts","../../src/react/hooks/use-shipping.ts","../../src/react/hooks/use-coupons.ts","../../src/react/components/qr-landing-page.tsx","../../src/react/components/landing-page.tsx"],"names":["createStore","persist","useContext","useRef","useStore","useShallow","useEffect","useCallback","useMemo","useState","jsx","jsxs","DefaultLoading","DefaultNotFound","DefaultExpired","DefaultError","containerStyle"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext } from 'react'\nimport type { WhaleClient } from '../client.js'\nimport type { Product } from '../types.js'\nimport type { CartStore } from './stores/cart-store.js'\nimport type { AuthStore } from './stores/auth-store.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\n\nexport interface WhaleContextValue {\n client: WhaleClient\n config: {\n storeId: string\n apiKey: string\n gatewayUrl: string\n proxyPath: string\n mediaSigningSecret: string\n supabaseHost: string\n storagePrefix: string\n sessionTtl: number\n debug: boolean\n trackingEnabled: boolean\n recordingRate: number\n }\n cartStore: CartStore\n authStore: AuthStore\n /** Products fetched server-side and passed via provider */\n products: Product[]\n /** Pixel manager — set after storefront config loads */\n pixelManager: PixelManager | null\n}\n\nexport const WhaleContext = createContext<WhaleContextValue | null>(null)\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Cart, CartItem, TaxBreakdown, PaymentData, Order } from '../../types.js'\n\nexport interface CartState {\n cartId: string | null\n items: CartItem[]\n itemCount: number\n subtotal: number\n taxAmount: number\n total: number\n taxBreakdown: TaxBreakdown[]\n cartOpen: boolean\n cartLoading: boolean\n productImages: Record<string, string>\n addItemInFlight: boolean\n}\n\nexport interface CartActions {\n openCart: () => void\n closeCart: () => void\n toggleCart: () => void\n initCart: () => Promise<void>\n syncCart: () => Promise<void>\n addItem: (\n productId: string,\n quantity: number,\n tier?: string,\n unitPrice?: number,\n imageUrl?: string | null,\n productName?: string\n ) => Promise<void>\n updateQuantity: (itemId: string, quantity: number) => Promise<void>\n removeItem: (itemId: string, productName?: string) => Promise<void>\n clearCart: () => void\n checkout: (customerEmail?: string, payment?: PaymentData) => Promise<Order>\n}\n\nexport type CartStore = ReturnType<typeof createCartStore>\n\nexport function createCartStore(\n client: WhaleClient,\n storagePrefix: string,\n onAddToCart?: (productId: string, productName: string, quantity: number, price: number, tier?: string) => void,\n onRemoveFromCart?: (productId: string, productName: string) => void\n) {\n return createStore<CartState & CartActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n cartOpen: false,\n cartLoading: false,\n productImages: {},\n addItemInFlight: false,\n\n // ── Cart UI ──────────────────────────────────────────────────────\n openCart: () => set({ cartOpen: true }),\n closeCart: () => set({ cartOpen: false }),\n toggleCart: () => set((s) => ({ cartOpen: !s.cartOpen })),\n\n // ── Cart data ────────────────────────────────────────────────────\n initCart: async () => {\n const { cartId, syncCart } = get()\n\n if (cartId) {\n try {\n await syncCart()\n } catch {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n }\n return\n }\n\n try {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n } catch (err) {\n console.error('[whale-storefront] initCart failed:', err)\n }\n },\n\n syncCart: async () => {\n const { cartId, productImages } = get()\n if (!cartId) return\n\n try {\n const cart = await client.getCart(cartId)\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n } catch (err) {\n console.error('[whale-storefront] syncCart failed:', err)\n throw err\n }\n },\n\n addItem: async (productId, quantity, tier, unitPrice, imageUrl, productName) => {\n // Race-condition guard: prevent double-click\n if (get().addItemInFlight) return\n set({ cartLoading: true, addItemInFlight: true })\n\n try {\n let { cartId } = get()\n\n if (!cartId) {\n await get().initCart()\n cartId = get().cartId\n }\n\n if (!cartId) throw new Error('Could not initialise cart')\n\n if (imageUrl) {\n set((s) => ({ productImages: { ...s.productImages, [productId]: imageUrl } }))\n }\n\n try {\n await client.addToCart(cartId, productId, quantity, { tier, unitPrice })\n } catch (err: unknown) {\n // Cart expired (404/410) — auto-recover\n const status = (err as { status?: number }).status\n if (status === 404 || status === 410) {\n const newCart = await client.createCart()\n set({ cartId: newCart.id })\n await client.addToCart(newCart.id, productId, quantity, { tier, unitPrice })\n } else {\n throw err\n }\n }\n\n await get().syncCart()\n\n // Analytics callback\n onAddToCart?.(productId, productName || '', quantity, unitPrice || 0, tier)\n } finally {\n set({ cartLoading: false, addItemInFlight: false })\n }\n },\n\n updateQuantity: async (itemId, quantity) => {\n set({ cartLoading: true })\n try {\n const { cartId } = get()\n if (!cartId) return\n await client.updateCartItem(cartId, itemId, quantity)\n await get().syncCart()\n } finally {\n set({ cartLoading: false })\n }\n },\n\n removeItem: async (itemId, productName) => {\n set({ cartLoading: true })\n try {\n const { cartId, items } = get()\n if (!cartId) return\n\n const item = items.find((i) => i.id === itemId)\n await client.removeCartItem(cartId, itemId)\n await get().syncCart()\n\n if (item) {\n onRemoveFromCart?.(item.product_id, productName || item.product_name)\n }\n } finally {\n set({ cartLoading: false })\n }\n },\n\n clearCart: () => {\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n })\n },\n\n checkout: async (customerEmail, payment) => {\n const { cartId } = get()\n if (!cartId) throw new Error('No active cart')\n\n set({ cartLoading: true })\n try {\n const order = await client.checkout(cartId, customerEmail, payment)\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n cartOpen: false,\n })\n return order\n } finally {\n set({ cartLoading: false })\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-cart`,\n partialize: (state) => ({\n cartId: state.cartId,\n productImages: state.productImages,\n }),\n }\n )\n )\n}\n\nfunction applyCart(\n set: (partial: Partial<CartState>) => void,\n get: () => CartState,\n cart: Cart\n) {\n const productImages = get().productImages\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n cartId: cart.id,\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n}\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Customer } from '../../types.js'\n\nexport interface AuthState {\n customer: Customer | null\n sessionToken: string | null\n sessionExpiresAt: string | null\n authLoading: boolean\n}\n\nexport interface AuthActions {\n sendOTP: (email: string) => Promise<boolean>\n verifyOTP: (email: string, code: string) => Promise<boolean>\n restoreSession: () => Promise<void>\n isSessionValid: () => boolean\n logout: () => void\n fetchCustomer: (id: string) => Promise<void>\n}\n\nexport type AuthStore = ReturnType<typeof createAuthStore>\n\nexport function createAuthStore(client: WhaleClient, storagePrefix: string) {\n return createStore<AuthState & AuthActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n customer: null,\n sessionToken: null,\n sessionExpiresAt: null,\n authLoading: false,\n\n // ── Actions ──────────────────────────────────────────────────────\n sendOTP: async (email) => {\n set({ authLoading: true })\n try {\n const res = await client.sendCode(email)\n return res.sent\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Could not send code'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n verifyOTP: async (email, code) => {\n set({ authLoading: true })\n try {\n const res = await client.verifyCode(email, code)\n client.setSessionToken(res.token_hash)\n set({\n sessionToken: res.token_hash,\n sessionExpiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),\n })\n\n if (res.customer?.id) {\n try {\n const full = await client.getCustomer(res.customer.id)\n set({ customer: full })\n } catch {\n set({ customer: res.customer })\n }\n }\n\n return res.needs_profile ?? false\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Verification failed'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n restoreSession: async () => {\n const { sessionToken, sessionExpiresAt, customer } = get()\n if (!sessionToken || !sessionExpiresAt) return\n\n if (new Date(sessionExpiresAt) <= new Date()) {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n return\n }\n\n client.setSessionToken(sessionToken)\n\n if (customer?.id) {\n try {\n const fresh = await client.getCustomer(customer.id)\n set({ customer: fresh })\n } catch {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n }\n }\n },\n\n isSessionValid: () => {\n const { sessionToken, sessionExpiresAt } = get()\n if (!sessionToken || !sessionExpiresAt) return false\n return new Date(sessionExpiresAt) > new Date()\n },\n\n logout: () => {\n client.setSessionToken(null)\n set({ customer: null, sessionToken: null, sessionExpiresAt: null })\n },\n\n fetchCustomer: async (id) => {\n try {\n const customer = await client.getCustomer(id)\n set({ customer })\n } catch (err) {\n console.error('[whale-storefront] fetchCustomer failed:', err)\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-auth`,\n partialize: (state) => ({\n sessionToken: state.sessionToken,\n sessionExpiresAt: state.sessionExpiresAt,\n customer: state.customer\n ? {\n id: state.customer.id,\n email: state.customer.email,\n first_name: state.customer.first_name,\n last_name: state.customer.last_name,\n phone: state.customer.phone,\n loyalty_points: state.customer.loyalty_points,\n loyalty_tier: state.customer.loyalty_tier,\n total_spent: state.customer.total_spent,\n total_orders: state.customer.total_orders,\n }\n : null,\n }),\n }\n )\n )\n}\n","'use client'\n\nimport { useContext, useRef, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { EventType } from '../../types.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\n\ninterface SessionData {\n id: string\n createdAt: number\n}\n\nexport function useAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAnalytics must be used within <WhaleProvider>')\n\n const { client, config, pixelManager } = ctx\n const sessionPromiseRef = useRef<Promise<string> | null>(null)\n const sessionKey = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n\n const getOrCreateSession = useCallback(async (): Promise<string> => {\n if (sessionPromiseRef.current) return sessionPromiseRef.current\n\n sessionPromiseRef.current = (async () => {\n // Check stored session\n try {\n const raw = localStorage.getItem(sessionKey)\n if (raw) {\n const stored: SessionData = JSON.parse(raw)\n if (Date.now() - stored.createdAt < config.sessionTtl) {\n // Refresh last_active silently\n client.updateSession(stored.id, { last_active_at: new Date().toISOString() }).catch(() => {})\n return stored.id\n }\n }\n } catch {\n // ignore\n }\n\n // Create new\n try {\n const session = await client.createSession({\n user_agent: navigator.userAgent,\n referrer: document.referrer || undefined,\n })\n if (session?.id) {\n localStorage.setItem(sessionKey, JSON.stringify({ id: session.id, createdAt: Date.now() }))\n return session.id\n }\n } catch {\n // ignore\n }\n\n // Fallback local ID\n const fallbackId = `local-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\n localStorage.setItem(sessionKey, JSON.stringify({ id: fallbackId, createdAt: Date.now() }))\n return fallbackId\n })()\n\n sessionPromiseRef.current.finally(() => {\n sessionPromiseRef.current = null\n })\n\n return sessionPromiseRef.current\n }, [client, config.sessionTtl, sessionKey])\n\n const trackingEnabled = config.trackingEnabled\n\n const track = useCallback(\n async (eventType: EventType, data: Record<string, unknown> = {}) => {\n if (!trackingEnabled) return\n\n // Generate shared event_id for Meta CAPI deduplication\n const eventId = crypto.randomUUID()\n\n // Fire pixel events instantly (client-side) with eventID for fbq dedup\n pixelManager?.track(eventType, { ...data, eventID: eventId })\n\n // Then fire gateway event (server-side attribution) with same event_id\n try {\n const sessionId = await getOrCreateSession()\n await client.trackEvent({\n session_id: sessionId,\n event_type: eventType,\n event_data: { ...data, event_id: eventId },\n })\n } catch {\n // fire-and-forget\n }\n },\n [client, getOrCreateSession, pixelManager, trackingEnabled]\n )\n\n const linkCustomer = useCallback(\n async (customerId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { customer_id: customerId })\n } catch {\n // ignore\n }\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const trackPageView = useCallback(\n (url: string, referrer?: string) => {\n track('page_view', { url, referrer })\n },\n [track]\n )\n\n const trackProductView = useCallback(\n (productId: string, productName: string, category: string, price?: number) => {\n track('product_view', { product_id: productId, product_name: productName, category, price })\n },\n [track]\n )\n\n const trackCategoryView = useCallback(\n (categoryId: string, categoryName: string) => {\n track('category_view', { category_id: categoryId, category_name: categoryName })\n },\n [track]\n )\n\n const trackSearch = useCallback(\n (query: string, resultCount?: number) => {\n track('search', { query, result_count: resultCount })\n },\n [track]\n )\n\n const trackBeginCheckout = useCallback(\n (cartId: string, total: number, itemCount: number) => {\n track('begin_checkout', { cart_id: cartId, total, item_count: itemCount })\n },\n [track]\n )\n\n const trackPurchase = useCallback(\n (orderId: string, orderNumber: string, total: number) => {\n track('purchase', { order_id: orderId, order_number: orderNumber, total })\n },\n [track]\n )\n\n const trackAddToCart = useCallback(\n (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n track('add_to_cart', { product_id: productId, product_name: productName, quantity, price, tier })\n },\n [track]\n )\n\n const trackRemoveFromCart = useCallback(\n (productId: string, productName: string) => {\n track('remove_from_cart', { product_id: productId, product_name: productName })\n },\n [track]\n )\n\n return {\n track,\n trackPageView,\n trackProductView,\n trackCategoryView,\n trackSearch,\n trackBeginCheckout,\n trackPurchase,\n trackAddToCart,\n trackRemoveFromCart,\n linkCustomer,\n getOrCreateSession,\n /** Whether tracking is globally enabled for this storefront */\n trackingEnabled,\n /** Configured recording sample rate (0–1) for behavioral session replays */\n recordingRate: config.recordingRate,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\n\nexport function useAuth() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAuth must be used within <WhaleProvider>')\n\n return useStore(ctx.authStore, useShallow((s) => ({\n customer: s.customer,\n authLoading: s.authLoading,\n sessionToken: s.sessionToken,\n isAuthenticated: s.isSessionValid(),\n sendCode: s.sendOTP,\n verifyCode: s.verifyOTP,\n restoreSession: s.restoreSession,\n logout: s.logout,\n fetchCustomer: s.fetchCustomer,\n })))\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { useAnalytics } from '../hooks/use-analytics.js'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Auto-tracks page views on pathname change and links customer sessions.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n *\n * When `config.trackingEnabled` is false the component renders nothing and\n * skips all side-effects — the underlying hook guards individual calls too,\n * but short-circuiting here avoids session creation entirely.\n */\nexport function AnalyticsTracker({ pathname }: { pathname: string }) {\n const ctx = useContext(WhaleContext)\n const { trackPageView, linkCustomer } = useAnalytics()\n const { customer } = useAuth()\n const prevPathname = useRef<string | null>(null)\n const linkedCustomerId = useRef<string | null>(null)\n\n const trackingEnabled = ctx?.config.trackingEnabled ?? true\n\n // Track page views on route change\n useEffect(() => {\n if (!trackingEnabled) return\n if (pathname === prevPathname.current) return\n const referrer = prevPathname.current || (typeof document !== 'undefined' ? document.referrer : '')\n prevPathname.current = pathname\n trackPageView(pathname, referrer || undefined)\n }, [pathname, trackPageView, trackingEnabled])\n\n // Link customer session on login\n useEffect(() => {\n if (!trackingEnabled) return\n if (customer?.id && customer.id !== linkedCustomerId.current) {\n linkedCustomerId.current = customer.id\n linkCustomer(customer.id)\n }\n }, [customer?.id, linkCustomer, trackingEnabled])\n\n return null\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\nimport type { CartState, CartActions } from '../stores/cart-store.js'\n\ntype CartReturn = Pick<\n CartState & CartActions,\n 'cartId' | 'cartOpen' | 'cartLoading' | 'items' | 'itemCount' | 'subtotal' | 'taxAmount' | 'total' | 'taxBreakdown' | 'productImages' |\n 'addItem' | 'removeItem' | 'updateQuantity' | 'toggleCart' | 'openCart' | 'closeCart' | 'checkout' | 'initCart' | 'syncCart' | 'clearCart'\n>\n\nexport function useCart() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCart must be used within <WhaleProvider>')\n\n return useStore(ctx.cartStore, useShallow((s) => ({\n cartId: s.cartId,\n items: s.items,\n itemCount: s.itemCount,\n subtotal: s.subtotal,\n taxAmount: s.taxAmount,\n total: s.total,\n taxBreakdown: s.taxBreakdown,\n cartOpen: s.cartOpen,\n cartLoading: s.cartLoading,\n productImages: s.productImages,\n addItem: s.addItem,\n removeItem: s.removeItem,\n updateQuantity: s.updateQuantity,\n toggleCart: s.toggleCart,\n openCart: s.openCart,\n closeCart: s.closeCart,\n initCart: s.initCart,\n syncCart: s.syncCart,\n clearCart: s.clearCart,\n checkout: s.checkout,\n })))\n}\n\n/** Granular selector — only re-renders on count change */\nexport function useCartItemCount(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartItemCount must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.itemCount)\n}\n\n/** Granular selector — only re-renders on total change */\nexport function useCartTotal(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartTotal must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.total)\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useCart } from '../hooks/use-cart.js'\n\n/**\n * Hydrates cart from gateway on mount if a cartId is persisted.\n * Rendered internally by WhaleProvider.\n */\nexport function CartInitializer() {\n const { cartId, syncCart } = useCart()\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n if (cartId) {\n syncCart().catch(() => {\n // Cart may have expired — that's fine, addItem will auto-recover\n })\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Restores auth session on mount — syncs persisted token to client.\n * Rendered internally by WhaleProvider.\n */\nexport function AuthInitializer() {\n const { restoreSession } = useAuth()\n const restored = useRef(false)\n\n useEffect(() => {\n if (restored.current) return\n restored.current = true\n restoreSession()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { PixelManager } from '../../pixels/pixel-manager.js'\nimport type { StorefrontConfig } from '../../pixels/types.js'\n\nexport interface PixelInitializerProps {\n onReady: (manager: PixelManager) => void\n onTheme?: (theme: Record<string, unknown>) => void\n}\n\n/**\n * Fetches storefront config on mount and initializes pixel providers + theme.\n * Sets pixelManager on context so useAnalytics can dispatch events to it.\n * If the config includes a `theme` field, calls onTheme so the provider can apply it.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n */\nexport function PixelInitializer({ onReady, onTheme }: PixelInitializerProps) {\n const ctx = useContext(WhaleContext)\n const initialized = useRef(false)\n\n useEffect(() => {\n if (!ctx || initialized.current) return\n if (typeof window === 'undefined') return\n initialized.current = true\n\n const { client } = ctx\n\n client.fetchStorefrontConfig().then(async (config: StorefrontConfig) => {\n // Apply theme if present\n if (config.theme && onTheme) {\n onTheme(config.theme)\n }\n\n // Initialize pixels if tracking is enabled\n if (ctx.config.trackingEnabled && config.pixels && config.pixels.length > 0) {\n const manager = new PixelManager(config.pixels)\n await manager.initialize()\n onReady(manager)\n }\n }).catch(() => {\n // Storefront config fetch failed — degrade silently\n })\n }, [ctx, onReady, onTheme])\n\n return null\n}\n","'use client'\n\nimport { useMemo, useState, useCallback, type ReactNode } from 'react'\nimport { usePathname } from 'next/navigation'\nimport { WhaleClient } from '../client.js'\nimport type { WhaleStorefrontConfig, Product } from '../types.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\nimport { WhaleContext, type WhaleContextValue } from './context.js'\nimport { createCartStore } from './stores/cart-store.js'\nimport { createAuthStore } from './stores/auth-store.js'\nimport { AnalyticsTracker } from './components/analytics-tracker.js'\nimport { CartInitializer } from './components/cart-initializer.js'\nimport { AuthInitializer } from './components/auth-initializer.js'\nimport { PixelInitializer } from './components/pixel-initializer.js'\nimport { ThemeProvider, type ThemeTokens } from '@neowhale/ui'\n\n/** Read a boolean env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envBool(name: string): boolean | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n return raw !== '0' && raw.toLowerCase() !== 'false'\n}\n\n/** Read a numeric env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envNumber(name: string): number | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n const n = Number(raw)\n return Number.isFinite(n) ? n : undefined\n}\n\nexport interface WhaleProviderProps extends WhaleStorefrontConfig {\n children: ReactNode\n /** Server-fetched products passed to client for hooks */\n products?: Product[]\n /** Manual theme overrides — merged with store theme fetched from storefront config */\n theme?: Partial<ThemeTokens>\n}\n\nexport function WhaleProvider({\n children,\n products = [],\n theme: themeProp,\n storeId,\n apiKey,\n gatewayUrl,\n proxyPath,\n mediaSigningSecret,\n supabaseHost,\n storagePrefix,\n sessionTtl,\n debug,\n trackingEnabled,\n recordingRate,\n}: WhaleProviderProps) {\n const pathname = usePathname()\n const [pixelManager, setPixelManager] = useState<PixelManager | null>(null)\n const [storeTheme, setStoreTheme] = useState<Partial<ThemeTokens> | undefined>(undefined)\n\n const handlePixelReady = useCallback((manager: PixelManager) => {\n setPixelManager(manager)\n }, [])\n\n const handleTheme = useCallback((theme: Record<string, unknown>) => {\n setStoreTheme(theme as Partial<ThemeTokens>)\n }, [])\n\n const ctx = useMemo<WhaleContextValue>(() => {\n const resolvedConfig = {\n storeId,\n apiKey,\n gatewayUrl: gatewayUrl || 'https://whale-gateway.fly.dev',\n proxyPath: proxyPath || '/api/gw',\n mediaSigningSecret: mediaSigningSecret || '',\n supabaseHost: supabaseHost || '',\n storagePrefix: storagePrefix || 'whale',\n sessionTtl: sessionTtl || 30 * 60 * 1000,\n debug: debug || false,\n trackingEnabled: trackingEnabled ?? envBool('NEXT_PUBLIC_TRACKING_ENABLED') ?? true,\n recordingRate: recordingRate ?? envNumber('NEXT_PUBLIC_RECORDING_RATE') ?? 0.1,\n }\n\n const client = new WhaleClient({\n storeId,\n apiKey,\n gatewayUrl: resolvedConfig.gatewayUrl,\n proxyPath: resolvedConfig.proxyPath,\n })\n\n // Analytics callbacks wired into cart store\n // These get called by the cart store on add/remove and fire analytics events.\n // We can't use the useAnalytics hook here (not in a component), so we use\n // the client directly — the AnalyticsTracker manages sessions.\n const cartStore = createCartStore(client, resolvedConfig.storagePrefix)\n const authStore = createAuthStore(client, resolvedConfig.storagePrefix)\n\n return {\n client,\n config: resolvedConfig,\n cartStore,\n authStore,\n products,\n pixelManager: null,\n }\n // Only recreate when identity changes — storeId + apiKey\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storeId, apiKey])\n\n // Update products and pixelManager on the context when they change\n const value = useMemo<WhaleContextValue>(\n () => ({ ...ctx, products, pixelManager }),\n [ctx, products, pixelManager]\n )\n\n // Merge store-fetched theme with manual overrides (manual takes precedence)\n const mergedTheme = useMemo<Partial<ThemeTokens> | undefined>(() => {\n if (!storeTheme && !themeProp) return undefined\n return { ...storeTheme, ...themeProp }\n }, [storeTheme, themeProp])\n\n return (\n <WhaleContext.Provider value={value}>\n <ThemeProvider theme={mergedTheme}>\n <AuthInitializer />\n <CartInitializer />\n <AnalyticsTracker pathname={pathname} />\n <PixelInitializer onReady={handlePixelReady} onTheme={handleTheme} />\n {children}\n </ThemeProvider>\n </WhaleContext.Provider>\n )\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\n/**\n * Returns products passed via WhaleProvider.\n * Optionally filters by category or search.\n */\nexport function useProducts(opts?: {\n categoryId?: string\n search?: string\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProducts must be used within <WhaleProvider>')\n\n const allProducts = ctx.products\n\n const products = useMemo(() => {\n let result = allProducts\n if (opts?.categoryId) {\n result = result.filter((p) => p.primary_category_id === opts.categoryId)\n }\n if (opts?.search) {\n const q = opts.search.toLowerCase()\n result = result.filter(\n (p) =>\n p.name.toLowerCase().includes(q) ||\n p.description?.toLowerCase().includes(q) ||\n p.slug.toLowerCase().includes(q)\n )\n }\n return result\n }, [allProducts, opts?.categoryId, opts?.search])\n\n return {\n products,\n allProducts,\n loading: false,\n }\n}\n\n/**\n * Returns a single product by slug from the provider's product list.\n */\nexport function useProduct(slug: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProduct must be used within <WhaleProvider>')\n\n const product = useMemo(() => {\n if (!slug) return null\n return ctx.products.find((p) => p.slug === slug) ?? null\n }, [ctx.products, slug])\n\n return {\n product,\n loading: false,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { WhaleClient } from '../../client.js'\n\nexport function useWhaleClient(): WhaleClient {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWhaleClient must be used within <WhaleProvider>')\n return ctx.client\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { Order, CustomerAnalytics } from '../../types.js'\n\nexport function useCustomerOrders() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerOrders must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [orders, setOrders] = useState<Order[]>([])\n const [loading, setLoading] = useState(false)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setOrders([])\n return\n }\n setLoading(true)\n try {\n const data = await ctx.client.getCustomerOrders(customer.id)\n setOrders(data)\n } catch {\n setOrders([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { orders, loading, refresh }\n}\n\nexport function useCustomerAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerAnalytics must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [analytics, setAnalytics] = useState<CustomerAnalytics | null>(null)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (!customer?.id) {\n setAnalytics(null)\n return\n }\n setLoading(true)\n const name = `${customer.first_name} ${customer.last_name}`.trim()\n ctx.client\n .getCustomerAnalytics(customer.id, name || undefined)\n .then(setAnalytics)\n .catch(() => setAnalytics(null))\n .finally(() => setLoading(false))\n }, [customer?.id, customer?.first_name, customer?.last_name, ctx.client])\n\n return { analytics, loading }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { CheckoutSession, Order, Address, PaymentData } from '../../types.js'\n\nexport function useCheckout() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCheckout must be used within <WhaleProvider>')\n\n const [session, setSession] = useState<CheckoutSession | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const createSession = useCallback(async (params: {\n cart_id: string\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.createCheckoutSession(params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const updateSession = useCallback(async (params: {\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n }) => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.updateCheckoutSession(session.id, params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const complete = useCallback(async (payment?: PaymentData): Promise<Order> => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const order = await ctx.client.completeCheckout(session.id, payment)\n setSession(null)\n return order\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const reset = useCallback(() => {\n setSession(null)\n setError(null)\n }, [])\n\n return { session, loading, error, createSession, updateSession, complete, reset }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\nexport interface SearchParams {\n query: string\n category_id?: string\n min_price?: number\n max_price?: number\n sort_by?: string\n sort_order?: 'asc' | 'desc'\n limit?: number\n}\n\nexport function useSearch() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useSearch must be used within <WhaleProvider>')\n\n const [results, setResults] = useState<Product[]>([])\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [cursor, setCursor] = useState<string | undefined>(undefined)\n\n const search = useCallback(async (params: SearchParams) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts(params)\n setResults(data.data)\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setResults([])\n setHasMore(false)\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const loadMore = useCallback(async (params: SearchParams) => {\n if (!cursor || !hasMore) return\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts({ ...params, starting_after: cursor })\n setResults((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [ctx.client, cursor, hasMore])\n\n const clear = useCallback(() => {\n setResults([])\n setHasMore(false)\n setCursor(undefined)\n setError(null)\n }, [])\n\n return { results, hasMore, loading, error, search, loadMore, clear }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Category, CategoryTreeNode } from '../../types.js'\n\nfunction buildTree(categories: Category[]): CategoryTreeNode[] {\n const map = new Map<string, CategoryTreeNode>()\n const roots: CategoryTreeNode[] = []\n\n for (const cat of categories) {\n map.set(cat.id, { ...cat, children: [] })\n }\n\n for (const cat of categories) {\n const node = map.get(cat.id)!\n if (cat.parent_id && map.has(cat.parent_id)) {\n map.get(cat.parent_id)!.children.push(node)\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n\nexport function useCategories() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCategories must be used within <WhaleProvider>')\n\n const [categories, setCategories] = useState<Category[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listCategories()\n setCategories(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setCategories([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const tree = useMemo(() => buildTree(categories), [categories])\n\n const getCategory = useCallback(async (id: string) => {\n return ctx.client.getCategory(id)\n }, [ctx.client])\n\n return { categories, tree, loading, error, refresh, getCategory }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { LoyaltyAccount, LoyaltyReward, LoyaltyTransaction } from '../../types.js'\n\nexport function useLoyalty() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLoyalty must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [account, setAccount] = useState<LoyaltyAccount | null>(null)\n const [rewards, setRewards] = useState<LoyaltyReward[]>([])\n const [transactions, setTransactions] = useState<LoyaltyTransaction[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setAccount(null)\n setRewards([])\n setTransactions([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const [acct, rwds, txns] = await Promise.all([\n ctx.client.getLoyaltyAccount(customer.id),\n ctx.client.listLoyaltyRewards(),\n ctx.client.listLoyaltyTransactions(customer.id),\n ])\n setAccount(acct)\n setRewards(rwds.data)\n setTransactions(txns.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const redeemReward = useCallback(async (rewardId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n const result = await ctx.client.redeemLoyaltyReward(customer.id, rewardId)\n await refresh()\n return result\n }, [customer?.id, ctx.client, refresh])\n\n return { account, rewards, transactions, loading, error, refresh, redeemReward }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Review, ReviewSummary } from '../../types.js'\n\nexport function useReviews(productId: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReviews must be used within <WhaleProvider>')\n\n const [reviews, setReviews] = useState<Review[]>([])\n const [summary, setSummary] = useState<ReviewSummary | null>(null)\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!productId) {\n setReviews([])\n setSummary(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listProductReviews(productId)\n setReviews(data.data)\n setSummary(data.summary ?? null)\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setReviews([])\n setSummary(null)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const loadMore = useCallback(async () => {\n if (!productId || !hasMore || reviews.length === 0) return\n setLoading(true)\n setError(null)\n try {\n const cursor = reviews[reviews.length - 1].id\n const data = await ctx.client.listProductReviews(productId, { starting_after: cursor })\n setReviews((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client, hasMore, reviews])\n\n const submit = useCallback(async (data: {\n rating: number\n title?: string\n body?: string\n customer_name?: string\n }) => {\n if (!productId) throw new Error('No product ID provided')\n const review = await ctx.client.submitReview(productId, data)\n await refresh()\n return review\n }, [productId, ctx.client, refresh])\n\n return { reviews, summary, hasMore, loading, error, refresh, loadMore, submit }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { WishlistItem } from '../../types.js'\n\nexport function useWishlist() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWishlist must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [items, setItems] = useState<WishlistItem[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setItems([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listWishlistItems(customer.id)\n setItems(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setItems([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const add = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n const item = await ctx.client.addWishlistItem(customer.id, productId)\n setItems((prev) => [...prev, item])\n return item\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const remove = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n await ctx.client.removeWishlistItem(customer.id, productId)\n setItems((prev) => prev.filter((item) => item.product_id !== productId))\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const has = useCallback((productId: string): boolean => {\n return items.some((item) => item.product_id === productId)\n }, [items])\n\n const toggle = useCallback(async (productId: string) => {\n if (has(productId)) {\n await remove(productId)\n } else {\n await add(productId)\n }\n }, [has, add, remove])\n\n return { items, loading, error, refresh, add, remove, has, toggle }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Recommendation } from '../../types.js'\n\nexport function useRecommendations(params?: {\n product_id?: string\n customer_id?: string\n limit?: number\n type?: 'similar' | 'frequently_bought_together' | 'personalized'\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useRecommendations must be used within <WhaleProvider>')\n\n const [recommendations, setRecommendations] = useState<Recommendation[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n // Stable dependency key to avoid infinite re-renders\n const productId = params?.product_id\n const customerId = params?.customer_id\n const limit = params?.limit\n const type = params?.type\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.getRecommendations({\n product_id: productId,\n customer_id: customerId,\n limit,\n type,\n })\n setRecommendations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRecommendations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client, productId, customerId, limit, type])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { recommendations, loading, error, refresh }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Location } from '../../types.js'\n\nexport function useLocations() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLocations must be used within <WhaleProvider>')\n\n const [locations, setLocations] = useState<Location[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listLocations()\n setLocations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setLocations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const getLocation = useCallback(async (id: string) => {\n return ctx.client.getLocation(id)\n }, [ctx.client])\n\n return { locations, loading, error, refresh, getLocation }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { ShippingMethod, ShippingRate, Address } from '../../types.js'\n\nexport function useShipping() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useShipping must be used within <WhaleProvider>')\n\n const [methods, setMethods] = useState<ShippingMethod[]>([])\n const [rates, setRates] = useState<ShippingRate[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refreshMethods = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listShippingMethods()\n setMethods(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setMethods([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refreshMethods()\n }, [refreshMethods])\n\n const calculateRates = useCallback(async (params: {\n cart_id: string\n shipping_address: Address\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.calculateShippingRates(params)\n setRates(data.data)\n return data.data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRates([])\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n return { methods, rates, loading, error, refreshMethods, calculateRates }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { CouponValidation, Cart } from '../../types.js'\n\nexport function useCoupons() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCoupons must be used within <WhaleProvider>')\n\n const [validation, setValidation] = useState<CouponValidation | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const validate = useCallback(async (code: string, cartId?: string): Promise<CouponValidation> => {\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.validateCoupon(code, cartId ? { cart_id: cartId } : undefined)\n setValidation(result)\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setValidation(null)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const apply = useCallback(async (cartId: string, code: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.applyCoupon(cartId, code)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const remove = useCallback(async (cartId: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.removeCoupon(cartId)\n setValidation(null)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const clear = useCallback(() => {\n setValidation(null)\n setError(null)\n }, [])\n\n return { validation, loading, error, validate, apply, remove, clear }\n}\n","'use client'\n\nimport { useEffect, useState, useCallback } from 'react'\nimport type { QRLandingData } from '../../types.js'\n\nexport interface QRLandingPageProps {\n code: string\n gatewayUrl?: string\n renderProduct?: (data: QRLandingData) => React.ReactNode\n renderCOA?: (data: QRLandingData) => React.ReactNode\n renderPage?: (data: QRLandingData) => React.ReactNode\n onDataLoaded?: (data: QRLandingData) => void\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\nexport function QRLandingPage({\n code,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderProduct,\n renderCOA,\n renderPage,\n onDataLoaded,\n onError,\n}: QRLandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<QRLandingData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!code) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/q/${encodeURIComponent(code)}/page`)\n if (!cancelled) {\n if (res.status === 404) { setState('not_found'); return }\n if (res.status === 410) { setState('expired'); return }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: QRLandingData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [code, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n if (renderPage) return <>{renderPage(data)}</>\n\n return <ProductLanding data={data} renderProduct={renderProduct} renderCOA={renderCOA} />\n}\n\n// ─── Theme Extraction ───────────────────────────────────────────────────────\n\ninterface PageTheme {\n bg: string; fg: string; accent: string; accentDark: string\n surface: string; surfaceLight: string; muted: string; border: string\n fontDisplay: string; fontBody: string; radius: string\n}\n\nfunction extractTheme(data: QRLandingData): PageTheme {\n const lp = data.qr_code.landing_page\n const t = data.store?.theme as Record<string, unknown> | null | undefined\n return {\n bg: lp.background_color || (t?.background as string) || '#050505',\n fg: lp.text_color || (t?.foreground as string) || '#fafafa',\n accent: (t?.accent as string) || '#E8E2D9',\n accentDark: (t?.accentDark as string) || '#C8BFB2',\n surface: (t?.surface as string) || '#0C0C0C',\n surfaceLight: (t?.surfaceLight as string) || '#141414',\n muted: (t?.muted as string) || '#8A8A8A',\n border: (t?.border as string) || '#1C1C1C',\n fontDisplay: (t?.fontDisplay as string) || 'system-ui, -apple-system, sans-serif',\n fontBody: (t?.fontBody as string) || 'system-ui, -apple-system, sans-serif',\n radius: (t?.radius as string) || '0px',\n }\n}\n\n// ─── Product Landing (matches Flora Distro product page aesthetic) ──────────\n\nfunction ProductLanding({\n data,\n renderProduct,\n renderCOA,\n}: {\n data: QRLandingData\n renderProduct?: (data: QRLandingData) => React.ReactNode\n renderCOA?: (data: QRLandingData) => React.ReactNode\n}) {\n const { qr_code: qr, store, product, coa } = data\n const lp = qr.landing_page\n const theme = extractTheme(data)\n const [showCOA, setShowCOA] = useState(false)\n\n const logoUrl = qr.logo_url || store?.logo_url\n const productImage = lp.image_url || (product?.featured_image as string) || null\n const productName = lp.title || (product?.name as string) || qr.name\n const description = lp.description || (product?.description as string) || ''\n const ctaUrl = lp.cta_url || qr.destination_url\n const categoryName = (product?.category_name as string) ?? null\n\n // Custom fields — guard empty strings from DB\n const cf = product?.custom_fields as Record<string, unknown> | null | undefined\n const thca = toNum(cf?.thca_percentage)\n const thc = toNum(cf?.d9_percentage)\n const cbd = toNum(cf?.cbd_total)\n const strainType = toStr(cf?.strain_type)\n const batchNumber = toStr(cf?.batch_number)\n const dateTested = toStr(cf?.date_tested)\n const terpenes = toStr(cf?.terpenes)\n const effects = toStr(cf?.effects)\n const genetics = toStr(cf?.genetics)\n const tagline = toStr(cf?.tagline)\n\n // Pricing removed — not shown on scan page\n\n const handleCOAClick = useCallback(() => { if (coa) setShowCOA(true) }, [coa])\n\n // Inline label style (matches product page section headers)\n const labelStyle: React.CSSProperties = {\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: `${theme.fg}40`, // 40 = 25% opacity\n }\n\n const dividerStyle: React.CSSProperties = {\n border: 'none',\n borderTop: `1px solid ${theme.fg}0A`, // 0A = 4% opacity\n margin: 0,\n }\n\n return (\n <div style={{\n minHeight: '100dvh',\n background: theme.bg,\n color: theme.fg,\n fontFamily: theme.fontBody,\n }}>\n {/* Navbar */}\n <nav style={{\n padding: '1.25rem 1.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n maxWidth: 1280,\n margin: '0 auto',\n }}>\n {logoUrl ? (\n <img src={logoUrl} alt={store?.name || ''} style={{ height: 28, objectFit: 'contain' }} />\n ) : store?.name ? (\n <span style={{ fontFamily: theme.fontDisplay, fontWeight: 600, fontSize: '1rem', letterSpacing: '-0.02em' }}>\n {store.name}\n </span>\n ) : <span />}\n\n <a\n href={ctaUrl}\n style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: theme.fg,\n textDecoration: 'none',\n padding: '0.5rem 1.25rem',\n border: `1px solid ${theme.fg}10`,\n transition: 'border-color 0.3s',\n }}\n >\n Shop\n </a>\n </nav>\n\n {/* Main content */}\n <main style={{ maxWidth: 560, margin: '0 auto', padding: '0 1.5rem 3rem' }}>\n\n {/* Product image */}\n {productImage && (\n <div style={{\n width: '100%',\n aspectRatio: '1',\n overflow: 'hidden',\n background: theme.surfaceLight,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '2rem',\n }}>\n <img\n src={productImage}\n alt={productName}\n style={{ maxWidth: '100%', maxHeight: '100%', objectFit: 'contain' }}\n />\n </div>\n )}\n\n {/* Category + strain */}\n <div style={{ marginTop: '1.5rem', display: 'flex', gap: '0.75rem', alignItems: 'center' }}>\n {categoryName && (\n <span style={{\n fontSize: 11,\n fontWeight: 500,\n color: theme.accent,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n }}>\n {categoryName}\n </span>\n )}\n {strainType && (\n <span style={{\n fontSize: 10,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n padding: '0.2rem 0.5rem',\n background: strainBadgeColor(strainType),\n color: '#fff',\n }}>\n {strainType}\n </span>\n )}\n </div>\n\n {/* Product name */}\n <h1 style={{\n fontFamily: theme.fontDisplay,\n fontSize: 'clamp(2rem, 8vw, 3rem)',\n fontWeight: 300,\n margin: '0.5rem 0 0',\n lineHeight: 1.1,\n letterSpacing: '-0.02em',\n }}>\n {productName}\n </h1>\n\n {/* Tagline */}\n {tagline && (\n <p style={{\n fontFamily: theme.fontDisplay,\n fontSize: '1.1rem',\n fontWeight: 300,\n color: `${theme.fg}80`,\n margin: '0.5rem 0 0',\n }}>\n {tagline}\n </p>\n )}\n\n {/* Custom render slot */}\n {renderProduct ? renderProduct(data) : null}\n\n {/* Cannabinoid stats — large, prominent like the product page */}\n {(thca != null || thc != null || cbd != null) && (\n <div style={{\n marginTop: '1.75rem',\n border: `1px solid ${theme.fg}0F`,\n display: 'grid',\n gridTemplateColumns: `repeat(${[thca, thc, cbd].filter(v => v != null).length}, 1fr)`,\n }}>\n {thca != null && (\n <CannabinoidStat label=\"THCa\" value={thca} theme={theme} showBorder={thc != null || cbd != null} />\n )}\n {thc != null && (\n <CannabinoidStat label=\"Δ9 THC\" value={thc} theme={theme} showBorder={cbd != null} />\n )}\n {cbd != null && (\n <CannabinoidStat label=\"CBD\" value={cbd} theme={theme} showBorder={false} />\n )}\n </div>\n )}\n\n {/* Details section */}\n {(genetics || terpenes || effects || batchNumber || dateTested) && (\n <div style={{ marginTop: '1.75rem' }}>\n <p style={{ ...labelStyle, marginBottom: '0.75rem' }}>Details</p>\n <div>\n {genetics && <><DetailRow label=\"Genetics\" value={genetics} theme={theme} /><hr style={dividerStyle} /></>}\n {terpenes && <><DetailRow label=\"Terpenes\" value={terpenes} theme={theme} /><hr style={dividerStyle} /></>}\n {effects && <><DetailRow label=\"Effects\" value={effects} theme={theme} /><hr style={dividerStyle} /></>}\n {batchNumber && <><DetailRow label=\"Batch\" value={batchNumber} theme={theme} /><hr style={dividerStyle} /></>}\n {dateTested && <DetailRow label=\"Tested\" value={formatDate(dateTested)} theme={theme} />}\n </div>\n </div>\n )}\n\n {/* Description */}\n {description && (\n <div style={{ marginTop: '1.75rem' }}>\n <p style={{ ...labelStyle, marginBottom: '0.75rem' }}>About</p>\n <p style={{\n fontSize: '0.9rem',\n fontWeight: 300,\n color: `${theme.fg}99`,\n lineHeight: 1.7,\n margin: 0,\n }}>\n {description}\n </p>\n </div>\n )}\n\n {/* COA section — preview card like the product page */}\n {coa && (\n <div style={{ marginTop: '1.75rem' }}>\n <p style={{ ...labelStyle, marginBottom: '0.75rem' }}>Lab Results</p>\n {batchNumber && (\n <p style={{ fontSize: 12, color: `${theme.fg}60`, margin: '0 0 0.5rem', letterSpacing: '0.05em' }}>\n Batch {batchNumber}{dateTested ? ` · ${formatDate(dateTested)}` : ''}\n </p>\n )}\n <button\n onClick={handleCOAClick}\n style={{\n width: '100%',\n position: 'relative',\n height: 180,\n border: `1px solid ${theme.fg}0F`,\n background: theme.surface,\n cursor: 'pointer',\n overflow: 'hidden',\n padding: 0,\n display: 'block',\n }}\n >\n <iframe\n src={coa.url}\n style={{\n width: '200%',\n height: '200%',\n border: 'none',\n transform: 'scale(0.5)',\n transformOrigin: 'top left',\n pointerEvents: 'none',\n }}\n title=\"COA Preview\"\n tabIndex={-1}\n />\n <div style={{\n position: 'absolute',\n inset: 0,\n background: `linear-gradient(to top, ${theme.bg}E6 0%, transparent 60%)`,\n display: 'flex',\n alignItems: 'flex-end',\n justifyContent: 'center',\n paddingBottom: '1.25rem',\n }}>\n <span style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.2em',\n color: theme.accent,\n }}>\n View Certificate of Analysis\n </span>\n </div>\n </button>\n </div>\n )}\n\n {/* Custom COA render slot */}\n {renderCOA ? renderCOA(data) : null}\n\n {/* CTA */}\n <a\n href={ctaUrl}\n style={{\n display: 'block',\n width: '100%',\n marginTop: '2rem',\n padding: '1rem',\n background: theme.fg,\n color: theme.bg,\n fontFamily: theme.fontDisplay,\n fontSize: '0.85rem',\n fontWeight: 500,\n textAlign: 'center',\n textDecoration: 'none',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n boxSizing: 'border-box',\n }}\n >\n Shop Online\n </a>\n\n {/* Footer */}\n <footer style={{\n marginTop: '3rem',\n paddingTop: '1.5rem',\n borderTop: `1px solid ${theme.fg}0A`,\n textAlign: 'center',\n }}>\n <div style={{ display: 'flex', justifyContent: 'center', gap: '2rem', marginBottom: '0.75rem' }}>\n {coa && <FooterLabel text=\"Lab Verified\" />}\n <FooterLabel text=\"Authentic Product\" />\n </div>\n {store?.name && (\n <p style={{ fontSize: 11, color: `${theme.fg}40`, margin: '0.5rem 0 0', letterSpacing: '0.1em' }}>\n {store.name}\n {store?.tagline ? ` — ${store.tagline}` : ''}\n </p>\n )}\n </footer>\n </main>\n\n {/* COA Modal */}\n {showCOA && coa && <COAModal coa={coa} theme={theme} onClose={() => setShowCOA(false)} />}\n </div>\n )\n}\n\n// ─── Sub-components ─────────────────────────────────────────────────────────\n\nfunction CannabinoidStat({ label, value, theme, showBorder }: {\n label: string; value: number; theme: PageTheme; showBorder: boolean\n}) {\n return (\n <div style={{\n padding: '1.25rem 0.5rem',\n textAlign: 'center',\n borderRight: showBorder ? `1px solid ${theme.fg}0F` : undefined,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay,\n fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300,\n lineHeight: 1,\n color: theme.fg,\n }}>\n {value.toFixed(value >= 1 ? 1 : 2)}\n <span style={{ fontSize: '0.6em', marginLeft: 1 }}>%</span>\n </div>\n <div style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: theme.accent,\n marginTop: '0.5rem',\n }}>\n {label}\n </div>\n </div>\n )\n}\n\nfunction DetailRow({ label, value, theme }: { label: string; value: string; theme: PageTheme }) {\n return (\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: '0.625rem 0',\n }}>\n <span style={{\n fontSize: 12,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: `${theme.fg}66`,\n }}>\n {label}\n </span>\n <span style={{\n fontSize: 14,\n fontWeight: 300,\n color: `${theme.fg}CC`,\n }}>\n {value}\n </span>\n </div>\n )\n}\n\nfunction FooterLabel({ text }: { text: string }) {\n return (\n <span style={{\n fontSize: 10,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: 'rgba(255,255,255,0.25)',\n }}>\n {text}\n </span>\n )\n}\n\nfunction COAModal({ coa, theme, onClose }: {\n coa: { url: string; document_name: string }; theme: PageTheme; onClose: () => void\n}) {\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 9999, background: 'rgba(0,0,0,0.95)', display: 'flex', flexDirection: 'column' }}>\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.75rem 1rem',\n borderBottom: `1px solid ${theme.fg}10`,\n }}>\n <span style={{\n color: '#fff',\n fontFamily: theme.fontDisplay,\n fontWeight: 500,\n fontSize: '0.85rem',\n letterSpacing: '-0.01em',\n }}>\n {coa.document_name || 'Lab Results'}\n </span>\n <button\n onClick={onClose}\n style={{\n background: `${theme.fg}10`,\n border: 'none',\n color: '#fff',\n fontSize: '0.85rem',\n cursor: 'pointer',\n padding: '0.375rem 0.75rem',\n letterSpacing: '0.05em',\n }}\n >\n Close\n </button>\n </div>\n <iframe src={coa.url} style={{ flex: 1, border: 'none', background: '#fff' }} title=\"Lab Results\" />\n </div>\n )\n}\n\nfunction toNum(v: unknown): number | null {\n if (v === '' || v == null) return null\n const n = Number(v)\n return Number.isFinite(n) ? n : null\n}\n\nfunction toStr(v: unknown): string | null {\n if (v == null || v === '') return null\n return String(v)\n}\n\nfunction strainBadgeColor(strain: string): string {\n const s = strain.toLowerCase()\n if (s === 'sativa') return '#22c55e'\n if (s === 'indica') return '#8b5cf6'\n if (s === 'hybrid') return '#f59e0b'\n return '#6b7280'\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n } catch { return dateStr }\n}\n\n// ─── State Screens ──────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Not Found</h1>\n <p style={{ color: '#888' }}>This QR code does not exist or has been deactivated.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Expired</h1>\n <p style={{ color: '#888' }}>This QR code is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try scanning again.'}</p>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useState, useCallback } from 'react'\nimport type { LandingPageRenderData, LandingSection, QRLandingStore } from '../../types.js'\n\n// ─── Theme ───────────────────────────────────────────────────────────────────\n\ninterface Theme {\n bg: string\n fg: string\n accent: string\n surface: string\n muted: string\n}\n\n// ─── Section Renderer Types ──────────────────────────────────────────────────\n\ninterface SectionRendererProps {\n section: LandingSection\n data: LandingPageRenderData\n theme: Theme\n}\n\nexport interface LandingPageProps {\n /** Landing page slug */\n slug: string\n /** Gateway URL — defaults to https://whale-gateway.fly.dev */\n gatewayUrl?: string\n /**\n * Override rendering for any section type.\n * Return the custom element, or call defaultRenderer() for the built-in output.\n */\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n /** Called when data is loaded */\n onDataLoaded?: (data: LandingPageRenderData) => void\n /** Called on error */\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\n/**\n * LandingPage — drop-in component that renders a configurable landing page\n * fetched from the gateway's public endpoint.\n *\n * Usage:\n * ```tsx\n * import { LandingPage } from '@neowhale/storefront/react'\n * export default function Page({ params }: { params: { slug: string } }) {\n * return <LandingPage slug={params.slug} />\n * }\n * ```\n */\nexport function LandingPage({\n slug,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n}: LandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<LandingPageRenderData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!slug) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/l/${encodeURIComponent(slug)}`)\n\n if (!cancelled) {\n if (res.status === 404) {\n setState('not_found')\n return\n }\n if (res.status === 410) {\n setState('expired')\n return\n }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: LandingPageRenderData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [slug, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n\n return <PageLayout data={data} renderSection={renderSection} />\n}\n\n// ─── Page Layout ─────────────────────────────────────────────────────────────\n\nfunction PageLayout({\n data,\n renderSection,\n}: {\n data: LandingPageRenderData\n renderSection?: LandingPageProps['renderSection']\n}) {\n const { landing_page: lp, store } = data\n const [showCOA, setShowCOA] = useState(false)\n\n const theme: Theme = {\n bg: lp.background_color || (store?.theme?.background as string) || '#050505',\n fg: lp.text_color || (store?.theme?.foreground as string) || '#fafafa',\n accent: lp.accent_color || (store?.theme?.accent as string) || '#E8E2D9',\n surface: (store?.theme?.surface as string) || '#111',\n muted: (store?.theme?.muted as string) || '#888',\n }\n\n const fontFamily = lp.font_family || 'system-ui, -apple-system, sans-serif'\n const logoUrl = store?.logo_url\n\n const sorted = [...lp.sections].sort((a, b) => a.order - b.order)\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {/* Custom CSS */}\n {lp.custom_css && <style>{lp.custom_css}</style>}\n\n {/* Header */}\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img\n src={logoUrl}\n alt={store?.name || 'Store'}\n style={{ height: 40, objectFit: 'contain' }}\n />\n </div>\n )}\n\n {/* Sections */}\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <DefaultSectionRenderer\n key={section.id}\n section={section}\n data={data}\n theme={theme}\n onShowCOA={() => setShowCOA(true)}\n />\n )\n\n if (renderSection) {\n return (\n <div key={section.id}>\n {renderSection(section, defaultRenderer)}\n </div>\n )\n }\n\n return (\n <DefaultSectionRenderer\n key={section.id}\n section={section}\n data={data}\n theme={theme}\n onShowCOA={() => setShowCOA(true)}\n />\n )\n })}\n\n {/* Footer */}\n {store?.name && (\n <div style={{ padding: '2rem 1.5rem', borderTop: `1px solid ${theme.surface}`, textAlign: 'center' }}>\n <p style={{ fontSize: '0.75rem', color: theme.muted, margin: 0 }}>\n Powered by {store.name}\n </p>\n </div>\n )}\n\n {/* COA Modal */}\n {showCOA && data.coa && (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n background: 'rgba(0,0,0,0.9)',\n display: 'flex',\n flexDirection: 'column',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '1rem' }}>\n <span style={{ color: '#fff', fontWeight: 600 }}>{data.coa.document_name || 'Lab Results'}</span>\n <button\n onClick={() => setShowCOA(false)}\n style={{ background: 'none', border: 'none', color: '#fff', fontSize: '1.5rem', cursor: 'pointer', padding: '0.5rem' }}\n >\n ✕\n </button>\n </div>\n <iframe\n src={data.coa.url}\n style={{ flex: 1, border: 'none', background: '#fff' }}\n title=\"Lab Results\"\n />\n </div>\n )}\n </div>\n )\n}\n\n// ─── Section Router ──────────────────────────────────────────────────────────\n\nfunction DefaultSectionRenderer({\n section,\n data,\n theme,\n onShowCOA,\n}: SectionRendererProps & { onShowCOA: () => void }) {\n switch (section.type) {\n case 'hero': return <HeroSection section={section} theme={theme} />\n case 'text': return <TextSection section={section} theme={theme} />\n case 'image': return <ImageSection section={section} theme={theme} />\n case 'video': return <VideoSection section={section} theme={theme} />\n case 'gallery': return <GallerySection section={section} theme={theme} />\n case 'cta': return <CTASection section={section} theme={theme} />\n case 'stats': return <StatsSection section={section} theme={theme} />\n case 'product_card': return <ProductCardSection section={section} data={data} theme={theme} />\n case 'coa_viewer': return <COAViewerSection section={section} data={data} theme={theme} onShowCOA={onShowCOA} />\n case 'social_links': return <SocialLinksSection section={section} theme={theme} />\n case 'divider': return <DividerSection theme={theme} />\n default: return null\n }\n}\n\n// ─── Section Renderers ───────────────────────────────────────────────────────\n\nfunction HeroSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { title, subtitle, background_image, cta_text, cta_url } = section.content as {\n title?: string; subtitle?: string; background_image?: string; cta_text?: string; cta_url?: string\n }\n\n return (\n <div\n style={{\n position: 'relative',\n minHeight: '60vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: '3rem 1.5rem',\n backgroundImage: background_image ? `url(${background_image})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n >\n {background_image && (\n <div style={{ position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.5)' }} />\n )}\n <div style={{ position: 'relative', zIndex: 1, maxWidth: 640 }}>\n {title && (\n <h1 style={{ fontSize: '2.5rem', fontWeight: 700, margin: '0 0 1rem', lineHeight: 1.15, color: theme.fg }}>\n {title}\n </h1>\n )}\n {subtitle && (\n <p style={{ fontSize: '1.125rem', color: theme.muted, margin: '0 0 2rem', lineHeight: 1.6 }}>\n {subtitle}\n </p>\n )}\n {cta_text && cta_url && (\n <a\n href={cta_url}\n style={{\n display: 'inline-block',\n padding: '0.875rem 2rem',\n background: theme.accent,\n color: theme.bg,\n textDecoration: 'none',\n fontSize: '0.95rem',\n fontWeight: 600,\n borderRadius: 0,\n }}\n >\n {cta_text}\n </a>\n )}\n </div>\n </div>\n )\n}\n\nfunction TextSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { heading, body } = section.content as { heading?: string; body?: string }\n const align = (section.config?.align as string) || 'left'\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 640, margin: '0 auto', textAlign: align as 'left' | 'center' | 'right' }}>\n {heading && (\n <h2 style={{ fontSize: '1.5rem', fontWeight: 600, margin: '0 0 1rem', color: theme.fg }}>\n {heading}\n </h2>\n )}\n {body && (\n <div style={{ color: theme.muted, lineHeight: 1.7, fontSize: '0.95rem', whiteSpace: 'pre-wrap' }}>\n {body}\n </div>\n )}\n </div>\n )\n}\n\nfunction ImageSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { url, alt, caption } = section.content as { url?: string; alt?: string; caption?: string }\n const contained = section.config?.contained !== false\n\n if (!url) return null\n\n return (\n <div style={{ padding: contained ? '1.5rem' : 0, maxWidth: contained ? 640 : undefined, margin: contained ? '0 auto' : undefined }}>\n <img\n src={url}\n alt={alt || ''}\n style={{ width: '100%', display: 'block', objectFit: 'cover' }}\n />\n {caption && (\n <p style={{ fontSize: '0.8rem', color: theme.muted, textAlign: 'center', marginTop: '0.75rem' }}>\n {caption}\n </p>\n )}\n </div>\n )\n}\n\nfunction VideoSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { url, poster } = section.content as { url?: string; poster?: string }\n\n if (!url) return null\n\n const isEmbed = url.includes('youtube') || url.includes('youtu.be') || url.includes('vimeo')\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {isEmbed ? (\n <div style={{ position: 'relative', paddingBottom: '56.25%', height: 0 }}>\n <iframe\n src={toEmbedUrl(url)}\n style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', border: 'none' }}\n allow=\"autoplay; fullscreen\"\n title=\"Video\"\n />\n </div>\n ) : (\n <video\n src={url}\n poster={poster}\n controls\n style={{ width: '100%', display: 'block', background: theme.surface }}\n />\n )}\n </div>\n )\n}\n\nfunction GallerySection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { images } = section.content as { images?: Array<{ url: string; alt?: string }> }\n const columns = (section.config?.columns as number) || 3\n\n if (!images || images.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 800, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: '0.5rem' }}>\n {images.map((img, i) => (\n <div key={i} style={{ aspectRatio: '1', overflow: 'hidden', background: theme.surface }}>\n <img\n src={img.url}\n alt={img.alt || ''}\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}\n />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction CTASection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { buttons } = section.content as {\n buttons?: Array<{ text: string; url: string; style?: 'primary' | 'outline' }>\n }\n\n if (!buttons || buttons.length === 0) return null\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 480, margin: '0 auto', display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {buttons.map((btn, i) => {\n const isPrimary = btn.style !== 'outline'\n return (\n <a\n key={i}\n href={btn.url}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.875rem',\n background: isPrimary ? theme.accent : 'transparent',\n color: isPrimary ? theme.bg : theme.fg,\n border: isPrimary ? 'none' : `1px solid ${theme.muted}`,\n fontSize: '0.95rem',\n fontWeight: 600,\n textAlign: 'center',\n textDecoration: 'none',\n boxSizing: 'border-box',\n borderRadius: 0,\n }}\n >\n {btn.text}\n </a>\n )\n })}\n </div>\n )\n}\n\nfunction StatsSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { stats } = section.content as { stats?: Array<{ label: string; value: string }> }\n\n if (!stats || stats.length === 0) return null\n\n const columns = Math.min(stats.length, 4)\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: '0.75rem' }}>\n {stats.map((stat, i) => (\n <div key={i} style={{ background: theme.surface, padding: '1rem', textAlign: 'center' }}>\n <div style={{ fontSize: '1.25rem', fontWeight: 700, color: theme.fg }}>{stat.value}</div>\n <div style={{ fontSize: '0.7rem', color: theme.accent, textTransform: 'uppercase', letterSpacing: '0.05em', marginTop: '0.25rem' }}>{stat.label}</div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction ProductCardSection({ section, data, theme }: { section: LandingSection; data: LandingPageRenderData; theme: Theme }) {\n const product = data.product\n const c = section.content as { name?: string; description?: string; price?: string; image_url?: string; url?: string }\n\n const name = c.name || (product?.name as string) || ''\n const description = c.description || (product?.description as string) || ''\n const price = c.price || null\n const imageUrl = c.image_url || (product?.featured_image as string) || null\n const url = c.url || null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <div style={{ background: theme.surface, overflow: 'hidden' }}>\n {imageUrl && (\n <div style={{ width: '100%', aspectRatio: '1', overflow: 'hidden' }}>\n <img src={imageUrl} alt={name} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n </div>\n )}\n <div style={{ padding: '1.25rem' }}>\n <h3 style={{ fontSize: '1.25rem', fontWeight: 600, margin: '0 0 0.5rem', color: theme.fg }}>{name}</h3>\n {description && (\n <p style={{ fontSize: '0.9rem', color: theme.muted, margin: '0 0 1rem', lineHeight: 1.5 }}>{description}</p>\n )}\n {price && (\n <p style={{ fontSize: '1.125rem', fontWeight: 700, color: theme.accent, margin: '0 0 1rem' }}>{price}</p>\n )}\n {url && (\n <a\n href={url}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.75rem',\n background: theme.accent,\n color: theme.bg,\n textAlign: 'center',\n textDecoration: 'none',\n fontSize: '0.9rem',\n fontWeight: 600,\n boxSizing: 'border-box',\n borderRadius: 0,\n }}\n >\n View Product\n </a>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nfunction COAViewerSection({\n section,\n data,\n theme,\n onShowCOA,\n}: { section: LandingSection; data: LandingPageRenderData; theme: Theme; onShowCOA: () => void }) {\n const coa = data.coa\n const c = section.content as { button_text?: string }\n\n if (!coa) return null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <button\n onClick={onShowCOA}\n style={{\n width: '100%',\n padding: '0.875rem',\n background: theme.accent,\n color: theme.bg,\n border: 'none',\n fontSize: '0.95rem',\n fontWeight: 600,\n cursor: 'pointer',\n borderRadius: 0,\n }}\n >\n {c.button_text || 'View Lab Results'}\n </button>\n </div>\n )\n}\n\nfunction SocialLinksSection({ section, theme }: { section: LandingSection; theme: Theme }) {\n const { links } = section.content as { links?: Array<{ platform: string; url: string }> }\n\n if (!links || links.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center', gap: '1.5rem', flexWrap: 'wrap' }}>\n {links.map((link, i) => (\n <a\n key={i}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: theme.muted,\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n textTransform: 'capitalize',\n letterSpacing: '0.03em',\n transition: 'color 0.15s',\n }}\n >\n {link.platform}\n </a>\n ))}\n </div>\n )\n}\n\nfunction DividerSection({ theme }: { theme: Theme }) {\n return (\n <div style={{ padding: '1rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.surface}`, margin: 0 }} />\n </div>\n )\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction toEmbedUrl(url: string): string {\n // YouTube\n const ytMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]+)/)\n if (ytMatch) return `https://www.youtube.com/embed/${ytMatch[1]}`\n\n // Vimeo\n const vimeoMatch = url.match(/vimeo\\.com\\/(\\d+)/)\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}`\n\n return url\n}\n\n// ─── State Screens ───────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Not Found</h1>\n <p style={{ color: '#888' }}>This page does not exist or has been removed.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Expired</h1>\n <p style={{ color: '#888' }}>This page is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try again later.'}</p>\n </div>\n </div>\n )\n}\n"]}