@sonordev/site-kit 5.5.0 → 5.6.0

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 (277) hide show
  1. package/agent-manifest.json +1 -1
  2. package/dist/AnalyticsProvider-6PXC7UDP.js +32 -0
  3. package/dist/{AnalyticsProvider-WDDW3IJW.js.map → AnalyticsProvider-6PXC7UDP.js.map} +1 -1
  4. package/dist/AnalyticsProvider-FVQIYSLY.mjs +11 -0
  5. package/dist/{AnalyticsProvider-KFXAH4GR.mjs.map → AnalyticsProvider-FVQIYSLY.mjs.map} +1 -1
  6. package/dist/{BlogViewTracker-D4DIEP4Q.js → BlogViewTracker-S4HSRCW7.js} +6 -6
  7. package/dist/{BlogViewTracker-D4DIEP4Q.js.map → BlogViewTracker-S4HSRCW7.js.map} +1 -1
  8. package/dist/{BlogViewTracker-ZVEGGH3Y.mjs → BlogViewTracker-ZUGLBOVI.mjs} +5 -5
  9. package/dist/{BlogViewTracker-ZVEGGH3Y.mjs.map → BlogViewTracker-ZUGLBOVI.mjs.map} +1 -1
  10. package/dist/ChatWidget-2TQWCXWP.js +22 -0
  11. package/dist/{ChatWidget-2ZYPYIMQ.js.map → ChatWidget-2TQWCXWP.js.map} +1 -1
  12. package/dist/ChatWidget-DG52ZIE6.mjs +13 -0
  13. package/dist/{ChatWidget-FYCCLMQE.mjs.map → ChatWidget-DG52ZIE6.mjs.map} +1 -1
  14. package/dist/EngageWidget-2VUJADIU.mjs +12 -0
  15. package/dist/{EngageWidget-6HUZYOY7.mjs.map → EngageWidget-2VUJADIU.mjs.map} +1 -1
  16. package/dist/EngageWidget-Z7RC2INM.js +21 -0
  17. package/dist/{EngageWidget-MYQTBBW6.js.map → EngageWidget-Z7RC2INM.js.map} +1 -1
  18. package/dist/{FileField-OZZHWGPA.mjs → FileField-FSQ7W3A5.mjs} +5 -5
  19. package/dist/{FileField-OZZHWGPA.mjs.map → FileField-FSQ7W3A5.mjs.map} +1 -1
  20. package/dist/{FileField-JK2S24XU.js → FileField-UOQHL25J.js} +6 -6
  21. package/dist/{FileField-JK2S24XU.js.map → FileField-UOQHL25J.js.map} +1 -1
  22. package/dist/{FormSpotlight-XV42L72H.mjs → FormSpotlight-RHL5FWM2.mjs} +3 -3
  23. package/dist/{FormSpotlight-XV42L72H.mjs.map → FormSpotlight-RHL5FWM2.mjs.map} +1 -1
  24. package/dist/{FormSpotlight-5AXFQU5M.js → FormSpotlight-TED32NHP.js} +15 -15
  25. package/dist/{FormSpotlight-5AXFQU5M.js.map → FormSpotlight-TED32NHP.js.map} +1 -1
  26. package/dist/{FormStage-RUK675HV.mjs → FormStage-DINIRFOX.mjs} +3 -3
  27. package/dist/{FormStage-RUK675HV.mjs.map → FormStage-DINIRFOX.mjs.map} +1 -1
  28. package/dist/{FormStage-HATUHNRV.js → FormStage-PFEBKHGY.js} +13 -13
  29. package/dist/{FormStage-HATUHNRV.js.map → FormStage-PFEBKHGY.js.map} +1 -1
  30. package/dist/ManagedForm-43WLCUAK.js +23 -0
  31. package/dist/{ManagedForm-JWEXJEXK.js.map → ManagedForm-43WLCUAK.js.map} +1 -1
  32. package/dist/ManagedForm-545YAUFC.mjs +14 -0
  33. package/dist/{ManagedForm-OA3MNGXT.mjs.map → ManagedForm-545YAUFC.mjs.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-AAHH63KT.js → ManagedNewsletterForm-I3QN57HB.js} +8 -8
  35. package/dist/{ManagedNewsletterForm-AAHH63KT.js.map → ManagedNewsletterForm-I3QN57HB.js.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-HZKTNWLW.mjs → ManagedNewsletterForm-ZPY5RRKX.mjs} +7 -7
  37. package/dist/{ManagedNewsletterForm-HZKTNWLW.mjs.map → ManagedNewsletterForm-ZPY5RRKX.mjs.map} +1 -1
  38. package/dist/{SignalCore-X3GDGBZD.mjs → SignalCore-EEH5IM4U.mjs} +5 -5
  39. package/dist/{SignalCore-X3GDGBZD.mjs.map → SignalCore-EEH5IM4U.mjs.map} +1 -1
  40. package/dist/{SignalCore-YSNZYBKJ.js → SignalCore-M4AXIMV4.js} +11 -11
  41. package/dist/{SignalCore-YSNZYBKJ.js.map → SignalCore-M4AXIMV4.js.map} +1 -1
  42. package/dist/SitemapSync-46G7LVZS.mjs +9 -0
  43. package/dist/{SitemapSync-2PTDBH5E.mjs.map → SitemapSync-46G7LVZS.mjs.map} +1 -1
  44. package/dist/SitemapSync-XK4JKCS7.js +18 -0
  45. package/dist/{SitemapSync-3SFAI546.js.map → SitemapSync-XK4JKCS7.js.map} +1 -1
  46. package/dist/SitemapSync.d.ts +3 -2
  47. package/dist/SitemapSync.d.ts.map +1 -1
  48. package/dist/analytics/AnalyticsProvider.d.ts +3 -1
  49. package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
  50. package/dist/analytics/WebVitals.d.ts +3 -1
  51. package/dist/analytics/WebVitals.d.ts.map +1 -1
  52. package/dist/analytics/index.js +13 -13
  53. package/dist/analytics/index.mjs +5 -5
  54. package/dist/analytics/send-gate.d.ts +8 -37
  55. package/dist/analytics/send-gate.d.ts.map +1 -1
  56. package/dist/blog/index.js +20 -20
  57. package/dist/blog/index.mjs +3 -3
  58. package/dist/blog/server-ui.js +14 -14
  59. package/dist/blog/server-ui.mjs +2 -2
  60. package/dist/{chunk-RMMHWSPP.mjs → chunk-473WDGQZ.mjs} +3 -3
  61. package/dist/{chunk-RMMHWSPP.mjs.map → chunk-473WDGQZ.mjs.map} +1 -1
  62. package/dist/{chunk-FYVLQ3OU.js → chunk-53KMRZT7.js} +3 -3
  63. package/dist/{chunk-FYVLQ3OU.js.map → chunk-53KMRZT7.js.map} +1 -1
  64. package/dist/{chunk-S6FEC6UT.mjs → chunk-5KIEZHVK.mjs} +14 -17
  65. package/dist/chunk-5KIEZHVK.mjs.map +1 -0
  66. package/dist/{chunk-MCJF2KJ6.js → chunk-5KIO6FXE.js} +5 -5
  67. package/dist/{chunk-MCJF2KJ6.js.map → chunk-5KIO6FXE.js.map} +1 -1
  68. package/dist/chunk-5RNAUYWE.js +50 -0
  69. package/dist/chunk-5RNAUYWE.js.map +1 -0
  70. package/dist/{chunk-MU7IEPDG.mjs → chunk-5UFDHGFE.mjs} +3 -3
  71. package/dist/{chunk-MU7IEPDG.mjs.map → chunk-5UFDHGFE.mjs.map} +1 -1
  72. package/dist/{chunk-V6NOM7PJ.mjs → chunk-6OP5XSMM.mjs} +3 -3
  73. package/dist/{chunk-V6NOM7PJ.mjs.map → chunk-6OP5XSMM.mjs.map} +1 -1
  74. package/dist/{chunk-TALEV3IH.mjs → chunk-7AUDKXY5.mjs} +3 -3
  75. package/dist/{chunk-TALEV3IH.mjs.map → chunk-7AUDKXY5.mjs.map} +1 -1
  76. package/dist/{chunk-3B6CXGAK.mjs → chunk-7C7XO5HX.mjs} +3 -3
  77. package/dist/{chunk-3B6CXGAK.mjs.map → chunk-7C7XO5HX.mjs.map} +1 -1
  78. package/dist/chunk-A6UYV475.mjs +45 -0
  79. package/dist/chunk-A6UYV475.mjs.map +1 -0
  80. package/dist/{chunk-ZRQFG3L6.mjs → chunk-AHZR4VGY.mjs} +4 -4
  81. package/dist/{chunk-ZRQFG3L6.mjs.map → chunk-AHZR4VGY.mjs.map} +1 -1
  82. package/dist/{chunk-YYAFHIY7.js → chunk-AY7JBGYC.js} +14 -14
  83. package/dist/{chunk-YYAFHIY7.js.map → chunk-AY7JBGYC.js.map} +1 -1
  84. package/dist/{chunk-CT5REGAK.js → chunk-B64AZC6P.js} +14 -14
  85. package/dist/{chunk-CT5REGAK.js.map → chunk-B64AZC6P.js.map} +1 -1
  86. package/dist/{chunk-VAS3LH5W.js → chunk-B6O7D5U4.js} +55 -49
  87. package/dist/chunk-B6O7D5U4.js.map +1 -0
  88. package/dist/{chunk-A3F5GRNJ.js → chunk-BWSMUSDB.js} +8 -8
  89. package/dist/{chunk-A3F5GRNJ.js.map → chunk-BWSMUSDB.js.map} +1 -1
  90. package/dist/{chunk-2CMSWJWC.js → chunk-BZLIOT7Q.js} +18 -18
  91. package/dist/{chunk-2CMSWJWC.js.map → chunk-BZLIOT7Q.js.map} +1 -1
  92. package/dist/{chunk-DRLHQQBH.mjs → chunk-C2MSD2UM.mjs} +4 -4
  93. package/dist/{chunk-DRLHQQBH.mjs.map → chunk-C2MSD2UM.mjs.map} +1 -1
  94. package/dist/{chunk-YNC5D3FT.js → chunk-CQRLKNHQ.js} +12 -12
  95. package/dist/{chunk-YNC5D3FT.js.map → chunk-CQRLKNHQ.js.map} +1 -1
  96. package/dist/{chunk-RZUZMUTN.mjs → chunk-CQS5ZYI6.mjs} +21 -9
  97. package/dist/chunk-CQS5ZYI6.mjs.map +1 -0
  98. package/dist/{chunk-W5NVW23S.js → chunk-DHIWR7CG.js} +4 -4
  99. package/dist/{chunk-W5NVW23S.js.map → chunk-DHIWR7CG.js.map} +1 -1
  100. package/dist/chunk-DQUBETXH.mjs +6 -0
  101. package/dist/{chunk-WDBCXRTT.mjs.map → chunk-DQUBETXH.mjs.map} +1 -1
  102. package/dist/{chunk-TX2QQ7IX.mjs → chunk-GJ6NOLGC.mjs} +3 -3
  103. package/dist/{chunk-TX2QQ7IX.mjs.map → chunk-GJ6NOLGC.mjs.map} +1 -1
  104. package/dist/{chunk-R4MX6EOM.mjs → chunk-GPLCPMVD.mjs} +7 -7
  105. package/dist/{chunk-R4MX6EOM.mjs.map → chunk-GPLCPMVD.mjs.map} +1 -1
  106. package/dist/{chunk-2OU4KBUN.js → chunk-H3D3ZGOJ.js} +15 -15
  107. package/dist/{chunk-2OU4KBUN.js.map → chunk-H3D3ZGOJ.js.map} +1 -1
  108. package/dist/{chunk-UZL2QU2V.mjs → chunk-H44XZUOV.mjs} +4 -4
  109. package/dist/{chunk-UZL2QU2V.mjs.map → chunk-H44XZUOV.mjs.map} +1 -1
  110. package/dist/{chunk-OFSA7LUH.mjs → chunk-HIHAXEPD.mjs} +4 -4
  111. package/dist/{chunk-OFSA7LUH.mjs.map → chunk-HIHAXEPD.mjs.map} +1 -1
  112. package/dist/{chunk-DYULWKDC.mjs → chunk-IYCLN3XS.mjs} +14 -33
  113. package/dist/chunk-IYCLN3XS.mjs.map +1 -0
  114. package/dist/{chunk-BNOQXDPJ.js → chunk-JE5DWAE6.js} +4 -4
  115. package/dist/{chunk-BNOQXDPJ.js.map → chunk-JE5DWAE6.js.map} +1 -1
  116. package/dist/{chunk-VYHRAICF.mjs → chunk-JNABXCLY.mjs} +4 -4
  117. package/dist/{chunk-VYHRAICF.mjs.map → chunk-JNABXCLY.mjs.map} +1 -1
  118. package/dist/{chunk-4XGACM7D.mjs → chunk-K2V3ZW36.mjs} +3 -3
  119. package/dist/{chunk-4XGACM7D.mjs.map → chunk-K2V3ZW36.mjs.map} +1 -1
  120. package/dist/chunk-KSL3WA2I.js +8 -0
  121. package/dist/{chunk-SUZ3ZLB2.js.map → chunk-KSL3WA2I.js.map} +1 -1
  122. package/dist/{chunk-HX3BRMOX.js → chunk-KY6M76JW.js} +3 -3
  123. package/dist/{chunk-HX3BRMOX.js.map → chunk-KY6M76JW.js.map} +1 -1
  124. package/dist/{chunk-X2XFLYZ3.mjs → chunk-LCSYJXIO.mjs} +3 -3
  125. package/dist/{chunk-X2XFLYZ3.mjs.map → chunk-LCSYJXIO.mjs.map} +1 -1
  126. package/dist/{chunk-UNPEMSLK.js → chunk-N2PGTPWN.js} +24 -12
  127. package/dist/chunk-N2PGTPWN.js.map +1 -0
  128. package/dist/{chunk-7PPNXORV.mjs → chunk-OA7KKOAK.mjs} +25 -31
  129. package/dist/chunk-OA7KKOAK.mjs.map +1 -0
  130. package/dist/{chunk-QEGUI2Q2.js → chunk-OC7AO7XS.js} +15 -15
  131. package/dist/{chunk-QEGUI2Q2.js.map → chunk-OC7AO7XS.js.map} +1 -1
  132. package/dist/{chunk-5TGAUWNO.mjs → chunk-QNPVVWR7.mjs} +3 -3
  133. package/dist/{chunk-5TGAUWNO.mjs.map → chunk-QNPVVWR7.mjs.map} +1 -1
  134. package/dist/{chunk-MNYM2XU4.js → chunk-R3KTBKSW.js} +4 -4
  135. package/dist/{chunk-MNYM2XU4.js.map → chunk-R3KTBKSW.js.map} +1 -1
  136. package/dist/{chunk-WIZRCI6J.mjs → chunk-RIYAMYLV.mjs} +3 -3
  137. package/dist/{chunk-WIZRCI6J.mjs.map → chunk-RIYAMYLV.mjs.map} +1 -1
  138. package/dist/{chunk-SQVYLIIN.js → chunk-S4RC6VAQ.js} +16 -19
  139. package/dist/chunk-S4RC6VAQ.js.map +1 -0
  140. package/dist/{chunk-Z6S4MWSR.js → chunk-SYGGZZMU.js} +21 -17
  141. package/dist/chunk-SYGGZZMU.js.map +1 -0
  142. package/dist/{chunk-FF5N5D3D.js → chunk-T5VTQUNF.js} +8 -8
  143. package/dist/{chunk-FF5N5D3D.js.map → chunk-T5VTQUNF.js.map} +1 -1
  144. package/dist/{chunk-G5HUI4BO.mjs → chunk-USKIL6V6.mjs} +3 -3
  145. package/dist/{chunk-G5HUI4BO.mjs.map → chunk-USKIL6V6.mjs.map} +1 -1
  146. package/dist/{chunk-PIPLBBDH.js → chunk-UU47DGHE.js} +22 -41
  147. package/dist/chunk-UU47DGHE.js.map +1 -0
  148. package/dist/{chunk-XQYC4KMH.mjs → chunk-VHZ4LHQT.mjs} +48 -42
  149. package/dist/chunk-VHZ4LHQT.mjs.map +1 -0
  150. package/dist/{chunk-Q26VZNM2.js → chunk-X5TCH7VZ.js} +3 -3
  151. package/dist/{chunk-Q26VZNM2.js.map → chunk-X5TCH7VZ.js.map} +1 -1
  152. package/dist/{chunk-QFNSM77X.js → chunk-XK5AIWQG.js} +3 -3
  153. package/dist/{chunk-QFNSM77X.js.map → chunk-XK5AIWQG.js.map} +1 -1
  154. package/dist/{chunk-KAUUGRYB.js → chunk-XR32C47O.js} +26 -32
  155. package/dist/chunk-XR32C47O.js.map +1 -0
  156. package/dist/{chunk-HBI67P7Y.mjs → chunk-YCI36ZUS.mjs} +18 -14
  157. package/dist/chunk-YCI36ZUS.mjs.map +1 -0
  158. package/dist/{chunk-HFJQMIFM.js → chunk-YYN4YZYZ.js} +4 -4
  159. package/dist/{chunk-HFJQMIFM.js.map → chunk-YYN4YZYZ.js.map} +1 -1
  160. package/dist/cli/api/{uptrade.d.ts → sonor.d.ts} +3 -2
  161. package/dist/cli/api/sonor.d.ts.map +1 -0
  162. package/dist/cli/commands/config-regression.test.d.ts +2 -0
  163. package/dist/cli/commands/config-regression.test.d.ts.map +1 -0
  164. package/dist/cli/commands/faqs.d.ts.map +1 -1
  165. package/dist/cli/commands/images.d.ts.map +1 -1
  166. package/dist/cli/commands/locations.d.ts.map +1 -1
  167. package/dist/cli/commands/migrate.d.ts.map +1 -1
  168. package/dist/cli/commands/setup.d.ts.map +1 -1
  169. package/dist/cli/config.d.ts +31 -0
  170. package/dist/cli/config.d.ts.map +1 -0
  171. package/dist/cli/config.test.d.ts +2 -0
  172. package/dist/cli/config.test.d.ts.map +1 -0
  173. package/dist/cli/index.js +459 -470
  174. package/dist/cli/index.js.map +1 -1
  175. package/dist/cli/index.mjs +452 -463
  176. package/dist/cli/index.mjs.map +1 -1
  177. package/dist/cli/migrator/index.d.ts +1 -0
  178. package/dist/cli/migrator/index.d.ts.map +1 -1
  179. package/dist/cli/state.d.ts +7 -0
  180. package/dist/cli/state.d.ts.map +1 -0
  181. package/dist/cli/state.test.d.ts +2 -0
  182. package/dist/cli/state.test.d.ts.map +1 -0
  183. package/dist/client/index.js +4 -4
  184. package/dist/client/index.mjs +3 -3
  185. package/dist/commerce/index.js +57 -57
  186. package/dist/commerce/index.mjs +6 -6
  187. package/dist/engage/EngageWidget.d.ts +3 -2
  188. package/dist/engage/EngageWidget.d.ts.map +1 -1
  189. package/dist/engage/index.js +11 -10
  190. package/dist/engage/index.js.map +1 -1
  191. package/dist/engage/index.mjs +8 -7
  192. package/dist/engage/index.mjs.map +1 -1
  193. package/dist/fleet/FleetHeartbeat.d.ts +3 -2
  194. package/dist/fleet/FleetHeartbeat.d.ts.map +1 -1
  195. package/dist/fleet/heartbeat.d.ts +3 -2
  196. package/dist/fleet/heartbeat.d.ts.map +1 -1
  197. package/dist/fleet/heartbeat.test.d.ts +2 -0
  198. package/dist/fleet/heartbeat.test.d.ts.map +1 -0
  199. package/dist/fleet/index.js +9 -8
  200. package/dist/fleet/index.mjs +5 -4
  201. package/dist/forms/index.js +16 -16
  202. package/dist/forms/index.mjs +9 -9
  203. package/dist/forms/server.js +10 -10
  204. package/dist/forms/server.mjs +8 -8
  205. package/dist/forms/static.js +7 -7
  206. package/dist/forms/static.mjs +6 -6
  207. package/dist/images/index.js +11 -11
  208. package/dist/images/index.mjs +4 -4
  209. package/dist/index.js +64 -64
  210. package/dist/index.mjs +10 -10
  211. package/dist/layout/SiteKitClientProviders.d.ts.map +1 -1
  212. package/dist/layout/client.d.ts.map +1 -1
  213. package/dist/layout/client.js +9 -8
  214. package/dist/layout/client.mjs +8 -7
  215. package/dist/layout/index.js +11 -10
  216. package/dist/layout/index.js.map +1 -1
  217. package/dist/layout/index.mjs +9 -8
  218. package/dist/layout/index.mjs.map +1 -1
  219. package/dist/layout/types.d.ts +2 -0
  220. package/dist/layout/types.d.ts.map +1 -1
  221. package/dist/maps/index.js +5 -5
  222. package/dist/maps/index.mjs +3 -3
  223. package/dist/search/index.js +4 -4
  224. package/dist/search/index.mjs +3 -3
  225. package/dist/seo/client.js +6 -6
  226. package/dist/seo/client.mjs +5 -5
  227. package/dist/seo/index.js +6 -6
  228. package/dist/seo/index.mjs +5 -5
  229. package/dist/server/index.js +3 -3
  230. package/dist/server/index.mjs +2 -2
  231. package/dist/shared/reporting-gate.d.ts +43 -0
  232. package/dist/shared/reporting-gate.d.ts.map +1 -0
  233. package/dist/shared/version.d.ts +1 -1
  234. package/dist/signal/index.js +11 -11
  235. package/dist/signal/index.mjs +2 -2
  236. package/dist/sync/AddToCalendar.d.ts +19 -0
  237. package/dist/sync/AddToCalendar.d.ts.map +1 -0
  238. package/dist/sync/BookingWidget.d.ts.map +1 -1
  239. package/dist/sync/add-to-calendar.test.d.ts +2 -0
  240. package/dist/sync/add-to-calendar.test.d.ts.map +1 -0
  241. package/dist/sync/api-errors.test.d.ts +2 -0
  242. package/dist/sync/api-errors.test.d.ts.map +1 -0
  243. package/dist/sync/api.d.ts.map +1 -1
  244. package/dist/sync/index.js +17 -17
  245. package/dist/sync/index.mjs +4 -4
  246. package/dist/sync/types.d.ts +14 -0
  247. package/dist/sync/types.d.ts.map +1 -1
  248. package/package.json +4 -4
  249. package/dist/AnalyticsProvider-KFXAH4GR.mjs +0 -11
  250. package/dist/AnalyticsProvider-WDDW3IJW.js +0 -32
  251. package/dist/ChatWidget-2ZYPYIMQ.js +0 -22
  252. package/dist/ChatWidget-FYCCLMQE.mjs +0 -13
  253. package/dist/EngageWidget-6HUZYOY7.mjs +0 -11
  254. package/dist/EngageWidget-MYQTBBW6.js +0 -20
  255. package/dist/ManagedForm-JWEXJEXK.js +0 -23
  256. package/dist/ManagedForm-OA3MNGXT.mjs +0 -14
  257. package/dist/SitemapSync-2PTDBH5E.mjs +0 -9
  258. package/dist/SitemapSync-3SFAI546.js +0 -18
  259. package/dist/chunk-7PPNXORV.mjs.map +0 -1
  260. package/dist/chunk-DYULWKDC.mjs.map +0 -1
  261. package/dist/chunk-HBI67P7Y.mjs.map +0 -1
  262. package/dist/chunk-KAUUGRYB.js.map +0 -1
  263. package/dist/chunk-NVSWTDWU.mjs +0 -25
  264. package/dist/chunk-NVSWTDWU.mjs.map +0 -1
  265. package/dist/chunk-OL2QBWAU.js +0 -29
  266. package/dist/chunk-OL2QBWAU.js.map +0 -1
  267. package/dist/chunk-PIPLBBDH.js.map +0 -1
  268. package/dist/chunk-RZUZMUTN.mjs.map +0 -1
  269. package/dist/chunk-S6FEC6UT.mjs.map +0 -1
  270. package/dist/chunk-SQVYLIIN.js.map +0 -1
  271. package/dist/chunk-SUZ3ZLB2.js +0 -8
  272. package/dist/chunk-UNPEMSLK.js.map +0 -1
  273. package/dist/chunk-VAS3LH5W.js.map +0 -1
  274. package/dist/chunk-WDBCXRTT.mjs +0 -6
  275. package/dist/chunk-XQYC4KMH.mjs.map +0 -1
  276. package/dist/chunk-Z6S4MWSR.js.map +0 -1
  277. package/dist/cli/api/uptrade.d.ts.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,24 +1,24 @@
