@neowhale/storefront 0.2.49 → 0.2.50

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/sections/conversion-sections.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","Fragment","body","el","BehavioralTracker"],"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 CollageHeroSection({ section, theme, tracking, onEvent }: {\n section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const c = section.content as {\n title?: string; subtitle?: string; cta_text?: string; cta_url?: string\n images?: Array<{ url: string; alt?: string }>\n overlay_opacity?: number\n }\n const images = c.images || []\n if (images.length === 0) return null\n const opacity = c.overlay_opacity ?? 0.45\n\n const count = Math.min(images.length, 5)\n\n // Full-viewport mosaic — aspect-ratio cells, no max-height cropping.\n // Grid: large left (spans 2 rows), 2 stacked right, 2 wide bottom.\n const imgStyle: React.CSSProperties = {\n width: '100%', height: '100%', objectFit: 'cover', objectPosition: 'center top',\n display: 'block',\n }\n\n return (\n <div style={{ width: '100%', overflow: 'hidden', position: 'relative' }}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: count >= 3 ? '3fr 2fr' : '1fr',\n gridTemplateRows: count >= 3 ? '1fr 1fr' : 'auto',\n gap: '2px',\n height: '100vh',\n maxHeight: '900px',\n }}>\n {/* Main image — left side, spans full height */}\n {count > 0 && (\n <div style={{\n gridRow: count >= 3 ? '1 / -1' : undefined,\n overflow: 'hidden', background: theme.surface,\n }}>\n <img src={images[0].url} alt={images[0].alt || ''} loading=\"eager\" style={imgStyle} />\n </div>\n )}\n {/* Right top */}\n {count >= 2 && (\n <div style={{ overflow: 'hidden', background: theme.surface }}>\n <img src={images[1].url} alt={images[1].alt || ''} loading=\"eager\" style={imgStyle} />\n </div>\n )}\n {/* Right bottom */}\n {count >= 3 && (\n <div style={{\n overflow: 'hidden', background: theme.surface,\n ...(count >= 4 ? { display: 'grid', gridTemplateColumns: count >= 5 ? '1fr 1fr' : count >= 4 ? '1fr 1fr' : '1fr', gap: '2px' } : {}),\n }}>\n {count < 4 ? (\n <img src={images[2].url} alt={images[2].alt || ''} loading=\"lazy\" style={imgStyle} />\n ) : (\n <>\n <div style={{ overflow: 'hidden' }}>\n <img src={images[2].url} alt={images[2].alt || ''} loading=\"lazy\" style={imgStyle} />\n </div>\n {count >= 4 && (\n <div style={{ overflow: 'hidden' }}>\n <img src={images[3].url} alt={images[3].alt || ''} loading=\"lazy\" style={imgStyle} />\n </div>\n )}\n </>\n )}\n </div>\n )}\n </div>\n {/* Text overlay */}\n <div style={{\n position: 'absolute', inset: 0,\n background: 'linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.15) 35%, transparent 55%)',\n pointerEvents: 'none',\n }} />\n <div style={{\n position: 'absolute', bottom: 0, left: 0, right: 0,\n padding: 'clamp(1.25rem, 4vw, 2.5rem)',\n zIndex: 1,\n }}>\n {c.title && (\n <h1 style={{\n fontSize: 'clamp(1.75rem, 7vw, 3rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: 0, lineHeight: 1.1, letterSpacing: '-0.03em', color: theme.fg,\n }}>\n <AnimatedText text={c.title} />\n </h1>\n )}\n {c.subtitle && (\n <p style={{\n fontSize: 'clamp(0.65rem, 1.8vw, 0.85rem)', color: `${theme.fg}BB`,\n margin: '0.5rem 0 0', letterSpacing: '0.12em', textTransform: 'uppercase',\n fontWeight: 400,\n }}>\n {c.subtitle}\n </p>\n )}\n </div>\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 { AnimatedText, type SectionTheme } from './shared.js'\n\n// ─── Testimonials ────────────────────────────────────────────────────────────\n\nexport function TestimonialsSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string; subtitle?: string\n rating?: number; review_count?: number\n reviews?: Array<{ name: string; text: string; rating?: number; location?: string }>\n }\n const layout = (section.config?.layout as string) || 'grid'\n const reviews = c.reviews || []\n if (reviews.length === 0) return null\n\n const overallRating = c.rating ?? 5\n const reviewCount = c.review_count ?? reviews.length\n\n return (\n <div style={{ padding: '3rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {/* Aggregate rating */}\n <div style={{ textAlign: 'center', marginBottom: '2rem' }}>\n {c.heading && (\n <h2 style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.75rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.75rem',\n lineHeight: 1.2, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n <AnimatedText text={c.heading} />\n </h2>\n )}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <Stars rating={overallRating} color={theme.accent} size={18} />\n <span style={{ fontSize: '1.1rem', fontWeight: 500, color: theme.fg }}>\n <AnimatedText text={overallRating.toFixed(1)} />\n </span>\n </div>\n {c.subtitle ? (\n <p style={{ fontSize: '0.8rem', color: theme.muted, margin: 0, letterSpacing: '0.1em', textTransform: 'uppercase' }}>\n {c.subtitle}\n </p>\n ) : (\n <p style={{ fontSize: '0.8rem', color: theme.muted, margin: 0, letterSpacing: '0.1em', textTransform: 'uppercase' }}>\n from <AnimatedText text={String(reviewCount)} /> reviews\n </p>\n )}\n </div>\n\n {/* Review cards */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: layout === 'list' ? '1fr' : `repeat(${Math.min(reviews.length, 2)}, 1fr)`,\n gap: '0.75rem',\n }}>\n {reviews.map((review, i) => (\n <div key={i} style={{\n background: theme.surface, border: `1px solid ${theme.fg}08`,\n padding: '1.25rem',\n }}>\n <Stars rating={review.rating ?? 5} color={theme.accent} size={14} />\n <p style={{\n fontSize: '0.88rem', color: `${theme.fg}CC`, margin: '0.75rem 0',\n lineHeight: 1.6, fontWeight: 300, fontStyle: 'italic',\n }}>\n \"{review.text}\"\n </p>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '0.375rem' }}>\n <span style={{ fontSize: '0.8rem', fontWeight: 500, color: theme.fg }}>\n {review.name}\n </span>\n {review.location && (\n <span style={{ fontSize: '0.7rem', color: theme.muted }}>\n {review.location}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction Stars({ rating, color, size }: { rating: number; color: string; size: number }) {\n return (\n <span style={{ display: 'inline-flex', gap: '1px' }}>\n {[1, 2, 3, 4, 5].map((n) => (\n <svg key={n} width={size} height={size} viewBox=\"0 0 20 20\" fill={n <= Math.round(rating) ? color : 'none'}\n stroke={color} strokeWidth={1.5}>\n <path d=\"M10 1.5l2.47 5.01 5.53.8-4 3.9.94 5.5L10 14.26 5.06 16.7l.94-5.5-4-3.9 5.53-.8z\" />\n </svg>\n ))}\n </span>\n )\n}\n\n// ─── Value Stack ──────────────────────────────────────────────────────────────\n\nexport function ValueStackSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string; subtitle?: string\n items?: Array<{ text: string; value?: string }>\n total_value?: string; offer_label?: string\n }\n const items = c.items || []\n if (items.length === 0) return null\n\n return (\n <div style={{ padding: '3rem 1.5rem', maxWidth: 520, margin: '0 auto' }}>\n <div style={{ background: theme.surface, border: `1px solid ${theme.fg}08`, padding: 'clamp(1.5rem, 5vw, 2.5rem)' }}>\n {c.heading && (\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 {c.heading}\n </h2>\n )}\n {c.subtitle && (\n <p style={{\n fontSize: '0.8rem', color: theme.accent, margin: '0 0 1.5rem',\n letterSpacing: '0.15em', textTransform: 'uppercase', textAlign: 'center',\n }}>\n {c.subtitle}\n </p>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.625rem' }}>\n {items.map((item, i) => (\n <div key={i} style={{\n display: 'flex', alignItems: 'flex-start', gap: '0.75rem',\n padding: '0.5rem 0',\n borderBottom: i < items.length - 1 ? `1px solid ${theme.fg}08` : undefined,\n }}>\n <span style={{ color: theme.accent, fontSize: '1rem', lineHeight: 1, flexShrink: 0, marginTop: '0.1rem' }}>\n &#10003;\n </span>\n <span style={{ flex: 1, fontSize: '0.9rem', color: `${theme.fg}CC`, fontWeight: 300, lineHeight: 1.5 }}>\n {item.text}\n </span>\n {item.value && (\n <span style={{\n fontSize: '0.8rem', color: theme.muted, fontWeight: 400,\n textDecoration: 'line-through', flexShrink: 0,\n }}>\n {item.value}\n </span>\n )}\n </div>\n ))}\n </div>\n\n {(c.total_value || c.offer_label) && (\n <div style={{\n marginTop: '1.5rem', padding: '1rem', background: `${theme.accent}0A`,\n border: `1px dashed ${theme.accent}30`, textAlign: 'center',\n }}>\n {c.total_value && (\n <div style={{ fontSize: '0.75rem', color: theme.muted, marginBottom: '0.25rem', letterSpacing: '0.1em', textTransform: 'uppercase' }}>\n Total value: <span style={{ textDecoration: 'line-through' }}>{c.total_value}</span>\n </div>\n )}\n <div style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.5rem)', fontWeight: 500,\n fontFamily: theme.fontDisplay || 'inherit', color: theme.accent,\n }}>\n {c.offer_label || 'Free'}\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ─── FAQ / Objection Handling ─────────────────────────────────────────────────\n\nexport function FAQSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string\n items?: Array<{ question: string; answer: string }>\n }\n const items = c.items || []\n if (items.length === 0) return null\n\n return (\n <div style={{ padding: '2.5rem 1.5rem', maxWidth: 580, margin: '0 auto' }}>\n {c.heading && (\n <h2 style={{\n fontSize: 11, fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.25em', color: `${theme.fg}40`, margin: '0 0 1.25rem',\n textAlign: 'center',\n }}>\n {c.heading}\n </h2>\n )}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\n {items.map((item, i) => (\n <FAQItem key={i} question={item.question} answer={item.answer} theme={theme} />\n ))}\n </div>\n </div>\n )\n}\n\nfunction FAQItem({ question, answer, theme }: {\n question: string; answer: string; theme: SectionTheme\n}) {\n const [open, setOpen] = useState(false)\n\n return (\n <div style={{ borderBottom: `1px solid ${theme.fg}0A` }}>\n <button\n onClick={() => setOpen(!open)}\n style={{\n width: '100%', display: 'flex', justifyContent: 'space-between', alignItems: 'center',\n padding: '1rem 0', background: 'none', border: 'none', cursor: 'pointer',\n color: theme.fg, fontFamily: 'inherit', textAlign: 'left',\n }}\n >\n <span style={{ fontSize: '0.9rem', fontWeight: 400, lineHeight: 1.4 }}>\n {question}\n </span>\n <span style={{\n fontSize: '1.25rem', fontWeight: 200, color: theme.muted,\n transition: 'transform 0.2s', transform: open ? 'rotate(45deg)' : 'none',\n flexShrink: 0, marginLeft: '1rem',\n }}>\n +\n </span>\n </button>\n <div style={{\n maxHeight: open ? '20rem' : 0, overflow: 'hidden',\n transition: 'max-height 0.3s ease',\n }}>\n <p style={{\n fontSize: '0.85rem', color: `${theme.fg}88`, lineHeight: 1.7,\n fontWeight: 300, margin: 0, padding: '0 0 1rem',\n }}>\n {answer}\n </p>\n </div>\n </div>\n )\n}\n\n// ─── Trust Badges ────────────────────────────────────────────────────────────\n\nexport function TrustBadgesSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n badges?: Array<{ icon?: string; label: string }>\n }\n const badges = c.badges || []\n if (badges.length === 0) return null\n\n return (\n <div style={{\n padding: '1.25rem 1.5rem',\n borderTop: `1px solid ${theme.fg}08`, borderBottom: `1px solid ${theme.fg}08`,\n }}>\n <div style={{\n display: 'flex', justifyContent: 'center', alignItems: 'center',\n gap: 'clamp(1rem, 4vw, 2.5rem)', flexWrap: 'wrap',\n }}>\n {badges.map((badge, i) => (\n <div key={i} style={{\n display: 'flex', alignItems: 'center', gap: '0.375rem',\n }}>\n {badge.icon && (\n <span style={{ fontSize: '0.9rem' }}>{badge.icon}</span>\n )}\n <span style={{\n fontSize: '0.7rem', fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.15em', color: theme.muted,\n }}>\n {badge.label}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n// ─── Countdown Timer ─────────────────────────────────────────────────────────\n\nexport function CountdownSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string; end_date: string\n expired_text?: string\n }\n const endDate = c.end_date ? new Date(c.end_date) : null\n const [remaining, setRemaining] = useState<{ d: number; h: number; m: number; s: number } | null>(null)\n const [expired, setExpired] = useState(false)\n\n useEffect(() => {\n if (!endDate) return\n function tick() {\n const diff = endDate!.getTime() - Date.now()\n if (diff <= 0) { setExpired(true); return }\n setRemaining({\n d: Math.floor(diff / 86400000),\n h: Math.floor((diff % 86400000) / 3600000),\n m: Math.floor((diff % 3600000) / 60000),\n s: Math.floor((diff % 60000) / 1000),\n })\n }\n tick()\n const id = setInterval(tick, 1000)\n return () => clearInterval(id)\n }, [endDate?.getTime()])\n\n if (!endDate) return null\n if (expired) {\n return c.expired_text ? (\n <div style={{ padding: '1.5rem', textAlign: 'center' }}>\n <p style={{ fontSize: '0.85rem', color: theme.muted, margin: 0 }}>{c.expired_text}</p>\n </div>\n ) : null\n }\n if (!remaining) return null\n\n const units = [\n { label: 'Days', value: remaining.d },\n { label: 'Hours', value: remaining.h },\n { label: 'Min', value: remaining.m },\n { label: 'Sec', value: remaining.s },\n ]\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 480, margin: '0 auto', textAlign: 'center' }}>\n {c.heading && (\n <p style={{\n fontSize: '0.8rem', color: theme.accent, margin: '0 0 1rem',\n letterSpacing: '0.15em', textTransform: 'uppercase',\n }}>\n {c.heading}\n </p>\n )}\n <div style={{ display: 'flex', justifyContent: 'center', gap: '0.5rem' }}>\n {units.map((u) => (\n <div key={u.label} style={{\n minWidth: 'clamp(3.5rem, 12vw, 4.5rem)', padding: '0.75rem 0.25rem',\n background: theme.surface, border: `1px solid ${theme.fg}08`,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay || 'inherit',\n fontSize: 'clamp(1.5rem, 5vw, 2rem)', fontWeight: 300, lineHeight: 1, color: theme.fg,\n fontVariantNumeric: 'tabular-nums',\n }}>\n {String(u.value).padStart(2, '0')}\n </div>\n <div style={{\n fontSize: '0.6rem', fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.2em', color: theme.muted, marginTop: '0.375rem',\n }}>\n {u.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n// ─── Location Card (matches floradistro.com/locations exactly) ───────────────\n\nconst PIN_SVG = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></svg>'\nconst BAG_SVG = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z\"/><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"/><path d=\"M16 10a4 4 0 01-8 0\"/></svg>'\nconst STAR_PATH = 'M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z'\n\nfunction LocationStars({ rating, count, accent }: { rating: number; count: number; accent: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <div style={{ display: 'flex', gap: '2px' }}>\n {[1, 2, 3, 4, 5].map((s) => (\n <svg key={s} width={12} height={12} viewBox=\"0 0 20 20\"\n fill={s <= Math.round(rating) ? accent : 'rgba(255,255,255,0.1)'}>\n <path d={STAR_PATH} />\n </svg>\n ))}\n </div>\n <span style={{ color: 'rgba(255,255,255,0.5)', fontSize: '0.75rem', fontWeight: 500 }}>\n {rating.toFixed(1)} · {count} reviews\n </span>\n </div>\n )\n}\n\nexport function LocationCardSection({ section, theme, onEvent }: {\n section: LandingSection; theme: SectionTheme\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const c = section.content as {\n brand_font?: string\n locations?: Array<{\n name: string; city: string; state: string; address: string\n image: string; tagline?: string; phone?: string; phone_href?: string\n hours?: string; rating?: number; review_count?: number\n directions_url?: string; shop_url?: string\n }>\n }\n const locations = c.locations || []\n if (locations.length === 0) return null\n\n const brandFont = c.brand_font || 'inherit'\n\n return (\n <div style={{ padding: '0.75rem 1rem', maxWidth: 900, margin: '0 auto' }}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: locations.length === 1\n ? 'minmax(0, 420px)'\n : `repeat(${Math.min(locations.length, 4)}, 1fr)`,\n gap: 'clamp(0.75rem, 2vw, 1rem)',\n justifyContent: 'center',\n }}>\n {locations.map((loc, i) => {\n const dirUrl = loc.directions_url || `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(loc.address + ', ' + loc.city + ', ' + loc.state)}`\n\n return (\n <div key={i} style={{\n background: '#0C0C0C', border: '1px solid rgba(255,255,255,0.06)',\n overflow: 'hidden', display: 'flex', flexDirection: 'column',\n }}>\n {/* Image */}\n <div style={{ position: 'relative', aspectRatio: '4/5', overflow: 'hidden' }}>\n <img src={loc.image} alt={loc.name}\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n <div style={{\n position: 'absolute', inset: 0,\n background: 'linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)',\n }} />\n <div style={{ position: 'absolute', bottom: 0, left: 0, padding: 'clamp(1rem, 3vw, 1.25rem)' }}>\n <p className=\"loc-card-name\" style={{\n fontFamily: brandFont, fontSize: 'clamp(1.5rem, 6vw, 1.875rem)',\n color: '#fff', margin: 0, lineHeight: 1,\n }}>{loc.name}</p>\n <p style={{\n fontSize: 'clamp(0.65rem, 1.5vw, 0.75rem)', letterSpacing: '0.2em',\n color: 'rgba(255,255,255,0.6)', margin: '0.375rem 0 0', fontWeight: 600,\n textTransform: 'uppercase',\n }}>{loc.city}, {loc.state}</p>\n </div>\n </div>\n\n {/* Info */}\n <div style={{\n padding: 'clamp(0.875rem, 3vw, 1.25rem)',\n display: 'flex', flexDirection: 'column', gap: '0.625rem', flex: 1,\n }}>\n {loc.tagline && (\n <p style={{ fontSize: '0.8125rem', color: 'rgba(255,255,255,0.5)', fontWeight: 500, fontStyle: 'italic', margin: 0 }}>\n {loc.tagline}\n </p>\n )}\n\n {loc.rating != null && loc.review_count != null && loc.review_count > 0 && (\n <LocationStars rating={loc.rating} count={loc.review_count} accent={theme.accent} />\n )}\n\n {loc.address && (\n <a href={dirUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.35)', fontWeight: 500, textDecoration: 'none', lineHeight: 1.6 }}>\n {loc.address}, {loc.city}, {loc.state}\n </a>\n )}\n\n {loc.phone && (\n <a href={loc.phone_href || `tel:${loc.phone}`}\n style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.35)', fontWeight: 500, textDecoration: 'none' }}>\n {loc.phone}\n </a>\n )}\n\n {loc.hours && (\n <p style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.35)', fontWeight: 500, margin: 0 }}>{loc.hours}</p>\n )}\n\n {/* CTA Buttons */}\n <div style={{ display: 'flex', gap: '0.5rem', marginTop: 'auto', paddingTop: '0.25rem' }}>\n <a href={dirUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n onClick={() => onEvent?.('cta_click', { label: 'directions', location: loc.name })}\n style={{\n flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.375rem',\n padding: '0.625rem', background: '#fff', color: '#000',\n fontSize: 'clamp(0.65rem, 1.5vw, 0.75rem)', fontWeight: 700, letterSpacing: '0.1em',\n textTransform: 'uppercase', textDecoration: 'none',\n }}>\n <span dangerouslySetInnerHTML={{ __html: PIN_SVG }} />\n Directions\n </a>\n {loc.shop_url && (\n <a href={loc.shop_url}\n onClick={() => onEvent?.('cta_click', { label: 'shop', location: loc.name })}\n style={{\n flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.375rem',\n padding: '0.625rem', border: '1px solid rgba(255,255,255,0.15)', color: 'rgba(255,255,255,0.8)',\n fontSize: 'clamp(0.65rem, 1.5vw, 0.75rem)', fontWeight: 700, letterSpacing: '0.1em',\n textTransform: 'uppercase', textDecoration: 'none',\n }}>\n <span dangerouslySetInnerHTML={{ __html: BAG_SVG }} />\n Shop\n </a>\n )}\n </div>\n </div>\n </div>\n )\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, CollageHeroSection, 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'\nimport { TestimonialsSection, ValueStackSection, FAQSection, TrustBadgesSection, CountdownSection, LocationCardSection } from './sections/conversion-sections.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 'collage_hero': return <CollageHeroSection 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 'testimonials': return <TestimonialsSection section={section} theme={theme} />\n case 'value_stack': return <ValueStackSection section={section} theme={theme} />\n case 'faq': return <FAQSection section={section} theme={theme} />\n case 'trust_badges': return <TrustBadgesSection section={section} theme={theme} />\n case 'countdown': return <CountdownSection section={section} theme={theme} />\n case 'location_card': return <LocationCardSection section={section} 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/sections/conversion-sections.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","Fragment","body","el","BehavioralTracker"],"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, review_line } = section.content as {\n title?: string; subtitle?: string; background_image?: string; cta_text?: string; cta_url?: string\n review_line?: { rating: number; count: number; source?: 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 {review_line && review_line.count > 0 && (\n <div style={{ marginTop: '1.25rem', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem' }}>\n <span style={{ display: 'inline-flex', gap: '1px' }}>\n {[1,2,3,4,5].map((s) => (\n <svg key={s} width={14} height={14} viewBox=\"0 0 20 20\"\n fill={s <= Math.round(review_line.rating) ? theme.accent : `${theme.fg}20`}>\n <path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" />\n </svg>\n ))}\n </span>\n <span style={{ fontSize: '0.8rem', color: `${theme.fg}99`, fontWeight: 500 }}>\n {review_line.rating.toFixed(1)} · {review_line.count} {review_line.source || 'reviews'}\n </span>\n </div>\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 CollageHeroSection({ section, theme, tracking, onEvent }: {\n section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const c = section.content as {\n title?: string; subtitle?: string; cta_text?: string; cta_url?: string\n images?: Array<{ url: string; alt?: string }>\n overlay_opacity?: number\n }\n const images = c.images || []\n if (images.length === 0) return null\n const opacity = c.overlay_opacity ?? 0.45\n\n const count = Math.min(images.length, 5)\n\n // Full-viewport mosaic — aspect-ratio cells, no max-height cropping.\n // Grid: large left (spans 2 rows), 2 stacked right, 2 wide bottom.\n const imgStyle: React.CSSProperties = {\n width: '100%', height: '100%', objectFit: 'cover', objectPosition: 'center top',\n display: 'block',\n }\n\n return (\n <div style={{ width: '100%', overflow: 'hidden', position: 'relative' }}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: count >= 3 ? '3fr 2fr' : '1fr',\n gridTemplateRows: count >= 3 ? '1fr 1fr' : 'auto',\n gap: '2px',\n height: '100vh',\n maxHeight: '900px',\n }}>\n {/* Main image — left side, spans full height */}\n {count > 0 && (\n <div style={{\n gridRow: count >= 3 ? '1 / -1' : undefined,\n overflow: 'hidden', background: theme.surface,\n }}>\n <img src={images[0].url} alt={images[0].alt || ''} loading=\"eager\" style={imgStyle} />\n </div>\n )}\n {/* Right top */}\n {count >= 2 && (\n <div style={{ overflow: 'hidden', background: theme.surface }}>\n <img src={images[1].url} alt={images[1].alt || ''} loading=\"eager\" style={imgStyle} />\n </div>\n )}\n {/* Right bottom */}\n {count >= 3 && (\n <div style={{\n overflow: 'hidden', background: theme.surface,\n ...(count >= 4 ? { display: 'grid', gridTemplateColumns: count >= 5 ? '1fr 1fr' : count >= 4 ? '1fr 1fr' : '1fr', gap: '2px' } : {}),\n }}>\n {count < 4 ? (\n <img src={images[2].url} alt={images[2].alt || ''} loading=\"lazy\" style={imgStyle} />\n ) : (\n <>\n <div style={{ overflow: 'hidden' }}>\n <img src={images[2].url} alt={images[2].alt || ''} loading=\"lazy\" style={imgStyle} />\n </div>\n {count >= 4 && (\n <div style={{ overflow: 'hidden' }}>\n <img src={images[3].url} alt={images[3].alt || ''} loading=\"lazy\" style={imgStyle} />\n </div>\n )}\n </>\n )}\n </div>\n )}\n </div>\n {/* Text overlay */}\n <div style={{\n position: 'absolute', inset: 0,\n background: 'linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.15) 35%, transparent 55%)',\n pointerEvents: 'none',\n }} />\n <div style={{\n position: 'absolute', bottom: 0, left: 0, right: 0,\n padding: 'clamp(1.25rem, 4vw, 2.5rem)',\n zIndex: 1,\n }}>\n {c.title && (\n <h1 style={{\n fontSize: 'clamp(1.75rem, 7vw, 3rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: 0, lineHeight: 1.1, letterSpacing: '-0.03em', color: theme.fg,\n }}>\n <AnimatedText text={c.title} />\n </h1>\n )}\n {c.subtitle && (\n <p style={{\n fontSize: 'clamp(0.65rem, 1.8vw, 0.85rem)', color: `${theme.fg}BB`,\n margin: '0.5rem 0 0', letterSpacing: '0.12em', textTransform: 'uppercase',\n fontWeight: 400,\n }}>\n {c.subtitle}\n </p>\n )}\n </div>\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 { AnimatedText, type SectionTheme } from './shared.js'\n\n// ─── Testimonials ────────────────────────────────────────────────────────────\n\nexport function TestimonialsSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string; subtitle?: string\n rating?: number; review_count?: number\n reviews?: Array<{ name: string; text: string; rating?: number; location?: string }>\n }\n const layout = (section.config?.layout as string) || 'grid'\n const reviews = c.reviews || []\n if (reviews.length === 0) return null\n\n const overallRating = c.rating ?? 5\n const reviewCount = c.review_count ?? reviews.length\n\n return (\n <div style={{ padding: '3rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {/* Aggregate rating */}\n <div style={{ textAlign: 'center', marginBottom: '2rem' }}>\n {c.heading && (\n <h2 style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.75rem)', fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit', margin: '0 0 0.75rem',\n lineHeight: 1.2, letterSpacing: '-0.02em', color: theme.fg,\n }}>\n <AnimatedText text={c.heading} />\n </h2>\n )}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.5rem', marginBottom: '0.25rem' }}>\n <Stars rating={overallRating} color={theme.accent} size={18} />\n <span style={{ fontSize: '1.1rem', fontWeight: 500, color: theme.fg }}>\n <AnimatedText text={overallRating.toFixed(1)} />\n </span>\n </div>\n {c.subtitle ? (\n <p style={{ fontSize: '0.8rem', color: theme.muted, margin: 0, letterSpacing: '0.1em', textTransform: 'uppercase' }}>\n {c.subtitle}\n </p>\n ) : (\n <p style={{ fontSize: '0.8rem', color: theme.muted, margin: 0, letterSpacing: '0.1em', textTransform: 'uppercase' }}>\n from <AnimatedText text={String(reviewCount)} /> reviews\n </p>\n )}\n </div>\n\n {/* Review cards */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: layout === 'list' ? '1fr' : `repeat(${Math.min(reviews.length, 2)}, 1fr)`,\n gap: '0.75rem',\n }}>\n {reviews.map((review, i) => (\n <div key={i} style={{\n background: theme.surface, border: `1px solid ${theme.fg}08`,\n padding: '1.25rem',\n }}>\n <Stars rating={review.rating ?? 5} color={theme.accent} size={14} />\n <p style={{\n fontSize: '0.88rem', color: `${theme.fg}CC`, margin: '0.75rem 0',\n lineHeight: 1.6, fontWeight: 300, fontStyle: 'italic',\n }}>\n \"{review.text}\"\n </p>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '0.375rem' }}>\n <span style={{ fontSize: '0.8rem', fontWeight: 500, color: theme.fg }}>\n {review.name}\n </span>\n {review.location && (\n <span style={{ fontSize: '0.7rem', color: theme.muted }}>\n {review.location}\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction Stars({ rating, color, size }: { rating: number; color: string; size: number }) {\n return (\n <span style={{ display: 'inline-flex', gap: '1px' }}>\n {[1, 2, 3, 4, 5].map((n) => (\n <svg key={n} width={size} height={size} viewBox=\"0 0 20 20\" fill={n <= Math.round(rating) ? color : 'none'}\n stroke={color} strokeWidth={1.5}>\n <path d=\"M10 1.5l2.47 5.01 5.53.8-4 3.9.94 5.5L10 14.26 5.06 16.7l.94-5.5-4-3.9 5.53-.8z\" />\n </svg>\n ))}\n </span>\n )\n}\n\n// ─── Value Stack ──────────────────────────────────────────────────────────────\n\nexport function ValueStackSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string; subtitle?: string\n items?: Array<{ text: string; value?: string }>\n total_value?: string; offer_label?: string\n }\n const items = c.items || []\n if (items.length === 0) return null\n\n return (\n <div style={{ padding: '3rem 1.5rem', maxWidth: 520, margin: '0 auto' }}>\n <div style={{ background: theme.surface, border: `1px solid ${theme.fg}08`, padding: 'clamp(1.5rem, 5vw, 2.5rem)' }}>\n {c.heading && (\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 {c.heading}\n </h2>\n )}\n {c.subtitle && (\n <p style={{\n fontSize: '0.8rem', color: theme.accent, margin: '0 0 1.5rem',\n letterSpacing: '0.15em', textTransform: 'uppercase', textAlign: 'center',\n }}>\n {c.subtitle}\n </p>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.625rem' }}>\n {items.map((item, i) => (\n <div key={i} style={{\n display: 'flex', alignItems: 'flex-start', gap: '0.75rem',\n padding: '0.5rem 0',\n borderBottom: i < items.length - 1 ? `1px solid ${theme.fg}08` : undefined,\n }}>\n <span style={{ color: theme.accent, fontSize: '1rem', lineHeight: 1, flexShrink: 0, marginTop: '0.1rem' }}>\n &#10003;\n </span>\n <span style={{ flex: 1, fontSize: '0.9rem', color: `${theme.fg}CC`, fontWeight: 300, lineHeight: 1.5 }}>\n {item.text}\n </span>\n {item.value && (\n <span style={{\n fontSize: '0.8rem', color: theme.muted, fontWeight: 400,\n textDecoration: 'line-through', flexShrink: 0,\n }}>\n {item.value}\n </span>\n )}\n </div>\n ))}\n </div>\n\n {(c.total_value || c.offer_label) && (\n <div style={{\n marginTop: '1.5rem', padding: '1rem', background: `${theme.accent}0A`,\n border: `1px dashed ${theme.accent}30`, textAlign: 'center',\n }}>\n {c.total_value && (\n <div style={{ fontSize: '0.75rem', color: theme.muted, marginBottom: '0.25rem', letterSpacing: '0.1em', textTransform: 'uppercase' }}>\n Total value: <span style={{ textDecoration: 'line-through' }}>{c.total_value}</span>\n </div>\n )}\n <div style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.5rem)', fontWeight: 500,\n fontFamily: theme.fontDisplay || 'inherit', color: theme.accent,\n }}>\n {c.offer_label || 'Free'}\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ─── FAQ / Objection Handling ─────────────────────────────────────────────────\n\nexport function FAQSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string\n items?: Array<{ question: string; answer: string }>\n }\n const items = c.items || []\n if (items.length === 0) return null\n\n return (\n <div style={{ padding: '2.5rem 1.5rem', maxWidth: 580, margin: '0 auto' }}>\n {c.heading && (\n <h2 style={{\n fontSize: 11, fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.25em', color: `${theme.fg}40`, margin: '0 0 1.25rem',\n textAlign: 'center',\n }}>\n {c.heading}\n </h2>\n )}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 0 }}>\n {items.map((item, i) => (\n <FAQItem key={i} question={item.question} answer={item.answer} theme={theme} />\n ))}\n </div>\n </div>\n )\n}\n\nfunction FAQItem({ question, answer, theme }: {\n question: string; answer: string; theme: SectionTheme\n}) {\n const [open, setOpen] = useState(false)\n\n return (\n <div style={{ borderBottom: `1px solid ${theme.fg}0A` }}>\n <button\n onClick={() => setOpen(!open)}\n style={{\n width: '100%', display: 'flex', justifyContent: 'space-between', alignItems: 'center',\n padding: '1rem 0', background: 'none', border: 'none', cursor: 'pointer',\n color: theme.fg, fontFamily: 'inherit', textAlign: 'left',\n }}\n >\n <span style={{ fontSize: '0.9rem', fontWeight: 400, lineHeight: 1.4 }}>\n {question}\n </span>\n <span style={{\n fontSize: '1.25rem', fontWeight: 200, color: theme.muted,\n transition: 'transform 0.2s', transform: open ? 'rotate(45deg)' : 'none',\n flexShrink: 0, marginLeft: '1rem',\n }}>\n +\n </span>\n </button>\n <div style={{\n maxHeight: open ? '20rem' : 0, overflow: 'hidden',\n transition: 'max-height 0.3s ease',\n }}>\n <p style={{\n fontSize: '0.85rem', color: `${theme.fg}88`, lineHeight: 1.7,\n fontWeight: 300, margin: 0, padding: '0 0 1rem',\n }}>\n {answer}\n </p>\n </div>\n </div>\n )\n}\n\n// ─── Trust Badges ────────────────────────────────────────────────────────────\n\nexport function TrustBadgesSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n badges?: Array<{ icon?: string; label: string }>\n }\n const badges = c.badges || []\n if (badges.length === 0) return null\n\n return (\n <div style={{\n padding: '1.25rem 1.5rem',\n borderTop: `1px solid ${theme.fg}08`, borderBottom: `1px solid ${theme.fg}08`,\n }}>\n <div style={{\n display: 'flex', justifyContent: 'center', alignItems: 'center',\n gap: 'clamp(1rem, 4vw, 2.5rem)', flexWrap: 'wrap',\n }}>\n {badges.map((badge, i) => (\n <div key={i} style={{\n display: 'flex', alignItems: 'center', gap: '0.375rem',\n }}>\n {badge.icon && (\n <span style={{ fontSize: '0.9rem' }}>{badge.icon}</span>\n )}\n <span style={{\n fontSize: '0.7rem', fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.15em', color: theme.muted,\n }}>\n {badge.label}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n// ─── Countdown Timer ─────────────────────────────────────────────────────────\n\nexport function CountdownSection({ section, theme }: {\n section: LandingSection; theme: SectionTheme\n}) {\n const c = section.content as {\n heading?: string; end_date: string\n expired_text?: string\n }\n const endDate = c.end_date ? new Date(c.end_date) : null\n const [remaining, setRemaining] = useState<{ d: number; h: number; m: number; s: number } | null>(null)\n const [expired, setExpired] = useState(false)\n\n useEffect(() => {\n if (!endDate) return\n function tick() {\n const diff = endDate!.getTime() - Date.now()\n if (diff <= 0) { setExpired(true); return }\n setRemaining({\n d: Math.floor(diff / 86400000),\n h: Math.floor((diff % 86400000) / 3600000),\n m: Math.floor((diff % 3600000) / 60000),\n s: Math.floor((diff % 60000) / 1000),\n })\n }\n tick()\n const id = setInterval(tick, 1000)\n return () => clearInterval(id)\n }, [endDate?.getTime()])\n\n if (!endDate) return null\n if (expired) {\n return c.expired_text ? (\n <div style={{ padding: '1.5rem', textAlign: 'center' }}>\n <p style={{ fontSize: '0.85rem', color: theme.muted, margin: 0 }}>{c.expired_text}</p>\n </div>\n ) : null\n }\n if (!remaining) return null\n\n const units = [\n { label: 'Days', value: remaining.d },\n { label: 'Hours', value: remaining.h },\n { label: 'Min', value: remaining.m },\n { label: 'Sec', value: remaining.s },\n ]\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 480, margin: '0 auto', textAlign: 'center' }}>\n {c.heading && (\n <p style={{\n fontSize: '0.8rem', color: theme.accent, margin: '0 0 1rem',\n letterSpacing: '0.15em', textTransform: 'uppercase',\n }}>\n {c.heading}\n </p>\n )}\n <div style={{ display: 'flex', justifyContent: 'center', gap: '0.5rem' }}>\n {units.map((u) => (\n <div key={u.label} style={{\n minWidth: 'clamp(3.5rem, 12vw, 4.5rem)', padding: '0.75rem 0.25rem',\n background: theme.surface, border: `1px solid ${theme.fg}08`,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay || 'inherit',\n fontSize: 'clamp(1.5rem, 5vw, 2rem)', fontWeight: 300, lineHeight: 1, color: theme.fg,\n fontVariantNumeric: 'tabular-nums',\n }}>\n {String(u.value).padStart(2, '0')}\n </div>\n <div style={{\n fontSize: '0.6rem', fontWeight: 500, textTransform: 'uppercase',\n letterSpacing: '0.2em', color: theme.muted, marginTop: '0.375rem',\n }}>\n {u.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n// ─── Location Card (matches floradistro.com/locations exactly) ───────────────\n\nconst PIN_SVG = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"/><circle cx=\"12\" cy=\"10\" r=\"3\"/></svg>'\nconst BAG_SVG = '<svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z\"/><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"/><path d=\"M16 10a4 4 0 01-8 0\"/></svg>'\nconst STAR_PATH = 'M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z'\n\nfunction LocationStars({ rating, count, accent }: { rating: number; count: number; accent: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <div style={{ display: 'flex', gap: '2px' }}>\n {[1, 2, 3, 4, 5].map((s) => (\n <svg key={s} width={12} height={12} viewBox=\"0 0 20 20\"\n fill={s <= Math.round(rating) ? accent : 'rgba(255,255,255,0.1)'}>\n <path d={STAR_PATH} />\n </svg>\n ))}\n </div>\n <span style={{ color: 'rgba(255,255,255,0.5)', fontSize: '0.75rem', fontWeight: 500 }}>\n {rating.toFixed(1)} · {count} reviews\n </span>\n </div>\n )\n}\n\nexport function LocationCardSection({ section, theme, onEvent }: {\n section: LandingSection; theme: SectionTheme\n onEvent?: (event: string, data: Record<string, unknown>) => void\n}) {\n const c = section.content as {\n brand_font?: string\n locations?: Array<{\n name: string; city: string; state: string; address: string\n image: string; tagline?: string; phone?: string; phone_href?: string\n hours?: string; rating?: number; review_count?: number\n directions_url?: string; shop_url?: string\n }>\n }\n const locations = c.locations || []\n if (locations.length === 0) return null\n\n const brandFont = c.brand_font || 'inherit'\n\n return (\n <div style={{ padding: '0.75rem 1rem', maxWidth: 900, margin: '0 auto' }}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: locations.length === 1\n ? 'minmax(0, 420px)'\n : `repeat(${Math.min(locations.length, 4)}, 1fr)`,\n gap: 'clamp(0.75rem, 2vw, 1rem)',\n justifyContent: 'center',\n }}>\n {locations.map((loc, i) => {\n const dirUrl = loc.directions_url || `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(loc.address + ', ' + loc.city + ', ' + loc.state)}`\n\n return (\n <div key={i} style={{\n background: '#0C0C0C', border: '1px solid rgba(255,255,255,0.06)',\n overflow: 'hidden', display: 'flex', flexDirection: 'column',\n }}>\n {/* Image */}\n <div style={{ position: 'relative', aspectRatio: '4/5', overflow: 'hidden' }}>\n <img src={loc.image} alt={loc.name}\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n <div style={{\n position: 'absolute', inset: 0,\n background: 'linear-gradient(to top, rgba(0,0,0,0.6) 0%, transparent 50%)',\n }} />\n <div style={{ position: 'absolute', bottom: 0, left: 0, padding: 'clamp(1rem, 3vw, 1.25rem)' }}>\n <p className=\"loc-card-name\" style={{\n fontFamily: brandFont, fontSize: 'clamp(1.5rem, 6vw, 1.875rem)',\n color: '#fff', margin: 0, lineHeight: 1,\n }}>{loc.name}</p>\n <p style={{\n fontSize: 'clamp(0.65rem, 1.5vw, 0.75rem)', letterSpacing: '0.2em',\n color: 'rgba(255,255,255,0.6)', margin: '0.375rem 0 0', fontWeight: 600,\n textTransform: 'uppercase',\n }}>{loc.city}, {loc.state}</p>\n </div>\n </div>\n\n {/* Info */}\n <div style={{\n padding: 'clamp(0.875rem, 3vw, 1.25rem)',\n display: 'flex', flexDirection: 'column', gap: '0.625rem', flex: 1,\n }}>\n {loc.tagline && (\n <p style={{ fontSize: '0.8125rem', color: 'rgba(255,255,255,0.5)', fontWeight: 500, fontStyle: 'italic', margin: 0 }}>\n {loc.tagline}\n </p>\n )}\n\n {loc.rating != null && loc.review_count != null && loc.review_count > 0 && (\n <LocationStars rating={loc.rating} count={loc.review_count} accent={theme.accent} />\n )}\n\n {loc.address && (\n <a href={dirUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.35)', fontWeight: 500, textDecoration: 'none', lineHeight: 1.6 }}>\n {loc.address}, {loc.city}, {loc.state}\n </a>\n )}\n\n {loc.phone && (\n <a href={loc.phone_href || `tel:${loc.phone}`}\n style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.35)', fontWeight: 500, textDecoration: 'none' }}>\n {loc.phone}\n </a>\n )}\n\n {loc.hours && (\n <p style={{ fontSize: '0.75rem', color: 'rgba(255,255,255,0.35)', fontWeight: 500, margin: 0 }}>{loc.hours}</p>\n )}\n\n {/* CTA Buttons */}\n <div style={{ display: 'flex', gap: '0.5rem', marginTop: 'auto', paddingTop: '0.25rem' }}>\n <a href={dirUrl} target=\"_blank\" rel=\"noopener noreferrer\"\n onClick={() => onEvent?.('cta_click', { label: 'directions', location: loc.name })}\n style={{\n flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.375rem',\n padding: '0.625rem', background: '#fff', color: '#000',\n fontSize: 'clamp(0.65rem, 1.5vw, 0.75rem)', fontWeight: 700, letterSpacing: '0.1em',\n textTransform: 'uppercase', textDecoration: 'none',\n }}>\n <span dangerouslySetInnerHTML={{ __html: PIN_SVG }} />\n Directions\n </a>\n {loc.shop_url && (\n <a href={loc.shop_url}\n onClick={() => onEvent?.('cta_click', { label: 'shop', location: loc.name })}\n style={{\n flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '0.375rem',\n padding: '0.625rem', border: '1px solid rgba(255,255,255,0.15)', color: 'rgba(255,255,255,0.8)',\n fontSize: 'clamp(0.65rem, 1.5vw, 0.75rem)', fontWeight: 700, letterSpacing: '0.1em',\n textTransform: 'uppercase', textDecoration: 'none',\n }}>\n <span dangerouslySetInnerHTML={{ __html: BAG_SVG }} />\n Shop\n </a>\n )}\n </div>\n </div>\n </div>\n )\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, CollageHeroSection, 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'\nimport { TestimonialsSection, ValueStackSection, FAQSection, TrustBadgesSection, CountdownSection, LocationCardSection } from './sections/conversion-sections.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 'collage_hero': return <CollageHeroSection 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 'testimonials': return <TestimonialsSection section={section} theme={theme} />\n case 'value_stack': return <ValueStackSection section={section} theme={theme} />\n case 'faq': return <FAQSection section={section} theme={theme} />\n case 'trust_badges': return <TrustBadgesSection section={section} theme={theme} />\n case 'countdown': return <CountdownSection section={section} theme={theme} />\n case 'location_card': return <LocationCardSection section={section} 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"]}