@uptrademedia/site-kit 1.0.5 → 1.0.8

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.
Files changed (169) hide show
  1. package/dist/analytics/index.js +7 -7
  2. package/dist/analytics/index.mjs +3 -3
  3. package/dist/api-QUIPJJCX.js +77 -0
  4. package/dist/api-QUIPJJCX.js.map +1 -0
  5. package/dist/api-V3BA5PMX.mjs +4 -0
  6. package/dist/api-V3BA5PMX.mjs.map +1 -0
  7. package/dist/blog/index.d.mts +2 -2
  8. package/dist/blog/index.d.ts +2 -2
  9. package/dist/blog/index.js +40 -6
  10. package/dist/blog/index.js.map +1 -1
  11. package/dist/blog/index.mjs +40 -6
  12. package/dist/blog/index.mjs.map +1 -1
  13. package/dist/blog/server.d.mts +3 -2
  14. package/dist/blog/server.d.ts +3 -2
  15. package/dist/blog/server.js +13 -6
  16. package/dist/blog/server.js.map +1 -1
  17. package/dist/blog/server.mjs +13 -6
  18. package/dist/blog/server.mjs.map +1 -1
  19. package/dist/{chunk-FKVJOT2F.mjs → chunk-42EXHJTC.mjs} +196 -7
  20. package/dist/chunk-42EXHJTC.mjs.map +1 -0
  21. package/dist/{scanner-AZV5I6US.mjs → chunk-44OMJFCG.mjs} +354 -14
  22. package/dist/chunk-44OMJFCG.mjs.map +1 -0
  23. package/dist/chunk-4TGJYNHV.js +981 -0
  24. package/dist/chunk-4TGJYNHV.js.map +1 -0
  25. package/dist/chunk-4XPGGLVP.mjs +53 -0
  26. package/dist/{chunk-NYKRE2FL.mjs.map → chunk-4XPGGLVP.mjs.map} +1 -1
  27. package/dist/{generators-TO2FKJR6.mjs → chunk-6ONUXZDO.mjs} +26 -9
  28. package/dist/chunk-6ONUXZDO.mjs.map +1 -0
  29. package/dist/chunk-CG53ASWX.mjs +729 -0
  30. package/dist/chunk-CG53ASWX.mjs.map +1 -0
  31. package/dist/{scanner-ETJAMIT7.js → chunk-DERI27QC.js} +448 -102
  32. package/dist/chunk-DERI27QC.js.map +1 -0
  33. package/dist/chunk-DYM5ML2V.mjs +1518 -0
  34. package/dist/chunk-DYM5ML2V.mjs.map +1 -0
  35. package/dist/chunk-FLZZOX44.js +1526 -0
  36. package/dist/chunk-FLZZOX44.js.map +1 -0
  37. package/dist/{chunk-7H6I3ECV.mjs → chunk-FQVGK746.mjs} +63 -3
  38. package/dist/chunk-FQVGK746.mjs.map +1 -0
  39. package/dist/{chunk-GQ6ZOU2N.mjs → chunk-JGQPAXTL.mjs} +4 -4
  40. package/dist/{chunk-GQ6ZOU2N.mjs.map → chunk-JGQPAXTL.mjs.map} +1 -1
  41. package/dist/{chunk-V3F5J6CV.js → chunk-JUEVN4Q4.js} +196 -7
  42. package/dist/chunk-JUEVN4Q4.js.map +1 -0
  43. package/dist/chunk-KKMGTT7F.mjs +968 -0
  44. package/dist/chunk-KKMGTT7F.mjs.map +1 -0
  45. package/dist/{chunk-XQJX252G.mjs → chunk-MB3WR5KJ.mjs} +28 -18
  46. package/dist/chunk-MB3WR5KJ.mjs.map +1 -0
  47. package/dist/{chunk-2IHTEKHU.mjs → chunk-QD5CN2OI.mjs} +16 -7
  48. package/dist/chunk-QD5CN2OI.mjs.map +1 -0
  49. package/dist/{chunk-SBVEYCSV.js → chunk-QQB4FO4Q.js} +7 -7
  50. package/dist/{chunk-SBVEYCSV.js.map → chunk-QQB4FO4Q.js.map} +1 -1
  51. package/dist/{generators-YZWIGHCO.js → chunk-S2GXR5HY.js} +26 -9
  52. package/dist/chunk-S2GXR5HY.js.map +1 -0
  53. package/dist/{chunk-O2OHHBUD.js → chunk-TDK7DLCH.js} +30 -20
  54. package/dist/chunk-TDK7DLCH.js.map +1 -0
  55. package/dist/{chunk-QP5NCO2E.js → chunk-VDI7KYME.js} +67 -2
  56. package/dist/chunk-VDI7KYME.js.map +1 -0
  57. package/dist/chunk-VOR53RUR.js +753 -0
  58. package/dist/chunk-VOR53RUR.js.map +1 -0
  59. package/dist/{chunk-GAJLEDRD.js → chunk-ZKJ7JKFV.js} +16 -7
  60. package/dist/chunk-ZKJ7JKFV.js.map +1 -0
  61. package/dist/chunk-ZSMWDLMK.js +63 -0
  62. package/dist/{chunk-EQCVQC35.js.map → chunk-ZSMWDLMK.js.map} +1 -1
  63. package/dist/cli/index.js +37269 -0
  64. package/dist/cli/index.js.map +1 -0
  65. package/dist/cli/index.mjs +37233 -0
  66. package/dist/cli/index.mjs.map +1 -0
  67. package/dist/commerce/index.js +1 -1
  68. package/dist/commerce/index.mjs +1 -1
  69. package/dist/commerce/server.d.mts +12 -3
  70. package/dist/commerce/server.d.ts +12 -3
  71. package/dist/commerce/server.js +71 -70
  72. package/dist/commerce/server.js.map +1 -1
  73. package/dist/commerce/server.mjs +71 -70
  74. package/dist/commerce/server.mjs.map +1 -1
  75. package/dist/engage/index.d.mts +6 -4
  76. package/dist/engage/index.d.ts +6 -4
  77. package/dist/engage/index.js +8 -4
  78. package/dist/engage/index.mjs +2 -2
  79. package/dist/forms/index.js +1 -1
  80. package/dist/forms/index.mjs +1 -1
  81. package/dist/generators-5EU4PTVF.js +33 -0
  82. package/dist/generators-5EU4PTVF.js.map +1 -0
  83. package/dist/generators-TYPILCWD.mjs +4 -0
  84. package/dist/generators-TYPILCWD.mjs.map +1 -0
  85. package/dist/images/index.js +11 -11
  86. package/dist/images/index.mjs +4 -4
  87. package/dist/index.d.mts +154 -5
  88. package/dist/index.d.ts +154 -5
  89. package/dist/index.js +940 -24
  90. package/dist/index.js.map +1 -1
  91. package/dist/index.mjs +819 -7
  92. package/dist/index.mjs.map +1 -1
  93. package/dist/llms/index.d.mts +657 -0
  94. package/dist/llms/index.d.ts +657 -0
  95. package/dist/llms/index.js +101 -0
  96. package/dist/llms/index.js.map +1 -0
  97. package/dist/llms/index.mjs +4 -0
  98. package/dist/llms/index.mjs.map +1 -0
  99. package/dist/migrator-ARLHUNB3.mjs +4 -0
  100. package/dist/migrator-ARLHUNB3.mjs.map +1 -0
  101. package/dist/migrator-VZLBH3VY.js +37 -0
  102. package/dist/migrator-VZLBH3VY.js.map +1 -0
  103. package/dist/redirects/index.js +1 -1
  104. package/dist/redirects/index.mjs +1 -1
  105. package/dist/reputation/index.js +1 -1
  106. package/dist/reputation/index.mjs +1 -1
  107. package/dist/{routing-BWjUF7lp.d.ts → routing-CF91y6NO.d.ts} +1 -1
  108. package/dist/{routing-CgmRi9tD.d.mts → routing-CIOFpFCB.d.mts} +1 -1
  109. package/dist/scanner-7ZMUM2P5.mjs +4 -0
  110. package/dist/scanner-7ZMUM2P5.mjs.map +1 -0
  111. package/dist/scanner-OY7UF3WA.js +53 -0
  112. package/dist/scanner-OY7UF3WA.js.map +1 -0
  113. package/dist/seo/index.d.mts +267 -7
  114. package/dist/seo/index.d.ts +267 -7
  115. package/dist/seo/index.js +433 -24
  116. package/dist/seo/index.js.map +1 -1
  117. package/dist/seo/index.mjs +401 -11
  118. package/dist/seo/index.mjs.map +1 -1
  119. package/dist/seo/server.d.mts +11 -4
  120. package/dist/seo/server.d.ts +11 -4
  121. package/dist/seo/server.js +17 -17
  122. package/dist/seo/server.mjs +3 -3
  123. package/dist/setup/client.js +1 -1
  124. package/dist/setup/client.mjs +1 -1
  125. package/dist/setup/index.js +3 -3
  126. package/dist/setup/index.mjs +2 -2
  127. package/dist/setup/server.js +3 -3
  128. package/dist/setup/server.mjs +2 -2
  129. package/dist/sitemap/index.js +2 -2
  130. package/dist/sitemap/index.js.map +1 -1
  131. package/dist/sitemap/index.mjs +2 -2
  132. package/dist/sitemap/index.mjs.map +1 -1
  133. package/dist/{types-C0pJGfbH.d.mts → types-D6FHAVWX.d.mts} +99 -3
  134. package/dist/{types-C0pJGfbH.d.ts → types-D6FHAVWX.d.ts} +99 -3
  135. package/dist/{types-BN4OwtCO.d.mts → types-DI0jnhjJ.d.mts} +2 -0
  136. package/dist/{types-BN4OwtCO.d.ts → types-DI0jnhjJ.d.ts} +2 -0
  137. package/dist/{types-BmzutFwy.d.ts → types-j8X4vUhB.d.mts} +19 -2
  138. package/dist/{types-BmzutFwy.d.mts → types-j8X4vUhB.d.ts} +19 -2
  139. package/dist/{web-vitals-BH55V7EJ.js → web-vitals-444RLW3B.js} +11 -11
  140. package/dist/{web-vitals-BH55V7EJ.js.map → web-vitals-444RLW3B.js.map} +1 -1
  141. package/dist/{web-vitals-RJYPWAR3.mjs → web-vitals-KPICZIEF.mjs} +3 -3
  142. package/dist/{web-vitals-RJYPWAR3.mjs.map → web-vitals-KPICZIEF.mjs.map} +1 -1
  143. package/package.json +17 -10
  144. package/dist/api-N35S3EES.js +0 -57
  145. package/dist/api-N35S3EES.js.map +0 -1
  146. package/dist/api-SYBTK7Z7.mjs +0 -4
  147. package/dist/api-SYBTK7Z7.mjs.map +0 -1
  148. package/dist/chunk-2IHTEKHU.mjs.map +0 -1
  149. package/dist/chunk-7H6I3ECV.mjs.map +0 -1
  150. package/dist/chunk-BGJLOJ7T.mjs +0 -605
  151. package/dist/chunk-BGJLOJ7T.mjs.map +0 -1
  152. package/dist/chunk-EQCVQC35.js +0 -35
  153. package/dist/chunk-FKVJOT2F.mjs.map +0 -1
  154. package/dist/chunk-GAJLEDRD.js.map +0 -1
  155. package/dist/chunk-NYKRE2FL.mjs +0 -31
  156. package/dist/chunk-O2OHHBUD.js.map +0 -1
  157. package/dist/chunk-QAYJV4KK.js +0 -608
  158. package/dist/chunk-QAYJV4KK.js.map +0 -1
  159. package/dist/chunk-QP5NCO2E.js.map +0 -1
  160. package/dist/chunk-V3F5J6CV.js.map +0 -1
  161. package/dist/chunk-XQJX252G.mjs.map +0 -1
  162. package/dist/generators-TO2FKJR6.mjs.map +0 -1
  163. package/dist/generators-YZWIGHCO.js.map +0 -1
  164. package/dist/migrator-V6KS75EA.mjs +0 -265
  165. package/dist/migrator-V6KS75EA.mjs.map +0 -1
  166. package/dist/migrator-XKM7YQCY.js +0 -272
  167. package/dist/migrator-XKM7YQCY.js.map +0 -1
  168. package/dist/scanner-AZV5I6US.mjs.map +0 -1
  169. package/dist/scanner-ETJAMIT7.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/affiliates/api.ts","../src/affiliates/useAffiliates.ts","../src/affiliates/AffiliatesWidget.tsx","../src/signal/SignalExperiment.tsx","../src/setup/SetupAssistant.tsx"],"names":["useState","useEffect","getTrackingUrl","jsx","useSignalExperiment","useSignalEvent","Fragment","React","useRef","useCallback","onComplete","jsxs"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @uptrade/site-kit/affiliates - Affiliates API\n * \n * API functions for fetching affiliate data for client sites.\n * All data goes through Portal API with API key auth - never Supabase directly.\n */\n\nimport type { Affiliate, AffiliateWithOffers, FetchAffiliatesOptions } from './types'\n\n// ============================================\n// API Config Helpers\n// ============================================\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.uptrademedia.com'\n : 'https://api.uptrademedia.com'\n const apiKey = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_KEY__ || ''\n : ''\n return { apiUrl, apiKey }\n}\n\nasync function apiGet<T>(endpoint: string): Promise<T | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) {\n console.error('[Affiliates] No API key configured')\n return null\n }\n \n try {\n const response = await fetch(`${apiUrl}${endpoint}`, {\n method: 'GET',\n headers: {\n 'x-api-key': apiKey,\n },\n })\n \n if (!response.ok) {\n console.error(`[Affiliates] API error: ${response.statusText}`)\n return null\n }\n \n return await response.json()\n } catch (error) {\n console.error('[Affiliates] Network error:', error)\n return null\n }\n}\n\n// ============================================\n// Fetch Affiliates\n// ============================================\n\n/**\n * Fetch all active affiliates for the project\n * \n * @example\n * ```ts\n * const affiliates = await fetchAffiliates()\n * ```\n */\nexport async function fetchAffiliates(\n options: FetchAffiliatesOptions = {}\n): Promise<AffiliateWithOffers[]> {\n const result = await apiGet<{ affiliates: AffiliateWithOffers[] }>(\n '/api/public/affiliates'\n )\n \n return result?.affiliates || []\n}\n\n/**\n * Build a tracking URL for an affiliate offer\n * When clicked, this redirects through our tracking endpoint and then to the destination\n * \n * @example\n * ```ts\n * const trackingUrl = getTrackingUrl(affiliate.id, offer.id)\n * // Returns: https://api.uptrademedia.com/a/{affiliateId}/{offerId}\n * ```\n */\nexport function getTrackingUrl(affiliateId: string, offerId: string): string {\n const { apiUrl } = getApiConfig()\n return `${apiUrl}/a/${affiliateId}/${offerId}`\n}\n","/**\n * @uptrade/site-kit/affiliates - useAffiliates Hook\n * \n * React hook for fetching and displaying affiliates on client sites.\n */\n\n'use client'\n\nimport { useState, useEffect } from 'react'\nimport type { AffiliateWithOffers } from './types'\nimport { fetchAffiliates, getTrackingUrl } from './api'\n\nexport interface UseAffiliatesResult {\n affiliates: AffiliateWithOffers[]\n isLoading: boolean\n error: string | null\n getTrackingUrl: (affiliateId: string, offerId: string) => string\n}\n\n/**\n * Hook to fetch affiliates for display on client sites\n * \n * @example\n * ```tsx\n * function AffiliatesSection() {\n * const { affiliates, isLoading } = useAffiliates()\n * \n * if (isLoading) return <div>Loading...</div>\n * \n * return (\n * <div className=\"grid grid-cols-3 gap-4\">\n * {affiliates.map(affiliate => (\n * <AffiliateCard key={affiliate.id} affiliate={affiliate} />\n * ))}\n * </div>\n * )\n * }\n * ```\n */\nexport function useAffiliates(): UseAffiliatesResult {\n const [affiliates, setAffiliates] = useState<AffiliateWithOffers[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n async function load() {\n try {\n setIsLoading(true)\n setError(null)\n const data = await fetchAffiliates()\n setAffiliates(data)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load affiliates')\n } finally {\n setIsLoading(false)\n }\n }\n \n load()\n }, [])\n\n return {\n affiliates,\n isLoading,\n error,\n getTrackingUrl,\n }\n}\n","/**\n * @uptrade/site-kit/affiliates - AffiliatesWidget Component\n * \n * Unstyled, headless component for displaying affiliates.\n * Client sites can wrap this or use it directly with their own styling.\n */\n\n'use client'\n\nimport React from 'react'\nimport { useAffiliates } from './useAffiliates'\nimport type { AffiliateWithOffers, AffiliateOffer } from './types'\n\n// ============================================\n// Affiliate Card (Unstyled)\n// ============================================\n\nexport interface AffiliateCardProps {\n affiliate: AffiliateWithOffers\n className?: string\n /** Optional custom render for the logo */\n renderLogo?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Show offers as links below the card */\n showOffers?: boolean\n}\n\n/**\n * Single affiliate card - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * <AffiliateCard \n * affiliate={affiliate}\n * className=\"p-4 bg-white rounded-lg shadow\"\n * showOffers\n * />\n * ```\n */\nexport function AffiliateCard({\n affiliate,\n className = '',\n renderLogo,\n showOffers = false,\n}: AffiliateCardProps) {\n const { getTrackingUrl } = useAffiliates()\n \n const defaultLogo = (\n <div data-affiliate-logo className=\"affiliate-logo\">\n {affiliate.logo_url ? (\n <img \n src={affiliate.logo_url} \n alt={affiliate.name}\n loading=\"lazy\"\n />\n ) : (\n <span>{affiliate.name.charAt(0)}</span>\n )}\n </div>\n )\n\n return (\n <div className={className} data-affiliate-card data-affiliate-id={affiliate.id}>\n {/* Logo */}\n {renderLogo ? renderLogo(affiliate) : defaultLogo}\n \n {/* Name */}\n <div data-affiliate-name className=\"affiliate-name\">\n {affiliate.name}\n </div>\n \n {/* Website link */}\n {affiliate.website_url && (\n <a \n href={affiliate.website_url}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-website\n className=\"affiliate-website\"\n >\n Visit Website\n </a>\n )}\n \n {/* Offers */}\n {showOffers && affiliate.offers && affiliate.offers.length > 0 && (\n <div data-affiliate-offers className=\"affiliate-offers\">\n {affiliate.offers.map(offer => (\n <a\n key={offer.id}\n href={getTrackingUrl(affiliate.id, offer.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-offer\n data-offer-id={offer.id}\n className=\"affiliate-offer\"\n >\n {offer.name}\n </a>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ============================================\n// Affiliates Grid (Unstyled)\n// ============================================\n\nexport interface AffiliatesWidgetProps {\n className?: string\n /** Custom loading component */\n loadingComponent?: React.ReactNode\n /** Custom empty state component */\n emptyComponent?: React.ReactNode\n /** Custom error component */\n errorComponent?: React.ReactNode\n /** Show offers on each card */\n showOffers?: boolean\n /** Custom render function for each affiliate */\n renderAffiliate?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Maximum number to display */\n limit?: number\n}\n\n/**\n * Display a grid of affiliates - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * // Basic usage\n * <AffiliatesWidget className=\"grid grid-cols-3 gap-4\" />\n * \n * // With custom rendering\n * <AffiliatesWidget\n * renderAffiliate={(affiliate) => (\n * <MyCustomCard key={affiliate.id} data={affiliate} />\n * )}\n * />\n * ```\n */\nexport function AffiliatesWidget({\n className = '',\n loadingComponent,\n emptyComponent,\n errorComponent,\n showOffers = false,\n renderAffiliate,\n limit,\n}: AffiliatesWidgetProps) {\n const { affiliates, isLoading, error, getTrackingUrl } = useAffiliates()\n \n if (isLoading) {\n return loadingComponent || <div data-affiliates-loading>Loading affiliates...</div>\n }\n \n if (error) {\n return errorComponent || <div data-affiliates-error>{error}</div>\n }\n \n const displayAffiliates = limit ? affiliates.slice(0, limit) : affiliates\n \n if (displayAffiliates.length === 0) {\n return emptyComponent || null\n }\n \n return (\n <div className={className} data-affiliates-widget>\n {displayAffiliates.map(affiliate => \n renderAffiliate \n ? renderAffiliate(affiliate)\n : <AffiliateCard \n key={affiliate.id} \n affiliate={affiliate} \n showOffers={showOffers}\n />\n )}\n </div>\n )\n}\n","/**\n * @uptrade/site-kit/signal - SignalExperiment\n * \n * A/B test component that renders different variants based on Signal assignment.\n * Uses Thompson Sampling (Bayesian bandit) for optimization.\n */\n\n'use client'\n\nimport React, { useMemo, useEffect } from 'react'\nimport { useSignalExperiment, useSignalEvent } from './SignalBridge'\n\ninterface SignalExperimentProps {\n /** Unique experiment ID */\n experimentId: string\n \n /** Variants to test - keys are variant names, values are React nodes */\n variants: Record<string, React.ReactNode>\n \n /** Fallback content if no assignment (defaults to 'control' variant) */\n fallback?: React.ReactNode\n \n /** Track impression automatically */\n trackImpression?: boolean\n \n /** Children function for more control */\n children?: (props: { variant: string; isControl: boolean }) => React.ReactNode\n}\n\n/**\n * Renders different content variants based on Signal's A/B assignment.\n * \n * @example\n * // Simple variant switching\n * <SignalExperiment experimentId=\"hero-cta\" variants={{\n * control: <Button>Get Started</Button>,\n * variant_a: <Button variant=\"primary\">Start Free Trial</Button>,\n * variant_b: <Button variant=\"secondary\">Book a Demo</Button>,\n * }} />\n * \n * @example\n * // With render prop for more control\n * <SignalExperiment experimentId=\"pricing-layout\">\n * {({ variant, isControl }) => (\n * <PricingSection layout={isControl ? 'cards' : 'table'} />\n * )}\n * </SignalExperiment>\n */\nexport function SignalExperiment({\n experimentId,\n variants,\n fallback,\n trackImpression = true,\n children,\n}: SignalExperimentProps) {\n const { assignment, variant, isControl } = useSignalExperiment(experimentId)\n const trackEvent = useSignalEvent()\n \n // Track impression when variant is rendered\n useEffect(() => {\n if (trackImpression && variant) {\n trackEvent({\n event_type: 'experiment',\n event_name: 'impression',\n event_data: {\n experiment_id: experimentId,\n variant_key: variant,\n },\n })\n }\n }, [experimentId, variant, trackImpression, trackEvent])\n \n // If using render prop\n if (children) {\n return <>{children({ variant: variant || 'control', isControl })}</>\n }\n \n // Determine what to render\n const selectedVariant = variant || 'control'\n const content = variants[selectedVariant]\n \n if (content !== undefined) {\n return <>{content}</>\n }\n \n // Fallback to provided fallback or control\n if (fallback) {\n return <>{fallback}</>\n }\n \n return <>{variants.control || null}</>\n}\n\n/**\n * Hook for conditional experiment logic\n * \n * @example\n * const { variant, isControl } = useExperimentVariant('pricing-test')\n * \n * return isControl \n * ? <OldPricing />\n * : <NewPricing showAnnual={variant === 'annual_first'} />\n */\nexport function useExperimentVariant(experimentId: string) {\n return useSignalExperiment(experimentId)\n}\n\n/**\n * Component for tracking experiment conversions\n * Wraps interactive elements to track when they convert\n * \n * @example\n * <SignalExperiment experimentId=\"signup-button\" variants={{\n * control: (\n * <ExperimentConversion experimentId=\"signup-button\" outcomeType=\"click\">\n * <Button>Sign Up</Button>\n * </ExperimentConversion>\n * ),\n * variant_a: (\n * <ExperimentConversion experimentId=\"signup-button\" outcomeType=\"click\">\n * <Button variant=\"large\">Join Now - It's Free!</Button>\n * </ExperimentConversion>\n * ),\n * }} />\n */\nexport function ExperimentConversion({\n experimentId,\n outcomeType = 'click',\n value,\n children,\n}: {\n experimentId: string\n outcomeType?: string\n value?: number\n children: React.ReactElement\n}) {\n const trackEvent = useSignalEvent()\n const { variant } = useSignalExperiment(experimentId)\n \n const handleInteraction = () => {\n trackEvent({\n event_type: 'experiment',\n event_name: 'conversion',\n event_data: {\n experiment_id: experimentId,\n variant_key: variant,\n outcome_type: outcomeType,\n value,\n },\n })\n }\n \n return React.cloneElement(children, {\n onClick: (e: React.MouseEvent) => {\n handleInteraction()\n // Call original onClick if exists\n if (children.props.onClick) {\n children.props.onClick(e)\n }\n },\n })\n}\n","/**\n * @uptrade/site-kit/setup - Conversational Setup Assistant\n * \n * AI-powered conversational interface for setting up site-kit.\n * Uses Echo/Signal to guide users through configuration.\n * \n * Features:\n * - Streaming AI responses for real-time feedback\n * - Brand extraction from existing websites\n * - Module recommendations based on business type\n * - Integration verification\n * - Copilot instructions generation\n */\n\n'use client'\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react'\n\n// ============================================\n// Types\n// ============================================\n\ninterface Message {\n id: string\n role: 'assistant' | 'user' | 'system'\n content: string\n timestamp: Date\n actions?: ActionButton[]\n component?: React.ReactNode\n isStreaming?: boolean\n}\n\ninterface ActionButton {\n id: string\n label: string\n action: string\n variant?: 'primary' | 'secondary' | 'outline'\n data?: Record<string, unknown>\n}\n\ninterface SetupContext {\n flow: 'new' | 'existing' | 'rebuild' | null\n step: string\n project_id?: string\n org_id?: string\n domain?: string\n business_type?: string\n scan_results?: ScanResults\n scrape_results?: ScrapeResults\n selected_modules?: string[]\n brand?: BrandInfo\n}\n\ninterface ScanResults {\n forms: { file: string; form_library: string; fields: number }[]\n widgets: { file: string; widget_type: string }[]\n metadata: { file: string; type: string }[]\n sitemaps: { file: string; type: string }[]\n}\n\ninterface ScrapeResults {\n scrape_id: string\n domain: string\n pages_found: number\n faqs_imported: number\n routes: { path: string; title: string }[]\n brand?: BrandInfo\n}\n\ninterface BrandInfo {\n business_name: string\n tagline?: string\n primary_color?: string\n secondary_color?: string\n logo_url?: string\n phone_numbers?: string[]\n email_addresses?: string[]\n social_profiles?: Record<string, string>\n}\n\ninterface SetupState {\n step: 'welcome' | 'auth' | 'project' | 'modules' | 'config' | 'verify' | 'complete'\n isAuthenticated: boolean\n userEmail?: string\n accessToken?: string\n selectedOrg?: { id: string; name: string }\n selectedProject?: { id: string; name: string; domain: string }\n selectedModules: string[]\n config: Record<string, unknown>\n errors: string[]\n context: SetupContext\n}\n\ninterface SetupAssistantProps {\n /** Portal API URL */\n apiUrl?: string\n \n /** Signal API URL for AI chat */\n signalUrl?: string\n \n /** Supabase URL for auth */\n supabaseUrl?: string\n \n /** Supabase anon key */\n supabaseKey?: string\n \n /** Pre-selected project ID (if coming from Portal) */\n projectId?: string\n \n /** Pre-selected org ID (if coming from Portal) */\n orgId?: string\n \n /** Auth token (if already authenticated) */\n authToken?: string\n \n /** Callback when setup is complete */\n onComplete?: (config: SetupState) => void\n \n /** Custom welcome message */\n welcomeMessage?: string\n}\n\n// ============================================\n// Styles (inline for portability)\n// ============================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column' as const,\n height: '100vh',\n maxWidth: '800px',\n margin: '0 auto',\n padding: '1rem',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '1rem 0',\n borderBottom: '1px solid #e5e7eb',\n },\n logo: {\n width: '32px',\n height: '32px',\n borderRadius: '8px',\n background: 'linear-gradient(135deg, #3b82f6, #8b5cf6)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'white',\n fontWeight: 'bold',\n },\n title: {\n fontSize: '1.25rem',\n fontWeight: '600',\n color: '#111827',\n },\n subtitle: {\n fontSize: '0.875rem',\n color: '#6b7280',\n },\n messages: {\n flex: 1,\n overflowY: 'auto' as const,\n padding: '1rem 0',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '1rem',\n },\n message: {\n display: 'flex',\n gap: '0.75rem',\n maxWidth: '85%',\n },\n messageAssistant: {\n alignSelf: 'flex-start',\n },\n messageUser: {\n alignSelf: 'flex-end',\n flexDirection: 'row-reverse' as const,\n },\n avatar: {\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.875rem',\n flexShrink: 0,\n },\n avatarAssistant: {\n background: 'linear-gradient(135deg, #3b82f6, #8b5cf6)',\n color: 'white',\n },\n avatarUser: {\n background: '#e5e7eb',\n color: '#374151',\n },\n bubble: {\n padding: '0.75rem 1rem',\n borderRadius: '1rem',\n fontSize: '0.9375rem',\n lineHeight: '1.5',\n },\n bubbleAssistant: {\n background: '#f3f4f6',\n color: '#111827',\n borderTopLeftRadius: '4px',\n },\n bubbleUser: {\n background: '#3b82f6',\n color: 'white',\n borderTopRightRadius: '4px',\n },\n actions: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '0.5rem',\n marginTop: '0.75rem',\n },\n actionButton: {\n padding: '0.5rem 1rem',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n fontWeight: '500',\n cursor: 'pointer',\n border: 'none',\n transition: 'all 0.15s',\n },\n actionPrimary: {\n background: '#3b82f6',\n color: 'white',\n },\n actionSecondary: {\n background: '#e5e7eb',\n color: '#374151',\n },\n actionOutline: {\n background: 'transparent',\n color: '#3b82f6',\n border: '1px solid #3b82f6',\n },\n inputContainer: {\n display: 'flex',\n gap: '0.5rem',\n padding: '1rem 0',\n borderTop: '1px solid #e5e7eb',\n },\n input: {\n flex: 1,\n padding: '0.75rem 1rem',\n borderRadius: '0.75rem',\n border: '1px solid #d1d5db',\n fontSize: '0.9375rem',\n outline: 'none',\n },\n sendButton: {\n padding: '0.75rem 1.5rem',\n borderRadius: '0.75rem',\n background: '#3b82f6',\n color: 'white',\n border: 'none',\n fontWeight: '500',\n cursor: 'pointer',\n },\n typing: {\n display: 'flex',\n gap: '4px',\n padding: '0.75rem 1rem',\n background: '#f3f4f6',\n borderRadius: '1rem',\n width: 'fit-content',\n },\n typingDot: {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n background: '#9ca3af',\n animation: 'typing 1.4s infinite',\n },\n moduleCard: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.75rem',\n background: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.5rem',\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n moduleCardSelected: {\n borderColor: '#3b82f6',\n background: '#eff6ff',\n },\n moduleIcon: {\n fontSize: '1.5rem',\n },\n moduleInfo: {\n flex: 1,\n },\n moduleName: {\n fontWeight: '500',\n color: '#111827',\n },\n moduleDesc: {\n fontSize: '0.75rem',\n color: '#6b7280',\n },\n checkbox: {\n width: '20px',\n height: '20px',\n accentColor: '#3b82f6',\n },\n}\n\n// ============================================\n// Available Modules\n// ============================================\n\nconst MODULES = [\n { id: 'analytics', name: 'Analytics', icon: '📊', description: 'Page views, events, sessions, web vitals', recommended: true },\n { id: 'seo', name: 'SEO', icon: '🔍', description: 'Managed FAQs, meta tags, schema markup', recommended: true },\n { id: 'forms', name: 'Forms', icon: '📝', description: 'Portal-managed forms with submissions', recommended: true },\n { id: 'engage', name: 'Engage', icon: '💬', description: 'Live chat, popups, nudges, banners', recommended: false },\n { id: 'commerce', name: 'Commerce', icon: '🛒', description: 'Products, services, checkout', recommended: false },\n { id: 'signal', name: 'Signal AI', icon: '🤖', description: 'Autonomous optimization & A/B testing', recommended: false },\n]\n\n// ============================================\n// Setup Assistant Component\n// ============================================\n\nexport function SetupAssistant({\n apiUrl = 'https://api.uptrademedia.com',\n signalUrl = 'https://signal.uptrademedia.com',\n supabaseUrl,\n supabaseKey,\n projectId,\n orgId,\n authToken,\n onComplete,\n welcomeMessage,\n}: SetupAssistantProps) {\n const [messages, setMessages] = useState<Message[]>([])\n const [input, setInput] = useState('')\n const [isTyping, setIsTyping] = useState(false)\n const [isExtracting, setIsExtracting] = useState(false)\n const [state, setState] = useState<SetupState>({\n step: 'welcome',\n isAuthenticated: !!authToken,\n selectedModules: ['analytics', 'seo', 'forms'],\n config: {},\n errors: [],\n context: {\n flow: null,\n step: 'welcome',\n project_id: projectId,\n org_id: orgId,\n },\n })\n \n const messagesEndRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const streamingMessageRef = useRef<string | null>(null)\n \n // ============================================\n // Signal API Integration with Streaming\n // ============================================\n \n const sendToSignalStreaming = useCallback(async (\n message: string, \n context: SetupContext,\n onToken: (token: string) => void,\n onComplete: (result: { actions?: ActionButton[]; updated_context?: Partial<SetupContext> }) => void\n ): Promise<void> => {\n try {\n const response = await fetch(`${signalUrl}/api/skills/setup/chat/stream`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({\n message,\n context,\n project_id: projectId,\n org_id: orgId,\n }),\n })\n \n if (!response.ok) {\n throw new Error('Signal API error')\n }\n \n const reader = response.body?.getReader()\n if (!reader) throw new Error('No response body')\n \n const decoder = new TextDecoder()\n let buffer = ''\n let actions: ActionButton[] = []\n let updatedContext: Partial<SetupContext> = {}\n \n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n \n buffer += decoder.decode(value, { stream: true })\n \n // Process SSE events\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n \n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6)\n if (data === '[DONE]') continue\n \n try {\n const event = JSON.parse(data)\n \n if (event.type === 'token') {\n onToken(event.content)\n } else if (event.type === 'actions') {\n actions = event.actions\n } else if (event.type === 'context') {\n updatedContext = event.context\n }\n } catch {\n // Non-JSON data, treat as token\n onToken(data)\n }\n }\n }\n }\n \n onComplete({ actions, updated_context: updatedContext })\n } catch (error) {\n console.error('Signal streaming error:', error)\n // Fallback to non-streaming\n const result = await sendToSignal(message, context)\n onToken(result.response)\n onComplete({ actions: result.actions, updated_context: result.updated_context })\n }\n }, [signalUrl, authToken, projectId, orgId])\n \n const sendToSignal = useCallback(async (message: string, context: SetupContext): Promise<{\n response: string\n actions?: ActionButton[]\n updated_context?: Partial<SetupContext>\n }> => {\n try {\n const response = await fetch(`${signalUrl}/api/skills/setup/chat`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({\n message,\n context,\n project_id: projectId,\n org_id: orgId,\n }),\n })\n \n if (!response.ok) {\n throw new Error('Signal API error')\n }\n \n return await response.json()\n } catch (error) {\n console.error('Signal API error:', error)\n // Fallback to local handling\n return {\n response: 'I had trouble connecting to Signal. Let me help you locally.',\n actions: [\n { id: '1', label: 'Continue', action: 'continue_local', variant: 'primary' },\n ],\n }\n }\n }, [signalUrl, authToken, projectId, orgId])\n \n // ============================================\n // Brand Extraction\n // ============================================\n \n const extractBrandFromDomain = useCallback(async (domain: string): Promise<BrandInfo | null> => {\n setIsExtracting(true)\n try {\n const response = await fetch(`${apiUrl}/site-scrape/brand-only`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({ domain }),\n })\n \n if (!response.ok) {\n throw new Error('Brand extraction failed')\n }\n \n const data = await response.json()\n return {\n business_name: data.business_name,\n tagline: data.tagline,\n primary_color: data.primary_color,\n secondary_color: data.secondary_color,\n logo_url: data.logo_url,\n phone_numbers: data.phone_numbers,\n email_addresses: data.email_addresses,\n social_profiles: data.social_profiles,\n }\n } catch (error) {\n console.error('Brand extraction error:', error)\n return null\n } finally {\n setIsExtracting(false)\n }\n }, [apiUrl, authToken])\n\n // ============================================\n // Message Helpers\n // ============================================\n \n const addMessage = useCallback((message: Omit<Message, 'id' | 'timestamp'>) => {\n const newMessage: Message = {\n ...message,\n id: crypto.randomUUID(),\n timestamp: new Date(),\n }\n setMessages(prev => [...prev, newMessage])\n return newMessage\n }, [])\n \n const updateMessage = useCallback((id: string, update: Partial<Message>) => {\n setMessages(prev => prev.map(m => \n m.id === id ? { ...m, ...update } : m\n ))\n }, [])\n \n const addStreamingMessage = useCallback(() => {\n const id = crypto.randomUUID()\n const newMessage: Message = {\n id,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n isStreaming: true,\n }\n setMessages(prev => [...prev, newMessage])\n streamingMessageRef.current = id\n return id\n }, [])\n \n const appendToStreamingMessage = useCallback((token: string) => {\n const id = streamingMessageRef.current\n if (!id) return\n \n setMessages(prev => prev.map(m => \n m.id === id ? { ...m, content: m.content + token } : m\n ))\n }, [])\n \n const finalizeStreamingMessage = useCallback((actions?: ActionButton[]) => {\n const id = streamingMessageRef.current\n if (!id) return\n \n setMessages(prev => prev.map(m => \n m.id === id ? { ...m, isStreaming: false, actions } : m\n ))\n streamingMessageRef.current = null\n }, [])\n \n const addAssistantMessage = useCallback((\n content: string, \n actions?: ActionButton[],\n component?: React.ReactNode\n ) => {\n setIsTyping(true)\n // Simulate typing delay\n setTimeout(() => {\n setIsTyping(false)\n addMessage({ role: 'assistant', content, actions, component })\n }, 500 + Math.random() * 500)\n }, [addMessage])\n \n const scrollToBottom = useCallback(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [])\n \n useEffect(() => {\n scrollToBottom()\n }, [messages, isTyping, scrollToBottom])\n\n // ============================================\n // Welcome Flow\n // ============================================\n \n useEffect(() => {\n // Initial welcome message with flow selection\n const welcome = welcomeMessage || \n `Hey! 👋 I'm Signal, your AI setup assistant.\\n\\nI'll help you integrate Uptrade Site-Kit into your project. What are we working with today?`\n \n setTimeout(() => {\n addAssistantMessage(welcome, [\n { id: '1', label: '🆕 New Site', action: 'set_flow_new', variant: 'primary' },\n { id: '2', label: '📁 Existing Project', action: 'set_flow_existing', variant: 'secondary' },\n { id: '3', label: '🔄 Rebuild from Live Site', action: 'set_flow_rebuild', variant: 'outline' },\n ])\n }, 500)\n }, [])\n\n // ============================================\n // Action Handlers\n // ============================================\n \n const handleAction = useCallback(async (action: string, data?: Record<string, unknown>) => {\n switch (action) {\n case 'start':\n addMessage({ role: 'user', content: \"Let's do it!\" })\n setState(prev => ({ ...prev, step: 'auth' }))\n addAssistantMessage(\n `Great! First, let's connect to your Uptrade Portal account.\\n\\nYou can sign in with your existing Portal credentials:`,\n [\n { id: '1', label: 'Sign in with Email', action: 'auth_email', variant: 'primary' },\n { id: '2', label: 'Sign in with Google', action: 'auth_google', variant: 'secondary' },\n { id: '3', label: \"I don't have an account\", action: 'auth_signup', variant: 'outline' },\n ]\n )\n break\n \n case 'explain':\n addMessage({ role: 'user', content: 'Tell me more first' })\n addAssistantMessage(\n `Uptrade Site-Kit is a lightweight package that connects your site to the Uptrade Portal.\\n\\n` +\n `Here's what you can enable:\\n\\n` +\n `📊 **Analytics** - Track page views, events, and Core Web Vitals\\n` +\n `🔍 **SEO** - Managed meta tags, FAQs, and schema markup\\n` +\n `📝 **Forms** - Portal-managed forms with spam protection\\n` +\n `💬 **Engage** - Live chat, popups, and nudges\\n` +\n `🛒 **Commerce** - Products, services, and checkout\\n` +\n `🤖 **Signal AI** - Autonomous optimization and A/B testing\\n\\n` +\n `You only pay for what you use, and everything is managed from your Portal dashboard.`,\n [\n { id: '1', label: \"Sounds good, let's set it up\", action: 'start', variant: 'primary' },\n ]\n )\n break\n \n case 'auth_email':\n addMessage({ role: 'user', content: 'Sign in with Email' })\n addAssistantMessage(\n `What's your Portal email address?`\n )\n setState(prev => ({ ...prev, step: 'auth' }))\n // Focus input for email entry\n setTimeout(() => inputRef.current?.focus(), 600)\n break\n \n case 'auth_google':\n addMessage({ role: 'user', content: 'Sign in with Google' })\n addAssistantMessage(\n `Opening Google sign-in... (In a real implementation, this would trigger OAuth)`\n )\n // Simulate successful auth\n setTimeout(() => {\n setState(prev => ({ \n ...prev, \n step: 'project',\n isAuthenticated: true,\n userEmail: 'user@example.com',\n }))\n handleAuthSuccess('user@example.com')\n }, 1500)\n break\n \n case 'select_project':\n addMessage({ role: 'user', content: `Selected: ${(data as any)?.name}` })\n setState(prev => ({ \n ...prev, \n step: 'modules',\n selectedProject: data as any,\n }))\n showModuleSelection()\n break\n \n case 'confirm_modules':\n addMessage({ role: 'user', content: `Selected ${state.selectedModules.length} modules` })\n setState(prev => ({ ...prev, step: 'config' }))\n showConfigGeneration()\n break\n \n case 'copy_code':\n addMessage({ role: 'user', content: 'Copy integration code' })\n // Copy to clipboard (would be implemented)\n addAssistantMessage(\n `✅ Code copied to clipboard!\\n\\nPaste this in your root layout file (e.g., \\`app/layout.tsx\\` or \\`pages/_app.tsx\\`).\\n\\nWant me to help you verify the integration?`,\n [\n { id: '1', label: 'Yes, verify my setup', action: 'verify', variant: 'primary' },\n { id: '2', label: \"I'm all set, thanks!\", action: 'complete', variant: 'outline' },\n ]\n )\n break\n \n case 'verify':\n addMessage({ role: 'user', content: 'Verify my setup' })\n setState(prev => ({ ...prev, step: 'verify' }))\n addAssistantMessage(\n `To verify your setup, start your dev server and visit any page.\\n\\n` +\n `I'll check for:\\n` +\n `• ✓ SiteKitProvider is loading\\n` +\n `• ✓ API key is valid\\n` +\n `• ✓ Analytics events are sending\\n` +\n `• ✓ Modules are initializing\\n\\n` +\n `Run \\`npm run dev\\` and let me know when you're ready:`,\n [\n { id: '1', label: 'My dev server is running', action: 'check_connection', variant: 'primary' },\n ]\n )\n break\n \n case 'check_connection':\n addMessage({ role: 'user', content: 'My dev server is running' })\n setIsTyping(true)\n // Simulate verification check\n setTimeout(() => {\n setIsTyping(false)\n addAssistantMessage(\n `🎉 **Everything looks great!**\\n\\n` +\n `I detected your site at \\`localhost:3000\\` and verified:\\n\\n` +\n `✅ SiteKitProvider initialized\\n` +\n `✅ API key authenticated\\n` +\n `✅ Analytics tracking active\\n` +\n `✅ SEO components ready\\n\\n` +\n `You're all set! Your data will start appearing in your Portal dashboard within a few minutes.`,\n [\n { id: '1', label: 'Open Portal Dashboard', action: 'open_dashboard', variant: 'primary' },\n { id: '2', label: 'Enable Signal AI', action: 'enable_signal', variant: 'secondary' },\n ]\n )\n setState(prev => ({ ...prev, step: 'complete' }))\n }, 2000)\n break\n \n case 'complete':\n addMessage({ role: 'user', content: \"I'm all set, thanks!\" })\n addAssistantMessage(\n `Awesome! 🚀\\n\\n` +\n `Your site-kit integration is ready. Here's what happens next:\\n\\n` +\n `• Analytics data will appear in Portal within ~5 minutes\\n` +\n `• You can manage SEO, forms, and engage from the dashboard\\n` +\n `• If you enabled Signal, it'll start learning from your traffic\\n\\n` +\n `Need help anytime? Just come back to \\`/_uptrade/setup\\` or ping us in Portal.\\n\\n` +\n `Happy building! 🎨`\n )\n onComplete?.(state)\n break\n \n case 'enable_signal':\n addMessage({ role: 'user', content: 'Enable Signal AI' })\n addAssistantMessage(\n `Great choice! 🤖\\n\\n` +\n `Signal AI will:\\n` +\n `• Monitor your site for SEO issues\\n` +\n `• Run A/B tests on CTAs and content\\n` +\n `• Optimize popups and engagement timing\\n` +\n `• Learn from user behavior to improve conversions\\n\\n` +\n `To enable Signal, add \\`signal={{ enabled: true }}\\` to your SiteKitProvider:\\n\\n` +\n `\\`\\`\\`tsx\\n` +\n `<SiteKitProvider\\n` +\n ` apiKey={process.env.NEXT_PUBLIC_UPTRADE_API_KEY!}\\n` +\n ` analytics={{ enabled: true }}\\n` +\n ` signal={{ enabled: true }} // Add this\\n` +\n `>\\n` +\n `\\`\\`\\`\\n\\n` +\n `Signal requires the Business plan. Want me to check your plan?`,\n [\n { id: '1', label: 'Check my plan', action: 'check_plan', variant: 'primary' },\n { id: '2', label: \"I'll do this later\", action: 'complete', variant: 'outline' },\n ]\n )\n break\n \n case 'confirm_brand':\n addMessage({ role: 'user', content: 'Brand info confirmed' })\n setState(prev => ({ ...prev, step: 'modules' }))\n showModuleSelectionWithRecommendations()\n break\n \n case 'edit_brand':\n addMessage({ role: 'user', content: 'Edit brand info' })\n addAssistantMessage(\n `No problem! Let me know what to change:\\n\\n` +\n `• Business name\\n` +\n `• Primary color (hex like #3b82f6)\\n` +\n `• Tagline\\n\\n` +\n `Just type what you'd like to update.`\n )\n break\n \n case 'manual_brand':\n addMessage({ role: 'user', content: 'Enter brand manually' })\n addAssistantMessage(\n `Sure! What's your business name?`\n )\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, step: 'brand_manual' } \n }))\n break\n \n case 'skip_brand':\n addMessage({ role: 'user', content: 'Skip brand for now' })\n setState(prev => ({ ...prev, step: 'modules' }))\n showModuleSelection()\n break\n \n case 'extract_brand':\n addMessage({ role: 'user', content: 'Extract from website' })\n addAssistantMessage(\n `What's the website URL? I'll extract the brand colors, name, and logo.`\n )\n break\n \n case 'set_flow_new':\n addMessage({ role: 'user', content: 'New Site' })\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, flow: 'new', step: 'brand' }\n }))\n addAssistantMessage(\n `Great! For a new site, I'll help you:\\n\\n` +\n `1. Set up your brand (colors, name)\\n` +\n `2. Choose which modules to enable\\n` +\n `3. Generate integration code\\n\\n` +\n `Do you have an existing website I can extract brand info from? Or would you prefer to enter it manually?`,\n [\n { id: '1', label: 'Extract from website', action: 'extract_brand', variant: 'primary' },\n { id: '2', label: 'Enter manually', action: 'manual_brand', variant: 'outline' },\n { id: '3', label: 'Skip for now', action: 'skip_brand', variant: 'outline' },\n ]\n )\n break\n \n case 'set_flow_existing':\n addMessage({ role: 'user', content: 'Existing Project' })\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, flow: 'existing', step: 'scan' }\n }))\n addAssistantMessage(\n `For an existing project, I can scan your codebase to find:\\n\\n` +\n `• Forms to migrate (contact forms, newsletter signups)\\n` +\n `• Chat widgets to replace (Intercom, Crisp, etc.)\\n` +\n `• Metadata patterns to enhance\\n` +\n `• Sitemap configuration\\n\\n` +\n `Run this in your project root:\\n\\n` +\n `\\`\\`\\`bash\\nnpx @uptrade/site-kit scan\\n\\`\\`\\`\\n\\n` +\n `Then paste the output here, or tell me about your project.`,\n [\n { id: '1', label: 'I ran the scan', action: 'show_scan_results', variant: 'primary' },\n { id: '2', label: 'Skip scan', action: 'skip_scan', variant: 'outline' },\n ]\n )\n break\n \n case 'set_flow_rebuild':\n addMessage({ role: 'user', content: 'Rebuild from Live Site' })\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, flow: 'rebuild', step: 'scrape' }\n }))\n addAssistantMessage(\n `I'll help you rebuild with site-kit. Enter the live site URL and I'll:\\n\\n` +\n `• Extract brand colors and business info\\n` +\n `• Import FAQs with schema markup\\n` +\n `• Suggest redirect mappings\\n` +\n `• Generate copilot-instructions.md\\n\\n` +\n `What's the website URL?`\n )\n break\n \n case 'show_scan_results':\n addMessage({ role: 'user', content: 'I ran the scan' })\n addAssistantMessage(\n `Great! Paste the scan output here, or describe what you found.\\n\\n` +\n `I'll analyze the results and recommend a migration plan.`\n )\n break\n \n case 'skip_scan':\n addMessage({ role: 'user', content: 'Skip scan' })\n setState(prev => ({ ...prev, step: 'modules' }))\n showModuleSelection()\n break\n \n case 'generate_redirects':\n addMessage({ role: 'user', content: 'Generate redirects' })\n if (state.context.scrape_results?.routes) {\n addStreamingMessage()\n await sendToSignalStreaming(\n `Generate SEO-optimized redirects for these routes: ${JSON.stringify(state.context.scrape_results.routes)}`,\n state.context,\n (token) => appendToStreamingMessage(token),\n (result) => finalizeStreamingMessage(result.actions)\n )\n } else {\n addAssistantMessage(\n `I need a list of routes to generate redirects. Would you like to:\\n\\n` +\n `1. Scrape a website for routes\\n` +\n `2. Paste a list of URLs\\n\\n` +\n `What's easier?`,\n [\n { id: '1', label: 'Scrape website', action: 'set_flow_rebuild', variant: 'primary' },\n { id: '2', label: 'Paste URLs', action: 'paste_urls', variant: 'outline' },\n ]\n )\n }\n break\n \n case 'generate_copilot_instructions':\n addMessage({ role: 'user', content: 'Generate Copilot instructions' })\n addStreamingMessage()\n await sendToSignalStreaming(\n `Generate copilot-instructions.md for project with modules: ${state.selectedModules.join(', ')} and brand: ${state.context.brand?.business_name || 'Unknown'}`,\n state.context,\n (token) => appendToStreamingMessage(token),\n (result) => {\n finalizeStreamingMessage([\n { id: '1', label: '📋 Copy to clipboard', action: 'copy_copilot_instructions', variant: 'primary' },\n { id: '2', label: 'Continue', action: 'complete', variant: 'outline' },\n ])\n }\n )\n break\n \n case 'verify_now':\n addMessage({ role: 'user', content: 'Verify integration' })\n verifyIntegration()\n break\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addMessage, addAssistantMessage, addStreamingMessage, appendToStreamingMessage, finalizeStreamingMessage, sendToSignalStreaming, state, onComplete])\n \n // ============================================\n // Auth Success Handler\n // ============================================\n \n const handleAuthSuccess = useCallback((email: string) => {\n addAssistantMessage(\n `Welcome back, ${email.split('@')[0]}! 👋\\n\\n` +\n `I found these projects in your account. Which one are we setting up?`,\n [\n { id: '1', label: 'MyCompany.com', action: 'select_project', variant: 'secondary', data: { id: '1', name: 'MyCompany.com', domain: 'mycompany.com' } },\n { id: '2', label: 'Blog Project', action: 'select_project', variant: 'secondary', data: { id: '2', name: 'Blog Project', domain: 'blog.mycompany.com' } },\n { id: '3', label: '+ Create new project', action: 'create_project', variant: 'outline' },\n ]\n )\n }, [addAssistantMessage])\n \n // ============================================\n // Integration Verification\n // ============================================\n \n const verifyIntegration = useCallback(async () => {\n setState(prev => ({ ...prev, step: 'verify' }))\n setIsTyping(true)\n \n try {\n const response = await fetch(`${signalUrl}/api/skills/setup/verify`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({\n project_id: projectId || state.context.project_id,\n dev_url: 'http://localhost:3000',\n }),\n })\n \n setIsTyping(false)\n \n if (!response.ok) {\n throw new Error('Verification failed')\n }\n \n const result = await response.json()\n \n if (result.overall_status === 'success') {\n const checkList = result.checks.map((c: { check: string; passed: boolean }) => \n `${c.passed ? '✅' : '❌'} ${c.check.replace(/_/g, ' ')}`\n ).join('\\n')\n \n addAssistantMessage(\n `🎉 **Integration Verified!**\\n\\n${checkList}\\n\\n` +\n `Your site-kit integration is working perfectly. Data will start appearing in Portal shortly.`,\n [\n { id: '1', label: 'Open Portal Dashboard', action: 'open_dashboard', variant: 'primary' },\n { id: '2', label: 'Generate Copilot Instructions', action: 'generate_copilot_instructions', variant: 'secondary' },\n ]\n )\n setState(prev => ({ ...prev, step: 'complete' }))\n } else {\n const issues = result.issues?.join('\\n• ') || 'Unknown issue'\n addAssistantMessage(\n `⚠️ **Verification Found Issues**\\n\\n• ${issues}\\n\\n` +\n `Would you like help troubleshooting?`,\n [\n { id: '1', label: 'Help me fix this', action: 'troubleshoot', variant: 'primary' },\n { id: '2', label: 'Skip for now', action: 'complete', variant: 'outline' },\n ]\n )\n }\n } catch (error) {\n setIsTyping(false)\n addAssistantMessage(\n `I couldn't verify the integration automatically. Make sure your dev server is running.\\n\\n` +\n `You can manually verify by:\\n` +\n `1. Opening your site in the browser\\n` +\n `2. Checking the Network tab for requests to api.uptrademedia.com\\n` +\n `3. Looking for analytics events in your Portal dashboard`,\n [\n { id: '1', label: 'Try again', action: 'verify_now', variant: 'primary' },\n { id: '2', label: 'Continue anyway', action: 'complete', variant: 'outline' },\n ]\n )\n }\n }, [signalUrl, authToken, projectId, state.context.project_id, addAssistantMessage])\n \n // ============================================\n // Module Selection with Recommendations\n // ============================================\n \n const showModuleSelectionWithRecommendations = useCallback(async () => {\n const { brand, business_type, scan_results } = state.context\n \n // Get AI recommendations if we have context\n if (brand || business_type) {\n try {\n const result = await sendToSignal(\n `Recommend modules for: ${brand?.business_name || 'Unknown'}, type: ${business_type || 'general'}`,\n { ...state.context, step: 'recommend_modules' }\n )\n \n // Parse recommendations from response\n addAssistantMessage(\n result.response,\n undefined,\n <ModuleSelector\n modules={MODULES}\n selected={state.selectedModules}\n onChange={(modules) => setState(prev => ({ ...prev, selectedModules: modules }))}\n onConfirm={() => handleAction('confirm_modules')}\n />\n )\n return\n } catch (error) {\n // Fall back to default\n }\n }\n \n // Default module selection\n showModuleSelection()\n }, [state.context, state.selectedModules, sendToSignal, handleAction])\n\n // ============================================\n // Module Selection\n // ============================================\n \n const showModuleSelection = useCallback(() => {\n addAssistantMessage(\n `Perfect! Now let's choose which features to enable.\\n\\n` +\n `I've pre-selected the essentials, but you can customize:`,\n undefined,\n <ModuleSelector\n modules={MODULES}\n selected={state.selectedModules}\n onChange={(modules) => setState(prev => ({ ...prev, selectedModules: modules }))}\n onConfirm={() => handleAction('confirm_modules')}\n />\n )\n }, [addAssistantMessage, state.selectedModules, handleAction])\n \n // ============================================\n // Config Generation\n // ============================================\n \n const showConfigGeneration = useCallback(() => {\n const code = generateIntegrationCode(state)\n \n addAssistantMessage(\n `Here's your integration code! 🎉\\n\\n` +\n `Add this to your root layout:`,\n [\n { id: '1', label: '📋 Copy Code', action: 'copy_code', variant: 'primary' },\n ],\n <CodeBlock code={code} />\n )\n }, [addAssistantMessage, state])\n \n // ============================================\n // Text Input Handler\n // ============================================\n \n const handleSubmit = useCallback(async (e: React.FormEvent) => {\n e.preventDefault()\n if (!input.trim()) return\n \n const userInput = input.trim()\n setInput('')\n addMessage({ role: 'user', content: userInput })\n \n // Handle based on current step\n if (state.step === 'auth' && userInput.includes('@')) {\n // Email entered\n setState(prev => ({ \n ...prev, \n isAuthenticated: true,\n userEmail: userInput,\n step: 'project',\n }))\n addAssistantMessage(\n `Sending magic link to ${userInput}...\\n\\n` +\n `(In production, you'd receive an email. For now, I'll simulate a successful login.)`,\n )\n setTimeout(() => handleAuthSuccess(userInput), 1500)\n } else if (userInput.toLowerCase().includes('http') || userInput.match(/^[\\w.-]+\\.[a-z]{2,}$/i)) {\n // URL or domain entered - extract brand\n const domain = userInput.replace(/^https?:\\/\\//, '').split('/')[0]\n setIsTyping(true)\n addAssistantMessage(`Analyzing ${domain} to extract brand information...`)\n \n const brand = await extractBrandFromDomain(domain)\n setIsTyping(false)\n \n if (brand) {\n setState(prev => ({\n ...prev,\n context: { ...prev.context, brand, domain },\n }))\n \n const brandSummary = [\n brand.business_name && `**Business:** ${brand.business_name}`,\n brand.tagline && `**Tagline:** ${brand.tagline}`,\n brand.primary_color && `**Primary Color:** ${brand.primary_color}`,\n brand.phone_numbers?.length && `**Phone:** ${brand.phone_numbers[0]}`,\n ].filter(Boolean).join('\\n')\n \n addAssistantMessage(\n `Found brand information:\\n\\n${brandSummary}\\n\\nDoes this look right?`,\n [\n { id: '1', label: 'Yes, looks good!', action: 'confirm_brand', variant: 'primary' },\n { id: '2', label: 'Edit brand info', action: 'edit_brand', variant: 'outline' },\n ]\n )\n } else {\n addAssistantMessage(\n `I couldn't extract brand info from ${domain}. You can enter it manually, or we can continue without it.`,\n [\n { id: '1', label: 'Enter manually', action: 'manual_brand', variant: 'primary' },\n { id: '2', label: 'Skip for now', action: 'skip_brand', variant: 'outline' },\n ]\n )\n }\n } else {\n // Natural language input - send to Signal API with streaming\n addStreamingMessage()\n \n try {\n await sendToSignalStreaming(\n userInput, \n state.context,\n (token) => appendToStreamingMessage(token),\n (result) => {\n if (result.updated_context) {\n setState(prev => ({\n ...prev,\n context: { ...prev.context, ...result.updated_context },\n }))\n }\n finalizeStreamingMessage(result.actions)\n }\n )\n } catch (error) {\n finalizeStreamingMessage()\n addAssistantMessage(\n `I understand you said: \"${userInput}\"\\n\\n` +\n `Let me help you with that. What would you like to do?`,\n [\n { id: '1', label: 'Continue setup', action: 'start', variant: 'primary' },\n { id: '2', label: 'Ask a question', action: 'help', variant: 'outline' },\n ]\n )\n }\n }\n }, [input, state.step, state.context, addMessage, addAssistantMessage, handleAuthSuccess, sendToSignalStreaming, appendToStreamingMessage, finalizeStreamingMessage, addStreamingMessage, extractBrandFromDomain])\n\n // ============================================\n // Render\n // ============================================\n \n return (\n <div style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n <div style={styles.logo}>U</div>\n <div>\n <div style={styles.title}>Uptrade Setup</div>\n <div style={styles.subtitle}>Site-Kit Integration Wizard</div>\n </div>\n </div>\n \n {/* Messages */}\n <div style={styles.messages}>\n {messages.map(message => (\n <div\n key={message.id}\n style={{\n ...styles.message,\n ...(message.role === 'assistant' ? styles.messageAssistant : styles.messageUser),\n }}\n >\n <div\n style={{\n ...styles.avatar,\n ...(message.role === 'assistant' ? styles.avatarAssistant : styles.avatarUser),\n }}\n >\n {message.role === 'assistant' ? '✨' : '👤'}\n </div>\n <div>\n <div\n style={{\n ...styles.bubble,\n ...(message.role === 'assistant' ? styles.bubbleAssistant : styles.bubbleUser),\n }}\n >\n {message.content.split('\\n').map((line, i) => (\n <React.Fragment key={i}>\n {line}\n {i < message.content.split('\\n').length - 1 && <br />}\n </React.Fragment>\n ))}\n </div>\n \n {/* Custom component */}\n {message.component}\n \n {/* Action buttons */}\n {message.actions && (\n <div style={styles.actions}>\n {message.actions.map(action => (\n <button\n key={action.id}\n onClick={() => handleAction(action.action, action.data)}\n style={{\n ...styles.actionButton,\n ...(action.variant === 'primary' ? styles.actionPrimary : \n action.variant === 'outline' ? styles.actionOutline :\n styles.actionSecondary),\n }}\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n ))}\n \n {/* Typing indicator */}\n {isTyping && (\n <div style={{ ...styles.message, ...styles.messageAssistant }}>\n <div style={{ ...styles.avatar, ...styles.avatarAssistant }}>✨</div>\n <div style={styles.typing}>\n <div style={{ ...styles.typingDot, animationDelay: '0s' }} />\n <div style={{ ...styles.typingDot, animationDelay: '0.2s' }} />\n <div style={{ ...styles.typingDot, animationDelay: '0.4s' }} />\n </div>\n </div>\n )}\n \n <div ref={messagesEndRef} />\n </div>\n \n {/* Input */}\n <form onSubmit={handleSubmit} style={styles.inputContainer}>\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder=\"Type a message...\"\n style={styles.input}\n />\n <button type=\"submit\" style={styles.sendButton}>\n Send\n </button>\n </form>\n \n {/* Typing animation keyframes */}\n <style>{`\n @keyframes typing {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.5; }\n 30% { transform: translateY(-4px); opacity: 1; }\n }\n `}</style>\n </div>\n )\n}\n\n// ============================================\n// Module Selector Component\n// ============================================\n\nfunction ModuleSelector({\n modules,\n selected,\n onChange,\n onConfirm,\n}: {\n modules: typeof MODULES\n selected: string[]\n onChange: (modules: string[]) => void\n onConfirm: () => void\n}) {\n const toggle = (id: string) => {\n onChange(\n selected.includes(id)\n ? selected.filter(m => m !== id)\n : [...selected, id]\n )\n }\n \n return (\n <div style={{ marginTop: '0.75rem', display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {modules.map(module => (\n <div\n key={module.id}\n onClick={() => toggle(module.id)}\n style={{\n ...styles.moduleCard,\n ...(selected.includes(module.id) ? styles.moduleCardSelected : {}),\n }}\n >\n <span style={styles.moduleIcon}>{module.icon}</span>\n <div style={styles.moduleInfo}>\n <div style={styles.moduleName}>\n {module.name}\n {module.recommended && (\n <span style={{ marginLeft: '0.5rem', fontSize: '0.625rem', background: '#dbeafe', color: '#1d4ed8', padding: '2px 6px', borderRadius: '4px' }}>\n Recommended\n </span>\n )}\n </div>\n <div style={styles.moduleDesc}>{module.description}</div>\n </div>\n <input\n type=\"checkbox\"\n checked={selected.includes(module.id)}\n onChange={() => toggle(module.id)}\n style={styles.checkbox}\n />\n </div>\n ))}\n \n <button\n onClick={onConfirm}\n style={{ ...styles.actionButton, ...styles.actionPrimary, marginTop: '0.5rem' }}\n >\n Continue with {selected.length} modules\n </button>\n </div>\n )\n}\n\n// ============================================\n// Code Block Component\n// ============================================\n\nfunction CodeBlock({ code }: { code: string }) {\n return (\n <pre style={{\n marginTop: '0.75rem',\n padding: '1rem',\n background: '#1f2937',\n color: '#e5e7eb',\n borderRadius: '0.5rem',\n fontSize: '0.8125rem',\n overflowX: 'auto',\n fontFamily: 'monospace',\n }}>\n {code}\n </pre>\n )\n}\n\n// ============================================\n// Code Generation\n// ============================================\n\nfunction generateIntegrationCode(state: SetupState): string {\n const { selectedModules } = state\n \n const moduleConfigs: string[] = []\n \n if (selectedModules.includes('analytics')) {\n moduleConfigs.push(` analytics={{ enabled: true }}`)\n }\n \n if (selectedModules.includes('engage')) {\n moduleConfigs.push(` engage={{ enabled: true }}`)\n }\n \n if (selectedModules.includes('forms')) {\n moduleConfigs.push(` forms={{ enabled: true }}`)\n }\n \n if (selectedModules.includes('signal')) {\n moduleConfigs.push(` signal={{ enabled: true, realtime: true }}`)\n }\n \n return `// app/layout.tsx (or pages/_app.tsx)\nimport { SiteKitProvider } from '@uptrade/site-kit'\n\nexport default function RootLayout({ children }) {\n return (\n <html>\n <body>\n <SiteKitProvider\n apiKey={process.env.NEXT_PUBLIC_UPTRADE_API_KEY!}\n${moduleConfigs.join('\\n')}\n >\n {children}\n </SiteKitProvider>\n </body>\n </html>\n )\n}`\n}\n"]}
