@neowhale/storefront 0.2.39 → 0.2.40

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/components/behavioral-tracker.tsx","../../src/fingerprint/collector.ts","../../src/react/components/fingerprint-collector.tsx","../../src/recording/recorder.ts","../../src/react/components/session-recorder.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/hooks/use-referral.ts","../../src/react/components/sections/shared.tsx","../../src/react/components/sections/content-sections.tsx","../../src/react/components/sections/interactive-sections.tsx","../../src/react/components/sections/lead-capture-section.tsx","../../src/react/components/section-renderer.tsx","../../src/react/components/qr-landing-page.tsx","../../src/react/components/landing-page.tsx"],"names":["createStore","persist","useContext","useRef","useStore","useShallow","useEffect","SESSION_KEY_SUFFIX","VISITOR_KEY_SUFFIX","MAX_SESSION_WAIT_MS","SESSION_POLL_MS","useCallback","useMemo","useState","now","jsxs","jsx","body","el","BehavioralTracker","Fragment"],"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 onCartChange?: (cartId: string, total: number, itemCount: number) => 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\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\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\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\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\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\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 updateProfile: (data: { first_name: string; last_name: string; phone?: string; date_of_birth?: string }) => Promise<void>\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 updateProfile: async (data) => {\n const customer = get().customer\n if (!customer?.id) throw new Error('Not authenticated')\n const updated = await client.updateProfile(customer.id, data)\n set({ customer: updated })\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'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\n\ninterface SessionData {\n id: string\n createdAt: number\n}\n\n/** Parse UTM parameters, gclid, and fbclid from the current URL. */\nfunction parseMarketingParams(): Record<string, string> {\n if (typeof window === 'undefined') return {}\n const params = new URLSearchParams(window.location.search)\n const result: Record<string, string> = {}\n for (const key of ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'gclid', 'fbclid']) {\n const val = params.get(key)\n if (val) result[key] = val\n }\n return result\n}\n\n/** Get or create a persistent visitor ID. */\nfunction getVisitorId(prefix: string): string {\n const key = `${prefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n}\n\n/** Detect device type from user agent. */\nfunction detectDevice(): string {\n if (typeof navigator === 'undefined') return 'unknown'\n const ua = navigator.userAgent\n if (/Mobi|Android/i.test(ua)) return 'mobile'\n if (/Tablet|iPad/i.test(ua)) return 'tablet'\n return 'desktop'\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 marketing = parseMarketingParams()\n const visitorId = getVisitorId(config.storagePrefix)\n const session = await client.createSession({\n visitor_id: visitorId,\n user_agent: navigator.userAgent,\n referrer: document.referrer || undefined,\n page_url: window.location.href,\n device: detectDevice(),\n ...marketing,\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 const visitorId = getVisitorId(config.storagePrefix)\n await client.trackEvent({\n session_id: sessionId,\n event_type: eventType,\n event_data: { ...data, event_id: eventId },\n visitor_id: visitorId,\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 updateSessionCart = useCallback(\n async (cartId: string, cartTotal: number, cartItemCount: number) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, {\n cart_id: cartId,\n cart_total: cartTotal,\n cart_item_count: cartItemCount,\n status: 'carting',\n })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const updateSessionOrder = useCallback(\n async (orderId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { order_id: orderId, status: 'converted' })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const trackPageView = useCallback(\n (url: string, referrer?: string) => {\n track('page_view', { url, referrer, page_url: url })\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 /**\n * Request browser geolocation and attach coordinates to the current session.\n * Best called after a user interaction (e.g. age gate confirmation) so the\n * browser permission prompt has high grant rates.\n *\n * Returns the captured position or null if denied/unavailable.\n */\n const captureGeolocation = useCallback(\n async (options?: { timeout?: number; enableHighAccuracy?: boolean }): Promise<GeolocationPosition | null> => {\n if (!trackingEnabled) return null\n if (typeof navigator === 'undefined' || !navigator.geolocation) return null\n\n try {\n const position = await new Promise<GeolocationPosition>((resolve, reject) => {\n navigator.geolocation.getCurrentPosition(resolve, reject, {\n timeout: options?.timeout ?? 10000,\n enableHighAccuracy: options?.enableHighAccuracy ?? true,\n })\n })\n\n const { latitude, longitude, accuracy } = position.coords\n\n // Attach to current session\n const sessionId = await getOrCreateSession()\n if (sessionId && !sessionId.startsWith('local-')) {\n await client.updateSession(sessionId, {\n latitude,\n longitude,\n geolocation_source: 'browser_gps',\n geolocation_accuracy: accuracy,\n })\n }\n\n // Fire tracking event\n track('location_granted' as EventType, {\n accuracy,\n trigger: 'sdk',\n device_type: detectDevice(),\n })\n\n return position\n } catch (error) {\n track('location_denied' as EventType, {\n error: error instanceof Error ? error.message : 'unknown',\n trigger: 'sdk',\n device_type: detectDevice(),\n })\n return null\n }\n },\n [client, getOrCreateSession, track, trackingEnabled]\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 updateSessionCart,\n updateSessionOrder,\n getOrCreateSession,\n captureGeolocation,\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 /** Stable visitor ID for cross-session attribution */\n visitorId: getVisitorId(config.storagePrefix),\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 updateProfile: s.updateProfile,\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 const fullUrl = typeof window !== 'undefined' ? window.location.href : pathname\n trackPageView(fullUrl, 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 { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { BehavioralTracker } from '../../behavioral/tracker.js'\nimport type { BehavioralBatch } from '../../behavioral/types.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function BehavioralTrackerComponent({ pathname }: { pathname: string | null }) {\n const ctx = useContext(WhaleContext)\n const trackerRef = useRef<BehavioralTracker | null>(null)\n const initRef = useRef(false)\n\n // Mount once — never re-run this effect\n useEffect(() => {\n if (!ctx || !ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n const { config } = ctx\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const readSessionId = (): string | null => {\n const key = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n try {\n const raw = localStorage.getItem(key)\n if (raw) {\n const stored = JSON.parse(raw)\n return stored.id ?? null\n }\n } catch {}\n return null\n }\n\n const readVisitorId = (): string => {\n const key = `${config.storagePrefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n }\n\n const tryInit = () => {\n if (cancelled) return\n\n const sessionId = readSessionId()\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n }\n return\n }\n\n initRef.current = true\n const visitorId = readVisitorId()\n const baseUrl = config.proxyPath\n const endpoint = `${baseUrl}/v1/stores/${config.storeId}/storefront/behavioral`\n\n const sendBatch = async (batch: BehavioralBatch): Promise<void> => {\n await resilientSend(endpoint, batch, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n }\n\n const tracker = new BehavioralTracker({ sendBatch, sessionId, visitorId })\n tracker.start()\n trackerRef.current = tracker\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (trackerRef.current) {\n trackerRef.current.stop()\n trackerRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // Update page context on pathname change\n useEffect(() => {\n if (!trackerRef.current || !pathname) return\n const url = typeof window !== 'undefined' ? window.location.href : pathname\n trackerRef.current.setPageContext(url, pathname)\n }, [pathname])\n\n return null\n}\n","export interface DeviceFingerprint {\n fingerprint_id: string\n canvas_fingerprint: string\n webgl_fingerprint: string\n audio_fingerprint: string\n screen_resolution: string\n platform: string\n timezone: string\n language: string\n hardware_concurrency: number\n device_memory: number | null\n color_depth: number\n pixel_ratio: number\n touch_support: boolean\n cookie_enabled: boolean\n do_not_track: string | null\n}\n\nasync function sha256(input: string): Promise<string> {\n const data = new TextEncoder().encode(input)\n const hash = await crypto.subtle.digest('SHA-256', data)\n return Array.from(new Uint8Array(hash))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\nasync function getCanvasFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n canvas.width = 256\n canvas.height = 256\n const ctx = canvas.getContext('2d')\n if (!ctx) return ''\n\n // Filled rect with gradient\n const gradient = ctx.createLinearGradient(0, 0, 256, 256)\n gradient.addColorStop(0, '#ff6b35')\n gradient.addColorStop(0.5, '#1a73e8')\n gradient.addColorStop(1, '#34a853')\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, 256, 256)\n\n // Text\n ctx.fillStyle = '#ffffff'\n ctx.font = '18px Arial'\n ctx.textBaseline = 'top'\n ctx.fillText('WhaleTools', 10, 10)\n\n // Arc / circle\n ctx.beginPath()\n ctx.arc(128, 128, 60, 0, Math.PI * 2)\n ctx.strokeStyle = '#fbbc04'\n ctx.lineWidth = 3\n ctx.stroke()\n\n // Line\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(256, 256)\n ctx.strokeStyle = '#ea4335'\n ctx.lineWidth = 2\n ctx.stroke()\n\n const dataUrl = canvas.toDataURL()\n return sha256(dataUrl)\n } catch {\n return ''\n }\n}\n\nasync function getWebGLFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl')\n if (!gl || !(gl instanceof WebGLRenderingContext)) return ''\n\n const ext = gl.getExtension('WEBGL_debug_renderer_info')\n const renderer = ext\n ? gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)\n : 'unknown'\n const vendor = ext\n ? gl.getParameter(ext.UNMASKED_VENDOR_WEBGL)\n : 'unknown'\n const version = gl.getParameter(gl.VERSION)\n\n const combined = `${renderer}|${vendor}|${version}`\n return sha256(combined)\n } catch {\n return ''\n }\n}\n\nasync function getAudioFingerprint(): Promise<string> {\n try {\n const AudioCtx =\n (window as any).OfflineAudioContext ||\n (window as any).webkitOfflineAudioContext\n if (!AudioCtx) return ''\n\n const context = new AudioCtx(1, 44100, 44100)\n const oscillator = context.createOscillator()\n oscillator.type = 'triangle'\n oscillator.frequency.setValueAtTime(10000, context.currentTime)\n\n const compressor = context.createDynamicsCompressor()\n compressor.threshold.setValueAtTime(-50, context.currentTime)\n compressor.knee.setValueAtTime(40, context.currentTime)\n compressor.ratio.setValueAtTime(12, context.currentTime)\n compressor.attack.setValueAtTime(0, context.currentTime)\n compressor.release.setValueAtTime(0.25, context.currentTime)\n\n oscillator.connect(compressor)\n compressor.connect(context.destination)\n oscillator.start(0)\n\n const buffer = await context.startRendering()\n const samples = buffer.getChannelData(0).slice(0, 100)\n const sampleStr = Array.from(samples as ArrayLike<number>)\n .map((s) => s.toString())\n .join(',')\n\n return sha256(sampleStr)\n } catch {\n return ''\n }\n}\n\nexport async function collectFingerprint(): Promise<DeviceFingerprint> {\n const [canvas_fingerprint, webgl_fingerprint, audio_fingerprint] =\n await Promise.all([\n getCanvasFingerprint(),\n getWebGLFingerprint(),\n getAudioFingerprint(),\n ])\n\n const screen_resolution = `${window.screen.width}x${window.screen.height}`\n const platform = navigator.platform || ''\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone || ''\n const language = navigator.language || ''\n const hardware_concurrency = navigator.hardwareConcurrency || 0\n const device_memory = (navigator as any).deviceMemory ?? null\n const color_depth = window.screen.colorDepth\n const pixel_ratio = window.devicePixelRatio || 1\n const touch_support =\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (navigator as any).msMaxTouchPoints > 0\n const cookie_enabled = navigator.cookieEnabled\n const do_not_track = navigator.doNotTrack ?? null\n\n const fingerprintSource = [\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n String(hardware_concurrency),\n ].join('|')\n\n const fingerprint_id = await sha256(fingerprintSource)\n\n return {\n fingerprint_id,\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n hardware_concurrency,\n device_memory,\n color_depth,\n pixel_ratio,\n touch_support,\n cookie_enabled,\n do_not_track,\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { collectFingerprint } from '../../fingerprint/collector.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\n\nexport function FingerprintCollector() {\n const ctx = useContext(WhaleContext)\n const sent = useRef(false)\n\n useEffect(() => {\n if (!ctx || sent.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n sent.current = true\n\n const { config, client } = ctx\n const prefix = config.storagePrefix\n const fpKey = `${prefix}-fingerprint-sent`\n\n const linkFingerprintToSession = (fingerprintId: string) => {\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n client.updateSession(session.id, { fingerprint_id: fingerprintId }).catch(() => {})\n }\n } catch {}\n }\n\n // Check if already sent this session\n const existing = localStorage.getItem(fpKey)\n if (existing) {\n linkFingerprintToSession(existing)\n return\n }\n\n // Collect and send\n collectFingerprint()\n .then(async (fp) => {\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/fingerprints`\n\n // Send fingerprint to gateway\n await resilientSend(url, fp, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n }).catch(() => {})\n\n // Store fingerprint_id locally\n localStorage.setItem(fpKey, fp.fingerprint_id)\n\n // Link to current session\n linkFingerprintToSession(fp.fingerprint_id)\n })\n .catch(() => {})\n }, [ctx])\n\n return null\n}\n","/**\n * Lightweight session recorder — captures DOM mutations, scroll, mouse,\n * input changes, and viewport resizes without any external dependency.\n *\n * Events are buffered locally and flushed to the backend at a configurable\n * interval (default 5 s) or immediately when the page is being unloaded.\n */\n\nexport interface RecordingEvent {\n /** 0=full_snapshot, 1=mutation, 2=mouse, 3=scroll, 4=input, 5=resize, 6=custom */\n type: number\n timestamp: number\n data: Record<string, unknown>\n}\n\ninterface RecorderConfig {\n sendChunk: (events: RecordingEvent[], sequence: number) => Promise<void>\n /** How often buffered events are flushed (ms). Default 5 000. */\n flushIntervalMs?: number\n /** Maximum events per chunk. Default 200. */\n maxChunkSize?: number\n}\n\ntype RequiredConfig = Required<RecorderConfig>\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction now(): number {\n return Date.now()\n}\n\nfunction throttle<T extends (...args: unknown[]) => void>(\n fn: T,\n ms: number,\n): T {\n let last = 0\n let timer: ReturnType<typeof setTimeout> | null = null\n const throttled = (...args: unknown[]) => {\n const elapsed = now() - last\n if (elapsed >= ms) {\n last = now()\n fn(...args)\n } else if (!timer) {\n timer = setTimeout(() => {\n last = now()\n timer = null\n fn(...args)\n }, ms - elapsed)\n }\n }\n return throttled as unknown as T\n}\n\n/** Build a short CSS selector for an element (used in mutation / input payloads). */\nfunction shortSelector(el: Element): string {\n if (el.id) return `#${el.id}`\n let sel = el.tagName.toLowerCase()\n if (el.className && typeof el.className === 'string') {\n const cls = el.className\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .join('.')\n if (cls) sel += `.${cls}`\n }\n return sel\n}\n\n// ---------------------------------------------------------------------------\n// SessionRecorder\n// ---------------------------------------------------------------------------\n\nexport class SessionRecorder {\n private events: RecordingEvent[] = []\n private sequence = 0\n private observer: MutationObserver | null = null\n private flushTimer: ReturnType<typeof setInterval> | null = null\n private config: RequiredConfig\n private listeners: Array<[EventTarget, string, EventListener, boolean | AddEventListenerOptions | undefined]> = []\n private started = false\n private flushing = false\n /** Pending mutations collected within the current animation frame. */\n private pendingMutations: MutationRecord[] = []\n private mutationRafId: number | null = null\n\n constructor(config: RecorderConfig) {\n this.config = {\n sendChunk: config.sendChunk,\n flushIntervalMs: config.flushIntervalMs ?? 5_000,\n maxChunkSize: config.maxChunkSize ?? 200,\n }\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n start(): void {\n if (this.started) return\n this.started = true\n\n this.captureFullSnapshot()\n this.setupMutationObserver()\n this.setupEventListeners()\n\n this.flushTimer = setInterval(() => {\n void this.flush()\n }, this.config.flushIntervalMs)\n }\n\n stop(): void {\n if (!this.started) return\n this.started = false\n\n // Tear down mutation observer\n if (this.observer) {\n this.observer.disconnect()\n this.observer = null\n }\n\n // Cancel pending mutation raf\n if (this.mutationRafId !== null) {\n cancelAnimationFrame(this.mutationRafId)\n this.mutationRafId = null\n }\n\n // Remove all event listeners\n for (const [target, event, handler, options] of this.listeners) {\n target.removeEventListener(event, handler, options as EventListenerOptions | undefined)\n }\n this.listeners = []\n\n // Stop flush timer\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer)\n this.flushTimer = null\n }\n\n // Final flush\n void this.flush()\n }\n\n // -----------------------------------------------------------------------\n // Full Snapshot (type 0)\n // -----------------------------------------------------------------------\n\n private captureFullSnapshot(): void {\n const tree = this.serializeNode(document.documentElement)\n this.push({\n type: 0,\n timestamp: now(),\n data: {\n href: location.href,\n width: window.innerWidth,\n height: window.innerHeight,\n tree: tree ?? {},\n },\n })\n }\n\n private serializeNode(node: Node): Record<string, unknown> | null {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element\n\n // Skip <script> and <link rel=\"preload\"> to reduce payload size\n const tag = el.tagName.toLowerCase()\n if (tag === 'script' || tag === 'noscript') return null\n\n const attrs: Record<string, string> = {}\n for (const attr of Array.from(el.attributes)) {\n // Mask sensitive inputs\n if (\n attr.name === 'value' &&\n el instanceof HTMLInputElement &&\n el.type === 'password'\n ) {\n continue\n }\n attrs[attr.name] = attr.value\n }\n\n const children: Record<string, unknown>[] = []\n for (const child of Array.from(el.childNodes)) {\n const serialized = this.serializeNode(child)\n if (serialized) children.push(serialized)\n }\n\n return { tag, attrs, children }\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || ''\n // Skip empty text nodes\n if (!text.trim()) return null\n return { text }\n }\n\n return null\n }\n\n // -----------------------------------------------------------------------\n // Mutation Observer (type 1)\n // -----------------------------------------------------------------------\n\n private setupMutationObserver(): void {\n this.observer = new MutationObserver((mutations) => {\n // Batch mutations that arrive in the same animation frame\n this.pendingMutations.push(...mutations)\n if (this.mutationRafId === null) {\n this.mutationRafId = requestAnimationFrame(() => {\n this.processMutations(this.pendingMutations)\n this.pendingMutations = []\n this.mutationRafId = null\n })\n }\n })\n\n this.observer.observe(document.documentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n attributeOldValue: false,\n })\n }\n\n private processMutations(mutations: MutationRecord[]): void {\n const ts = now()\n\n const adds: Record<string, unknown>[] = []\n const removes: Record<string, unknown>[] = []\n const attrs: Record<string, unknown>[] = []\n const texts: Record<string, unknown>[] = []\n\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const node of Array.from(m.addedNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.TEXT_NODE) {\n const serialized = this.serializeNode(node)\n if (serialized) {\n adds.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n node: serialized,\n })\n }\n }\n }\n for (const node of Array.from(m.removedNodes)) {\n removes.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n tag: node.nodeType === Node.ELEMENT_NODE\n ? (node as Element).tagName.toLowerCase()\n : '#text',\n })\n }\n } else if (m.type === 'attributes' && m.target.nodeType === Node.ELEMENT_NODE) {\n const el = m.target as Element\n const name = m.attributeName || ''\n attrs.push({\n selector: shortSelector(el),\n name,\n value: el.getAttribute(name),\n })\n } else if (m.type === 'characterData') {\n texts.push({\n parentSelector: m.target.parentElement\n ? shortSelector(m.target.parentElement)\n : null,\n value: (m.target.textContent || '').slice(0, 200),\n })\n }\n }\n\n // Only push if there's actual data\n if (adds.length || removes.length || attrs.length || texts.length) {\n this.push({\n type: 1,\n timestamp: ts,\n data: {\n adds: adds.length ? adds : undefined,\n removes: removes.length ? removes : undefined,\n attrs: attrs.length ? attrs : undefined,\n texts: texts.length ? texts : undefined,\n },\n })\n }\n }\n\n // -----------------------------------------------------------------------\n // Event Listeners (types 2–5)\n // -----------------------------------------------------------------------\n\n private setupEventListeners(): void {\n // --- Mouse (type 2) ---\n const onMouseMove = throttle(((e: MouseEvent) => {\n this.push({\n type: 2,\n timestamp: now(),\n data: { source: 'move', x: e.clientX, y: e.clientY },\n })\n }) as (...args: unknown[]) => void, 100)\n\n const onClick = ((e: MouseEvent) => {\n const target = e.target as Element | null\n this.push({\n type: 2,\n timestamp: now(),\n data: {\n source: 'click',\n x: e.clientX,\n y: e.clientY,\n target: target ? shortSelector(target) : null,\n },\n })\n }) as EventListener\n\n this.addListener(document, 'mousemove', onMouseMove as EventListener, { passive: true, capture: true })\n this.addListener(document, 'click', onClick, { passive: true, capture: true })\n\n // --- Scroll (type 3) ---\n const onScroll = throttle(((e: Event) => {\n const target = e.target\n if (target === document || target === document.documentElement || target === window) {\n this.push({\n type: 3,\n timestamp: now(),\n data: { target: 'window', x: window.scrollX, y: window.scrollY },\n })\n } else if (target instanceof Element) {\n this.push({\n type: 3,\n timestamp: now(),\n data: {\n target: shortSelector(target),\n x: target.scrollLeft,\n y: target.scrollTop,\n },\n })\n }\n }) as (...args: unknown[]) => void, 200)\n\n this.addListener(document, 'scroll', onScroll as EventListener, { passive: true, capture: true })\n\n // --- Input (type 4) ---\n const onInput = ((e: Event) => {\n const target = e.target\n if (!(target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement)) {\n return\n }\n const isPassword =\n target instanceof HTMLInputElement && target.type === 'password'\n\n this.push({\n type: 4,\n timestamp: now(),\n data: {\n selector: shortSelector(target),\n tag: target.tagName.toLowerCase(),\n inputType: target instanceof HTMLInputElement ? target.type : undefined,\n value: isPassword ? '***' : (target.value || '').slice(0, 100),\n },\n })\n }) as EventListener\n\n this.addListener(document, 'input', onInput, { passive: true, capture: true })\n this.addListener(document, 'change', onInput, { passive: true, capture: true })\n\n // --- Resize (type 5) ---\n const onResize = throttle((() => {\n this.push({\n type: 5,\n timestamp: now(),\n data: { width: window.innerWidth, height: window.innerHeight },\n })\n }) as (...args: unknown[]) => void, 500)\n\n this.addListener(window, 'resize', onResize as EventListener, { passive: true })\n\n // --- Visibility change (flush on hide) ---\n const onVisibility = (() => {\n if (document.visibilityState === 'hidden') {\n void this.flush()\n }\n }) as EventListener\n\n this.addListener(document, 'visibilitychange', onVisibility)\n }\n\n // -----------------------------------------------------------------------\n // Event buffer & flushing\n // -----------------------------------------------------------------------\n\n private push(event: RecordingEvent): void {\n if (!this.started) return\n\n this.events.push(event)\n\n // Auto-flush if we've hit the chunk limit\n if (this.events.length >= this.config.maxChunkSize) {\n void this.flush()\n }\n }\n\n private async flush(): Promise<void> {\n if (this.events.length === 0) return\n if (this.flushing) return\n\n this.flushing = true\n\n // Swap out the buffer so new events accumulate independently\n const chunk = this.events\n this.events = []\n const seq = this.sequence++\n\n try {\n await this.config.sendChunk(chunk, seq)\n } catch {\n // Best-effort — if sendChunk itself handles retries / beacon fallback,\n // there's nothing else to do here.\n } finally {\n this.flushing = false\n }\n }\n\n // -----------------------------------------------------------------------\n // Listener bookkeeping\n // -----------------------------------------------------------------------\n\n private addListener(\n target: EventTarget,\n event: string,\n handler: EventListener,\n options?: AddEventListenerOptions,\n ): void {\n target.addEventListener(event, handler, options)\n this.listeners.push([target, event, handler, options])\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { SessionRecorder } from '../../recording/recorder.js'\nimport type { RecordingEvent } from '../../recording/recorder.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function SessionRecorderComponent() {\n const ctx = useContext(WhaleContext)\n const recorderRef = useRef<SessionRecorder | null>(null)\n const sampledRef = useRef<boolean | null>(null)\n const initRef = useRef(false)\n\n useEffect(() => {\n if (!ctx || initRef.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n // Determine sampling once per component lifetime\n if (sampledRef.current === null) {\n sampledRef.current = Math.random() < ctx.config.recordingRate\n }\n if (!sampledRef.current) return\n\n const { config } = ctx\n const prefix = config.storagePrefix\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const tryInit = () => {\n if (cancelled) return\n\n let sessionId: string | null = null\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n sessionId = session.id || null\n }\n } catch {}\n\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n return\n }\n return\n }\n\n initRef.current = true\n const visitorId = (() => {\n try {\n return localStorage.getItem(`${prefix}${VISITOR_KEY_SUFFIX}`) || 'unknown'\n } catch {\n return 'unknown'\n }\n })()\n\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/recordings`\n const sid = sessionId\n\n const recorder = new SessionRecorder({\n sendChunk: async (events: RecordingEvent[], sequence: number) => {\n await resilientSend(url, {\n session_id: sid,\n visitor_id: visitorId,\n events,\n sequence,\n started_at: sequence === 0 ? new Date().toISOString() : undefined,\n }, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n },\n })\n\n recorder.start()\n recorderRef.current = recorder\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (recorderRef.current) {\n recorderRef.current.stop()\n recorderRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\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 { BehavioralTrackerComponent } from './components/behavioral-tracker.js'\nimport { FingerprintCollector } from './components/fingerprint-collector.js'\nimport { SessionRecorderComponent } from './components/session-recorder.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 — fire events via client directly\n // since we can't use the useAnalytics hook outside a component.\n // Read session_id from localStorage (same key pattern as useAnalytics).\n const readSessionId = (): string | undefined => {\n try {\n const raw = localStorage.getItem(`${resolvedConfig.storagePrefix}-analytics-session`)\n if (!raw) return undefined\n const stored = JSON.parse(raw) as { id: string; createdAt: number }\n if (Date.now() - stored.createdAt < resolvedConfig.sessionTtl) return stored.id\n } catch { /* ignore */ }\n return undefined\n }\n\n /** Sync cart state to the analytics session (fire-and-forget). */\n const syncCartToSession = (cartId: string, total: number, itemCount: number) => {\n const sid = readSessionId()\n if (sid && !sid.startsWith('local-')) {\n client.updateSession(sid, {\n cart_id: cartId,\n cart_total: total,\n cart_item_count: itemCount,\n status: 'carting',\n }).catch(() => {})\n }\n }\n\n const onAddToCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'add_to_cart' as never, event_data: { product_id: productId, product_name: productName, quantity, price, tier } }).catch(() => {})\n }\n : undefined\n\n const onRemoveFromCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'remove_from_cart' as never, event_data: { product_id: productId, product_name: productName } }).catch(() => {})\n }\n : undefined\n\n const cartStore = createCartStore(client, resolvedConfig.storagePrefix, onAddToCart, onRemoveFromCart, syncCartToSession)\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 <BehavioralTrackerComponent pathname={pathname} />\n <FingerprintCollector />\n <SessionRecorderComponent />\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'\nimport { useAnalytics } from './use-analytics.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 { visitorId, getOrCreateSession: getAnalyticsSession } = useAnalytics()\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 loyalty_reward_id?: string\n selected_product_id?: string\n }) => {\n setLoading(true)\n setError(null)\n try {\n // Auto-inject attribution from analytics session\n const analyticsSessionId = await getAnalyticsSession().catch(() => undefined)\n const data = await ctx.client.createCheckoutSession({\n ...params,\n visitor_id: visitorId,\n session_id: analyticsSessionId?.startsWith('local-') ? undefined : analyticsSessionId,\n })\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, opts?: {\n loyalty_reward_id?: string\n selected_product_id?: string\n }): 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, opts)\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, Product } 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 const fetchProductsByCategory = useCallback(async (category: string, locationId: string, tier?: string): Promise<Product[]> => {\n const res = await ctx.client.listLoyaltyProducts({ category, location_id: locationId, tier })\n return res.data\n }, [ctx.client])\n\n return { account, rewards, transactions, loading, error, refresh, redeemReward, fetchProductsByCategory }\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 { DealValidation, Cart } from '../../types.js'\n\nexport function useDeals() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useDeals must be used within <WhaleProvider>')\n\n const [validation, setValidation] = useState<DealValidation | 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<DealValidation> => {\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.validateDeal(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.applyDeal(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.removeDeal(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\n/** @deprecated Use useDeals instead */\nexport const useCoupons = useDeals\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { ReferralStatus } from '../../types.js'\n\nexport function useReferral() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReferral must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [status, setStatus] = useState<ReferralStatus | null>(null)\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 setStatus(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.getReferralStatus(customer.id)\n setStatus(result)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const enroll = useCallback(async () => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.enrollReferral(customer.id)\n await refresh()\n return result\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 }, [customer?.id, ctx.client, refresh])\n\n const attributeReferral = useCallback(\n async (code: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.attributeReferral(customer.id, code)\n await refresh()\n return result\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 },\n [customer?.id, ctx.client, refresh],\n )\n\n // Auto-attribute if URL has ?code= OR localStorage has whale_ref_code\n // The code is persisted to localStorage on the /refer page so it survives the auth redirect\n useEffect(() => {\n if (!customer?.id || !status || status.referred_by) return\n if (typeof window === 'undefined') return\n const params = new URLSearchParams(window.location.search)\n const code = params.get('code') || localStorage.getItem('whale_ref_code')\n if (!code) return\n ctx.client.attributeReferral(customer.id, code).then(() => {\n localStorage.removeItem('whale_ref_code')\n refresh()\n }).catch(() => {})\n }, [customer?.id, status, ctx.client, refresh])\n\n const share = useCallback(async () => {\n if (!status?.share_url) throw new Error('Not enrolled in referral program')\n const shareData = {\n title: 'Check this out!',\n text: `Use my referral code ${status.referral_code} for rewards!`,\n url: status.share_url,\n }\n if (typeof navigator !== 'undefined' && navigator.share) {\n try {\n await navigator.share(shareData)\n return\n } catch {\n // Fall through to clipboard\n }\n }\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n await navigator.clipboard.writeText(status.share_url)\n }\n }, [status])\n\n return {\n status,\n loading,\n error,\n enroll,\n refresh,\n share,\n attributeReferral,\n referralCode: status?.referral_code ?? null,\n shareUrl: status?.share_url ?? null,\n isEnrolled: status?.enrolled ?? false,\n referredBy: status?.referred_by ?? null,\n }\n}\n","'use client'\n\nimport { useState, useEffect, useRef } from 'react'\n\n// ─── Theme ────────────────────────────────────────────────────────────────────\n\nexport interface SectionTheme {\n bg: string\n fg: string\n accent: string\n surface: string\n muted: string\n fontDisplay?: string\n fontBody?: string\n}\n\n// ─── Click tracking context (QR/creation beacon system) ──────────────────────\n\nexport interface ClickTrackingContext {\n gatewayUrl?: string\n code?: string\n}\n\nexport function trackClick(tracking: ClickTrackingContext | undefined, label: string, url: string, position?: number) {\n if (!tracking?.gatewayUrl || !tracking?.code) return\n const body = JSON.stringify({ label, url, position })\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(\n `${tracking.gatewayUrl}/q/${encodeURIComponent(tracking.code)}/click`,\n new Blob([body], { type: 'application/json' }),\n )\n }\n}\n\n// ─── Shared data shape passed to all section renderers ────────────────────────\n\nexport interface SectionData {\n store?: { id?: string; name?: string | null; logo_url?: string | null; tagline?: string | null; theme?: Record<string, unknown> | null } | null\n product?: Record<string, unknown> | null\n coa?: { url: string; viewer_url?: string | null; document_name: string } | null\n gatewayUrl?: string\n landing_page?: { slug?: string } | null\n analyticsContext?: { visitorId?: string; sessionId?: string }\n}\n\n// ─── Animated Number Counter ─────────────────────────────────────────────────\n\n/** Global regex for splitting text into numeric + non-numeric segments */\nconst NUM_SPLIT = /(\\$?[\\d,]+\\.?\\d*[+★%]?)/g\n\n/** Non-global regex for testing if a segment is numeric — avoids stateful lastIndex bug */\nconst NUM_TEST = /^\\$?[\\d,]+\\.?\\d*[+★%]?$/\n\nfunction easeOutQuart(t: number): number {\n return 1 - Math.pow(1 - t, 4)\n}\n\nfunction useCountUp(target: number, duration: number, start: boolean): number {\n const [value, setValue] = useState(0)\n const raf = useRef(0)\n\n useEffect(() => {\n if (!start) return\n const t0 = performance.now()\n function tick(now: number) {\n const elapsed = now - t0\n const progress = Math.min(elapsed / duration, 1)\n setValue(Math.round(easeOutQuart(progress) * target))\n if (progress < 1) raf.current = requestAnimationFrame(tick)\n }\n raf.current = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf.current)\n }, [target, duration, start])\n\n return value\n}\n\nexport function AnimatedNumber({ raw }: { raw: string }) {\n const ref = useRef<HTMLSpanElement>(null)\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n const el = ref.current\n if (!el || typeof IntersectionObserver === 'undefined') { setVisible(true); return }\n const obs = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) { setVisible(true); obs.disconnect() }\n }, { threshold: 0.3 })\n obs.observe(el)\n return () => obs.disconnect()\n }, [])\n\n const prefix = raw.startsWith('$') ? '$' : ''\n const suffix = raw.match(/[+★%]$/)?.[0] || ''\n const numeric = parseFloat(raw.replace(/[\\$,+★%]/g, ''))\n const hasCommas = raw.includes(',')\n const decimals = raw.includes('.') ? (raw.split('.')[1]?.replace(/[+★%]/g, '').length || 0) : 0\n\n const count = useCountUp(\n decimals > 0 ? Math.round(numeric * Math.pow(10, decimals)) : numeric,\n 1400,\n visible,\n )\n\n const display = decimals > 0\n ? (count / Math.pow(10, decimals)).toFixed(decimals)\n : hasCommas\n ? count.toLocaleString()\n : String(count)\n\n return <span ref={ref}>{prefix}{display}{suffix}</span>\n}\n\n/** Replace numeric segments in a string with animated counters */\nexport function AnimatedText({ text }: { text: string }) {\n const parts = text.split(NUM_SPLIT)\n return (\n <>\n {parts.map((part, i) =>\n NUM_TEST.test(part)\n ? <AnimatedNumber key={i} raw={part} />\n : part\n )}\n </>\n )\n}\n","'use client'\n\nimport type { LandingSection } from '../../../types.js'\nimport { AnimatedText, type SectionTheme, type ClickTrackingContext, trackClick } from './shared.js'\n\nexport function HeroSection({ section, theme, tracking, onEvent }: {\n section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\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 style={{\n position: 'relative', minHeight: '60vh', display: 'flex', flexDirection: 'column',\n justifyContent: 'center', alignItems: 'center', textAlign: 'center', padding: '3rem 1.5rem',\n backgroundImage: background_image ? `url(${background_image})` : undefined,\n backgroundSize: 'cover', backgroundPosition: 'center',\n }}>\n {background_image && <div style={{ position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.5)' }} />}\n <div style={{ position: 'relative', zIndex: 1, maxWidth: 640 }}>\n {title && (\n <h1 style={{\n fontSize: 'clamp(2rem, 8vw, 3rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 1rem',\n lineHeight: 1.15, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n <AnimatedText text={title} />\n </h1>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.85rem', color: theme.accent, margin: '0 0 2rem',\n lineHeight: 1.6, textTransform: 'uppercase', letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n )}\n {cta_text && cta_url && (\n <a\n href={cta_url}\n onClick={() => {\n trackClick(tracking, cta_text!, cta_url!)\n onEvent?.('cta_click', { label: cta_text!, url: cta_url! })\n }}\n style={{\n display: 'inline-block', padding: '0.875rem 2rem', background: theme.fg,\n color: theme.bg, textDecoration: 'none', fontSize: '0.85rem',\n fontWeight: 500, letterSpacing: '0.08em', textTransform: 'uppercase',\n }}\n >\n {cta_text}\n </a>\n )}\n </div>\n </div>\n )\n}\n\nexport function TextSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\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={{\n fontSize: 11, fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.25em', color: `${theme.fg}40`, margin: '0 0 0.75rem',\n }}>\n {heading}\n </h2>\n )}\n {body && (\n <div style={{ color: `${theme.fg}99`, lineHeight: 1.7, fontSize: '0.9rem', fontWeight: 300, whiteSpace: 'pre-wrap' }}>\n {body}\n </div>\n )}\n </div>\n )\n}\n\nexport function ImageSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, alt, caption } = section.content as { url?: string; alt?: string; caption?: string }\n const contained = section.config?.contained !== false\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 src={url} alt={alt || ''} style={{ width: '100%', display: 'block', objectFit: 'cover' }} />\n {caption && (\n <p style={{ fontSize: '0.8rem', color: theme.muted, textAlign: 'center', marginTop: '0.75rem' }}>{caption}</p>\n )}\n </div>\n )\n}\n\nexport function VideoSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, poster } = section.content as { url?: string; poster?: string }\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 src={toEmbedUrl(url)} style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', border: 'none' }} allow=\"autoplay; fullscreen\" title=\"Video\" />\n </div>\n ) : (\n <video src={url} poster={poster} controls style={{ width: '100%', display: 'block', background: theme.surface }} />\n )}\n </div>\n )\n}\n\nexport function GallerySection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { images } = section.content as { images?: Array<{ url: string; alt?: string }> }\n const columns = (section.config?.columns as number) || 3\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 src={img.url} alt={img.alt || ''} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport function SocialLinksSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { links } = section.content as { links?: Array<{ platform: string; url: string }> }\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 key={i} href={link.url} target=\"_blank\" rel=\"noopener noreferrer\"\n style={{ color: theme.muted, textDecoration: 'none', fontSize: '0.85rem', fontWeight: 500, textTransform: 'capitalize', letterSpacing: '0.03em' }}>\n {link.platform}\n </a>\n ))}\n </div>\n )\n}\n\nexport function DividerSection({ theme }: { theme: SectionTheme }) {\n return (\n <div style={{ padding: '1rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />\n </div>\n )\n}\n\nfunction toEmbedUrl(url: string): string {\n const ytMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]+)/)\n if (ytMatch) return `https://www.youtube.com/embed/${ytMatch[1]}`\n const vimeoMatch = url.match(/vimeo\\.com\\/(\\d+)/)\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}`\n return url\n}\n","'use client'\n\nimport { useState } from 'react'\nimport type { LandingSection } from '../../../types.js'\nimport { AnimatedText, type SectionTheme, type ClickTrackingContext, type SectionData, trackClick } from './shared.js'\n\nexport function CTASection({ section, theme, tracking, onEvent }: {\n section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const { title, subtitle, buttons } = section.content as {\n title?: string; subtitle?: string\n buttons?: Array<{ text: string; url: string; style?: 'primary' | 'outline' }>\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 {title && (\n <h2 style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.5rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.25rem',\n lineHeight: 1.2, letterSpacing: '-0.02em', color: theme.fg, textAlign: 'center',\n }}>\n {title}\n </h2>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.8rem', color: theme.accent, margin: '0 0 0.75rem',\n lineHeight: 1.6, textTransform: 'uppercase', letterSpacing: '0.15em', textAlign: 'center',\n }}>\n {subtitle}\n </p>\n )}\n {buttons.map((btn, i) => {\n const isPrimary = btn.style !== 'outline'\n return (\n <a key={i} href={btn.url}\n onClick={() => {\n trackClick(tracking, btn.text, btn.url, i)\n onEvent?.('cta_click', { label: btn.text, url: btn.url })\n }}\n style={{\n display: 'block', width: '100%', padding: '0.875rem',\n background: isPrimary ? theme.fg : 'transparent',\n color: isPrimary ? theme.bg : theme.fg,\n border: isPrimary ? 'none' : `1px solid ${theme.fg}20`,\n fontSize: '0.85rem', fontWeight: 500, textAlign: 'center',\n textDecoration: 'none', boxSizing: 'border-box',\n letterSpacing: '0.08em', textTransform: 'uppercase',\n }}\n >\n {btn.text}\n </a>\n )\n })}\n </div>\n )\n}\n\nexport function StatsSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { stats } = section.content as { stats?: Array<{ label: string; value: string }> }\n const layout = section.config?.layout as string | undefined\n if (!stats || stats.length === 0) return null\n\n if (layout === 'list') {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {stats.map((stat, i) => (\n <div key={i}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'baseline', padding: '0.625rem 0' }}>\n <span style={{ fontSize: 12, textTransform: 'uppercase', letterSpacing: '0.15em', color: `${theme.fg}66` }}>\n {stat.label}\n </span>\n <span style={{ fontSize: 14, fontWeight: 300, color: `${theme.fg}CC` }}>\n <AnimatedText text={stat.value} />\n </span>\n </div>\n {i < stats.length - 1 && <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />}\n </div>\n ))}\n </div>\n )\n }\n\n const columns = Math.min(stats.length, 4)\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, border: `1px solid ${theme.fg}0F` }}>\n {stats.map((stat, i) => (\n <div key={i} style={{\n padding: '1.25rem 0.5rem', textAlign: 'center',\n borderRight: i < stats.length - 1 ? `1px solid ${theme.fg}0F` : undefined,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay || 'inherit', fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300, lineHeight: 1, color: theme.fg,\n }}>\n <AnimatedText text={stat.value} />\n </div>\n <div style={{\n fontSize: 11, fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.25em', color: theme.accent, marginTop: '0.5rem',\n }}>\n {stat.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport function ProductCardSection({ section, data, theme, tracking }: {\n section: LandingSection; data: SectionData; theme: SectionTheme; tracking?: ClickTrackingContext\n}) {\n const product = data?.product\n const c = section.content as { name?: string; description?: string; image_url?: string; url?: string }\n const name = c.name || (product?.name as string) || ''\n const description = c.description || (product?.description as string) || ''\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 && <p style={{ fontSize: '0.9rem', color: theme.muted, margin: '0 0 1rem', lineHeight: 1.5 }}>{description}</p>}\n {url && (\n <a href={url} onClick={() => trackClick(tracking, 'View Product', url!)}\n style={{\n display: 'block', width: '100%', padding: '0.75rem', background: theme.fg,\n color: theme.bg, textAlign: 'center', textDecoration: 'none', fontSize: '0.85rem',\n fontWeight: 500, boxSizing: 'border-box', letterSpacing: '0.08em', textTransform: 'uppercase',\n }}>\n View Product\n </a>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport function COAViewerSection({ section, data, theme, onShowCOA, tracking }: {\n section: LandingSection; data: SectionData; theme: SectionTheme\n onShowCOA: () => void; tracking?: ClickTrackingContext\n}) {\n const coa = data?.coa\n const c = section.content as { button_text?: string }\n if (!coa) return null\n\n const buttonStyle: React.CSSProperties = {\n width: '100%', padding: '0.875rem', background: theme.accent, color: theme.bg,\n border: 'none', fontSize: '0.85rem', fontWeight: 500, cursor: 'pointer',\n letterSpacing: '0.08em', textTransform: 'uppercase', textAlign: 'center',\n textDecoration: 'none', display: 'block', boxSizing: 'border-box',\n }\n const buttonLabel = c.button_text || 'View Lab Results'\n\n if (coa.viewer_url) {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <a href={coa.viewer_url} target=\"_blank\" rel=\"noopener noreferrer\"\n onClick={() => trackClick(tracking, buttonLabel, coa.viewer_url!)} style={buttonStyle}>\n {buttonLabel}\n </a>\n </div>\n )\n }\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <button onClick={() => { trackClick(tracking, buttonLabel, coa.url); onShowCOA() }} style={buttonStyle}>\n {buttonLabel}\n </button>\n </div>\n )\n}\n\nexport function COAModal({ coa, theme, onClose }: {\n coa: { url: string; document_name: string }; theme: SectionTheme; 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', justifyContent: 'space-between', alignItems: 'center',\n padding: '0.75rem 1rem', borderBottom: `1px solid ${theme.fg}10`,\n }}>\n <span style={{ color: '#fff', fontWeight: 500, fontSize: '0.85rem' }}>\n {coa.document_name || 'Lab Results'}\n </span>\n <button onClick={onClose} style={{\n background: `${theme.fg}10`, border: 'none', color: '#fff',\n fontSize: '0.85rem', cursor: 'pointer', padding: '0.375rem 0.75rem',\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","'use client'\n\nimport { useState } from 'react'\nimport type { LandingSection } from '../../../types.js'\nimport type { SectionTheme, SectionData } from './shared.js'\n\nexport function LeadCaptureSection({ section, data, theme, onEvent }: {\n section: LandingSection; data: SectionData; theme: SectionTheme\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const c = section.content as {\n heading?: string; subtitle?: string; button_text?: string\n success_heading?: string; success_message?: string; coupon_code?: string\n gateway_url?: string; store_id?: string; source?: string; landing_page_slug?: string\n tags?: string[]; show_newsletter_opt_in?: boolean\n newsletter_label?: string; newsletter_tag?: string; trust_line?: string\n }\n\n const [firstName, setFirstName] = useState('')\n const [email, setEmail] = useState('')\n const [newsletterOptIn, setNewsletterOptIn] = useState(false)\n const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle')\n const [errorMsg, setErrorMsg] = useState('')\n const [serverMessage, setServerMessage] = useState<{ heading: string; message: string } | null>(null)\n\n const gatewayUrl = c.gateway_url || data.gatewayUrl || 'https://whale-gateway.fly.dev'\n const storeId = c.store_id || data.store?.id\n const slug = c.landing_page_slug || (data.landing_page as { slug?: string } | null)?.slug\n\n const heading = c.heading || 'get 10% off your first visit.'\n const subtitle = c.subtitle || 'drop your email and we will send you the code.'\n const buttonText = c.button_text || 'Claim My Discount'\n const successHeading = c.success_heading || 'You\\u2019re in!'\n const successMessage = c.success_message || 'Check your inbox for the discount code.'\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!email || !storeId) return\n\n setStatus('loading')\n setErrorMsg('')\n\n const urlParams = typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : null\n\n try {\n const res = await fetch(`${gatewayUrl}/v1/stores/${storeId}/storefront/leads`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email,\n first_name: firstName || undefined,\n source: c.source || 'landing_page',\n landing_page_slug: slug || undefined,\n newsletter_opt_in: newsletterOptIn || undefined,\n tags: (() => {\n const t = [...(c.tags || [])]\n if (newsletterOptIn) t.push(c.newsletter_tag || 'newsletter-subscriber')\n return t.length > 0 ? t : undefined\n })(),\n visitor_id: data.analyticsContext?.visitorId || undefined,\n session_id: data.analyticsContext?.sessionId || undefined,\n utm_source: urlParams?.get('utm_source') || undefined,\n utm_medium: urlParams?.get('utm_medium') || undefined,\n utm_campaign: urlParams?.get('utm_campaign') || undefined,\n utm_content: urlParams?.get('utm_content') || undefined,\n }),\n })\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error((body as { error?: { message?: string } })?.error?.message || 'Something went wrong. Please try again.')\n }\n\n const body = await res.json().catch(() => ({})) as { is_new?: boolean; message?: string }\n\n // Use server response to show contextual success message\n if (body.is_new === false) {\n setServerMessage({\n heading: 'welcome back!',\n message: body.message || 'your rewards are already loaded.',\n })\n }\n\n setStatus('success')\n onEvent?.('lead', { email, first_name: firstName || undefined, source: c.source || 'landing_page', landing_page_slug: slug || undefined })\n } catch (err) {\n setErrorMsg(err instanceof Error ? err.message : 'Something went wrong. Please try again.')\n setStatus('error')\n }\n }\n\n const inputStyle: React.CSSProperties = {\n flex: 1, minWidth: 0, padding: '0.875rem 1rem', background: theme.surface,\n border: `1px solid ${theme.fg}15`, color: theme.fg, fontSize: '0.95rem',\n fontWeight: 300, outline: 'none', boxSizing: 'border-box', fontFamily: 'inherit',\n transition: 'border-color 0.2s',\n }\n\n if (status === 'success') return <SuccessState theme={theme} heading={serverMessage?.heading || successHeading} message={serverMessage?.message || successMessage} couponCode={c.coupon_code} />\n\n return (\n <div style={{ padding: '3.5rem 1.5rem', maxWidth: 560, margin: '0 auto' }}>\n <style>{`@keyframes lc-spin { to { transform: rotate(360deg) } }`}</style>\n <div style={{ background: theme.surface, border: `1px solid ${theme.fg}12`, padding: 'clamp(2rem, 6vw, 3rem)' }}>\n <div style={{ textAlign: 'center', marginBottom: 'clamp(1.5rem, 4vw, 2rem)' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2.25rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.5rem',\n lineHeight: 1.15, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n {heading}\n </h2>\n <p style={{\n fontSize: '0.85rem', color: theme.accent, margin: 0,\n lineHeight: 1.6, textTransform: 'uppercase', letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n </div>\n\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <div style={{ display: 'flex', gap: '0.75rem', flexWrap: 'wrap' }}>\n <input type=\"text\" placeholder=\"First name\" value={firstName} onChange={(e) => setFirstName(e.target.value)} style={inputStyle} />\n <input type=\"email\" placeholder=\"Email address\" value={email} onChange={(e) => setEmail(e.target.value)} required style={inputStyle} />\n </div>\n\n {c.show_newsletter_opt_in !== false && (\n <label style={{\n display: 'flex', alignItems: 'center', gap: '0.5rem', cursor: 'pointer',\n fontSize: '0.8rem', color: `${theme.fg}90`, fontWeight: 300, lineHeight: 1.4,\n }}>\n <input type=\"checkbox\" checked={newsletterOptIn} onChange={(e) => setNewsletterOptIn(e.target.checked)}\n style={{ width: 16, height: 16, accentColor: theme.accent, cursor: 'pointer', flexShrink: 0 }} />\n {c.newsletter_label || 'Also sign me up for the newsletter \\u2014 new drops, deals, and company news.'}\n </label>\n )}\n\n {status === 'error' && errorMsg && (\n <p style={{ fontSize: '0.8rem', color: '#e55', margin: 0, fontWeight: 400 }}>{errorMsg}</p>\n )}\n\n <button type=\"submit\" disabled={status === 'loading'} style={{\n width: '100%', padding: '0.875rem', background: theme.fg, color: theme.bg,\n border: 'none', fontSize: '0.85rem', fontWeight: 500,\n cursor: status === 'loading' ? 'wait' : 'pointer',\n letterSpacing: '0.08em', textTransform: 'uppercase', fontFamily: 'inherit',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem',\n opacity: status === 'loading' ? 0.7 : 1, transition: 'opacity 0.2s',\n }}>\n {status === 'loading' && (\n <span style={{\n display: 'inline-block', width: 16, height: 16,\n border: `2px solid ${theme.bg}40`, borderTopColor: theme.bg,\n borderRadius: '50%', animation: 'lc-spin 0.8s linear infinite',\n }} />\n )}\n {buttonText}\n </button>\n </form>\n </div>\n </div>\n )\n}\n\nfunction SuccessState({ theme, heading, message, couponCode }: {\n theme: SectionTheme; heading: string; message: string; couponCode?: string\n}) {\n return (\n <div style={{ padding: '3.5rem 1.5rem', maxWidth: 560, margin: '0 auto' }}>\n <div style={{ background: theme.surface, border: `1px solid ${theme.fg}12`, padding: 'clamp(2rem, 6vw, 3rem)', textAlign: 'center' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.75rem',\n lineHeight: 1.2, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n {heading}\n </h2>\n <p style={{ fontSize: '0.9rem', color: `${theme.fg}99`, margin: '0 0 1.5rem', lineHeight: 1.6, fontWeight: 300 }}>\n {message}\n </p>\n {couponCode && (\n <div style={{\n display: 'inline-block', padding: '0.75rem 2rem', background: `${theme.fg}08`,\n border: `1px dashed ${theme.fg}30`, fontSize: 'clamp(1.25rem, 4vw, 1.75rem)',\n fontWeight: 500, fontFamily: 'monospace', letterSpacing: '0.12em', color: theme.accent,\n }}>\n {couponCode}\n </div>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState, useEffect, useRef } from 'react'\nimport type { LandingSection } from '../../types.js'\nimport { HeroSection, TextSection, ImageSection, VideoSection, GallerySection, SocialLinksSection, DividerSection } from './sections/content-sections.js'\nimport { CTASection, StatsSection, ProductCardSection, COAViewerSection, COAModal } from './sections/interactive-sections.js'\nimport { LeadCaptureSection } from './sections/lead-capture-section.js'\n\n// Re-export types for external consumers\nexport type { SectionTheme, ClickTrackingContext, SectionData } from './sections/shared.js'\n\n/**\n * Routes a section to its renderer and tracks section visibility via IntersectionObserver.\n * Each section is wrapped in a div with data attributes for analytics targeting.\n */\nexport function SectionRenderer({\n section,\n data,\n theme,\n tracking,\n onEvent,\n}: {\n section: LandingSection\n data: import('./sections/shared.js').SectionData\n theme: import('./sections/shared.js').SectionTheme\n tracking?: import('./sections/shared.js').ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const [showCOA, setShowCOA] = useState(false)\n\n const el = (() => {\n switch (section.type) {\n case 'hero': return <HeroSection section={section} theme={theme} tracking={tracking} onEvent={onEvent} />\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} tracking={tracking} onEvent={onEvent} />\n case 'stats': return <StatsSection section={section} theme={theme} />\n case 'product_card': return <ProductCardSection section={section} data={data} theme={theme} tracking={tracking} />\n case 'coa_viewer': return <COAViewerSection section={section} data={data} theme={theme} onShowCOA={() => setShowCOA(true)} tracking={tracking} />\n case 'social_links': return <SocialLinksSection section={section} theme={theme} />\n case 'lead_capture': return <LeadCaptureSection section={section} data={data} theme={theme} onEvent={onEvent} />\n case 'divider': return <DividerSection theme={theme} />\n default: return null\n }\n })()\n\n const sectionRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = sectionRef.current\n if (!el || typeof IntersectionObserver === 'undefined') return\n const obs = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n onEvent?.('section_view', { section_id: section.id, section_type: section.type })\n obs.disconnect()\n }\n },\n { threshold: 0.5 },\n )\n obs.observe(el)\n return () => obs.disconnect()\n }, [section.id, section.type, onEvent])\n\n return (\n <div ref={sectionRef} data-section-id={section.id} data-section-type={section.type}>\n {el}\n {showCOA && data?.coa && <COAModal coa={data.coa} theme={theme} onClose={() => setShowCOA(false)} />}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport type { QRLandingData, LandingSection, LandingPageConfig } from '../../types.js'\nimport { SectionRenderer, type SectionTheme, type ClickTrackingContext } from './section-renderer.js'\n\nexport interface QRLandingPageProps {\n code: string\n gatewayUrl?: string\n /** Override rendering for any section type */\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => 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 renderSection,\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\n // If a landing page template is linked, use its sections.\n // Otherwise, auto-generate sections from product/COA data.\n const lp = data.landing_page\n const sections = lp?.sections ?? buildDefaultSections(data)\n\n const theme = extractTheme(data, lp)\n const fontFamily = lp?.font_family\n || (data.store?.theme?.fontDisplay as string)\n || 'system-ui, -apple-system, sans-serif'\n\n const logoUrl = data.qr_code.logo_url || data.store?.logo_url\n const storeName = data.store?.name\n\n const sorted = [...sections].sort((a, b) => a.order - b.order)\n const tracking: ClickTrackingContext = { gatewayUrl, code }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\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 src={logoUrl} alt={storeName || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n\n {/* Sections */}\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n )\n\n if (renderSection) {\n return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n }\n\n return <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n })}\n\n {/* Footer */}\n {storeName && (\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 {storeName}{data.store?.tagline ? ` — ${data.store.tagline}` : ''}\n </p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── Theme Extraction ─────────────────────────────────────────────────────────\n\nfunction extractTheme(data: QRLandingData, lp: LandingPageConfig | null): SectionTheme {\n const t = data.store?.theme as Record<string, unknown> | null | undefined\n const qrLp = data.qr_code.landing_page\n return {\n bg: lp?.background_color || qrLp.background_color || (t?.background as string) || '#050505',\n fg: lp?.text_color || qrLp.text_color || (t?.foreground as string) || '#fafafa',\n accent: lp?.accent_color || (t?.accent as string) || '#E8E2D9',\n surface: (t?.surface as string) || '#111',\n muted: (t?.muted as string) || '#888',\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 }\n}\n\n// ─── Default Sections Builder ─────────────────────────────────────────────────\n// When no landing page template is linked, generate sections from product data.\n\nfunction buildDefaultSections(data: QRLandingData): LandingSection[] {\n const { product, coa, qr_code: qr } = data\n const cf = product?.custom_fields as Record<string, unknown> | null | undefined\n const sections: LandingSection[] = []\n let order = 0\n\n const productName = qr.landing_page.title || (product?.name as string) || qr.name\n const productImage = qr.landing_page.image_url || (product?.featured_image as string) || null\n const description = (product?.description as string) || ''\n const categoryName = (product?.category_name as string) ?? null\n const strainType = toStr(cf?.strain_type)\n const tagline = toStr(cf?.tagline)\n\n // Hero — product image with name and category/strain subtitle (no CTA here)\n if (productImage) {\n sections.push({\n id: 'auto-hero',\n type: 'hero',\n order: order++,\n content: {\n title: productName,\n subtitle: [categoryName, strainType].filter(Boolean).join(' · '),\n background_image: productImage,\n },\n })\n } else {\n sections.push({\n id: 'auto-header',\n type: 'text',\n order: order++,\n content: {\n heading: productName,\n body: [categoryName, strainType].filter(Boolean).join(' · ') || undefined,\n },\n config: { align: 'center' },\n })\n }\n\n // Tagline\n if (tagline) {\n sections.push({\n id: 'auto-tagline',\n type: 'text',\n order: order++,\n content: { body: tagline },\n config: { align: 'center' },\n })\n }\n\n // Detect product type from category or custom fields\n const totalMg = toNum(cf?.total_mg_per_package ?? cf?.total_mg)\n const mgPerPiece = toNum(cf?.mg_per_piece)\n const piecesPerPkg = toNum(cf?.pieces_per_package)\n const isEdible = totalMg != null || mgPerPiece != null || piecesPerPkg != null\n\n // Cannabinoid / dosage stats — layout adapts to product type\n const thca = toNum(cf?.thca_percentage)\n const thc = toNum(cf?.d9_percentage)\n const cbd = toNum(cf?.cbd_total)\n const stats: Array<{ label: string; value: string }> = []\n\n if (isEdible) {\n // Edibles: lead with dosage info (mg is what customers care about)\n if (totalMg != null) stats.push({ label: 'Total MG', value: `${fmtMg(totalMg)}` })\n if (mgPerPiece != null) stats.push({ label: 'Per Piece', value: `${fmtMg(mgPerPiece)}mg` })\n if (piecesPerPkg != null) stats.push({ label: 'Pieces', value: `${piecesPerPkg}` })\n // Still show cannabinoids if present (secondary)\n if (thc != null) stats.push({ label: 'Δ9 THC', value: `${thc.toFixed(thc >= 1 ? 1 : 2)}%` })\n } else {\n // Flower/concentrates: lead with cannabinoid percentages\n if (thca != null) stats.push({ label: 'THCa', value: `${thca.toFixed(thca >= 1 ? 1 : 2)}%` })\n if (thc != null) stats.push({ label: 'Δ9 THC', value: `${thc.toFixed(thc >= 1 ? 1 : 2)}%` })\n if (cbd != null) stats.push({ label: 'CBD', value: `${cbd.toFixed(cbd >= 1 ? 1 : 2)}%` })\n }\n\n if (stats.length > 0) {\n sections.push({\n id: 'auto-stats',\n type: 'stats',\n order: order++,\n content: { stats },\n })\n }\n\n // Edible serving info (if not already covered in stats)\n if (isEdible) {\n const servingDetails: Array<{ label: string; value: string }> = []\n const servingSize = toStr(cf?.serving_size)\n const ingredients = toStr(cf?.ingredients)\n const allergens = toStr(cf?.allergens)\n if (servingSize) servingDetails.push({ label: 'Serving Size', value: servingSize })\n if (ingredients) servingDetails.push({ label: 'Ingredients', value: ingredients })\n if (allergens) servingDetails.push({ label: 'Allergens', value: allergens })\n if (servingDetails.length > 0) {\n sections.push({\n id: 'auto-serving',\n type: 'stats',\n order: order++,\n content: { stats: servingDetails },\n config: { layout: 'list' },\n })\n }\n }\n\n // Product details — genetics, terpenes, effects\n const profileDetails: Array<{ label: string; value: string }> = []\n const genetics = toStr(cf?.genetics)\n const terpenes = toStr(cf?.terpenes)\n const effects = toStr(cf?.effects)\n const flavorProfile = toStr(cf?.flavor_profile)\n const bestFor = toStr(cf?.best_for)\n\n if (genetics) profileDetails.push({ label: 'Genetics', value: genetics })\n if (terpenes) profileDetails.push({ label: 'Terpenes', value: terpenes })\n if (effects) profileDetails.push({ label: 'Effects', value: effects })\n if (flavorProfile) profileDetails.push({ label: 'Flavor', value: flavorProfile })\n if (bestFor) profileDetails.push({ label: 'Best For', value: bestFor })\n\n if (profileDetails.length > 0) {\n sections.push({\n id: 'auto-profile',\n type: 'stats',\n order: order++,\n content: { stats: profileDetails },\n config: { layout: 'list' },\n })\n }\n\n // Description\n if (description) {\n sections.push({\n id: 'auto-description',\n type: 'text',\n order: order++,\n content: { heading: 'About', body: description },\n })\n }\n\n // Lab results — single COA viewer button (the only \"View Lab Results\" on the page)\n if (coa) {\n sections.push({\n id: 'auto-coa',\n type: 'coa_viewer',\n order: order++,\n content: { button_text: 'View Lab Results' },\n })\n }\n\n // Batch & testing info — below the COA button for reference\n const labDetails: Array<{ label: string; value: string }> = []\n const batchNumber = toStr(cf?.batch_number)\n const dateTested = toStr(cf?.date_tested)\n\n if (batchNumber) labDetails.push({ label: 'Batch', value: batchNumber })\n if (dateTested) labDetails.push({ label: 'Tested', value: formatDate(dateTested) })\n\n if (labDetails.length > 0) {\n sections.push({\n id: 'auto-lab-info',\n type: 'stats',\n order: order++,\n content: { stats: labDetails },\n config: { layout: 'list' },\n })\n }\n\n // Shop link — only if product has a slug (link to storefront product page, not COA)\n const productSlug = product?.slug as string | undefined\n if (productSlug) {\n const storeDomain = data.store?.name === 'Flora Distro' ? 'floradistro.com' : null\n if (storeDomain) {\n sections.push({\n id: 'auto-shop',\n type: 'cta',\n order: order++,\n content: {\n buttons: [{ text: 'Shop This Product', url: `https://${storeDomain}/shop/${productSlug}`, style: 'outline' as const }],\n },\n })\n }\n }\n\n return sections\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\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 fmtMg(mg: number): string {\n return mg === Math.floor(mg) ? `${mg}mg` : `${mg.toFixed(1)}mg`\n}\n\nfunction toStr(v: unknown): string | null {\n if (v == null || v === '') return null\n return String(v)\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 { useCallback, useEffect, useRef, useState } from 'react'\nimport type { LandingPageRenderData, LandingSection } from '../../types.js'\nimport { SectionRenderer, type SectionTheme } from './section-renderer.js'\n\nexport interface LandingPageProps {\n slug: string\n gatewayUrl?: string\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n onDataLoaded?: (data: LandingPageRenderData) => void\n onError?: (error: Error) => void\n onEvent?: (event: string, data: Record<string, unknown>) => void\n analyticsContext?: { visitorId?: string; sessionId?: string }\n enableAnalytics?: boolean\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\n/** Read pre-injected data synchronously to avoid flash of loading state */\nfunction getInlinedData(): LandingPageRenderData | null {\n if (typeof window !== 'undefined' && (window as any).__LANDING_DATA__) {\n return (window as any).__LANDING_DATA__ as LandingPageRenderData\n }\n return null\n}\n\nexport function LandingPage({\n slug,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n onEvent,\n analyticsContext,\n enableAnalytics = true,\n}: LandingPageProps) {\n const inlined = useRef(getInlinedData()).current\n const [state, setState] = useState<LoadState>(inlined ? 'ready' : 'loading')\n const [data, setData] = useState<LandingPageRenderData | null>(inlined)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!slug) return\n\n // Data already loaded from server-inlined __LANDING_DATA__\n if (data) {\n onDataLoaded?.(data)\n return\n }\n\n let cancelled = false\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/l/${encodeURIComponent(slug)}`)\n if (cancelled) return\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: LandingPageRenderData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n } catch (err) {\n if (cancelled) return\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\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 <StateScreen title=\"\" loading />\n if (state === 'not_found') return <StateScreen title=\"Page Not Found\" subtitle=\"This page does not exist or has been removed.\" />\n if (state === 'expired') return <StateScreen title=\"Page Expired\" subtitle=\"This page is no longer active.\" />\n if (state === 'error') return <StateScreen title=\"Something Went Wrong\" subtitle={errorMsg || 'Please try again later.'} />\n if (!data) return null\n\n return (\n <PageLayout data={data} gatewayUrl={gatewayUrl} renderSection={renderSection}\n onEvent={onEvent} analyticsContext={analyticsContext} enableAnalytics={enableAnalytics} />\n )\n}\n\n// ─── Page Layout ──────────────────────────────────────────────────────────────\n\nfunction isSectionVisible(section: LandingSection, urlParams: URLSearchParams): boolean {\n const vis = section.config?.visibility as { params?: Record<string, string[]> } | undefined\n if (!vis?.params) return true\n for (const [key, allowed] of Object.entries(vis.params)) {\n const val = urlParams.get(key)\n if (!val || !allowed.includes(val)) return false\n }\n return true\n}\n\nfunction PageLayout({\n data, gatewayUrl, renderSection, onEvent, analyticsContext, enableAnalytics,\n}: {\n data: LandingPageRenderData; gatewayUrl: string\n renderSection?: LandingPageProps['renderSection']\n onEvent?: (event: string, data: Record<string, unknown>) => void\n analyticsContext?: LandingPageProps['analyticsContext']\n enableAnalytics?: boolean\n}) {\n const { landing_page: lp, store } = data\n const trackerRef = useRef<any>(null)\n\n // ─── Analytics bootstrap ───\n useEffect(() => {\n if (!enableAnalytics || typeof window === 'undefined') return\n const config = (window as any).__LANDING_ANALYTICS__ as {\n gatewayUrl?: string; slug?: string; landingPageId?: string; campaignId?: string; storeId?: string\n } | undefined\n if (!config?.slug) return\n\n let visitorId = localStorage.getItem('wt_vid') || ''\n if (!visitorId) { visitorId = crypto.randomUUID(); localStorage.setItem('wt_vid', visitorId) }\n let sessionId = sessionStorage.getItem('wt_sid') || ''\n if (!sessionId) { sessionId = crypto.randomUUID(); sessionStorage.setItem('wt_sid', sessionId) }\n\n import('../../behavioral/tracker.js').then(({ BehavioralTracker }) => {\n const gwUrl = config.gatewayUrl || gatewayUrl\n const slug = config.slug!\n const utmParams = new URLSearchParams(window.location.search)\n\n const tracker = new BehavioralTracker({\n sessionId, visitorId,\n sendBatch: async (batch) => {\n const events = batch.events.map((e) => ({\n event_type: e.data_type, event_data: e.data,\n session_id: batch.session_id, visitor_id: batch.visitor_id,\n campaign_id: config.campaignId || utmParams.get('utm_campaign_id') || undefined,\n utm_source: utmParams.get('utm_source') || undefined,\n utm_medium: utmParams.get('utm_medium') || undefined,\n utm_campaign: utmParams.get('utm_campaign') || undefined,\n }))\n sendEvents(gwUrl, slug, events)\n },\n })\n\n tracker.setPageContext(window.location.href, window.location.pathname)\n tracker.start()\n trackerRef.current = tracker\n\n sendEvents(gwUrl, slug, [{\n event_type: 'page_view',\n event_data: { referrer: document.referrer, url: window.location.href },\n session_id: sessionId, visitor_id: visitorId,\n campaign_id: config.campaignId || undefined,\n }])\n }).catch(() => {})\n\n return () => { trackerRef.current?.stop(); trackerRef.current = null }\n }, [enableAnalytics, gatewayUrl])\n\n // ─── Event handler that sends section events to the analytics endpoint ───\n const handleEvent = useCallback((event: string, eventData: Record<string, unknown>) => {\n onEvent?.(event, eventData)\n if (!enableAnalytics || typeof window === 'undefined') return\n const config = (window as any).__LANDING_ANALYTICS__\n if (!config?.slug) return\n sendEvents(config.gatewayUrl || gatewayUrl, config.slug, [{\n event_type: event, event_data: eventData,\n session_id: sessionStorage.getItem('wt_sid') || undefined,\n visitor_id: localStorage.getItem('wt_vid') || undefined,\n campaign_id: config.campaignId || undefined,\n }])\n }, [onEvent, enableAnalytics, gatewayUrl])\n\n const theme: SectionTheme = {\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 fontDisplay: (store?.theme?.fontDisplay as string) || undefined,\n fontBody: (store?.theme?.fontBody as string) || undefined,\n }\n\n const fontFamily = lp.font_family || theme.fontDisplay || 'system-ui, -apple-system, sans-serif'\n const logoUrl = store?.logo_url\n const urlParams = typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : new URLSearchParams()\n const sorted = [...lp.sections].sort((a, b) => a.order - b.order).filter((s) => isSectionVisible(s, urlParams))\n const sectionData = { ...data, gatewayUrl, landing_page: { slug: lp.slug }, analyticsContext }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {lp.custom_css && <style>{lp.custom_css}</style>}\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img src={logoUrl} alt={store?.name || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n {sorted.map((section) => {\n const defaultRenderer = () => <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} onEvent={handleEvent} />\n if (renderSection) return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n return <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} onEvent={handleEvent} />\n })}\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 }}>Powered by {store.name}</p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction sendEvents(gwUrl: string, slug: string, events: Record<string, unknown>[]) {\n const body = JSON.stringify({ events })\n const url = `${gwUrl}/l/${encodeURIComponent(slug)}/events`\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(url, new Blob([body], { type: 'application/json' }))\n } else {\n fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body, keepalive: true }).catch(() => {})\n }\n}\n\n// ─── State Screens ───────────────────────────────────────────────────────────\n\nconst screenStyle: React.CSSProperties = {\n minHeight: '100dvh', display: 'flex', justifyContent: 'center', alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif', background: '#050505',\n color: '#fafafa', textAlign: 'center', padding: '2rem',\n}\n\nfunction StateScreen({ title, subtitle, loading }: { title: string; subtitle?: string; loading?: boolean }) {\n return (\n <div style={screenStyle}>\n <div>\n {loading && (\n <>\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 </>\n )}\n {title && <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>{title}</h1>}\n {subtitle && <p style={{ color: '#888' }}>{subtitle}</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/components/behavioral-tracker.tsx","../../src/fingerprint/collector.ts","../../src/react/components/fingerprint-collector.tsx","../../src/recording/recorder.ts","../../src/react/components/session-recorder.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/hooks/use-referral.ts","../../src/react/components/sections/shared.tsx","../../src/react/components/sections/content-sections.tsx","../../src/react/components/sections/interactive-sections.tsx","../../src/react/components/sections/lead-capture-section.tsx","../../src/react/components/section-renderer.tsx","../../src/react/components/qr-landing-page.tsx","../../src/react/components/landing-page.tsx"],"names":["createStore","persist","useContext","useRef","useStore","useShallow","useEffect","SESSION_KEY_SUFFIX","VISITOR_KEY_SUFFIX","MAX_SESSION_WAIT_MS","SESSION_POLL_MS","useCallback","useMemo","useState","now","jsxs","jsx","body","el","BehavioralTracker","Fragment"],"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 onCartChange?: (cartId: string, total: number, itemCount: number) => 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\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\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\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\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\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\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 updateProfile: (data: { first_name: string; last_name: string; phone?: string; date_of_birth?: string }) => Promise<void>\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 updateProfile: async (data) => {\n const customer = get().customer\n if (!customer?.id) throw new Error('Not authenticated')\n const updated = await client.updateProfile(customer.id, data)\n set({ customer: updated })\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'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\n\ninterface SessionData {\n id: string\n createdAt: number\n}\n\n/** Parse UTM parameters, gclid, and fbclid from the current URL. */\nfunction parseMarketingParams(): Record<string, string> {\n if (typeof window === 'undefined') return {}\n const params = new URLSearchParams(window.location.search)\n const result: Record<string, string> = {}\n for (const key of ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'gclid', 'fbclid']) {\n const val = params.get(key)\n if (val) result[key] = val\n }\n return result\n}\n\n/** Get or create a persistent visitor ID. */\nfunction getVisitorId(prefix: string): string {\n const key = `${prefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n}\n\n/** Detect device type from user agent. */\nfunction detectDevice(): string {\n if (typeof navigator === 'undefined') return 'unknown'\n const ua = navigator.userAgent\n if (/Mobi|Android/i.test(ua)) return 'mobile'\n if (/Tablet|iPad/i.test(ua)) return 'tablet'\n return 'desktop'\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 marketing = parseMarketingParams()\n const visitorId = getVisitorId(config.storagePrefix)\n const session = await client.createSession({\n visitor_id: visitorId,\n user_agent: navigator.userAgent,\n referrer: document.referrer || undefined,\n page_url: window.location.href,\n device: detectDevice(),\n ...marketing,\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 const visitorId = getVisitorId(config.storagePrefix)\n await client.trackEvent({\n session_id: sessionId,\n event_type: eventType,\n event_data: { ...data, event_id: eventId },\n visitor_id: visitorId,\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 updateSessionCart = useCallback(\n async (cartId: string, cartTotal: number, cartItemCount: number) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, {\n cart_id: cartId,\n cart_total: cartTotal,\n cart_item_count: cartItemCount,\n status: 'carting',\n })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const updateSessionOrder = useCallback(\n async (orderId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { order_id: orderId, status: 'converted' })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const trackPageView = useCallback(\n (url: string, referrer?: string) => {\n track('page_view', { url, referrer, page_url: url })\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 /**\n * Request browser geolocation and attach coordinates to the current session.\n * Best called after a user interaction (e.g. age gate confirmation) so the\n * browser permission prompt has high grant rates.\n *\n * Returns the captured position or null if denied/unavailable.\n */\n const captureGeolocation = useCallback(\n async (options?: { timeout?: number; enableHighAccuracy?: boolean }): Promise<GeolocationPosition | null> => {\n if (!trackingEnabled) return null\n if (typeof navigator === 'undefined' || !navigator.geolocation) return null\n\n try {\n const position = await new Promise<GeolocationPosition>((resolve, reject) => {\n navigator.geolocation.getCurrentPosition(resolve, reject, {\n timeout: options?.timeout ?? 10000,\n enableHighAccuracy: options?.enableHighAccuracy ?? true,\n })\n })\n\n const { latitude, longitude, accuracy } = position.coords\n\n // Attach to current session\n const sessionId = await getOrCreateSession()\n if (sessionId && !sessionId.startsWith('local-')) {\n await client.updateSession(sessionId, {\n latitude,\n longitude,\n geolocation_source: 'browser_gps',\n geolocation_accuracy: accuracy,\n })\n }\n\n // Fire tracking event\n track('location_granted' as EventType, {\n accuracy,\n trigger: 'sdk',\n device_type: detectDevice(),\n })\n\n return position\n } catch (error) {\n track('location_denied' as EventType, {\n error: error instanceof Error ? error.message : 'unknown',\n trigger: 'sdk',\n device_type: detectDevice(),\n })\n return null\n }\n },\n [client, getOrCreateSession, track, trackingEnabled]\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 updateSessionCart,\n updateSessionOrder,\n getOrCreateSession,\n captureGeolocation,\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 /** Stable visitor ID for cross-session attribution */\n visitorId: getVisitorId(config.storagePrefix),\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 updateProfile: s.updateProfile,\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 const fullUrl = typeof window !== 'undefined' ? window.location.href : pathname\n trackPageView(fullUrl, 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 { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { BehavioralTracker } from '../../behavioral/tracker.js'\nimport type { BehavioralBatch } from '../../behavioral/types.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function BehavioralTrackerComponent({ pathname }: { pathname: string | null }) {\n const ctx = useContext(WhaleContext)\n const trackerRef = useRef<BehavioralTracker | null>(null)\n const initRef = useRef(false)\n\n // Mount once — never re-run this effect\n useEffect(() => {\n if (!ctx || !ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n const { config } = ctx\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const readSessionId = (): string | null => {\n const key = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n try {\n const raw = localStorage.getItem(key)\n if (raw) {\n const stored = JSON.parse(raw)\n return stored.id ?? null\n }\n } catch {}\n return null\n }\n\n const readVisitorId = (): string => {\n const key = `${config.storagePrefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n }\n\n const tryInit = () => {\n if (cancelled) return\n\n const sessionId = readSessionId()\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n }\n return\n }\n\n initRef.current = true\n const visitorId = readVisitorId()\n const baseUrl = config.proxyPath\n const endpoint = `${baseUrl}/v1/stores/${config.storeId}/storefront/behavioral`\n\n const sendBatch = async (batch: BehavioralBatch): Promise<void> => {\n await resilientSend(endpoint, batch, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n }\n\n const tracker = new BehavioralTracker({ sendBatch, sessionId, visitorId })\n tracker.start()\n trackerRef.current = tracker\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (trackerRef.current) {\n trackerRef.current.stop()\n trackerRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // Update page context on pathname change\n useEffect(() => {\n if (!trackerRef.current || !pathname) return\n const url = typeof window !== 'undefined' ? window.location.href : pathname\n trackerRef.current.setPageContext(url, pathname)\n }, [pathname])\n\n return null\n}\n","export interface DeviceFingerprint {\n fingerprint_id: string\n canvas_fingerprint: string\n webgl_fingerprint: string\n audio_fingerprint: string\n screen_resolution: string\n platform: string\n timezone: string\n language: string\n hardware_concurrency: number\n device_memory: number | null\n color_depth: number\n pixel_ratio: number\n touch_support: boolean\n cookie_enabled: boolean\n do_not_track: string | null\n}\n\nasync function sha256(input: string): Promise<string> {\n const data = new TextEncoder().encode(input)\n const hash = await crypto.subtle.digest('SHA-256', data)\n return Array.from(new Uint8Array(hash))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\nasync function getCanvasFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n canvas.width = 256\n canvas.height = 256\n const ctx = canvas.getContext('2d')\n if (!ctx) return ''\n\n // Filled rect with gradient\n const gradient = ctx.createLinearGradient(0, 0, 256, 256)\n gradient.addColorStop(0, '#ff6b35')\n gradient.addColorStop(0.5, '#1a73e8')\n gradient.addColorStop(1, '#34a853')\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, 256, 256)\n\n // Text\n ctx.fillStyle = '#ffffff'\n ctx.font = '18px Arial'\n ctx.textBaseline = 'top'\n ctx.fillText('WhaleTools', 10, 10)\n\n // Arc / circle\n ctx.beginPath()\n ctx.arc(128, 128, 60, 0, Math.PI * 2)\n ctx.strokeStyle = '#fbbc04'\n ctx.lineWidth = 3\n ctx.stroke()\n\n // Line\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(256, 256)\n ctx.strokeStyle = '#ea4335'\n ctx.lineWidth = 2\n ctx.stroke()\n\n const dataUrl = canvas.toDataURL()\n return sha256(dataUrl)\n } catch {\n return ''\n }\n}\n\nasync function getWebGLFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl')\n if (!gl || !(gl instanceof WebGLRenderingContext)) return ''\n\n const ext = gl.getExtension('WEBGL_debug_renderer_info')\n const renderer = ext\n ? gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)\n : 'unknown'\n const vendor = ext\n ? gl.getParameter(ext.UNMASKED_VENDOR_WEBGL)\n : 'unknown'\n const version = gl.getParameter(gl.VERSION)\n\n const combined = `${renderer}|${vendor}|${version}`\n return sha256(combined)\n } catch {\n return ''\n }\n}\n\nasync function getAudioFingerprint(): Promise<string> {\n try {\n const AudioCtx =\n (window as any).OfflineAudioContext ||\n (window as any).webkitOfflineAudioContext\n if (!AudioCtx) return ''\n\n const context = new AudioCtx(1, 44100, 44100)\n const oscillator = context.createOscillator()\n oscillator.type = 'triangle'\n oscillator.frequency.setValueAtTime(10000, context.currentTime)\n\n const compressor = context.createDynamicsCompressor()\n compressor.threshold.setValueAtTime(-50, context.currentTime)\n compressor.knee.setValueAtTime(40, context.currentTime)\n compressor.ratio.setValueAtTime(12, context.currentTime)\n compressor.attack.setValueAtTime(0, context.currentTime)\n compressor.release.setValueAtTime(0.25, context.currentTime)\n\n oscillator.connect(compressor)\n compressor.connect(context.destination)\n oscillator.start(0)\n\n const buffer = await context.startRendering()\n const samples = buffer.getChannelData(0).slice(0, 100)\n const sampleStr = Array.from(samples as ArrayLike<number>)\n .map((s) => s.toString())\n .join(',')\n\n return sha256(sampleStr)\n } catch {\n return ''\n }\n}\n\nexport async function collectFingerprint(): Promise<DeviceFingerprint> {\n const [canvas_fingerprint, webgl_fingerprint, audio_fingerprint] =\n await Promise.all([\n getCanvasFingerprint(),\n getWebGLFingerprint(),\n getAudioFingerprint(),\n ])\n\n const screen_resolution = `${window.screen.width}x${window.screen.height}`\n const platform = navigator.platform || ''\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone || ''\n const language = navigator.language || ''\n const hardware_concurrency = navigator.hardwareConcurrency || 0\n const device_memory = (navigator as any).deviceMemory ?? null\n const color_depth = window.screen.colorDepth\n const pixel_ratio = window.devicePixelRatio || 1\n const touch_support =\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (navigator as any).msMaxTouchPoints > 0\n const cookie_enabled = navigator.cookieEnabled\n const do_not_track = navigator.doNotTrack ?? null\n\n const fingerprintSource = [\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n String(hardware_concurrency),\n ].join('|')\n\n const fingerprint_id = await sha256(fingerprintSource)\n\n return {\n fingerprint_id,\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n hardware_concurrency,\n device_memory,\n color_depth,\n pixel_ratio,\n touch_support,\n cookie_enabled,\n do_not_track,\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { collectFingerprint } from '../../fingerprint/collector.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\n\nexport function FingerprintCollector() {\n const ctx = useContext(WhaleContext)\n const sent = useRef(false)\n\n useEffect(() => {\n if (!ctx || sent.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n sent.current = true\n\n const { config, client } = ctx\n const prefix = config.storagePrefix\n const fpKey = `${prefix}-fingerprint-sent`\n\n const linkFingerprintToSession = (fingerprintId: string) => {\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n client.updateSession(session.id, { fingerprint_id: fingerprintId }).catch(() => {})\n }\n } catch {}\n }\n\n // Check if already sent this session\n const existing = localStorage.getItem(fpKey)\n if (existing) {\n linkFingerprintToSession(existing)\n return\n }\n\n // Collect and send\n collectFingerprint()\n .then(async (fp) => {\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/fingerprints`\n\n // Send fingerprint to gateway\n await resilientSend(url, fp, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n }).catch(() => {})\n\n // Store fingerprint_id locally\n localStorage.setItem(fpKey, fp.fingerprint_id)\n\n // Link to current session\n linkFingerprintToSession(fp.fingerprint_id)\n })\n .catch(() => {})\n }, [ctx])\n\n return null\n}\n","/**\n * Lightweight session recorder — captures DOM mutations, scroll, mouse,\n * input changes, and viewport resizes without any external dependency.\n *\n * Events are buffered locally and flushed to the backend at a configurable\n * interval (default 5 s) or immediately when the page is being unloaded.\n */\n\nexport interface RecordingEvent {\n /** 0=full_snapshot, 1=mutation, 2=mouse, 3=scroll, 4=input, 5=resize, 6=custom */\n type: number\n timestamp: number\n data: Record<string, unknown>\n}\n\ninterface RecorderConfig {\n sendChunk: (events: RecordingEvent[], sequence: number) => Promise<void>\n /** How often buffered events are flushed (ms). Default 5 000. */\n flushIntervalMs?: number\n /** Maximum events per chunk. Default 200. */\n maxChunkSize?: number\n}\n\ntype RequiredConfig = Required<RecorderConfig>\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction now(): number {\n return Date.now()\n}\n\nfunction throttle<T extends (...args: unknown[]) => void>(\n fn: T,\n ms: number,\n): T {\n let last = 0\n let timer: ReturnType<typeof setTimeout> | null = null\n const throttled = (...args: unknown[]) => {\n const elapsed = now() - last\n if (elapsed >= ms) {\n last = now()\n fn(...args)\n } else if (!timer) {\n timer = setTimeout(() => {\n last = now()\n timer = null\n fn(...args)\n }, ms - elapsed)\n }\n }\n return throttled as unknown as T\n}\n\n/** Build a short CSS selector for an element (used in mutation / input payloads). */\nfunction shortSelector(el: Element): string {\n if (el.id) return `#${el.id}`\n let sel = el.tagName.toLowerCase()\n if (el.className && typeof el.className === 'string') {\n const cls = el.className\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .join('.')\n if (cls) sel += `.${cls}`\n }\n return sel\n}\n\n// ---------------------------------------------------------------------------\n// SessionRecorder\n// ---------------------------------------------------------------------------\n\nexport class SessionRecorder {\n private events: RecordingEvent[] = []\n private sequence = 0\n private observer: MutationObserver | null = null\n private flushTimer: ReturnType<typeof setInterval> | null = null\n private config: RequiredConfig\n private listeners: Array<[EventTarget, string, EventListener, boolean | AddEventListenerOptions | undefined]> = []\n private started = false\n private flushing = false\n /** Pending mutations collected within the current animation frame. */\n private pendingMutations: MutationRecord[] = []\n private mutationRafId: number | null = null\n\n constructor(config: RecorderConfig) {\n this.config = {\n sendChunk: config.sendChunk,\n flushIntervalMs: config.flushIntervalMs ?? 5_000,\n maxChunkSize: config.maxChunkSize ?? 200,\n }\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n start(): void {\n if (this.started) return\n this.started = true\n\n this.captureFullSnapshot()\n this.setupMutationObserver()\n this.setupEventListeners()\n\n this.flushTimer = setInterval(() => {\n void this.flush()\n }, this.config.flushIntervalMs)\n }\n\n stop(): void {\n if (!this.started) return\n this.started = false\n\n // Tear down mutation observer\n if (this.observer) {\n this.observer.disconnect()\n this.observer = null\n }\n\n // Cancel pending mutation raf\n if (this.mutationRafId !== null) {\n cancelAnimationFrame(this.mutationRafId)\n this.mutationRafId = null\n }\n\n // Remove all event listeners\n for (const [target, event, handler, options] of this.listeners) {\n target.removeEventListener(event, handler, options as EventListenerOptions | undefined)\n }\n this.listeners = []\n\n // Stop flush timer\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer)\n this.flushTimer = null\n }\n\n // Final flush\n void this.flush()\n }\n\n // -----------------------------------------------------------------------\n // Full Snapshot (type 0)\n // -----------------------------------------------------------------------\n\n private captureFullSnapshot(): void {\n const tree = this.serializeNode(document.documentElement)\n this.push({\n type: 0,\n timestamp: now(),\n data: {\n href: location.href,\n width: window.innerWidth,\n height: window.innerHeight,\n tree: tree ?? {},\n },\n })\n }\n\n private serializeNode(node: Node): Record<string, unknown> | null {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element\n\n // Skip <script> and <link rel=\"preload\"> to reduce payload size\n const tag = el.tagName.toLowerCase()\n if (tag === 'script' || tag === 'noscript') return null\n\n const attrs: Record<string, string> = {}\n for (const attr of Array.from(el.attributes)) {\n // Mask sensitive inputs\n if (\n attr.name === 'value' &&\n el instanceof HTMLInputElement &&\n el.type === 'password'\n ) {\n continue\n }\n attrs[attr.name] = attr.value\n }\n\n const children: Record<string, unknown>[] = []\n for (const child of Array.from(el.childNodes)) {\n const serialized = this.serializeNode(child)\n if (serialized) children.push(serialized)\n }\n\n return { tag, attrs, children }\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || ''\n // Skip empty text nodes\n if (!text.trim()) return null\n return { text }\n }\n\n return null\n }\n\n // -----------------------------------------------------------------------\n // Mutation Observer (type 1)\n // -----------------------------------------------------------------------\n\n private setupMutationObserver(): void {\n this.observer = new MutationObserver((mutations) => {\n // Batch mutations that arrive in the same animation frame\n this.pendingMutations.push(...mutations)\n if (this.mutationRafId === null) {\n this.mutationRafId = requestAnimationFrame(() => {\n this.processMutations(this.pendingMutations)\n this.pendingMutations = []\n this.mutationRafId = null\n })\n }\n })\n\n this.observer.observe(document.documentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n attributeOldValue: false,\n })\n }\n\n private processMutations(mutations: MutationRecord[]): void {\n const ts = now()\n\n const adds: Record<string, unknown>[] = []\n const removes: Record<string, unknown>[] = []\n const attrs: Record<string, unknown>[] = []\n const texts: Record<string, unknown>[] = []\n\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const node of Array.from(m.addedNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.TEXT_NODE) {\n const serialized = this.serializeNode(node)\n if (serialized) {\n adds.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n node: serialized,\n })\n }\n }\n }\n for (const node of Array.from(m.removedNodes)) {\n removes.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n tag: node.nodeType === Node.ELEMENT_NODE\n ? (node as Element).tagName.toLowerCase()\n : '#text',\n })\n }\n } else if (m.type === 'attributes' && m.target.nodeType === Node.ELEMENT_NODE) {\n const el = m.target as Element\n const name = m.attributeName || ''\n attrs.push({\n selector: shortSelector(el),\n name,\n value: el.getAttribute(name),\n })\n } else if (m.type === 'characterData') {\n texts.push({\n parentSelector: m.target.parentElement\n ? shortSelector(m.target.parentElement)\n : null,\n value: (m.target.textContent || '').slice(0, 200),\n })\n }\n }\n\n // Only push if there's actual data\n if (adds.length || removes.length || attrs.length || texts.length) {\n this.push({\n type: 1,\n timestamp: ts,\n data: {\n adds: adds.length ? adds : undefined,\n removes: removes.length ? removes : undefined,\n attrs: attrs.length ? attrs : undefined,\n texts: texts.length ? texts : undefined,\n },\n })\n }\n }\n\n // -----------------------------------------------------------------------\n // Event Listeners (types 2–5)\n // -----------------------------------------------------------------------\n\n private setupEventListeners(): void {\n // --- Mouse (type 2) ---\n const onMouseMove = throttle(((e: MouseEvent) => {\n this.push({\n type: 2,\n timestamp: now(),\n data: { source: 'move', x: e.clientX, y: e.clientY },\n })\n }) as (...args: unknown[]) => void, 100)\n\n const onClick = ((e: MouseEvent) => {\n const target = e.target as Element | null\n this.push({\n type: 2,\n timestamp: now(),\n data: {\n source: 'click',\n x: e.clientX,\n y: e.clientY,\n target: target ? shortSelector(target) : null,\n },\n })\n }) as EventListener\n\n this.addListener(document, 'mousemove', onMouseMove as EventListener, { passive: true, capture: true })\n this.addListener(document, 'click', onClick, { passive: true, capture: true })\n\n // --- Scroll (type 3) ---\n const onScroll = throttle(((e: Event) => {\n const target = e.target\n if (target === document || target === document.documentElement || target === window) {\n this.push({\n type: 3,\n timestamp: now(),\n data: { target: 'window', x: window.scrollX, y: window.scrollY },\n })\n } else if (target instanceof Element) {\n this.push({\n type: 3,\n timestamp: now(),\n data: {\n target: shortSelector(target),\n x: target.scrollLeft,\n y: target.scrollTop,\n },\n })\n }\n }) as (...args: unknown[]) => void, 200)\n\n this.addListener(document, 'scroll', onScroll as EventListener, { passive: true, capture: true })\n\n // --- Input (type 4) ---\n const onInput = ((e: Event) => {\n const target = e.target\n if (!(target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement)) {\n return\n }\n const isPassword =\n target instanceof HTMLInputElement && target.type === 'password'\n\n this.push({\n type: 4,\n timestamp: now(),\n data: {\n selector: shortSelector(target),\n tag: target.tagName.toLowerCase(),\n inputType: target instanceof HTMLInputElement ? target.type : undefined,\n value: isPassword ? '***' : (target.value || '').slice(0, 100),\n },\n })\n }) as EventListener\n\n this.addListener(document, 'input', onInput, { passive: true, capture: true })\n this.addListener(document, 'change', onInput, { passive: true, capture: true })\n\n // --- Resize (type 5) ---\n const onResize = throttle((() => {\n this.push({\n type: 5,\n timestamp: now(),\n data: { width: window.innerWidth, height: window.innerHeight },\n })\n }) as (...args: unknown[]) => void, 500)\n\n this.addListener(window, 'resize', onResize as EventListener, { passive: true })\n\n // --- Visibility change (flush on hide) ---\n const onVisibility = (() => {\n if (document.visibilityState === 'hidden') {\n void this.flush()\n }\n }) as EventListener\n\n this.addListener(document, 'visibilitychange', onVisibility)\n }\n\n // -----------------------------------------------------------------------\n // Event buffer & flushing\n // -----------------------------------------------------------------------\n\n private push(event: RecordingEvent): void {\n if (!this.started) return\n\n this.events.push(event)\n\n // Auto-flush if we've hit the chunk limit\n if (this.events.length >= this.config.maxChunkSize) {\n void this.flush()\n }\n }\n\n private async flush(): Promise<void> {\n if (this.events.length === 0) return\n if (this.flushing) return\n\n this.flushing = true\n\n // Swap out the buffer so new events accumulate independently\n const chunk = this.events\n this.events = []\n const seq = this.sequence++\n\n try {\n await this.config.sendChunk(chunk, seq)\n } catch {\n // Best-effort — if sendChunk itself handles retries / beacon fallback,\n // there's nothing else to do here.\n } finally {\n this.flushing = false\n }\n }\n\n // -----------------------------------------------------------------------\n // Listener bookkeeping\n // -----------------------------------------------------------------------\n\n private addListener(\n target: EventTarget,\n event: string,\n handler: EventListener,\n options?: AddEventListenerOptions,\n ): void {\n target.addEventListener(event, handler, options)\n this.listeners.push([target, event, handler, options])\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { SessionRecorder } from '../../recording/recorder.js'\nimport type { RecordingEvent } from '../../recording/recorder.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function SessionRecorderComponent() {\n const ctx = useContext(WhaleContext)\n const recorderRef = useRef<SessionRecorder | null>(null)\n const sampledRef = useRef<boolean | null>(null)\n const initRef = useRef(false)\n\n useEffect(() => {\n if (!ctx || initRef.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n // Determine sampling once per component lifetime\n if (sampledRef.current === null) {\n sampledRef.current = Math.random() < ctx.config.recordingRate\n }\n if (!sampledRef.current) return\n\n const { config } = ctx\n const prefix = config.storagePrefix\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const tryInit = () => {\n if (cancelled) return\n\n let sessionId: string | null = null\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n sessionId = session.id || null\n }\n } catch {}\n\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n return\n }\n return\n }\n\n initRef.current = true\n const visitorId = (() => {\n try {\n return localStorage.getItem(`${prefix}${VISITOR_KEY_SUFFIX}`) || 'unknown'\n } catch {\n return 'unknown'\n }\n })()\n\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/recordings`\n const sid = sessionId\n\n const recorder = new SessionRecorder({\n sendChunk: async (events: RecordingEvent[], sequence: number) => {\n await resilientSend(url, {\n session_id: sid,\n visitor_id: visitorId,\n events,\n sequence,\n started_at: sequence === 0 ? new Date().toISOString() : undefined,\n }, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n },\n })\n\n recorder.start()\n recorderRef.current = recorder\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (recorderRef.current) {\n recorderRef.current.stop()\n recorderRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\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 { BehavioralTrackerComponent } from './components/behavioral-tracker.js'\nimport { FingerprintCollector } from './components/fingerprint-collector.js'\nimport { SessionRecorderComponent } from './components/session-recorder.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 — fire events via client directly\n // since we can't use the useAnalytics hook outside a component.\n // Read session_id from localStorage (same key pattern as useAnalytics).\n const readSessionId = (): string | undefined => {\n try {\n const raw = localStorage.getItem(`${resolvedConfig.storagePrefix}-analytics-session`)\n if (!raw) return undefined\n const stored = JSON.parse(raw) as { id: string; createdAt: number }\n if (Date.now() - stored.createdAt < resolvedConfig.sessionTtl) return stored.id\n } catch { /* ignore */ }\n return undefined\n }\n\n /** Sync cart state to the analytics session (fire-and-forget). */\n const syncCartToSession = (cartId: string, total: number, itemCount: number) => {\n const sid = readSessionId()\n if (sid && !sid.startsWith('local-')) {\n client.updateSession(sid, {\n cart_id: cartId,\n cart_total: total,\n cart_item_count: itemCount,\n status: 'carting',\n }).catch(() => {})\n }\n }\n\n const onAddToCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'add_to_cart' as never, event_data: { product_id: productId, product_name: productName, quantity, price, tier } }).catch(() => {})\n }\n : undefined\n\n const onRemoveFromCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'remove_from_cart' as never, event_data: { product_id: productId, product_name: productName } }).catch(() => {})\n }\n : undefined\n\n const cartStore = createCartStore(client, resolvedConfig.storagePrefix, onAddToCart, onRemoveFromCart, syncCartToSession)\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 <BehavioralTrackerComponent pathname={pathname} />\n <FingerprintCollector />\n <SessionRecorderComponent />\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'\nimport { useAnalytics } from './use-analytics.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 { visitorId, getOrCreateSession: getAnalyticsSession } = useAnalytics()\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 loyalty_reward_id?: string\n selected_product_id?: string\n }) => {\n setLoading(true)\n setError(null)\n try {\n // Auto-inject attribution from analytics session\n const analyticsSessionId = await getAnalyticsSession().catch(() => undefined)\n const data = await ctx.client.createCheckoutSession({\n ...params,\n visitor_id: visitorId,\n session_id: analyticsSessionId?.startsWith('local-') ? undefined : analyticsSessionId,\n })\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, opts?: {\n loyalty_reward_id?: string\n selected_product_id?: string\n }): 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, opts)\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, Product } 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 const fetchProductsByCategory = useCallback(async (category: string, locationId: string, tier?: string): Promise<Product[]> => {\n const res = await ctx.client.listLoyaltyProducts({ category, location_id: locationId, tier })\n return res.data\n }, [ctx.client])\n\n return { account, rewards, transactions, loading, error, refresh, redeemReward, fetchProductsByCategory }\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 { DealValidation, Cart } from '../../types.js'\n\nexport function useDeals() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useDeals must be used within <WhaleProvider>')\n\n const [validation, setValidation] = useState<DealValidation | 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<DealValidation> => {\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.validateDeal(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.applyDeal(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.removeDeal(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\n/** @deprecated Use useDeals instead */\nexport const useCoupons = useDeals\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { ReferralStatus } from '../../types.js'\n\nexport function useReferral() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReferral must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [status, setStatus] = useState<ReferralStatus | null>(null)\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 setStatus(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.getReferralStatus(customer.id)\n setStatus(result)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const enroll = useCallback(async () => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.enrollReferral(customer.id)\n await refresh()\n return result\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 }, [customer?.id, ctx.client, refresh])\n\n const attributeReferral = useCallback(\n async (code: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.attributeReferral(customer.id, code)\n await refresh()\n return result\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 },\n [customer?.id, ctx.client, refresh],\n )\n\n // Auto-attribute if URL has ?code= OR localStorage has whale_ref_code\n // The code is persisted to localStorage on the /refer page so it survives the auth redirect\n useEffect(() => {\n if (!customer?.id || !status || status.referred_by) return\n if (typeof window === 'undefined') return\n const params = new URLSearchParams(window.location.search)\n const code = params.get('code') || localStorage.getItem('whale_ref_code')\n if (!code) return\n ctx.client.attributeReferral(customer.id, code).then(() => {\n localStorage.removeItem('whale_ref_code')\n refresh()\n }).catch(() => {})\n }, [customer?.id, status, ctx.client, refresh])\n\n const share = useCallback(async () => {\n if (!status?.share_url) throw new Error('Not enrolled in referral program')\n const shareData = {\n title: 'Check this out!',\n text: `Use my referral code ${status.referral_code} for rewards!`,\n url: status.share_url,\n }\n if (typeof navigator !== 'undefined' && navigator.share) {\n try {\n await navigator.share(shareData)\n return\n } catch {\n // Fall through to clipboard\n }\n }\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n await navigator.clipboard.writeText(status.share_url)\n }\n }, [status])\n\n return {\n status,\n loading,\n error,\n enroll,\n refresh,\n share,\n attributeReferral,\n referralCode: status?.referral_code ?? null,\n shareUrl: status?.share_url ?? null,\n isEnrolled: status?.enrolled ?? false,\n referredBy: status?.referred_by ?? null,\n }\n}\n","'use client'\n\nimport { useState, useEffect, useRef } from 'react'\n\n// ─── Theme ────────────────────────────────────────────────────────────────────\n\nexport interface SectionTheme {\n bg: string\n fg: string\n accent: string\n surface: string\n muted: string\n fontDisplay?: string\n fontBody?: string\n}\n\n// ─── Click tracking context (QR/creation beacon system) ──────────────────────\n\nexport interface ClickTrackingContext {\n gatewayUrl?: string\n code?: string\n}\n\nexport function trackClick(tracking: ClickTrackingContext | undefined, label: string, url: string, position?: number) {\n if (!tracking?.gatewayUrl || !tracking?.code) return\n const body = JSON.stringify({ label, url, position })\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(\n `${tracking.gatewayUrl}/q/${encodeURIComponent(tracking.code)}/click`,\n new Blob([body], { type: 'application/json' }),\n )\n }\n}\n\n// ─── Shared data shape passed to all section renderers ────────────────────────\n\nexport interface SectionData {\n store?: { id?: string; name?: string | null; logo_url?: string | null; tagline?: string | null; theme?: Record<string, unknown> | null } | null\n product?: Record<string, unknown> | null\n coa?: { url: string; viewer_url?: string | null; document_name: string } | null\n gatewayUrl?: string\n landing_page?: { slug?: string } | null\n analyticsContext?: { visitorId?: string; sessionId?: string }\n}\n\n// ─── Animated Number Counter ─────────────────────────────────────────────────\n\n/** Global regex for splitting text into numeric + non-numeric segments */\nconst NUM_SPLIT = /(\\$?[\\d,]+\\.?\\d*[+★%]?)/g\n\n/** Non-global regex for testing if a segment is numeric — avoids stateful lastIndex bug */\nconst NUM_TEST = /^\\$?[\\d,]+\\.?\\d*[+★%]?$/\n\nfunction easeOutQuart(t: number): number {\n return 1 - Math.pow(1 - t, 4)\n}\n\nfunction useCountUp(target: number, duration: number, start: boolean): number {\n const [value, setValue] = useState(0)\n const raf = useRef(0)\n\n useEffect(() => {\n if (!start) return\n const t0 = performance.now()\n function tick(now: number) {\n const elapsed = now - t0\n const progress = Math.min(elapsed / duration, 1)\n setValue(Math.round(easeOutQuart(progress) * target))\n if (progress < 1) raf.current = requestAnimationFrame(tick)\n }\n raf.current = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(raf.current)\n }, [target, duration, start])\n\n return value\n}\n\nexport function AnimatedNumber({ raw }: { raw: string }) {\n const ref = useRef<HTMLSpanElement>(null)\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n const el = ref.current\n if (!el || typeof IntersectionObserver === 'undefined') { setVisible(true); return }\n const obs = new IntersectionObserver(([entry]) => {\n if (entry.isIntersecting) { setVisible(true); obs.disconnect() }\n }, { threshold: 0.3 })\n obs.observe(el)\n return () => obs.disconnect()\n }, [])\n\n const prefix = raw.startsWith('$') ? '$' : ''\n const suffix = raw.match(/[+★%]$/)?.[0] || ''\n const numeric = parseFloat(raw.replace(/[\\$,+★%]/g, ''))\n const hasCommas = raw.includes(',')\n const decimals = raw.includes('.') ? (raw.split('.')[1]?.replace(/[+★%]/g, '').length || 0) : 0\n\n const count = useCountUp(\n decimals > 0 ? Math.round(numeric * Math.pow(10, decimals)) : numeric,\n 1400,\n visible,\n )\n\n const display = decimals > 0\n ? (count / Math.pow(10, decimals)).toFixed(decimals)\n : hasCommas\n ? count.toLocaleString()\n : String(count)\n\n return <span ref={ref}>{prefix}{display}{suffix}</span>\n}\n\n/** Replace numeric segments in a string with animated counters */\nexport function AnimatedText({ text }: { text: string }) {\n const parts = text.split(NUM_SPLIT)\n return (\n <>\n {parts.map((part, i) =>\n NUM_TEST.test(part)\n ? <AnimatedNumber key={i} raw={part} />\n : part\n )}\n </>\n )\n}\n","'use client'\n\nimport type { LandingSection } from '../../../types.js'\nimport { AnimatedText, type SectionTheme, type ClickTrackingContext, trackClick } from './shared.js'\n\nexport function HeroSection({ section, theme, tracking, onEvent }: {\n section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\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 style={{\n position: 'relative', minHeight: '60vh', display: 'flex', flexDirection: 'column',\n justifyContent: 'center', alignItems: 'center', textAlign: 'center', padding: '3rem 1.5rem',\n backgroundImage: background_image ? `url(${background_image})` : undefined,\n backgroundSize: 'cover', backgroundPosition: 'center',\n }}>\n {background_image && <div style={{ position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.5)' }} />}\n <div style={{ position: 'relative', zIndex: 1, maxWidth: 640 }}>\n {title && (\n <h1 style={{\n fontSize: 'clamp(2rem, 8vw, 3rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 1rem',\n lineHeight: 1.15, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n <AnimatedText text={title} />\n </h1>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.85rem', color: theme.accent, margin: '0 0 2rem',\n lineHeight: 1.6, textTransform: 'uppercase', letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n )}\n {cta_text && cta_url && (\n <a\n href={cta_url}\n onClick={() => {\n trackClick(tracking, cta_text!, cta_url!)\n onEvent?.('cta_click', { label: cta_text!, url: cta_url! })\n }}\n style={{\n display: 'inline-block', padding: '0.875rem 2rem', background: theme.fg,\n color: theme.bg, textDecoration: 'none', fontSize: '0.85rem',\n fontWeight: 500, letterSpacing: '0.08em', textTransform: 'uppercase',\n }}\n >\n {cta_text}\n </a>\n )}\n </div>\n </div>\n )\n}\n\nexport function TextSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\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={{\n fontSize: 11, fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.25em', color: `${theme.fg}40`, margin: '0 0 0.75rem',\n }}>\n {heading}\n </h2>\n )}\n {body && (\n <div style={{ color: `${theme.fg}99`, lineHeight: 1.7, fontSize: '0.9rem', fontWeight: 300, whiteSpace: 'pre-wrap' }}>\n {body}\n </div>\n )}\n </div>\n )\n}\n\nexport function ImageSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, alt, caption } = section.content as { url?: string; alt?: string; caption?: string }\n const contained = section.config?.contained !== false\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 src={url} alt={alt || ''} style={{ width: '100%', display: 'block', objectFit: 'cover' }} />\n {caption && (\n <p style={{ fontSize: '0.8rem', color: theme.muted, textAlign: 'center', marginTop: '0.75rem' }}>{caption}</p>\n )}\n </div>\n )\n}\n\nexport function VideoSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, poster } = section.content as { url?: string; poster?: string }\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 src={toEmbedUrl(url)} style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', border: 'none' }} allow=\"autoplay; fullscreen\" title=\"Video\" />\n </div>\n ) : (\n <video src={url} poster={poster} controls style={{ width: '100%', display: 'block', background: theme.surface }} />\n )}\n </div>\n )\n}\n\nexport function GallerySection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { images } = section.content as { images?: Array<{ url: string; alt?: string }> }\n const columns = (section.config?.columns as number) || 3\n const layout = (section.config?.layout as string) || 'grid'\n if (!images || images.length === 0) return null\n\n if (layout === 'collage') {\n return (\n <div style={{ padding: '0.375rem', maxWidth: 900, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.375rem' }}>\n {images.map((img, i) => (\n <div key={i} style={{\n gridColumn: i === 0 ? '1 / -1' : undefined,\n aspectRatio: i === 0 ? '16/9' : (i % 3 === 0 ? '3/4' : '1'),\n overflow: 'hidden', background: theme.surface,\n }}>\n <img src={img.url} alt={img.alt || ''} loading={i < 2 ? 'eager' : 'lazy'}\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n </div>\n ))}\n </div>\n </div>\n )\n }\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 src={img.url} alt={img.alt || ''} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport function SocialLinksSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { links } = section.content as { links?: Array<{ platform: string; url: string }> }\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 key={i} href={link.url} target=\"_blank\" rel=\"noopener noreferrer\"\n style={{ color: theme.muted, textDecoration: 'none', fontSize: '0.85rem', fontWeight: 500, textTransform: 'capitalize', letterSpacing: '0.03em' }}>\n {link.platform}\n </a>\n ))}\n </div>\n )\n}\n\nexport function DividerSection({ theme }: { theme: SectionTheme }) {\n return (\n <div style={{ padding: '1rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />\n </div>\n )\n}\n\nfunction toEmbedUrl(url: string): string {\n const ytMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]+)/)\n if (ytMatch) return `https://www.youtube.com/embed/${ytMatch[1]}`\n const vimeoMatch = url.match(/vimeo\\.com\\/(\\d+)/)\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}`\n return url\n}\n","'use client'\n\nimport { useState } from 'react'\nimport type { LandingSection } from '../../../types.js'\nimport { AnimatedText, type SectionTheme, type ClickTrackingContext, type SectionData, trackClick } from './shared.js'\n\nexport function CTASection({ section, theme, tracking, onEvent }: {\n section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const { title, subtitle, buttons } = section.content as {\n title?: string; subtitle?: string\n buttons?: Array<{ text: string; url: string; style?: 'primary' | 'outline' }>\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 {title && (\n <h2 style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.5rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.25rem',\n lineHeight: 1.2, letterSpacing: '-0.02em', color: theme.fg, textAlign: 'center',\n }}>\n {title}\n </h2>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.8rem', color: theme.accent, margin: '0 0 0.75rem',\n lineHeight: 1.6, textTransform: 'uppercase', letterSpacing: '0.15em', textAlign: 'center',\n }}>\n {subtitle}\n </p>\n )}\n {buttons.map((btn, i) => {\n const isPrimary = btn.style !== 'outline'\n return (\n <a key={i} href={btn.url}\n onClick={() => {\n trackClick(tracking, btn.text, btn.url, i)\n onEvent?.('cta_click', { label: btn.text, url: btn.url })\n }}\n style={{\n display: 'block', width: '100%', padding: '0.875rem',\n background: isPrimary ? theme.fg : 'transparent',\n color: isPrimary ? theme.bg : theme.fg,\n border: isPrimary ? 'none' : `1px solid ${theme.fg}20`,\n fontSize: '0.85rem', fontWeight: 500, textAlign: 'center',\n textDecoration: 'none', boxSizing: 'border-box',\n letterSpacing: '0.08em', textTransform: 'uppercase',\n }}\n >\n {btn.text}\n </a>\n )\n })}\n </div>\n )\n}\n\nexport function StatsSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { stats } = section.content as { stats?: Array<{ label: string; value: string }> }\n const layout = section.config?.layout as string | undefined\n if (!stats || stats.length === 0) return null\n\n if (layout === 'list') {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {stats.map((stat, i) => (\n <div key={i}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'baseline', padding: '0.625rem 0' }}>\n <span style={{ fontSize: 12, textTransform: 'uppercase', letterSpacing: '0.15em', color: `${theme.fg}66` }}>\n {stat.label}\n </span>\n <span style={{ fontSize: 14, fontWeight: 300, color: `${theme.fg}CC` }}>\n <AnimatedText text={stat.value} />\n </span>\n </div>\n {i < stats.length - 1 && <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />}\n </div>\n ))}\n </div>\n )\n }\n\n const columns = Math.min(stats.length, 4)\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, border: `1px solid ${theme.fg}0F` }}>\n {stats.map((stat, i) => (\n <div key={i} style={{\n padding: '1.25rem 0.5rem', textAlign: 'center',\n borderRight: i < stats.length - 1 ? `1px solid ${theme.fg}0F` : undefined,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay || 'inherit', fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300, lineHeight: 1, color: theme.fg,\n }}>\n <AnimatedText text={stat.value} />\n </div>\n <div style={{\n fontSize: 11, fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.25em', color: theme.accent, marginTop: '0.5rem',\n }}>\n {stat.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport function ProductCardSection({ section, data, theme, tracking }: {\n section: LandingSection; data: SectionData; theme: SectionTheme; tracking?: ClickTrackingContext\n}) {\n const product = data?.product\n const c = section.content as { name?: string; description?: string; image_url?: string; url?: string }\n const name = c.name || (product?.name as string) || ''\n const description = c.description || (product?.description as string) || ''\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 && <p style={{ fontSize: '0.9rem', color: theme.muted, margin: '0 0 1rem', lineHeight: 1.5 }}>{description}</p>}\n {url && (\n <a href={url} onClick={() => trackClick(tracking, 'View Product', url!)}\n style={{\n display: 'block', width: '100%', padding: '0.75rem', background: theme.fg,\n color: theme.bg, textAlign: 'center', textDecoration: 'none', fontSize: '0.85rem',\n fontWeight: 500, boxSizing: 'border-box', letterSpacing: '0.08em', textTransform: 'uppercase',\n }}>\n View Product\n </a>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport function COAViewerSection({ section, data, theme, onShowCOA, tracking }: {\n section: LandingSection; data: SectionData; theme: SectionTheme\n onShowCOA: () => void; tracking?: ClickTrackingContext\n}) {\n const coa = data?.coa\n const c = section.content as { button_text?: string }\n if (!coa) return null\n\n const buttonStyle: React.CSSProperties = {\n width: '100%', padding: '0.875rem', background: theme.accent, color: theme.bg,\n border: 'none', fontSize: '0.85rem', fontWeight: 500, cursor: 'pointer',\n letterSpacing: '0.08em', textTransform: 'uppercase', textAlign: 'center',\n textDecoration: 'none', display: 'block', boxSizing: 'border-box',\n }\n const buttonLabel = c.button_text || 'View Lab Results'\n\n if (coa.viewer_url) {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <a href={coa.viewer_url} target=\"_blank\" rel=\"noopener noreferrer\"\n onClick={() => trackClick(tracking, buttonLabel, coa.viewer_url!)} style={buttonStyle}>\n {buttonLabel}\n </a>\n </div>\n )\n }\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <button onClick={() => { trackClick(tracking, buttonLabel, coa.url); onShowCOA() }} style={buttonStyle}>\n {buttonLabel}\n </button>\n </div>\n )\n}\n\nexport function COAModal({ coa, theme, onClose }: {\n coa: { url: string; document_name: string }; theme: SectionTheme; 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', justifyContent: 'space-between', alignItems: 'center',\n padding: '0.75rem 1rem', borderBottom: `1px solid ${theme.fg}10`,\n }}>\n <span style={{ color: '#fff', fontWeight: 500, fontSize: '0.85rem' }}>\n {coa.document_name || 'Lab Results'}\n </span>\n <button onClick={onClose} style={{\n background: `${theme.fg}10`, border: 'none', color: '#fff',\n fontSize: '0.85rem', cursor: 'pointer', padding: '0.375rem 0.75rem',\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","'use client'\n\nimport { useState } from 'react'\nimport type { LandingSection } from '../../../types.js'\nimport type { SectionTheme, SectionData } from './shared.js'\n\nexport function LeadCaptureSection({ section, data, theme, onEvent }: {\n section: LandingSection; data: SectionData; theme: SectionTheme\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const c = section.content as {\n heading?: string; subtitle?: string; button_text?: string\n success_heading?: string; success_message?: string; coupon_code?: string\n gateway_url?: string; store_id?: string; source?: string; landing_page_slug?: string\n tags?: string[]; show_newsletter_opt_in?: boolean\n newsletter_label?: string; newsletter_tag?: string; trust_line?: string\n }\n\n const [firstName, setFirstName] = useState('')\n const [email, setEmail] = useState('')\n const [newsletterOptIn, setNewsletterOptIn] = useState(false)\n const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle')\n const [errorMsg, setErrorMsg] = useState('')\n const [serverMessage, setServerMessage] = useState<{ heading: string; message: string } | null>(null)\n\n const gatewayUrl = c.gateway_url || data.gatewayUrl || 'https://whale-gateway.fly.dev'\n const storeId = c.store_id || data.store?.id\n const slug = c.landing_page_slug || (data.landing_page as { slug?: string } | null)?.slug\n\n const heading = c.heading || 'get 10% off your first visit.'\n const subtitle = c.subtitle || 'drop your email and we will send you the code.'\n const buttonText = c.button_text || 'Claim My Discount'\n const successHeading = c.success_heading || 'You\\u2019re in!'\n const successMessage = c.success_message || 'Check your inbox for the discount code.'\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!email || !storeId) return\n\n setStatus('loading')\n setErrorMsg('')\n\n const urlParams = typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : null\n\n try {\n const res = await fetch(`${gatewayUrl}/v1/stores/${storeId}/storefront/leads`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email,\n first_name: firstName || undefined,\n source: c.source || 'landing_page',\n landing_page_slug: slug || undefined,\n newsletter_opt_in: newsletterOptIn || undefined,\n tags: (() => {\n const t = [...(c.tags || [])]\n if (newsletterOptIn) t.push(c.newsletter_tag || 'newsletter-subscriber')\n return t.length > 0 ? t : undefined\n })(),\n visitor_id: data.analyticsContext?.visitorId || undefined,\n session_id: data.analyticsContext?.sessionId || undefined,\n utm_source: urlParams?.get('utm_source') || undefined,\n utm_medium: urlParams?.get('utm_medium') || undefined,\n utm_campaign: urlParams?.get('utm_campaign') || undefined,\n utm_content: urlParams?.get('utm_content') || undefined,\n }),\n })\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error((body as { error?: { message?: string } })?.error?.message || 'Something went wrong. Please try again.')\n }\n\n const body = await res.json().catch(() => ({})) as { is_new?: boolean; message?: string }\n\n // Use server response to show contextual success message\n if (body.is_new === false) {\n setServerMessage({\n heading: 'welcome back!',\n message: body.message || 'your rewards are already loaded.',\n })\n }\n\n setStatus('success')\n onEvent?.('lead', { email, first_name: firstName || undefined, source: c.source || 'landing_page', landing_page_slug: slug || undefined })\n } catch (err) {\n setErrorMsg(err instanceof Error ? err.message : 'Something went wrong. Please try again.')\n setStatus('error')\n }\n }\n\n const inputStyle: React.CSSProperties = {\n flex: 1, minWidth: 0, padding: '0.875rem 1rem', background: theme.surface,\n border: `1px solid ${theme.fg}15`, color: theme.fg, fontSize: '0.95rem',\n fontWeight: 300, outline: 'none', boxSizing: 'border-box', fontFamily: 'inherit',\n transition: 'border-color 0.2s',\n }\n\n if (status === 'success') return <SuccessState theme={theme} heading={serverMessage?.heading || successHeading} message={serverMessage?.message || successMessage} couponCode={c.coupon_code} />\n\n return (\n <div style={{ padding: '3.5rem 1.5rem', maxWidth: 560, margin: '0 auto' }}>\n <style>{`@keyframes lc-spin { to { transform: rotate(360deg) } }`}</style>\n <div style={{ background: theme.surface, border: `1px solid ${theme.fg}12`, padding: 'clamp(2rem, 6vw, 3rem)' }}>\n <div style={{ textAlign: 'center', marginBottom: 'clamp(1.5rem, 4vw, 2rem)' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2.25rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.5rem',\n lineHeight: 1.15, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n {heading}\n </h2>\n <p style={{\n fontSize: '0.85rem', color: theme.accent, margin: 0,\n lineHeight: 1.6, textTransform: 'uppercase', letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n </div>\n\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <div style={{ display: 'flex', gap: '0.75rem', flexWrap: 'wrap' }}>\n <input type=\"text\" placeholder=\"First name\" value={firstName} onChange={(e) => setFirstName(e.target.value)} style={inputStyle} />\n <input type=\"email\" placeholder=\"Email address\" value={email} onChange={(e) => setEmail(e.target.value)} required style={inputStyle} />\n </div>\n\n {c.show_newsletter_opt_in !== false && (\n <label style={{\n display: 'flex', alignItems: 'center', gap: '0.5rem', cursor: 'pointer',\n fontSize: '0.8rem', color: `${theme.fg}90`, fontWeight: 300, lineHeight: 1.4,\n }}>\n <input type=\"checkbox\" checked={newsletterOptIn} onChange={(e) => setNewsletterOptIn(e.target.checked)}\n style={{ width: 16, height: 16, accentColor: theme.accent, cursor: 'pointer', flexShrink: 0 }} />\n {c.newsletter_label || 'Also sign me up for the newsletter \\u2014 new drops, deals, and company news.'}\n </label>\n )}\n\n {status === 'error' && errorMsg && (\n <p style={{ fontSize: '0.8rem', color: '#e55', margin: 0, fontWeight: 400 }}>{errorMsg}</p>\n )}\n\n <button type=\"submit\" disabled={status === 'loading'} style={{\n width: '100%', padding: '0.875rem', background: theme.fg, color: theme.bg,\n border: 'none', fontSize: '0.85rem', fontWeight: 500,\n cursor: status === 'loading' ? 'wait' : 'pointer',\n letterSpacing: '0.08em', textTransform: 'uppercase', fontFamily: 'inherit',\n display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem',\n opacity: status === 'loading' ? 0.7 : 1, transition: 'opacity 0.2s',\n }}>\n {status === 'loading' && (\n <span style={{\n display: 'inline-block', width: 16, height: 16,\n border: `2px solid ${theme.bg}40`, borderTopColor: theme.bg,\n borderRadius: '50%', animation: 'lc-spin 0.8s linear infinite',\n }} />\n )}\n {buttonText}\n </button>\n </form>\n </div>\n </div>\n )\n}\n\nfunction SuccessState({ theme, heading, message, couponCode }: {\n theme: SectionTheme; heading: string; message: string; couponCode?: string\n}) {\n return (\n <div style={{ padding: '3.5rem 1.5rem', maxWidth: 560, margin: '0 auto' }}>\n <div style={{ background: theme.surface, border: `1px solid ${theme.fg}12`, padding: 'clamp(2rem, 6vw, 3rem)', textAlign: 'center' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.75rem',\n lineHeight: 1.2, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n {heading}\n </h2>\n <p style={{ fontSize: '0.9rem', color: `${theme.fg}99`, margin: '0 0 1.5rem', lineHeight: 1.6, fontWeight: 300 }}>\n {message}\n </p>\n {couponCode && (\n <div style={{\n display: 'inline-block', padding: '0.75rem 2rem', background: `${theme.fg}08`,\n border: `1px dashed ${theme.fg}30`, fontSize: 'clamp(1.25rem, 4vw, 1.75rem)',\n fontWeight: 500, fontFamily: 'monospace', letterSpacing: '0.12em', color: theme.accent,\n }}>\n {couponCode}\n </div>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useState, useEffect, useRef } from 'react'\nimport type { LandingSection } from '../../types.js'\nimport { HeroSection, TextSection, ImageSection, VideoSection, GallerySection, SocialLinksSection, DividerSection } from './sections/content-sections.js'\nimport { CTASection, StatsSection, ProductCardSection, COAViewerSection, COAModal } from './sections/interactive-sections.js'\nimport { LeadCaptureSection } from './sections/lead-capture-section.js'\n\n// Re-export types for external consumers\nexport type { SectionTheme, ClickTrackingContext, SectionData } from './sections/shared.js'\n\n/**\n * Routes a section to its renderer and tracks section visibility via IntersectionObserver.\n * Each section is wrapped in a div with data attributes for analytics targeting.\n */\nexport function SectionRenderer({\n section,\n data,\n theme,\n tracking,\n onEvent,\n}: {\n section: LandingSection\n data: import('./sections/shared.js').SectionData\n theme: import('./sections/shared.js').SectionTheme\n tracking?: import('./sections/shared.js').ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const [showCOA, setShowCOA] = useState(false)\n\n const el = (() => {\n switch (section.type) {\n case 'hero': return <HeroSection section={section} theme={theme} tracking={tracking} onEvent={onEvent} />\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} tracking={tracking} onEvent={onEvent} />\n case 'stats': return <StatsSection section={section} theme={theme} />\n case 'product_card': return <ProductCardSection section={section} data={data} theme={theme} tracking={tracking} />\n case 'coa_viewer': return <COAViewerSection section={section} data={data} theme={theme} onShowCOA={() => setShowCOA(true)} tracking={tracking} />\n case 'social_links': return <SocialLinksSection section={section} theme={theme} />\n case 'lead_capture': return <LeadCaptureSection section={section} data={data} theme={theme} onEvent={onEvent} />\n case 'divider': return <DividerSection theme={theme} />\n default: return null\n }\n })()\n\n const sectionRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = sectionRef.current\n if (!el || typeof IntersectionObserver === 'undefined') return\n const obs = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting) {\n onEvent?.('section_view', { section_id: section.id, section_type: section.type })\n obs.disconnect()\n }\n },\n { threshold: 0.5 },\n )\n obs.observe(el)\n return () => obs.disconnect()\n }, [section.id, section.type, onEvent])\n\n return (\n <div ref={sectionRef} data-section-id={section.id} data-section-type={section.type}>\n {el}\n {showCOA && data?.coa && <COAModal coa={data.coa} theme={theme} onClose={() => setShowCOA(false)} />}\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport type { QRLandingData, LandingSection, LandingPageConfig } from '../../types.js'\nimport { SectionRenderer, type SectionTheme, type ClickTrackingContext } from './section-renderer.js'\n\nexport interface QRLandingPageProps {\n code: string\n gatewayUrl?: string\n /** Override rendering for any section type */\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => 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 renderSection,\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\n // If a landing page template is linked, use its sections.\n // Otherwise, auto-generate sections from product/COA data.\n const lp = data.landing_page\n const sections = lp?.sections ?? buildDefaultSections(data)\n\n const theme = extractTheme(data, lp)\n const fontFamily = lp?.font_family\n || (data.store?.theme?.fontDisplay as string)\n || 'system-ui, -apple-system, sans-serif'\n\n const logoUrl = data.qr_code.logo_url || data.store?.logo_url\n const storeName = data.store?.name\n\n const sorted = [...sections].sort((a, b) => a.order - b.order)\n const tracking: ClickTrackingContext = { gatewayUrl, code }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\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 src={logoUrl} alt={storeName || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n\n {/* Sections */}\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n )\n\n if (renderSection) {\n return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n }\n\n return <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n })}\n\n {/* Footer */}\n {storeName && (\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 {storeName}{data.store?.tagline ? ` — ${data.store.tagline}` : ''}\n </p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── Theme Extraction ─────────────────────────────────────────────────────────\n\nfunction extractTheme(data: QRLandingData, lp: LandingPageConfig | null): SectionTheme {\n const t = data.store?.theme as Record<string, unknown> | null | undefined\n const qrLp = data.qr_code.landing_page\n return {\n bg: lp?.background_color || qrLp.background_color || (t?.background as string) || '#050505',\n fg: lp?.text_color || qrLp.text_color || (t?.foreground as string) || '#fafafa',\n accent: lp?.accent_color || (t?.accent as string) || '#E8E2D9',\n surface: (t?.surface as string) || '#111',\n muted: (t?.muted as string) || '#888',\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 }\n}\n\n// ─── Default Sections Builder ─────────────────────────────────────────────────\n// When no landing page template is linked, generate sections from product data.\n\nfunction buildDefaultSections(data: QRLandingData): LandingSection[] {\n const { product, coa, qr_code: qr } = data\n const cf = product?.custom_fields as Record<string, unknown> | null | undefined\n const sections: LandingSection[] = []\n let order = 0\n\n const productName = qr.landing_page.title || (product?.name as string) || qr.name\n const productImage = qr.landing_page.image_url || (product?.featured_image as string) || null\n const description = (product?.description as string) || ''\n const categoryName = (product?.category_name as string) ?? null\n const strainType = toStr(cf?.strain_type)\n const tagline = toStr(cf?.tagline)\n\n // Hero — product image with name and category/strain subtitle (no CTA here)\n if (productImage) {\n sections.push({\n id: 'auto-hero',\n type: 'hero',\n order: order++,\n content: {\n title: productName,\n subtitle: [categoryName, strainType].filter(Boolean).join(' · '),\n background_image: productImage,\n },\n })\n } else {\n sections.push({\n id: 'auto-header',\n type: 'text',\n order: order++,\n content: {\n heading: productName,\n body: [categoryName, strainType].filter(Boolean).join(' · ') || undefined,\n },\n config: { align: 'center' },\n })\n }\n\n // Tagline\n if (tagline) {\n sections.push({\n id: 'auto-tagline',\n type: 'text',\n order: order++,\n content: { body: tagline },\n config: { align: 'center' },\n })\n }\n\n // Detect product type from category or custom fields\n const totalMg = toNum(cf?.total_mg_per_package ?? cf?.total_mg)\n const mgPerPiece = toNum(cf?.mg_per_piece)\n const piecesPerPkg = toNum(cf?.pieces_per_package)\n const isEdible = totalMg != null || mgPerPiece != null || piecesPerPkg != null\n\n // Cannabinoid / dosage stats — layout adapts to product type\n const thca = toNum(cf?.thca_percentage)\n const thc = toNum(cf?.d9_percentage)\n const cbd = toNum(cf?.cbd_total)\n const stats: Array<{ label: string; value: string }> = []\n\n if (isEdible) {\n // Edibles: lead with dosage info (mg is what customers care about)\n if (totalMg != null) stats.push({ label: 'Total MG', value: `${fmtMg(totalMg)}` })\n if (mgPerPiece != null) stats.push({ label: 'Per Piece', value: `${fmtMg(mgPerPiece)}mg` })\n if (piecesPerPkg != null) stats.push({ label: 'Pieces', value: `${piecesPerPkg}` })\n // Still show cannabinoids if present (secondary)\n if (thc != null) stats.push({ label: 'Δ9 THC', value: `${thc.toFixed(thc >= 1 ? 1 : 2)}%` })\n } else {\n // Flower/concentrates: lead with cannabinoid percentages\n if (thca != null) stats.push({ label: 'THCa', value: `${thca.toFixed(thca >= 1 ? 1 : 2)}%` })\n if (thc != null) stats.push({ label: 'Δ9 THC', value: `${thc.toFixed(thc >= 1 ? 1 : 2)}%` })\n if (cbd != null) stats.push({ label: 'CBD', value: `${cbd.toFixed(cbd >= 1 ? 1 : 2)}%` })\n }\n\n if (stats.length > 0) {\n sections.push({\n id: 'auto-stats',\n type: 'stats',\n order: order++,\n content: { stats },\n })\n }\n\n // Edible serving info (if not already covered in stats)\n if (isEdible) {\n const servingDetails: Array<{ label: string; value: string }> = []\n const servingSize = toStr(cf?.serving_size)\n const ingredients = toStr(cf?.ingredients)\n const allergens = toStr(cf?.allergens)\n if (servingSize) servingDetails.push({ label: 'Serving Size', value: servingSize })\n if (ingredients) servingDetails.push({ label: 'Ingredients', value: ingredients })\n if (allergens) servingDetails.push({ label: 'Allergens', value: allergens })\n if (servingDetails.length > 0) {\n sections.push({\n id: 'auto-serving',\n type: 'stats',\n order: order++,\n content: { stats: servingDetails },\n config: { layout: 'list' },\n })\n }\n }\n\n // Product details — genetics, terpenes, effects\n const profileDetails: Array<{ label: string; value: string }> = []\n const genetics = toStr(cf?.genetics)\n const terpenes = toStr(cf?.terpenes)\n const effects = toStr(cf?.effects)\n const flavorProfile = toStr(cf?.flavor_profile)\n const bestFor = toStr(cf?.best_for)\n\n if (genetics) profileDetails.push({ label: 'Genetics', value: genetics })\n if (terpenes) profileDetails.push({ label: 'Terpenes', value: terpenes })\n if (effects) profileDetails.push({ label: 'Effects', value: effects })\n if (flavorProfile) profileDetails.push({ label: 'Flavor', value: flavorProfile })\n if (bestFor) profileDetails.push({ label: 'Best For', value: bestFor })\n\n if (profileDetails.length > 0) {\n sections.push({\n id: 'auto-profile',\n type: 'stats',\n order: order++,\n content: { stats: profileDetails },\n config: { layout: 'list' },\n })\n }\n\n // Description\n if (description) {\n sections.push({\n id: 'auto-description',\n type: 'text',\n order: order++,\n content: { heading: 'About', body: description },\n })\n }\n\n // Lab results — single COA viewer button (the only \"View Lab Results\" on the page)\n if (coa) {\n sections.push({\n id: 'auto-coa',\n type: 'coa_viewer',\n order: order++,\n content: { button_text: 'View Lab Results' },\n })\n }\n\n // Batch & testing info — below the COA button for reference\n const labDetails: Array<{ label: string; value: string }> = []\n const batchNumber = toStr(cf?.batch_number)\n const dateTested = toStr(cf?.date_tested)\n\n if (batchNumber) labDetails.push({ label: 'Batch', value: batchNumber })\n if (dateTested) labDetails.push({ label: 'Tested', value: formatDate(dateTested) })\n\n if (labDetails.length > 0) {\n sections.push({\n id: 'auto-lab-info',\n type: 'stats',\n order: order++,\n content: { stats: labDetails },\n config: { layout: 'list' },\n })\n }\n\n // Shop link — only if product has a slug (link to storefront product page, not COA)\n const productSlug = product?.slug as string | undefined\n if (productSlug) {\n const storeDomain = data.store?.name === 'Flora Distro' ? 'floradistro.com' : null\n if (storeDomain) {\n sections.push({\n id: 'auto-shop',\n type: 'cta',\n order: order++,\n content: {\n buttons: [{ text: 'Shop This Product', url: `https://${storeDomain}/shop/${productSlug}`, style: 'outline' as const }],\n },\n })\n }\n }\n\n return sections\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\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 fmtMg(mg: number): string {\n return mg === Math.floor(mg) ? `${mg}mg` : `${mg.toFixed(1)}mg`\n}\n\nfunction toStr(v: unknown): string | null {\n if (v == null || v === '') return null\n return String(v)\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 { useCallback, useEffect, useRef, useState } from 'react'\nimport type { LandingPageRenderData, LandingSection } from '../../types.js'\nimport { SectionRenderer, type SectionTheme } from './section-renderer.js'\n\nexport interface LandingPageProps {\n slug: string\n gatewayUrl?: string\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n onDataLoaded?: (data: LandingPageRenderData) => void\n onError?: (error: Error) => void\n onEvent?: (event: string, data: Record<string, unknown>) => void\n analyticsContext?: { visitorId?: string; sessionId?: string }\n enableAnalytics?: boolean\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\n/** Read pre-injected data synchronously to avoid flash of loading state */\nfunction getInlinedData(): LandingPageRenderData | null {\n if (typeof window !== 'undefined' && (window as any).__LANDING_DATA__) {\n return (window as any).__LANDING_DATA__ as LandingPageRenderData\n }\n return null\n}\n\nexport function LandingPage({\n slug,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n onEvent,\n analyticsContext,\n enableAnalytics = true,\n}: LandingPageProps) {\n const inlined = useRef(getInlinedData()).current\n const [state, setState] = useState<LoadState>(inlined ? 'ready' : 'loading')\n const [data, setData] = useState<LandingPageRenderData | null>(inlined)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!slug) return\n\n // Data already loaded from server-inlined __LANDING_DATA__\n if (data) {\n onDataLoaded?.(data)\n return\n }\n\n let cancelled = false\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/l/${encodeURIComponent(slug)}`)\n if (cancelled) return\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: LandingPageRenderData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n } catch (err) {\n if (cancelled) return\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\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 <StateScreen title=\"\" loading />\n if (state === 'not_found') return <StateScreen title=\"Page Not Found\" subtitle=\"This page does not exist or has been removed.\" />\n if (state === 'expired') return <StateScreen title=\"Page Expired\" subtitle=\"This page is no longer active.\" />\n if (state === 'error') return <StateScreen title=\"Something Went Wrong\" subtitle={errorMsg || 'Please try again later.'} />\n if (!data) return null\n\n return (\n <PageLayout data={data} gatewayUrl={gatewayUrl} renderSection={renderSection}\n onEvent={onEvent} analyticsContext={analyticsContext} enableAnalytics={enableAnalytics} />\n )\n}\n\n// ─── Page Layout ──────────────────────────────────────────────────────────────\n\nfunction isSectionVisible(section: LandingSection, urlParams: URLSearchParams): boolean {\n const vis = section.config?.visibility as { params?: Record<string, string[]> } | undefined\n if (!vis?.params) return true\n for (const [key, allowed] of Object.entries(vis.params)) {\n const val = urlParams.get(key)\n if (!val || !allowed.includes(val)) return false\n }\n return true\n}\n\nfunction PageLayout({\n data, gatewayUrl, renderSection, onEvent, analyticsContext, enableAnalytics,\n}: {\n data: LandingPageRenderData; gatewayUrl: string\n renderSection?: LandingPageProps['renderSection']\n onEvent?: (event: string, data: Record<string, unknown>) => void\n analyticsContext?: LandingPageProps['analyticsContext']\n enableAnalytics?: boolean\n}) {\n const { landing_page: lp, store } = data\n const trackerRef = useRef<any>(null)\n\n // ─── Analytics bootstrap ───\n useEffect(() => {\n if (!enableAnalytics || typeof window === 'undefined') return\n const config = (window as any).__LANDING_ANALYTICS__ as {\n gatewayUrl?: string; slug?: string; landingPageId?: string; campaignId?: string; storeId?: string\n } | undefined\n if (!config?.slug) return\n\n let visitorId = localStorage.getItem('wt_vid') || ''\n if (!visitorId) { visitorId = crypto.randomUUID(); localStorage.setItem('wt_vid', visitorId) }\n let sessionId = sessionStorage.getItem('wt_sid') || ''\n if (!sessionId) { sessionId = crypto.randomUUID(); sessionStorage.setItem('wt_sid', sessionId) }\n\n import('../../behavioral/tracker.js').then(({ BehavioralTracker }) => {\n const gwUrl = config.gatewayUrl || gatewayUrl\n const slug = config.slug!\n const utmParams = new URLSearchParams(window.location.search)\n\n const tracker = new BehavioralTracker({\n sessionId, visitorId,\n sendBatch: async (batch) => {\n const events = batch.events.map((e) => ({\n event_type: e.data_type, event_data: e.data,\n session_id: batch.session_id, visitor_id: batch.visitor_id,\n campaign_id: config.campaignId || utmParams.get('utm_campaign_id') || undefined,\n utm_source: utmParams.get('utm_source') || undefined,\n utm_medium: utmParams.get('utm_medium') || undefined,\n utm_campaign: utmParams.get('utm_campaign') || undefined,\n }))\n sendEvents(gwUrl, slug, events)\n },\n })\n\n tracker.setPageContext(window.location.href, window.location.pathname)\n tracker.start()\n trackerRef.current = tracker\n\n sendEvents(gwUrl, slug, [{\n event_type: 'page_view',\n event_data: { referrer: document.referrer, url: window.location.href },\n session_id: sessionId, visitor_id: visitorId,\n campaign_id: config.campaignId || undefined,\n }])\n }).catch(() => {})\n\n return () => { trackerRef.current?.stop(); trackerRef.current = null }\n }, [enableAnalytics, gatewayUrl])\n\n // ─── Event handler that sends section events to the analytics endpoint ───\n const handleEvent = useCallback((event: string, eventData: Record<string, unknown>) => {\n onEvent?.(event, eventData)\n if (!enableAnalytics || typeof window === 'undefined') return\n const config = (window as any).__LANDING_ANALYTICS__\n if (!config?.slug) return\n sendEvents(config.gatewayUrl || gatewayUrl, config.slug, [{\n event_type: event, event_data: eventData,\n session_id: sessionStorage.getItem('wt_sid') || undefined,\n visitor_id: localStorage.getItem('wt_vid') || undefined,\n campaign_id: config.campaignId || undefined,\n }])\n }, [onEvent, enableAnalytics, gatewayUrl])\n\n const theme: SectionTheme = {\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 fontDisplay: (store?.theme?.fontDisplay as string) || undefined,\n fontBody: (store?.theme?.fontBody as string) || undefined,\n }\n\n const fontFamily = lp.font_family || theme.fontDisplay || 'system-ui, -apple-system, sans-serif'\n const logoUrl = store?.logo_url\n const urlParams = typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : new URLSearchParams()\n const sorted = [...lp.sections].sort((a, b) => a.order - b.order).filter((s) => isSectionVisible(s, urlParams))\n const sectionData = { ...data, gatewayUrl, landing_page: { slug: lp.slug }, analyticsContext }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {lp.custom_css && <style>{lp.custom_css}</style>}\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img src={logoUrl} alt={store?.name || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n {sorted.map((section) => {\n const defaultRenderer = () => <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} onEvent={handleEvent} />\n if (renderSection) return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n return <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} onEvent={handleEvent} />\n })}\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 }}>Powered by {store.name}</p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction sendEvents(gwUrl: string, slug: string, events: Record<string, unknown>[]) {\n const body = JSON.stringify({ events })\n const url = `${gwUrl}/l/${encodeURIComponent(slug)}/events`\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(url, new Blob([body], { type: 'application/json' }))\n } else {\n fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body, keepalive: true }).catch(() => {})\n }\n}\n\n// ─── State Screens ───────────────────────────────────────────────────────────\n\nconst screenStyle: React.CSSProperties = {\n minHeight: '100dvh', display: 'flex', justifyContent: 'center', alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif', background: '#050505',\n color: '#fafafa', textAlign: 'center', padding: '2rem',\n}\n\nfunction StateScreen({ title, subtitle, loading }: { title: string; subtitle?: string; loading?: boolean }) {\n return (\n <div style={screenStyle}>\n <div>\n {loading && (\n <>\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 </>\n )}\n {title && <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>{title}</h1>}\n {subtitle && <p style={{ color: '#888' }}>{subtitle}</p>}\n </div>\n </div>\n )\n}\n"]}