1
1
  export { LandingPage } from './chunk-QZF5NTXQ.mjs';
2
2
  export { landingPageMetadata } from './chunk-AAZNH3MA.mjs';
3
3
  export { clearRedirectCache, fetchRedirectRules, generateNextRedirects, handleManagedRedirects } from './chunk-AJQI3WTN.mjs';
4
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from './chunk-MU7IEPDG.mjs';
4
+ export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from './chunk-5UFDHGFE.mjs';
5
5
  import './chunk-CU6OGBKK.mjs';
6
6
  export { TestimonialSection } from './chunk-VIGRGMWR.mjs';
7
7
  export { fetchReviewStats, fetchReviews } from './chunk-MU7DTEUF.mjs';
8
- export { CalendarView, CheckoutForm, EventCalendar, EventCheckout, EventEmbed, EventModal, EventTile, OfferingCard, OfferingList, ProductEmbed, RegistrationForm, UpcomingEvents, createCheckoutSession, fetchNextEvent, fetchOffering, fetchOfferings, fetchProducts, fetchServices, fetchUpcomingEvents, formatDate, formatDateTime, formatPrice, getOfferingUrl, registerForEvent, useEventModal } from './chunk-ZRQFG3L6.mjs';
9
- export { BookingWidget, createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate as formatBookingDate, formatTime as formatBookingTime, formatDuration, releaseSlotHold } from './chunk-XQYC4KMH.mjs';
8
+ export { CalendarView, CheckoutForm, EventCalendar, EventCheckout, EventEmbed, EventModal, EventTile, OfferingCard, OfferingList, ProductEmbed, RegistrationForm, UpcomingEvents, createCheckoutSession, fetchNextEvent, fetchOffering, fetchOfferings, fetchProducts, fetchServices, fetchUpcomingEvents, formatDate, formatDateTime, formatPrice, getOfferingUrl, registerForEvent, useEventModal } from './chunk-AHZR4VGY.mjs';
9
+ export { BookingWidget, createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate as formatBookingDate, formatTime as formatBookingTime, formatDuration, releaseSlotHold } from './chunk-VHZ4LHQT.mjs';
10
10
  import './chunk-B22WSN4L.mjs';
