@sonordev/site-kit 6.1.0 → 6.1.3

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 (237) hide show
  1. package/agent-manifest.json +2 -2
  2. package/dist/{AnalyticsProvider-V6G45QG7.js → AnalyticsProvider-QK6XBDEJ.js} +10 -10
  3. package/dist/{AnalyticsProvider-V6G45QG7.js.map → AnalyticsProvider-QK6XBDEJ.js.map} +1 -1
  4. package/dist/{AnalyticsProvider-PO6SSJG2.mjs → AnalyticsProvider-TIJWTISP.mjs} +6 -6
  5. package/dist/{AnalyticsProvider-PO6SSJG2.mjs.map → AnalyticsProvider-TIJWTISP.mjs.map} +1 -1
  6. package/dist/{ArticleViewTracker-FE2YWHX4.js → ArticleViewTracker-ALE672ZR.js} +6 -6
  7. package/dist/{ArticleViewTracker-FE2YWHX4.js.map → ArticleViewTracker-ALE672ZR.js.map} +1 -1
  8. package/dist/{ArticleViewTracker-CML36HJZ.mjs → ArticleViewTracker-I66RBWDK.mjs} +5 -5
  9. package/dist/{ArticleViewTracker-CML36HJZ.mjs.map → ArticleViewTracker-I66RBWDK.mjs.map} +1 -1
  10. package/dist/ChatWidget-566CQUN6.js +26 -0
  11. package/dist/{ChatWidget-YL34KOZM.js.map → ChatWidget-566CQUN6.js.map} +1 -1
  12. package/dist/ChatWidget-LNOY4TUZ.mjs +17 -0
  13. package/dist/{ChatWidget-GVNDKGUU.mjs.map → ChatWidget-LNOY4TUZ.mjs.map} +1 -1
  14. package/dist/EngageWidget-DF47YUHQ.js +21 -0
  15. package/dist/{EngageWidget-IQRKRYPG.js.map → EngageWidget-DF47YUHQ.js.map} +1 -1
  16. package/dist/EngageWidget-IGF7SC3R.mjs +12 -0
  17. package/dist/{EngageWidget-465O5XUV.mjs.map → EngageWidget-IGF7SC3R.mjs.map} +1 -1
  18. package/dist/{FileField-FWKSBFRX.mjs → FileField-AG63W2BC.mjs} +5 -5
  19. package/dist/{FileField-FWKSBFRX.mjs.map → FileField-AG63W2BC.mjs.map} +1 -1
  20. package/dist/{FileField-F3PFKMIF.js → FileField-IK6E5IOC.js} +6 -6
  21. package/dist/{FileField-F3PFKMIF.js.map → FileField-IK6E5IOC.js.map} +1 -1
  22. package/dist/{FormSpotlight-DJQ3P3EX.js → FormSpotlight-6MUDJWW5.js} +9 -9
  23. package/dist/{FormSpotlight-DJQ3P3EX.js.map → FormSpotlight-6MUDJWW5.js.map} +1 -1
  24. package/dist/{FormSpotlight-K4LP2DMP.mjs → FormSpotlight-H7V4GBXG.mjs} +3 -3
  25. package/dist/{FormSpotlight-K4LP2DMP.mjs.map → FormSpotlight-H7V4GBXG.mjs.map} +1 -1
  26. package/dist/{FormStage-YKVTHPKV.mjs → FormStage-ACETL7SD.mjs} +3 -3
  27. package/dist/{FormStage-YKVTHPKV.mjs.map → FormStage-ACETL7SD.mjs.map} +1 -1
  28. package/dist/{FormStage-QMGZ3MOT.js → FormStage-ZXZRZ2LS.js} +9 -9
  29. package/dist/{FormStage-QMGZ3MOT.js.map → FormStage-ZXZRZ2LS.js.map} +1 -1
  30. package/dist/ManagedForm-4U54NPW2.js +25 -0
  31. package/dist/{ManagedForm-MLPETHSQ.js.map → ManagedForm-4U54NPW2.js.map} +1 -1
  32. package/dist/ManagedForm-MOBWSG4D.mjs +16 -0
  33. package/dist/{ManagedForm-P3L34ALG.mjs.map → ManagedForm-MOBWSG4D.mjs.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-R4LLZBRQ.js → ManagedNewsletterForm-5LBGBE2F.js} +8 -8
  35. package/dist/{ManagedNewsletterForm-R4LLZBRQ.js.map → ManagedNewsletterForm-5LBGBE2F.js.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-C5YQH7MP.mjs → ManagedNewsletterForm-OV3OEMUP.mjs} +7 -7
  37. package/dist/{ManagedNewsletterForm-C5YQH7MP.mjs.map → ManagedNewsletterForm-OV3OEMUP.mjs.map} +1 -1
  38. package/dist/{SignalCore-CLELIKFI.js → SignalCore-QCVR7TZV.js} +11 -11
  39. package/dist/{SignalCore-CLELIKFI.js.map → SignalCore-QCVR7TZV.js.map} +1 -1
  40. package/dist/{SignalCore-BNYNS6P7.mjs → SignalCore-XM2MHEGR.mjs} +5 -5
  41. package/dist/{SignalCore-BNYNS6P7.mjs.map → SignalCore-XM2MHEGR.mjs.map} +1 -1
  42. package/dist/SitemapSync-74EVNOFQ.mjs +9 -0
  43. package/dist/{SitemapSync-SIKJCK7N.mjs.map → SitemapSync-74EVNOFQ.mjs.map} +1 -1
  44. package/dist/SitemapSync-BQFZAE3X.js +18 -0
  45. package/dist/{SitemapSync-P7XWL6VV.js.map → SitemapSync-BQFZAE3X.js.map} +1 -1
  46. package/dist/analytics/index.js +9 -9
  47. package/dist/analytics/index.mjs +4 -4
  48. package/dist/articles/index.js +1 -1
  49. package/dist/articles/index.mjs +1 -1
  50. package/dist/articles/server-ui.js +1 -1
  51. package/dist/articles/server-ui.mjs +1 -1
  52. package/dist/brand/extract-brand-profile.d.ts +2 -7
  53. package/dist/brand/extract-brand-profile.d.ts.map +1 -1
  54. package/dist/{chunk-SDGS2R5O.js → chunk-2SLA2LOD.js} +12 -12
  55. package/dist/{chunk-SDGS2R5O.js.map → chunk-2SLA2LOD.js.map} +1 -1
  56. package/dist/{chunk-QC6VQ2IW.mjs → chunk-3MLVI5DH.mjs} +3 -3
  57. package/dist/{chunk-QC6VQ2IW.mjs.map → chunk-3MLVI5DH.mjs.map} +1 -1
  58. package/dist/{chunk-TA3TQTDA.mjs → chunk-3RISRHOK.mjs} +8 -8
  59. package/dist/{chunk-TA3TQTDA.mjs.map → chunk-3RISRHOK.mjs.map} +1 -1
  60. package/dist/chunk-5FBALULE.mjs +6 -0
  61. package/dist/{chunk-ACKFL6WA.mjs.map → chunk-5FBALULE.mjs.map} +1 -1
  62. package/dist/{chunk-ESAPT5JT.mjs → chunk-5IQOPL7T.mjs} +3 -3
  63. package/dist/{chunk-ESAPT5JT.mjs.map → chunk-5IQOPL7T.mjs.map} +1 -1
  64. package/dist/{chunk-YS7Y2PQG.js → chunk-5OUOVPXC.js} +8 -8
  65. package/dist/{chunk-YS7Y2PQG.js.map → chunk-5OUOVPXC.js.map} +1 -1
  66. package/dist/{chunk-YP5WAFTI.mjs → chunk-6FIIA6ME.mjs} +4 -4
  67. package/dist/{chunk-YP5WAFTI.mjs.map → chunk-6FIIA6ME.mjs.map} +1 -1
  68. package/dist/{chunk-JOYMIGR2.mjs → chunk-7K6L33BX.mjs} +22 -22
  69. package/dist/{chunk-RVFOUPK4.js → chunk-7VRK3DWU.js} +6 -6
  70. package/dist/{chunk-RVFOUPK4.js.map → chunk-7VRK3DWU.js.map} +1 -1
  71. package/dist/{chunk-IDJY2JWU.js → chunk-AGEE4CGH.js} +5 -5
  72. package/dist/{chunk-IDJY2JWU.js.map → chunk-AGEE4CGH.js.map} +1 -1
  73. package/dist/{chunk-JS75ORH7.js → chunk-ATPQ6264.js} +24 -24
  74. package/dist/{chunk-LF44SJPP.js → chunk-BGBP4UN4.js} +4 -4
  75. package/dist/{chunk-LF44SJPP.js.map → chunk-BGBP4UN4.js.map} +1 -1
  76. package/dist/{chunk-RGCUND5Q.mjs → chunk-CI7T4ZRP.mjs} +4 -4
  77. package/dist/{chunk-RGCUND5Q.mjs.map → chunk-CI7T4ZRP.mjs.map} +1 -1
  78. package/dist/{chunk-KDNB6BYH.js → chunk-CTAYH725.js} +11 -11
  79. package/dist/{chunk-KDNB6BYH.js.map → chunk-CTAYH725.js.map} +1 -1
  80. package/dist/{chunk-YKNXBWPZ.mjs → chunk-D5KKVWZK.mjs} +3 -3
  81. package/dist/{chunk-YKNXBWPZ.mjs.map → chunk-D5KKVWZK.mjs.map} +1 -1
  82. package/dist/{chunk-XGELGOF6.mjs → chunk-DVZ4BMXX.mjs} +7 -7
  83. package/dist/{chunk-XGELGOF6.mjs.map → chunk-DVZ4BMXX.mjs.map} +1 -1
  84. package/dist/{chunk-FQAZBJJO.mjs → chunk-ESPOINPT.mjs} +3 -3
  85. package/dist/{chunk-FQAZBJJO.mjs.map → chunk-ESPOINPT.mjs.map} +1 -1
  86. package/dist/{chunk-XOYQKFKI.mjs → chunk-EVETX2XF.mjs} +4 -4
  87. package/dist/{chunk-XOYQKFKI.mjs.map → chunk-EVETX2XF.mjs.map} +1 -1
  88. package/dist/{chunk-ITVQV7DK.js → chunk-EVKP4SOM.js} +10 -10
  89. package/dist/{chunk-ITVQV7DK.js.map → chunk-EVKP4SOM.js.map} +1 -1
  90. package/dist/{chunk-CJX2MC62.mjs → chunk-EXVHO3CZ.mjs} +3 -3
  91. package/dist/{chunk-CJX2MC62.mjs.map → chunk-EXVHO3CZ.mjs.map} +1 -1
  92. package/dist/{chunk-3DXJHMQM.mjs → chunk-GYKFHQSZ.mjs} +3 -3
  93. package/dist/{chunk-3DXJHMQM.mjs.map → chunk-GYKFHQSZ.mjs.map} +1 -1
  94. package/dist/{chunk-H5FCJBAN.mjs → chunk-I4PUQYBI.mjs} +3 -3
  95. package/dist/{chunk-H5FCJBAN.mjs.map → chunk-I4PUQYBI.mjs.map} +1 -1
  96. package/dist/{chunk-DQXEYUTD.js → chunk-I7KIVKVW.js} +3 -3
  97. package/dist/{chunk-DQXEYUTD.js.map → chunk-I7KIVKVW.js.map} +1 -1
  98. package/dist/{chunk-L3GAEBJU.mjs → chunk-IUNFAKOS.mjs} +3 -3
  99. package/dist/{chunk-L3GAEBJU.mjs.map → chunk-IUNFAKOS.mjs.map} +1 -1
  100. package/dist/{chunk-ZQJGCQHC.js → chunk-IWHAJBYL.js} +15 -15
  101. package/dist/{chunk-ZQJGCQHC.js.map → chunk-IWHAJBYL.js.map} +1 -1
  102. package/dist/{chunk-AQUWWATH.js → chunk-IZRVSIOK.js} +4 -4
  103. package/dist/{chunk-AQUWWATH.js.map → chunk-IZRVSIOK.js.map} +1 -1
  104. package/dist/{chunk-TMNFPVK5.js → chunk-JAA42HR7.js} +7 -7
  105. package/dist/{chunk-TMNFPVK5.js.map → chunk-JAA42HR7.js.map} +1 -1
  106. package/dist/{chunk-Y53BIB7A.js → chunk-JSM4AYSZ.js} +14 -14
  107. package/dist/{chunk-Y53BIB7A.js.map → chunk-JSM4AYSZ.js.map} +1 -1
  108. package/dist/{chunk-MZK5APTV.js → chunk-KDLN2MR5.js} +18 -18
  109. package/dist/{chunk-MZK5APTV.js.map → chunk-KDLN2MR5.js.map} +1 -1
  110. package/dist/{chunk-BGOPF6J2.js → chunk-KEEZX6Q4.js} +3 -3
  111. package/dist/{chunk-BGOPF6J2.js.map → chunk-KEEZX6Q4.js.map} +1 -1
  112. package/dist/{chunk-6OSHL7H5.mjs → chunk-LXBPTKYT.mjs} +4 -4
  113. package/dist/{chunk-6OSHL7H5.mjs.map → chunk-LXBPTKYT.mjs.map} +1 -1
  114. package/dist/chunk-M2N7NY3V.js +103 -0
  115. package/dist/chunk-M2N7NY3V.js.map +1 -0
  116. package/dist/{chunk-36NE4PSS.js → chunk-MQEVQ5YB.js} +3 -3
  117. package/dist/{chunk-36NE4PSS.js.map → chunk-MQEVQ5YB.js.map} +1 -1
  118. package/dist/{chunk-DXBSBWSS.js → chunk-MTHMOXZF.js} +6 -6
  119. package/dist/{chunk-DXBSBWSS.js.map → chunk-MTHMOXZF.js.map} +1 -1
  120. package/dist/{chunk-BDSNEB3O.mjs → chunk-NRT7MOEO.mjs} +4 -4
  121. package/dist/{chunk-BDSNEB3O.mjs.map → chunk-NRT7MOEO.mjs.map} +1 -1
  122. package/dist/chunk-NYXENHD2.mjs +96 -0
  123. package/dist/chunk-NYXENHD2.mjs.map +1 -0
  124. package/dist/chunk-OI3FCJSP.js +8 -0
  125. package/dist/{chunk-OXA4ZSX2.js.map → chunk-OI3FCJSP.js.map} +1 -1
  126. package/dist/{chunk-F6BYWNHU.mjs → chunk-OUP6UL74.mjs} +3 -3
  127. package/dist/{chunk-F6BYWNHU.mjs.map → chunk-OUP6UL74.mjs.map} +1 -1
  128. package/dist/{chunk-OQWAJBYA.mjs → chunk-OWEJXMKY.mjs} +3 -3
  129. package/dist/{chunk-OQWAJBYA.mjs.map → chunk-OWEJXMKY.mjs.map} +1 -1
  130. package/dist/{chunk-XKJLJLQ4.js → chunk-OZTVJSFX.js} +107 -49
  131. package/dist/chunk-OZTVJSFX.js.map +1 -0
  132. package/dist/{chunk-QF3XTEXV.js → chunk-P4J3WG6C.js} +4 -4
  133. package/dist/{chunk-QF3XTEXV.js.map → chunk-P4J3WG6C.js.map} +1 -1
  134. package/dist/{chunk-4EJI4IOX.mjs → chunk-PTQHPWEK.mjs} +97 -39
  135. package/dist/chunk-PTQHPWEK.mjs.map +1 -0
  136. package/dist/{chunk-OF4V7CSP.mjs → chunk-QSN2QST7.mjs} +3 -3
  137. package/dist/{chunk-OF4V7CSP.mjs.map → chunk-QSN2QST7.mjs.map} +1 -1
  138. package/dist/{chunk-NMKUYGKK.mjs → chunk-RGXYE2ZI.mjs} +4 -4
  139. package/dist/{chunk-NMKUYGKK.mjs.map → chunk-RGXYE2ZI.mjs.map} +1 -1
  140. package/dist/{chunk-NNZDWY3L.mjs → chunk-RH4XEXTK.mjs} +3 -3
  141. package/dist/{chunk-NDVKIDMN.js → chunk-RQG7I6O4.js} +4 -4
  142. package/dist/{chunk-NDVKIDMN.js.map → chunk-RQG7I6O4.js.map} +1 -1
  143. package/dist/{chunk-VK74LC4H.js → chunk-S6CMQTVZ.js} +5 -5
  144. package/dist/{chunk-VK74LC4H.js.map → chunk-S6CMQTVZ.js.map} +1 -1
  145. package/dist/{chunk-5YA6SI4Z.mjs → chunk-TIFVAASU.mjs} +2 -2
  146. package/dist/{chunk-K4LLYQFZ.js → chunk-VDGCZVUF.js} +14 -14
  147. package/dist/{chunk-K4LLYQFZ.js.map → chunk-VDGCZVUF.js.map} +1 -1
  148. package/dist/{chunk-I4RU3RCS.js → chunk-XCOMBHLF.js} +8 -8
  149. package/dist/{chunk-I4RU3RCS.js.map → chunk-XCOMBHLF.js.map} +1 -1
  150. package/dist/{chunk-I7AZC5ZQ.js → chunk-XXSSUCJB.js} +2 -2
  151. package/dist/{chunk-ZQSJK65K.mjs → chunk-YEHC7VMW.mjs} +3 -3
  152. package/dist/{chunk-ZQSJK65K.mjs.map → chunk-YEHC7VMW.mjs.map} +1 -1
  153. package/dist/{chunk-KKTSAT7I.mjs → chunk-YK7SEUFJ.mjs} +4 -4
  154. package/dist/{chunk-KKTSAT7I.mjs.map → chunk-YK7SEUFJ.mjs.map} +1 -1
  155. package/dist/{chunk-NN2YE5WT.js → chunk-ZUQSVCMD.js} +3 -3
  156. package/dist/cli/index.js +211 -211
  157. package/dist/cli/index.mjs +151 -151
  158. package/dist/client/index.js +4 -4
  159. package/dist/client/index.mjs +3 -3
  160. package/dist/commerce/index.js +57 -57
  161. package/dist/commerce/index.mjs +5 -5
  162. package/dist/cta-bar/CtaBar.d.ts +21 -7
  163. package/dist/cta-bar/CtaBar.d.ts.map +1 -1
  164. package/dist/cta-bar/index.js +9 -12
  165. package/dist/cta-bar/index.js.map +1 -1
  166. package/dist/cta-bar/index.mjs +9 -12
  167. package/dist/cta-bar/index.mjs.map +1 -1
  168. package/dist/cta-bar/styles.d.ts.map +1 -1
  169. package/dist/engage/ChatWidget.d.ts.map +1 -1
  170. package/dist/engage/EchoUiActions.d.ts +5 -2
  171. package/dist/engage/EchoUiActions.d.ts.map +1 -1
  172. package/dist/engage/brand-color.d.ts +37 -0
  173. package/dist/engage/brand-color.d.ts.map +1 -0
  174. package/dist/engage/index.js +11 -10
  175. package/dist/engage/index.js.map +1 -1
  176. package/dist/engage/index.mjs +8 -7
  177. package/dist/engage/index.mjs.map +1 -1
  178. package/dist/fleet/index.js +8 -8
  179. package/dist/fleet/index.mjs +4 -4
  180. package/dist/forms/index.js +16 -16
  181. package/dist/forms/index.mjs +9 -9
  182. package/dist/forms/server.js +10 -10
  183. package/dist/forms/server.mjs +8 -8
  184. package/dist/forms/static.js +7 -7
  185. package/dist/forms/static.mjs +6 -6
  186. package/dist/images/index.js +11 -11
  187. package/dist/images/index.mjs +4 -4
  188. package/dist/index.js +63 -63
  189. package/dist/index.mjs +9 -9
  190. package/dist/layout/client.js +8 -8
  191. package/dist/layout/client.mjs +7 -7
  192. package/dist/layout/index.js +10 -10
  193. package/dist/layout/index.mjs +8 -8
  194. package/dist/{lib-6HOOMENJ.js → lib-6GWWPDJR.js} +7 -7
  195. package/dist/lib-BD4KKQBI.mjs +4 -0
  196. package/dist/{lib-R7IQ4ZHE.mjs → lib-N5PD6JNJ.mjs} +2 -2
  197. package/dist/{lib-BGAWCSUH.js → lib-WFB5RLEQ.js} +8 -8
  198. package/dist/maps/index.js +5 -5
  199. package/dist/maps/index.mjs +3 -3
  200. package/dist/search/index.js +4 -4
  201. package/dist/search/index.mjs +3 -3
  202. package/dist/seo/client.js +5 -5
  203. package/dist/seo/client.mjs +4 -4
  204. package/dist/seo/index.js +5 -5
  205. package/dist/seo/index.mjs +4 -4
  206. package/dist/seo/register-sitemap-cli.js +12 -93
  207. package/dist/seo/register-sitemap-cli.mjs +2 -83
  208. package/dist/server/index.js +3 -3
  209. package/dist/server/index.mjs +2 -2
  210. package/dist/shared/color.d.ts +39 -0
  211. package/dist/shared/color.d.ts.map +1 -0
  212. package/dist/shared/version.d.ts +1 -1
  213. package/dist/signal/index.js +11 -11
  214. package/dist/signal/index.mjs +2 -2
  215. package/dist/sync/index.js +17 -17
  216. package/dist/sync/index.mjs +4 -4
  217. package/dist/{web-vitals.attribution-7LKLZ5GR.mjs → web-vitals.attribution-CHXXWO72.mjs} +3 -3
  218. package/dist/web-vitals.attribution-CHXXWO72.mjs.map +1 -0
  219. package/dist/{web-vitals.attribution-ONVYQNRB.js → web-vitals.attribution-SQVZNHN3.js} +3 -3
  220. package/dist/web-vitals.attribution-SQVZNHN3.js.map +1 -0
  221. package/package.json +1 -1
  222. package/skills/site-kit/SKILL.md +3 -2
  223. package/dist/ChatWidget-GVNDKGUU.mjs +0 -16
  224. package/dist/ChatWidget-YL34KOZM.js +0 -25
  225. package/dist/EngageWidget-465O5XUV.mjs +0 -12
  226. package/dist/EngageWidget-IQRKRYPG.js +0 -21
  227. package/dist/ManagedForm-MLPETHSQ.js +0 -25
  228. package/dist/ManagedForm-P3L34ALG.mjs +0 -16
  229. package/dist/SitemapSync-P7XWL6VV.js +0 -18
  230. package/dist/SitemapSync-SIKJCK7N.mjs +0 -9
  231. package/dist/chunk-4EJI4IOX.mjs.map +0 -1
  232. package/dist/chunk-ACKFL6WA.mjs +0 -6
  233. package/dist/chunk-OXA4ZSX2.js +0 -8
  234. package/dist/chunk-XKJLJLQ4.js.map +0 -1
  235. package/dist/lib-RSDMEKDQ.mjs +0 -4
  236. package/dist/web-vitals.attribution-7LKLZ5GR.mjs.map +0 -1
  237. package/dist/web-vitals.attribution-ONVYQNRB.js.map +0 -1
