@sonordev/site-kit 1.2.7

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 (300) hide show
  1. package/README.md +376 -0
  2. package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
  3. package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
  4. package/dist/analytics/index.d.mts +93 -0
  5. package/dist/analytics/index.d.ts +93 -0
  6. package/dist/analytics/index.js +89 -0
  7. package/dist/analytics/index.js.map +1 -0
  8. package/dist/analytics/index.mjs +71 -0
  9. package/dist/analytics/index.mjs.map +1 -0
  10. package/dist/api-CWtoFJCO.d.mts +137 -0
  11. package/dist/api-CWtoFJCO.d.ts +137 -0
  12. package/dist/blog/index.d.mts +305 -0
  13. package/dist/blog/index.d.ts +305 -0
  14. package/dist/blog/index.js +1578 -0
  15. package/dist/blog/index.js.map +1 -0
  16. package/dist/blog/index.mjs +1562 -0
  17. package/dist/blog/index.mjs.map +1 -0
  18. package/dist/blog/server.d.mts +229 -0
  19. package/dist/blog/server.d.ts +229 -0
  20. package/dist/blog/server.js +692 -0
  21. package/dist/blog/server.js.map +1 -0
  22. package/dist/blog/server.mjs +666 -0
  23. package/dist/blog/server.mjs.map +1 -0
  24. package/dist/chunk-24277A3Q.mjs +968 -0
  25. package/dist/chunk-24277A3Q.mjs.map +1 -0
  26. package/dist/chunk-373TK6TZ.js +321 -0
  27. package/dist/chunk-373TK6TZ.js.map +1 -0
  28. package/dist/chunk-3MYZS6PD.js +30 -0
  29. package/dist/chunk-3MYZS6PD.js.map +1 -0
  30. package/dist/chunk-43GBM4SX.js +283 -0
  31. package/dist/chunk-43GBM4SX.js.map +1 -0
  32. package/dist/chunk-4XPGGLVP.mjs +53 -0
  33. package/dist/chunk-4XPGGLVP.mjs.map +1 -0
  34. package/dist/chunk-622GAQP5.js +2008 -0
  35. package/dist/chunk-622GAQP5.js.map +1 -0
  36. package/dist/chunk-6BIPAKL4.mjs +28 -0
  37. package/dist/chunk-6BIPAKL4.mjs.map +1 -0
  38. package/dist/chunk-6ZCISNAB.mjs +343 -0
  39. package/dist/chunk-6ZCISNAB.mjs.map +1 -0
  40. package/dist/chunk-72MQFHYJ.js +1429 -0
  41. package/dist/chunk-72MQFHYJ.js.map +1 -0
  42. package/dist/chunk-7557OTHW.js +62 -0
  43. package/dist/chunk-7557OTHW.js.map +1 -0
  44. package/dist/chunk-7FUV73JZ.js +981 -0
  45. package/dist/chunk-7FUV73JZ.js.map +1 -0
  46. package/dist/chunk-7RF6PVHA.mjs +324 -0
  47. package/dist/chunk-7RF6PVHA.mjs.map +1 -0
  48. package/dist/chunk-7RYCHO6D.mjs +134 -0
  49. package/dist/chunk-7RYCHO6D.mjs.map +1 -0
  50. package/dist/chunk-7UKPRW25.mjs +1999 -0
  51. package/dist/chunk-7UKPRW25.mjs.map +1 -0
  52. package/dist/chunk-7URAOG2M.js +14864 -0
  53. package/dist/chunk-7URAOG2M.js.map +1 -0
  54. package/dist/chunk-AFAO3TGS.mjs +810 -0
  55. package/dist/chunk-AFAO3TGS.mjs.map +1 -0
  56. package/dist/chunk-BYLIU6XG.js +343 -0
  57. package/dist/chunk-BYLIU6XG.js.map +1 -0
  58. package/dist/chunk-D63MUKZ6.mjs +4423 -0
  59. package/dist/chunk-D63MUKZ6.mjs.map +1 -0
  60. package/dist/chunk-DDKW2FNA.js +390 -0
  61. package/dist/chunk-DDKW2FNA.js.map +1 -0
  62. package/dist/chunk-DQYMKR27.mjs +341 -0
  63. package/dist/chunk-DQYMKR27.mjs.map +1 -0
  64. package/dist/chunk-DW5UJKHH.js +221 -0
  65. package/dist/chunk-DW5UJKHH.js.map +1 -0
  66. package/dist/chunk-EEZCR6E6.js +50 -0
  67. package/dist/chunk-EEZCR6E6.js.map +1 -0
  68. package/dist/chunk-GCJXQ4AG.mjs +59 -0
  69. package/dist/chunk-GCJXQ4AG.mjs.map +1 -0
  70. package/dist/chunk-JGNQK2G6.mjs +14845 -0
  71. package/dist/chunk-JGNQK2G6.mjs.map +1 -0
  72. package/dist/chunk-JTLOJLWQ.mjs +563 -0
  73. package/dist/chunk-JTLOJLWQ.mjs.map +1 -0
  74. package/dist/chunk-K23A4G76.mjs +202 -0
  75. package/dist/chunk-K23A4G76.mjs.map +1 -0
  76. package/dist/chunk-KKU3K7RG.js +336 -0
  77. package/dist/chunk-KKU3K7RG.js.map +1 -0
  78. package/dist/chunk-KUGMH4ZF.js +571 -0
  79. package/dist/chunk-KUGMH4ZF.js.map +1 -0
  80. package/dist/chunk-LBVWVP72.js +110 -0
  81. package/dist/chunk-LBVWVP72.js.map +1 -0
  82. package/dist/chunk-LIVWLY2P.js +138 -0
  83. package/dist/chunk-LIVWLY2P.js.map +1 -0
  84. package/dist/chunk-M2T6R7BA.mjs +1003 -0
  85. package/dist/chunk-M2T6R7BA.mjs.map +1 -0
  86. package/dist/chunk-MV3QN7PW.mjs +47 -0
  87. package/dist/chunk-MV3QN7PW.mjs.map +1 -0
  88. package/dist/chunk-OB7E654K.js +72 -0
  89. package/dist/chunk-OB7E654K.js.map +1 -0
  90. package/dist/chunk-OIIKTGRL.mjs +380 -0
  91. package/dist/chunk-OIIKTGRL.mjs.map +1 -0
  92. package/dist/chunk-P3UWIUJS.mjs +1427 -0
  93. package/dist/chunk-P3UWIUJS.mjs.map +1 -0
  94. package/dist/chunk-PKN27UMH.mjs +136 -0
  95. package/dist/chunk-PKN27UMH.mjs.map +1 -0
  96. package/dist/chunk-QXV4667R.mjs +105 -0
  97. package/dist/chunk-QXV4667R.mjs.map +1 -0
  98. package/dist/chunk-S7FRYNSU.mjs +315 -0
  99. package/dist/chunk-S7FRYNSU.mjs.map +1 -0
  100. package/dist/chunk-TFLQX7K7.mjs +68 -0
  101. package/dist/chunk-TFLQX7K7.mjs.map +1 -0
  102. package/dist/chunk-UWE5PCYJ.mjs +279 -0
  103. package/dist/chunk-UWE5PCYJ.mjs.map +1 -0
  104. package/dist/chunk-UYFDNX2F.js +4469 -0
  105. package/dist/chunk-UYFDNX2F.js.map +1 -0
  106. package/dist/chunk-W4PALSGM.js +350 -0
  107. package/dist/chunk-W4PALSGM.js.map +1 -0
  108. package/dist/chunk-WECQ6KOB.js +1008 -0
  109. package/dist/chunk-WECQ6KOB.js.map +1 -0
  110. package/dist/chunk-XQQWI6WB.js +814 -0
  111. package/dist/chunk-XQQWI6WB.js.map +1 -0
  112. package/dist/chunk-XZJOZJB6.js +140 -0
  113. package/dist/chunk-XZJOZJB6.js.map +1 -0
  114. package/dist/chunk-ZSMWDLMK.js +63 -0
  115. package/dist/chunk-ZSMWDLMK.js.map +1 -0
  116. package/dist/cli/index.js +37243 -0
  117. package/dist/cli/index.js.map +1 -0
  118. package/dist/cli/index.mjs +37209 -0
  119. package/dist/cli/index.mjs.map +1 -0
  120. package/dist/commerce/index.d.mts +170 -0
  121. package/dist/commerce/index.d.ts +170 -0
  122. package/dist/commerce/index.js +174 -0
  123. package/dist/commerce/index.js.map +1 -0
  124. package/dist/commerce/index.mjs +5 -0
  125. package/dist/commerce/index.mjs.map +1 -0
  126. package/dist/commerce/server.d.mts +107 -0
  127. package/dist/commerce/server.d.ts +107 -0
  128. package/dist/commerce/server.js +187 -0
  129. package/dist/commerce/server.js.map +1 -0
  130. package/dist/commerce/server.mjs +177 -0
  131. package/dist/commerce/server.mjs.map +1 -0
  132. package/dist/config/index.d.mts +43 -0
  133. package/dist/config/index.d.ts +43 -0
  134. package/dist/config/index.js +66 -0
  135. package/dist/config/index.js.map +1 -0
  136. package/dist/config/index.mjs +64 -0
  137. package/dist/config/index.mjs.map +1 -0
  138. package/dist/engage/index.d.mts +33 -0
  139. package/dist/engage/index.d.ts +33 -0
  140. package/dist/engage/index.js +22 -0
  141. package/dist/engage/index.js.map +1 -0
  142. package/dist/engage/index.mjs +5 -0
  143. package/dist/engage/index.mjs.map +1 -0
  144. package/dist/forms/index.d.mts +437 -0
  145. package/dist/forms/index.d.ts +437 -0
  146. package/dist/forms/index.js +1168 -0
  147. package/dist/forms/index.js.map +1 -0
  148. package/dist/forms/index.mjs +1142 -0
  149. package/dist/forms/index.mjs.map +1 -0
  150. package/dist/generators-2XKQMPKH.mjs +4 -0
  151. package/dist/generators-2XKQMPKH.mjs.map +1 -0
  152. package/dist/generators-DTMO36DV.js +33 -0
  153. package/dist/generators-DTMO36DV.js.map +1 -0
  154. package/dist/images/index.d.mts +4 -0
  155. package/dist/images/index.d.ts +4 -0
  156. package/dist/images/index.js +46 -0
  157. package/dist/images/index.js.map +1 -0
  158. package/dist/images/index.mjs +5 -0
  159. package/dist/images/index.mjs.map +1 -0
  160. package/dist/images/server.d.mts +69 -0
  161. package/dist/images/server.d.ts +69 -0
  162. package/dist/images/server.js +21 -0
  163. package/dist/images/server.js.map +1 -0
  164. package/dist/images/server.mjs +4 -0
  165. package/dist/images/server.mjs.map +1 -0
  166. package/dist/index.d.mts +846 -0
  167. package/dist/index.d.ts +846 -0
  168. package/dist/index.js +2623 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/index.mjs +2416 -0
  171. package/dist/index.mjs.map +1 -0
  172. package/dist/layout/index.d.mts +53 -0
  173. package/dist/layout/index.d.ts +53 -0
  174. package/dist/layout/index.js +187 -0
  175. package/dist/layout/index.js.map +1 -0
  176. package/dist/layout/index.mjs +185 -0
  177. package/dist/layout/index.mjs.map +1 -0
  178. package/dist/llms/index.d.mts +448 -0
  179. package/dist/llms/index.d.ts +448 -0
  180. package/dist/llms/index.js +581 -0
  181. package/dist/llms/index.js.map +1 -0
  182. package/dist/llms/index.mjs +529 -0
  183. package/dist/llms/index.mjs.map +1 -0
  184. package/dist/manifest/index.d.mts +62 -0
  185. package/dist/manifest/index.d.ts +62 -0
  186. package/dist/manifest/index.js +85 -0
  187. package/dist/manifest/index.js.map +1 -0
  188. package/dist/manifest/index.mjs +83 -0
  189. package/dist/manifest/index.mjs.map +1 -0
  190. package/dist/middleware/index.d.mts +63 -0
  191. package/dist/middleware/index.d.ts +63 -0
  192. package/dist/middleware/index.js +54 -0
  193. package/dist/middleware/index.js.map +1 -0
  194. package/dist/middleware/index.mjs +51 -0
  195. package/dist/middleware/index.mjs.map +1 -0
  196. package/dist/migrator-2MQHOFDQ.mjs +4 -0
  197. package/dist/migrator-2MQHOFDQ.mjs.map +1 -0
  198. package/dist/migrator-THJCF6MZ.js +37 -0
  199. package/dist/migrator-THJCF6MZ.js.map +1 -0
  200. package/dist/redirects/index.d.mts +78 -0
  201. package/dist/redirects/index.d.ts +78 -0
  202. package/dist/redirects/index.js +26 -0
  203. package/dist/redirects/index.js.map +1 -0
  204. package/dist/redirects/index.mjs +5 -0
  205. package/dist/redirects/index.mjs.map +1 -0
  206. package/dist/reputation/index.d.mts +57 -0
  207. package/dist/reputation/index.d.ts +57 -0
  208. package/dist/reputation/index.js +21 -0
  209. package/dist/reputation/index.js.map +1 -0
  210. package/dist/reputation/index.mjs +4 -0
  211. package/dist/reputation/index.mjs.map +1 -0
  212. package/dist/robots/index.d.mts +38 -0
  213. package/dist/robots/index.d.ts +38 -0
  214. package/dist/robots/index.js +52 -0
  215. package/dist/robots/index.js.map +1 -0
  216. package/dist/robots/index.mjs +50 -0
  217. package/dist/robots/index.mjs.map +1 -0
  218. package/dist/routing-B5XS-6_W.d.mts +118 -0
  219. package/dist/routing-DZYzyDHw.d.ts +118 -0
  220. package/dist/scanner-GAF5PO5F.js +53 -0
  221. package/dist/scanner-GAF5PO5F.js.map +1 -0
  222. package/dist/scanner-LKJKW7IT.mjs +4 -0
  223. package/dist/scanner-LKJKW7IT.mjs.map +1 -0
  224. package/dist/securityHeaders-nwZ6nP4g.d.mts +24 -0
  225. package/dist/securityHeaders-nwZ6nP4g.d.ts +24 -0
  226. package/dist/seo/index.d.mts +600 -0
  227. package/dist/seo/index.d.ts +600 -0
  228. package/dist/seo/index.js +883 -0
  229. package/dist/seo/index.js.map +1 -0
  230. package/dist/seo/index.mjs +773 -0
  231. package/dist/seo/index.mjs.map +1 -0
  232. package/dist/seo/register-sitemap-cli.js +151 -0
  233. package/dist/seo/register-sitemap-cli.js.map +1 -0
  234. package/dist/seo/register-sitemap-cli.mjs +144 -0
  235. package/dist/seo/register-sitemap-cli.mjs.map +1 -0
  236. package/dist/seo/server.d.mts +107 -0
  237. package/dist/seo/server.d.ts +107 -0
  238. package/dist/seo/server.js +207 -0
  239. package/dist/seo/server.js.map +1 -0
  240. package/dist/seo/server.mjs +186 -0
  241. package/dist/seo/server.mjs.map +1 -0
  242. package/dist/server-api-EWXKOQZA.mjs +4 -0
  243. package/dist/server-api-EWXKOQZA.mjs.map +1 -0
  244. package/dist/server-api-GJPNRYUP.js +81 -0
  245. package/dist/server-api-GJPNRYUP.js.map +1 -0
  246. package/dist/setup/client.d.mts +60 -0
  247. package/dist/setup/client.d.ts +60 -0
  248. package/dist/setup/client.js +31 -0
  249. package/dist/setup/client.js.map +1 -0
  250. package/dist/setup/client.mjs +6 -0
  251. package/dist/setup/client.mjs.map +1 -0
  252. package/dist/setup/index.d.mts +5 -0
  253. package/dist/setup/index.d.ts +5 -0
  254. package/dist/setup/index.js +35 -0
  255. package/dist/setup/index.js.map +1 -0
  256. package/dist/setup/index.mjs +6 -0
  257. package/dist/setup/index.mjs.map +1 -0
  258. package/dist/setup/server.d.mts +14 -0
  259. package/dist/setup/server.d.ts +14 -0
  260. package/dist/setup/server.js +13 -0
  261. package/dist/setup/server.js.map +1 -0
  262. package/dist/setup/server.mjs +4 -0
  263. package/dist/setup/server.mjs.map +1 -0
  264. package/dist/site-config/index.d.mts +24 -0
  265. package/dist/site-config/index.d.ts +24 -0
  266. package/dist/site-config/index.js +17 -0
  267. package/dist/site-config/index.js.map +1 -0
  268. package/dist/site-config/index.mjs +4 -0
  269. package/dist/site-config/index.mjs.map +1 -0
  270. package/dist/sitemap/index.d.mts +96 -0
  271. package/dist/sitemap/index.d.ts +96 -0
  272. package/dist/sitemap/index.js +288 -0
  273. package/dist/sitemap/index.js.map +1 -0
  274. package/dist/sitemap/index.mjs +285 -0
  275. package/dist/sitemap/index.mjs.map +1 -0
  276. package/dist/socket-loader-J26QHHOB.js +16 -0
  277. package/dist/socket-loader-J26QHHOB.js.map +1 -0
  278. package/dist/socket-loader-R7S2YJ2J.mjs +14 -0
  279. package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
  280. package/dist/types-0dmq3k20.d.mts +168 -0
  281. package/dist/types-0dmq3k20.d.ts +168 -0
  282. package/dist/types-Blb2QNkV.d.mts +263 -0
  283. package/dist/types-Blb2QNkV.d.ts +263 -0
  284. package/dist/types-BnCwwUX3.d.mts +250 -0
  285. package/dist/types-BnCwwUX3.d.ts +250 -0
  286. package/dist/types-CGlnp43R.d.mts +312 -0
  287. package/dist/types-CGlnp43R.d.ts +312 -0
  288. package/dist/types-D08004rU.d.mts +179 -0
  289. package/dist/types-D08004rU.d.ts +179 -0
  290. package/dist/types-DNSYU7qI.d.mts +127 -0
  291. package/dist/types-DNSYU7qI.d.ts +127 -0
  292. package/dist/types-KZP_VWZp.d.mts +266 -0
  293. package/dist/types-KZP_VWZp.d.ts +266 -0
  294. package/dist/useEventModal-BVTx69XE.d.mts +274 -0
  295. package/dist/useEventModal-Dx1dItTJ.d.ts +274 -0
  296. package/dist/web-vitals-444RLW3B.js +252 -0
  297. package/dist/web-vitals-444RLW3B.js.map +1 -0
  298. package/dist/web-vitals-KPICZIEF.mjs +241 -0
  299. package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
  300. package/package.json +192 -0