11
- export { ExperimentConversion, SignalExperiment, useExperimentVariant } from './chunk-3B6CXGAK.mjs';
12
- export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from './chunk-G5HUI4BO.mjs';
11
+ export { ExperimentConversion, SignalExperiment, useExperimentVariant } from './chunk-7C7XO5HX.mjs';
12
+ export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from './chunk-USKIL6V6.mjs';
13
13
  import './chunk-64BOVMXG.mjs';
14
- import './chunk-DYULWKDC.mjs';
14
+ import './chunk-IYCLN3XS.mjs';
15
15
  import './chunk-SHLWA6JY.mjs';
16
- import './chunk-NVSWTDWU.mjs';
17
16
  import './chunk-ZZQAGCSI.mjs';
18
17
  import './chunk-6EDVCUAG.mjs';
19
- import { sonorFetch } from './chunk-OFSA7LUH.mjs';
20
- import './chunk-4XGACM7D.mjs';
21
- import './chunk-WDBCXRTT.mjs';
18
+ import './chunk-A6UYV475.mjs';
19
+ import { sonorFetch } from './chunk-HIHAXEPD.mjs';
20
+ import './chunk-K2V3ZW36.mjs';
21
+ import './chunk-DQUBETXH.mjs';
22
22
  import './chunk-BEXTDHO4.mjs';
23
23
  import { useState, useEffect } from 'react';
