@uptrademedia/site-kit 1.0.1 → 1.0.4

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 (159) hide show
  1. package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
  2. package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
  3. package/dist/analytics/index.d.mts +87 -0
  4. package/dist/analytics/index.d.ts +87 -0
  5. package/dist/blog/index.d.mts +24 -0
  6. package/dist/blog/index.d.ts +24 -0
  7. package/dist/blog/index.js.map +1 -1
  8. package/dist/blog/index.mjs.map +1 -1
  9. package/dist/chunk-2IHTEKHU.mjs +332 -0
  10. package/dist/chunk-2IHTEKHU.mjs.map +1 -0
  11. package/dist/chunk-5R4R3WDP.js +1451 -0
  12. package/dist/chunk-5R4R3WDP.js.map +1 -0
  13. package/dist/{chunk-RV7H3I6J.js → chunk-ADHVEFWD.js} +68 -2
  14. package/dist/chunk-ADHVEFWD.js.map +1 -0
  15. package/dist/chunk-BGJLOJ7T.mjs +605 -0
  16. package/dist/chunk-BGJLOJ7T.mjs.map +1 -0
  17. package/dist/chunk-BZBJVG5Y.js +88 -0
  18. package/dist/chunk-BZBJVG5Y.js.map +1 -0
  19. package/dist/{chunk-COI6GOX2.mjs → chunk-DOHML47I.mjs} +3 -3
  20. package/dist/chunk-DOHML47I.mjs.map +1 -0
  21. package/dist/chunk-DRFTRTKV.js +809 -0
  22. package/dist/chunk-DRFTRTKV.js.map +1 -0
  23. package/dist/chunk-EL5QTAA3.mjs +805 -0
  24. package/dist/chunk-EL5QTAA3.mjs.map +1 -0
  25. package/dist/chunk-GAJLEDRD.js +334 -0
  26. package/dist/chunk-GAJLEDRD.js.map +1 -0
  27. package/dist/{chunk-3MUOUXHV.js → chunk-K2HWVOEO.js} +3 -3
  28. package/dist/chunk-K2HWVOEO.js.map +1 -0
  29. package/dist/chunk-O2OHHBUD.js +997 -0
  30. package/dist/chunk-O2OHHBUD.js.map +1 -0
  31. package/dist/chunk-QAYJV4KK.js +608 -0
  32. package/dist/chunk-QAYJV4KK.js.map +1 -0
  33. package/dist/{chunk-FEBYQGY4 2.mjs → chunk-SMUFNQLM.mjs} +67 -3
  34. package/dist/chunk-SMUFNQLM.mjs.map +1 -0
  35. package/dist/chunk-VDMZZL2O.mjs +83 -0
  36. package/dist/chunk-VDMZZL2O.mjs.map +1 -0
  37. package/dist/chunk-XFRPT5ZX.mjs +1449 -0
  38. package/dist/chunk-XFRPT5ZX.mjs.map +1 -0
  39. package/dist/chunk-XQJX252G.mjs +981 -0
  40. package/dist/chunk-XQJX252G.mjs.map +1 -0
  41. package/dist/commerce/index.d.mts +168 -0
  42. package/dist/commerce/index.d.ts +168 -0
  43. package/dist/commerce/index.js +38 -38
  44. package/dist/commerce/index.mjs +1 -1
  45. package/dist/commerce/server.d.mts +98 -0
  46. package/dist/commerce/server.d.ts +98 -0
  47. package/dist/engage/index.d.mts +27 -0
  48. package/dist/engage/index.d.ts +27 -0
  49. package/dist/engage/index.js +7 -40
  50. package/dist/engage/index.js.map +1 -1
  51. package/dist/engage/index.mjs +1 -41
  52. package/dist/engage/index.mjs.map +1 -1
  53. package/dist/forms/index.d.mts +437 -0
  54. package/dist/forms/index.d.ts +437 -0
  55. package/dist/forms/index.js +13 -5
  56. package/dist/forms/index.js.map +1 -1
  57. package/dist/forms/index.mjs +2 -2
  58. package/dist/forms/index.mjs.map +1 -1
  59. package/dist/{generators-7Y5ABRYV 2.mjs → generators-TO2FKJR6.mjs} +134 -3
  60. package/dist/generators-TO2FKJR6.mjs.map +1 -0
  61. package/dist/{generators-GWIYCA5M.js → generators-YZWIGHCO.js} +135 -2
  62. package/dist/generators-YZWIGHCO.js.map +1 -0
  63. package/dist/images/index.d.mts +133 -0
  64. package/dist/images/index.d.ts +133 -0
  65. package/dist/images/index.js +41 -0
  66. package/dist/images/index.js.map +1 -0
  67. package/dist/images/index.mjs +8 -0
  68. package/dist/images/index.mjs.map +1 -0
  69. package/dist/index.d.mts +649 -0
  70. package/dist/index.d.ts +649 -0
  71. package/dist/index.js +1355 -104
  72. package/dist/index.js.map +1 -1
  73. package/dist/index.mjs +1242 -76
  74. package/dist/index.mjs.map +1 -1
  75. package/dist/redirects/index.d.mts +72 -0
  76. package/dist/redirects/index.d.ts +72 -0
  77. package/dist/redirects/index.js +25 -0
  78. package/dist/redirects/index.js.map +1 -0
  79. package/dist/redirects/index.mjs +4 -0
  80. package/dist/redirects/index.mjs.map +1 -0
  81. package/dist/routing-BWjUF7lp.d.ts +105 -0
  82. package/dist/routing-CgmRi9tD.d.mts +105 -0
  83. package/dist/{scanner-MF7P3CDE 2.mjs → scanner-AZV5I6US.mjs} +123 -4
  84. package/dist/scanner-AZV5I6US.mjs.map +1 -0
  85. package/dist/{scanner-NT6YG4TD 2.js → scanner-ETJAMIT7.js} +124 -3
  86. package/dist/scanner-ETJAMIT7.js.map +1 -0
  87. package/dist/seo/index.d.mts +273 -0
  88. package/dist/seo/index.d.ts +273 -0
  89. package/dist/seo/server.d.mts +89 -0
  90. package/dist/seo/server.d.ts +89 -0
  91. package/dist/setup/client.d.mts +60 -0
  92. package/dist/setup/client.d.ts +60 -0
  93. package/dist/setup/client.js +30 -0
  94. package/dist/setup/client.js.map +1 -0
  95. package/dist/setup/client.mjs +5 -0
  96. package/dist/setup/client.mjs.map +1 -0
  97. package/dist/setup/index.d.mts +5 -0
  98. package/dist/setup/index.d.ts +5 -0
  99. package/dist/setup/index.js +28 -1043
  100. package/dist/setup/index.js.map +1 -1
  101. package/dist/setup/index.mjs +3 -1043
  102. package/dist/setup/index.mjs.map +1 -1
  103. package/dist/setup/server.d.mts +14 -0
  104. package/dist/setup/server.d.ts +14 -0
  105. package/dist/setup/server.js +13 -0
  106. package/dist/setup/server.js.map +1 -0
  107. package/dist/setup/server.mjs +4 -0
  108. package/dist/setup/server.mjs.map +1 -0
  109. package/dist/sitemap/index.d.mts +78 -0
  110. package/dist/sitemap/index.d.ts +78 -0
  111. package/dist/types-BDojCvvL.d.mts +156 -0
  112. package/dist/types-BDojCvvL.d.ts +156 -0
  113. package/dist/types-BmzutFwy.d.mts +227 -0
  114. package/dist/types-BmzutFwy.d.ts +227 -0
  115. package/dist/types-C0pJGfbH.d.mts +155 -0
  116. package/dist/types-C0pJGfbH.d.ts +155 -0
  117. package/dist/types-DA_Kocle.d.mts +127 -0
  118. package/dist/types-DA_Kocle.d.ts +127 -0
  119. package/dist/types-lFLKKn0G.d.mts +163 -0
  120. package/dist/types-lFLKKn0G.d.ts +163 -0
  121. package/dist/types-nB206tPK.d.mts +309 -0
  122. package/dist/types-nB206tPK.d.ts +309 -0
  123. package/dist/useEventModal-6U1pF3_g.d.mts +209 -0
  124. package/dist/useEventModal-BA8g-1-P.d.ts +209 -0
  125. package/package.json +21 -1
  126. package/dist/chunk-3MUOUXHV.js.map +0 -1
  127. package/dist/chunk-4HVYXYQL 2.mjs +0 -255
  128. package/dist/chunk-4HVYXYQL.mjs +0 -255
  129. package/dist/chunk-4HVYXYQL.mjs.map +0 -1
  130. package/dist/chunk-COI6GOX2.mjs.map +0 -1
  131. package/dist/chunk-EQCVQC35.js 2.map +0 -1
  132. package/dist/chunk-FEBYQGY4.mjs +0 -251
  133. package/dist/chunk-FEBYQGY4.mjs.map +0 -1
  134. package/dist/chunk-NYKRE2FL 2.mjs +0 -31
  135. package/dist/chunk-NYKRE2FL.mjs 2.map +0 -1
  136. package/dist/chunk-RV7H3I6J.js 2.map +0 -1
  137. package/dist/chunk-RV7H3I6J.js.map +0 -1
  138. package/dist/chunk-TUKGA3UK.js +0 -257
  139. package/dist/chunk-TUKGA3UK.js 2.map +0 -1
  140. package/dist/chunk-TUKGA3UK.js.map +0 -1
  141. package/dist/generators-7Y5ABRYV.mjs +0 -161
  142. package/dist/generators-7Y5ABRYV.mjs 2.map +0 -1
  143. package/dist/generators-7Y5ABRYV.mjs.map +0 -1
  144. package/dist/generators-GWIYCA5M.js 2.map +0 -1
  145. package/dist/generators-GWIYCA5M.js.map +0 -1
  146. package/dist/index 2.mjs +0 -74
  147. package/dist/index.js 2.map +0 -1
  148. package/dist/migrator-V6KS75EA 2.mjs +0 -265
  149. package/dist/migrator-V6KS75EA.mjs 2.map +0 -1
  150. package/dist/migrator-XKM7YQCY.js 2.map +0 -1
  151. package/dist/scanner-MF7P3CDE.mjs +0 -14386
  152. package/dist/scanner-MF7P3CDE.mjs 2.map +0 -1
  153. package/dist/scanner-MF7P3CDE.mjs.map +0 -1
  154. package/dist/scanner-NT6YG4TD.js +0 -14397
  155. package/dist/scanner-NT6YG4TD.js 2.map +0 -1
  156. package/dist/scanner-NT6YG4TD.js.map +0 -1
  157. package/dist/web-vitals-BH55V7EJ.js 2.map +0 -1
  158. package/dist/web-vitals-RJYPWAR3 2.mjs +0 -241
  159. package/dist/web-vitals-RJYPWAR3.mjs 2.map +0 -1
