@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 @@
1
+ {"version":3,"sources":["../src/SiteKitProvider.tsx","../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":["useEffect","getTrackingUrl","jsx","jsxs","Fragment","React","useState","onComplete","getApiConfig","formatDate","DEFAULT_API_URL","styles","useRef","useMemo","useCallback"],"mappings":"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AAO,QAAQ,CAAA,EAClC,CAAA;AAEJ;AAIA,IAAM,UAAA,GAAa;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,CAAA","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit - SiteKitProvider\n * \n * @deprecated SiteKitProvider forces all components to be client-side, breaking Next.js server components.\n * Use individual components/providers instead:\n * \n * - Server components (SEO, Images, Blog): Import directly, no provider needed\n * - Client components (Analytics, Engage): Use AnalyticsProvider, EngageWidget directly\n * \n * **Why deprecated:**\n * - Forces client-side rendering for all children (breaks server components)\n * - Uses React Context which doesn't work in server components\n * - Most Site-Kit components should be server components for better performance\n * \n * **Migration:**\n * ```tsx\n * // ❌ OLD (client-only):\n * <SiteKitProvider apiKey=\"...\" analytics={{ enabled: true }}>\n * <ManagedFavicon />\n * </SiteKitProvider>\n * \n * // ✅ NEW (server-first):\n * <ManagedFavicon /> // Already has env defaults, no provider needed\n * \n * // For Analytics (client component):\n * <AnalyticsProvider apiKey={process.env.NEXT_PUBLIC_UPTRADE_API_KEY}>\n * {children}\n * </AnalyticsProvider>\n * ```\n * \n * Legacy provider - use only for backwards compatibility.\n */\n\n'use client'\n\nimport React, { createContext, useContext, useMemo, useEffect, ReactNode, Suspense } from 'react'\nimport type { SiteKitConfig } from './types'\n\n// Module providers\nimport { AnalyticsProvider } from './analytics/AnalyticsProvider'\nimport { EngageWidget } from './engage/EngageWidget'\nimport { configureFormsApi } from './forms/formsApi'\nimport { SitemapSync } from './SitemapSync'\nimport { SignalBridge } from './signal/SignalBridge'\n\ninterface SignalConfig {\n enabled: boolean\n realtime?: boolean\n experiments?: boolean\n behaviorTracking?: boolean\n}\n\ninterface SiteKitContextValue extends SiteKitConfig {\n isReady: boolean\n signal?: SignalConfig\n signalUrl?: string\n}\n\nconst SiteKitContext = createContext<SiteKitContextValue | null>(null)\n\nexport function useSiteKit(): SiteKitContextValue {\n const context = useContext(SiteKitContext)\n if (!context) {\n throw new Error('useSiteKit must be used within a SiteKitProvider')\n }\n return context\n}\n\ninterface SiteKitProviderProps extends SiteKitConfig {\n children: ReactNode\n signalUrl?: string\n}\n\nexport function SiteKitProvider({\n children,\n apiKey,\n apiUrl,\n signalUrl,\n projectId,\n recaptchaSiteKey,\n analytics,\n engage,\n forms,\n signal,\n debug = false,\n}: SiteKitProviderProps & { signal?: SignalConfig }) {\n // Production: hardcoded URLs. Dev: use env vars from .env.local if set.\n const isDev = typeof process !== 'undefined' && process.env?.NODE_ENV === 'development'\n const defaultApiUrl = isDev && process.env?.NEXT_PUBLIC_UPTRADE_API_URL\n ? process.env.NEXT_PUBLIC_UPTRADE_API_URL\n : 'https://api.uptrademedia.com'\n const defaultSignalUrl = isDev && process.env?.NEXT_PUBLIC_SIGNAL_API_URL\n ? process.env.NEXT_PUBLIC_SIGNAL_API_URL\n : 'https://signal.uptrademedia.com'\n const finalApiUrl = apiUrl || defaultApiUrl\n const finalSignalUrl = signalUrl || defaultSignalUrl\n const finalRecaptchaSiteKey = recaptchaSiteKey ?? (typeof process !== 'undefined' ? process.env?.NEXT_PUBLIC_RECAPTCHA_SITE_KEY : undefined)\n \n // Validate API key\n if (!apiKey) {\n console.error('@sonordev/site-kit: No API key provided. Set NEXT_PUBLIC_UPTRADE_API_KEY environment variable.')\n }\n \n // Set window globals synchronously so hooks (e.g. useAffiliates) see the key before their effects run\n if (typeof window !== 'undefined') {\n ;(window as any).__SITE_KIT_API_URL__ = finalApiUrl\n ;(window as any).__SITE_KIT_SIGNAL_URL__ = finalSignalUrl\n ;(window as any).__SITE_KIT_API_KEY__ = apiKey\n ;(window as any).__SITE_KIT_RECAPTCHA_SITE_KEY__ = finalRecaptchaSiteKey\n ;(window as any).__SITE_KIT_DEBUG__ = debug\n }\n \n useEffect(() => {\n if (apiKey && typeof window !== 'undefined') {\n configureFormsApi({\n baseUrl: finalApiUrl,\n apiKey,\n })\n }\n }, [finalApiUrl, apiKey])\n\n const contextValue = useMemo<SiteKitContextValue>(\n () => ({\n apiUrl: finalApiUrl,\n signalUrl: finalSignalUrl,\n apiKey,\n analytics,\n engage,\n forms,\n signal,\n debug,\n isReady: true,\n }),\n [finalApiUrl, finalSignalUrl, apiKey, analytics, engage, forms, signal, debug]\n )\n\n // Build the provider tree based on enabled modules\n let content = <>{children}</>\n\n // Wrap with SignalBridge if enabled (must be outermost for context access)\n if (signal?.enabled) {\n content = (\n <SignalBridge\n enabled={signal.enabled}\n realtime={signal.realtime !== false}\n experiments={signal.experiments !== false}\n behaviorTracking={signal.behaviorTracking !== false}\n >\n {content}\n </SignalBridge>\n )\n }\n\n // Wrap with Analytics if enabled\n if (analytics?.enabled) {\n content = (\n <Suspense fallback={null}>\n <AnalyticsProvider\n apiUrl={finalApiUrl}\n apiKey={apiKey}\n trackPageViews={analytics.trackPageViews !== false}\n trackWebVitals={analytics.trackWebVitals !== false}\n trackScrollDepth={analytics.trackScrollDepth !== false}\n trackClicks={analytics.trackClicks !== false}\n debug={debug}\n >\n {content}\n </AnalyticsProvider>\n </Suspense>\n )\n }\n\n // Add Engage widget if enabled (doesn't wrap, just renders alongside)\n if (engage?.enabled) {\n content = (\n <>\n {content}\n <EngageWidget \n apiUrl={finalApiUrl} \n apiKey={apiKey}\n projectId={projectId}\n position={engage.position || 'bottom-right'}\n chatEnabled={engage.chatEnabled !== false}\n />\n </>\n )\n }\n\n // Always include SitemapSync to keep seo_pages in sync with sitemap.xml\n // This is the canonical source of truth for what pages exist\n content = (\n <>\n {content}\n <SitemapSync debug={debug} />\n </>\n )\n\n return (\n <SiteKitContext.Provider value={contextValue}>\n {content}\n </SiteKitContext.Provider>\n )\n}\n\n/**\n * Hook to check if a specific module is enabled\n */\nexport function useModuleEnabled(module: 'analytics' | 'engage' | 'forms' | 'seo'): boolean {\n const context = useSiteKit()\n \n switch (module) {\n case 'analytics':\n return context.analytics?.enabled ?? false\n case 'engage':\n return context.engage?.enabled ?? false\n case 'forms':\n return context.forms?.enabled ?? false\n case 'seo':\n return true // SEO is always enabled via RSC components\n default:\n return false\n }\n}\n","/**\n * @sonordev/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 * @sonordev/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 * @sonordev/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 * @sonordev/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 * @sonordev/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 /** Sonor 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 Sonor) */\n projectId?: string\n \n /** Pre-selected org ID (if coming from Sonor) */\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: 'Sonor-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 Sonor account.\\n\\nYou can sign in with your existing Sonor 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 Sonor.\\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** - Sonor-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 Sonor 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 Sonor 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 Sonor dashboard within a few minutes.`,\n [\n { id: '1', label: 'Open Sonor 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 Sonor 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 Sonor.\\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 @sonordev/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 Sonor shortly.`,\n [\n { id: '1', label: 'Open Sonor 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 Sonor 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 '@sonordev/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 * Two modes:\n * 1. API-key flow (preferred): Uses x-api-key header → /sync/widget/* endpoints.\n * Project is resolved server-side from the key. No orgSlug needed.\n * 2. Public/orgSlug flow (legacy): Uses /sync/public/:org/* endpoints. No auth.\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// Config helper (same pattern as analytics, commerce, engage)\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_URL__ || DEFAULT_API_URL\n : DEFAULT_API_URL\n const apiKey = typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_KEY__\n : undefined\n return { apiUrl, apiKey }\n}\n\n/** Build headers – always include Content-Type for POSTs; add x-api-key when available */\nfunction buildHeaders(apiKey?: string, isPost = false): Record<string, string> {\n const headers: Record<string, string> = {}\n if (isPost) headers['Content-Type'] = 'application/json'\n if (apiKey) headers['x-api-key'] = apiKey\n return headers\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Read endpoints\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fetch booking types.\n * - With apiKey → GET /sync/widget/types\n * - With orgSlug → GET /sync/public/:org/types\n */\nexport async function fetchBookingTypes(\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n): Promise<BookingType[]> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/types`\n : `${url}/sync/public/${orgSlug}/types`\n\n const response = await fetch(endpoint, { headers: buildHeaders(key) })\n \n if (!response.ok) {\n const msg = await response.json().catch(() => ({ message: response.statusText }))\n const detail = (msg && typeof msg.message === 'string') ? msg.message : response.statusText\n throw new Error(`Failed to fetch booking types: ${response.status} ${detail}`)\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 typeSlug: string,\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n): Promise<BookingType> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/types/${typeSlug}`\n : `${url}/sync/public/${orgSlug}/types/${typeSlug}`\n\n const response = await fetch(endpoint, { headers: buildHeaders(key) })\n \n if (!response.ok) {\n const msg = await response.json().catch(() => ({ message: response.statusText }))\n const detail = (msg && typeof msg.message === 'string') ? msg.message : response.statusText\n throw new Error(`Failed to fetch booking type: ${response.status} ${detail}`)\n }\n \n return response.json()\n}\n\n/**\n * Fetch available time slots for a specific date\n */\nexport async function fetchAvailability(\n typeSlug: string,\n date: string, // YYYY-MM-DD format\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n timezone?: string,\n hostId?: string,\n): Promise<TimeSlot[]> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const params = new URLSearchParams({ date })\n if (timezone) params.append('timezone', timezone)\n if (hostId) params.append('hostId', hostId)\n\n const endpoint = key\n ? `${url}/sync/widget/availability/${typeSlug}?${params}`\n : `${url}/sync/public/${orgSlug}/availability/${typeSlug}?${params}`\n\n const response = await fetch(endpoint, { headers: buildHeaders(key) })\n \n if (!response.ok) {\n const msg = await response.json().catch(() => ({ message: response.statusText }))\n let detail = (msg && typeof msg.message === 'string') ? String(msg.message).trim() : (response.statusText || '').trim()\n // Avoid \"404 404\": blank when detail is just the status code or only digits\n if (detail === String(response.status) || /^\\d+$/.test(detail)) detail = ''\n const rest = detail ? `${response.status} ${detail}` : String(response.status)\n const fallback =\n response.status === 404 && !detail\n ? 'No times available. In the Portal, check Sync → Booking Types (Schedule a Tour) has a host assigned and the project API key is set for this site.'\n : null\n throw new Error(fallback || `Failed to fetch availability: ${rest}`.trim())\n }\n \n const data = await response.json()\n const raw = data.slots || []\n // Normalize API shape (startTime/endTime, no available) to widget shape (start/end, available)\n return raw.map((slot: Record<string, unknown>) => ({\n start: slot.startTime ?? slot.start,\n end: slot.endTime ?? slot.end,\n hostId: slot.hostId,\n available: slot.available !== false,\n })) as TimeSlot[]\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Write endpoints\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Hold a time slot temporarily (5-10 minutes)\n */\nexport async function createSlotHold(\n holdData: {\n bookingType: string\n slotStart: string\n slotEnd: string\n hostId: string\n sessionId: string\n guestEmail?: string\n },\n apiUrl?: string,\n apiKey?: string,\n): Promise<SlotHold> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/hold`\n : `${url}/sync/public/hold`\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: buildHeaders(key, true),\n body: JSON.stringify(holdData),\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,\n apiKey?: string,\n): Promise<void> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/hold/${holdId}`\n : `${url}/sync/public/hold/${holdId}`\n\n await fetch(endpoint, {\n method: 'DELETE',\n headers: buildHeaders(key),\n })\n}\n\n/**\n * Create a booking\n */\nexport async function createBooking(\n bookingData: {\n bookingType: string\n scheduledAt: string\n hostId: string\n name: string\n email: string\n phone?: string\n company?: string\n message?: string\n source: string\n timezone?: string\n holdId?: string\n sessionId?: string\n sourceUrl?: string\n },\n apiUrl?: string,\n apiKey?: string,\n): Promise<BookingResult> {\n const cfg = getApiConfig()\n const url = apiUrl || cfg.apiUrl\n const key = apiKey || cfg.apiKey\n\n const endpoint = key\n ? `${url}/sync/widget/booking`\n : `${url}/sync/public/booking`\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: buildHeaders(key, true),\n body: JSON.stringify(bookingData),\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// Utility helpers\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 typeSlug: string,\n startDate: string, // YYYY-MM-DD\n endDate: string, // YYYY-MM-DD\n orgSlug?: string,\n apiUrl?: string,\n apiKey?: string,\n timezone?: string,\n): Promise<string[]> {\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(typeSlug, dateStr, orgSlug, apiUrl, apiKey, 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 - Premium embeddable booking widget for client sites\n *\n * Calendly-inspired scheduling experience:\n * 1. Full month calendar for date selection\n * 2. Scrollable time-slot column\n * 3. Polished guest information form\n * 4. Animated booking confirmation\n *\n * Ships with self-contained CSS (no external deps) so it works on any site.\n *\n * @example\n * ```tsx\n * import { BookingWidget } from '@sonordev/site-kit'\n *\n * <BookingWidget\n * orgSlug=\"manhattan-development-group\"\n * bookingTypeSlug=\"schedule-a-tour\"\n * hideTypeSelector\n * onBookingComplete={(r) => console.log(r)}\n * />\n * ```\n */\n\nimport * as React from 'react'\nimport { useState, useEffect, useCallback, useMemo, useRef } 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\n// ─── Constants ─────────────────────────────────────────────────────────────────\n\nconst DEFAULT_API_URL = 'https://api.uptrademedia.com'\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] as const\nconst MONTHS = [\n 'January','February','March','April','May','June',\n 'July','August','September','October','November','December',\n] as const\n\ntype BookingStep = 'type' | 'datetime' | 'form' | 'success'\n\n// ─── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction isSameDay(a: Date, b: Date) {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n )\n}\n\nfunction isBeforeDay(a: Date, b: Date) {\n const ac = new Date(a.getFullYear(), a.getMonth(), a.getDate())\n const bc = new Date(b.getFullYear(), b.getMonth(), b.getDate())\n return ac < bc\n}\n\nfunction calendarDays(year: number, month: number): (Date | null)[] {\n const first = new Date(year, month, 1)\n const last = new Date(year, month + 1, 0)\n const cells: (Date | null)[] = []\n for (let i = 0; i < first.getDay(); i++) cells.push(null) // leading blanks\n for (let d = 1; d <= last.getDate(); d++) cells.push(new Date(year, month, d))\n return cells\n}\n\n// ─── SVG Icons (inline, no deps) ──────────────────────────────────────────────\n\nfunction ChevronLeft() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12.5 15L7.5 10L12.5 5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction ChevronRight() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 5L12.5 10L7.5 15\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction ClockIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M8 4.5V8L10 10\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction GlobeIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M1.5 8H14.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M8 1.5C9.66 3.34 10.61 5.62 10.61 8C10.61 10.38 9.66 12.66 8 14.5C6.34 12.66 5.39 10.38 5.39 8C5.39 5.62 6.34 3.34 8 1.5Z\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n </svg>\n )\n}\n\nfunction CheckCircleIcon() {\n return (\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 56 56\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"28\" cy=\"28\" r=\"28\" fill=\"var(--bw-primary)\"/>\n <path d=\"M18 28.5L24.5 35L38 21.5\" stroke=\"white\" strokeWidth=\"3\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction CalendarPlusIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1.5\" y=\"2.5\" width=\"13\" height=\"12\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M1.5 6.5H14.5\" stroke=\"currentColor\" strokeWidth=\"1.2\"/>\n <path d=\"M5 1V4M11 1V4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\"/>\n <path d=\"M8 9V12M6.5 10.5H9.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\"/>\n </svg>\n )\n}\n\nfunction ArrowLeftIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3L5 8L10 13\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n )\n}\n\nfunction SpinnerIcon() {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className=\"bw-spinner\">\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeDasharray=\"50.265\" strokeDashoffset=\"25\" opacity=\"0.3\"/>\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeDasharray=\"50.265\" strokeDashoffset=\"37.7\"/>\n </svg>\n )\n}\n\n// ─── Component ─────────────────────────────────────────────────────────────────\n\nexport function BookingWidget({\n orgSlug,\n apiKey: propApiKey,\n apiUrl: propApiUrl,\n bookingTypeSlug,\n timezone: propTimezone,\n className = '',\n daysToShow = 60,\n onBookingComplete,\n onError,\n hideTypeSelector = false,\n styles = {},\n}: BookingWidgetProps) {\n // Resolve API key: prop > window global\n const apiKey = propApiKey || (typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_KEY__ : undefined)\n const apiUrl = propApiUrl || (typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_URL__ : undefined) || DEFAULT_API_URL\n // ── State ──\n const [step, setStep] = useState<BookingStep>(bookingTypeSlug ? 'datetime' : 'type')\n const [loading, setLoading] = useState(false)\n const [slotsLoading, setSlotsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const [bookingTypes, setBookingTypes] = useState<BookingType[]>([])\n const [selectedType, setSelectedType] = useState<BookingType | null>(null)\n const [viewMonth, setViewMonth] = useState(() => new Date())\n const [selectedDate, setSelectedDate] = useState<Date | null>(null)\n const [slots, setSlots] = useState<TimeSlot[]>([])\n const [selectedSlot, setSelectedSlot] = useState<TimeSlot | null>(null)\n const [confirmedSlot, setConfirmedSlot] = useState(false)\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 const [submitting, setSubmitting] = useState(false)\n\n const slotsRef = useRef<HTMLDivElement>(null)\n const today = useMemo(() => { const d = new Date(); d.setHours(0,0,0,0); return d }, [])\n const timezone = useMemo(() => propTimezone || detectTimezone(), [propTimezone])\n\n const shortTz = useMemo(() => {\n try {\n const parts = Intl.DateTimeFormat('en-US', { timeZone: timezone, timeZoneName: 'short' })\n .formatToParts(new Date())\n return parts.find(p => p.type === 'timeZoneName')?.value || timezone\n } catch { return timezone }\n }, [timezone])\n\n // Calendar grid for the current view month\n const days = useMemo(() => calendarDays(viewMonth.getFullYear(), viewMonth.getMonth()), [viewMonth])\n const maxDate = useMemo(() => { const d = new Date(today); d.setDate(d.getDate() + daysToShow); return d }, [today, daysToShow])\n\n // ── Data Loading ──\n\n useEffect(() => {\n if (bookingTypeSlug) {\n setLoading(true)\n fetchBookingTypeDetails(bookingTypeSlug, orgSlug, apiUrl, apiKey)\n .then(type => { setSelectedType(type); setStep('datetime') })\n .catch(err => { setError(err.message); onError?.(err) })\n .finally(() => setLoading(false))\n } else {\n setLoading(true)\n fetchBookingTypes(orgSlug, apiUrl, apiKey)\n .then(types => setBookingTypes(types.filter(t => t.is_active)))\n .catch(err => { setError(err.message); onError?.(err) })\n .finally(() => setLoading(false))\n }\n }, [orgSlug, apiKey, bookingTypeSlug, apiUrl, onError])\n\n useEffect(() => {\n if (!selectedDate || !selectedType) return\n const dateStr = selectedDate.toISOString().split('T')[0]\n setSlotsLoading(true)\n setSlots([])\n setSelectedSlot(null)\n setConfirmedSlot(false)\n\n fetchAvailability(selectedType.slug, dateStr, orgSlug, apiUrl, apiKey, timezone)\n .then(s => setSlots(s.filter(slot => slot.available)))\n .catch(err => { setError(err.message); onError?.(err) })\n .finally(() => setSlotsLoading(false))\n }, [selectedDate, selectedType, orgSlug, apiKey, apiUrl, timezone, onError])\n\n // ── Handlers ──\n\n const handleSlotSelect = useCallback((slot: TimeSlot) => {\n setSelectedSlot(slot)\n setConfirmedSlot(false)\n }, [])\n\n const handleSlotConfirm = useCallback(async () => {\n if (!selectedType || !selectedSlot) return\n if (hold) await releaseSlotHold(hold.holdId, apiUrl, apiKey).catch(() => {})\n\n setLoading(true)\n try {\n const newHold = await createSlotHold(\n {\n bookingType: selectedType.slug,\n slotStart: selectedSlot.start,\n slotEnd: selectedSlot.end,\n hostId: selectedSlot.hostId || '',\n sessionId: `bw-${Date.now()}`,\n },\n apiUrl,\n apiKey,\n )\n setHold(newHold)\n setConfirmedSlot(true)\n setStep('form')\n } catch (err: any) {\n setError(err.message)\n onError?.(err)\n } finally {\n setLoading(false)\n }\n }, [selectedType, selectedSlot, hold, timezone, apiUrl, apiKey, onError])\n\n const handleBookingSubmit = useCallback(async (e: React.FormEvent) => {\n e.preventDefault()\n if (!selectedType || !selectedSlot) return\n setSubmitting(true)\n setError(null)\n\n try {\n const result = await createBooking(\n {\n bookingType: selectedType.slug,\n scheduledAt: selectedSlot.start,\n hostId: selectedSlot.hostId || '',\n name: guestInfo.name,\n email: guestInfo.email,\n phone: guestInfo.phone,\n message: guestInfo.notes,\n source: 'main-site',\n timezone,\n holdId: hold?.holdId,\n sessionId: `bw-${Date.now()}`,\n sourceUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n },\n apiUrl,\n apiKey,\n )\n setBookingResult(result)\n setStep('success')\n onBookingComplete?.(result)\n } catch (err: any) {\n setError(err.message)\n onError?.(err)\n } finally {\n setSubmitting(false)\n }\n }, [selectedType, selectedSlot, guestInfo, timezone, hold, apiUrl, apiKey, onBookingComplete, onError])\n\n useEffect(() => {\n return () => { if (hold) releaseSlotHold(hold.holdId, apiUrl, apiKey).catch(() => {}) }\n }, [hold, apiUrl, apiKey])\n\n // ── Month Navigation ──\n\n const canGoPrev = viewMonth.getFullYear() > today.getFullYear() || viewMonth.getMonth() > today.getMonth()\n const canGoNext = viewMonth < maxDate\n\n const goMonth = (dir: -1 | 1) => {\n setViewMonth(prev => new Date(prev.getFullYear(), prev.getMonth() + dir, 1))\n }\n\n // ── Group slots by morning/afternoon ──\n\n const groupedSlots = useMemo(() => {\n const morning: TimeSlot[] = []\n const afternoon: TimeSlot[] = []\n const evening: TimeSlot[] = []\n for (const s of slots) {\n const h = new Date(s.start).getHours()\n if (h < 12) morning.push(s)\n else if (h < 17) afternoon.push(s)\n else evening.push(s)\n }\n return { morning, afternoon, evening }\n }, [slots])\n\n // ── CSS vars ──\n\n const cssVars = {\n '--bw-primary': styles.primaryColor || '#0069ff',\n '--bw-primary-light': styles.primaryColor\n ? `color-mix(in srgb, ${styles.primaryColor} 12%, white)`\n : '#e8f1ff',\n '--bw-primary-hover': styles.primaryColor\n ? `color-mix(in srgb, ${styles.primaryColor} 90%, black)`\n : '#0055d4',\n '--bw-radius': styles.borderRadius || '8px',\n '--bw-font': styles.fontFamily || \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n } as React.CSSProperties\n\n // ── Render ──\n\n return (\n <div className={`bw-root ${className}`} style={cssVars}>\n {/* Error Toast */}\n {error && (\n <div className=\"bw-error\" role=\"alert\">\n <span>{error}</span>\n <button onClick={() => setError(null)} aria-label=\"Dismiss error\">&times;</button>\n </div>\n )}\n\n {/* ───── Type Selection ───── */}\n {step === 'type' && !hideTypeSelector && (\n <div className=\"bw-step bw-fade-in\">\n <h2 className=\"bw-heading\">Select a Service</h2>\n {loading ? (\n <div className=\"bw-loading\"><SpinnerIcon /> Loading services...</div>\n ) : (\n <div className=\"bw-type-list\">\n {bookingTypes.map(type => (\n <button\n key={type.id}\n className=\"bw-type-card\"\n onClick={() => { setSelectedType(type); setStep('datetime') }}\n >\n <span className=\"bw-type-name\">{type.name}</span>\n {type.description && <span className=\"bw-type-desc\">{type.description}</span>}\n <span className=\"bw-type-meta\">\n <ClockIcon /> {formatDuration(type.duration_minutes)}\n {type.price_cents ? ` · $${(type.price_cents / 100).toFixed(2)}` : ' · Free'}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* ───── Date & Time ───── */}\n {step === 'datetime' && selectedType && (\n <div className=\"bw-step bw-fade-in\">\n {/* Booking info header */}\n <div className=\"bw-info-header\">\n {!bookingTypeSlug && (\n <button className=\"bw-back\" onClick={() => { setSelectedType(null); setStep('type') }}>\n <ArrowLeftIcon />\n </button>\n )}\n <div>\n <h2 className=\"bw-heading\">{selectedType.name}</h2>\n <div className=\"bw-meta-row\">\n <span className=\"bw-badge\"><ClockIcon /> {formatDuration(selectedType.duration_minutes)}</span>\n <span className=\"bw-badge\"><GlobeIcon /> {shortTz}</span>\n </div>\n </div>\n </div>\n\n <div className=\"bw-datetime-layout\">\n {/* Calendar */}\n <div className=\"bw-calendar\">\n <div className=\"bw-cal-header\">\n <button className=\"bw-cal-nav\" onClick={() => goMonth(-1)} disabled={!canGoPrev} aria-label=\"Previous month\">\n <ChevronLeft />\n </button>\n <span className=\"bw-cal-title\">{MONTHS[viewMonth.getMonth()]} {viewMonth.getFullYear()}</span>\n <button className=\"bw-cal-nav\" onClick={() => goMonth(1)} disabled={!canGoNext} aria-label=\"Next month\">\n <ChevronRight />\n </button>\n </div>\n <div className=\"bw-cal-weekdays\">\n {DAYS.map(d => <span key={d} className=\"bw-cal-wd\">{d}</span>)}\n </div>\n <div className=\"bw-cal-grid\">\n {days.map((date, i) => {\n if (!date) return <span key={`e-${i}`} className=\"bw-cal-empty\" />\n const past = isBeforeDay(date, today)\n const future = date > maxDate\n const disabled = past || future\n const sel = selectedDate && isSameDay(date, selectedDate)\n const isToday = isSameDay(date, today)\n return (\n <button\n key={date.toISOString()}\n className={`bw-cal-day${sel ? ' selected' : ''}${isToday ? ' today' : ''}${disabled ? ' disabled' : ''}`}\n onClick={() => !disabled && setSelectedDate(date)}\n disabled={disabled}\n aria-label={date.toLocaleDateString('en-US', { weekday: 'long', month: 'long', day: 'numeric' })}\n aria-pressed={sel || undefined}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Time Slots (appear when date selected) */}\n <div className={`bw-times${selectedDate ? ' visible' : ''}`} ref={slotsRef}>\n {!selectedDate ? (\n <div className=\"bw-times-placeholder\">\n <CalendarPlusIcon />\n <span>Select a date to view available times</span>\n </div>\n ) : slotsLoading ? (\n <div className=\"bw-loading\"><SpinnerIcon /> Loading times...</div>\n ) : slots.length === 0 ? (\n <div className=\"bw-times-empty\">No available times on this date. Try another day.</div>\n ) : (\n <div className=\"bw-times-scroll\">\n <p className=\"bw-times-date\">\n {selectedDate.toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric' })}\n </p>\n {groupedSlots.morning.length > 0 && (\n <div className=\"bw-time-group\">\n <span className=\"bw-time-label\">Morning</span>\n {groupedSlots.morning.map(slot => (\n <TimeButton key={slot.start} slot={slot} selected={selectedSlot?.start === slot.start} confirmed={confirmedSlot && selectedSlot?.start === slot.start} onClick={() => handleSlotSelect(slot)} onConfirm={handleSlotConfirm} timezone={timezone} loading={loading} />\n ))}\n </div>\n )}\n {groupedSlots.afternoon.length > 0 && (\n <div className=\"bw-time-group\">\n <span className=\"bw-time-label\">Afternoon</span>\n {groupedSlots.afternoon.map(slot => (\n <TimeButton key={slot.start} slot={slot} selected={selectedSlot?.start === slot.start} confirmed={confirmedSlot && selectedSlot?.start === slot.start} onClick={() => handleSlotSelect(slot)} onConfirm={handleSlotConfirm} timezone={timezone} loading={loading} />\n ))}\n </div>\n )}\n {groupedSlots.evening.length > 0 && (\n <div className=\"bw-time-group\">\n <span className=\"bw-time-label\">Evening</span>\n {groupedSlots.evening.map(slot => (\n <TimeButton key={slot.start} slot={slot} selected={selectedSlot?.start === slot.start} confirmed={confirmedSlot && selectedSlot?.start === slot.start} onClick={() => handleSlotSelect(slot)} onConfirm={handleSlotConfirm} timezone={timezone} loading={loading} />\n ))}\n </div>\n )}\n {(groupedSlots.afternoon.length > 0 || groupedSlots.evening.length > 0) && (\n <p className=\"bw-times-scroll-hint\">Scroll for more times</p>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* ───── Guest Form ───── */}\n {step === 'form' && selectedType && selectedSlot && (\n <div className=\"bw-step bw-fade-in\">\n <div className=\"bw-info-header\">\n <button className=\"bw-back\" onClick={() => setStep('datetime')}>\n <ArrowLeftIcon />\n </button>\n <div>\n <h2 className=\"bw-heading\">Your Details</h2>\n <div className=\"bw-meta-row\">\n <span className=\"bw-badge\"><ClockIcon /> {formatDuration(selectedType.duration_minutes)}</span>\n <span className=\"bw-badge-accent\">\n {formatDate(selectedSlot.start, timezone)} · {formatTime(selectedSlot.start, timezone)}\n </span>\n </div>\n </div>\n </div>\n\n {hold && (\n <div className=\"bw-hold-notice\">\n <SpinnerIcon /> Slot held for you — complete your details to confirm.\n </div>\n )}\n\n <form onSubmit={handleBookingSubmit} className=\"bw-form\">\n <div className=\"bw-field\">\n <label htmlFor=\"bw-name\">Name <span className=\"bw-req\">*</span></label>\n <input\n id=\"bw-name\"\n type=\"text\"\n required\n value={guestInfo.name}\n onChange={e => setGuestInfo(p => ({ ...p, name: e.target.value }))}\n placeholder=\"Jane Smith\"\n autoComplete=\"name\"\n />\n </div>\n <div className=\"bw-field\">\n <label htmlFor=\"bw-email\">Email <span className=\"bw-req\">*</span></label>\n <input\n id=\"bw-email\"\n type=\"email\"\n required\n value={guestInfo.email}\n onChange={e => setGuestInfo(p => ({ ...p, email: e.target.value }))}\n placeholder=\"jane@example.com\"\n autoComplete=\"email\"\n />\n </div>\n <div className=\"bw-field\">\n <label htmlFor=\"bw-phone\">Phone</label>\n <input\n id=\"bw-phone\"\n type=\"tel\"\n value={guestInfo.phone || ''}\n onChange={e => setGuestInfo(p => ({ ...p, phone: e.target.value }))}\n placeholder=\"(555) 123-4567\"\n autoComplete=\"tel\"\n />\n </div>\n <div className=\"bw-field\">\n <label htmlFor=\"bw-notes\">Notes</label>\n <textarea\n id=\"bw-notes\"\n value={guestInfo.notes || ''}\n onChange={e => setGuestInfo(p => ({ ...p, notes: e.target.value }))}\n placeholder=\"Anything you'd like us to know...\"\n rows={3}\n />\n </div>\n <button type=\"submit\" className=\"bw-submit\" disabled={submitting || !guestInfo.name || !guestInfo.email}>\n {submitting ? <><SpinnerIcon /> Confirming...</> : 'Confirm Booking'}\n </button>\n </form>\n </div>\n )}\n\n {/* ───── Success ───── */}\n {step === 'success' && bookingResult && (\n <div className=\"bw-step bw-fade-in bw-success\">\n <div className=\"bw-success-icon\"><CheckCircleIcon /></div>\n <h2 className=\"bw-heading\">You&rsquo;re Booked!</h2>\n\n <div className=\"bw-details-card\">\n <div className=\"bw-detail-row\">\n <span className=\"bw-detail-label\">When</span>\n <span className=\"bw-detail-value\">\n {formatDate(bookingResult.booking.scheduledAt, timezone)}<br/>\n {formatTime(bookingResult.booking.scheduledAt, timezone)} ({shortTz})\n </span>\n </div>\n <div className=\"bw-detail-row\">\n <span className=\"bw-detail-label\">Duration</span>\n <span className=\"bw-detail-value\">{formatDuration(bookingResult.booking.durationMinutes)}</span>\n </div>\n {bookingResult.booking.hostName && (\n <div className=\"bw-detail-row\">\n <span className=\"bw-detail-label\">With</span>\n <span className=\"bw-detail-value\">{bookingResult.booking.hostName}</span>\n </div>\n )}\n </div>\n\n <p className=\"bw-cal-links-label\">Add to your calendar</p>\n <div className=\"bw-cal-links\">\n <a href={bookingResult.calendarLinks.google} target=\"_blank\" rel=\"noopener noreferrer\" className=\"bw-cal-link\">\n <CalendarPlusIcon /> Google\n </a>\n <a href={bookingResult.calendarLinks.outlook} target=\"_blank\" rel=\"noopener noreferrer\" className=\"bw-cal-link\">\n <CalendarPlusIcon /> Outlook\n </a>\n <a href={bookingResult.calendarLinks.ics} download className=\"bw-cal-link\">\n <CalendarPlusIcon /> iCal\n </a>\n </div>\n\n <p className=\"bw-email-notice\">If your host uses Google Calendar, a calendar invite will be sent to <strong>{guestInfo.email}</strong>.</p>\n </div>\n )}\n\n {/* Loading overlay for initial type load */}\n {loading && step === 'datetime' && !selectedType && (\n <div className=\"bw-loading\"><SpinnerIcon /> Loading...</div>\n )}\n\n <style>{WIDGET_CSS}</style>\n </div>\n )\n}\n\n// ─── TimeButton Sub-component ──────────────────────────────────────────────────\n\nfunction TimeButton({\n slot, selected, confirmed, onClick, onConfirm, timezone, loading,\n}: {\n slot: TimeSlot; selected: boolean; confirmed: boolean; onClick: () => void; onConfirm: () => void; timezone: string; loading: boolean\n}) {\n if (selected && !confirmed) {\n return (\n <div className=\"bw-time-btn-wrap selected\">\n <span className=\"bw-time-text\">{formatTime(slot.start, timezone)}</span>\n <button className=\"bw-time-confirm\" onClick={onConfirm} disabled={loading}>\n {loading ? <SpinnerIcon /> : 'Confirm'}\n </button>\n </div>\n )\n }\n return (\n <button className={`bw-time-btn${selected ? ' selected' : ''}`} onClick={onClick} disabled={loading}>\n {formatTime(slot.start, timezone)}\n </button>\n )\n}\n\n// ─── Styles ────────────────────────────────────────────────────────────────────\n\nconst WIDGET_CSS = `\n/* ── Base ── */\n.bw-root {\n font-family: var(--bw-font);\n color: #1a1a1a;\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n box-sizing: border-box;\n}\n.bw-root *, .bw-root *::before, .bw-root *::after { box-sizing: border-box; }\n\n/* ── Animation ── */\n@keyframes bw-fade-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }\n@keyframes bw-spin { to { transform: rotate(360deg); } }\n.bw-fade-in { animation: bw-fade-in 0.25s ease-out; }\n.bw-spinner { animation: bw-spin 0.8s linear infinite; }\n\n/* ── Error ── */\n.bw-error {\n display: flex; align-items: center; justify-content: space-between; gap: 12px;\n background: #fef2f2; border: 1px solid #fecaca; color: #b91c1c;\n padding: 10px 14px; border-radius: var(--bw-radius); margin-bottom: 16px; font-size: 0.875rem;\n}\n.bw-error button { background: none; border: none; color: inherit; cursor: pointer; font-size: 1.25rem; line-height: 1; padding: 0; }\n\n/* ── Headings ── */\n.bw-heading { font-size: 1.125rem; font-weight: 600; margin: 0; letter-spacing: -0.01em; }\n.bw-meta-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }\n.bw-badge {\n display: inline-flex; align-items: center; gap: 4px;\n font-size: 0.8125rem; color: #6b7280; font-weight: 400;\n}\n.bw-badge-accent {\n display: inline-flex; align-items: center; gap: 4px;\n font-size: 0.8125rem; color: var(--bw-primary); font-weight: 500;\n}\n\n/* ── Info Header ── */\n.bw-info-header { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 20px; }\n.bw-back {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; border-radius: 50%; border: 1px solid #e5e7eb;\n background: #fff; cursor: pointer; color: #4b5563; flex-shrink: 0; margin-top: 1px;\n transition: all 0.15s;\n}\n.bw-back:hover { background: #f3f4f6; border-color: #d1d5db; }\n\n/* ── Loading ── */\n.bw-loading {\n display: flex; align-items: center; justify-content: center; gap: 8px;\n padding: 32px; color: #6b7280; font-size: 0.875rem;\n}\n\n/* ── Type Selection ── */\n.bw-type-list { display: flex; flex-direction: column; gap: 10px; }\n.bw-type-card {\n display: flex; flex-direction: column; text-align: left; gap: 4px;\n padding: 16px; border: 1.5px solid #e5e7eb; border-radius: var(--bw-radius);\n background: #fff; cursor: pointer; transition: all 0.15s;\n}\n.bw-type-card:hover { border-color: var(--bw-primary); box-shadow: 0 0 0 3px var(--bw-primary-light); }\n.bw-type-name { font-weight: 600; font-size: 0.9375rem; }\n.bw-type-desc { color: #6b7280; font-size: 0.8125rem; }\n.bw-type-meta { display: flex; align-items: center; gap: 4px; font-size: 0.8125rem; color: #9ca3af; margin-top: 4px; }\n\n/* ── Date-Time Layout ── */\n.bw-datetime-layout {\n display: flex; gap: 0; border-top: 1px solid #f0f0f0; padding-top: 16px;\n}\n@media (max-width: 559px) {\n .bw-datetime-layout { flex-direction: column; }\n}\n@media (min-width: 560px) {\n .bw-datetime-layout { min-height: 400px; }\n .bw-calendar { flex: 1 1 auto; padding-right: 16px; border-right: 1px solid #f0f0f0; }\n .bw-times { width: 180px; flex-shrink: 0; padding-left: 16px; }\n}\n\n/* ── Calendar ── */\n.bw-cal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }\n.bw-cal-title { font-weight: 600; font-size: 0.9375rem; }\n.bw-cal-nav {\n display: inline-flex; align-items: center; justify-content: center;\n width: 32px; height: 32px; border-radius: 50%; border: none;\n background: transparent; cursor: pointer; color: #374151; transition: background 0.15s;\n}\n.bw-cal-nav:hover:not(:disabled) { background: #f3f4f6; }\n.bw-cal-nav:disabled { opacity: 0.25; cursor: default; }\n\n.bw-cal-weekdays { display: grid; grid-template-columns: repeat(7, 1fr); gap: 0; text-align: center; margin-bottom: 4px; }\n.bw-cal-wd { font-size: 0.6875rem; font-weight: 600; color: #9ca3af; text-transform: uppercase; letter-spacing: 0.04em; padding: 4px 0; }\n\n.bw-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }\n.bw-cal-empty { aspect-ratio: 1; }\n.bw-cal-day {\n aspect-ratio: 1; display: flex; align-items: center; justify-content: center;\n border: none; background: none; border-radius: 50%;\n font-size: 0.8125rem; font-weight: 500; cursor: pointer;\n color: #1a1a1a; transition: all 0.15s; position: relative;\n}\n.bw-cal-day:hover:not(.disabled):not(.selected) { background: #f3f4f6; }\n.bw-cal-day.today:not(.selected)::after {\n content: ''; position: absolute; bottom: 3px; left: 50%; transform: translateX(-50%);\n width: 4px; height: 4px; border-radius: 50%; background: var(--bw-primary);\n}\n.bw-cal-day.selected {\n background: var(--bw-primary); color: #fff; font-weight: 600;\n}\n.bw-cal-day.disabled { color: #d1d5db; cursor: default; }\n\n/* ── Time Slots ── */\n.bw-times { transition: opacity 0.2s; }\n.bw-times:not(.visible) { opacity: 0.5; }\n.bw-times.visible { opacity: 1; }\n.bw-times-placeholder {\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;\n height: 100%; min-height: 160px; color: #9ca3af; font-size: 0.8125rem; text-align: center; padding: 16px;\n}\n.bw-times-empty {\n display: flex; align-items: center; justify-content: center;\n height: 100%; min-height: 160px; color: #9ca3af; font-size: 0.8125rem; text-align: center; padding: 16px;\n}\n.bw-times-scroll { overflow-y: auto; max-height: 400px; overflow-x: hidden; }\n.bw-times-date { font-weight: 600; font-size: 0.8125rem; color: #374151; margin: 0 0 12px 0; }\n.bw-time-group { margin-bottom: 16px; }\n.bw-times-scroll-hint {\n font-size: 0.6875rem; color: #9ca3af; text-align: center; margin: 8px 0 0 0; padding-bottom: 8px;\n}\n.bw-time-label { display: block; font-size: 0.6875rem; font-weight: 600; color: #9ca3af; text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 6px; }\n\n.bw-time-btn {\n display: block; width: 100%;\n padding: 10px 12px; margin-bottom: 6px;\n border: 1.5px solid #e5e7eb; border-radius: var(--bw-radius);\n background: #fff; cursor: pointer;\n font-size: 0.875rem; font-weight: 500; color: var(--bw-primary); text-align: center;\n transition: all 0.15s;\n}\n.bw-time-btn:hover:not(:disabled) {\n border-color: var(--bw-primary); background: var(--bw-primary-light);\n}\n.bw-time-btn.selected {\n border-color: var(--bw-primary); background: var(--bw-primary); color: #fff;\n}\n.bw-time-btn:disabled { opacity: 0.5; cursor: not-allowed; }\n\n.bw-time-btn-wrap {\n display: flex; align-items: center; gap: 6px; margin-bottom: 6px;\n border: 1.5px solid var(--bw-primary); border-radius: var(--bw-radius); overflow: hidden;\n animation: bw-fade-in 0.15s ease-out;\n}\n.bw-time-btn-wrap .bw-time-text {\n flex: 1; padding: 10px 12px; font-size: 0.875rem; font-weight: 500; color: #374151; text-align: center;\n background: var(--bw-primary-light);\n}\n.bw-time-confirm {\n display: inline-flex; align-items: center; justify-content: center; gap: 4px;\n padding: 10px 16px; border: none;\n background: var(--bw-primary); color: #fff;\n font-size: 0.8125rem; font-weight: 600; cursor: pointer;\n transition: background 0.15s;\n}\n.bw-time-confirm:hover:not(:disabled) { background: var(--bw-primary-hover); }\n.bw-time-confirm:disabled { opacity: 0.7; cursor: not-allowed; }\n\n/* ── Form ── */\n.bw-hold-notice {\n display: flex; align-items: center; gap: 8px;\n background: var(--bw-primary-light); color: var(--bw-primary);\n padding: 10px 14px; border-radius: var(--bw-radius);\n font-size: 0.8125rem; font-weight: 500; margin-bottom: 20px;\n}\n.bw-form { display: flex; flex-direction: column; gap: 16px; }\n.bw-field label {\n display: block; font-size: 0.8125rem; font-weight: 500; color: #374151; margin-bottom: 4px;\n}\n.bw-req { color: #ef4444; }\n.bw-field input, .bw-field textarea {\n display: block; width: 100%;\n padding: 10px 12px; border: 1.5px solid #e5e7eb; border-radius: var(--bw-radius);\n font-size: 0.9375rem; font-family: inherit; color: #1a1a1a; background: #fff;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.bw-field input::placeholder, .bw-field textarea::placeholder { color: #c0c5cc; }\n.bw-field input:focus, .bw-field textarea:focus {\n outline: none; border-color: var(--bw-primary);\n box-shadow: 0 0 0 3px var(--bw-primary-light);\n}\n.bw-submit {\n display: inline-flex; align-items: center; justify-content: center; gap: 8px;\n width: 100%; padding: 14px; margin-top: 4px;\n background: var(--bw-primary); color: #fff; border: none;\n border-radius: var(--bw-radius); font-size: 0.9375rem; font-weight: 600;\n cursor: pointer; transition: background 0.15s;\n}\n.bw-submit:hover:not(:disabled) { background: var(--bw-primary-hover); }\n.bw-submit:disabled { opacity: 0.55; cursor: not-allowed; }\n\n/* ── Success ── */\n.bw-success { text-align: center; }\n.bw-success-icon { margin: 0 auto 16px; width: 56px; height: 56px; animation: bw-fade-in 0.4s ease-out; }\n.bw-conf-code {\n display: inline-block; font-family: 'SF Mono', 'Fira Code', monospace;\n background: #f3f4f6; padding: 6px 14px; border-radius: 6px;\n font-size: 0.8125rem; color: #6b7280; margin: 4px 0 20px; letter-spacing: 0.04em;\n}\n\n.bw-details-card {\n text-align: left; background: #f9fafb; border: 1px solid #f0f0f0;\n border-radius: var(--bw-radius); padding: 16px; margin-bottom: 20px;\n}\n.bw-detail-row { display: flex; gap: 12px; padding: 8px 0; border-bottom: 1px solid #f0f0f0; }\n.bw-detail-row:last-child { border-bottom: none; }\n.bw-detail-label { width: 70px; flex-shrink: 0; font-size: 0.8125rem; color: #9ca3af; font-weight: 500; }\n.bw-detail-value { font-size: 0.875rem; font-weight: 500; color: #374151; }\n\n.bw-cal-links-label { font-size: 0.8125rem; color: #6b7280; margin: 0 0 8px 0; }\n.bw-cal-links { display: flex; gap: 8px; justify-content: center; margin-bottom: 20px; flex-wrap: wrap; }\n.bw-cal-link {\n display: inline-flex; align-items: center; gap: 6px;\n padding: 8px 14px; border: 1.5px solid #e5e7eb; border-radius: var(--bw-radius);\n text-decoration: none; color: #374151; font-size: 0.8125rem; font-weight: 500;\n transition: all 0.15s;\n}\n.bw-cal-link:hover { border-color: var(--bw-primary); color: var(--bw-primary); }\n\n.bw-email-notice { font-size: 0.8125rem; color: #9ca3af; margin: 0; }\n.bw-email-notice strong { color: #374151; font-weight: 500; }\n`\n\nexport default BookingWidget\n"]}
@@ -0,0 +1,53 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ /**
5
+ * Configuration types for SiteKitLayout modules.
6
+ * Kept in a shared file so both server (SiteKitLayout) and client
7
+ * (SiteKitClientProviders) components can reference them.
8
+ */
9
+ interface AnalyticsConfig {
10
+ trackPageViews?: boolean;
11
+ trackWebVitals?: boolean;
12
+ trackScrollDepth?: boolean;
13
+ trackClicks?: boolean;
14
+ sessionDuration?: number;
15
+ excludePaths?: string[];
16
+ }
17
+ interface EngageConfig {
18
+ position?: 'bottom-right' | 'bottom-left';
19
+ zIndex?: number;
20
+ chatEnabled?: boolean;
21
+ }
22
+ interface SignalConfig {
23
+ realtime?: boolean;
24
+ experiments?: boolean;
25
+ behaviorTracking?: boolean;
26
+ }
27
+
28
+ interface SiteKitLayoutProps {
29
+ children: React.ReactNode;
30
+ /** Portal API key. Defaults to UPTRADE_API_KEY or NEXT_PUBLIC_UPTRADE_API_KEY env var. */
31
+ apiKey?: string;
32
+ /** Portal API URL. Defaults to env or https://api.uptrademedia.com */
33
+ apiUrl?: string;
34
+ /** Project ID (for Engage chat room routing). Auto-resolved if not provided. */
35
+ projectId?: string;
36
+ /** Analytics tracking. true (default) | false | config object */
37
+ analytics?: boolean | AnalyticsConfig;
38
+ /** Engage widgets (popups, chat). true (default) | false | config object */
39
+ engage?: boolean | EngageConfig;
40
+ /** Signal AI (experiments, behavior). false (default) | true | config object */
41
+ signal?: boolean | SignalConfig;
42
+ /** SitemapSync client component. Default: true */
43
+ sitemapSync?: boolean;
44
+ /** ManagedFavicon in <head>. Default: true */
45
+ favicon?: boolean;
46
+ /** ManagedScripts (head + body-end). Default: true */
47
+ managedScripts?: boolean;
48
+ /** Debug mode — logs to console. Default: false */
49
+ debug?: boolean;
50
+ }
51
+ declare function SiteKitLayout({ children, apiKey, apiUrl, projectId, analytics, engage, signal, sitemapSync, favicon, managedScripts, debug, }: SiteKitLayoutProps): Promise<react_jsx_runtime.JSX.Element>;
52
+
53
+ export { type AnalyticsConfig, type EngageConfig, type SignalConfig, SiteKitLayout, type SiteKitLayoutProps };
@@ -0,0 +1,53 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+
4
+ /**
5
+ * Configuration types for SiteKitLayout modules.
6
+ * Kept in a shared file so both server (SiteKitLayout) and client
7
+ * (SiteKitClientProviders) components can reference them.
8
+ */
9
+ interface AnalyticsConfig {
10
+ trackPageViews?: boolean;
11
+ trackWebVitals?: boolean;
12
+ trackScrollDepth?: boolean;
13
+ trackClicks?: boolean;
14
+ sessionDuration?: number;
15
+ excludePaths?: string[];
16
+ }
17
+ interface EngageConfig {
18
+ position?: 'bottom-right' | 'bottom-left';
19
+ zIndex?: number;
20
+ chatEnabled?: boolean;
21
+ }
22
+ interface SignalConfig {
23
+ realtime?: boolean;
24
+ experiments?: boolean;
25
+ behaviorTracking?: boolean;
26
+ }
27
+
28
+ interface SiteKitLayoutProps {
29
+ children: React.ReactNode;
30
+ /** Portal API key. Defaults to UPTRADE_API_KEY or NEXT_PUBLIC_UPTRADE_API_KEY env var. */
31
+ apiKey?: string;
32
+ /** Portal API URL. Defaults to env or https://api.uptrademedia.com */
33
+ apiUrl?: string;
34
+ /** Project ID (for Engage chat room routing). Auto-resolved if not provided. */
35
+ projectId?: string;
36
+ /** Analytics tracking. true (default) | false | config object */
37
+ analytics?: boolean | AnalyticsConfig;
38
+ /** Engage widgets (popups, chat). true (default) | false | config object */
39
+ engage?: boolean | EngageConfig;
40
+ /** Signal AI (experiments, behavior). false (default) | true | config object */
41
+ signal?: boolean | SignalConfig;
42
+ /** SitemapSync client component. Default: true */
43
+ sitemapSync?: boolean;
44
+ /** ManagedFavicon in <head>. Default: true */
45
+ favicon?: boolean;
46
+ /** ManagedScripts (head + body-end). Default: true */
47
+ managedScripts?: boolean;
48
+ /** Debug mode — logs to console. Default: false */
49
+ debug?: boolean;
50
+ }
51
+ declare function SiteKitLayout({ children, apiKey, apiUrl, projectId, analytics, engage, signal, sitemapSync, favicon, managedScripts, debug, }: SiteKitLayoutProps): Promise<react_jsx_runtime.JSX.Element>;
52
+
53
+ export { type AnalyticsConfig, type EngageConfig, type SignalConfig, SiteKitLayout, type SiteKitLayoutProps };