24
24
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1 +1 @@
1
- {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBA2J7B"}
1
+ {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBAsK7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBA2J7B"}
1
+ {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBAsK7B"}
@@ -1,26 +1,27 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkUNPEMSLK_js = require('../chunk-UNPEMSLK.js');
5
- require('../chunk-MCJF2KJ6.js');
6
- require('../chunk-Z6S4MWSR.js');
4
+ var chunkN2PGTPWN_js = require('../chunk-N2PGTPWN.js');
5
+ require('../chunk-5KIO6FXE.js');
6
+ require('../chunk-SYGGZZMU.js');
7
7
  require('../chunk-Q2NBD54V.js');
8
8
  require('../chunk-OZ3FU4BT.js');
9
9
  require('../chunk-SWIKKSKL.js');
10
10
  require('../chunk-HGNSJXWT.js');
11
- require('../chunk-QFNSM77X.js');
11
+ require('../chunk-XK5AIWQG.js');
12
12
  require('../chunk-RC4WWQXR.js');
13
13
  require('../chunk-VJMPIRSD.js');
14
- require('../chunk-QEGUI2Q2.js');
15
- require('../chunk-HFJQMIFM.js');
16
- require('../chunk-SUZ3ZLB2.js');
14
+ require('../chunk-5RNAUYWE.js');
15
+ require('../chunk-OC7AO7XS.js');
16
+ require('../chunk-YYN4YZYZ.js');
17
+ require('../chunk-KSL3WA2I.js');
17
18
  require('../chunk-SNAQBZPT.js');
18
19
 
19
20
 
20
21
 
21
22
  Object.defineProperty(exports, "SiteKitClientProviders", {
22
23
  enumerable: true,
23
- get: function () { return chunkUNPEMSLK_js.SiteKitClientProviders; }
24
+ get: function () { return chunkN2PGTPWN_js.SiteKitClientProviders; }
24
25
  });
25
26
  //# sourceMappingURL=client.js.map
26
27
  //# sourceMappingURL=client.js.map
@@ -1,17 +1,18 @@
1
1
  'use client';
2
- export { SiteKitClientProviders } from '../chunk-RZUZMUTN.mjs';
3
- import '../chunk-5TGAUWNO.mjs';
4
- import '../chunk-HBI67P7Y.mjs';
2
+ export { SiteKitClientProviders } from '../chunk-CQS5ZYI6.mjs';
3
+ import '../chunk-QNPVVWR7.mjs';
4
+ import '../chunk-YCI36ZUS.mjs';
5
5
  import '../chunk-ZPLN537Q.mjs';
6
6
  import '../chunk-GZJE23Y5.mjs';
7
7
  import '../chunk-ZN4HBK5C.mjs';
8
8
  import '../chunk-ZVBLXXNJ.mjs';
9
- import '../chunk-G5HUI4BO.mjs';
9
+ import '../chunk-USKIL6V6.mjs';
10
10
  import '../chunk-ZZQAGCSI.mjs';
11
11
  import '../chunk-6EDVCUAG.mjs';
12
- import '../chunk-OFSA7LUH.mjs';
13
- import '../chunk-4XGACM7D.mjs';
14
- import '../chunk-WDBCXRTT.mjs';
12
+ import '../chunk-A6UYV475.mjs';
13
+ import '../chunk-HIHAXEPD.mjs';
14
+ import '../chunk-K2V3ZW36.mjs';
15
+ import '../chunk-DQUBETXH.mjs';
15
16
  import '../chunk-BEXTDHO4.mjs';
16
17
  //# sourceMappingURL=client.mjs.map
17
18
  //# sourceMappingURL=client.mjs.map
@@ -1,22 +1,23 @@
1
1
  'use strict';
2
2
 
3
- var chunkUNPEMSLK_js = require('../chunk-UNPEMSLK.js');
4
- require('../chunk-MCJF2KJ6.js');
5
- require('../chunk-Z6S4MWSR.js');
3
+ var chunkN2PGTPWN_js = require('../chunk-N2PGTPWN.js');
4
+ require('../chunk-5KIO6FXE.js');
5
+ require('../chunk-SYGGZZMU.js');
6
6
  require('../chunk-Q2NBD54V.js');
7
7
  require('../chunk-OZ3FU4BT.js');
8
8
  require('../chunk-SWIKKSKL.js');
9
9
  require('../chunk-HGNSJXWT.js');
10
10
  var chunkGCPPXUAI_js = require('../chunk-GCPPXUAI.js');
11
- require('../chunk-QFNSM77X.js');
12
- var chunkMNYM2XU4_js = require('../chunk-MNYM2XU4.js');
11
+ require('../chunk-XK5AIWQG.js');
12
+ var chunkR3KTBKSW_js = require('../chunk-R3KTBKSW.js');
13
13
  var chunkDV2LJYFD_js = require('../chunk-DV2LJYFD.js');
14
14
  var chunkO5GHP7UO_js = require('../chunk-O5GHP7UO.js');
15
15
  require('../chunk-RC4WWQXR.js');
16
16
  require('../chunk-VJMPIRSD.js');
17
- require('../chunk-QEGUI2Q2.js');
18
- require('../chunk-HFJQMIFM.js');
19
- require('../chunk-SUZ3ZLB2.js');
17
+ require('../chunk-5RNAUYWE.js');
18
+ require('../chunk-OC7AO7XS.js');
19
+ require('../chunk-YYN4YZYZ.js');
20
+ require('../chunk-KSL3WA2I.js');
20
21
  require('../chunk-SNAQBZPT.js');
21
22
  var jsxRuntime = require('react/jsx-runtime');
22
23
 
@@ -70,7 +71,7 @@ async function SiteKitLayout({
70
71
  );
71
72
  }
72
73
  const apiOrigin = chunkO5GHP7UO_js.resolveApiOrigin(resolvedApiUrl);
73
- const clientCredential = await chunkMNYM2XU4_js.resolveClientCredential(resolvedApiKey, resolvedApiUrl);
74
+ const clientCredential = await chunkR3KTBKSW_js.resolveClientCredential(resolvedApiKey, resolvedApiUrl);
74
75
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
75
76
  /* @__PURE__ */ jsxRuntime.jsx("link", { rel: "preconnect", href: apiOrigin, crossOrigin: "anonymous" }),
76
77
  /* @__PURE__ */ jsxRuntime.jsx("link", { rel: "dns-prefetch", href: apiOrigin }),
@@ -78,7 +79,7 @@ async function SiteKitLayout({
78
79
  managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkDV2LJYFD_js.ManagedScripts, { position: "head" }),
79
80
  speculation && /* @__PURE__ */ jsxRuntime.jsx(SpeculationRules, { ...typeof speculation === "object" ? speculation : {} }),
80
81
  /* @__PURE__ */ jsxRuntime.jsxs(
81
- chunkUNPEMSLK_js.SiteKitClientProviders,
82
+ chunkN2PGTPWN_js.SiteKitClientProviders,
82
83
  {
83
84
  apiKey: clientCredential,
84
85
  apiUrl: resolvedApiUrl,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/layout/SpeculationRules.tsx","../../src/layout/SiteKitLayout.tsx"],"names":["jsx","resolveApiOrigin","resolveClientCredential","jsxs","Fragment","ManagedFavicon","ManagedScripts","SiteKitClientProviders"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SpeculationRules — declarative near-instant navigation for static sites.\n *\n * Emits a `<script type=\"speculationrules\">` telling supporting browsers\n * (Chromium 121+) to prerender same-origin links as the user shows intent\n * (moderate eagerness = hover/mousedown). Non-supporting browsers ignore the\n * tag entirely; there is no JS, no polyfill, no runtime cost — pure\n * progressive enhancement, ideal for the force-static fleet.\n *\n * Server component: renders during SSR, ships as static HTML.\n *\n * Excluded by default: URLs with a query string (often personalized) and\n * obvious non-page paths. Keep exclusions tight — prerendering a page that\n * sets cookies or fires analytics on load double-fires them only if the\n * analytics module ignores prerendering; site-kit analytics defers to\n * post-activation, and Chrome delays most side effects until activation.\n */\n\ninterface SpeculationRulesProps {\n /**\n * 'prerender' (default) renders the next page fully in the background;\n * 'prefetch' only fetches the document. Prefetch is the conservative\n * fallback if a site sees issues with prerender.\n */\n mode?: 'prerender' | 'prefetch'\n /** Additional URL patterns to exclude (speculation rules URL pattern syntax). */\n exclude?: string[]\n}\n\nexport function SpeculationRules({ mode = 'prerender', exclude = [] }: SpeculationRulesProps) {\n const rules = {\n [mode]: [\n {\n source: 'document' as const,\n where: {\n and: [\n { href_matches: '/*' },\n { not: { href_matches: '/*\\\\?*' } },\n { not: { href_matches: '/api/*' } },\n ...exclude.map(pattern => ({ not: { href_matches: pattern } })),\n ],\n },\n eagerness: 'moderate' as const,\n },\n ],\n }\n\n return (\n <script\n type=\"speculationrules\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(rules) }}\n />\n )\n}\n","/**\n * @sonordev/site-kit/layout — SiteKitLayout\n *\n * The master layout component. A single RSC that auto-composes every\n * site-kit feature your layout needs:\n *\n * Server-side (RSC):\n * - ManagedFavicon (link tags from Portal logo)\n * - ManagedScripts position=\"head\" (tracking pixels, analytics tags)\n * - ManagedScripts position=\"body-end\"\n *\n * Client-side (island):\n * - AnalyticsProvider (page views, scroll depth, heatmap, web vitals)\n * - EngageWidget (popups, nudges, chat)\n * - SignalBridge (A/B experiments, behavior tracking)\n * - SitemapSync (keeps Portal seo_pages in sync)\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * import { SiteKitLayout } from '@sonordev/site-kit/layout'\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html lang=\"en\">\n * <body>\n * <SiteKitLayout>\n * <Header />\n * <main>{children}</main>\n * <Footer />\n * </SiteKitLayout>\n * </body>\n * </html>\n * )\n * }\n * ```\n *\n * @example Opt out of specific features:\n * ```tsx\n * <SiteKitLayout engage={false} signal={false}>\n * {children}\n * </SiteKitLayout>\n * ```\n */\n\nimport * as React from 'react'\nimport { ManagedFavicon } from '../images/ManagedFavicon'\nimport { ManagedScripts } from '../seo/ManagedScripts'\nimport { resolveApiOrigin } from '../server/server-fetch'\nimport { resolveClientCredential } from '../server/mint-site-token'\nimport { SiteKitClientProviders } from './SiteKitClientProviders'\nimport { SpeculationRules } from './SpeculationRules'\nimport type { AnalyticsConfig, EngageConfig, SignalConfig } from './types'\n\nexport interface SiteKitLayoutProps {\n children: React.ReactNode\n\n /** Portal API key. Defaults to SONOR_API_KEY env var. */\n apiKey?: string\n /** Portal API URL. Defaults to env or https://api.sonor.io */\n apiUrl?: string\n /** Project ID (for Engage chat room routing). Auto-resolved if not provided. */\n projectId?: string\n\n /** Analytics tracking. true (default) | false | config object */\n analytics?: boolean | AnalyticsConfig\n /** Engage widgets (popups, chat). true (default) | false | config object */\n engage?: boolean | EngageConfig\n /** Signal AI (experiments, behavior). false (default) | true | config object */\n signal?: boolean | SignalConfig\n /**\n * Runtime SitemapSync from the visitor's browser. **Default: false.**\n *\n * Sitemap registration is a build-time and server-side job. Build-time\n * `createSitemap` is canonical, and sonor-api's nightly reconciler fetches\n * each host's /sitemap.xml itself, so nothing here needs a visitor.\n *\n * This defaulted to true, and because its throttle lives in sessionStorage\n * and its content hash in localStorage, every first-time visitor, incognito\n * tab and crawler missed both guards and re-POSTed the entire sitemap:\n * upforge.io took ~140 full syncs in a day, queencityriverboats.com ~76.\n * That coupled sitemap traffic to VISITOR COUNT rather than to content\n * changes — exactly backwards — and made every reader pay for platform\n * bookkeeping in bandwidth, XML parsing and an API round-trip.\n *\n * Set true only to re-enable the legacy browser fallback for a site whose\n * build-time registration cannot be made to work.\n */\n sitemapSync?: boolean\n /**\n * Fleet heartbeat — reports this site's kit version + active modules to Sonor\n * once per session so the platform can track version drift. Default: true.\n * Deferred like Analytics; never in the hydration path.\n */\n fleet?: boolean\n /**\n * Defer client modules (Analytics, Engage, SitemapSync) until window load +\n * idle or the first user interaction, keeping their JS and mount work out of\n * the critical hydration path. Default: true. Pass false to restore legacy\n * eager mounting. SignalBridge is never deferred.\n */\n defer?: boolean\n /** ManagedFavicon in <head>. Default: true */\n favicon?: boolean\n /** ManagedScripts (head + body-end). Default: true */\n managedScripts?: boolean\n\n /** Debug mode — logs to console. Default: false */\n debug?: boolean\n /**\n * When true, append a screen-reader-only link to `/llms.txt` after main content.\n * Default false — prefer `buildAiDiscoveryHeaders()` for discovery.\n */\n showLlmsTxtFooterLink?: boolean\n /**\n * Emit a Speculation Rules script prerendering same-origin links on intent\n * (Chromium 121+; other browsers ignore it). Zero JS, static-safe. Default\n * false — opt in per site, or pass { mode: 'prefetch' } for the\n * conservative variant.\n */\n speculation?: boolean | { mode?: 'prerender' | 'prefetch'; exclude?: string[] }\n}\n\nexport async function SiteKitLayout({\n children,\n apiKey,\n apiUrl,\n projectId,\n analytics = true,\n engage = true,\n signal = false,\n sitemapSync = false,\n fleet = true,\n defer = true,\n favicon = true,\n managedScripts = true,\n debug = false,\n showLlmsTxtFooterLink = false,\n speculation = false,\n}: SiteKitLayoutProps) {\n // Resolve API config from env (server-side, safe)\n const resolvedApiKey =\n apiKey ??\n process.env.SONOR_API_KEY ??\n ''\n const resolvedApiUrl =\n apiUrl ??\n process.env.SONOR_API_URL ??\n 'https://api.sonor.io'\n\n if (!resolvedApiKey && debug) {\n console.warn(\n '[SiteKitLayout] No API key found. Set SONOR_API_KEY.',\n )\n }\n\n const apiOrigin = resolveApiOrigin(resolvedApiUrl)\n\n // Mint a short-lived client token so the raw key never reaches the browser.\n // Falls back to the raw key if minting is unavailable (older API / transient\n // outage) — the build never breaks. The client refreshes the token as needed.\n const clientCredential = await resolveClientCredential(resolvedApiKey, resolvedApiUrl)\n\n return (\n <>\n <link rel=\"preconnect\" href={apiOrigin} crossOrigin=\"anonymous\" />\n <link rel=\"dns-prefetch\" href={apiOrigin} />\n {/* Server-rendered head components */}\n {favicon && <ManagedFavicon apiKey={resolvedApiKey} apiUrl={resolvedApiUrl} />}\n {managedScripts && <ManagedScripts position=\"head\" />}\n {speculation && (\n <SpeculationRules {...(typeof speculation === 'object' ? speculation : {})} />\n )}\n\n {/* Client-side providers island — receives the minted token (or raw-key\n fallback), never the raw key when minting succeeds. */}\n <SiteKitClientProviders\n apiKey={clientCredential}\n apiUrl={resolvedApiUrl}\n mapsBrowserKey={\n process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY ||\n process.env.GOOGLE_MAPS_BROWSER_KEY ||\n undefined\n }\n projectId={projectId}\n analytics={analytics}\n engage={engage}\n signal={signal}\n sitemapSync={sitemapSync}\n fleet={fleet}\n defer={defer}\n debug={debug}\n >\n {children}\n {showLlmsTxtFooterLink ? (\n <footer className=\"sr-only\" aria-hidden=\"true\">\n <a href=\"/llms.txt\">llms.txt</a>\n </footer>\n ) : null}\n </SiteKitClientProviders>\n\n {/* Server-rendered body-end scripts */}\n {managedScripts && <ManagedScripts position=\"body-end\" />}\n </>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/layout/SpeculationRules.tsx","../../src/layout/SiteKitLayout.tsx"],"names":["jsx","resolveApiOrigin","resolveClientCredential","jsxs","Fragment","ManagedFavicon","ManagedScripts","SiteKitClientProviders"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SpeculationRules — declarative near-instant navigation for static sites.\n *\n * Emits a `<script type=\"speculationrules\">` telling supporting browsers\n * (Chromium 121+) to prerender same-origin links as the user shows intent\n * (moderate eagerness = hover/mousedown). Non-supporting browsers ignore the\n * tag entirely; there is no JS, no polyfill, no runtime cost — pure\n * progressive enhancement, ideal for the force-static fleet.\n *\n * Server component: renders during SSR, ships as static HTML.\n *\n * Excluded by default: URLs with a query string (often personalized) and\n * obvious non-page paths. Keep exclusions tight — prerendering a page that\n * sets cookies or fires analytics on load double-fires them only if the\n * analytics module ignores prerendering; site-kit analytics defers to\n * post-activation, and Chrome delays most side effects until activation.\n */\n\ninterface SpeculationRulesProps {\n /**\n * 'prerender' (default) renders the next page fully in the background;\n * 'prefetch' only fetches the document. Prefetch is the conservative\n * fallback if a site sees issues with prerender.\n */\n mode?: 'prerender' | 'prefetch'\n /** Additional URL patterns to exclude (speculation rules URL pattern syntax). */\n exclude?: string[]\n}\n\nexport function SpeculationRules({ mode = 'prerender', exclude = [] }: SpeculationRulesProps) {\n const rules = {\n [mode]: [\n {\n source: 'document' as const,\n where: {\n and: [\n { href_matches: '/*' },\n { not: { href_matches: '/*\\\\?*' } },\n { not: { href_matches: '/api/*' } },\n ...exclude.map(pattern => ({ not: { href_matches: pattern } })),\n ],\n },\n eagerness: 'moderate' as const,\n },\n ],\n }\n\n return (\n <script\n type=\"speculationrules\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(rules) }}\n />\n )\n}\n","/**\n * @sonordev/site-kit/layout — SiteKitLayout\n *\n * The master layout component. A single RSC that auto-composes every\n * site-kit feature your layout needs:\n *\n * Server-side (RSC):\n * - ManagedFavicon (link tags from Portal logo)\n * - ManagedScripts position=\"head\" (tracking pixels, analytics tags)\n * - ManagedScripts position=\"body-end\"\n *\n * Client-side (island):\n * - AnalyticsProvider (page views, scroll depth, heatmap, web vitals)\n * - EngageWidget (popups, nudges, chat)\n * - SignalBridge (A/B experiments, behavior tracking)\n * - SitemapSync (keeps Portal seo_pages in sync)\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * import { SiteKitLayout } from '@sonordev/site-kit/layout'\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html lang=\"en\">\n * <body>\n * <SiteKitLayout>\n * <Header />\n * <main>{children}</main>\n * <Footer />\n * </SiteKitLayout>\n * </body>\n * </html>\n * )\n * }\n * ```\n *\n * @example Opt out of specific features:\n * ```tsx\n * <SiteKitLayout engage={false} signal={false}>\n * {children}\n * </SiteKitLayout>\n * ```\n */\n\nimport * as React from 'react'\nimport { ManagedFavicon } from '../images/ManagedFavicon'\nimport { ManagedScripts } from '../seo/ManagedScripts'\nimport { resolveApiOrigin } from '../server/server-fetch'\nimport { resolveClientCredential } from '../server/mint-site-token'\nimport { SiteKitClientProviders } from './SiteKitClientProviders'\nimport { SpeculationRules } from './SpeculationRules'\nimport type { AnalyticsConfig, EngageConfig, SignalConfig } from './types'\n\nexport interface SiteKitLayoutProps {\n children: React.ReactNode\n\n /** Portal API key. Defaults to SONOR_API_KEY env var. */\n apiKey?: string\n /** Portal API URL. Defaults to env or https://api.sonor.io */\n apiUrl?: string\n /** Project ID (for Engage chat room routing). Auto-resolved if not provided. */\n projectId?: string\n\n /** Analytics tracking. true (default) | false | config object */\n analytics?: boolean | AnalyticsConfig\n /** Engage widgets (popups, chat). true (default) | false | config object */\n engage?: boolean | EngageConfig\n /** Signal AI (experiments, behavior). false (default) | true | config object */\n signal?: boolean | SignalConfig\n /**\n * Runtime SitemapSync from the visitor's browser. **Default: false.**\n *\n * Sitemap registration is a build-time and server-side job. Build-time\n * `createSitemap` is canonical, and sonor-api's nightly reconciler fetches\n * each host's /sitemap.xml itself, so nothing here needs a visitor.\n *\n * This defaulted to true, and because its throttle lives in sessionStorage\n * and its content hash in localStorage, every first-time visitor, incognito\n * tab and crawler missed both guards and re-POSTed the entire sitemap:\n * upforge.io took ~140 full syncs in a day, queencityriverboats.com ~76.\n * That coupled sitemap traffic to VISITOR COUNT rather than to content\n * changes — exactly backwards — and made every reader pay for platform\n * bookkeeping in bandwidth, XML parsing and an API round-trip.\n *\n * Set true only to re-enable the legacy browser fallback for a site whose\n * build-time registration cannot be made to work.\n */\n sitemapSync?: boolean\n /**\n * Fleet heartbeat — reports this site's kit version + active modules to Sonor\n * once per session so the platform can track version drift. Default: true.\n * Deferred like Analytics; never in the hydration path.\n */\n fleet?: boolean\n /**\n * Defer client modules (Analytics, Engage, SitemapSync) until window load +\n * idle or the first user interaction, keeping their JS and mount work out of\n * the critical hydration path. Default: true. Pass false to restore legacy\n * eager mounting. SignalBridge is never deferred.\n */\n defer?: boolean\n /** ManagedFavicon in <head>. Default: true */\n favicon?: boolean\n /** ManagedScripts (head + body-end). Default: true */\n managedScripts?: boolean\n\n /** Debug mode — logs to console. Default: false */\n debug?: boolean\n /**\n * When true, append a screen-reader-only link to `/llms.txt` after main content.\n * Default false — prefer `buildAiDiscoveryHeaders()` for discovery.\n */\n showLlmsTxtFooterLink?: boolean\n /**\n * Emit a Speculation Rules script prerendering same-origin links on intent\n * (Chromium 121+; other browsers ignore it). Zero JS, static-safe. Default\n * false — opt in per site, or pass { mode: 'prefetch' } for the\n * conservative variant.\n */\n speculation?: boolean | { mode?: 'prerender' | 'prefetch'; exclude?: string[] }\n}\n\nexport async function SiteKitLayout({\n children,\n apiKey,\n apiUrl,\n projectId,\n analytics = true,\n engage = true,\n signal = false,\n sitemapSync = false,\n fleet = true,\n defer = true,\n favicon = true,\n managedScripts = true,\n debug = false,\n showLlmsTxtFooterLink = false,\n speculation = false,\n}: SiteKitLayoutProps) {\n // Resolve API config from env (server-side, safe)\n const resolvedApiKey =\n apiKey ??\n process.env.SONOR_API_KEY ??\n ''\n const resolvedApiUrl =\n apiUrl ??\n process.env.SONOR_API_URL ??\n 'https://api.sonor.io'\n\n if (!resolvedApiKey && debug) {\n console.warn(\n '[SiteKitLayout] No API key found. Set SONOR_API_KEY.',\n )\n }\n\n const apiOrigin = resolveApiOrigin(resolvedApiUrl)\n\n // Mint a short-lived client token so the raw key never reaches the browser.\n // Falls back to the raw key if minting is unavailable (older API / transient\n // outage) — the build never breaks. The client refreshes the token as needed.\n const clientCredential = await resolveClientCredential(resolvedApiKey, resolvedApiUrl)\n\n return (\n <>\n <link rel=\"preconnect\" href={apiOrigin} crossOrigin=\"anonymous\" />\n <link rel=\"dns-prefetch\" href={apiOrigin} />\n {/* Server-rendered head components */}\n {favicon && <ManagedFavicon apiKey={resolvedApiKey} apiUrl={resolvedApiUrl} />}\n {managedScripts && <ManagedScripts position=\"head\" />}\n {speculation && (\n <SpeculationRules {...(typeof speculation === 'object' ? speculation : {})} />\n )}\n\n {/* Client-side providers island — receives the minted token (or raw-key\n fallback), never the raw key when minting succeeds. */}\n <SiteKitClientProviders\n apiKey={clientCredential}\n apiUrl={resolvedApiUrl}\n mapsBrowserKey={\n process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY ||\n process.env.GOOGLE_MAPS_BROWSER_KEY ||\n undefined\n }\n projectId={projectId}\n analytics={analytics}\n engage={engage}\n signal={signal}\n sitemapSync={sitemapSync}\n fleet={fleet}\n defer={defer}\n debug={debug}\n >\n {children}\n {showLlmsTxtFooterLink ? (\n <footer className=\"sr-only\" aria-hidden=\"true\">\n <a href=\"/llms.txt\">llms.txt</a>\n </footer>\n ) : null}\n </SiteKitClientProviders>\n\n {/* Server-rendered body-end scripts */}\n {managedScripts && <ManagedScripts position=\"body-end\" />}\n </>\n )\n}\n"]}
@@ -1,20 +1,21 @@
1
- import { SiteKitClientProviders } from '../chunk-RZUZMUTN.mjs';
2
- import '../chunk-5TGAUWNO.mjs';
3
- import '../chunk-HBI67P7Y.mjs';
1
+ import { SiteKitClientProviders } from '../chunk-CQS5ZYI6.mjs';
2
+ import '../chunk-QNPVVWR7.mjs';
3
+ import '../chunk-YCI36ZUS.mjs';
4
4
  import '../chunk-ZPLN537Q.mjs';
5
5
  import '../chunk-GZJE23Y5.mjs';
6
6
  import '../chunk-ZN4HBK5C.mjs';
7
7
  import '../chunk-ZVBLXXNJ.mjs';
8
8
  import { ManagedFavicon } from '../chunk-CU6OGBKK.mjs';
9
- import '../chunk-G5HUI4BO.mjs';
10
- import { resolveClientCredential } from '../chunk-WIZRCI6J.mjs';
9
+ import '../chunk-USKIL6V6.mjs';
10
+ import { resolveClientCredential } from '../chunk-RIYAMYLV.mjs';
11
11
  import { ManagedScripts } from '../chunk-6PJTLBRR.mjs';
12
12
  import { resolveApiOrigin } from '../chunk-6XNEGG5B.mjs';
13
13
  import '../chunk-ZZQAGCSI.mjs';
14
14
  import '../chunk-6EDVCUAG.mjs';
15
- import '../chunk-OFSA7LUH.mjs';
16
- import '../chunk-4XGACM7D.mjs';
17
- import '../chunk-WDBCXRTT.mjs';
15
+ import '../chunk-A6UYV475.mjs';
16
+ import '../chunk-HIHAXEPD.mjs';
17
+ import '../chunk-K2V3ZW36.mjs';
18
+ import '../chunk-DQUBETXH.mjs';
18
19
  import '../chunk-BEXTDHO4.mjs';
19
20
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
20
21
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/layout/SpeculationRules.tsx","../../src/layout/SiteKitLayout.tsx"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * SpeculationRules — declarative near-instant navigation for static sites.\n *\n * Emits a `<script type=\"speculationrules\">` telling supporting browsers\n * (Chromium 121+) to prerender same-origin links as the user shows intent\n * (moderate eagerness = hover/mousedown). Non-supporting browsers ignore the\n * tag entirely; there is no JS, no polyfill, no runtime cost — pure\n * progressive enhancement, ideal for the force-static fleet.\n *\n * Server component: renders during SSR, ships as static HTML.\n *\n * Excluded by default: URLs with a query string (often personalized) and\n * obvious non-page paths. Keep exclusions tight — prerendering a page that\n * sets cookies or fires analytics on load double-fires them only if the\n * analytics module ignores prerendering; site-kit analytics defers to\n * post-activation, and Chrome delays most side effects until activation.\n */\n\ninterface SpeculationRulesProps {\n /**\n * 'prerender' (default) renders the next page fully in the background;\n * 'prefetch' only fetches the document. Prefetch is the conservative\n * fallback if a site sees issues with prerender.\n */\n mode?: 'prerender' | 'prefetch'\n /** Additional URL patterns to exclude (speculation rules URL pattern syntax). */\n exclude?: string[]\n}\n\nexport function SpeculationRules({ mode = 'prerender', exclude = [] }: SpeculationRulesProps) {\n const rules = {\n [mode]: [\n {\n source: 'document' as const,\n where: {\n and: [\n { href_matches: '/*' },\n { not: { href_matches: '/*\\\\?*' } },\n { not: { href_matches: '/api/*' } },\n ...exclude.map(pattern => ({ not: { href_matches: pattern } })),\n ],\n },\n eagerness: 'moderate' as const,\n },\n ],\n }\n\n return (\n <script\n type=\"speculationrules\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(rules) }}\n />\n )\n}\n","/**\n * @sonordev/site-kit/layout — SiteKitLayout\n *\n * The master layout component. A single RSC that auto-composes every\n * site-kit feature your layout needs:\n *\n * Server-side (RSC):\n * - ManagedFavicon (link tags from Portal logo)\n * - ManagedScripts position=\"head\" (tracking pixels, analytics tags)\n * - ManagedScripts position=\"body-end\"\n *\n * Client-side (island):\n * - AnalyticsProvider (page views, scroll depth, heatmap, web vitals)\n * - EngageWidget (popups, nudges, chat)\n * - SignalBridge (A/B experiments, behavior tracking)\n * - SitemapSync (keeps Portal seo_pages in sync)\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * import { SiteKitLayout } from '@sonordev/site-kit/layout'\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html lang=\"en\">\n * <body>\n * <SiteKitLayout>\n * <Header />\n * <main>{children}</main>\n * <Footer />\n * </SiteKitLayout>\n * </body>\n * </html>\n * )\n * }\n * ```\n *\n * @example Opt out of specific features:\n * ```tsx\n * <SiteKitLayout engage={false} signal={false}>\n * {children}\n * </SiteKitLayout>\n * ```\n */\n\nimport * as React from 'react'\nimport { ManagedFavicon } from '../images/ManagedFavicon'\nimport { ManagedScripts } from '../seo/ManagedScripts'\nimport { resolveApiOrigin } from '../server/server-fetch'\nimport { resolveClientCredential } from '../server/mint-site-token'\nimport { SiteKitClientProviders } from './SiteKitClientProviders'\nimport { SpeculationRules } from './SpeculationRules'\nimport type { AnalyticsConfig, EngageConfig, SignalConfig } from './types'\n\nexport interface SiteKitLayoutProps {\n children: React.ReactNode\n\n /** Portal API key. Defaults to SONOR_API_KEY env var. */\n apiKey?: string\n /** Portal API URL. Defaults to env or https://api.sonor.io */\n apiUrl?: string\n /** Project ID (for Engage chat room routing). Auto-resolved if not provided. */\n projectId?: string\n\n /** Analytics tracking. true (default) | false | config object */\n analytics?: boolean | AnalyticsConfig\n /** Engage widgets (popups, chat). true (default) | false | config object */\n engage?: boolean | EngageConfig\n /** Signal AI (experiments, behavior). false (default) | true | config object */\n signal?: boolean | SignalConfig\n /**\n * Runtime SitemapSync from the visitor's browser. **Default: false.**\n *\n * Sitemap registration is a build-time and server-side job. Build-time\n * `createSitemap` is canonical, and sonor-api's nightly reconciler fetches\n * each host's /sitemap.xml itself, so nothing here needs a visitor.\n *\n * This defaulted to true, and because its throttle lives in sessionStorage\n * and its content hash in localStorage, every first-time visitor, incognito\n * tab and crawler missed both guards and re-POSTed the entire sitemap:\n * upforge.io took ~140 full syncs in a day, queencityriverboats.com ~76.\n * That coupled sitemap traffic to VISITOR COUNT rather than to content\n * changes — exactly backwards — and made every reader pay for platform\n * bookkeeping in bandwidth, XML parsing and an API round-trip.\n *\n * Set true only to re-enable the legacy browser fallback for a site whose\n * build-time registration cannot be made to work.\n */\n sitemapSync?: boolean\n /**\n * Fleet heartbeat — reports this site's kit version + active modules to Sonor\n * once per session so the platform can track version drift. Default: true.\n * Deferred like Analytics; never in the hydration path.\n */\n fleet?: boolean\n /**\n * Defer client modules (Analytics, Engage, SitemapSync) until window load +\n * idle or the first user interaction, keeping their JS and mount work out of\n * the critical hydration path. Default: true. Pass false to restore legacy\n * eager mounting. SignalBridge is never deferred.\n */\n defer?: boolean\n /** ManagedFavicon in <head>. Default: true */\n favicon?: boolean\n /** ManagedScripts (head + body-end). Default: true */\n managedScripts?: boolean\n\n /** Debug mode — logs to console. Default: false */\n debug?: boolean\n /**\n * When true, append a screen-reader-only link to `/llms.txt` after main content.\n * Default false — prefer `buildAiDiscoveryHeaders()` for discovery.\n */\n showLlmsTxtFooterLink?: boolean\n /**\n * Emit a Speculation Rules script prerendering same-origin links on intent\n * (Chromium 121+; other browsers ignore it). Zero JS, static-safe. Default\n * false — opt in per site, or pass { mode: 'prefetch' } for the\n * conservative variant.\n */\n speculation?: boolean | { mode?: 'prerender' | 'prefetch'; exclude?: string[] }\n}\n\nexport async function SiteKitLayout({\n children,\n apiKey,\n apiUrl,\n projectId,\n analytics = true,\n engage = true,\n signal = false,\n sitemapSync = false,\n fleet = true,\n defer = true,\n favicon = true,\n managedScripts = true,\n debug = false,\n showLlmsTxtFooterLink = false,\n speculation = false,\n}: SiteKitLayoutProps) {\n // Resolve API config from env (server-side, safe)\n const resolvedApiKey =\n apiKey ??\n process.env.SONOR_API_KEY ??\n ''\n const resolvedApiUrl =\n apiUrl ??\n process.env.SONOR_API_URL ??\n 'https://api.sonor.io'\n\n if (!resolvedApiKey && debug) {\n console.warn(\n '[SiteKitLayout] No API key found. Set SONOR_API_KEY.',\n )\n }\n\n const apiOrigin = resolveApiOrigin(resolvedApiUrl)\n\n // Mint a short-lived client token so the raw key never reaches the browser.\n // Falls back to the raw key if minting is unavailable (older API / transient\n // outage) — the build never breaks. The client refreshes the token as needed.\n const clientCredential = await resolveClientCredential(resolvedApiKey, resolvedApiUrl)\n\n return (\n <>\n <link rel=\"preconnect\" href={apiOrigin} crossOrigin=\"anonymous\" />\n <link rel=\"dns-prefetch\" href={apiOrigin} />\n {/* Server-rendered head components */}\n {favicon && <ManagedFavicon apiKey={resolvedApiKey} apiUrl={resolvedApiUrl} />}\n {managedScripts && <ManagedScripts position=\"head\" />}\n {speculation && (\n <SpeculationRules {...(typeof speculation === 'object' ? speculation : {})} />\n )}\n\n {/* Client-side providers island — receives the minted token (or raw-key\n fallback), never the raw key when minting succeeds. */}\n <SiteKitClientProviders\n apiKey={clientCredential}\n apiUrl={resolvedApiUrl}\n mapsBrowserKey={\n process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY ||\n process.env.GOOGLE_MAPS_BROWSER_KEY ||\n undefined\n }\n projectId={projectId}\n analytics={analytics}\n engage={engage}\n signal={signal}\n sitemapSync={sitemapSync}\n fleet={fleet}\n defer={defer}\n debug={debug}\n >\n {children}\n {showLlmsTxtFooterLink ? (\n <footer className=\"sr-only\" aria-hidden=\"true\">\n <a href=\"/llms.txt\">llms.txt</a>\n </footer>\n ) : null}\n </SiteKitClientProviders>\n\n {/* Server-rendered body-end scripts */}\n {managedScripts && <ManagedScripts position=\"body-end\" />}\n </>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/layout/SpeculationRules.tsx","../../src/layout/SiteKitLayout.tsx"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * SpeculationRules — declarative near-instant navigation for static sites.\n *\n * Emits a `<script type=\"speculationrules\">` telling supporting browsers\n * (Chromium 121+) to prerender same-origin links as the user shows intent\n * (moderate eagerness = hover/mousedown). Non-supporting browsers ignore the\n * tag entirely; there is no JS, no polyfill, no runtime cost — pure\n * progressive enhancement, ideal for the force-static fleet.\n *\n * Server component: renders during SSR, ships as static HTML.\n *\n * Excluded by default: URLs with a query string (often personalized) and\n * obvious non-page paths. Keep exclusions tight — prerendering a page that\n * sets cookies or fires analytics on load double-fires them only if the\n * analytics module ignores prerendering; site-kit analytics defers to\n * post-activation, and Chrome delays most side effects until activation.\n */\n\ninterface SpeculationRulesProps {\n /**\n * 'prerender' (default) renders the next page fully in the background;\n * 'prefetch' only fetches the document. Prefetch is the conservative\n * fallback if a site sees issues with prerender.\n */\n mode?: 'prerender' | 'prefetch'\n /** Additional URL patterns to exclude (speculation rules URL pattern syntax). */\n exclude?: string[]\n}\n\nexport function SpeculationRules({ mode = 'prerender', exclude = [] }: SpeculationRulesProps) {\n const rules = {\n [mode]: [\n {\n source: 'document' as const,\n where: {\n and: [\n { href_matches: '/*' },\n { not: { href_matches: '/*\\\\?*' } },\n { not: { href_matches: '/api/*' } },\n ...exclude.map(pattern => ({ not: { href_matches: pattern } })),\n ],\n },\n eagerness: 'moderate' as const,\n },\n ],\n }\n\n return (\n <script\n type=\"speculationrules\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(rules) }}\n />\n )\n}\n","/**\n * @sonordev/site-kit/layout — SiteKitLayout\n *\n * The master layout component. A single RSC that auto-composes every\n * site-kit feature your layout needs:\n *\n * Server-side (RSC):\n * - ManagedFavicon (link tags from Portal logo)\n * - ManagedScripts position=\"head\" (tracking pixels, analytics tags)\n * - ManagedScripts position=\"body-end\"\n *\n * Client-side (island):\n * - AnalyticsProvider (page views, scroll depth, heatmap, web vitals)\n * - EngageWidget (popups, nudges, chat)\n * - SignalBridge (A/B experiments, behavior tracking)\n * - SitemapSync (keeps Portal seo_pages in sync)\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * import { SiteKitLayout } from '@sonordev/site-kit/layout'\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html lang=\"en\">\n * <body>\n * <SiteKitLayout>\n * <Header />\n * <main>{children}</main>\n * <Footer />\n * </SiteKitLayout>\n * </body>\n * </html>\n * )\n * }\n * ```\n *\n * @example Opt out of specific features:\n * ```tsx\n * <SiteKitLayout engage={false} signal={false}>\n * {children}\n * </SiteKitLayout>\n * ```\n */\n\nimport * as React from 'react'\nimport { ManagedFavicon } from '../images/ManagedFavicon'\nimport { ManagedScripts } from '../seo/ManagedScripts'\nimport { resolveApiOrigin } from '../server/server-fetch'\nimport { resolveClientCredential } from '../server/mint-site-token'\nimport { SiteKitClientProviders } from './SiteKitClientProviders'\nimport { SpeculationRules } from './SpeculationRules'\nimport type { AnalyticsConfig, EngageConfig, SignalConfig } from './types'\n\nexport interface SiteKitLayoutProps {\n children: React.ReactNode\n\n /** Portal API key. Defaults to SONOR_API_KEY env var. */\n apiKey?: string\n /** Portal API URL. Defaults to env or https://api.sonor.io */\n apiUrl?: string\n /** Project ID (for Engage chat room routing). Auto-resolved if not provided. */\n projectId?: string\n\n /** Analytics tracking. true (default) | false | config object */\n analytics?: boolean | AnalyticsConfig\n /** Engage widgets (popups, chat). true (default) | false | config object */\n engage?: boolean | EngageConfig\n /** Signal AI (experiments, behavior). false (default) | true | config object */\n signal?: boolean | SignalConfig\n /**\n * Runtime SitemapSync from the visitor's browser. **Default: false.**\n *\n * Sitemap registration is a build-time and server-side job. Build-time\n * `createSitemap` is canonical, and sonor-api's nightly reconciler fetches\n * each host's /sitemap.xml itself, so nothing here needs a visitor.\n *\n * This defaulted to true, and because its throttle lives in sessionStorage\n * and its content hash in localStorage, every first-time visitor, incognito\n * tab and crawler missed both guards and re-POSTed the entire sitemap:\n * upforge.io took ~140 full syncs in a day, queencityriverboats.com ~76.\n * That coupled sitemap traffic to VISITOR COUNT rather than to content\n * changes — exactly backwards — and made every reader pay for platform\n * bookkeeping in bandwidth, XML parsing and an API round-trip.\n *\n * Set true only to re-enable the legacy browser fallback for a site whose\n * build-time registration cannot be made to work.\n */\n sitemapSync?: boolean\n /**\n * Fleet heartbeat — reports this site's kit version + active modules to Sonor\n * once per session so the platform can track version drift. Default: true.\n * Deferred like Analytics; never in the hydration path.\n */\n fleet?: boolean\n /**\n * Defer client modules (Analytics, Engage, SitemapSync) until window load +\n * idle or the first user interaction, keeping their JS and mount work out of\n * the critical hydration path. Default: true. Pass false to restore legacy\n * eager mounting. SignalBridge is never deferred.\n */\n defer?: boolean\n /** ManagedFavicon in <head>. Default: true */\n favicon?: boolean\n /** ManagedScripts (head + body-end). Default: true */\n managedScripts?: boolean\n\n /** Debug mode — logs to console. Default: false */\n debug?: boolean\n /**\n * When true, append a screen-reader-only link to `/llms.txt` after main content.\n * Default false — prefer `buildAiDiscoveryHeaders()` for discovery.\n */\n showLlmsTxtFooterLink?: boolean\n /**\n * Emit a Speculation Rules script prerendering same-origin links on intent\n * (Chromium 121+; other browsers ignore it). Zero JS, static-safe. Default\n * false — opt in per site, or pass { mode: 'prefetch' } for the\n * conservative variant.\n */\n speculation?: boolean | { mode?: 'prerender' | 'prefetch'; exclude?: string[] }\n}\n\nexport async function SiteKitLayout({\n children,\n apiKey,\n apiUrl,\n projectId,\n analytics = true,\n engage = true,\n signal = false,\n sitemapSync = false,\n fleet = true,\n defer = true,\n favicon = true,\n managedScripts = true,\n debug = false,\n showLlmsTxtFooterLink = false,\n speculation = false,\n}: SiteKitLayoutProps) {\n // Resolve API config from env (server-side, safe)\n const resolvedApiKey =\n apiKey ??\n process.env.SONOR_API_KEY ??\n ''\n const resolvedApiUrl =\n apiUrl ??\n process.env.SONOR_API_URL ??\n 'https://api.sonor.io'\n\n if (!resolvedApiKey && debug) {\n console.warn(\n '[SiteKitLayout] No API key found. Set SONOR_API_KEY.',\n )\n }\n\n const apiOrigin = resolveApiOrigin(resolvedApiUrl)\n\n // Mint a short-lived client token so the raw key never reaches the browser.\n // Falls back to the raw key if minting is unavailable (older API / transient\n // outage) — the build never breaks. The client refreshes the token as needed.\n const clientCredential = await resolveClientCredential(resolvedApiKey, resolvedApiUrl)\n\n return (\n <>\n <link rel=\"preconnect\" href={apiOrigin} crossOrigin=\"anonymous\" />\n <link rel=\"dns-prefetch\" href={apiOrigin} />\n {/* Server-rendered head components */}\n {favicon && <ManagedFavicon apiKey={resolvedApiKey} apiUrl={resolvedApiUrl} />}\n {managedScripts && <ManagedScripts position=\"head\" />}\n {speculation && (\n <SpeculationRules {...(typeof speculation === 'object' ? speculation : {})} />\n )}\n\n {/* Client-side providers island — receives the minted token (or raw-key\n fallback), never the raw key when minting succeeds. */}\n <SiteKitClientProviders\n apiKey={clientCredential}\n apiUrl={resolvedApiUrl}\n mapsBrowserKey={\n process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY ||\n process.env.GOOGLE_MAPS_BROWSER_KEY ||\n undefined\n }\n projectId={projectId}\n analytics={analytics}\n engage={engage}\n signal={signal}\n sitemapSync={sitemapSync}\n fleet={fleet}\n defer={defer}\n debug={debug}\n >\n {children}\n {showLlmsTxtFooterLink ? (\n <footer className=\"sr-only\" aria-hidden=\"true\">\n <a href=\"/llms.txt\">llms.txt</a>\n </footer>\n ) : null}\n </SiteKitClientProviders>\n\n {/* Server-rendered body-end scripts */}\n {managedScripts && <ManagedScripts position=\"body-end\" />}\n </>\n )\n}\n"]}
@@ -36,6 +36,8 @@ export interface AnalyticsConfig {
36
36
  * IS the product and its traffic is genuinely yours.
37
37
  */
38
38
  allowInFrame?: boolean;
39
+ /** Report from localhost/loopback browser hosts. Default false. */
40
+ allowLocalhost?: boolean;
39
41
  }
40
42
  /**
41
43
  * Launcher placement (`position`, `offsetBottom`, `zIndex`) comes from
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAE5D,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,qBAAqB;IACzD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAE5D,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,qBAAqB;IACzD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B"}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkQEGUI2Q2_js = require('../chunk-QEGUI2Q2.js');
5
- require('../chunk-HFJQMIFM.js');
6
- require('../chunk-SUZ3ZLB2.js');
4
+ var chunkOC7AO7XS_js = require('../chunk-OC7AO7XS.js');
5
+ require('../chunk-YYN4YZYZ.js');
6
+ require('../chunk-KSL3WA2I.js');
7
7
  require('../chunk-SNAQBZPT.js');
8
8
  var react = require('react');
9
9
  var reactGoogleMaps = require('@vis.gl/react-google-maps');
@@ -141,7 +141,7 @@ async function fetchMapsConfig() {
141
141
  const { apiUrl, apiKey } = getApiConfig();
142
142
  if (apiKey) {
143
143
  try {
144
- const res = await chunkQEGUI2Q2_js.sonorFetch(
144
+ const res = await chunkOC7AO7XS_js.sonorFetch(
145
145
  `${apiUrl}/api/public/maps/config`,
146
146
  { headers: { "Content-Type": "application/json" } },
147
147
  { apiKey }
@@ -181,7 +181,7 @@ async function fetchNearbyPlaces(params) {
181
181
  });
182
182
  if (params.radius) searchParams.set("radius", String(params.radius));
183
183
  if (params.limit) searchParams.set("limit", String(params.limit));
184
- const res = await chunkQEGUI2Q2_js.sonorFetch(
184
+ const res = await chunkOC7AO7XS_js.sonorFetch(
185
185
  `${apiUrl}/api/public/maps/nearby-places?${searchParams}`,
186
186
  { headers: { "Content-Type": "application/json" } },
187
187
  { apiKey }
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { sonorFetch } from '../chunk-OFSA7LUH.mjs';
3
- import '../chunk-4XGACM7D.mjs';
4
- import '../chunk-WDBCXRTT.mjs';
2
+ import { sonorFetch } from '../chunk-HIHAXEPD.mjs';
3
+ import '../chunk-K2V3ZW36.mjs';
4
+ import '../chunk-DQUBETXH.mjs';
5
5
  import '../chunk-BEXTDHO4.mjs';
6
6
  import { useState, useCallback, useEffect } from 'react';
7
7
  import { APIProvider, Map as Map$1, AdvancedMarker, Pin, InfoWindow } from '@vis.gl/react-google-maps';
@@ -2,9 +2,9 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkG2WC3CXW_js = require('../chunk-G2WC3CXW.js');
5
- var chunkQEGUI2Q2_js = require('../chunk-QEGUI2Q2.js');
6
- require('../chunk-HFJQMIFM.js');
7
- require('../chunk-SUZ3ZLB2.js');
5
+ var chunkOC7AO7XS_js = require('../chunk-OC7AO7XS.js');
6
+ require('../chunk-YYN4YZYZ.js');
7
+ require('../chunk-KSL3WA2I.js');
8
8
  require('../chunk-SNAQBZPT.js');
9
9
  var react = require('react');
10
10
  var jsxRuntime = require('react/jsx-runtime');
@@ -39,7 +39,7 @@ function useSiteSearch(options = {}) {
39
39
  const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
40
40
  const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
41
41
  const resolvedSite = site ?? (typeof window !== "undefined" ? window.__SITE_KIT_SITE__ : void 0);
42
- const res = await chunkQEGUI2Q2_js.sonorFetch(
42
+ const res = await chunkOC7AO7XS_js.sonorFetch(
43
43
  `${apiUrl}${chunkG2WC3CXW_js.SEARCH_ENDPOINT}`,
44
44
  {
45
45
  method: "POST",
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
3
3
  export { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
4
- import { sonorFetch } from '../chunk-OFSA7LUH.mjs';
5
- import '../chunk-4XGACM7D.mjs';
6
- import '../chunk-WDBCXRTT.mjs';
4
+ import { sonorFetch } from '../chunk-HIHAXEPD.mjs';
5
+ import '../chunk-K2V3ZW36.mjs';
6
+ import '../chunk-DQUBETXH.mjs';
7
7
  import '../chunk-BEXTDHO4.mjs';
8
8
  import { useState, useRef, useCallback, useEffect } from 'react';
9
9
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,19 +1,19 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkKAUUGRYB_js = require('../chunk-KAUUGRYB.js');
4
+ var chunkXR32C47O_js = require('../chunk-XR32C47O.js');
5
5
  require('../chunk-JEOKDUPQ.js');
6
- require('../chunk-OL2QBWAU.js');
7
- require('../chunk-QEGUI2Q2.js');
8
- require('../chunk-HFJQMIFM.js');
9
- require('../chunk-SUZ3ZLB2.js');
6
+ require('../chunk-5RNAUYWE.js');
7
+ require('../chunk-OC7AO7XS.js');
8
+ require('../chunk-YYN4YZYZ.js');
9
+ require('../chunk-KSL3WA2I.js');
10
10
  require('../chunk-SNAQBZPT.js');
11
11
 
12
12
 
13
13
 
14
14
  Object.defineProperty(exports, "SitemapSync", {
15
15
  enumerable: true,
16
- get: function () { return chunkKAUUGRYB_js.SitemapSync; }
16
+ get: function () { return chunkXR32C47O_js.SitemapSync; }
17
17
  });
18
18
  //# sourceMappingURL=client.js.map
19
19
  //# sourceMappingURL=client.js.map
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { SitemapSync } from '../chunk-7PPNXORV.mjs';
2
+ export { SitemapSync } from '../chunk-OA7KKOAK.mjs';
3
3
  import '../chunk-QJU6HBSK.mjs';
4
- import '../chunk-NVSWTDWU.mjs';
5
- import '../chunk-OFSA7LUH.mjs';
6
- import '../chunk-4XGACM7D.mjs';
7
- import '../chunk-WDBCXRTT.mjs';
4
+ import '../chunk-A6UYV475.mjs';
5
+ import '../chunk-HIHAXEPD.mjs';
6
+ import '../chunk-K2V3ZW36.mjs';
7
+ import '../chunk-DQUBETXH.mjs';
8
8
  import '../chunk-BEXTDHO4.mjs';
9
9
  //# sourceMappingURL=client.mjs.map
10
10
  //# sourceMappingURL=client.mjs.map
package/dist/seo/index.js CHANGED
@@ -3,15 +3,15 @@
3
3
  var chunkDV2LJYFD_js = require('../chunk-DV2LJYFD.js');
4
4
  var chunkH6AU3WKF_js = require('../chunk-H6AU3WKF.js');
5
5
  var chunkJ7QI3GDX_js = require('../chunk-J7QI3GDX.js');
6
- var chunkKAUUGRYB_js = require('../chunk-KAUUGRYB.js');
6
+ var chunkXR32C47O_js = require('../chunk-XR32C47O.js');
7
7
  var chunkKPKQKFT4_js = require('../chunk-KPKQKFT4.js');
8
8
  var chunkJNRHTZL4_js = require('../chunk-JNRHTZL4.js');
9
9
  require('../chunk-O5GHP7UO.js');
10
10
  require('../chunk-JEOKDUPQ.js');
11
- require('../chunk-OL2QBWAU.js');
12
- require('../chunk-QEGUI2Q2.js');
13
- require('../chunk-HFJQMIFM.js');
14
- require('../chunk-SUZ3ZLB2.js');
11
+ require('../chunk-5RNAUYWE.js');
12
+ require('../chunk-OC7AO7XS.js');
13
+ require('../chunk-YYN4YZYZ.js');
14
+ require('../chunk-KSL3WA2I.js');
15
15
  require('../chunk-SNAQBZPT.js');
16
16
  var react = require('react');
17
17
  var jsxRuntime = require('react/jsx-runtime');
@@ -688,7 +688,7 @@ Object.defineProperty(exports, "ManagedScripts", {
688
688
  });
689
689
  Object.defineProperty(exports, "SitemapSync", {
690
690
  enumerable: true,
691
- get: function () { return chunkKAUUGRYB_js.SitemapSync; }
691
+ get: function () { return chunkXR32C47O_js.SitemapSync; }
692
692
  });
693
693
  Object.defineProperty(exports, "generateSitemap", {
694
694
  enumerable: true,
@@ -1,17 +1,17 @@
1
1
  export { ManagedNoScripts, ManagedScripts } from '../chunk-6PJTLBRR.mjs';
2
2
  import { pickManagedLlmSchemaForJsonLd } from '../chunk-PENNTSJE.mjs';
3
3
  import { safeJsonLd } from '../chunk-662YHKWW.mjs';
4
- export { SitemapSync } from '../chunk-7PPNXORV.mjs';
4
+ export { SitemapSync } from '../chunk-OA7KKOAK.mjs';
5
5
  import { getManagedMetadata } from '../chunk-RU54J2PY.mjs';
6
6
  export { generateSitemap, getABVariant, getManagedMetadata, getManagedMetadataWithAB, getRedirect, getRobotsDirective, isIndexable } from '../chunk-RU54J2PY.mjs';
7
7
  import { getContentBlock, getSchemaMarkups, getSEOPageData, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-TP7H6BSK.mjs';
8
8
  export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-TP7H6BSK.mjs';
9
9
  import '../chunk-6XNEGG5B.mjs';
10
10
  import '../chunk-QJU6HBSK.mjs';
11
- import '../chunk-NVSWTDWU.mjs';
12
- import '../chunk-OFSA7LUH.mjs';
13
- import '../chunk-4XGACM7D.mjs';
14
- import '../chunk-WDBCXRTT.mjs';
11
+ import '../chunk-A6UYV475.mjs';
12
+ import '../chunk-HIHAXEPD.mjs';
13
+ import '../chunk-K2V3ZW36.mjs';
14
+ import '../chunk-DQUBETXH.mjs';
15
15
  import '../chunk-BEXTDHO4.mjs';
16
16
  import { cache, Suspense } from 'react';
17
17
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,15 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var chunkMNYM2XU4_js = require('../chunk-MNYM2XU4.js');
3
+ var chunkR3KTBKSW_js = require('../chunk-R3KTBKSW.js');
4
4
  var chunkO5GHP7UO_js = require('../chunk-O5GHP7UO.js');
5
- require('../chunk-SUZ3ZLB2.js');
5
+ require('../chunk-KSL3WA2I.js');
6
6
  require('../chunk-SNAQBZPT.js');
7
7
 
8
8
 
9
9
 
10
10
  Object.defineProperty(exports, "resolveClientCredential", {
11
11
  enumerable: true,
12
- get: function () { return chunkMNYM2XU4_js.resolveClientCredential; }
12
+ get: function () { return chunkR3KTBKSW_js.resolveClientCredential; }
13
13
  });
14
14
  Object.defineProperty(exports, "requireServerApiConfig", {
15
15
  enumerable: true,
@@ -1,6 +1,6 @@
1
- export { resolveClientCredential } from '../chunk-WIZRCI6J.mjs';
1
+ export { resolveClientCredential } from '../chunk-RIYAMYLV.mjs';
2
2
  export { requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-6XNEGG5B.mjs';
3
- import '../chunk-WDBCXRTT.mjs';
3
+ import '../chunk-DQUBETXH.mjs';
4
4
  import '../chunk-BEXTDHO4.mjs';
5
5
  //# sourceMappingURL=index.mjs.map
6
6
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Single source of truth for client reporting eligibility and credentials.
3
+ * Analytics, fleet, SitemapSync and Engage all resolve through this gate.
4
+ * Kept separate from transport wrappers so non-analytics modules stay lean.
5
+ */
6
+ /** Resolved destination for an analytics send. */
7
+ export interface AnalyticsTarget {
8
+ apiUrl: string;
9
+ apiKey: string;
10
+ }
11
+ export interface AnalyticsGateOptions {
12
+ /** `apiUrl` prop, when the caller was given one. Falls back to the window global. */
13
+ apiUrl?: string;
14
+ /** `apiKey` prop, when the caller was given one. Falls back to the window global. */
15
+ apiKey?: string;
16
+ /**
17
+ * Opt back in to reporting from inside a cross-origin frame. For a site
18
+ * deliberately distributed as an embed (a widget, a partner-hosted
19
+ * booking or menu page) the frame IS the product, and its traffic is real.
20
+ * Explicit per-site config only — see AnalyticsConfig.allowInFrame. There
21
+ * is deliberately no window global or env var for this: a silent switch
22
+ * that turns cross-tenant tracking back on is the failure mode, not the
23
+ * feature.
24
+ */
25
+ allowInFrame?: boolean;
26
+ /** Explicitly allow reporting from local browser hosts. Default false. */
27
+ allowLocalhost?: boolean;
28
+ /** Emit the one-time diagnostic when a send is suppressed. */
29
+ debug?: boolean;
30
+ }
31
+ export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from './frame';
32
+ /** Test seam — resets the once-per-document log latch. */
33
+ export declare function __resetSendGate(): void;
34
+ /**
35
+ * Resolve where an analytics call should go, or `null` if it must not happen.
36
+ *
37
+ * Returning `null` is the ONLY "do not send" signal in this module. Callers
38
+ * that set up listeners or scrape the DOM should resolve first and bail on
39
+ * `null`, so a blocked document never even attaches a scroll or click
40
+ * listener — the guard saves the work, not just the request.
41
+ */
42
+ export declare function resolveAnalyticsTarget(options?: AnalyticsGateOptions): AnalyticsTarget | null;
43
+ //# sourceMappingURL=reporting-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporting-gate.d.ts","sourceRoot":"","sources":["../../src/shared/reporting-gate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAGD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAU5E,0DAA0D;AAC1D,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,oBAAyB,GACjC,eAAe,GAAG,IAAI,CA4BxB"}
@@ -7,5 +7,5 @@
7
7
  * it matches package.json at publish time, and version.test.ts asserts it in
8
8
  * dev, so it can't silently drift.
9
9
  */
10
- export declare const SITE_KIT_VERSION = "5.5.0";
10
+ export declare const SITE_KIT_VERSION = "5.6.0";
11
11
  //# sourceMappingURL=version.d.ts.map