@@ -1,11 +1,11 @@
1
- import { parse } from './chunk-5YA6SI4Z.mjs';
1
+ import { parse } from './chunk-TIFVAASU.mjs';
2
2
  import { __commonJS, __export, __toESM, __publicField } from './chunk-BEXTDHO4.mjs';
3
3
  import { isatty } from 'tty';
4
4
  import { inspect, formatWithOptions, styleText } from 'util';
5
5
 
6
- // node_modules/.pnpm/jsesc@3.1.0/node_modules/jsesc/jsesc.js
6
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/jsesc@3.1.0/node_modules/jsesc/jsesc.js
7
7
  var require_jsesc = __commonJS({
8
- "node_modules/.pnpm/jsesc@3.1.0/node_modules/jsesc/jsesc.js"(exports, module) {
8
+ "../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/jsesc@3.1.0/node_modules/jsesc/jsesc.js"(exports, module) {
9
9
  var object = {};
10
10
  var hasOwnProperty = object.hasOwnProperty;
11
11
  var forOwn = (object2, callback) => {
@@ -278,7 +278,7 @@ var require_jsesc = __commonJS({
278
278
  }
279
279
  });
280
280
 
281
- // node_modules/.pnpm/obug@2.1.4/node_modules/obug/dist/core.js
281
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/obug@2.1.4/node_modules/obug/dist/core.js
282
282
  function coerce(value) {
283
283
  if (value instanceof Error) return value.stack || value.message;
284
284
  return value;
@@ -544,7 +544,7 @@ function createDebug2(namespace, options) {
544
544
  }
545
545
  enable(env.DEBUG || "");
546
546
 
547
- // node_modules/.pnpm/@babel+code-frame@8.0.0/node_modules/@babel/code-frame/lib/common-shared.js
547
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+code-frame@8.0.0/node_modules/@babel/code-frame/lib/common-shared.js
548
548
  var NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
549
549
  function getMarkerLines(loc, source, opts, startLineBaseZero) {
550
550
  const startLoc = {
@@ -659,7 +659,7 @@ ${frame}`;
659
659
  return defs2.reset(frame);
660
660
  }
661
661
 
662
- // node_modules/.pnpm/js-tokens@10.0.0/node_modules/js-tokens/index.js
662
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/js-tokens@10.0.0/node_modules/js-tokens/index.js
663
663
  var HashbangComment;
664
664
  var Identifier;
665
665
  var JSXIdentifier;
@@ -1076,7 +1076,7 @@ jsTokens = function* (input, { jsx = false } = {}) {
1076
1076
  };
1077
1077
  var js_tokens_default = jsTokens;
1078
1078
 
1079
- // node_modules/.pnpm/@babel+helper-validator-identifier@8.0.4/node_modules/@babel/helper-validator-identifier/lib/identifier.js
1079
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+helper-validator-identifier@8.0.4/node_modules/@babel/helper-validator-identifier/lib/identifier.js
1080
1080
  var bmpIdentifierStart = /[\p{ID_Start}\u088f\u0c5c\u0cdc\ua7ce\ua7cf\ua7d2\ua7d4\ua7f1]/u;
1081
1081
  var bmpIdentifier = /[\p{ID_Continue}\u088f\u0c5c\u0cdc\ua7ce\ua7cf\ua7d2\ua7d4\ua7f1\u1acf-\u1add\u1ae0-\u1aeb]/u;
1082
1082
  var supplementaryIdentifierStartCodes = [2368, 25, 1388, 2, 3817, 43, 20677, 24, 3, 24, 287, 4, 6146, 7, 1290, 21, 98, 114, 22734, 30, 2, 2, 2, 1, 2, 6, 3, 4, 10, 1, 53307, 5, 5987, 11, 21763, 4297];
@@ -1135,7 +1135,7 @@ function isIdentifierName(name) {
1135
1135
  return !isFirst;
1136
1136
  }
1137
1137
 
1138
- // node_modules/.pnpm/@babel+helper-validator-identifier@8.0.4/node_modules/@babel/helper-validator-identifier/lib/index.js
1138
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+helper-validator-identifier@8.0.4/node_modules/@babel/helper-validator-identifier/lib/index.js
1139
1139
  var reservedWords = {
1140
1140
  keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
1141
1141
  strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
@@ -1154,7 +1154,7 @@ function isKeyword(word) {
1154
1154
  return keywords.has(word);
1155
1155
  }
1156
1156
 
1157
- // node_modules/.pnpm/@babel+code-frame@8.0.0/node_modules/@babel/code-frame/lib/index.js
1157
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+code-frame@8.0.0/node_modules/@babel/code-frame/lib/index.js
1158
1158
  function isColorSupported() {
1159
1159
  return styleText("red", "-") !== "-";
1160
1160
  }
@@ -1299,7 +1299,7 @@ function codeFrameColumns(rawLines, loc, opts = {}) {
1299
1299
  } : void 0);
1300
1300
  }
1301
1301
 
1302
- // node_modules/.pnpm/@babel+types@8.0.4/node_modules/@babel/types/lib/index.js
1302
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+types@8.0.4/node_modules/@babel/types/lib/index.js
1303
1303
  var lib_exports = {};
1304
1304
  __export(lib_exports, {
1305
1305
  ACCESSOR_TYPES: () => ACCESSOR_TYPES,
@@ -2551,7 +2551,7 @@ __export(lib_exports, {
2551
2551
  yieldExpression: () => yieldExpression
2552
2552
  });
2553
2553
 
2554
- // node_modules/.pnpm/@babel+helper-string-parser@8.0.0/node_modules/@babel/helper-string-parser/lib/index.js
2554
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+helper-string-parser@8.0.0/node_modules/@babel/helper-string-parser/lib/index.js
2555
2555
  var _isDigit = function isDigit(code) {
2556
2556
  return code >= 48 && code <= 57;
2557
2557
  };
@@ -2803,7 +2803,7 @@ function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {
2803
2803
  };
2804
2804
  }
2805
2805
 
2806
- // node_modules/.pnpm/@babel+types@8.0.4/node_modules/@babel/types/lib/index.js
2806
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+types@8.0.4/node_modules/@babel/types/lib/index.js
2807
2807
  function shallowEqual(actual, expected) {
2808
2808
  const keys2 = Object.keys(expected);
2809
2809
  for (const key of keys2) {
@@ -13899,7 +13899,7 @@ var react = {
13899
13899
  buildChildren
13900
13900
  };
13901
13901
 
13902
- // node_modules/.pnpm/@babel+helper-globals@8.0.0/node_modules/@babel/helper-globals/data/builtin-lower.json
13902
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+helper-globals@8.0.0/node_modules/@babel/helper-globals/data/builtin-lower.json
13903
13903
  var builtin_lower_default = [
13904
13904
  "decodeURI",
13905
13905
  "decodeURIComponent",
@@ -13916,7 +13916,7 @@ var builtin_lower_default = [
13916
13916
  "unescape"
13917
13917
  ];
13918
13918
 
13919
- // node_modules/.pnpm/@babel+helper-globals@8.0.0/node_modules/@babel/helper-globals/data/builtin-upper.json
13919
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+helper-globals@8.0.0/node_modules/@babel/helper-globals/data/builtin-upper.json
13920
13920
  var builtin_upper_default = [
13921
13921
  "AggregateError",
13922
13922
  "Array",
@@ -13969,7 +13969,7 @@ var builtin_upper_default = [
13969
13969
  "WeakSet"
13970
13970
  ];
13971
13971
 
13972
- // node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs
13972
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.5/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs
13973
13973
  var comma = ",".charCodeAt(0);
13974
13974
  var semicolon = ";".charCodeAt(0);
13975
13975
  var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
@@ -14137,7 +14137,7 @@ function encode(decoded) {
14137
14137
  return writer.flush();
14138
14138
  }
14139
14139
 
14140
- // node_modules/.pnpm/@jridgewell+resolve-uri@3.1.2/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs
14140
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@jridgewell+resolve-uri@3.1.2/node_modules/@jridgewell/resolve-uri/dist/resolve-uri.mjs
14141
14141
  var schemeRegex = /^[\w+.-]+:\/\//;
14142
14142
  var urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/;
14143
14143
  var fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i;
@@ -14306,7 +14306,7 @@ function resolve(input, base) {
14306
14306
  }
14307
14307
  }
14308
14308
 
14309
- // node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs
14309
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@jridgewell+trace-mapping@0.3.31/node_modules/@jridgewell/trace-mapping/dist/trace-mapping.mjs
14310
14310
  function stripFilename(path) {
14311
14311
  if (!path) return "";
14312
14312
  const index3 = path.lastIndexOf("/");
@@ -14492,7 +14492,7 @@ function traceSegmentInternal(segments, memo, line, column, bias) {
14492
14492
  return index3;
14493
14493
  }
14494
14494
 
14495
- // node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs
14495
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@jridgewell+gen-mapping@0.3.13/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.mjs
14496
14496
  var SetArray = class {
14497
14497
  constructor() {
14498
14498
  this._indexes = { __proto__: null };
@@ -14690,7 +14690,7 @@ function addMappingInternal(skipable, map, mapping) {
14690
14690
  );
14691
14691
  }
14692
14692
 
14693
- // node_modules/.pnpm/@babel+generator@8.0.0/node_modules/@babel/generator/lib/index.js
14693
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+generator@8.0.0/node_modules/@babel/generator/lib/index.js
14694
14694
  var import_jsesc = __toESM(require_jsesc(), 1);
14695
14695
  var SourceMap = class {
14696
14696
  constructor(opts, code) {
@@ -19348,7 +19348,7 @@ function generate(ast, opts = {}, code) {
19348
19348
  return printer.generate(ast);
19349
19349
  }
19350
19350
 
19351
- // node_modules/.pnpm/@babel+template@8.0.0/node_modules/@babel/template/lib/index.js
19351
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+template@8.0.0/node_modules/@babel/template/lib/index.js
19352
19352
  var {
19353
19353
  assertExpressionStatement: assertExpressionStatement2
19354
19354
  } = lib_exports;
@@ -19888,7 +19888,7 @@ var index2 = Object.assign(smart.bind(void 0), {
19888
19888
  ast: smart.ast
19889
19889
  });
19890
19890
 
19891
- // node_modules/.pnpm/@babel+traverse@8.0.4/node_modules/@babel/traverse/lib/index.js
19891
+ // ../../../../../../../Volumes/Uptrade Media/GitHub/Sonor/site-kit/node_modules/.pnpm/@babel+traverse@8.0.4/node_modules/@babel/traverse/lib/index.js
19892
19892
  var ReferencedIdentifier = ["Identifier", "JSXIdentifier"];
19893
19893
  var ReferencedMemberExpression = ["MemberExpression"];
19894
19894
  var BindingIdentifier = ["Identifier"];
@@ -24839,4 +24839,4 @@ traverse3.hasType = function(tree, type, denylistTypes) {
24839
24839
  traverse3.cache = cache;
24840
24840
 
24841
24841
  export { Hub, NodePath_Final, Scope, isArrayExpression, isFunctionDeclaration, isIdentifier, isJSXAttribute, isJSXExpressionContainer, isJSXIdentifier, isJSXMemberExpression, isJSXText, isObjectExpression, isStringLiteral, isTemplateLiteral, isVariableDeclarator, traverse3 as traverse, visitors };
24842
- //# sourceMappingURL=chunk-JOYMIGR2.mjs.map
24842
+ //# sourceMappingURL=chunk-7K6L33BX.mjs.map
@@ -4,7 +4,7 @@
4
4
  var chunkESP5RMB7_js = require('./chunk-ESP5RMB7.js');
5
5
  var chunkRC4WWQXR_js = require('./chunk-RC4WWQXR.js');
6
6
  var chunk5RNAUYWE_js = require('./chunk-5RNAUYWE.js');
7
- var chunkZQJGCQHC_js = require('./chunk-ZQJGCQHC.js');
7
+ var chunkIWHAJBYL_js = require('./chunk-IWHAJBYL.js');
8
8
  var React = require('react');
9
9
  var ReactDOM = require('react-dom');
10
10
  var dynamic = require('next/dynamic');
@@ -277,7 +277,7 @@ function DesignRenderer({
277
277
  )) });
278
278
  }
279
279
  var LazyChatWidget = dynamic__default.default(
280
- () => import('./ChatWidget-YL34KOZM.js').then((m) => ({ default: m.ChatWidget })),
280
+ () => import('./ChatWidget-566CQUN6.js').then((m) => ({ default: m.ChatWidget })),
281
281
  { ssr: false }
282
282
  );
283
283
  function EngageWidget(props) {
@@ -311,7 +311,7 @@ function AllowedEngageWidget({
311
311
  const visitorId = chunkRC4WWQXR_js.getOrCreateVisitorId();
312
312
  const url = typeof window !== "undefined" ? window.location.href : "";
313
313
  try {
314
- const response = await chunkZQJGCQHC_js.sonorFetch(
314
+ const response = await chunkIWHAJBYL_js.sonorFetch(
315
315
  `${apiUrl.replace(/\/$/, "")}/engage/widget/elements?url=${encodeURIComponent(url)}&visitorId=${encodeURIComponent(visitorId)}`,
316
316
  {},
317
317
  { apiKey }
@@ -456,7 +456,7 @@ function AllowedEngageWidget({
456
456
  function trackEngageEvent(apiUrl, apiKey, endpoint, data) {
457
457
  if (!apiKey) return;
458
458
  const visitorId = typeof localStorage !== "undefined" ? localStorage.getItem("_sk_vid") : null;
459
- chunkZQJGCQHC_js.sonorFetch(`${apiUrl.replace(/\/$/, "")}/engage/widget/${endpoint}`, {
459
+ chunkIWHAJBYL_js.sonorFetch(`${apiUrl.replace(/\/$/, "")}/engage/widget/${endpoint}`, {
460
460
  method: "POST",
461
461
  headers: { "Content-Type": "application/json" },
462
462
  body: JSON.stringify({ ...data, visitorId, pageUrl: window.location.href }),
@@ -727,5 +727,5 @@ function getDeviceType() {
727
727
 
728
728
  exports.DesignRenderer = DesignRenderer;
729
729
  exports.EngageWidget = EngageWidget;
730
- //# sourceMappingURL=chunk-RVFOUPK4.js.map
731
- //# sourceMappingURL=chunk-RVFOUPK4.js.map
730
+ //# sourceMappingURL=chunk-7VRK3DWU.js.map
731
+ //# sourceMappingURL=chunk-7VRK3DWU.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/engage/DesignRenderer.tsx","../src/engage/EngageWidget.tsx"],"names":["useState","jsx","createElement","jsxs","React","dynamic","resolveAnalyticsTarget","DEFAULT_ENGAGE_Z_INDEX","usePathname","useEffect","getOrCreateVisitorId","sonorFetch","useCallback","ReactDOM","Fragment","useRef"],"mappings":"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","file":"chunk-RVFOUPK4.js","sourcesContent":["/**\n * @sonordev/site-kit/engage - Design Renderer\n * \n * Renders design_json from Engage Studio as React components.\n * This is the runtime renderer that converts the visual builder's\n * JSON structure into actual React elements.\n */\n\n'use client'\n\nimport React, { createElement, CSSProperties, MouseEvent, useState } from 'react'\n\n// ============================================\n// Types\n// ============================================\n\nexport interface DesignNode {\n id: string\n type: string\n name: string\n children?: DesignNode[]\n props?: Record<string, any>\n style?: CSSProperties\n}\n\nexport interface DesignDocument {\n id: string\n type: string\n name: string\n children: DesignNode[]\n style?: CSSProperties\n props?: Record<string, any>\n}\n\nexport interface DesignRendererProps {\n design: DesignDocument\n onClose?: () => void\n onAction?: (action: ActionConfig, node: DesignNode) => void\n context?: EngageContext\n}\n\nexport interface ActionConfig {\n action: string\n url?: string\n newTab?: boolean\n target?: string\n text?: string\n productId?: string\n formId?: string\n}\n\nexport interface EngageContext {\n // Site-Kit context data that can be bound to elements\n user?: {\n name?: string\n email?: string\n isLoggedIn?: boolean\n }\n cart?: {\n itemCount?: number\n total?: number\n }\n page?: {\n url?: string\n title?: string\n }\n // Custom data from the page\n [key: string]: any\n}\n\n// ============================================\n// Action Handlers\n// ============================================\n\nfunction handleAction(\n action: ActionConfig,\n node: DesignNode,\n onClose?: () => void,\n onAction?: (action: ActionConfig, node: DesignNode) => void,\n): void {\n if (!action?.action || action.action === 'none') return\n\n // Let parent handle custom actions\n if (onAction) {\n onAction(action, node)\n }\n\n switch (action.action) {\n case 'link':\n if (action.url) {\n if (action.newTab) {\n window.open(action.url, '_blank', 'noopener,noreferrer')\n } else {\n window.location.href = action.url\n }\n }\n break\n\n case 'scroll':\n if (action.target) {\n const element = document.querySelector(action.target)\n element?.scrollIntoView({ behavior: 'smooth' })\n }\n break\n\n case 'close':\n onClose?.()\n break\n\n case 'copy':\n if (action.text) {\n navigator.clipboard.writeText(action.text).catch(console.error)\n }\n break\n\n case 'share':\n if (navigator.share) {\n navigator.share({\n title: document.title,\n url: window.location.href,\n }).catch(console.error)\n }\n break\n\n case 'download':\n if (action.url) {\n const a = document.createElement('a')\n a.href = action.url\n a.download = ''\n a.click()\n }\n break\n\n // Commerce actions - these should be handled by onAction callback\n case 'add_to_cart':\n case 'checkout':\n case 'book':\n case 'submit_form':\n case 'open_form':\n // Handled by parent via onAction\n break\n }\n}\n\n// ============================================\n// Animation Styles\n// ============================================\n\nconst animationKeyframes = `\n@keyframes engageFadeIn { from { opacity: 0; } to { opacity: 1; } }\n@keyframes engageFadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes engageFadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes engageSlideInLeft { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes engageSlideInRight { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes engageSlideInUp { from { opacity: 0; transform: translateY(100%); } to { opacity: 1; transform: translateY(0); } }\n@keyframes engageScaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } }\n@keyframes engageBounceIn { 0% { opacity: 0; transform: scale(0.3); } 50% { transform: scale(1.05); } 70% { transform: scale(0.9); } 100% { opacity: 1; transform: scale(1); } }\n`\n\nfunction getAnimationStyle(animation?: string, delay?: number, duration?: number): CSSProperties {\n if (!animation || animation === 'none') return {}\n \n const animationMap: Record<string, string> = {\n fadeIn: 'engageFadeIn',\n fadeInUp: 'engageFadeInUp',\n fadeInDown: 'engageFadeInDown',\n slideInLeft: 'engageSlideInLeft',\n slideInRight: 'engageSlideInRight',\n slideInUp: 'engageSlideInUp',\n scaleIn: 'engageScaleIn',\n bounceIn: 'engageBounceIn',\n }\n \n const animationName = animationMap[animation]\n if (!animationName) return {}\n \n return {\n animation: `${animationName} ${duration || 300}ms ease-out ${delay || 0}ms forwards`,\n opacity: 0, // Start invisible, animation will show it\n }\n}\n\n// ============================================\n// Node Renderer\n// ============================================\n\ninterface NodeRendererProps {\n node: DesignNode\n onClose?: () => void\n onAction?: (action: ActionConfig, node: DesignNode) => void\n context?: EngageContext\n}\n\nfunction NodeRenderer({ node, onClose, onAction, context }: NodeRendererProps): React.ReactElement | null {\n const [isHovered, setIsHovered] = useState(false)\n const { type, props = {}, style = {}, children } = node\n\n // Build styles with hover effects\n const computedStyle: CSSProperties = { ...style }\n \n // Apply animation\n if (props.animation) {\n Object.assign(computedStyle, getAnimationStyle(\n props.animation,\n props.animationDelay,\n props.animationDuration\n ))\n }\n \n // Apply hover effects\n if (isHovered) {\n if (props.hoverScale && props.hoverScale !== 'none') {\n computedStyle.transform = `scale(${props.hoverScale})`\n computedStyle.transition = 'transform 0.2s ease'\n }\n if (props.hoverShadow && props.hoverShadow !== 'none') {\n const shadowMap: Record<string, string> = {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1)',\n }\n computedStyle.boxShadow = shadowMap[props.hoverShadow]\n }\n }\n\n // Event handlers\n const eventHandlers: Record<string, (e: MouseEvent) => void> = {\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n }\n \n // Click handler\n if (props.onClick) {\n eventHandlers.onClick = (e: MouseEvent) => {\n e.preventDefault()\n handleAction(props.onClick, node, onClose, onAction)\n }\n computedStyle.cursor = 'pointer'\n }\n\n // Render children recursively\n const renderedChildren = children?.map((child) => (\n <NodeRenderer\n key={child.id}\n node={child}\n onClose={onClose}\n onAction={onAction}\n context={context}\n />\n ))\n\n // Render based on type\n switch (type) {\n case 'Container':\n case 'Box':\n case 'Section':\n return (\n <div style={computedStyle} {...eventHandlers}>\n {renderedChildren}\n </div>\n )\n\n case 'Text':\n return (\n <p style={computedStyle} {...eventHandlers}>\n {resolveText(props.text, context)}\n </p>\n )\n\n case 'Heading':\n const HeadingTag = `h${props.level || 2}` as keyof React.JSX.IntrinsicElements\n return createElement(\n HeadingTag,\n { style: computedStyle, ...eventHandlers },\n resolveText(props.text, context)\n )\n\n case 'Button':\n case 'BookingButton':\n case 'BuyNow':\n case 'AddToCart':\n case 'EventRSVP':\n return (\n <button\n style={computedStyle}\n {...eventHandlers}\n type=\"button\"\n >\n {resolveText(props.text || props.label, context) || 'Button'}\n </button>\n )\n\n case 'Image':\n return (\n <img\n src={props.src}\n alt={props.alt || ''}\n style={computedStyle}\n {...eventHandlers}\n />\n )\n\n case 'Link':\n return (\n <a\n href={props.href || '#'}\n target={props.newTab ? '_blank' : undefined}\n rel={props.newTab ? 'noopener noreferrer' : undefined}\n style={computedStyle}\n {...eventHandlers}\n >\n {resolveText(props.text, context) || renderedChildren}\n </a>\n )\n\n case 'Input':\n return (\n <input\n type={props.inputType || 'text'}\n placeholder={props.placeholder}\n style={computedStyle}\n {...eventHandlers}\n />\n )\n\n case 'Divider':\n return <hr style={{ border: 'none', borderTop: '1px solid var(--sk-border, #e5e7eb)', ...computedStyle }} />\n\n case 'Spacer':\n return <div style={{ ...computedStyle, width: props.width, height: props.height }} />\n\n case 'Icon':\n // Simple emoji/text icon rendering\n return (\n <span style={computedStyle} {...eventHandlers}>\n {props.icon || '★'}\n </span>\n )\n\n case 'FormEmbed':\n // For form embeds, we need to render the form from Forms module\n // This would integrate with the ManagedForm component\n return (\n <div \n style={computedStyle} \n data-engage-form={props.form_id}\n {...eventHandlers}\n >\n {/* ManagedForm would be rendered here by the parent */}\n <div style={{ padding: '16px', background: 'var(--sk-bg-elevated, #f5f5f5)', borderRadius: '8px', textAlign: 'center' }}>\n Form: {props.form_id || 'Not configured'}\n </div>\n </div>\n )\n\n case 'ProductCard':\n case 'EventCard':\n // Product/event cards need data binding from Commerce\n return (\n <div \n style={computedStyle} \n data-engage-offering={props.offering_id}\n {...eventHandlers}\n >\n {renderedChildren}\n </div>\n )\n\n default:\n // Unknown type - render as div with children\n console.warn(`[DesignRenderer] Unknown node type: ${type}`)\n return (\n <div style={computedStyle} {...eventHandlers}>\n {renderedChildren}\n </div>\n )\n }\n}\n\n// ============================================\n// Text Resolution (Data Bindings)\n// ============================================\n\nfunction resolveText(text: string | undefined, context?: EngageContext): string {\n if (!text) return ''\n if (!context) return text\n \n // Replace {{variable}} patterns with context values\n return text.replace(/\\{\\{(\\w+(?:\\.\\w+)*)\\}\\}/g, (match, path) => {\n const value = getNestedValue(context, path)\n return value !== undefined ? String(value) : match\n })\n}\n\nfunction getNestedValue(obj: Record<string, any>, path: string): any {\n return path.split('.').reduce((acc, key) => acc?.[key], obj)\n}\n\n// ============================================\n// Main Component\n// ============================================\n\nexport function DesignRenderer({\n design,\n onClose,\n onAction,\n context,\n}: DesignRendererProps): React.ReactElement {\n // Inject animation keyframes\n React.useEffect(() => {\n if (typeof document === 'undefined') return\n \n const styleId = 'engage-design-renderer-animations'\n if (!document.getElementById(styleId)) {\n const styleSheet = document.createElement('style')\n styleSheet.id = styleId\n styleSheet.textContent = animationKeyframes\n document.head.appendChild(styleSheet)\n }\n }, [])\n\n // Render the root container\n const rootStyle: CSSProperties = {\n ...design.style,\n }\n\n return (\n <div style={rootStyle} data-engage-design={design.id}>\n {design.children?.map((node) => (\n <NodeRenderer\n key={node.id}\n node={node}\n onClose={onClose}\n onAction={onAction}\n context={context}\n />\n ))}\n </div>\n )\n}\n\nexport default DesignRenderer\n","/**\n * @sonordev/site-kit/engage - Engage Widget\n * \n * Loads and renders engagement widgets (popups, nudges, bars, chat) via Portal API\n * Supports both legacy config-based rendering and new design_json from Engage Studio\n */\n\n'use client'\n\nimport React, { useEffect, useRef, useState, useCallback } from 'react'\nimport ReactDOM from 'react-dom'\nimport dynamic from 'next/dynamic'\nimport { usePathname } from 'next/navigation'\nimport type { ChatLauncherPlacement, EngageElement } from './types'\nimport { DEFAULT_ENGAGE_Z_INDEX } from './launcher-placement'\nimport { getOrCreateVisitorId } from '../shared/identity'\nimport { resolveAnalyticsTarget, type AnalyticsGateOptions } from '../shared/reporting-gate'\nimport { sonorFetch } from '../shared/sonorFetch'\nimport { DesignRenderer, type ActionConfig, type DesignDocument } from './DesignRenderer'\n\n// ChatWidget pulls react-markdown (and lazily socket.io) — keep it out of the\n// engage chunk entirely and only download it when the idle-gated `chatReady`\n// flips and the widget actually renders.\n//\n// react-markdown cannot be made an optional peer dependency: bundlers resolve\n// even a DYNAMIC import at build time, so a site without it installed fails\n// with \"Module not found\" before any runtime fallback can catch it. Verified\n// against Next 16 / Turbopack, 2026-08-14. See CHANGELOG 4.0.3.\nconst LazyChatWidget = dynamic(\n () => import('./ChatWidget').then(m => ({ default: m.ChatWidget })),\n { ssr: false },\n)\n\ninterface EngageWidgetProps extends ChatLauncherPlacement, AnalyticsGateOptions {\n apiUrl?: string\n apiKey?: string\n projectId?: string\n chatEnabled?: boolean\n debug?: boolean\n}\n\n// Gate before mounting any effects, element telemetry, or the chat transport.\n// Standalone use and SiteKitLayout share the analytics send decision.\nexport function EngageWidget(props: EngageWidgetProps) {\n const target = resolveAnalyticsTarget(props)\n if (!target) return null\n return <AllowedEngageWidget {...props} {...target} />\n}\n\nfunction AllowedEngageWidget({\n apiUrl: propApiUrl,\n apiKey: propApiKey,\n projectId: propProjectId,\n position = 'bottom-right',\n offsetBottom,\n zIndex = DEFAULT_ENGAGE_Z_INDEX,\n chatEnabled = true,\n debug = false,\n}: EngageWidgetProps & { apiUrl: string; apiKey: string }) {\n const pathname = usePathname()\n const [elements, setElements] = useState<EngageElement[]>([])\n const [activeElements, setActiveElements] = useState<string[]>([])\n const [dismissedElements, setDismissedElements] = useState<Set<string>>(new Set())\n const [chatReady, setChatReady] = useState(false)\n \n // Load elements from API (GET /engage/widget/elements)\n useEffect(() => {\n async function loadElements() {\n const apiUrl = propApiUrl\n const apiKey = propApiKey\n \n if (!apiKey) {\n if (debug) console.warn('[Engage] No API key configured')\n return\n }\n \n // Shared identity (_sk_vid) — same visitor ID as Analytics & Signal\n const visitorId = getOrCreateVisitorId()\n const url = typeof window !== 'undefined' ? window.location.href : ''\n \n try {\n const response = await sonorFetch(\n `${apiUrl.replace(/\\/$/, '')}/engage/widget/elements?url=${encodeURIComponent(url)}&visitorId=${encodeURIComponent(visitorId)}`,\n {},\n { apiKey },\n )\n \n if (!response.ok) {\n if (debug) console.error('[Engage] Error loading elements:', response.statusText)\n return\n }\n \n const json = await response.json()\n const elementsList = json.data?.elements ?? json.elements ?? []\n if (debug) console.log('[Engage] Loaded elements:', elementsList)\n setElements(elementsList)\n } catch (error) {\n if (debug) console.error('[Engage] Error loading elements:', error)\n }\n }\n \n loadElements()\n }, [propApiUrl, propApiKey, debug])\n\n // Defer ChatWidget until the browser is idle (reduces main-thread blocking)\n useEffect(() => {\n if (!chatEnabled) return\n const id =\n typeof requestIdleCallback !== 'undefined'\n ? requestIdleCallback(() => setChatReady(true), { timeout: 3000 })\n : setTimeout(() => setChatReady(true), 1)\n return () => {\n typeof cancelIdleCallback !== 'undefined' ? cancelIdleCallback(id as number) : clearTimeout(id)\n }\n }, [chatEnabled])\n \n // Check targeting and trigger for each element\n useEffect(() => {\n if (!elements.length) return\n \n const checkElement = (element: EngageElement): boolean => {\n // Check if dismissed\n if (dismissedElements.has(element.id)) return false\n \n // Check page targeting\n if (element.targeting?.pages) {\n const { include, exclude } = element.targeting.pages\n \n if (exclude?.some(p => matchPath(pathname, p))) return false\n if (include && !include.some(p => matchPath(pathname, p))) return false\n }\n \n // Check device targeting\n if (element.targeting?.devices) {\n const device = getDeviceType()\n if (!element.targeting.devices.includes(device)) return false\n }\n \n // Check frequency capping\n if (element.trigger?.frequency) {\n const { type, days } = element.trigger.frequency\n const key = `_engage_${element.id}`\n \n if (type === 'once') {\n if (localStorage.getItem(key)) return false\n } else if (type === 'once-per-session') {\n if (sessionStorage.getItem(key)) return false\n } else if (type === 'every-n-days' && days) {\n const lastShown = localStorage.getItem(key)\n if (lastShown) {\n const elapsed = Date.now() - parseInt(lastShown, 10)\n if (elapsed < days * 24 * 60 * 60 * 1000) return false\n }\n }\n }\n \n return true\n }\n \n // Filter elements that pass targeting\n const eligible = elements.filter(checkElement)\n\n if (debug) console.log('[Engage] Eligible elements:', eligible)\n\n // Dedupe on add: this effect re-runs when dismissedElements changes, so a\n // still-eligible immediate element would otherwise be pushed again\n // (duplicate ids → duplicate keys → double render).\n const activate = (id: string) => {\n setActiveElements(prev => (prev.includes(id) ? prev : [...prev, id]))\n }\n\n // Every timer/listener registered here is torn down on cleanup — the old\n // version leaked delay timeouts and exit-intent/scroll listeners on each\n // effect re-run and on unmount.\n const cleanups: Array<() => void> = []\n\n eligible.forEach(element => {\n const trigger = element.trigger\n\n if (trigger?.type === 'immediate' || !trigger?.type) {\n activate(element.id)\n } else if (trigger?.type === 'delay' && trigger.delay) {\n const timer = setTimeout(() => activate(element.id), trigger.delay * 1000)\n cleanups.push(() => clearTimeout(timer))\n } else if (trigger?.type === 'exit-intent') {\n const handleMouseLeave = (e: MouseEvent) => {\n if (e.clientY < 10) {\n activate(element.id)\n document.removeEventListener('mouseleave', handleMouseLeave)\n }\n }\n document.addEventListener('mouseleave', handleMouseLeave)\n cleanups.push(() => document.removeEventListener('mouseleave', handleMouseLeave))\n } else if (trigger?.type === 'scroll' && trigger.scrollPercentage) {\n const handleScroll = () => {\n const scrollPercent = (window.scrollY / (document.body.scrollHeight - window.innerHeight)) * 100\n if (scrollPercent >= (trigger.scrollPercentage || 50)) {\n activate(element.id)\n window.removeEventListener('scroll', handleScroll)\n }\n }\n window.addEventListener('scroll', handleScroll, { passive: true })\n cleanups.push(() => window.removeEventListener('scroll', handleScroll))\n }\n })\n\n return () => {\n cleanups.forEach(fn => fn())\n }\n }, [elements, pathname, dismissedElements, debug])\n \n const handleDismiss = useCallback((elementId: string) => {\n setDismissedElements(prev => new Set([...prev, elementId]))\n setActiveElements(prev => prev.filter(id => id !== elementId))\n \n // Record dismissal in storage\n const element = elements.find(e => e.id === elementId)\n if (element?.trigger?.frequency) {\n const key = `_engage_${elementId}`\n if (element.trigger.frequency.type === 'once-per-session') {\n sessionStorage.setItem(key, 'true')\n } else {\n localStorage.setItem(key, Date.now().toString())\n }\n }\n }, [elements])\n \n // Render active elements + chat widget\n // Use portal to document.body so widgets always land inside <body>,\n // even when SiteKitLayout wraps <body> (common in root layouts)\n if (typeof document === 'undefined') return null\n\n return ReactDOM.createPortal(\n <>\n {activeElements.map(elementId => {\n const element = elements.find(e => e.id === elementId)\n if (!element) return null\n\n return (\n <EngageElementRenderer\n key={element.id}\n element={element}\n onDismiss={() => handleDismiss(element.id)}\n zIndex={zIndex}\n apiUrl={propApiUrl}\n apiKey={propApiKey}\n />\n )\n })}\n\n {/* Chat Widget - deferred until idle; chunk downloads on first render */}\n {chatEnabled && chatReady && (\n <LazyChatWidget\n projectId={propProjectId ?? undefined}\n config={{\n position,\n offsetBottom,\n zIndex,\n buttonColor: '#2563eb', // Default blue-600 (AA on white), overridden by --sk-primary CSS var or API brand_primary\n }}\n />\n )}\n </>,\n document.body,\n )\n}\n\n// ============================================\n// Action Handler + Tracking\n// ============================================\n\nfunction trackEngageEvent(\n apiUrl: string,\n apiKey: string | undefined,\n endpoint: 'impression' | 'click',\n data: Record<string, unknown>\n) {\n if (!apiKey) return\n const visitorId = typeof localStorage !== 'undefined'\n ? localStorage.getItem('_sk_vid')\n : null\n sonorFetch(`${apiUrl.replace(/\\/$/, '')}/engage/widget/${endpoint}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ ...data, visitorId, pageUrl: window.location.href }),\n keepalive: true,\n }, { apiKey, retries: 0 }).catch(() => {})\n}\n\nfunction handleEngageAction(\n action: ActionConfig,\n _node: unknown,\n element: EngageElement,\n apiUrl: string,\n apiKey: string | undefined\n) {\n // Track click\n trackEngageEvent(apiUrl, apiKey, 'click', {\n elementId: element.id,\n action: action.action,\n })\n\n switch (action.action) {\n case 'navigate':\n if (action.url) window.location.href = action.url\n break\n case 'open-url':\n if (action.url) window.open(action.url, '_blank')\n break\n case 'submit-form':\n case 'submit_form':\n window.dispatchEvent(new CustomEvent('engage:submit-form', {\n detail: { formId: action.formId || action.url, elementId: element.id },\n }))\n break\n case 'track-conversion':\n window.dispatchEvent(new CustomEvent('engage:conversion', {\n detail: { action, elementId: element.id },\n }))\n break\n default:\n window.dispatchEvent(new CustomEvent('engage:action', {\n detail: { action, elementId: element.id },\n }))\n break\n }\n}\n\n// Helper components\nfunction EngageElementRenderer({\n element,\n onDismiss,\n zIndex,\n apiUrl,\n apiKey,\n}: {\n element: EngageElement\n onDismiss: () => void\n zIndex: number\n apiUrl: string\n apiKey: string | undefined\n}) {\n // Impression tracking via IntersectionObserver\n const containerRef = useRef<HTMLDivElement>(null)\n const impressionTrackedRef = useRef(false)\n\n useEffect(() => {\n const el = containerRef.current\n if (!el || impressionTrackedRef.current) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && !impressionTrackedRef.current) {\n impressionTrackedRef.current = true\n trackEngageEvent(apiUrl, apiKey, 'impression', { elementId: element.id })\n observer.disconnect()\n }\n },\n { threshold: 0.5 }\n )\n observer.observe(el)\n return () => observer.disconnect()\n }, [apiUrl, apiKey, element.id])\n\n const onAction = useCallback(\n (action: ActionConfig, node: unknown) => {\n handleEngageAction(action, node, element, apiUrl, apiKey)\n },\n [element, apiUrl, apiKey]\n )\n\n // If element has design_json from Engage Studio, use DesignRenderer\n if (element.design_json) {\n // Wrap in appropriate container based on element type\n if (element.type === 'popup') {\n return (\n <div\n ref={containerRef}\n data-engage-element={element.id}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex,\n }}\n onClick={onDismiss}\n >\n <div onClick={e => e.stopPropagation()}>\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n </div>\n )\n }\n\n if (element.type === 'bar') {\n return (\n <div\n ref={containerRef}\n data-engage-element={element.id}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n zIndex,\n }}\n >\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n )\n }\n\n if (element.type === 'nudge' || element.type === 'slide-in') {\n const position = element.config?.position || 'bottom-right'\n const positionStyles: Record<string, React.CSSProperties> = {\n 'bottom-right': { bottom: 20, right: 20 },\n 'bottom-left': { bottom: 20, left: 20 },\n 'top-right': { top: 20, right: 20 },\n 'top-left': { top: 20, left: 20 },\n }\n\n return (\n <div\n ref={containerRef}\n data-engage-element={element.id}\n style={{\n position: 'fixed',\n zIndex,\n ...positionStyles[position],\n }}\n >\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n )\n }\n\n // Default: render design_json directly\n return (\n <div ref={containerRef} data-engage-element={element.id}>\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n )\n }\n\n // Legacy: Simple popup rendering for elements without design_json\n if (element.type === 'popup') {\n return (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex,\n }}\n onClick={onDismiss}\n >\n <div\n style={{\n backgroundColor: 'var(--sk-bg, #ffffff)',\n padding: 24,\n borderRadius: 8,\n maxWidth: 500,\n width: '90%',\n }}\n onClick={e => e.stopPropagation()}\n >\n <button\n onClick={onDismiss}\n style={{\n position: 'absolute',\n top: 8,\n right: 8,\n background: 'none',\n border: 'none',\n fontSize: 24,\n cursor: 'pointer',\n }}\n >\n ×\n </button>\n {element.config?.title && <h2>{element.config.title}</h2>}\n {element.config?.message && <p>{element.config.message}</p>}\n </div>\n </div>\n )\n }\n \n // Bar/banner rendering\n if (element.type === 'bar') {\n return (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n backgroundColor: element.config?.backgroundColor || 'var(--sk-primary, #2563eb)',\n color: element.config?.textColor || 'var(--sk-bg, #ffffff)',\n padding: '12px 24px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 16,\n zIndex,\n }}\n >\n <span>{element.config?.message}</span>\n <button\n onClick={onDismiss}\n style={{\n background: 'none',\n border: 'none',\n color: 'inherit',\n fontSize: 20,\n cursor: 'pointer',\n }}\n >\n ×\n </button>\n </div>\n )\n }\n \n return null\n}\n\n// Utilities\nfunction matchPath(pathname: string, pattern: string): boolean {\n if (pattern.endsWith('*')) {\n return pathname.startsWith(pattern.slice(0, -1))\n }\n return pathname === pattern\n}\n\nfunction getDeviceType(): 'desktop' | 'mobile' | 'tablet' {\n if (typeof window === 'undefined') return 'desktop'\n const ua = navigator.userAgent\n if (/tablet|ipad|playbook|silk/i.test(ua)) return 'tablet'\n if (/mobile|iphone|ipod|android|blackberry|opera mini|iemobile/i.test(ua)) return 'mobile'\n return 'desktop'\n}\n"]}
1
+ {"version":3,"sources":["../src/engage/DesignRenderer.tsx","../src/engage/EngageWidget.tsx"],"names":["useState","jsx","createElement","jsxs","React","dynamic","resolveAnalyticsTarget","DEFAULT_ENGAGE_Z_INDEX","usePathname","useEffect","getOrCreateVisitorId","sonorFetch","useCallback","ReactDOM","Fragment","useRef"],"mappings":"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","file":"chunk-7VRK3DWU.js","sourcesContent":["/**\n * @sonordev/site-kit/engage - Design Renderer\n * \n * Renders design_json from Engage Studio as React components.\n * This is the runtime renderer that converts the visual builder's\n * JSON structure into actual React elements.\n */\n\n'use client'\n\nimport React, { createElement, CSSProperties, MouseEvent, useState } from 'react'\n\n// ============================================\n// Types\n// ============================================\n\nexport interface DesignNode {\n id: string\n type: string\n name: string\n children?: DesignNode[]\n props?: Record<string, any>\n style?: CSSProperties\n}\n\nexport interface DesignDocument {\n id: string\n type: string\n name: string\n children: DesignNode[]\n style?: CSSProperties\n props?: Record<string, any>\n}\n\nexport interface DesignRendererProps {\n design: DesignDocument\n onClose?: () => void\n onAction?: (action: ActionConfig, node: DesignNode) => void\n context?: EngageContext\n}\n\nexport interface ActionConfig {\n action: string\n url?: string\n newTab?: boolean\n target?: string\n text?: string\n productId?: string\n formId?: string\n}\n\nexport interface EngageContext {\n // Site-Kit context data that can be bound to elements\n user?: {\n name?: string\n email?: string\n isLoggedIn?: boolean\n }\n cart?: {\n itemCount?: number\n total?: number\n }\n page?: {\n url?: string\n title?: string\n }\n // Custom data from the page\n [key: string]: any\n}\n\n// ============================================\n// Action Handlers\n// ============================================\n\nfunction handleAction(\n action: ActionConfig,\n node: DesignNode,\n onClose?: () => void,\n onAction?: (action: ActionConfig, node: DesignNode) => void,\n): void {\n if (!action?.action || action.action === 'none') return\n\n // Let parent handle custom actions\n if (onAction) {\n onAction(action, node)\n }\n\n switch (action.action) {\n case 'link':\n if (action.url) {\n if (action.newTab) {\n window.open(action.url, '_blank', 'noopener,noreferrer')\n } else {\n window.location.href = action.url\n }\n }\n break\n\n case 'scroll':\n if (action.target) {\n const element = document.querySelector(action.target)\n element?.scrollIntoView({ behavior: 'smooth' })\n }\n break\n\n case 'close':\n onClose?.()\n break\n\n case 'copy':\n if (action.text) {\n navigator.clipboard.writeText(action.text).catch(console.error)\n }\n break\n\n case 'share':\n if (navigator.share) {\n navigator.share({\n title: document.title,\n url: window.location.href,\n }).catch(console.error)\n }\n break\n\n case 'download':\n if (action.url) {\n const a = document.createElement('a')\n a.href = action.url\n a.download = ''\n a.click()\n }\n break\n\n // Commerce actions - these should be handled by onAction callback\n case 'add_to_cart':\n case 'checkout':\n case 'book':\n case 'submit_form':\n case 'open_form':\n // Handled by parent via onAction\n break\n }\n}\n\n// ============================================\n// Animation Styles\n// ============================================\n\nconst animationKeyframes = `\n@keyframes engageFadeIn { from { opacity: 0; } to { opacity: 1; } }\n@keyframes engageFadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes engageFadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } }\n@keyframes engageSlideInLeft { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes engageSlideInRight { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } }\n@keyframes engageSlideInUp { from { opacity: 0; transform: translateY(100%); } to { opacity: 1; transform: translateY(0); } }\n@keyframes engageScaleIn { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } }\n@keyframes engageBounceIn { 0% { opacity: 0; transform: scale(0.3); } 50% { transform: scale(1.05); } 70% { transform: scale(0.9); } 100% { opacity: 1; transform: scale(1); } }\n`\n\nfunction getAnimationStyle(animation?: string, delay?: number, duration?: number): CSSProperties {\n if (!animation || animation === 'none') return {}\n \n const animationMap: Record<string, string> = {\n fadeIn: 'engageFadeIn',\n fadeInUp: 'engageFadeInUp',\n fadeInDown: 'engageFadeInDown',\n slideInLeft: 'engageSlideInLeft',\n slideInRight: 'engageSlideInRight',\n slideInUp: 'engageSlideInUp',\n scaleIn: 'engageScaleIn',\n bounceIn: 'engageBounceIn',\n }\n \n const animationName = animationMap[animation]\n if (!animationName) return {}\n \n return {\n animation: `${animationName} ${duration || 300}ms ease-out ${delay || 0}ms forwards`,\n opacity: 0, // Start invisible, animation will show it\n }\n}\n\n// ============================================\n// Node Renderer\n// ============================================\n\ninterface NodeRendererProps {\n node: DesignNode\n onClose?: () => void\n onAction?: (action: ActionConfig, node: DesignNode) => void\n context?: EngageContext\n}\n\nfunction NodeRenderer({ node, onClose, onAction, context }: NodeRendererProps): React.ReactElement | null {\n const [isHovered, setIsHovered] = useState(false)\n const { type, props = {}, style = {}, children } = node\n\n // Build styles with hover effects\n const computedStyle: CSSProperties = { ...style }\n \n // Apply animation\n if (props.animation) {\n Object.assign(computedStyle, getAnimationStyle(\n props.animation,\n props.animationDelay,\n props.animationDuration\n ))\n }\n \n // Apply hover effects\n if (isHovered) {\n if (props.hoverScale && props.hoverScale !== 'none') {\n computedStyle.transform = `scale(${props.hoverScale})`\n computedStyle.transition = 'transform 0.2s ease'\n }\n if (props.hoverShadow && props.hoverShadow !== 'none') {\n const shadowMap: Record<string, string> = {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1)',\n }\n computedStyle.boxShadow = shadowMap[props.hoverShadow]\n }\n }\n\n // Event handlers\n const eventHandlers: Record<string, (e: MouseEvent) => void> = {\n onMouseEnter: () => setIsHovered(true),\n onMouseLeave: () => setIsHovered(false),\n }\n \n // Click handler\n if (props.onClick) {\n eventHandlers.onClick = (e: MouseEvent) => {\n e.preventDefault()\n handleAction(props.onClick, node, onClose, onAction)\n }\n computedStyle.cursor = 'pointer'\n }\n\n // Render children recursively\n const renderedChildren = children?.map((child) => (\n <NodeRenderer\n key={child.id}\n node={child}\n onClose={onClose}\n onAction={onAction}\n context={context}\n />\n ))\n\n // Render based on type\n switch (type) {\n case 'Container':\n case 'Box':\n case 'Section':\n return (\n <div style={computedStyle} {...eventHandlers}>\n {renderedChildren}\n </div>\n )\n\n case 'Text':\n return (\n <p style={computedStyle} {...eventHandlers}>\n {resolveText(props.text, context)}\n </p>\n )\n\n case 'Heading':\n const HeadingTag = `h${props.level || 2}` as keyof React.JSX.IntrinsicElements\n return createElement(\n HeadingTag,\n { style: computedStyle, ...eventHandlers },\n resolveText(props.text, context)\n )\n\n case 'Button':\n case 'BookingButton':\n case 'BuyNow':\n case 'AddToCart':\n case 'EventRSVP':\n return (\n <button\n style={computedStyle}\n {...eventHandlers}\n type=\"button\"\n >\n {resolveText(props.text || props.label, context) || 'Button'}\n </button>\n )\n\n case 'Image':\n return (\n <img\n src={props.src}\n alt={props.alt || ''}\n style={computedStyle}\n {...eventHandlers}\n />\n )\n\n case 'Link':\n return (\n <a\n href={props.href || '#'}\n target={props.newTab ? '_blank' : undefined}\n rel={props.newTab ? 'noopener noreferrer' : undefined}\n style={computedStyle}\n {...eventHandlers}\n >\n {resolveText(props.text, context) || renderedChildren}\n </a>\n )\n\n case 'Input':\n return (\n <input\n type={props.inputType || 'text'}\n placeholder={props.placeholder}\n style={computedStyle}\n {...eventHandlers}\n />\n )\n\n case 'Divider':\n return <hr style={{ border: 'none', borderTop: '1px solid var(--sk-border, #e5e7eb)', ...computedStyle }} />\n\n case 'Spacer':\n return <div style={{ ...computedStyle, width: props.width, height: props.height }} />\n\n case 'Icon':\n // Simple emoji/text icon rendering\n return (\n <span style={computedStyle} {...eventHandlers}>\n {props.icon || '★'}\n </span>\n )\n\n case 'FormEmbed':\n // For form embeds, we need to render the form from Forms module\n // This would integrate with the ManagedForm component\n return (\n <div \n style={computedStyle} \n data-engage-form={props.form_id}\n {...eventHandlers}\n >\n {/* ManagedForm would be rendered here by the parent */}\n <div style={{ padding: '16px', background: 'var(--sk-bg-elevated, #f5f5f5)', borderRadius: '8px', textAlign: 'center' }}>\n Form: {props.form_id || 'Not configured'}\n </div>\n </div>\n )\n\n case 'ProductCard':\n case 'EventCard':\n // Product/event cards need data binding from Commerce\n return (\n <div \n style={computedStyle} \n data-engage-offering={props.offering_id}\n {...eventHandlers}\n >\n {renderedChildren}\n </div>\n )\n\n default:\n // Unknown type - render as div with children\n console.warn(`[DesignRenderer] Unknown node type: ${type}`)\n return (\n <div style={computedStyle} {...eventHandlers}>\n {renderedChildren}\n </div>\n )\n }\n}\n\n// ============================================\n// Text Resolution (Data Bindings)\n// ============================================\n\nfunction resolveText(text: string | undefined, context?: EngageContext): string {\n if (!text) return ''\n if (!context) return text\n \n // Replace {{variable}} patterns with context values\n return text.replace(/\\{\\{(\\w+(?:\\.\\w+)*)\\}\\}/g, (match, path) => {\n const value = getNestedValue(context, path)\n return value !== undefined ? String(value) : match\n })\n}\n\nfunction getNestedValue(obj: Record<string, any>, path: string): any {\n return path.split('.').reduce((acc, key) => acc?.[key], obj)\n}\n\n// ============================================\n// Main Component\n// ============================================\n\nexport function DesignRenderer({\n design,\n onClose,\n onAction,\n context,\n}: DesignRendererProps): React.ReactElement {\n // Inject animation keyframes\n React.useEffect(() => {\n if (typeof document === 'undefined') return\n \n const styleId = 'engage-design-renderer-animations'\n if (!document.getElementById(styleId)) {\n const styleSheet = document.createElement('style')\n styleSheet.id = styleId\n styleSheet.textContent = animationKeyframes\n document.head.appendChild(styleSheet)\n }\n }, [])\n\n // Render the root container\n const rootStyle: CSSProperties = {\n ...design.style,\n }\n\n return (\n <div style={rootStyle} data-engage-design={design.id}>\n {design.children?.map((node) => (\n <NodeRenderer\n key={node.id}\n node={node}\n onClose={onClose}\n onAction={onAction}\n context={context}\n />\n ))}\n </div>\n )\n}\n\nexport default DesignRenderer\n","/**\n * @sonordev/site-kit/engage - Engage Widget\n * \n * Loads and renders engagement widgets (popups, nudges, bars, chat) via Portal API\n * Supports both legacy config-based rendering and new design_json from Engage Studio\n */\n\n'use client'\n\nimport React, { useEffect, useRef, useState, useCallback } from 'react'\nimport ReactDOM from 'react-dom'\nimport dynamic from 'next/dynamic'\nimport { usePathname } from 'next/navigation'\nimport type { ChatLauncherPlacement, EngageElement } from './types'\nimport { DEFAULT_ENGAGE_Z_INDEX } from './launcher-placement'\nimport { getOrCreateVisitorId } from '../shared/identity'\nimport { resolveAnalyticsTarget, type AnalyticsGateOptions } from '../shared/reporting-gate'\nimport { sonorFetch } from '../shared/sonorFetch'\nimport { DesignRenderer, type ActionConfig, type DesignDocument } from './DesignRenderer'\n\n// ChatWidget pulls react-markdown (and lazily socket.io) — keep it out of the\n// engage chunk entirely and only download it when the idle-gated `chatReady`\n// flips and the widget actually renders.\n//\n// react-markdown cannot be made an optional peer dependency: bundlers resolve\n// even a DYNAMIC import at build time, so a site without it installed fails\n// with \"Module not found\" before any runtime fallback can catch it. Verified\n// against Next 16 / Turbopack, 2026-08-14. See CHANGELOG 4.0.3.\nconst LazyChatWidget = dynamic(\n () => import('./ChatWidget').then(m => ({ default: m.ChatWidget })),\n { ssr: false },\n)\n\ninterface EngageWidgetProps extends ChatLauncherPlacement, AnalyticsGateOptions {\n apiUrl?: string\n apiKey?: string\n projectId?: string\n chatEnabled?: boolean\n debug?: boolean\n}\n\n// Gate before mounting any effects, element telemetry, or the chat transport.\n// Standalone use and SiteKitLayout share the analytics send decision.\nexport function EngageWidget(props: EngageWidgetProps) {\n const target = resolveAnalyticsTarget(props)\n if (!target) return null\n return <AllowedEngageWidget {...props} {...target} />\n}\n\nfunction AllowedEngageWidget({\n apiUrl: propApiUrl,\n apiKey: propApiKey,\n projectId: propProjectId,\n position = 'bottom-right',\n offsetBottom,\n zIndex = DEFAULT_ENGAGE_Z_INDEX,\n chatEnabled = true,\n debug = false,\n}: EngageWidgetProps & { apiUrl: string; apiKey: string }) {\n const pathname = usePathname()\n const [elements, setElements] = useState<EngageElement[]>([])\n const [activeElements, setActiveElements] = useState<string[]>([])\n const [dismissedElements, setDismissedElements] = useState<Set<string>>(new Set())\n const [chatReady, setChatReady] = useState(false)\n \n // Load elements from API (GET /engage/widget/elements)\n useEffect(() => {\n async function loadElements() {\n const apiUrl = propApiUrl\n const apiKey = propApiKey\n \n if (!apiKey) {\n if (debug) console.warn('[Engage] No API key configured')\n return\n }\n \n // Shared identity (_sk_vid) — same visitor ID as Analytics & Signal\n const visitorId = getOrCreateVisitorId()\n const url = typeof window !== 'undefined' ? window.location.href : ''\n \n try {\n const response = await sonorFetch(\n `${apiUrl.replace(/\\/$/, '')}/engage/widget/elements?url=${encodeURIComponent(url)}&visitorId=${encodeURIComponent(visitorId)}`,\n {},\n { apiKey },\n )\n \n if (!response.ok) {\n if (debug) console.error('[Engage] Error loading elements:', response.statusText)\n return\n }\n \n const json = await response.json()\n const elementsList = json.data?.elements ?? json.elements ?? []\n if (debug) console.log('[Engage] Loaded elements:', elementsList)\n setElements(elementsList)\n } catch (error) {\n if (debug) console.error('[Engage] Error loading elements:', error)\n }\n }\n \n loadElements()\n }, [propApiUrl, propApiKey, debug])\n\n // Defer ChatWidget until the browser is idle (reduces main-thread blocking)\n useEffect(() => {\n if (!chatEnabled) return\n const id =\n typeof requestIdleCallback !== 'undefined'\n ? requestIdleCallback(() => setChatReady(true), { timeout: 3000 })\n : setTimeout(() => setChatReady(true), 1)\n return () => {\n typeof cancelIdleCallback !== 'undefined' ? cancelIdleCallback(id as number) : clearTimeout(id)\n }\n }, [chatEnabled])\n \n // Check targeting and trigger for each element\n useEffect(() => {\n if (!elements.length) return\n \n const checkElement = (element: EngageElement): boolean => {\n // Check if dismissed\n if (dismissedElements.has(element.id)) return false\n \n // Check page targeting\n if (element.targeting?.pages) {\n const { include, exclude } = element.targeting.pages\n \n if (exclude?.some(p => matchPath(pathname, p))) return false\n if (include && !include.some(p => matchPath(pathname, p))) return false\n }\n \n // Check device targeting\n if (element.targeting?.devices) {\n const device = getDeviceType()\n if (!element.targeting.devices.includes(device)) return false\n }\n \n // Check frequency capping\n if (element.trigger?.frequency) {\n const { type, days } = element.trigger.frequency\n const key = `_engage_${element.id}`\n \n if (type === 'once') {\n if (localStorage.getItem(key)) return false\n } else if (type === 'once-per-session') {\n if (sessionStorage.getItem(key)) return false\n } else if (type === 'every-n-days' && days) {\n const lastShown = localStorage.getItem(key)\n if (lastShown) {\n const elapsed = Date.now() - parseInt(lastShown, 10)\n if (elapsed < days * 24 * 60 * 60 * 1000) return false\n }\n }\n }\n \n return true\n }\n \n // Filter elements that pass targeting\n const eligible = elements.filter(checkElement)\n\n if (debug) console.log('[Engage] Eligible elements:', eligible)\n\n // Dedupe on add: this effect re-runs when dismissedElements changes, so a\n // still-eligible immediate element would otherwise be pushed again\n // (duplicate ids → duplicate keys → double render).\n const activate = (id: string) => {\n setActiveElements(prev => (prev.includes(id) ? prev : [...prev, id]))\n }\n\n // Every timer/listener registered here is torn down on cleanup — the old\n // version leaked delay timeouts and exit-intent/scroll listeners on each\n // effect re-run and on unmount.\n const cleanups: Array<() => void> = []\n\n eligible.forEach(element => {\n const trigger = element.trigger\n\n if (trigger?.type === 'immediate' || !trigger?.type) {\n activate(element.id)\n } else if (trigger?.type === 'delay' && trigger.delay) {\n const timer = setTimeout(() => activate(element.id), trigger.delay * 1000)\n cleanups.push(() => clearTimeout(timer))\n } else if (trigger?.type === 'exit-intent') {\n const handleMouseLeave = (e: MouseEvent) => {\n if (e.clientY < 10) {\n activate(element.id)\n document.removeEventListener('mouseleave', handleMouseLeave)\n }\n }\n document.addEventListener('mouseleave', handleMouseLeave)\n cleanups.push(() => document.removeEventListener('mouseleave', handleMouseLeave))\n } else if (trigger?.type === 'scroll' && trigger.scrollPercentage) {\n const handleScroll = () => {\n const scrollPercent = (window.scrollY / (document.body.scrollHeight - window.innerHeight)) * 100\n if (scrollPercent >= (trigger.scrollPercentage || 50)) {\n activate(element.id)\n window.removeEventListener('scroll', handleScroll)\n }\n }\n window.addEventListener('scroll', handleScroll, { passive: true })\n cleanups.push(() => window.removeEventListener('scroll', handleScroll))\n }\n })\n\n return () => {\n cleanups.forEach(fn => fn())\n }\n }, [elements, pathname, dismissedElements, debug])\n \n const handleDismiss = useCallback((elementId: string) => {\n setDismissedElements(prev => new Set([...prev, elementId]))\n setActiveElements(prev => prev.filter(id => id !== elementId))\n \n // Record dismissal in storage\n const element = elements.find(e => e.id === elementId)\n if (element?.trigger?.frequency) {\n const key = `_engage_${elementId}`\n if (element.trigger.frequency.type === 'once-per-session') {\n sessionStorage.setItem(key, 'true')\n } else {\n localStorage.setItem(key, Date.now().toString())\n }\n }\n }, [elements])\n \n // Render active elements + chat widget\n // Use portal to document.body so widgets always land inside <body>,\n // even when SiteKitLayout wraps <body> (common in root layouts)\n if (typeof document === 'undefined') return null\n\n return ReactDOM.createPortal(\n <>\n {activeElements.map(elementId => {\n const element = elements.find(e => e.id === elementId)\n if (!element) return null\n\n return (\n <EngageElementRenderer\n key={element.id}\n element={element}\n onDismiss={() => handleDismiss(element.id)}\n zIndex={zIndex}\n apiUrl={propApiUrl}\n apiKey={propApiKey}\n />\n )\n })}\n\n {/* Chat Widget - deferred until idle; chunk downloads on first render */}\n {chatEnabled && chatReady && (\n <LazyChatWidget\n projectId={propProjectId ?? undefined}\n config={{\n position,\n offsetBottom,\n zIndex,\n buttonColor: '#2563eb', // Default blue-600 (AA on white), overridden by --sk-primary CSS var or API brand_primary\n }}\n />\n )}\n </>,\n document.body,\n )\n}\n\n// ============================================\n// Action Handler + Tracking\n// ============================================\n\nfunction trackEngageEvent(\n apiUrl: string,\n apiKey: string | undefined,\n endpoint: 'impression' | 'click',\n data: Record<string, unknown>\n) {\n if (!apiKey) return\n const visitorId = typeof localStorage !== 'undefined'\n ? localStorage.getItem('_sk_vid')\n : null\n sonorFetch(`${apiUrl.replace(/\\/$/, '')}/engage/widget/${endpoint}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ ...data, visitorId, pageUrl: window.location.href }),\n keepalive: true,\n }, { apiKey, retries: 0 }).catch(() => {})\n}\n\nfunction handleEngageAction(\n action: ActionConfig,\n _node: unknown,\n element: EngageElement,\n apiUrl: string,\n apiKey: string | undefined\n) {\n // Track click\n trackEngageEvent(apiUrl, apiKey, 'click', {\n elementId: element.id,\n action: action.action,\n })\n\n switch (action.action) {\n case 'navigate':\n if (action.url) window.location.href = action.url\n break\n case 'open-url':\n if (action.url) window.open(action.url, '_blank')\n break\n case 'submit-form':\n case 'submit_form':\n window.dispatchEvent(new CustomEvent('engage:submit-form', {\n detail: { formId: action.formId || action.url, elementId: element.id },\n }))\n break\n case 'track-conversion':\n window.dispatchEvent(new CustomEvent('engage:conversion', {\n detail: { action, elementId: element.id },\n }))\n break\n default:\n window.dispatchEvent(new CustomEvent('engage:action', {\n detail: { action, elementId: element.id },\n }))\n break\n }\n}\n\n// Helper components\nfunction EngageElementRenderer({\n element,\n onDismiss,\n zIndex,\n apiUrl,\n apiKey,\n}: {\n element: EngageElement\n onDismiss: () => void\n zIndex: number\n apiUrl: string\n apiKey: string | undefined\n}) {\n // Impression tracking via IntersectionObserver\n const containerRef = useRef<HTMLDivElement>(null)\n const impressionTrackedRef = useRef(false)\n\n useEffect(() => {\n const el = containerRef.current\n if (!el || impressionTrackedRef.current) return\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (entry.isIntersecting && !impressionTrackedRef.current) {\n impressionTrackedRef.current = true\n trackEngageEvent(apiUrl, apiKey, 'impression', { elementId: element.id })\n observer.disconnect()\n }\n },\n { threshold: 0.5 }\n )\n observer.observe(el)\n return () => observer.disconnect()\n }, [apiUrl, apiKey, element.id])\n\n const onAction = useCallback(\n (action: ActionConfig, node: unknown) => {\n handleEngageAction(action, node, element, apiUrl, apiKey)\n },\n [element, apiUrl, apiKey]\n )\n\n // If element has design_json from Engage Studio, use DesignRenderer\n if (element.design_json) {\n // Wrap in appropriate container based on element type\n if (element.type === 'popup') {\n return (\n <div\n ref={containerRef}\n data-engage-element={element.id}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex,\n }}\n onClick={onDismiss}\n >\n <div onClick={e => e.stopPropagation()}>\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n </div>\n )\n }\n\n if (element.type === 'bar') {\n return (\n <div\n ref={containerRef}\n data-engage-element={element.id}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n zIndex,\n }}\n >\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n )\n }\n\n if (element.type === 'nudge' || element.type === 'slide-in') {\n const position = element.config?.position || 'bottom-right'\n const positionStyles: Record<string, React.CSSProperties> = {\n 'bottom-right': { bottom: 20, right: 20 },\n 'bottom-left': { bottom: 20, left: 20 },\n 'top-right': { top: 20, right: 20 },\n 'top-left': { top: 20, left: 20 },\n }\n\n return (\n <div\n ref={containerRef}\n data-engage-element={element.id}\n style={{\n position: 'fixed',\n zIndex,\n ...positionStyles[position],\n }}\n >\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n )\n }\n\n // Default: render design_json directly\n return (\n <div ref={containerRef} data-engage-element={element.id}>\n <DesignRenderer\n design={element.design_json}\n onClose={onDismiss}\n onAction={onAction}\n />\n </div>\n )\n }\n\n // Legacy: Simple popup rendering for elements without design_json\n if (element.type === 'popup') {\n return (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0,0,0,0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex,\n }}\n onClick={onDismiss}\n >\n <div\n style={{\n backgroundColor: 'var(--sk-bg, #ffffff)',\n padding: 24,\n borderRadius: 8,\n maxWidth: 500,\n width: '90%',\n }}\n onClick={e => e.stopPropagation()}\n >\n <button\n onClick={onDismiss}\n style={{\n position: 'absolute',\n top: 8,\n right: 8,\n background: 'none',\n border: 'none',\n fontSize: 24,\n cursor: 'pointer',\n }}\n >\n ×\n </button>\n {element.config?.title && <h2>{element.config.title}</h2>}\n {element.config?.message && <p>{element.config.message}</p>}\n </div>\n </div>\n )\n }\n \n // Bar/banner rendering\n if (element.type === 'bar') {\n return (\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n backgroundColor: element.config?.backgroundColor || 'var(--sk-primary, #2563eb)',\n color: element.config?.textColor || 'var(--sk-bg, #ffffff)',\n padding: '12px 24px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 16,\n zIndex,\n }}\n >\n <span>{element.config?.message}</span>\n <button\n onClick={onDismiss}\n style={{\n background: 'none',\n border: 'none',\n color: 'inherit',\n fontSize: 20,\n cursor: 'pointer',\n }}\n >\n ×\n </button>\n </div>\n )\n }\n \n return null\n}\n\n// Utilities\nfunction matchPath(pathname: string, pattern: string): boolean {\n if (pattern.endsWith('*')) {\n return pathname.startsWith(pattern.slice(0, -1))\n }\n return pathname === pattern\n}\n\nfunction getDeviceType(): 'desktop' | 'mobile' | 'tablet' {\n if (typeof window === 'undefined') return 'desktop'\n const ua = navigator.userAgent\n if (/tablet|ipad|playbook|silk/i.test(ua)) return 'tablet'\n if (/mobile|iphone|ipod|android|blackberry|opera mini|iemobile/i.test(ua)) return 'mobile'\n return 'desktop'\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkUZKXOZHR_js = require('./chunk-UZKXOZHR.js');
4
- var chunkLF44SJPP_js = require('./chunk-LF44SJPP.js');
4
+ var chunkBGBP4UN4_js = require('./chunk-BGBP4UN4.js');
5
5
 
6
6
  // src/shared/publishCredential.ts
7
7
  function publishSiteCredential({
@@ -12,14 +12,14 @@ function publishSiteCredential({
12
12
  mapsBrowserKey
13
13
  }) {
14
14
  if (typeof window === "undefined") return;
15
- chunkLF44SJPP_js.configureSiteCredential({ credential: apiKey, apiUrl });
15
+ chunkBGBP4UN4_js.configureSiteCredential({ credential: apiKey, apiUrl });
16
16
  window.__SITE_KIT_API_URL__ = apiUrl;
17
- window.__SITE_KIT_API_KEY__ = chunkLF44SJPP_js.currentCredential(apiKey);
17
+ window.__SITE_KIT_API_KEY__ = chunkBGBP4UN4_js.currentCredential(apiKey);
18
18
  window.__SITE_KIT_DEBUG__ = debug;
19
19
  window.__SITE_KIT_SITE__ = site ?? chunkUZKXOZHR_js.resolveSiteHost();
20
20
  if (mapsBrowserKey) window.__GOOGLE_MAPS_API_KEY__ = mapsBrowserKey;
21
21
  }
22
22
 
23
23
  exports.publishSiteCredential = publishSiteCredential;
24
- //# sourceMappingURL=chunk-IDJY2JWU.js.map
25
- //# sourceMappingURL=chunk-IDJY2JWU.js.map
24
+ //# sourceMappingURL=chunk-AGEE4CGH.js.map
25
+ //# sourceMappingURL=chunk-AGEE4CGH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/publishCredential.ts"],"names":["configureSiteCredential","currentCredential","resolveSiteHost"],"mappings":";;;;;;AAkEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,MAAA;AAAA,EACA,MAAA,GAAS,sBAAA;AAAA,EACT,IAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR;AACF,CAAA,EAAuC;AACrC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAKnC,EAAAA,wCAAA,CAAwB,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,CAAA;AACrD,EAAC,OAAe,oBAAA,GAAuB,MAAA;AACvC,EAAC,MAAA,CAAe,oBAAA,GAAuBC,kCAAA,CAAkB,MAAM,CAAA;AAC/D,EAAC,OAAe,kBAAA,GAAqB,KAAA;AACrC,EAAC,MAAA,CAAe,iBAAA,GAAoB,IAAA,IAAQC,gCAAA,EAAgB;AAG7D,EAAA,IAAI,cAAA,EAAiB,MAAA,CAAe,uBAAA,GAA0B,cAAA;AAChE","file":"chunk-IDJY2JWU.js","sourcesContent":["/**\n * @sonordev/site-kit shared — Client credential + window-global publishing\n *\n * SINGLE SOURCE OF TRUTH for seeding the browser-side token manager and the\n * `window.__SITE_KIT_*` globals that every client module reads. Used by:\n *\n * - `SiteKitClientProviders` (core `SiteKitLayout`)\n * - `SiteKitCredential` (`@sonordev/site-kit/client`) — the public component\n * for layouts that are NOT core `SiteKitLayout`, e.g.\n * `@sonordev/agency-site-kit`'s `AgencySiteKitLayout`.\n *\n * Do not re-fork this. Before it existed, agency sites hand-rolled their own\n * \"set the globals on mount\" component (upforge's `UptradeSiteKitInit`), and\n * because those copies had no access to the token manager they published the\n * RAW `sonor_` key into the client bundle — the exact exposure the mint exists\n * to prevent. Any layout that puts a credential on `window` goes through here.\n *\n * Client-safe: no `server-only` guard, SSR-safe (every write is window-gated).\n * The minting half is server-only and lives in `../server/mint-site-token`.\n */\n// Leaf modules, NOT '../sites/contract' — see sites/normalize.ts. Importing the\n// full contract here shipped its JSON schema to every browser that loads a\n// credential-publishing entry.\nimport { resolveSiteHost } from '../sites/resolve'\nimport { configureSiteCredential, currentCredential } from './siteToken'\n\n/**\n * Re-exported so the client-side callers below and every existing importer keep\n * a single name for this. The implementation lives in `../sites/resolve` — the\n * ONE resolver shared by the browser (this file) and the build-time sitemap /\n * llms.txt path, so both tag the same host.\n */\nexport { resolveSiteHost }\n\nexport interface PublishSiteCredentialOptions {\n /**\n * The credential the layout minted server-side. In 3.2+ this is a short-lived\n * `st1.` token that `sonorFetch` refreshes transparently. A raw `sonor_` key\n * still works (2.x kit, or the mint-failed fallback) but should never be\n * routed here from a client component — it would ship the secret to the\n * browser.\n */\n apiKey?: string\n apiUrl?: string\n /** Pre-resolved sub-site host. Omit to resolve via `resolveSiteHost`. */\n site?: string\n debug?: boolean\n /**\n * Referrer-restricted Google Maps BROWSER key for client map components.\n * Resolved server-side by SiteKitLayout (NEXT_PUBLIC_GOOGLE_MAPS_API_KEY /\n * GOOGLE_MAPS_BROWSER_KEY) because maps/api.ts runs client-side, where a bare\n * process.env read is dead code unless the app's bundler happens to inline it.\n * Never route a server secret here.\n */\n mapsBrowserKey?: string\n}\n\n/**\n * Seed the token manager and publish the `window.__SITE_KIT_*` globals.\n *\n * Called during RENDER, not in an effect: client modules read these globals in\n * their own mount effects, and effects run child-first, so an effect-based\n * publish would land after the modules that need it.\n *\n * No-op on the server.\n */\nexport function publishSiteCredential({\n apiKey,\n apiUrl = 'https://api.sonor.io',\n site,\n debug = false,\n mapsBrowserKey,\n}: PublishSiteCredentialOptions): void {\n if (typeof window === 'undefined') return\n\n // Seed the client token manager. The window global is set to the freshest\n // token held — a prior page this session may already have refreshed past the\n // seed the layout injected. In raw-key mode this is a passthrough.\n configureSiteCredential({ credential: apiKey, apiUrl })\n ;(window as any).__SITE_KIT_API_URL__ = apiUrl\n ;(window as any).__SITE_KIT_API_KEY__ = currentCredential(apiKey)\n ;(window as any).__SITE_KIT_DEBUG__ = debug\n ;(window as any).__SITE_KIT_SITE__ = site ?? resolveSiteHost()\n // maps/api.ts falls back to this global when the Sonor platform hasn't\n // provisioned a browser key. Don't clobber a value another layout already set.\n if (mapsBrowserKey) (window as any).__GOOGLE_MAPS_API_KEY__ = mapsBrowserKey\n}\n"]}
1
+ {"version":3,"sources":["../src/shared/publishCredential.ts"],"names":["configureSiteCredential","currentCredential","resolveSiteHost"],"mappings":";;;;;;AAkEO,SAAS,qBAAA,CAAsB;AAAA,EACpC,MAAA;AAAA,EACA,MAAA,GAAS,sBAAA;AAAA,EACT,IAAA;AAAA,EACA,KAAA,GAAQ,KAAA;AAAA,EACR;AACF,CAAA,EAAuC;AACrC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAKnC,EAAAA,wCAAA,CAAwB,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,CAAA;AACrD,EAAC,OAAe,oBAAA,GAAuB,MAAA;AACvC,EAAC,MAAA,CAAe,oBAAA,GAAuBC,kCAAA,CAAkB,MAAM,CAAA;AAC/D,EAAC,OAAe,kBAAA,GAAqB,KAAA;AACrC,EAAC,MAAA,CAAe,iBAAA,GAAoB,IAAA,IAAQC,gCAAA,EAAgB;AAG7D,EAAA,IAAI,cAAA,EAAiB,MAAA,CAAe,uBAAA,GAA0B,cAAA;AAChE","file":"chunk-AGEE4CGH.js","sourcesContent":["/**\n * @sonordev/site-kit shared — Client credential + window-global publishing\n *\n * SINGLE SOURCE OF TRUTH for seeding the browser-side token manager and the\n * `window.__SITE_KIT_*` globals that every client module reads. Used by:\n *\n * - `SiteKitClientProviders` (core `SiteKitLayout`)\n * - `SiteKitCredential` (`@sonordev/site-kit/client`) — the public component\n * for layouts that are NOT core `SiteKitLayout`, e.g.\n * `@sonordev/agency-site-kit`'s `AgencySiteKitLayout`.\n *\n * Do not re-fork this. Before it existed, agency sites hand-rolled their own\n * \"set the globals on mount\" component (upforge's `UptradeSiteKitInit`), and\n * because those copies had no access to the token manager they published the\n * RAW `sonor_` key into the client bundle — the exact exposure the mint exists\n * to prevent. Any layout that puts a credential on `window` goes through here.\n *\n * Client-safe: no `server-only` guard, SSR-safe (every write is window-gated).\n * The minting half is server-only and lives in `../server/mint-site-token`.\n */\n// Leaf modules, NOT '../sites/contract' — see sites/normalize.ts. Importing the\n// full contract here shipped its JSON schema to every browser that loads a\n// credential-publishing entry.\nimport { resolveSiteHost } from '../sites/resolve'\nimport { configureSiteCredential, currentCredential } from './siteToken'\n\n/**\n * Re-exported so the client-side callers below and every existing importer keep\n * a single name for this. The implementation lives in `../sites/resolve` — the\n * ONE resolver shared by the browser (this file) and the build-time sitemap /\n * llms.txt path, so both tag the same host.\n */\nexport { resolveSiteHost }\n\nexport interface PublishSiteCredentialOptions {\n /**\n * The credential the layout minted server-side. In 3.2+ this is a short-lived\n * `st1.` token that `sonorFetch` refreshes transparently. A raw `sonor_` key\n * still works (2.x kit, or the mint-failed fallback) but should never be\n * routed here from a client component — it would ship the secret to the\n * browser.\n */\n apiKey?: string\n apiUrl?: string\n /** Pre-resolved sub-site host. Omit to resolve via `resolveSiteHost`. */\n site?: string\n debug?: boolean\n /**\n * Referrer-restricted Google Maps BROWSER key for client map components.\n * Resolved server-side by SiteKitLayout (NEXT_PUBLIC_GOOGLE_MAPS_API_KEY /\n * GOOGLE_MAPS_BROWSER_KEY) because maps/api.ts runs client-side, where a bare\n * process.env read is dead code unless the app's bundler happens to inline it.\n * Never route a server secret here.\n */\n mapsBrowserKey?: string\n}\n\n/**\n * Seed the token manager and publish the `window.__SITE_KIT_*` globals.\n *\n * Called during RENDER, not in an effect: client modules read these globals in\n * their own mount effects, and effects run child-first, so an effect-based\n * publish would land after the modules that need it.\n *\n * No-op on the server.\n */\nexport function publishSiteCredential({\n apiKey,\n apiUrl = 'https://api.sonor.io',\n site,\n debug = false,\n mapsBrowserKey,\n}: PublishSiteCredentialOptions): void {\n if (typeof window === 'undefined') return\n\n // Seed the client token manager. The window global is set to the freshest\n // token held — a prior page this session may already have refreshed past the\n // seed the layout injected. In raw-key mode this is a passthrough.\n configureSiteCredential({ credential: apiKey, apiUrl })\n ;(window as any).__SITE_KIT_API_URL__ = apiUrl\n ;(window as any).__SITE_KIT_API_KEY__ = currentCredential(apiKey)\n ;(window as any).__SITE_KIT_DEBUG__ = debug\n ;(window as any).__SITE_KIT_SITE__ = site ?? resolveSiteHost()\n // maps/api.ts falls back to this global when the Sonor platform hasn't\n // provisioned a browser key. Don't clobber a value another layout already set.\n if (mapsBrowserKey) (window as any).__GOOGLE_MAPS_API_KEY__ = mapsBrowserKey\n}\n"]}