@@ -0,0 +1,846 @@
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-KZP_VWZp.mjs';
4
+ export { c as AnalyticsConfig, b as AnalyticsEvent, P as PageView } from './types-DNSYU7qI.mjs';
5
+ export { C as ChatConfig, c as EngageElement, d as WidgetConfig } from './types-BnCwwUX3.mjs';
6
+ export { a as FormField, F as FormSubmission, M as ManagedFormConfig } from './types-0dmq3k20.mjs';
7
+ export { d as BlogAuthor, b as BlogCategory, B as BlogPostType } from './types-D08004rU.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-CGlnp43R.mjs';
9
+ export { u as CalendarView, t as CheckoutForm, x as EventCalendar, s as EventEmbed, w as EventModal, E as EventTile, O as OfferingCard, p as OfferingList, q as ProductEmbed, R as RegistrationForm, U as UpcomingEvents, l as createCheckoutSession, j as fetchNextEvent, a as fetchOffering, f as fetchOfferings, c as fetchProducts, h as fetchServices, i as fetchUpcomingEvents, A as formatDate, B as formatDateTime, z as formatPrice, J as getOfferingUrl, r as registerForEvent, y as useEventModal } from './useEventModal-BVTx69XE.mjs';
10
+ export { RedirectConfig, RedirectRule, clearRedirectCache, fetchRedirectRules, generateNextRedirects, handleManagedRedirects } from './redirects/index.mjs';
11
+ export { g as ImageApiConfig, I as ImageFile, M as ManagedImage, b as ManagedImageData, a as ManagedImageProps, d as assignImageToSlot, e as clearImageSlot, f as fetchManagedImage, c as fetchManagedImages, l as listImageFiles, u as uploadImage } from './api-CWtoFJCO.mjs';
12
+ export { S as SetupWizard } from './SetupWizard-Cki06kB0.mjs';
13
+ export { Review, ReviewStats, TestimonialSection, TestimonialSectionProps, fetchReviewStats, fetchReviews } from './reputation/index.mjs';
14
+ import 'next';
15
+ import 'next/server';
16
+
17
+ /**
18
+ * @sonordev/site-kit - Shared types across all modules
19
+ *
20
+ * Site-kit ONLY calls Portal API - never Supabase directly.
21
+ * All data access goes through api.uptrademedia.com with API key auth.
22
+ */
23
+ interface SiteKitConfig {
24
+ /**
25
+ * Portal API URL (defaults to https://api.uptrademedia.com)
26
+ */
27
+ apiUrl?: string;
28
+ /**
29
+ * Project API key for all API calls
30
+ * Required - identifies the project and provides access
31
+ */
32
+ apiKey: string;
33
+ /**
34
+ * Project ID (UUID) for Engage chat - used for WebSocket room routing.
35
+ * If not provided, ChatWidget resolves it from /api/public/seo/project-info.
36
+ */
37
+ projectId?: string;
38
+ /**
39
+ * reCAPTCHA Enterprise site key for form spam protection.
40
+ * Can also be set via NEXT_PUBLIC_RECAPTCHA_SITE_KEY env var.
41
+ */
42
+ recaptchaSiteKey?: string;
43
+ /** Analytics module configuration */
44
+ analytics?: {
45
+ enabled: boolean;
46
+ trackPageViews?: boolean;
47
+ trackWebVitals?: boolean;
48
+ trackScrollDepth?: boolean;
49
+ trackClicks?: boolean;
50
+ sessionDuration?: number;
51
+ excludePaths?: string[];
52
+ };
53
+ /** Engage widget configuration */
54
+ engage?: {
55
+ enabled: boolean;
56
+ position?: 'bottom-right' | 'bottom-left';
57
+ zIndex?: number;
58
+ chatEnabled?: boolean;
59
+ };
60
+ /** Forms configuration */
61
+ forms?: {
62
+ enabled: boolean;
63
+ honeypotField?: string;
64
+ };
65
+ /** Debug mode - logs to console */
66
+ debug?: boolean;
67
+ }
68
+
69
+ interface SignalConfig$1 {
70
+ enabled: boolean;
71
+ realtime?: boolean;
72
+ experiments?: boolean;
73
+ behaviorTracking?: boolean;
74
+ }
75
+ interface SiteKitContextValue extends SiteKitConfig {
76
+ isReady: boolean;
77
+ signal?: SignalConfig$1;
78
+ signalUrl?: string;
79
+ }
80
+ declare function useSiteKit(): SiteKitContextValue;
81
+ interface SiteKitProviderProps extends SiteKitConfig {
82
+ children: ReactNode;
83
+ signalUrl?: string;
84
+ }
85
+ declare function SiteKitProvider({ children, apiKey, apiUrl, signalUrl, projectId, recaptchaSiteKey, analytics, engage, forms, signal, debug, }: SiteKitProviderProps & {
86
+ signal?: SignalConfig$1;
87
+ }): react_jsx_runtime.JSX.Element;
88
+
89
+ /**
90
+ * @sonordev/site-kit/affiliates - Affiliates Types
91
+ *
92
+ * TypeScript types for affiliate tracking and display.
93
+ */
94
+ interface Affiliate {
95
+ id: string;
96
+ project_id: string;
97
+ name: string;
98
+ website_url?: string;
99
+ logo_url?: string;
100
+ status: 'active' | 'paused';
101
+ notes?: string;
102
+ created_at: string;
103
+ }
104
+ interface AffiliateOffer {
105
+ id: string;
106
+ affiliate_id: string;
107
+ name: string;
108
+ destination_url: string;
109
+ description?: string;
110
+ payout_type: 'flat' | 'percent' | 'none';
111
+ payout_amount?: number;
112
+ is_active: boolean;
113
+ }
114
+ interface AffiliateWithOffers extends Affiliate {
115
+ offers: AffiliateOffer[];
116
+ }
117
+ interface FetchAffiliatesOptions {
118
+ status?: 'active' | 'paused';
119
+ includeOffers?: boolean;
120
+ }
121
+
122
+ /**
123
+ * @sonordev/site-kit/affiliates - Affiliates API
124
+ *
125
+ * API functions for fetching affiliate data for client sites.
126
+ * All data goes through Portal API with API key auth - never Supabase directly.
127
+ */
128
+
129
+ /**
130
+ * Fetch all active affiliates for the project
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * const affiliates = await fetchAffiliates()
135
+ * ```
136
+ */
137
+ declare function fetchAffiliates(options?: FetchAffiliatesOptions): Promise<AffiliateWithOffers[]>;
138
+ /**
139
+ * Build a tracking URL for an affiliate offer
140
+ * When clicked, this redirects through our tracking endpoint and then to the destination
141
+ *
142
+ * @example
143
+ * ```ts
144
+ * const trackingUrl = getTrackingUrl(affiliate.id, offer.id)
145
+ * // Returns: https://api.uptrademedia.com/a/{affiliateId}/{offerId}
146
+ * ```
147
+ */
148
+ declare function getTrackingUrl(affiliateId: string, offerId: string): string;
149
+
150
+ /**
151
+ * @sonordev/site-kit/affiliates - useAffiliates Hook
152
+ *
153
+ * React hook for fetching and displaying affiliates on client sites.
154
+ */
155
+
156
+ interface UseAffiliatesResult {
157
+ affiliates: AffiliateWithOffers[];
158
+ isLoading: boolean;
159
+ error: string | null;
160
+ getTrackingUrl: (affiliateId: string, offerId: string) => string;
161
+ }
162
+ /**
163
+ * Hook to fetch affiliates for display on client sites
164
+ *
165
+ * @example
166
+ * ```tsx
167
+ * function AffiliatesSection() {
168
+ * const { affiliates, isLoading } = useAffiliates()
169
+ *
170
+ * if (isLoading) return <div>Loading...</div>
171
+ *
172
+ * return (
173
+ * <div className="grid grid-cols-3 gap-4">
174
+ * {affiliates.map(affiliate => (
175
+ * <AffiliateCard key={affiliate.id} affiliate={affiliate} />
176
+ * ))}
177
+ * </div>
178
+ * )
179
+ * }
180
+ * ```
181
+ */
182
+ declare function useAffiliates(): UseAffiliatesResult;
183
+
184
+ interface AffiliateCardProps {
185
+ affiliate: AffiliateWithOffers;
186
+ className?: string;
187
+ /** Optional custom render for the logo */
188
+ renderLogo?: (affiliate: AffiliateWithOffers) => React__default.ReactNode;
189
+ /** Show offers as links below the card */
190
+ showOffers?: boolean;
191
+ }
192
+ /**
193
+ * Single affiliate card - unstyled, bring your own CSS
194
+ *
195
+ * @example
196
+ * ```tsx
197
+ * <AffiliateCard
198
+ * affiliate={affiliate}
199
+ * className="p-4 bg-white rounded-lg shadow"
200
+ * showOffers
201
+ * />
202
+ * ```
203
+ */
204
+ declare function AffiliateCard({ affiliate, className, renderLogo, showOffers, }: AffiliateCardProps): react_jsx_runtime.JSX.Element;
205
+ interface AffiliatesWidgetProps {
206
+ className?: string;
207
+ /** Custom loading component */
208
+ loadingComponent?: React__default.ReactNode;
209
+ /** Custom empty state component */
210
+ emptyComponent?: React__default.ReactNode;
211
+ /** Custom error component */
212
+ errorComponent?: React__default.ReactNode;
213
+ /** Show offers on each card */
214
+ showOffers?: boolean;
215
+ /** Custom render function for each affiliate */
216
+ renderAffiliate?: (affiliate: AffiliateWithOffers) => React__default.ReactNode;
217
+ /** Maximum number to display */
218
+ limit?: number;
219
+ }
220
+ /**
221
+ * Display a grid of affiliates - unstyled, bring your own CSS
222
+ *
223
+ * @example
224
+ * ```tsx
225
+ * // Basic usage
226
+ * <AffiliatesWidget className="grid grid-cols-3 gap-4" />
227
+ *
228
+ * // With custom rendering
229
+ * <AffiliatesWidget
230
+ * renderAffiliate={(affiliate) => (
231
+ * <MyCustomCard key={affiliate.id} data={affiliate} />
232
+ * )}
233
+ * />
234
+ * ```
235
+ */
236
+ 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;
237
+
238
+ /**
239
+ * @sonordev/site-kit/signal - Types
240
+ *
241
+ * Type definitions for Signal integration
242
+ */
243
+ interface SignalConfig {
244
+ /** Config version (for cache invalidation) */
245
+ version: string;
246
+ /** Whether Signal is enabled for this project */
247
+ enabled: boolean;
248
+ /** Engage element overrides */
249
+ engage?: {
250
+ popups?: Record<string, EngageOverride>;
251
+ nudges?: Record<string, EngageOverride>;
252
+ banners?: Record<string, EngageOverride>;
253
+ chat?: ChatOverride;
254
+ };
255
+ /** SEO overrides */
256
+ seo?: {
257
+ meta?: Record<string, MetaOverride>;
258
+ redirects?: RedirectRule[];
259
+ };
260
+ /** Commerce overrides */
261
+ commerce?: {
262
+ pricing?: Record<string, PriceOverride>;
263
+ upsells?: Record<string, UpsellConfig>;
264
+ };
265
+ /** Active experiments */
266
+ experiments: ExperimentConfig[];
267
+ /** Updated timestamp */
268
+ updated_at: string;
269
+ }
270
+ interface EngageOverride {
271
+ /** Whether the element is enabled */
272
+ enabled?: boolean;
273
+ /** Timing override in ms */
274
+ timing?: number;
275
+ /** Content overrides */
276
+ content?: {
277
+ headline?: string;
278
+ body?: string;
279
+ cta?: string;
280
+ image?: string;
281
+ };
282
+ /** Targeting overrides */
283
+ targeting?: {
284
+ pages?: string[];
285
+ devices?: ('desktop' | 'mobile' | 'tablet')[];
286
+ segments?: string[];
287
+ };
288
+ }
289
+ interface ChatOverride {
290
+ /** Whether chat is enabled */
291
+ enabled?: boolean;
292
+ /** Auto-open delay in ms */
293
+ auto_open_delay?: number;
294
+ /** Welcome message override */
295
+ welcome_message?: string;
296
+ /** Offline message */
297
+ offline_message?: string;
298
+ }
299
+ interface MetaOverride {
300
+ /** Title tag override */
301
+ title?: string;
302
+ /** Meta description override */
303
+ description?: string;
304
+ /** OG image override */
305
+ og_image?: string;
306
+ }
307
+ interface RedirectRule {
308
+ /** Source path (supports wildcards) */
309
+ from: string;
310
+ /** Destination path */
311
+ to: string;
312
+ /** Redirect type */
313
+ type: 301 | 302;
314
+ /** Whether the rule is active */
315
+ active: boolean;
316
+ }
317
+ interface PriceOverride {
318
+ /** Offering ID */
319
+ offering_id: string;
320
+ /** New price in cents */
321
+ price: number;
322
+ /** Compare-at price for sales */
323
+ compare_at_price?: number;
324
+ /** Reason for override */
325
+ reason: string;
326
+ }
327
+ interface UpsellConfig {
328
+ /** Primary offering ID */
329
+ offering_id: string;
330
+ /** Upsell offering IDs */
331
+ upsell_ids: string[];
332
+ /** Display location */
333
+ location: 'cart' | 'checkout' | 'product_page';
334
+ }
335
+ interface ExperimentConfig {
336
+ /** Unique experiment ID */
337
+ id: string;
338
+ /** Human-readable name */
339
+ name: string;
340
+ /** Experiment status */
341
+ status: 'draft' | 'running' | 'paused' | 'completed';
342
+ /** Variants with weights */
343
+ variants: ExperimentVariant[];
344
+ /** Target pages/segments */
345
+ target?: {
346
+ pages?: string[];
347
+ segments?: string[];
348
+ devices?: ('desktop' | 'mobile' | 'tablet')[];
349
+ };
350
+ /** Goal definition */
351
+ goal: {
352
+ outcome_type: string;
353
+ min_confidence: number;
354
+ };
355
+ /** Traffic allocation (0-1) */
356
+ traffic_allocation: number;
357
+ /** Winner if determined */
358
+ winner_variant?: string;
359
+ }
360
+ interface ExperimentVariant {
361
+ /** Unique variant key */
362
+ key: string;
363
+ /** Display name */
364
+ name: string;
365
+ /** Traffic weight (0-1) */
366
+ weight: number;
367
+ /** Variant description */
368
+ description?: string;
369
+ }
370
+ interface ExperimentAssignment {
371
+ /** Experiment ID */
372
+ experiment_id: string;
373
+ /** Assigned variant key */
374
+ variant_key: string;
375
+ /** Assignment expiration */
376
+ expires: number;
377
+ /** Assigned timestamp */
378
+ assigned_at: string;
379
+ }
380
+ interface SignalEvent {
381
+ /** Event type (page_view, click, form_submit, etc.) */
382
+ event_type: string;
383
+ /** Specific event name */
384
+ event_name: string;
385
+ /** Event data payload */
386
+ event_data: Record<string, unknown>;
387
+ /** Page context */
388
+ page_url: string;
389
+ page_path: string;
390
+ referrer: string;
391
+ /** Device info */
392
+ device_type: 'desktop' | 'mobile' | 'tablet';
393
+ browser: string;
394
+ os: string;
395
+ viewport_width: number;
396
+ viewport_height: number;
397
+ /** Engagement metrics */
398
+ time_on_page: number;
399
+ scroll_depth: number;
400
+ click_count: number;
401
+ /** Active experiments */
402
+ experiments: Array<{
403
+ experiment_id: string;
404
+ variant_key: string;
405
+ }>;
406
+ /** Page metadata from Analytics (word count, headings, images, links, etc.) */
407
+ page_metadata?: Record<string, unknown>;
408
+ /** Attribution */
409
+ utm_source?: string;
410
+ utm_medium?: string;
411
+ utm_campaign?: string;
412
+ /** Timestamp */
413
+ timestamp: string;
414
+ }
415
+ interface SignalOutcome {
416
+ /** Outcome type (form_submit, purchase, signup, etc.) */
417
+ outcome_type: string;
418
+ /** Monetary value if applicable */
419
+ value?: number;
420
+ /** Related entity ID */
421
+ entity_id?: string;
422
+ /** Active experiment IDs */
423
+ experiments: string[];
424
+ /** Additional context */
425
+ metadata?: Record<string, unknown>;
426
+ }
427
+ interface SignalContextValue {
428
+ /** Current config */
429
+ config: SignalConfig | null;
430
+ /** Whether Signal is loading */
431
+ loading: boolean;
432
+ /** Error if any */
433
+ error: Error | null;
434
+ /** Track a custom event */
435
+ trackEvent: (event: Partial<SignalEvent>) => void;
436
+ /** Report an outcome/conversion */
437
+ trackOutcome: (outcome: SignalOutcome) => void;
438
+ /** Get experiment assignment */
439
+ getExperiment: (experimentId: string) => ExperimentAssignment | null;
440
+ /** Force refresh config */
441
+ refreshConfig: () => Promise<void>;
442
+ }
443
+ interface SignalBridgeProps {
444
+ /** Enable Signal integration */
445
+ enabled?: boolean;
446
+ /** Enable real-time config updates via SSE */
447
+ realtime?: boolean;
448
+ /** Enable A/B experiment participation */
449
+ experiments?: boolean;
450
+ /** Enable rich behavioral tracking */
451
+ behaviorTracking?: boolean;
452
+ /** External visitor ID from shared identity */
453
+ visitorId?: string;
454
+ /** External session ID from shared identity */
455
+ sessionId?: string;
456
+ /** Ref to page metadata collected by Analytics (for enriching Signal events) */
457
+ pageMetadataRef?: React.RefObject<Record<string, unknown> | null>;
458
+ /** Children */
459
+ children: React.ReactNode;
460
+ }
461
+
462
+ declare function useSignal(): SignalContextValue;
463
+ declare function SignalBridge({ enabled, realtime, experiments, behaviorTracking, visitorId: externalVisitorId, sessionId: externalSessionId, pageMetadataRef, children, }: SignalBridgeProps): react_jsx_runtime.JSX.Element;
464
+ /**
465
+ * Hook to access Signal config
466
+ */
467
+ declare function useSignalConfig(): SignalConfig | null;
468
+ /**
469
+ * Hook for tracking events
470
+ */
471
+ declare function useSignalEvent(): (event: Partial<SignalEvent>) => void;
472
+ /**
473
+ * Hook for tracking outcomes/conversions
474
+ */
475
+ declare function useSignalOutcome(): {
476
+ trackOutcome: (outcome: SignalOutcome) => void;
477
+ };
478
+ /**
479
+ * Hook for experiment assignment
480
+ */
481
+ declare function useSignalExperiment(experimentId: string): {
482
+ assignment: ExperimentAssignment | null;
483
+ variant: string | null;
484
+ isControl: boolean;
485
+ };
486
+
487
+ interface SignalExperimentProps {
488
+ /** Unique experiment ID */
489
+ experimentId: string;
490
+ /** Variants to test - keys are variant names, values are React nodes */
491
+ variants: Record<string, React__default.ReactNode>;
492
+ /** Fallback content if no assignment (defaults to 'control' variant) */
493
+ fallback?: React__default.ReactNode;
494
+ /** Track impression automatically */
495
+ trackImpression?: boolean;
496
+ /** Children function for more control */
497
+ children?: (props: {
498
+ variant: string;
499
+ isControl: boolean;
500
+ }) => React__default.ReactNode;
501
+ }
502
+ /**
503
+ * Renders different content variants based on Signal's A/B assignment.
504
+ *
505
+ * @example
506
+ * // Simple variant switching
507
+ * <SignalExperiment experimentId="hero-cta" variants={{
508
+ * control: <Button>Get Started</Button>,
509
+ * variant_a: <Button variant="primary">Start Free Trial</Button>,
510
+ * variant_b: <Button variant="secondary">Book a Demo</Button>,
511
+ * }} />
512
+ *
513
+ * @example
514
+ * // With render prop for more control
515
+ * <SignalExperiment experimentId="pricing-layout">
516
+ * {({ variant, isControl }) => (
517
+ * <PricingSection layout={isControl ? 'cards' : 'table'} />
518
+ * )}
519
+ * </SignalExperiment>
520
+ */
521
+ declare function SignalExperiment({ experimentId, variants, fallback, trackImpression, children, }: SignalExperimentProps): react_jsx_runtime.JSX.Element;
522
+ /**
523
+ * Hook for conditional experiment logic
524
+ *
525
+ * @example
526
+ * const { variant, isControl } = useExperimentVariant('pricing-test')
527
+ *
528
+ * return isControl
529
+ * ? <OldPricing />
530
+ * : <NewPricing showAnnual={variant === 'annual_first'} />
531
+ */
532
+ declare function useExperimentVariant(experimentId: string): {
533
+ assignment: ExperimentAssignment | null;
534
+ variant: string | null;
535
+ isControl: boolean;
536
+ };
537
+ /**
538
+ * Component for tracking experiment conversions
539
+ * Wraps interactive elements to track when they convert
540
+ *
541
+ * @example
542
+ * <SignalExperiment experimentId="signup-button" variants={{
543
+ * control: (
544
+ * <ExperimentConversion experimentId="signup-button" outcomeType="click">
545
+ * <Button>Sign Up</Button>
546
+ * </ExperimentConversion>
547
+ * ),
548
+ * variant_a: (
549
+ * <ExperimentConversion experimentId="signup-button" outcomeType="click">
550
+ * <Button variant="large">Join Now - It's Free!</Button>
551
+ * </ExperimentConversion>
552
+ * ),
553
+ * }} />
554
+ */
555
+ declare function ExperimentConversion({ experimentId, outcomeType, value, children, }: {
556
+ experimentId: string;
557
+ outcomeType?: string;
558
+ value?: number;
559
+ children: React__default.ReactElement;
560
+ }): React__default.ReactElement<any, string | React__default.JSXElementConstructor<any>>;
561
+
562
+ /**
563
+ * @sonordev/site-kit/setup - Conversational Setup Assistant
564
+ *
565
+ * AI-powered conversational interface for setting up site-kit.
566
+ * Uses Echo/Signal to guide users through configuration.
567
+ *
568
+ * Features:
569
+ * - Streaming AI responses for real-time feedback
570
+ * - Brand extraction from existing websites
571
+ * - Module recommendations based on business type
572
+ * - Integration verification
573
+ * - Copilot instructions generation
574
+ */
575
+ interface SetupContext {
576
+ flow: 'new' | 'existing' | 'rebuild' | null;
577
+ step: string;
578
+ project_id?: string;
579
+ org_id?: string;
580
+ domain?: string;
581
+ business_type?: string;
582
+ scan_results?: ScanResults;
583
+ scrape_results?: ScrapeResults;
584
+ selected_modules?: string[];
585
+ brand?: BrandInfo;
586
+ }
587
+ interface ScanResults {
588
+ forms: {
589
+ file: string;
590
+ form_library: string;
591
+ fields: number;
592
+ }[];
593
+ widgets: {
594
+ file: string;
595
+ widget_type: string;
596
+ }[];
597
+ metadata: {
598
+ file: string;
599
+ type: string;
600
+ }[];
601
+ sitemaps: {
602
+ file: string;
603
+ type: string;
604
+ }[];
605
+ }
606
+ interface ScrapeResults {
607
+ scrape_id: string;
608
+ domain: string;
609
+ pages_found: number;
610
+ faqs_imported: number;
611
+ routes: {
612
+ path: string;
613
+ title: string;
614
+ }[];
615
+ brand?: BrandInfo;
616
+ }
617
+ interface BrandInfo {
618
+ business_name: string;
619
+ tagline?: string;
620
+ primary_color?: string;
621
+ secondary_color?: string;
622
+ logo_url?: string;
623
+ phone_numbers?: string[];
624
+ email_addresses?: string[];
625
+ social_profiles?: Record<string, string>;
626
+ }
627
+ interface SetupState {
628
+ step: 'welcome' | 'auth' | 'project' | 'modules' | 'config' | 'verify' | 'complete';
629
+ isAuthenticated: boolean;
630
+ userEmail?: string;
631
+ accessToken?: string;
632
+ selectedOrg?: {
633
+ id: string;
634
+ name: string;
635
+ };
636
+ selectedProject?: {
637
+ id: string;
638
+ name: string;
639
+ domain: string;
640
+ };
641
+ selectedModules: string[];
642
+ config: Record<string, unknown>;
643
+ errors: string[];
644
+ context: SetupContext;
645
+ }
646
+ interface SetupAssistantProps {
647
+ /** Sonor API URL */
648
+ apiUrl?: string;
649
+ /** Signal API URL for AI chat */
650
+ signalUrl?: string;
651
+ /** Supabase URL for auth */
652
+ supabaseUrl?: string;
653
+ /** Supabase anon key */
654
+ supabaseKey?: string;
655
+ /** Pre-selected project ID (if coming from Sonor) */
656
+ projectId?: string;
657
+ /** Pre-selected org ID (if coming from Sonor) */
658
+ orgId?: string;
659
+ /** Auth token (if already authenticated) */
660
+ authToken?: string;
661
+ /** Callback when setup is complete */
662
+ onComplete?: (config: SetupState) => void;
663
+ /** Custom welcome message */
664
+ welcomeMessage?: string;
665
+ }
666
+ declare function SetupAssistant({ apiUrl, signalUrl, supabaseUrl, supabaseKey, projectId, orgId, authToken, onComplete, welcomeMessage, }: SetupAssistantProps): react_jsx_runtime.JSX.Element;
667
+
668
+ /**
669
+ * Sync Module Types - Booking Widget for Client Sites
670
+ */
671
+ interface BookingType {
672
+ id: string;
673
+ slug: string;
674
+ name: string;
675
+ description?: string;
676
+ duration_minutes: number;
677
+ buffer_before?: number;
678
+ buffer_after?: number;
679
+ color?: string;
680
+ location_type: 'video' | 'phone' | 'in_person' | 'custom';
681
+ location_details?: string;
682
+ price_cents?: number;
683
+ currency?: string;
684
+ is_active: boolean;
685
+ }
686
+ interface TimeSlot {
687
+ start: string;
688
+ end: string;
689
+ hostId?: string;
690
+ available: boolean;
691
+ }
692
+ interface Host {
693
+ id: string;
694
+ name: string;
695
+ email?: string;
696
+ avatar?: string;
697
+ title?: string;
698
+ bio?: string;
699
+ }
700
+ interface SlotHold {
701
+ holdId: string;
702
+ expiresAt: string;
703
+ expiresInSeconds: number;
704
+ }
705
+ interface BookingResult {
706
+ success: boolean;
707
+ booking: {
708
+ id: string;
709
+ confirmationCode: string;
710
+ scheduledAt: string;
711
+ durationMinutes: number;
712
+ hostName?: string;
713
+ timezone: string;
714
+ };
715
+ cancelUrl: string;
716
+ rescheduleUrl: string;
717
+ calendarLinks: {
718
+ google: string;
719
+ outlook: string;
720
+ ics: string;
721
+ };
722
+ }
723
+ interface BookingWidgetProps {
724
+ /** Organization slug – required for public (unauthenticated) mode, optional with apiKey */
725
+ orgSlug?: string;
726
+ /** API key – when provided, uses authenticated /sync/widget/* endpoints (no orgSlug needed) */
727
+ apiKey?: string;
728
+ /** API base URL - defaults to https://api.uptrademedia.com */
729
+ apiUrl?: string;
730
+ /** Specific booking type slug to show (optional - shows all if not provided) */
731
+ bookingTypeSlug?: string;
732
+ /** Guest's timezone (auto-detected if not provided) */
733
+ timezone?: string;
734
+ /** Custom class name for styling */
735
+ className?: string;
736
+ /** Number of days to show availability for */
737
+ daysToShow?: number;
738
+ /** Called when booking is completed */
739
+ onBookingComplete?: (result: BookingResult) => void;
740
+ /** Called when an error occurs */
741
+ onError?: (error: Error) => void;
742
+ /** Hide the booking type selector (for single type embed) */
743
+ hideTypeSelector?: boolean;
744
+ /** Custom styles */
745
+ styles?: {
746
+ primaryColor?: string;
747
+ borderRadius?: string;
748
+ fontFamily?: string;
749
+ };
750
+ }
751
+ interface GuestInfo {
752
+ name: string;
753
+ email: string;
754
+ phone?: string;
755
+ notes?: string;
756
+ }
757
+ interface SyncWidgetConfig {
758
+ apiUrl: string;
759
+ orgSlug: string;
760
+ timezone: string;
761
+ }
762
+
763
+ declare function BookingWidget({ orgSlug, apiKey: propApiKey, apiUrl: propApiUrl, bookingTypeSlug, timezone: propTimezone, className, daysToShow, onBookingComplete, onError, hideTypeSelector, styles, }: BookingWidgetProps): react_jsx_runtime.JSX.Element;
764
+
765
+ /**
766
+ * Sync API Functions - Client-side API calls for booking widget
767
+ *
768
+ * Two modes:
769
+ * 1. API-key flow (preferred): Uses x-api-key header → /sync/widget/* endpoints.
770
+ * Project is resolved server-side from the key. No orgSlug needed.
771
+ * 2. Public/orgSlug flow (legacy): Uses /sync/public/:org/* endpoints. No auth.
772
+ */
773
+
774
+ /**
775
+ * Fetch booking types.
776
+ * - With apiKey → GET /sync/widget/types
777
+ * - With orgSlug → GET /sync/public/:org/types
778
+ */
779
+ declare function fetchBookingTypes(orgSlug?: string, apiUrl?: string, apiKey?: string): Promise<BookingType[]>;
780
+ /**
781
+ * Fetch booking type details
782
+ */
783
+ declare function fetchBookingTypeDetails(typeSlug: string, orgSlug?: string, apiUrl?: string, apiKey?: string): Promise<BookingType>;
784
+ /**
785
+ * Fetch available time slots for a specific date
786
+ */
787
+ declare function fetchAvailability(typeSlug: string, date: string, // YYYY-MM-DD format
788
+ orgSlug?: string, apiUrl?: string, apiKey?: string, timezone?: string, hostId?: string): Promise<TimeSlot[]>;
789
+ /**
790
+ * Hold a time slot temporarily (5-10 minutes)
791
+ */
792
+ declare function createSlotHold(holdData: {
793
+ bookingType: string;
794
+ slotStart: string;
795
+ slotEnd: string;
796
+ hostId: string;
797
+ sessionId: string;
798
+ guestEmail?: string;
799
+ }, apiUrl?: string, apiKey?: string): Promise<SlotHold>;
800
+ /**
801
+ * Release a slot hold
802
+ */
803
+ declare function releaseSlotHold(holdId: string, apiUrl?: string, apiKey?: string): Promise<void>;
804
+ /**
805
+ * Create a booking
806
+ */
807
+ declare function createBooking(bookingData: {
808
+ bookingType: string;
809
+ scheduledAt: string;
810
+ hostId: string;
811
+ name: string;
812
+ email: string;
813
+ phone?: string;
814
+ company?: string;
815
+ message?: string;
816
+ source: string;
817
+ timezone?: string;
818
+ holdId?: string;
819
+ sessionId?: string;
820
+ sourceUrl?: string;
821
+ }, apiUrl?: string, apiKey?: string): Promise<BookingResult>;
822
+ /**
823
+ * Get available dates for a month (helper for calendar view)
824
+ * Returns dates that have at least one available slot
825
+ */
826
+ declare function fetchAvailableDates(typeSlug: string, startDate: string, // YYYY-MM-DD
827
+ endDate: string, // YYYY-MM-DD
828
+ orgSlug?: string, apiUrl?: string, apiKey?: string, timezone?: string): Promise<string[]>;
829
+ /**
830
+ * Detect user's timezone
831
+ */
832
+ declare function detectTimezone(): string;
833
+ /**
834
+ * Format time for display
835
+ */
836
+ declare function formatTime(isoString: string, timezone: string): string;
837
+ /**
838
+ * Format date for display
839
+ */
840
+ declare function formatDate(isoString: string, timezone: string): string;
841
+ /**
842
+ * Format duration for display
843
+ */
844
+ declare function formatDuration(minutes: number): string;
845
+
846
+ export { type Affiliate, AffiliateCard, type AffiliateCardProps, type AffiliateOffer, type AffiliateWithOffers, AffiliatesWidget, type AffiliatesWidgetProps, type BookingResult, type BookingType, BookingWidget, type BookingWidgetProps, type EngageOverride, type ExperimentAssignment, type ExperimentConfig, ExperimentConversion, type ExperimentVariant, type GuestInfo, type Host, type MetaOverride, type PriceOverride, SetupAssistant, SignalBridge, type SignalBridgeProps, type SignalConfig, type SignalContextValue, type SignalEvent, SignalExperiment, type SignalOutcome, type SiteKitConfig, SiteKitProvider, type SlotHold, type SyncWidgetConfig, type TimeSlot, type UseAffiliatesResult, createBooking, createSlotHold, detectTimezone, fetchAffiliates, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate as formatBookingDate, formatTime as formatBookingTime, formatDuration, getTrackingUrl, releaseSlotHold, useAffiliates, useExperimentVariant, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome, useSiteKit };