@@ -0,0 +1,649 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default, { ReactNode } from 'react';
3
+ export { c as ManagedFAQData, M as ManagedMetadataResult, b as ManagedSchemaProps } from './types-BmzutFwy.mjs';
4
+ export { c as AnalyticsConfig, b as AnalyticsEvent, P as PageView } from './types-DA_Kocle.mjs';
5
+ export { C as ChatConfig, E as EngageElement, a as WidgetConfig } from './types-C0pJGfbH.mjs';
6
+ export { a as FormField, F as FormSubmission, M as ManagedFormConfig } from './types-lFLKKn0G.mjs';
7
+ export { c as BlogAuthor, d as BlogCategory, b as BlogPostType } from './types-BDojCvvL.mjs';
8
+ export { g as Cart, f as CartItem, e as CommerceCategory, C as CommerceOffering, c as CommerceSchedule, a as CommerceVariant, O as OfferingType } from './types-nB206tPK.mjs';
9
+ export { n as CalendarView, C as CheckoutForm, p as EventCalendar, m as EventEmbed, o as EventModal, E as EventTile, O as OfferingCard, l as OfferingList, P as ProductEmbed, R as RegistrationForm, U as UpcomingEvents, k as createCheckoutSession, j as fetchNextEvent, a as fetchOffering, f as fetchOfferings, c as fetchProducts, h as fetchServices, i as fetchUpcomingEvents, s as formatDate, t as formatDateTime, q as formatPrice, A as getOfferingUrl, r as registerForEvent, u as useEventModal } from './useEventModal-6U1pF3_g.mjs';
10
+ export { RedirectConfig, RedirectRule, clearRedirectCache, fetchRedirectRules, generateNextRedirects, handleManagedRedirects } from './redirects/index.mjs';
11
+ export { ImageApiConfig, ImageFile, ManagedImage, ManagedImageData, ManagedImageProps, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from './images/index.mjs';
12
+ export { S as SetupWizard } from './SetupWizard-Cki06kB0.mjs';
13
+ import 'next';
14
+ import 'next/server';
15
+
16
+ /**
17
+ * @uptrade/site-kit - Shared types across all modules
18
+ *
19
+ * Site-kit ONLY calls Portal API - never Supabase directly.
20
+ * All data access goes through api.uptrademedia.com with API key auth.
21
+ */
22
+ interface SiteKitConfig {
23
+ /**
24
+ * Portal API URL (defaults to https://api.uptrademedia.com)
25
+ */
26
+ apiUrl?: string;
27
+ /**
28
+ * Project API key for all API calls
29
+ * Required - identifies the project and provides access
30
+ */
31
+ apiKey: string;
32
+ /** Analytics module configuration */
33
+ analytics?: {
34
+ enabled: boolean;
35
+ trackPageViews?: boolean;
36
+ trackWebVitals?: boolean;
37
+ trackScrollDepth?: boolean;
38
+ trackClicks?: boolean;
39
+ sessionDuration?: number;
40
+ excludePaths?: string[];
41
+ };
42
+ /** Engage widget configuration */
43
+ engage?: {
44
+ enabled: boolean;
45
+ position?: 'bottom-right' | 'bottom-left';
46
+ zIndex?: number;
47
+ chatEnabled?: boolean;
48
+ };
49
+ /** Forms configuration */
50
+ forms?: {
51
+ enabled: boolean;
52
+ honeypotField?: string;
53
+ };
54
+ /** Debug mode - logs to console */
55
+ debug?: boolean;
56
+ }
57
+
58
+ interface SignalConfig$1 {
59
+ enabled: boolean;
60
+ realtime?: boolean;
61
+ experiments?: boolean;
62
+ behaviorTracking?: boolean;
63
+ }
64
+ interface SiteKitContextValue extends SiteKitConfig {
65
+ isReady: boolean;
66
+ signal?: SignalConfig$1;
67
+ signalUrl?: string;
68
+ }
69
+ declare function useSiteKit(): SiteKitContextValue;
70
+ interface SiteKitProviderProps extends SiteKitConfig {
71
+ children: ReactNode;
72
+ signalUrl?: string;
73
+ }
74
+ declare function SiteKitProvider({ children, apiUrl, signalUrl, apiKey, analytics, engage, forms, signal, debug, }: SiteKitProviderProps & {
75
+ signal?: SignalConfig$1;
76
+ }): react_jsx_runtime.JSX.Element;
77
+
78
+ /**
79
+ * @uptrade/site-kit/affiliates - Affiliates Types
80
+ *
81
+ * TypeScript types for affiliate tracking and display.
82
+ */
83
+ interface Affiliate {
84
+ id: string;
85
+ project_id: string;
86
+ name: string;
87
+ website_url?: string;
88
+ logo_url?: string;
89
+ status: 'active' | 'paused';
90
+ notes?: string;
91
+ created_at: string;
92
+ }
93
+ interface AffiliateOffer {
94
+ id: string;
95
+ affiliate_id: string;
96
+ name: string;
97
+ destination_url: string;
98
+ description?: string;
99
+ payout_type: 'flat' | 'percent' | 'none';
100
+ payout_amount?: number;
101
+ is_active: boolean;
102
+ }
103
+ interface AffiliateWithOffers extends Affiliate {
104
+ offers: AffiliateOffer[];
105
+ }
106
+ interface FetchAffiliatesOptions {
107
+ status?: 'active' | 'paused';
108
+ includeOffers?: boolean;
109
+ }
110
+
111
+ /**
112
+ * @uptrade/site-kit/affiliates - Affiliates API
113
+ *
114
+ * API functions for fetching affiliate data for client sites.
115
+ * All data goes through Portal API with API key auth - never Supabase directly.
116
+ */
117
+
118
+ /**
119
+ * Fetch all active affiliates for the project
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * const affiliates = await fetchAffiliates()
124
+ * ```
125
+ */
126
+ declare function fetchAffiliates(options?: FetchAffiliatesOptions): Promise<AffiliateWithOffers[]>;
127
+ /**
128
+ * Build a tracking URL for an affiliate offer
129
+ * When clicked, this redirects through our tracking endpoint and then to the destination
130
+ *
131
+ * @example
132
+ * ```ts
133
+ * const trackingUrl = getTrackingUrl(affiliate.id, offer.id)
134
+ * // Returns: https://api.uptrademedia.com/a/{affiliateId}/{offerId}
135
+ * ```
136
+ */
137
+ declare function getTrackingUrl(affiliateId: string, offerId: string): string;
138
+
139
+ /**
140
+ * @uptrade/site-kit/affiliates - useAffiliates Hook
141
+ *
142
+ * React hook for fetching and displaying affiliates on client sites.
143
+ */
144
+
145
+ interface UseAffiliatesResult {
146
+ affiliates: AffiliateWithOffers[];
147
+ isLoading: boolean;
148
+ error: string | null;
149
+ getTrackingUrl: (affiliateId: string, offerId: string) => string;
150
+ }
151
+ /**
152
+ * Hook to fetch affiliates for display on client sites
153
+ *
154
+ * @example
155
+ * ```tsx
156
+ * function AffiliatesSection() {
157
+ * const { affiliates, isLoading } = useAffiliates()
158
+ *
159
+ * if (isLoading) return <div>Loading...</div>
160
+ *
161
+ * return (
162
+ * <div className="grid grid-cols-3 gap-4">
163
+ * {affiliates.map(affiliate => (
164
+ * <AffiliateCard key={affiliate.id} affiliate={affiliate} />
165
+ * ))}
166
+ * </div>
167
+ * )
168
+ * }
169
+ * ```
170
+ */
171
+ declare function useAffiliates(): UseAffiliatesResult;
172
+
173
+ interface AffiliateCardProps {
174
+ affiliate: AffiliateWithOffers;
175
+ className?: string;
176
+ /** Optional custom render for the logo */
177
+ renderLogo?: (affiliate: AffiliateWithOffers) => React__default.ReactNode;
178
+ /** Show offers as links below the card */
179
+ showOffers?: boolean;
180
+ }
181
+ /**
182
+ * Single affiliate card - unstyled, bring your own CSS
183
+ *
184
+ * @example
185
+ * ```tsx
186
+ * <AffiliateCard
187
+ * affiliate={affiliate}
188
+ * className="p-4 bg-white rounded-lg shadow"
189
+ * showOffers
190
+ * />
191
+ * ```
192
+ */
193
+ declare function AffiliateCard({ affiliate, className, renderLogo, showOffers, }: AffiliateCardProps): react_jsx_runtime.JSX.Element;
194
+ interface AffiliatesWidgetProps {
195
+ className?: string;
196
+ /** Custom loading component */
197
+ loadingComponent?: React__default.ReactNode;
198
+ /** Custom empty state component */
199
+ emptyComponent?: React__default.ReactNode;
200
+ /** Custom error component */
201
+ errorComponent?: React__default.ReactNode;
202
+ /** Show offers on each card */
203
+ showOffers?: boolean;
204
+ /** Custom render function for each affiliate */
205
+ renderAffiliate?: (affiliate: AffiliateWithOffers) => React__default.ReactNode;
206
+ /** Maximum number to display */
207
+ limit?: number;
208
+ }
209
+ /**
210
+ * Display a grid of affiliates - unstyled, bring your own CSS
211
+ *
212
+ * @example
213
+ * ```tsx
214
+ * // Basic usage
215
+ * <AffiliatesWidget className="grid grid-cols-3 gap-4" />
216
+ *
217
+ * // With custom rendering
218
+ * <AffiliatesWidget
219
+ * renderAffiliate={(affiliate) => (
220
+ * <MyCustomCard key={affiliate.id} data={affiliate} />
221
+ * )}
222
+ * />
223
+ * ```
224
+ */
225
+ declare function AffiliatesWidget({ className, loadingComponent, emptyComponent, errorComponent, showOffers, renderAffiliate, limit, }: AffiliatesWidgetProps): string | number | bigint | true | Iterable<React__default.ReactNode> | Promise<React__default.AwaitedReactNode> | react_jsx_runtime.JSX.Element | null;
226
+
227
+ /**
228
+ * @uptrade/site-kit/signal - Types
229
+ *
230
+ * Type definitions for Signal integration
231
+ */
232
+ interface SignalConfig {
233
+ /** Config version (for cache invalidation) */
234
+ version: string;
235
+ /** Whether Signal is enabled for this project */
236
+ enabled: boolean;
237
+ /** Engage element overrides */
238
+ engage?: {
239
+ popups?: Record<string, EngageOverride>;
240
+ nudges?: Record<string, EngageOverride>;
241
+ banners?: Record<string, EngageOverride>;
242
+ chat?: ChatOverride;
243
+ };
244
+ /** SEO overrides */
245
+ seo?: {
246
+ meta?: Record<string, MetaOverride>;
247
+ redirects?: RedirectRule[];
248
+ };
249
+ /** Commerce overrides */
250
+ commerce?: {
251
+ pricing?: Record<string, PriceOverride>;
252
+ upsells?: Record<string, UpsellConfig>;
253
+ };
254
+ /** Active experiments */
255
+ experiments: ExperimentConfig[];
256
+ /** Updated timestamp */
257
+ updated_at: string;
258
+ }
259
+ interface EngageOverride {
260
+ /** Whether the element is enabled */
261
+ enabled?: boolean;
262
+ /** Timing override in ms */
263
+ timing?: number;
264
+ /** Content overrides */
265
+ content?: {
266
+ headline?: string;
267
+ body?: string;
268
+ cta?: string;
269
+ image?: string;
270
+ };
271
+ /** Targeting overrides */
272
+ targeting?: {
273
+ pages?: string[];
274
+ devices?: ('desktop' | 'mobile' | 'tablet')[];
275
+ segments?: string[];
276
+ };
277
+ }
278
+ interface ChatOverride {
279
+ /** Whether chat is enabled */
280
+ enabled?: boolean;
281
+ /** Auto-open delay in ms */
282
+ auto_open_delay?: number;
283
+ /** Welcome message override */
284
+ welcome_message?: string;
285
+ /** Offline message */
286
+ offline_message?: string;
287
+ }
288
+ interface MetaOverride {
289
+ /** Title tag override */
290
+ title?: string;
291
+ /** Meta description override */
292
+ description?: string;
293
+ /** OG image override */
294
+ og_image?: string;
295
+ }
296
+ interface RedirectRule {
297
+ /** Source path (supports wildcards) */
298
+ from: string;
299
+ /** Destination path */
300
+ to: string;
301
+ /** Redirect type */
302
+ type: 301 | 302;
303
+ /** Whether the rule is active */
304
+ active: boolean;
305
+ }
306
+ interface PriceOverride {
307
+ /** Offering ID */
308
+ offering_id: string;
309
+ /** New price in cents */
310
+ price: number;
311
+ /** Compare-at price for sales */
312
+ compare_at_price?: number;
313
+ /** Reason for override */
314
+ reason: string;
315
+ }
316
+ interface UpsellConfig {
317
+ /** Primary offering ID */
318
+ offering_id: string;
319
+ /** Upsell offering IDs */
320
+ upsell_ids: string[];
321
+ /** Display location */
322
+ location: 'cart' | 'checkout' | 'product_page';
323
+ }
324
+ interface ExperimentConfig {
325
+ /** Unique experiment ID */
326
+ id: string;
327
+ /** Human-readable name */
328
+ name: string;
329
+ /** Experiment status */
330
+ status: 'draft' | 'running' | 'paused' | 'completed';
331
+ /** Variants with weights */
332
+ variants: ExperimentVariant[];
333
+ /** Target pages/segments */
334
+ target?: {
335
+ pages?: string[];
336
+ segments?: string[];
337
+ devices?: ('desktop' | 'mobile' | 'tablet')[];
338
+ };
339
+ /** Goal definition */
340
+ goal: {
341
+ outcome_type: string;
342
+ min_confidence: number;
343
+ };
344
+ /** Traffic allocation (0-1) */
345
+ traffic_allocation: number;
346
+ /** Winner if determined */
347
+ winner_variant?: string;
348
+ }
349
+ interface ExperimentVariant {
350
+ /** Unique variant key */
351
+ key: string;
352
+ /** Display name */
353
+ name: string;
354
+ /** Traffic weight (0-1) */
355
+ weight: number;
356
+ /** Variant description */
357
+ description?: string;
358
+ }
359
+ interface ExperimentAssignment {
360
+ /** Experiment ID */
361
+ experiment_id: string;
362
+ /** Assigned variant key */
363
+ variant_key: string;
364
+ /** Assignment expiration */
365
+ expires: number;
366
+ /** Assigned timestamp */
367
+ assigned_at: string;
368
+ }
369
+ interface SignalEvent {
370
+ /** Event type (page_view, click, form_submit, etc.) */
371
+ event_type: string;
372
+ /** Specific event name */
373
+ event_name: string;
374
+ /** Event data payload */
375
+ event_data: Record<string, unknown>;
376
+ /** Page context */
377
+ page_url: string;
378
+ page_path: string;
379
+ referrer: string;
380
+ /** Device info */
381
+ device_type: 'desktop' | 'mobile' | 'tablet';
382
+ browser: string;
383
+ os: string;
384
+ viewport_width: number;
385
+ viewport_height: number;
386
+ /** Engagement metrics */
387
+ time_on_page: number;
388
+ scroll_depth: number;
389
+ click_count: number;
390
+ /** Active experiments */
391
+ experiments: Array<{
392
+ experiment_id: string;
393
+ variant_key: string;
394
+ }>;
395
+ /** Attribution */
396
+ utm_source?: string;
397
+ utm_medium?: string;
398
+ utm_campaign?: string;
399
+ /** Timestamp */
400
+ timestamp: string;
401
+ }
402
+ interface SignalOutcome {
403
+ /** Outcome type (form_submit, purchase, signup, etc.) */
404
+ outcome_type: string;
405
+ /** Monetary value if applicable */
406
+ value?: number;
407
+ /** Related entity ID */
408
+ entity_id?: string;
409
+ /** Active experiment IDs */
410
+ experiments: string[];
411
+ /** Additional context */
412
+ metadata?: Record<string, unknown>;
413
+ }
414
+ interface SignalContextValue {
415
+ /** Current config */
416
+ config: SignalConfig | null;
417
+ /** Whether Signal is loading */
418
+ loading: boolean;
419
+ /** Error if any */
420
+ error: Error | null;
421
+ /** Track a custom event */
422
+ trackEvent: (event: Partial<SignalEvent>) => void;
423
+ /** Report an outcome/conversion */
424
+ trackOutcome: (outcome: SignalOutcome) => void;
425
+ /** Get experiment assignment */
426
+ getExperiment: (experimentId: string) => ExperimentAssignment | null;
427
+ /** Force refresh config */
428
+ refreshConfig: () => Promise<void>;
429
+ }
430
+ interface SignalBridgeProps {
431
+ /** Enable Signal integration */
432
+ enabled?: boolean;
433
+ /** Enable real-time config updates via SSE */
434
+ realtime?: boolean;
435
+ /** Enable A/B experiment participation */
436
+ experiments?: boolean;
437
+ /** Enable rich behavioral tracking */
438
+ behaviorTracking?: boolean;
439
+ /** Children */
440
+ children: React.ReactNode;
441
+ }
442
+
443
+ declare function useSignal(): SignalContextValue;
444
+ declare function SignalBridge({ enabled, realtime, experiments, behaviorTracking, children, }: SignalBridgeProps): react_jsx_runtime.JSX.Element;
445
+ /**
446
+ * Hook to access Signal config
447
+ */
448
+ declare function useSignalConfig(): SignalConfig | null;
449
+ /**
450
+ * Hook for tracking events
451
+ */
452
+ declare function useSignalEvent(): (event: Partial<SignalEvent>) => void;
453
+ /**
454
+ * Hook for tracking outcomes/conversions
455
+ */
456
+ declare function useSignalOutcome(): {
457
+ trackOutcome: (outcome: SignalOutcome) => void;
458
+ };
459
+ /**
460
+ * Hook for experiment assignment
461
+ */
462
+ declare function useSignalExperiment(experimentId: string): {
463
+ assignment: ExperimentAssignment | null;
464
+ variant: string | null;
465
+ isControl: boolean;
466
+ };
467
+
468
+ interface SignalExperimentProps {
469
+ /** Unique experiment ID */
470
+ experimentId: string;
471
+ /** Variants to test - keys are variant names, values are React nodes */
472
+ variants: Record<string, React__default.ReactNode>;
473
+ /** Fallback content if no assignment (defaults to 'control' variant) */
474
+ fallback?: React__default.ReactNode;
475
+ /** Track impression automatically */
476
+ trackImpression?: boolean;
477
+ /** Children function for more control */
478
+ children?: (props: {
479
+ variant: string;
480
+ isControl: boolean;
481
+ }) => React__default.ReactNode;
482
+ }
483
+ /**
484
+ * Renders different content variants based on Signal's A/B assignment.
485
+ *
486
+ * @example
487
+ * // Simple variant switching
488
+ * <SignalExperiment experimentId="hero-cta" variants={{
489
+ * control: <Button>Get Started</Button>,
490
+ * variant_a: <Button variant="primary">Start Free Trial</Button>,
491
+ * variant_b: <Button variant="secondary">Book a Demo</Button>,
492
+ * }} />
493
+ *
494
+ * @example
495
+ * // With render prop for more control
496
+ * <SignalExperiment experimentId="pricing-layout">
497
+ * {({ variant, isControl }) => (
498
+ * <PricingSection layout={isControl ? 'cards' : 'table'} />
499
+ * )}
500
+ * </SignalExperiment>
501
+ */
502
+ declare function SignalExperiment({ experimentId, variants, fallback, trackImpression, children, }: SignalExperimentProps): react_jsx_runtime.JSX.Element;
503
+ /**
504
+ * Hook for conditional experiment logic
505
+ *
506
+ * @example
507
+ * const { variant, isControl } = useExperimentVariant('pricing-test')
508
+ *
509
+ * return isControl
510
+ * ? <OldPricing />
511
+ * : <NewPricing showAnnual={variant === 'annual_first'} />
512
+ */
513
+ declare function useExperimentVariant(experimentId: string): {
514
+ assignment: ExperimentAssignment | null;
515
+ variant: string | null;
516
+ isControl: boolean;
517
+ };
518
+ /**
519
+ * Component for tracking experiment conversions
520
+ * Wraps interactive elements to track when they convert
521
+ *
522
+ * @example
523
+ * <SignalExperiment experimentId="signup-button" variants={{
524
+ * control: (
525
+ * <ExperimentConversion experimentId="signup-button" outcomeType="click">
526
+ * <Button>Sign Up</Button>
527
+ * </ExperimentConversion>
528
+ * ),
529
+ * variant_a: (
530
+ * <ExperimentConversion experimentId="signup-button" outcomeType="click">
531
+ * <Button variant="large">Join Now - It's Free!</Button>
532
+ * </ExperimentConversion>
533
+ * ),
534
+ * }} />
535
+ */
536
+ declare function ExperimentConversion({ experimentId, outcomeType, value, children, }: {
537
+ experimentId: string;
538
+ outcomeType?: string;
539
+ value?: number;
540
+ children: React__default.ReactElement;
541
+ }): React__default.ReactElement<any, string | React__default.JSXElementConstructor<any>>;
542
+
543
+ /**
544
+ * @uptrade/site-kit/setup - Conversational Setup Assistant
545
+ *
546
+ * AI-powered conversational interface for setting up site-kit.
547
+ * Uses Echo/Signal to guide users through configuration.
548
+ *
549
+ * Features:
550
+ * - Streaming AI responses for real-time feedback
551
+ * - Brand extraction from existing websites
552
+ * - Module recommendations based on business type
553
+ * - Integration verification
554
+ * - Copilot instructions generation
555
+ */
556
+ interface SetupContext {
557
+ flow: 'new' | 'existing' | 'rebuild' | null;
558
+ step: string;
559
+ project_id?: string;
560
+ org_id?: string;
561
+ domain?: string;
562
+ business_type?: string;
563
+ scan_results?: ScanResults;
564
+ scrape_results?: ScrapeResults;
565
+ selected_modules?: string[];
566
+ brand?: BrandInfo;
567
+ }
568
+ interface ScanResults {
569
+ forms: {
570
+ file: string;
571
+ form_library: string;
572
+ fields: number;
573
+ }[];
574
+ widgets: {
575
+ file: string;
576
+ widget_type: string;
577
+ }[];
578
+ metadata: {
579
+ file: string;
580
+ type: string;
581
+ }[];
582
+ sitemaps: {
583
+ file: string;
584
+ type: string;
585
+ }[];
586
+ }
587
+ interface ScrapeResults {
588
+ scrape_id: string;
589
+ domain: string;
590
+ pages_found: number;
591
+ faqs_imported: number;
592
+ routes: {
593
+ path: string;
594
+ title: string;
595
+ }[];
596
+ brand?: BrandInfo;
597
+ }
598
+ interface BrandInfo {
599
+ business_name: string;
600
+ tagline?: string;
601
+ primary_color?: string;
602
+ secondary_color?: string;
603
+ logo_url?: string;
604
+ phone_numbers?: string[];
605
+ email_addresses?: string[];
606
+ social_profiles?: Record<string, string>;
607
+ }
608
+ interface SetupState {
609
+ step: 'welcome' | 'auth' | 'project' | 'modules' | 'config' | 'verify' | 'complete';
610
+ isAuthenticated: boolean;
611
+ userEmail?: string;
612
+ accessToken?: string;
613
+ selectedOrg?: {
614
+ id: string;
615
+ name: string;
616
+ };
617
+ selectedProject?: {
618
+ id: string;
619
+ name: string;
620
+ domain: string;
621
+ };
622
+ selectedModules: string[];
623
+ config: Record<string, unknown>;
624
+ errors: string[];
625
+ context: SetupContext;
626
+ }
627
+ interface SetupAssistantProps {
628
+ /** Portal API URL */
629
+ apiUrl?: string;
630
+ /** Signal API URL for AI chat */
631
+ signalUrl?: string;
632
+ /** Supabase URL for auth */
633
+ supabaseUrl?: string;
634
+ /** Supabase anon key */
635
+ supabaseKey?: string;
636
+ /** Pre-selected project ID (if coming from Portal) */
637
+ projectId?: string;
638
+ /** Pre-selected org ID (if coming from Portal) */
639
+ orgId?: string;
640
+ /** Auth token (if already authenticated) */
641
+ authToken?: string;
642
+ /** Callback when setup is complete */
643
+ onComplete?: (config: SetupState) => void;
644
+ /** Custom welcome message */
645
+ welcomeMessage?: string;
646
+ }
647
+ declare function SetupAssistant({ apiUrl, signalUrl, supabaseUrl, supabaseKey, projectId, orgId, authToken, onComplete, welcomeMessage, }: SetupAssistantProps): react_jsx_runtime.JSX.Element;
648
+
649
+ export { type Affiliate, AffiliateCard, type AffiliateCardProps, type AffiliateOffer, type AffiliateWithOffers, AffiliatesWidget, type AffiliatesWidgetProps, type EngageOverride, type ExperimentAssignment, type ExperimentConfig, ExperimentConversion, type ExperimentVariant, type MetaOverride, type PriceOverride, SetupAssistant, SignalBridge, type SignalBridgeProps, type SignalConfig, type SignalContextValue, type SignalEvent, SignalExperiment, type SignalOutcome, type SiteKitConfig, SiteKitProvider, type UseAffiliatesResult, fetchAffiliates, getTrackingUrl, useAffiliates, useExperimentVariant, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome, useSiteKit };