1
+ {"version":3,"sources":["../src/affiliates/api.ts","../src/affiliates/useAffiliates.ts","../src/affiliates/AffiliatesWidget.tsx","../src/signal/SignalExperiment.tsx","../src/setup/SetupAssistant.tsx","../src/sync/api.ts","../src/sync/BookingWidget.tsx"],"names":["useState","useEffect","getTrackingUrl","jsx","useSignalExperiment","useSignalEvent","Fragment","React","useRef","useCallback","onComplete","jsxs","formatDate","DEFAULT_API_URL","styles","useMemo"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAuTN;AAAA;AAAA;AAAA,GACJ;AAEJ","file":"index.js","sourcesContent":["/**\n * @uptrade/site-kit/affiliates - Affiliates API\n * \n * API functions for fetching affiliate data for client sites.\n * All data goes through Portal API with API key auth - never Supabase directly.\n */\n\nimport type { Affiliate, AffiliateWithOffers, FetchAffiliatesOptions } from './types'\n\n// ============================================\n// API Config Helpers\n// ============================================\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.uptrademedia.com'\n : 'https://api.uptrademedia.com'\n const apiKey = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_KEY__ || ''\n : ''\n return { apiUrl, apiKey }\n}\n\nasync function apiGet<T>(endpoint: string): Promise<T | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) {\n console.error('[Affiliates] No API key configured')\n return null\n }\n \n try {\n const response = await fetch(`${apiUrl}${endpoint}`, {\n method: 'GET',\n headers: {\n 'x-api-key': apiKey,\n },\n })\n \n if (!response.ok) {\n console.error(`[Affiliates] API error: ${response.statusText}`)\n return null\n }\n \n return await response.json()\n } catch (error) {\n console.error('[Affiliates] Network error:', error)\n return null\n }\n}\n\n// ============================================\n// Fetch Affiliates\n// ============================================\n\n/**\n * Fetch all active affiliates for the project\n * \n * @example\n * ```ts\n * const affiliates = await fetchAffiliates()\n * ```\n */\nexport async function fetchAffiliates(\n options: FetchAffiliatesOptions = {}\n): Promise<AffiliateWithOffers[]> {\n const result = await apiGet<{ affiliates: AffiliateWithOffers[] }>(\n '/api/public/affiliates'\n )\n \n return result?.affiliates || []\n}\n\n/**\n * Build a tracking URL for an affiliate offer\n * When clicked, this redirects through our tracking endpoint and then to the destination\n * \n * @example\n * ```ts\n * const trackingUrl = getTrackingUrl(affiliate.id, offer.id)\n * // Returns: https://api.uptrademedia.com/a/{affiliateId}/{offerId}\n * ```\n */\nexport function getTrackingUrl(affiliateId: string, offerId: string): string {\n const { apiUrl } = getApiConfig()\n return `${apiUrl}/a/${affiliateId}/${offerId}`\n}\n","/**\n * @uptrade/site-kit/affiliates - useAffiliates Hook\n * \n * React hook for fetching and displaying affiliates on client sites.\n */\n\n'use client'\n\nimport { useState, useEffect } from 'react'\nimport type { AffiliateWithOffers } from './types'\nimport { fetchAffiliates, getTrackingUrl } from './api'\n\nexport interface UseAffiliatesResult {\n affiliates: AffiliateWithOffers[]\n isLoading: boolean\n error: string | null\n getTrackingUrl: (affiliateId: string, offerId: string) => string\n}\n\n/**\n * Hook to fetch affiliates for display on client sites\n * \n * @example\n * ```tsx\n * function AffiliatesSection() {\n * const { affiliates, isLoading } = useAffiliates()\n * \n * if (isLoading) return <div>Loading...</div>\n * \n * return (\n * <div className=\"grid grid-cols-3 gap-4\">\n * {affiliates.map(affiliate => (\n * <AffiliateCard key={affiliate.id} affiliate={affiliate} />\n * ))}\n * </div>\n * )\n * }\n * ```\n */\nexport function useAffiliates(): UseAffiliatesResult {\n const [affiliates, setAffiliates] = useState<AffiliateWithOffers[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n async function load() {\n try {\n setIsLoading(true)\n setError(null)\n const data = await fetchAffiliates()\n setAffiliates(data)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load affiliates')\n } finally {\n setIsLoading(false)\n }\n }\n \n load()\n }, [])\n\n return {\n affiliates,\n isLoading,\n error,\n getTrackingUrl,\n }\n}\n","/**\n * @uptrade/site-kit/affiliates - AffiliatesWidget Component\n * \n * Unstyled, headless component for displaying affiliates.\n * Client sites can wrap this or use it directly with their own styling.\n */\n\n'use client'\n\nimport React from 'react'\nimport { useAffiliates } from './useAffiliates'\nimport type { AffiliateWithOffers, AffiliateOffer } from './types'\n\n// ============================================\n// Affiliate Card (Unstyled)\n// ============================================\n\nexport interface AffiliateCardProps {\n affiliate: AffiliateWithOffers\n className?: string\n /** Optional custom render for the logo */\n renderLogo?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Show offers as links below the card */\n showOffers?: boolean\n}\n\n/**\n * Single affiliate card - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * <AffiliateCard \n * affiliate={affiliate}\n * className=\"p-4 bg-white rounded-lg shadow\"\n * showOffers\n * />\n * ```\n */\nexport function AffiliateCard({\n affiliate,\n className = '',\n renderLogo,\n showOffers = false,\n}: AffiliateCardProps) {\n const { getTrackingUrl } = useAffiliates()\n \n const defaultLogo = (\n <div data-affiliate-logo className=\"affiliate-logo\">\n {affiliate.logo_url ? (\n <img \n src={affiliate.logo_url} \n alt={affiliate.name}\n loading=\"lazy\"\n />\n ) : (\n <span>{affiliate.name.charAt(0)}</span>\n )}\n </div>\n )\n\n return (\n <div className={className} data-affiliate-card data-affiliate-id={affiliate.id}>\n {/* Logo */}\n {renderLogo ? renderLogo(affiliate) : defaultLogo}\n \n {/* Name */}\n <div data-affiliate-name className=\"affiliate-name\">\n {affiliate.name}\n </div>\n \n {/* Website link */}\n {affiliate.website_url && (\n <a \n href={affiliate.website_url}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-website\n className=\"affiliate-website\"\n >\n Visit Website\n </a>\n )}\n \n {/* Offers */}\n {showOffers && affiliate.offers && affiliate.offers.length > 0 && (\n <div data-affiliate-offers className=\"affiliate-offers\">\n {affiliate.offers.map(offer => (\n <a\n key={offer.id}\n href={getTrackingUrl(affiliate.id, offer.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-offer\n data-offer-id={offer.id}\n className=\"affiliate-offer\"\n >\n {offer.name}\n </a>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ============================================\n// Affiliates Grid (Unstyled)\n// ============================================\n\nexport interface AffiliatesWidgetProps {\n className?: string\n /** Custom loading component */\n loadingComponent?: React.ReactNode\n /** Custom empty state component */\n emptyComponent?: React.ReactNode\n /** Custom error component */\n errorComponent?: React.ReactNode\n /** Show offers on each card */\n showOffers?: boolean\n /** Custom render function for each affiliate */\n renderAffiliate?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Maximum number to display */\n limit?: number\n}\n\n/**\n * Display a grid of affiliates - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * // Basic usage\n * <AffiliatesWidget className=\"grid grid-cols-3 gap-4\" />\n * \n * // With custom rendering\n * <AffiliatesWidget\n * renderAffiliate={(affiliate) => (\n * <MyCustomCard key={affiliate.id} data={affiliate} />\n * )}\n * />\n * ```\n */\nexport function AffiliatesWidget({\n className = '',\n loadingComponent,\n emptyComponent,\n errorComponent,\n showOffers = false,\n renderAffiliate,\n limit,\n}: AffiliatesWidgetProps) {\n const { affiliates, isLoading, error, getTrackingUrl } = useAffiliates()\n \n if (isLoading) {\n return loadingComponent || <div data-affiliates-loading>Loading affiliates...</div>\n }\n \n if (error) {\n return errorComponent || <div data-affiliates-error>{error}</div>\n }\n \n const displayAffiliates = limit ? affiliates.slice(0, limit) : affiliates\n \n if (displayAffiliates.length === 0) {\n return emptyComponent || null\n }\n \n return (\n <div className={className} data-affiliates-widget>\n {displayAffiliates.map(affiliate => \n renderAffiliate \n ? renderAffiliate(affiliate)\n : <AffiliateCard \n key={affiliate.id} \n affiliate={affiliate} \n showOffers={showOffers}\n />\n )}\n </div>\n )\n}\n","/**\n * @uptrade/site-kit/signal - SignalExperiment\n * \n * A/B test component that renders different variants based on Signal assignment.\n * Uses Thompson Sampling (Bayesian bandit) for optimization.\n */\n\n'use client'\n\nimport React, { useMemo, useEffect } from 'react'\nimport { useSignalExperiment, useSignalEvent } from './SignalBridge'\n\ninterface SignalExperimentProps {\n /** Unique experiment ID */\n experimentId: string\n \n /** Variants to test - keys are variant names, values are React nodes */\n variants: Record<string, React.ReactNode>\n \n /** Fallback content if no assignment (defaults to 'control' variant) */\n fallback?: React.ReactNode\n \n /** Track impression automatically */\n trackImpression?: boolean\n \n /** Children function for more control */\n children?: (props: { variant: string; isControl: boolean }) => React.ReactNode\n}\n\n/**\n * Renders different content variants based on Signal's A/B assignment.\n * \n * @example\n * // Simple variant switching\n * <SignalExperiment experimentId=\"hero-cta\" variants={{\n * control: <Button>Get Started</Button>,\n * variant_a: <Button variant=\"primary\">Start Free Trial</Button>,\n * variant_b: <Button variant=\"secondary\">Book a Demo</Button>,\n * }} />\n * \n * @example\n * // With render prop for more control\n * <SignalExperiment experimentId=\"pricing-layout\">\n * {({ variant, isControl }) => (\n * <PricingSection layout={isControl ? 'cards' : 'table'} />\n * )}\n * </SignalExperiment>\n */\nexport function SignalExperiment({\n experimentId,\n variants,\n fallback,\n trackImpression = true,\n children,\n}: SignalExperimentProps) {\n const { assignment, variant, isControl } = useSignalExperiment(experimentId)\n const trackEvent = useSignalEvent()\n \n // Track impression when variant is rendered\n useEffect(() => {\n if (trackImpression && variant) {\n trackEvent({\n event_type: 'experiment',\n event_name: 'impression',\n event_data: {\n experiment_id: experimentId,\n variant_key: variant,\n },\n })\n }\n }, [experimentId, variant, trackImpression, trackEvent])\n \n // If using render prop\n if (children) {\n return <>{children({ variant: variant || 'control', isControl })}</>\n }\n \n // Determine what to render\n const selectedVariant = variant || 'control'\n const content = variants[selectedVariant]\n \n if (content !== undefined) {\n return <>{content}</>\n }\n \n // Fallback to provided fallback or control\n if (fallback) {\n return <>{fallback}</>\n }\n \n return <>{variants.control || null}</>\n}\n\n/**\n * Hook for conditional experiment logic\n * \n * @example\n * const { variant, isControl } = useExperimentVariant('pricing-test')\n * \n * return isControl \n * ? <OldPricing />\n * : <NewPricing showAnnual={variant === 'annual_first'} />\n */\nexport function useExperimentVariant(experimentId: string) {\n return useSignalExperiment(experimentId)\n}\n\n/**\n * Component for tracking experiment conversions\n * Wraps interactive elements to track when they convert\n * \n * @example\n * <SignalExperiment experimentId=\"signup-button\" variants={{\n * control: (\n * <ExperimentConversion experimentId=\"signup-button\" outcomeType=\"click\">\n * <Button>Sign Up</Button>\n * </ExperimentConversion>\n * ),\n * variant_a: (\n * <ExperimentConversion experimentId=\"signup-button\" outcomeType=\"click\">\n * <Button variant=\"large\">Join Now - It's Free!</Button>\n * </ExperimentConversion>\n * ),\n * }} />\n */\nexport function ExperimentConversion({\n experimentId,\n outcomeType = 'click',\n value,\n children,\n}: {\n experimentId: string\n outcomeType?: string\n value?: number\n children: React.ReactElement\n}) {\n const trackEvent = useSignalEvent()\n const { variant } = useSignalExperiment(experimentId)\n \n const handleInteraction = () => {\n trackEvent({\n event_type: 'experiment',\n event_name: 'conversion',\n event_data: {\n experiment_id: experimentId,\n variant_key: variant,\n outcome_type: outcomeType,\n value,\n },\n })\n }\n \n return React.cloneElement(children, {\n onClick: (e: React.MouseEvent) => {\n handleInteraction()\n // Call original onClick if exists\n if (children.props.onClick) {\n children.props.onClick(e)\n }\n },\n })\n}\n","/**\n * @uptrade/site-kit/setup - Conversational Setup Assistant\n * \n * AI-powered conversational interface for setting up site-kit.\n * Uses Echo/Signal to guide users through configuration.\n * \n * Features:\n * - Streaming AI responses for real-time feedback\n * - Brand extraction from existing websites\n * - Module recommendations based on business type\n * - Integration verification\n * - Copilot instructions generation\n */\n\n'use client'\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react'\n\n// ============================================\n// Types\n// ============================================\n\ninterface Message {\n id: string\n role: 'assistant' | 'user' | 'system'\n content: string\n timestamp: Date\n actions?: ActionButton[]\n component?: React.ReactNode\n isStreaming?: boolean\n}\n\ninterface ActionButton {\n id: string\n label: string\n action: string\n variant?: 'primary' | 'secondary' | 'outline'\n data?: Record<string, unknown>\n}\n\ninterface SetupContext {\n flow: 'new' | 'existing' | 'rebuild' | null\n step: string\n project_id?: string\n org_id?: string\n domain?: string\n business_type?: string\n scan_results?: ScanResults\n scrape_results?: ScrapeResults\n selected_modules?: string[]\n brand?: BrandInfo\n}\n\ninterface ScanResults {\n forms: { file: string; form_library: string; fields: number }[]\n widgets: { file: string; widget_type: string }[]\n metadata: { file: string; type: string }[]\n sitemaps: { file: string; type: string }[]\n}\n\ninterface ScrapeResults {\n scrape_id: string\n domain: string\n pages_found: number\n faqs_imported: number\n routes: { path: string; title: string }[]\n brand?: BrandInfo\n}\n\ninterface BrandInfo {\n business_name: string\n tagline?: string\n primary_color?: string\n secondary_color?: string\n logo_url?: string\n phone_numbers?: string[]\n email_addresses?: string[]\n social_profiles?: Record<string, string>\n}\n\ninterface SetupState {\n step: 'welcome' | 'auth' | 'project' | 'modules' | 'config' | 'verify' | 'complete'\n isAuthenticated: boolean\n userEmail?: string\n accessToken?: string\n selectedOrg?: { id: string; name: string }\n selectedProject?: { id: string; name: string; domain: string }\n selectedModules: string[]\n config: Record<string, unknown>\n errors: string[]\n context: SetupContext\n}\n\ninterface SetupAssistantProps {\n /** Portal API URL */\n apiUrl?: string\n \n /** Signal API URL for AI chat */\n signalUrl?: string\n \n /** Supabase URL for auth */\n supabaseUrl?: string\n \n /** Supabase anon key */\n supabaseKey?: string\n \n /** Pre-selected project ID (if coming from Portal) */\n projectId?: string\n \n /** Pre-selected org ID (if coming from Portal) */\n orgId?: string\n \n /** Auth token (if already authenticated) */\n authToken?: string\n \n /** Callback when setup is complete */\n onComplete?: (config: SetupState) => void\n \n /** Custom welcome message */\n welcomeMessage?: string\n}\n\n// ============================================\n// Styles (inline for portability)\n// ============================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column' as const,\n height: '100vh',\n maxWidth: '800px',\n margin: '0 auto',\n padding: '1rem',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n },\n header: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '1rem 0',\n borderBottom: '1px solid #e5e7eb',\n },\n logo: {\n width: '32px',\n height: '32px',\n borderRadius: '8px',\n background: 'linear-gradient(135deg, #3b82f6, #8b5cf6)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'white',\n fontWeight: 'bold',\n },\n title: {\n fontSize: '1.25rem',\n fontWeight: '600',\n color: '#111827',\n },\n subtitle: {\n fontSize: '0.875rem',\n color: '#6b7280',\n },\n messages: {\n flex: 1,\n overflowY: 'auto' as const,\n padding: '1rem 0',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '1rem',\n },\n message: {\n display: 'flex',\n gap: '0.75rem',\n maxWidth: '85%',\n },\n messageAssistant: {\n alignSelf: 'flex-start',\n },\n messageUser: {\n alignSelf: 'flex-end',\n flexDirection: 'row-reverse' as const,\n },\n avatar: {\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '0.875rem',\n flexShrink: 0,\n },\n avatarAssistant: {\n background: 'linear-gradient(135deg, #3b82f6, #8b5cf6)',\n color: 'white',\n },\n avatarUser: {\n background: '#e5e7eb',\n color: '#374151',\n },\n bubble: {\n padding: '0.75rem 1rem',\n borderRadius: '1rem',\n fontSize: '0.9375rem',\n lineHeight: '1.5',\n },\n bubbleAssistant: {\n background: '#f3f4f6',\n color: '#111827',\n borderTopLeftRadius: '4px',\n },\n bubbleUser: {\n background: '#3b82f6',\n color: 'white',\n borderTopRightRadius: '4px',\n },\n actions: {\n display: 'flex',\n flexWrap: 'wrap' as const,\n gap: '0.5rem',\n marginTop: '0.75rem',\n },\n actionButton: {\n padding: '0.5rem 1rem',\n borderRadius: '0.5rem',\n fontSize: '0.875rem',\n fontWeight: '500',\n cursor: 'pointer',\n border: 'none',\n transition: 'all 0.15s',\n },\n actionPrimary: {\n background: '#3b82f6',\n color: 'white',\n },\n actionSecondary: {\n background: '#e5e7eb',\n color: '#374151',\n },\n actionOutline: {\n background: 'transparent',\n color: '#3b82f6',\n border: '1px solid #3b82f6',\n },\n inputContainer: {\n display: 'flex',\n gap: '0.5rem',\n padding: '1rem 0',\n borderTop: '1px solid #e5e7eb',\n },\n input: {\n flex: 1,\n padding: '0.75rem 1rem',\n borderRadius: '0.75rem',\n border: '1px solid #d1d5db',\n fontSize: '0.9375rem',\n outline: 'none',\n },\n sendButton: {\n padding: '0.75rem 1.5rem',\n borderRadius: '0.75rem',\n background: '#3b82f6',\n color: 'white',\n border: 'none',\n fontWeight: '500',\n cursor: 'pointer',\n },\n typing: {\n display: 'flex',\n gap: '4px',\n padding: '0.75rem 1rem',\n background: '#f3f4f6',\n borderRadius: '1rem',\n width: 'fit-content',\n },\n typingDot: {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n background: '#9ca3af',\n animation: 'typing 1.4s infinite',\n },\n moduleCard: {\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.75rem',\n background: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.5rem',\n cursor: 'pointer',\n transition: 'all 0.15s',\n },\n moduleCardSelected: {\n borderColor: '#3b82f6',\n background: '#eff6ff',\n },\n moduleIcon: {\n fontSize: '1.5rem',\n },\n moduleInfo: {\n flex: 1,\n },\n moduleName: {\n fontWeight: '500',\n color: '#111827',\n },\n moduleDesc: {\n fontSize: '0.75rem',\n color: '#6b7280',\n },\n checkbox: {\n width: '20px',\n height: '20px',\n accentColor: '#3b82f6',\n },\n}\n\n// ============================================\n// Available Modules\n// ============================================\n\nconst MODULES = [\n { id: 'analytics', name: 'Analytics', icon: '📊', description: 'Page views, events, sessions, web vitals', recommended: true },\n { id: 'seo', name: 'SEO', icon: '🔍', description: 'Managed FAQs, meta tags, schema markup', recommended: true },\n { id: 'forms', name: 'Forms', icon: '📝', description: 'Portal-managed forms with submissions', recommended: true },\n { id: 'engage', name: 'Engage', icon: '💬', description: 'Live chat, popups, nudges, banners', recommended: false },\n { id: 'commerce', name: 'Commerce', icon: '🛒', description: 'Products, services, checkout', recommended: false },\n { id: 'signal', name: 'Signal AI', icon: '🤖', description: 'Autonomous optimization & A/B testing', recommended: false },\n]\n\n// ============================================\n// Setup Assistant Component\n// ============================================\n\nexport function SetupAssistant({\n apiUrl = 'https://api.uptrademedia.com',\n signalUrl = 'https://signal.uptrademedia.com',\n supabaseUrl,\n supabaseKey,\n projectId,\n orgId,\n authToken,\n onComplete,\n welcomeMessage,\n}: SetupAssistantProps) {\n const [messages, setMessages] = useState<Message[]>([])\n const [input, setInput] = useState('')\n const [isTyping, setIsTyping] = useState(false)\n const [isExtracting, setIsExtracting] = useState(false)\n const [state, setState] = useState<SetupState>({\n step: 'welcome',\n isAuthenticated: !!authToken,\n selectedModules: ['analytics', 'seo', 'forms'],\n config: {},\n errors: [],\n context: {\n flow: null,\n step: 'welcome',\n project_id: projectId,\n org_id: orgId,\n },\n })\n \n const messagesEndRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const streamingMessageRef = useRef<string | null>(null)\n \n // ============================================\n // Signal API Integration with Streaming\n // ============================================\n \n const sendToSignalStreaming = useCallback(async (\n message: string, \n context: SetupContext,\n onToken: (token: string) => void,\n onComplete: (result: { actions?: ActionButton[]; updated_context?: Partial<SetupContext> }) => void\n ): Promise<void> => {\n try {\n const response = await fetch(`${signalUrl}/api/skills/setup/chat/stream`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({\n message,\n context,\n project_id: projectId,\n org_id: orgId,\n }),\n })\n \n if (!response.ok) {\n throw new Error('Signal API error')\n }\n \n const reader = response.body?.getReader()\n if (!reader) throw new Error('No response body')\n \n const decoder = new TextDecoder()\n let buffer = ''\n let actions: ActionButton[] = []\n let updatedContext: Partial<SetupContext> = {}\n \n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n \n buffer += decoder.decode(value, { stream: true })\n \n // Process SSE events\n const lines = buffer.split('\\n')\n buffer = lines.pop() || ''\n \n for (const line of lines) {\n if (line.startsWith('data: ')) {\n const data = line.slice(6)\n if (data === '[DONE]') continue\n \n try {\n const event = JSON.parse(data)\n \n if (event.type === 'token') {\n onToken(event.content)\n } else if (event.type === 'actions') {\n actions = event.actions\n } else if (event.type === 'context') {\n updatedContext = event.context\n }\n } catch {\n // Non-JSON data, treat as token\n onToken(data)\n }\n }\n }\n }\n \n onComplete({ actions, updated_context: updatedContext })\n } catch (error) {\n console.error('Signal streaming error:', error)\n // Fallback to non-streaming\n const result = await sendToSignal(message, context)\n onToken(result.response)\n onComplete({ actions: result.actions, updated_context: result.updated_context })\n }\n }, [signalUrl, authToken, projectId, orgId])\n \n const sendToSignal = useCallback(async (message: string, context: SetupContext): Promise<{\n response: string\n actions?: ActionButton[]\n updated_context?: Partial<SetupContext>\n }> => {\n try {\n const response = await fetch(`${signalUrl}/api/skills/setup/chat`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({\n message,\n context,\n project_id: projectId,\n org_id: orgId,\n }),\n })\n \n if (!response.ok) {\n throw new Error('Signal API error')\n }\n \n return await response.json()\n } catch (error) {\n console.error('Signal API error:', error)\n // Fallback to local handling\n return {\n response: 'I had trouble connecting to Signal. Let me help you locally.',\n actions: [\n { id: '1', label: 'Continue', action: 'continue_local', variant: 'primary' },\n ],\n }\n }\n }, [signalUrl, authToken, projectId, orgId])\n \n // ============================================\n // Brand Extraction\n // ============================================\n \n const extractBrandFromDomain = useCallback(async (domain: string): Promise<BrandInfo | null> => {\n setIsExtracting(true)\n try {\n const response = await fetch(`${apiUrl}/site-scrape/brand-only`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({ domain }),\n })\n \n if (!response.ok) {\n throw new Error('Brand extraction failed')\n }\n \n const data = await response.json()\n return {\n business_name: data.business_name,\n tagline: data.tagline,\n primary_color: data.primary_color,\n secondary_color: data.secondary_color,\n logo_url: data.logo_url,\n phone_numbers: data.phone_numbers,\n email_addresses: data.email_addresses,\n social_profiles: data.social_profiles,\n }\n } catch (error) {\n console.error('Brand extraction error:', error)\n return null\n } finally {\n setIsExtracting(false)\n }\n }, [apiUrl, authToken])\n\n // ============================================\n // Message Helpers\n // ============================================\n \n const addMessage = useCallback((message: Omit<Message, 'id' | 'timestamp'>) => {\n const newMessage: Message = {\n ...message,\n id: crypto.randomUUID(),\n timestamp: new Date(),\n }\n setMessages(prev => [...prev, newMessage])\n return newMessage\n }, [])\n \n const updateMessage = useCallback((id: string, update: Partial<Message>) => {\n setMessages(prev => prev.map(m => \n m.id === id ? { ...m, ...update } : m\n ))\n }, [])\n \n const addStreamingMessage = useCallback(() => {\n const id = crypto.randomUUID()\n const newMessage: Message = {\n id,\n role: 'assistant',\n content: '',\n timestamp: new Date(),\n isStreaming: true,\n }\n setMessages(prev => [...prev, newMessage])\n streamingMessageRef.current = id\n return id\n }, [])\n \n const appendToStreamingMessage = useCallback((token: string) => {\n const id = streamingMessageRef.current\n if (!id) return\n \n setMessages(prev => prev.map(m => \n m.id === id ? { ...m, content: m.content + token } : m\n ))\n }, [])\n \n const finalizeStreamingMessage = useCallback((actions?: ActionButton[]) => {\n const id = streamingMessageRef.current\n if (!id) return\n \n setMessages(prev => prev.map(m => \n m.id === id ? { ...m, isStreaming: false, actions } : m\n ))\n streamingMessageRef.current = null\n }, [])\n \n const addAssistantMessage = useCallback((\n content: string, \n actions?: ActionButton[],\n component?: React.ReactNode\n ) => {\n setIsTyping(true)\n // Simulate typing delay\n setTimeout(() => {\n setIsTyping(false)\n addMessage({ role: 'assistant', content, actions, component })\n }, 500 + Math.random() * 500)\n }, [addMessage])\n \n const scrollToBottom = useCallback(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [])\n \n useEffect(() => {\n scrollToBottom()\n }, [messages, isTyping, scrollToBottom])\n\n // ============================================\n // Welcome Flow\n // ============================================\n \n useEffect(() => {\n // Initial welcome message with flow selection\n const welcome = welcomeMessage || \n `Hey! 👋 I'm Signal, your AI setup assistant.\\n\\nI'll help you integrate Uptrade Site-Kit into your project. What are we working with today?`\n \n setTimeout(() => {\n addAssistantMessage(welcome, [\n { id: '1', label: '🆕 New Site', action: 'set_flow_new', variant: 'primary' },\n { id: '2', label: '📁 Existing Project', action: 'set_flow_existing', variant: 'secondary' },\n { id: '3', label: '🔄 Rebuild from Live Site', action: 'set_flow_rebuild', variant: 'outline' },\n ])\n }, 500)\n }, [])\n\n // ============================================\n // Action Handlers\n // ============================================\n \n const handleAction = useCallback(async (action: string, data?: Record<string, unknown>) => {\n switch (action) {\n case 'start':\n addMessage({ role: 'user', content: \"Let's do it!\" })\n setState(prev => ({ ...prev, step: 'auth' }))\n addAssistantMessage(\n `Great! First, let's connect to your Uptrade Portal account.\\n\\nYou can sign in with your existing Portal credentials:`,\n [\n { id: '1', label: 'Sign in with Email', action: 'auth_email', variant: 'primary' },\n { id: '2', label: 'Sign in with Google', action: 'auth_google', variant: 'secondary' },\n { id: '3', label: \"I don't have an account\", action: 'auth_signup', variant: 'outline' },\n ]\n )\n break\n \n case 'explain':\n addMessage({ role: 'user', content: 'Tell me more first' })\n addAssistantMessage(\n `Uptrade Site-Kit is a lightweight package that connects your site to the Uptrade Portal.\\n\\n` +\n `Here's what you can enable:\\n\\n` +\n `📊 **Analytics** - Track page views, events, and Core Web Vitals\\n` +\n `🔍 **SEO** - Managed meta tags, FAQs, and schema markup\\n` +\n `📝 **Forms** - Portal-managed forms with spam protection\\n` +\n `💬 **Engage** - Live chat, popups, and nudges\\n` +\n `🛒 **Commerce** - Products, services, and checkout\\n` +\n `🤖 **Signal AI** - Autonomous optimization and A/B testing\\n\\n` +\n `You only pay for what you use, and everything is managed from your Portal dashboard.`,\n [\n { id: '1', label: \"Sounds good, let's set it up\", action: 'start', variant: 'primary' },\n ]\n )\n break\n \n case 'auth_email':\n addMessage({ role: 'user', content: 'Sign in with Email' })\n addAssistantMessage(\n `What's your Portal email address?`\n )\n setState(prev => ({ ...prev, step: 'auth' }))\n // Focus input for email entry\n setTimeout(() => inputRef.current?.focus(), 600)\n break\n \n case 'auth_google':\n addMessage({ role: 'user', content: 'Sign in with Google' })\n addAssistantMessage(\n `Opening Google sign-in... (In a real implementation, this would trigger OAuth)`\n )\n // Simulate successful auth\n setTimeout(() => {\n setState(prev => ({ \n ...prev, \n step: 'project',\n isAuthenticated: true,\n userEmail: 'user@example.com',\n }))\n handleAuthSuccess('user@example.com')\n }, 1500)\n break\n \n case 'select_project':\n addMessage({ role: 'user', content: `Selected: ${(data as any)?.name}` })\n setState(prev => ({ \n ...prev, \n step: 'modules',\n selectedProject: data as any,\n }))\n showModuleSelection()\n break\n \n case 'confirm_modules':\n addMessage({ role: 'user', content: `Selected ${state.selectedModules.length} modules` })\n setState(prev => ({ ...prev, step: 'config' }))\n showConfigGeneration()\n break\n \n case 'copy_code':\n addMessage({ role: 'user', content: 'Copy integration code' })\n // Copy to clipboard (would be implemented)\n addAssistantMessage(\n `✅ Code copied to clipboard!\\n\\nPaste this in your root layout file (e.g., \\`app/layout.tsx\\` or \\`pages/_app.tsx\\`).\\n\\nWant me to help you verify the integration?`,\n [\n { id: '1', label: 'Yes, verify my setup', action: 'verify', variant: 'primary' },\n { id: '2', label: \"I'm all set, thanks!\", action: 'complete', variant: 'outline' },\n ]\n )\n break\n \n case 'verify':\n addMessage({ role: 'user', content: 'Verify my setup' })\n setState(prev => ({ ...prev, step: 'verify' }))\n addAssistantMessage(\n `To verify your setup, start your dev server and visit any page.\\n\\n` +\n `I'll check for:\\n` +\n `• ✓ SiteKitProvider is loading\\n` +\n `• ✓ API key is valid\\n` +\n `• ✓ Analytics events are sending\\n` +\n `• ✓ Modules are initializing\\n\\n` +\n `Run \\`npm run dev\\` and let me know when you're ready:`,\n [\n { id: '1', label: 'My dev server is running', action: 'check_connection', variant: 'primary' },\n ]\n )\n break\n \n case 'check_connection':\n addMessage({ role: 'user', content: 'My dev server is running' })\n setIsTyping(true)\n // Simulate verification check\n setTimeout(() => {\n setIsTyping(false)\n addAssistantMessage(\n `🎉 **Everything looks great!**\\n\\n` +\n `I detected your site at \\`localhost:3000\\` and verified:\\n\\n` +\n `✅ SiteKitProvider initialized\\n` +\n `✅ API key authenticated\\n` +\n `✅ Analytics tracking active\\n` +\n `✅ SEO components ready\\n\\n` +\n `You're all set! Your data will start appearing in your Portal dashboard within a few minutes.`,\n [\n { id: '1', label: 'Open Portal Dashboard', action: 'open_dashboard', variant: 'primary' },\n { id: '2', label: 'Enable Signal AI', action: 'enable_signal', variant: 'secondary' },\n ]\n )\n setState(prev => ({ ...prev, step: 'complete' }))\n }, 2000)\n break\n \n case 'complete':\n addMessage({ role: 'user', content: \"I'm all set, thanks!\" })\n addAssistantMessage(\n `Awesome! 🚀\\n\\n` +\n `Your site-kit integration is ready. Here's what happens next:\\n\\n` +\n `• Analytics data will appear in Portal within ~5 minutes\\n` +\n `• You can manage SEO, forms, and engage from the dashboard\\n` +\n `• If you enabled Signal, it'll start learning from your traffic\\n\\n` +\n `Need help anytime? Just come back to \\`/_uptrade/setup\\` or ping us in Portal.\\n\\n` +\n `Happy building! 🎨`\n )\n onComplete?.(state)\n break\n \n case 'enable_signal':\n addMessage({ role: 'user', content: 'Enable Signal AI' })\n addAssistantMessage(\n `Great choice! 🤖\\n\\n` +\n `Signal AI will:\\n` +\n `• Monitor your site for SEO issues\\n` +\n `• Run A/B tests on CTAs and content\\n` +\n `• Optimize popups and engagement timing\\n` +\n `• Learn from user behavior to improve conversions\\n\\n` +\n `To enable Signal, add \\`signal={{ enabled: true }}\\` to your SiteKitProvider:\\n\\n` +\n `\\`\\`\\`tsx\\n` +\n `<SiteKitProvider\\n` +\n ` apiKey={process.env.NEXT_PUBLIC_UPTRADE_API_KEY!}\\n` +\n ` analytics={{ enabled: true }}\\n` +\n ` signal={{ enabled: true }} // Add this\\n` +\n `>\\n` +\n `\\`\\`\\`\\n\\n` +\n `Signal requires the Business plan. Want me to check your plan?`,\n [\n { id: '1', label: 'Check my plan', action: 'check_plan', variant: 'primary' },\n { id: '2', label: \"I'll do this later\", action: 'complete', variant: 'outline' },\n ]\n )\n break\n \n case 'confirm_brand':\n addMessage({ role: 'user', content: 'Brand info confirmed' })\n setState(prev => ({ ...prev, step: 'modules' }))\n showModuleSelectionWithRecommendations()\n break\n \n case 'edit_brand':\n addMessage({ role: 'user', content: 'Edit brand info' })\n addAssistantMessage(\n `No problem! Let me know what to change:\\n\\n` +\n `• Business name\\n` +\n `• Primary color (hex like #3b82f6)\\n` +\n `• Tagline\\n\\n` +\n `Just type what you'd like to update.`\n )\n break\n \n case 'manual_brand':\n addMessage({ role: 'user', content: 'Enter brand manually' })\n addAssistantMessage(\n `Sure! What's your business name?`\n )\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, step: 'brand_manual' } \n }))\n break\n \n case 'skip_brand':\n addMessage({ role: 'user', content: 'Skip brand for now' })\n setState(prev => ({ ...prev, step: 'modules' }))\n showModuleSelection()\n break\n \n case 'extract_brand':\n addMessage({ role: 'user', content: 'Extract from website' })\n addAssistantMessage(\n `What's the website URL? I'll extract the brand colors, name, and logo.`\n )\n break\n \n case 'set_flow_new':\n addMessage({ role: 'user', content: 'New Site' })\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, flow: 'new', step: 'brand' }\n }))\n addAssistantMessage(\n `Great! For a new site, I'll help you:\\n\\n` +\n `1. Set up your brand (colors, name)\\n` +\n `2. Choose which modules to enable\\n` +\n `3. Generate integration code\\n\\n` +\n `Do you have an existing website I can extract brand info from? Or would you prefer to enter it manually?`,\n [\n { id: '1', label: 'Extract from website', action: 'extract_brand', variant: 'primary' },\n { id: '2', label: 'Enter manually', action: 'manual_brand', variant: 'outline' },\n { id: '3', label: 'Skip for now', action: 'skip_brand', variant: 'outline' },\n ]\n )\n break\n \n case 'set_flow_existing':\n addMessage({ role: 'user', content: 'Existing Project' })\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, flow: 'existing', step: 'scan' }\n }))\n addAssistantMessage(\n `For an existing project, I can scan your codebase to find:\\n\\n` +\n `• Forms to migrate (contact forms, newsletter signups)\\n` +\n `• Chat widgets to replace (Intercom, Crisp, etc.)\\n` +\n `• Metadata patterns to enhance\\n` +\n `• Sitemap configuration\\n\\n` +\n `Run this in your project root:\\n\\n` +\n `\\`\\`\\`bash\\nnpx @uptrade/site-kit scan\\n\\`\\`\\`\\n\\n` +\n `Then paste the output here, or tell me about your project.`,\n [\n { id: '1', label: 'I ran the scan', action: 'show_scan_results', variant: 'primary' },\n { id: '2', label: 'Skip scan', action: 'skip_scan', variant: 'outline' },\n ]\n )\n break\n \n case 'set_flow_rebuild':\n addMessage({ role: 'user', content: 'Rebuild from Live Site' })\n setState(prev => ({ \n ...prev, \n context: { ...prev.context, flow: 'rebuild', step: 'scrape' }\n }))\n addAssistantMessage(\n `I'll help you rebuild with site-kit. Enter the live site URL and I'll:\\n\\n` +\n `• Extract brand colors and business info\\n` +\n `• Import FAQs with schema markup\\n` +\n `• Suggest redirect mappings\\n` +\n `• Generate copilot-instructions.md\\n\\n` +\n `What's the website URL?`\n )\n break\n \n case 'show_scan_results':\n addMessage({ role: 'user', content: 'I ran the scan' })\n addAssistantMessage(\n `Great! Paste the scan output here, or describe what you found.\\n\\n` +\n `I'll analyze the results and recommend a migration plan.`\n )\n break\n \n case 'skip_scan':\n addMessage({ role: 'user', content: 'Skip scan' })\n setState(prev => ({ ...prev, step: 'modules' }))\n showModuleSelection()\n break\n \n case 'generate_redirects':\n addMessage({ role: 'user', content: 'Generate redirects' })\n if (state.context.scrape_results?.routes) {\n addStreamingMessage()\n await sendToSignalStreaming(\n `Generate SEO-optimized redirects for these routes: ${JSON.stringify(state.context.scrape_results.routes)}`,\n state.context,\n (token) => appendToStreamingMessage(token),\n (result) => finalizeStreamingMessage(result.actions)\n )\n } else {\n addAssistantMessage(\n `I need a list of routes to generate redirects. Would you like to:\\n\\n` +\n `1. Scrape a website for routes\\n` +\n `2. Paste a list of URLs\\n\\n` +\n `What's easier?`,\n [\n { id: '1', label: 'Scrape website', action: 'set_flow_rebuild', variant: 'primary' },\n { id: '2', label: 'Paste URLs', action: 'paste_urls', variant: 'outline' },\n ]\n )\n }\n break\n \n case 'generate_copilot_instructions':\n addMessage({ role: 'user', content: 'Generate Copilot instructions' })\n addStreamingMessage()\n await sendToSignalStreaming(\n `Generate copilot-instructions.md for project with modules: ${state.selectedModules.join(', ')} and brand: ${state.context.brand?.business_name || 'Unknown'}`,\n state.context,\n (token) => appendToStreamingMessage(token),\n (result) => {\n finalizeStreamingMessage([\n { id: '1', label: '📋 Copy to clipboard', action: 'copy_copilot_instructions', variant: 'primary' },\n { id: '2', label: 'Continue', action: 'complete', variant: 'outline' },\n ])\n }\n )\n break\n \n case 'verify_now':\n addMessage({ role: 'user', content: 'Verify integration' })\n verifyIntegration()\n break\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addMessage, addAssistantMessage, addStreamingMessage, appendToStreamingMessage, finalizeStreamingMessage, sendToSignalStreaming, state, onComplete])\n \n // ============================================\n // Auth Success Handler\n // ============================================\n \n const handleAuthSuccess = useCallback((email: string) => {\n addAssistantMessage(\n `Welcome back, ${email.split('@')[0]}! 👋\\n\\n` +\n `I found these projects in your account. Which one are we setting up?`,\n [\n { id: '1', label: 'MyCompany.com', action: 'select_project', variant: 'secondary', data: { id: '1', name: 'MyCompany.com', domain: 'mycompany.com' } },\n { id: '2', label: 'Blog Project', action: 'select_project', variant: 'secondary', data: { id: '2', name: 'Blog Project', domain: 'blog.mycompany.com' } },\n { id: '3', label: '+ Create new project', action: 'create_project', variant: 'outline' },\n ]\n )\n }, [addAssistantMessage])\n \n // ============================================\n // Integration Verification\n // ============================================\n \n const verifyIntegration = useCallback(async () => {\n setState(prev => ({ ...prev, step: 'verify' }))\n setIsTyping(true)\n \n try {\n const response = await fetch(`${signalUrl}/api/skills/setup/verify`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n body: JSON.stringify({\n project_id: projectId || state.context.project_id,\n dev_url: 'http://localhost:3000',\n }),\n })\n \n setIsTyping(false)\n \n if (!response.ok) {\n throw new Error('Verification failed')\n }\n \n const result = await response.json()\n \n if (result.overall_status === 'success') {\n const checkList = result.checks.map((c: { check: string; passed: boolean }) => \n `${c.passed ? '✅' : '❌'} ${c.check.replace(/_/g, ' ')}`\n ).join('\\n')\n \n addAssistantMessage(\n `🎉 **Integration Verified!**\\n\\n${checkList}\\n\\n` +\n `Your site-kit integration is working perfectly. Data will start appearing in Portal shortly.`,\n [\n { id: '1', label: 'Open Portal Dashboard', action: 'open_dashboard', variant: 'primary' },\n { id: '2', label: 'Generate Copilot Instructions', action: 'generate_copilot_instructions', variant: 'secondary' },\n ]\n )\n setState(prev => ({ ...prev, step: 'complete' }))\n } else {\n const issues = result.issues?.join('\\n• ') || 'Unknown issue'\n addAssistantMessage(\n `⚠️ **Verification Found Issues**\\n\\n• ${issues}\\n\\n` +\n `Would you like help troubleshooting?`,\n [\n { id: '1', label: 'Help me fix this', action: 'troubleshoot', variant: 'primary' },\n { id: '2', label: 'Skip for now', action: 'complete', variant: 'outline' },\n ]\n )\n }\n } catch (error) {\n setIsTyping(false)\n addAssistantMessage(\n `I couldn't verify the integration automatically. Make sure your dev server is running.\\n\\n` +\n `You can manually verify by:\\n` +\n `1. Opening your site in the browser\\n` +\n `2. Checking the Network tab for requests to api.uptrademedia.com\\n` +\n `3. Looking for analytics events in your Portal dashboard`,\n [\n { id: '1', label: 'Try again', action: 'verify_now', variant: 'primary' },\n { id: '2', label: 'Continue anyway', action: 'complete', variant: 'outline' },\n ]\n )\n }\n }, [signalUrl, authToken, projectId, state.context.project_id, addAssistantMessage])\n \n // ============================================\n // Module Selection with Recommendations\n // ============================================\n \n const showModuleSelectionWithRecommendations = useCallback(async () => {\n const { brand, business_type, scan_results } = state.context\n \n // Get AI recommendations if we have context\n if (brand || business_type) {\n try {\n const result = await sendToSignal(\n `Recommend modules for: ${brand?.business_name || 'Unknown'}, type: ${business_type || 'general'}`,\n { ...state.context, step: 'recommend_modules' }\n )\n \n // Parse recommendations from response\n addAssistantMessage(\n result.response,\n undefined,\n <ModuleSelector\n modules={MODULES}\n selected={state.selectedModules}\n onChange={(modules) => setState(prev => ({ ...prev, selectedModules: modules }))}\n onConfirm={() => handleAction('confirm_modules')}\n />\n )\n return\n } catch (error) {\n // Fall back to default\n }\n }\n \n // Default module selection\n showModuleSelection()\n }, [state.context, state.selectedModules, sendToSignal, handleAction])\n\n // ============================================\n // Module Selection\n // ============================================\n \n const showModuleSelection = useCallback(() => {\n addAssistantMessage(\n `Perfect! Now let's choose which features to enable.\\n\\n` +\n `I've pre-selected the essentials, but you can customize:`,\n undefined,\n <ModuleSelector\n modules={MODULES}\n selected={state.selectedModules}\n onChange={(modules) => setState(prev => ({ ...prev, selectedModules: modules }))}\n onConfirm={() => handleAction('confirm_modules')}\n />\n )\n }, [addAssistantMessage, state.selectedModules, handleAction])\n \n // ============================================\n // Config Generation\n // ============================================\n \n const showConfigGeneration = useCallback(() => {\n const code = generateIntegrationCode(state)\n \n addAssistantMessage(\n `Here's your integration code! 🎉\\n\\n` +\n `Add this to your root layout:`,\n [\n { id: '1', label: '📋 Copy Code', action: 'copy_code', variant: 'primary' },\n ],\n <CodeBlock code={code} />\n )\n }, [addAssistantMessage, state])\n \n // ============================================\n // Text Input Handler\n // ============================================\n \n const handleSubmit = useCallback(async (e: React.FormEvent) => {\n e.preventDefault()\n if (!input.trim()) return\n \n const userInput = input.trim()\n setInput('')\n addMessage({ role: 'user', content: userInput })\n \n // Handle based on current step\n if (state.step === 'auth' && userInput.includes('@')) {\n // Email entered\n setState(prev => ({ \n ...prev, \n isAuthenticated: true,\n userEmail: userInput,\n step: 'project',\n }))\n addAssistantMessage(\n `Sending magic link to ${userInput}...\\n\\n` +\n `(In production, you'd receive an email. For now, I'll simulate a successful login.)`,\n )\n setTimeout(() => handleAuthSuccess(userInput), 1500)\n } else if (userInput.toLowerCase().includes('http') || userInput.match(/^[\\w.-]+\\.[a-z]{2,}$/i)) {\n // URL or domain entered - extract brand\n const domain = userInput.replace(/^https?:\\/\\//, '').split('/')[0]\n setIsTyping(true)\n addAssistantMessage(`Analyzing ${domain} to extract brand information...`)\n \n const brand = await extractBrandFromDomain(domain)\n setIsTyping(false)\n \n if (brand) {\n setState(prev => ({\n ...prev,\n context: { ...prev.context, brand, domain },\n }))\n \n const brandSummary = [\n brand.business_name && `**Business:** ${brand.business_name}`,\n brand.tagline && `**Tagline:** ${brand.tagline}`,\n brand.primary_color && `**Primary Color:** ${brand.primary_color}`,\n brand.phone_numbers?.length && `**Phone:** ${brand.phone_numbers[0]}`,\n ].filter(Boolean).join('\\n')\n \n addAssistantMessage(\n `Found brand information:\\n\\n${brandSummary}\\n\\nDoes this look right?`,\n [\n { id: '1', label: 'Yes, looks good!', action: 'confirm_brand', variant: 'primary' },\n { id: '2', label: 'Edit brand info', action: 'edit_brand', variant: 'outline' },\n ]\n )\n } else {\n addAssistantMessage(\n `I couldn't extract brand info from ${domain}. You can enter it manually, or we can continue without it.`,\n [\n { id: '1', label: 'Enter manually', action: 'manual_brand', variant: 'primary' },\n { id: '2', label: 'Skip for now', action: 'skip_brand', variant: 'outline' },\n ]\n )\n }\n } else {\n // Natural language input - send to Signal API with streaming\n addStreamingMessage()\n \n try {\n await sendToSignalStreaming(\n userInput, \n state.context,\n (token) => appendToStreamingMessage(token),\n (result) => {\n if (result.updated_context) {\n setState(prev => ({\n ...prev,\n context: { ...prev.context, ...result.updated_context },\n }))\n }\n finalizeStreamingMessage(result.actions)\n }\n )\n } catch (error) {\n finalizeStreamingMessage()\n addAssistantMessage(\n `I understand you said: \"${userInput}\"\\n\\n` +\n `Let me help you with that. What would you like to do?`,\n [\n { id: '1', label: 'Continue setup', action: 'start', variant: 'primary' },\n { id: '2', label: 'Ask a question', action: 'help', variant: 'outline' },\n ]\n )\n }\n }\n }, [input, state.step, state.context, addMessage, addAssistantMessage, handleAuthSuccess, sendToSignalStreaming, appendToStreamingMessage, finalizeStreamingMessage, addStreamingMessage, extractBrandFromDomain])\n\n // ============================================\n // Render\n // ============================================\n \n return (\n <div style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n <div style={styles.logo}>U</div>\n <div>\n <div style={styles.title}>Uptrade Setup</div>\n <div style={styles.subtitle}>Site-Kit Integration Wizard</div>\n </div>\n </div>\n \n {/* Messages */}\n <div style={styles.messages}>\n {messages.map(message => (\n <div\n key={message.id}\n style={{\n ...styles.message,\n ...(message.role === 'assistant' ? styles.messageAssistant : styles.messageUser),\n }}\n >\n <div\n style={{\n ...styles.avatar,\n ...(message.role === 'assistant' ? styles.avatarAssistant : styles.avatarUser),\n }}\n >\n {message.role === 'assistant' ? '✨' : '👤'}\n </div>\n <div>\n <div\n style={{\n ...styles.bubble,\n ...(message.role === 'assistant' ? styles.bubbleAssistant : styles.bubbleUser),\n }}\n >\n {message.content.split('\\n').map((line, i) => (\n <React.Fragment key={i}>\n {line}\n {i < message.content.split('\\n').length - 1 && <br />}\n </React.Fragment>\n ))}\n </div>\n \n {/* Custom component */}\n {message.component}\n \n {/* Action buttons */}\n {message.actions && (\n <div style={styles.actions}>\n {message.actions.map(action => (\n <button\n key={action.id}\n onClick={() => handleAction(action.action, action.data)}\n style={{\n ...styles.actionButton,\n ...(action.variant === 'primary' ? styles.actionPrimary : \n action.variant === 'outline' ? styles.actionOutline :\n styles.actionSecondary),\n }}\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n ))}\n \n {/* Typing indicator */}\n {isTyping && (\n <div style={{ ...styles.message, ...styles.messageAssistant }}>\n <div style={{ ...styles.avatar, ...styles.avatarAssistant }}>✨</div>\n <div style={styles.typing}>\n <div style={{ ...styles.typingDot, animationDelay: '0s' }} />\n <div style={{ ...styles.typingDot, animationDelay: '0.2s' }} />\n <div style={{ ...styles.typingDot, animationDelay: '0.4s' }} />\n </div>\n </div>\n )}\n \n <div ref={messagesEndRef} />\n </div>\n \n {/* Input */}\n <form onSubmit={handleSubmit} style={styles.inputContainer}>\n <input\n ref={inputRef}\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder=\"Type a message...\"\n style={styles.input}\n />\n <button type=\"submit\" style={styles.sendButton}>\n Send\n </button>\n </form>\n \n {/* Typing animation keyframes */}\n <style>{`\n @keyframes typing {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.5; }\n 30% { transform: translateY(-4px); opacity: 1; }\n }\n `}</style>\n </div>\n )\n}\n\n// ============================================\n// Module Selector Component\n// ============================================\n\nfunction ModuleSelector({\n modules,\n selected,\n onChange,\n onConfirm,\n}: {\n modules: typeof MODULES\n selected: string[]\n onChange: (modules: string[]) => void\n onConfirm: () => void\n}) {\n const toggle = (id: string) => {\n onChange(\n selected.includes(id)\n ? selected.filter(m => m !== id)\n : [...selected, id]\n )\n }\n \n return (\n <div style={{ marginTop: '0.75rem', display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {modules.map(module => (\n <div\n key={module.id}\n onClick={() => toggle(module.id)}\n style={{\n ...styles.moduleCard,\n ...(selected.includes(module.id) ? styles.moduleCardSelected : {}),\n }}\n >\n <span style={styles.moduleIcon}>{module.icon}</span>\n <div style={styles.moduleInfo}>\n <div style={styles.moduleName}>\n {module.name}\n {module.recommended && (\n <span style={{ marginLeft: '0.5rem', fontSize: '0.625rem', background: '#dbeafe', color: '#1d4ed8', padding: '2px 6px', borderRadius: '4px' }}>\n Recommended\n </span>\n )}\n </div>\n <div style={styles.moduleDesc}>{module.description}</div>\n </div>\n <input\n type=\"checkbox\"\n checked={selected.includes(module.id)}\n onChange={() => toggle(module.id)}\n style={styles.checkbox}\n />\n </div>\n ))}\n \n <button\n onClick={onConfirm}\n style={{ ...styles.actionButton, ...styles.actionPrimary, marginTop: '0.5rem' }}\n >\n Continue with {selected.length} modules\n </button>\n </div>\n )\n}\n\n// ============================================\n// Code Block Component\n// ============================================\n\nfunction CodeBlock({ code }: { code: string }) {\n return (\n <pre style={{\n marginTop: '0.75rem',\n padding: '1rem',\n background: '#1f2937',\n color: '#e5e7eb',\n borderRadius: '0.5rem',\n fontSize: '0.8125rem',\n overflowX: 'auto',\n fontFamily: 'monospace',\n }}>\n {code}\n </pre>\n )\n}\n\n// ============================================\n// Code Generation\n// ============================================\n\nfunction generateIntegrationCode(state: SetupState): string {\n const { selectedModules } = state\n \n const moduleConfigs: string[] = []\n \n if (selectedModules.includes('analytics')) {\n moduleConfigs.push(` analytics={{ enabled: true }}`)\n }\n \n if (selectedModules.includes('engage')) {\n moduleConfigs.push(` engage={{ enabled: true }}`)\n }\n \n if (selectedModules.includes('forms')) {\n moduleConfigs.push(` forms={{ enabled: true }}`)\n }\n \n if (selectedModules.includes('signal')) {\n moduleConfigs.push(` signal={{ enabled: true, realtime: true }}`)\n }\n \n return `// app/layout.tsx (or pages/_app.tsx)\nimport { SiteKitProvider } from '@uptrade/site-kit'\n\nexport default function RootLayout({ children }) {\n return (\n <html>\n <body>\n <SiteKitProvider\n apiKey={process.env.NEXT_PUBLIC_UPTRADE_API_KEY!}\n${moduleConfigs.join('\\n')}\n >\n {children}\n </SiteKitProvider>\n </body>\n </html>\n )\n}`\n}\n","/**\n * Sync API Functions - Client-side API calls for booking widget\n */\n\nimport type { \n BookingType, \n TimeSlot, \n SlotHold, \n BookingResult,\n GuestInfo,\n} from './types'\n\nconst DEFAULT_API_URL = 'https://api.uptrademedia.com'\n\n/**\n * Fetch public booking types for an organization\n */\nexport async function fetchBookingTypes(\n orgSlug: string,\n apiUrl: string = DEFAULT_API_URL\n): Promise<BookingType[]> {\n const response = await fetch(`${apiUrl}/sync/public/${orgSlug}/types`)\n \n if (!response.ok) {\n throw new Error(`Failed to fetch booking types: ${response.statusText}`)\n }\n \n const data = await response.json()\n return data.types || []\n}\n\n/**\n * Fetch booking type details\n */\nexport async function fetchBookingTypeDetails(\n orgSlug: string,\n typeSlug: string,\n apiUrl: string = DEFAULT_API_URL\n): Promise<BookingType> {\n const response = await fetch(`${apiUrl}/sync/public/${orgSlug}/types/${typeSlug}`)\n \n if (!response.ok) {\n throw new Error(`Failed to fetch booking type: ${response.statusText}`)\n }\n \n return response.json()\n}\n\n/**\n * Fetch available time slots for a specific date\n */\nexport async function fetchAvailability(\n orgSlug: string,\n typeSlug: string,\n date: string, // YYYY-MM-DD format\n apiUrl: string = DEFAULT_API_URL,\n timezone?: string,\n hostId?: string\n): Promise<TimeSlot[]> {\n const params = new URLSearchParams({ date })\n if (timezone) params.append('timezone', timezone)\n if (hostId) params.append('hostId', hostId)\n \n const response = await fetch(\n `${apiUrl}/sync/public/${orgSlug}/availability/${typeSlug}?${params}`\n )\n \n if (!response.ok) {\n throw new Error(`Failed to fetch availability: ${response.statusText}`)\n }\n \n const data = await response.json()\n return data.slots || []\n}\n\n/**\n * Hold a time slot temporarily (5-10 minutes)\n */\nexport async function createSlotHold(\n bookingTypeId: string,\n startTime: string,\n hostId: string | undefined,\n guestTimezone: string,\n apiUrl: string = DEFAULT_API_URL\n): Promise<SlotHold> {\n const response = await fetch(`${apiUrl}/sync/public/hold`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n booking_type_id: bookingTypeId,\n start_time: startTime,\n host_id: hostId,\n guest_timezone: guestTimezone,\n }),\n })\n \n if (!response.ok) {\n throw new Error(`Failed to hold slot: ${response.statusText}`)\n }\n \n return response.json()\n}\n\n/**\n * Release a slot hold\n */\nexport async function releaseSlotHold(\n holdId: string,\n apiUrl: string = DEFAULT_API_URL\n): Promise<void> {\n await fetch(`${apiUrl}/sync/public/hold/${holdId}`, {\n method: 'DELETE',\n })\n}\n\n/**\n * Create a booking\n */\nexport async function createBooking(\n bookingTypeId: string,\n startTime: string,\n guest: GuestInfo,\n timezone: string,\n hostId?: string,\n holdId?: string,\n apiUrl: string = DEFAULT_API_URL\n): Promise<BookingResult> {\n const response = await fetch(`${apiUrl}/sync/public/booking`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n booking_type_id: bookingTypeId,\n start_time: startTime,\n guest_name: guest.name,\n guest_email: guest.email,\n guest_phone: guest.phone,\n guest_notes: guest.notes,\n timezone,\n host_id: hostId,\n hold_id: holdId,\n }),\n })\n \n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new Error(errorData.message || `Failed to create booking: ${response.statusText}`)\n }\n \n return response.json()\n}\n\n/**\n * Get available dates for a month (helper for calendar view)\n * Returns dates that have at least one available slot\n */\nexport async function fetchAvailableDates(\n orgSlug: string,\n typeSlug: string,\n startDate: string, // YYYY-MM-DD\n endDate: string, // YYYY-MM-DD\n apiUrl: string = DEFAULT_API_URL,\n timezone?: string\n): Promise<string[]> {\n // Fetch availability for each day in range\n // In production, this would be a single API call\n const availableDates: string[] = []\n const start = new Date(startDate)\n const end = new Date(endDate)\n \n const current = new Date(start)\n while (current <= end) {\n const dateStr = current.toISOString().split('T')[0]\n \n try {\n const slots = await fetchAvailability(orgSlug, typeSlug, dateStr, apiUrl, timezone)\n if (slots.some(s => s.available)) {\n availableDates.push(dateStr)\n }\n } catch {\n // Skip dates that fail to load\n }\n \n current.setDate(current.getDate() + 1)\n }\n \n return availableDates\n}\n\n/**\n * Detect user's timezone\n */\nexport function detectTimezone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone\n } catch {\n return 'America/New_York'\n }\n}\n\n/**\n * Format time for display\n */\nexport function formatTime(isoString: string, timezone: string): string {\n const date = new Date(isoString)\n return date.toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n timeZone: timezone,\n })\n}\n\n/**\n * Format date for display\n */\nexport function formatDate(isoString: string, timezone: string): string {\n const date = new Date(isoString)\n return date.toLocaleDateString('en-US', {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n timeZone: timezone,\n })\n}\n\n/**\n * Format duration for display\n */\nexport function formatDuration(minutes: number): string {\n if (minutes < 60) {\n return `${minutes} min`\n }\n const hours = Math.floor(minutes / 60)\n const mins = minutes % 60\n if (mins === 0) {\n return `${hours} hour${hours > 1 ? 's' : ''}`\n }\n return `${hours}h ${mins}m`\n}\n","'use client'\n\n/**\n * BookingWidget - Embeddable booking widget for client sites\n * \n * A full-featured booking widget that allows visitors to:\n * 1. Select a booking type (consultation, meeting, etc.)\n * 2. Pick an available date and time\n * 3. Enter their contact information\n * 4. Confirm the booking\n * \n * @example\n * ```tsx\n * import { BookingWidget } from '@uptrade/site-kit'\n * \n * export default function ContactPage() {\n * return (\n * <BookingWidget\n * orgSlug=\"heinrich-law\"\n * bookingTypeSlug=\"consultation\"\n * onBookingComplete={(result) => console.log('Booked!', result)}\n * />\n * )\n * }\n * ```\n */\n\nimport * as React from 'react'\nimport { useState, useEffect, useCallback, useMemo } from 'react'\nimport type { \n BookingWidgetProps, \n BookingType, \n TimeSlot, \n GuestInfo,\n BookingResult,\n SlotHold,\n} from './types'\nimport {\n fetchBookingTypes,\n fetchBookingTypeDetails,\n fetchAvailability,\n createSlotHold,\n releaseSlotHold,\n createBooking,\n detectTimezone,\n formatTime,\n formatDate,\n formatDuration,\n} from './api'\n\nconst DEFAULT_API_URL = 'https://api.uptrademedia.com'\n\n// Steps in the booking flow\ntype BookingStep = 'type' | 'datetime' | 'form' | 'confirm' | 'success'\n\nexport function BookingWidget({\n orgSlug,\n apiUrl = DEFAULT_API_URL,\n bookingTypeSlug,\n timezone: propTimezone,\n className = '',\n daysToShow = 14,\n onBookingComplete,\n onError,\n hideTypeSelector = false,\n styles = {},\n}: BookingWidgetProps) {\n // State\n const [step, setStep] = useState<BookingStep>(bookingTypeSlug ? 'datetime' : 'type')\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n \n // Data state\n const [bookingTypes, setBookingTypes] = useState<BookingType[]>([])\n const [selectedType, setSelectedType] = useState<BookingType | null>(null)\n const [selectedDate, setSelectedDate] = useState<Date | null>(null)\n const [slots, setSlots] = useState<TimeSlot[]>([])\n const [selectedSlot, setSelectedSlot] = useState<TimeSlot | null>(null)\n const [hold, setHold] = useState<SlotHold | null>(null)\n const [guestInfo, setGuestInfo] = useState<GuestInfo>({ name: '', email: '' })\n const [bookingResult, setBookingResult] = useState<BookingResult | null>(null)\n \n // Timezone\n const timezone = useMemo(() => propTimezone || detectTimezone(), [propTimezone])\n \n // Generate dates for the date picker\n const availableDates = useMemo(() => {\n const dates: Date[] = []\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n \n for (let i = 0; i < daysToShow; i++) {\n const date = new Date(today)\n date.setDate(date.getDate() + i)\n // Skip weekends (optional - could be controlled by booking type)\n if (date.getDay() !== 0 && date.getDay() !== 6) {\n dates.push(date)\n }\n }\n return dates\n }, [daysToShow])\n\n // Load booking types on mount\n useEffect(() => {\n if (bookingTypeSlug) {\n // Load specific booking type\n fetchBookingTypeDetails(orgSlug, bookingTypeSlug, apiUrl)\n .then(type => {\n setSelectedType(type)\n setStep('datetime')\n })\n .catch(err => {\n setError(err.message)\n onError?.(err)\n })\n } else {\n // Load all booking types\n fetchBookingTypes(orgSlug, apiUrl)\n .then(types => setBookingTypes(types.filter(t => t.is_active)))\n .catch(err => {\n setError(err.message)\n onError?.(err)\n })\n }\n }, [orgSlug, bookingTypeSlug, apiUrl, onError])\n\n // Load availability when date changes\n useEffect(() => {\n if (!selectedDate || !selectedType) return\n \n const dateStr = selectedDate.toISOString().split('T')[0]\n setLoading(true)\n setSlots([])\n setSelectedSlot(null)\n \n fetchAvailability(orgSlug, selectedType.slug, dateStr, apiUrl, timezone)\n .then(s => setSlots(s.filter(slot => slot.available)))\n .catch(err => {\n setError(err.message)\n onError?.(err)\n })\n .finally(() => setLoading(false))\n }, [selectedDate, selectedType, orgSlug, apiUrl, timezone, onError])\n\n // Handle slot selection - create hold\n const handleSlotSelect = useCallback(async (slot: TimeSlot) => {\n if (!selectedType) return\n \n // Release previous hold\n if (hold) {\n await releaseSlotHold(hold.holdId, apiUrl).catch(() => {})\n }\n \n setSelectedSlot(slot)\n setLoading(true)\n \n try {\n const newHold = await createSlotHold(\n selectedType.id,\n slot.start,\n slot.hostId,\n timezone,\n apiUrl\n )\n setHold(newHold)\n setStep('form')\n } catch (err: any) {\n setError(err.message)\n onError?.(err)\n } finally {\n setLoading(false)\n }\n }, [selectedType, hold, timezone, apiUrl, onError])\n\n // Handle booking submission\n const handleBookingSubmit = useCallback(async (e: React.FormEvent) => {\n e.preventDefault()\n if (!selectedType || !selectedSlot) return\n \n setLoading(true)\n setError(null)\n \n try {\n const result = await createBooking(\n selectedType.id,\n selectedSlot.start,\n guestInfo,\n timezone,\n selectedSlot.hostId,\n hold?.holdId,\n apiUrl\n )\n \n setBookingResult(result)\n setStep('success')\n onBookingComplete?.(result)\n } catch (err: any) {\n setError(err.message)\n onError?.(err)\n } finally {\n setLoading(false)\n }\n }, [selectedType, selectedSlot, guestInfo, timezone, hold, apiUrl, onBookingComplete, onError])\n\n // Cleanup hold on unmount\n useEffect(() => {\n return () => {\n if (hold) {\n releaseSlotHold(hold.holdId, apiUrl).catch(() => {})\n }\n }\n }, [hold, apiUrl])\n\n // CSS custom properties for theming\n const cssVars = {\n '--booking-primary': styles.primaryColor || '#4bbf39',\n '--booking-radius': styles.borderRadius || '8px',\n '--booking-font': styles.fontFamily || 'inherit',\n } as React.CSSProperties\n\n return (\n <div \n className={`uptrade-booking-widget ${className}`} \n style={cssVars}\n >\n {/* Error Display */}\n {error && (\n <div className=\"uptrade-booking-error\">\n {error}\n <button onClick={() => setError(null)}>Dismiss</button>\n </div>\n )}\n\n {/* Step 1: Booking Type Selection */}\n {step === 'type' && !hideTypeSelector && (\n <div className=\"uptrade-booking-types\">\n <h3 className=\"uptrade-booking-title\">Select a Service</h3>\n <div className=\"uptrade-booking-type-list\">\n {bookingTypes.map(type => (\n <button\n key={type.id}\n className=\"uptrade-booking-type-card\"\n onClick={() => {\n setSelectedType(type)\n setStep('datetime')\n }}\n >\n <div className=\"uptrade-booking-type-name\">{type.name}</div>\n {type.description && (\n <div className=\"uptrade-booking-type-desc\">{type.description}</div>\n )}\n <div className=\"uptrade-booking-type-meta\">\n <span>{formatDuration(type.duration_minutes)}</span>\n {type.price_cents ? (\n <span>${(type.price_cents / 100).toFixed(2)}</span>\n ) : (\n <span>Free</span>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Step 2: Date & Time Selection */}\n {step === 'datetime' && selectedType && (\n <div className=\"uptrade-booking-datetime\">\n <button \n className=\"uptrade-booking-back\"\n onClick={() => {\n if (bookingTypeSlug) return\n setSelectedType(null)\n setStep('type')\n }}\n disabled={!!bookingTypeSlug}\n >\n ← Back\n </button>\n \n <h3 className=\"uptrade-booking-title\">{selectedType.name}</h3>\n <p className=\"uptrade-booking-subtitle\">\n {formatDuration(selectedType.duration_minutes)} • {selectedType.location_type}\n </p>\n\n {/* Date Picker */}\n <div className=\"uptrade-booking-dates\">\n <h4>Select a Date</h4>\n <div className=\"uptrade-booking-date-grid\">\n {availableDates.map(date => {\n const dateStr = date.toISOString().split('T')[0]\n const isSelected = selectedDate?.toISOString().split('T')[0] === dateStr\n \n return (\n <button\n key={dateStr}\n className={`uptrade-booking-date ${isSelected ? 'selected' : ''}`}\n onClick={() => setSelectedDate(date)}\n >\n <span className=\"uptrade-booking-date-day\">\n {date.toLocaleDateString('en-US', { weekday: 'short' })}\n </span>\n <span className=\"uptrade-booking-date-num\">\n {date.getDate()}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Time Slots */}\n {selectedDate && (\n <div className=\"uptrade-booking-times\">\n <h4>Select a Time</h4>\n {loading ? (\n <div className=\"uptrade-booking-loading\">Loading available times...</div>\n ) : slots.length === 0 ? (\n <div className=\"uptrade-booking-empty\">No times available on this date</div>\n ) : (\n <div className=\"uptrade-booking-time-grid\">\n {slots.map(slot => (\n <button\n key={slot.start}\n className={`uptrade-booking-time ${selectedSlot?.start === slot.start ? 'selected' : ''}`}\n onClick={() => handleSlotSelect(slot)}\n disabled={loading}\n >\n {formatTime(slot.start, timezone)}\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Step 3: Guest Information Form */}\n {step === 'form' && selectedType && selectedSlot && (\n <div className=\"uptrade-booking-form\">\n <button \n className=\"uptrade-booking-back\"\n onClick={() => setStep('datetime')}\n >\n ← Back\n </button>\n \n <h3 className=\"uptrade-booking-title\">Your Information</h3>\n <p className=\"uptrade-booking-subtitle\">\n {selectedType.name} on {formatDate(selectedSlot.start, timezone)} at {formatTime(selectedSlot.start, timezone)}\n </p>\n \n {hold && (\n <p className=\"uptrade-booking-hold-notice\">\n This time is held for you for {Math.floor((new Date(hold.expiresAt).getTime() - Date.now()) / 60000)} minutes\n </p>\n )}\n\n <form onSubmit={handleBookingSubmit}>\n <div className=\"uptrade-booking-field\">\n <label htmlFor=\"guest-name\">Name *</label>\n <input\n id=\"guest-name\"\n type=\"text\"\n required\n value={guestInfo.name}\n onChange={e => setGuestInfo(prev => ({ ...prev, name: e.target.value }))}\n placeholder=\"Your full name\"\n />\n </div>\n \n <div className=\"uptrade-booking-field\">\n <label htmlFor=\"guest-email\">Email *</label>\n <input\n id=\"guest-email\"\n type=\"email\"\n required\n value={guestInfo.email}\n onChange={e => setGuestInfo(prev => ({ ...prev, email: e.target.value }))}\n placeholder=\"your@email.com\"\n />\n </div>\n \n <div className=\"uptrade-booking-field\">\n <label htmlFor=\"guest-phone\">Phone</label>\n <input\n id=\"guest-phone\"\n type=\"tel\"\n value={guestInfo.phone || ''}\n onChange={e => setGuestInfo(prev => ({ ...prev, phone: e.target.value }))}\n placeholder=\"(555) 123-4567\"\n />\n </div>\n \n <div className=\"uptrade-booking-field\">\n <label htmlFor=\"guest-notes\">Additional Notes</label>\n <textarea\n id=\"guest-notes\"\n value={guestInfo.notes || ''}\n onChange={e => setGuestInfo(prev => ({ ...prev, notes: e.target.value }))}\n placeholder=\"Anything you'd like us to know...\"\n rows={3}\n />\n </div>\n \n <button\n type=\"submit\"\n className=\"uptrade-booking-submit\"\n disabled={loading}\n >\n {loading ? 'Booking...' : 'Confirm Booking'}\n </button>\n </form>\n </div>\n )}\n\n {/* Step 4: Success */}\n {step === 'success' && bookingResult && (\n <div className=\"uptrade-booking-success\">\n <div className=\"uptrade-booking-success-icon\">✓</div>\n <h3 className=\"uptrade-booking-title\">Booking Confirmed!</h3>\n <p className=\"uptrade-booking-confirmation-code\">\n Confirmation: {bookingResult.booking.confirmationCode}\n </p>\n \n <div className=\"uptrade-booking-details\">\n <p><strong>When:</strong> {formatDate(bookingResult.booking.scheduledAt, timezone)} at {formatTime(bookingResult.booking.scheduledAt, timezone)}</p>\n <p><strong>Duration:</strong> {formatDuration(bookingResult.booking.durationMinutes)}</p>\n {bookingResult.booking.hostName && (\n <p><strong>With:</strong> {bookingResult.booking.hostName}</p>\n )}\n </div>\n \n <div className=\"uptrade-booking-calendar-links\">\n <p>Add to calendar:</p>\n <div className=\"uptrade-booking-calendar-buttons\">\n <a \n href={bookingResult.calendarLinks.google} \n target=\"_blank\" \n rel=\"noopener noreferrer\"\n className=\"uptrade-booking-calendar-btn\"\n >\n Google\n </a>\n <a \n href={bookingResult.calendarLinks.outlook} \n target=\"_blank\" \n rel=\"noopener noreferrer\"\n className=\"uptrade-booking-calendar-btn\"\n >\n Outlook\n </a>\n <a \n href={bookingResult.calendarLinks.ics} \n download\n className=\"uptrade-booking-calendar-btn\"\n >\n Download .ics\n </a>\n </div>\n </div>\n \n <p className=\"uptrade-booking-email-notice\">\n A confirmation email has been sent to your email address.\n </p>\n </div>\n )}\n\n {/* Default Styles */}\n <style>{`\n .uptrade-booking-widget {\n font-family: var(--booking-font);\n max-width: 480px;\n margin: 0 auto;\n padding: 24px;\n border: 1px solid #e5e5e5;\n border-radius: var(--booking-radius);\n background: #fff;\n }\n \n .uptrade-booking-error {\n background: #fef2f2;\n border: 1px solid #fecaca;\n color: #b91c1c;\n padding: 12px;\n border-radius: var(--booking-radius);\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n \n .uptrade-booking-error button {\n background: none;\n border: none;\n color: inherit;\n cursor: pointer;\n text-decoration: underline;\n }\n \n .uptrade-booking-title {\n font-size: 1.25rem;\n font-weight: 600;\n margin: 0 0 8px 0;\n }\n \n .uptrade-booking-subtitle {\n color: #666;\n margin: 0 0 16px 0;\n }\n \n .uptrade-booking-back {\n background: none;\n border: none;\n color: var(--booking-primary);\n cursor: pointer;\n padding: 0;\n margin-bottom: 16px;\n font-size: 0.875rem;\n }\n \n .uptrade-booking-back:disabled {\n display: none;\n }\n \n .uptrade-booking-type-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n \n .uptrade-booking-type-card {\n text-align: left;\n padding: 16px;\n border: 1px solid #e5e5e5;\n border-radius: var(--booking-radius);\n background: #fff;\n cursor: pointer;\n transition: border-color 0.2s, box-shadow 0.2s;\n }\n \n .uptrade-booking-type-card:hover {\n border-color: var(--booking-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--booking-primary) 15%, transparent);\n }\n \n .uptrade-booking-type-name {\n font-weight: 600;\n margin-bottom: 4px;\n }\n \n .uptrade-booking-type-desc {\n color: #666;\n font-size: 0.875rem;\n margin-bottom: 8px;\n }\n \n .uptrade-booking-type-meta {\n display: flex;\n gap: 12px;\n font-size: 0.75rem;\n color: #888;\n }\n \n .uptrade-booking-date-grid {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n margin-bottom: 24px;\n }\n \n .uptrade-booking-date {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 12px;\n border: 1px solid #e5e5e5;\n border-radius: var(--booking-radius);\n background: #fff;\n cursor: pointer;\n transition: all 0.2s;\n }\n \n .uptrade-booking-date:hover {\n border-color: var(--booking-primary);\n }\n \n .uptrade-booking-date.selected {\n background: var(--booking-primary);\n border-color: var(--booking-primary);\n color: #fff;\n }\n \n .uptrade-booking-date-day {\n font-size: 0.625rem;\n text-transform: uppercase;\n }\n \n .uptrade-booking-date-num {\n font-size: 1.125rem;\n font-weight: 600;\n }\n \n .uptrade-booking-time-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 8px;\n }\n \n .uptrade-booking-time {\n padding: 10px;\n border: 1px solid #e5e5e5;\n border-radius: var(--booking-radius);\n background: #fff;\n cursor: pointer;\n font-size: 0.875rem;\n transition: all 0.2s;\n }\n \n .uptrade-booking-time:hover:not(:disabled) {\n border-color: var(--booking-primary);\n }\n \n .uptrade-booking-time.selected {\n background: var(--booking-primary);\n border-color: var(--booking-primary);\n color: #fff;\n }\n \n .uptrade-booking-time:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .uptrade-booking-loading,\n .uptrade-booking-empty {\n text-align: center;\n padding: 24px;\n color: #666;\n }\n \n .uptrade-booking-hold-notice {\n background: #fef3c7;\n border: 1px solid #fcd34d;\n color: #92400e;\n padding: 8px 12px;\n border-radius: var(--booking-radius);\n font-size: 0.875rem;\n margin-bottom: 16px;\n }\n \n .uptrade-booking-field {\n margin-bottom: 16px;\n }\n \n .uptrade-booking-field label {\n display: block;\n margin-bottom: 4px;\n font-size: 0.875rem;\n font-weight: 500;\n }\n \n .uptrade-booking-field input,\n .uptrade-booking-field textarea {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #e5e5e5;\n border-radius: var(--booking-radius);\n font-size: 1rem;\n font-family: inherit;\n }\n \n .uptrade-booking-field input:focus,\n .uptrade-booking-field textarea:focus {\n outline: none;\n border-color: var(--booking-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--booking-primary) 15%, transparent);\n }\n \n .uptrade-booking-submit {\n width: 100%;\n padding: 14px;\n background: var(--booking-primary);\n color: #fff;\n border: none;\n border-radius: var(--booking-radius);\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: opacity 0.2s;\n }\n \n .uptrade-booking-submit:hover:not(:disabled) {\n opacity: 0.9;\n }\n \n .uptrade-booking-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .uptrade-booking-success {\n text-align: center;\n }\n \n .uptrade-booking-success-icon {\n width: 64px;\n height: 64px;\n margin: 0 auto 16px;\n background: var(--booking-primary);\n color: #fff;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 2rem;\n }\n \n .uptrade-booking-confirmation-code {\n font-family: monospace;\n background: #f5f5f5;\n padding: 8px 16px;\n border-radius: var(--booking-radius);\n display: inline-block;\n margin-bottom: 24px;\n }\n \n .uptrade-booking-details {\n text-align: left;\n background: #f9f9f9;\n padding: 16px;\n border-radius: var(--booking-radius);\n margin-bottom: 24px;\n }\n \n .uptrade-booking-details p {\n margin: 0 0 8px 0;\n }\n \n .uptrade-booking-details p:last-child {\n margin-bottom: 0;\n }\n \n .uptrade-booking-calendar-links {\n margin-bottom: 24px;\n }\n \n .uptrade-booking-calendar-buttons {\n display: flex;\n gap: 8px;\n justify-content: center;\n margin-top: 8px;\n }\n \n .uptrade-booking-calendar-btn {\n padding: 8px 16px;\n border: 1px solid #e5e5e5;\n border-radius: var(--booking-radius);\n text-decoration: none;\n color: #333;\n font-size: 0.875rem;\n transition: all 0.2s;\n }\n \n .uptrade-booking-calendar-btn:hover {\n border-color: var(--booking-primary);\n color: var(--booking-primary);\n }\n \n .uptrade-booking-email-notice {\n color: #666;\n font-size: 0.875rem;\n }\n \n h4 {\n font-size: 0.875rem;\n font-weight: 600;\n margin: 0 0 12px 0;\n color: #666;\n }\n `}</style>\n </div>\n )\n}\n\nexport default BookingWidget\n"]}