@sonordev/site-kit 6.4.0 → 6.5.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 (232) hide show
  1. package/agent-manifest.json +1 -1
  2. package/dist/AnalyticsProvider-44PDLORZ.js +34 -0
  3. package/dist/{AnalyticsProvider-QXZN5O6D.js.map → AnalyticsProvider-44PDLORZ.js.map} +1 -1
  4. package/dist/AnalyticsProvider-F6KHEAOX.mjs +13 -0
  5. package/dist/{AnalyticsProvider-4K5T7OQ7.mjs.map → AnalyticsProvider-F6KHEAOX.mjs.map} +1 -1
  6. package/dist/{ArticleViewTracker-FFMHR7AY.js → ArticleViewTracker-MGNVIHZ4.js} +6 -6
  7. package/dist/{ArticleViewTracker-FFMHR7AY.js.map → ArticleViewTracker-MGNVIHZ4.js.map} +1 -1
  8. package/dist/{ArticleViewTracker-BUG2TOHS.mjs → ArticleViewTracker-NI4UNSY7.mjs} +5 -5
  9. package/dist/{ArticleViewTracker-BUG2TOHS.mjs.map → ArticleViewTracker-NI4UNSY7.mjs.map} +1 -1
  10. package/dist/{ChatWidget-CRQPBDEF.mjs → ChatWidget-XSALHDDW.mjs} +7 -7
  11. package/dist/{ChatWidget-CRQPBDEF.mjs.map → ChatWidget-XSALHDDW.mjs.map} +1 -1
  12. package/dist/{ChatWidget-XFYLVXAX.js → ChatWidget-YBXJRR2Z.js} +10 -10
  13. package/dist/{ChatWidget-XFYLVXAX.js.map → ChatWidget-YBXJRR2Z.js.map} +1 -1
  14. package/dist/EngageWidget-DUEXPVOY.mjs +13 -0
  15. package/dist/{EngageWidget-SQU4T7CI.mjs.map → EngageWidget-DUEXPVOY.mjs.map} +1 -1
  16. package/dist/EngageWidget-MDCRS3BN.js +22 -0
  17. package/dist/{EngageWidget-S234YAT2.js.map → EngageWidget-MDCRS3BN.js.map} +1 -1
  18. package/dist/{FileField-XG4EYAZW.js → FileField-AXU6KBSV.js} +6 -6
  19. package/dist/{FileField-XG4EYAZW.js.map → FileField-AXU6KBSV.js.map} +1 -1
  20. package/dist/{FileField-HNEBEBLB.mjs → FileField-UTLGR5ZN.mjs} +5 -5
  21. package/dist/{FileField-HNEBEBLB.mjs.map → FileField-UTLGR5ZN.mjs.map} +1 -1
  22. package/dist/{FormSpotlight-VKD774PZ.mjs → FormSpotlight-NWLCZMOT.mjs} +3 -3
  23. package/dist/{FormSpotlight-VKD774PZ.mjs.map → FormSpotlight-NWLCZMOT.mjs.map} +1 -1
  24. package/dist/{FormSpotlight-IODREOPN.js → FormSpotlight-RR5KJDIH.js} +9 -9
  25. package/dist/{FormSpotlight-IODREOPN.js.map → FormSpotlight-RR5KJDIH.js.map} +1 -1
  26. package/dist/{FormStage-37KKZQH4.js → FormStage-GFNX4GLU.js} +9 -9
  27. package/dist/{FormStage-37KKZQH4.js.map → FormStage-GFNX4GLU.js.map} +1 -1
  28. package/dist/{FormStage-PRZNRYNC.mjs → FormStage-V4XKLI6J.mjs} +3 -3
  29. package/dist/{FormStage-PRZNRYNC.mjs.map → FormStage-V4XKLI6J.mjs.map} +1 -1
  30. package/dist/ManagedForm-4AD3LWSC.js +25 -0
  31. package/dist/{ManagedForm-JCMEE626.js.map → ManagedForm-4AD3LWSC.js.map} +1 -1
  32. package/dist/ManagedForm-4IWPG6AZ.mjs +16 -0
  33. package/dist/{ManagedForm-4PZOCKCV.mjs.map → ManagedForm-4IWPG6AZ.mjs.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-KMZG24OE.mjs → ManagedNewsletterForm-ARSY2VHC.mjs} +6 -6
  35. package/dist/{ManagedNewsletterForm-KMZG24OE.mjs.map → ManagedNewsletterForm-ARSY2VHC.mjs.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-CTC33B2U.js → ManagedNewsletterForm-HJZNUABY.js} +7 -7
  37. package/dist/{ManagedNewsletterForm-CTC33B2U.js.map → ManagedNewsletterForm-HJZNUABY.js.map} +1 -1
  38. package/dist/{SignalCore-YIPKKIUG.mjs → SignalCore-N2LKG4XN.mjs} +5 -5
  39. package/dist/{SignalCore-YIPKKIUG.mjs.map → SignalCore-N2LKG4XN.mjs.map} +1 -1
  40. package/dist/{SignalCore-YHT7WPXV.js → SignalCore-P2JUY2BO.js} +11 -11
  41. package/dist/{SignalCore-YHT7WPXV.js.map → SignalCore-P2JUY2BO.js.map} +1 -1
  42. package/dist/SitemapSync-KFY4PJ7G.js +19 -0
  43. package/dist/{SitemapSync-GN4OXIM2.js.map → SitemapSync-KFY4PJ7G.js.map} +1 -1
  44. package/dist/SitemapSync-UYDL7T4M.mjs +10 -0
  45. package/dist/{SitemapSync-NG763CGN.mjs.map → SitemapSync-UYDL7T4M.mjs.map} +1 -1
  46. package/dist/analytics/index.js +14 -13
  47. package/dist/analytics/index.mjs +6 -5
  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/articles/types.d.ts +6 -0
  53. package/dist/articles/types.d.ts.map +1 -1
  54. package/dist/{chunk-KZBDH5A3.js → chunk-34XL7TVH.js} +4 -4
  55. package/dist/{chunk-KZBDH5A3.js.map → chunk-34XL7TVH.js.map} +1 -1
  56. package/dist/{chunk-5T3J24K4.mjs → chunk-3BLKKF67.mjs} +4 -4
  57. package/dist/{chunk-5T3J24K4.mjs.map → chunk-3BLKKF67.mjs.map} +1 -1
  58. package/dist/{chunk-5W4S7XQD.js → chunk-3EAS4PAT.js} +3 -3
  59. package/dist/{chunk-5W4S7XQD.js.map → chunk-3EAS4PAT.js.map} +1 -1
  60. package/dist/{chunk-LPDXS2B2.mjs → chunk-42LLFAJQ.mjs} +3 -3
  61. package/dist/{chunk-LPDXS2B2.mjs.map → chunk-42LLFAJQ.mjs.map} +1 -1
  62. package/dist/{chunk-TIFVAASU.mjs → chunk-5YA6SI4Z.mjs} +2 -2
  63. package/dist/{chunk-S5QKNXLQ.js → chunk-5ZMTEK7U.js} +10 -10
  64. package/dist/{chunk-S5QKNXLQ.js.map → chunk-5ZMTEK7U.js.map} +1 -1
  65. package/dist/{chunk-YACU35MY.js → chunk-6OQYRVMI.js} +9 -9
  66. package/dist/{chunk-YACU35MY.js.map → chunk-6OQYRVMI.js.map} +1 -1
  67. package/dist/{chunk-4C3INRHE.mjs → chunk-7F66Y4MA.mjs} +5 -5
  68. package/dist/{chunk-4C3INRHE.mjs.map → chunk-7F66Y4MA.mjs.map} +1 -1
  69. package/dist/{chunk-GSU6VTCZ.mjs → chunk-A2HL22BO.mjs} +3 -3
  70. package/dist/{chunk-GSU6VTCZ.mjs.map → chunk-A2HL22BO.mjs.map} +1 -1
  71. package/dist/{chunk-XZHR4E2D.js → chunk-AL4Z6VYF.js} +8 -8
  72. package/dist/{chunk-XZHR4E2D.js.map → chunk-AL4Z6VYF.js.map} +1 -1
  73. package/dist/{chunk-ZEBOOUBP.mjs → chunk-B6QPCAEG.mjs} +3 -3
  74. package/dist/{chunk-ZEBOOUBP.mjs.map → chunk-B6QPCAEG.mjs.map} +1 -1
  75. package/dist/{chunk-HTCNRTN6.js → chunk-BHZHWXER.js} +8 -8
  76. package/dist/{chunk-HTCNRTN6.js.map → chunk-BHZHWXER.js.map} +1 -1
  77. package/dist/{chunk-TPDDSEL3.mjs → chunk-BNKBRLJK.mjs} +3 -3
  78. package/dist/{chunk-TPDDSEL3.mjs.map → chunk-BNKBRLJK.mjs.map} +1 -1
  79. package/dist/{chunk-A6UYV475.mjs → chunk-CABEVWKJ.mjs} +4 -24
  80. package/dist/chunk-CABEVWKJ.mjs.map +1 -0
  81. package/dist/{chunk-VMNPLCZB.js → chunk-CM4AVKXR.js} +14 -14
  82. package/dist/{chunk-VMNPLCZB.js.map → chunk-CM4AVKXR.js.map} +1 -1
  83. package/dist/{chunk-KOPFFKG2.mjs → chunk-D3WJMSTB.mjs} +3 -3
  84. package/dist/{chunk-KOPFFKG2.mjs.map → chunk-D3WJMSTB.mjs.map} +1 -1
  85. package/dist/{chunk-JXRGIE3V.mjs → chunk-DWZGW77V.mjs} +4 -4
  86. package/dist/{chunk-JXRGIE3V.mjs.map → chunk-DWZGW77V.mjs.map} +1 -1
  87. package/dist/{chunk-USQPRLSG.mjs → chunk-FPVYKSXE.mjs} +13 -10
  88. package/dist/chunk-FPVYKSXE.mjs.map +1 -0
  89. package/dist/{chunk-VDEQVXNV.js → chunk-G2KGHIAP.js} +3 -3
  90. package/dist/{chunk-VDEQVXNV.js.map → chunk-G2KGHIAP.js.map} +1 -1
  91. package/dist/chunk-GIGUDKLS.mjs +6 -0
  92. package/dist/{chunk-K3PVUXKB.mjs.map → chunk-GIGUDKLS.mjs.map} +1 -1
  93. package/dist/{chunk-XXSSUCJB.js → chunk-I7AZC5ZQ.js} +2 -2
  94. package/dist/{chunk-C7J4XLBN.js → chunk-IO65ROAO.js} +15 -15
  95. package/dist/{chunk-C7J4XLBN.js.map → chunk-IO65ROAO.js.map} +1 -1
  96. package/dist/chunk-JCDX37BY.js +58 -0
  97. package/dist/chunk-JCDX37BY.js.map +1 -0
  98. package/dist/{chunk-7K6L33BX.mjs → chunk-JOYMIGR2.mjs} +22 -22
  99. package/dist/{chunk-ATPQ6264.js → chunk-JS75ORH7.js} +24 -24
  100. package/dist/{chunk-BI7DH42Z.mjs → chunk-MDQLON5R.mjs} +5 -5
  101. package/dist/{chunk-BI7DH42Z.mjs.map → chunk-MDQLON5R.mjs.map} +1 -1
  102. package/dist/{chunk-GXSSFQ5D.js → chunk-MHKD34B4.js} +15 -15
  103. package/dist/{chunk-GXSSFQ5D.js.map → chunk-MHKD34B4.js.map} +1 -1
  104. package/dist/chunk-MXJOKOFK.mjs +51 -0
  105. package/dist/chunk-MXJOKOFK.mjs.map +1 -0
  106. package/dist/{chunk-5RNAUYWE.js → chunk-NH2P27MA.js} +4 -27
  107. package/dist/chunk-NH2P27MA.js.map +1 -0
  108. package/dist/{chunk-ZUQSVCMD.js → chunk-NN2YE5WT.js} +3 -3
  109. package/dist/{chunk-RH4XEXTK.mjs → chunk-NNZDWY3L.mjs} +3 -3
  110. package/dist/{chunk-SBTA6B6Y.mjs → chunk-OFBEBMXN.mjs} +4 -4
  111. package/dist/{chunk-SBTA6B6Y.mjs.map → chunk-OFBEBMXN.mjs.map} +1 -1
  112. package/dist/{chunk-HSLPN3QK.js → chunk-OY3PDIB3.js} +10 -10
  113. package/dist/{chunk-HSLPN3QK.js.map → chunk-OY3PDIB3.js.map} +1 -1
  114. package/dist/{chunk-ZOBUA65N.js → chunk-PFDRQJKJ.js} +14 -14
  115. package/dist/{chunk-ZOBUA65N.js.map → chunk-PFDRQJKJ.js.map} +1 -1
  116. package/dist/{chunk-YRKWJCML.mjs → chunk-PGYOBEPL.mjs} +3 -3
  117. package/dist/{chunk-YRKWJCML.mjs.map → chunk-PGYOBEPL.mjs.map} +1 -1
  118. package/dist/{chunk-U5NFIHLY.js → chunk-PIPGH7GA.js} +4 -4
  119. package/dist/{chunk-U5NFIHLY.js.map → chunk-PIPGH7GA.js.map} +1 -1
  120. package/dist/chunk-PURI56RE.js +8 -0
  121. package/dist/{chunk-CIB3RHNZ.js.map → chunk-PURI56RE.js.map} +1 -1
  122. package/dist/{chunk-EWDWLY74.js → chunk-QCS7NWMA.js} +15 -12
  123. package/dist/chunk-QCS7NWMA.js.map +1 -0
  124. package/dist/{chunk-W7IAG5YD.js → chunk-RMDH2HMW.js} +3 -3
  125. package/dist/{chunk-W7IAG5YD.js.map → chunk-RMDH2HMW.js.map} +1 -1
  126. package/dist/{chunk-U4CYO4NG.js → chunk-SUGBIEYQ.js} +9 -9
  127. package/dist/{chunk-U4CYO4NG.js.map → chunk-SUGBIEYQ.js.map} +1 -1
  128. package/dist/{chunk-M62L2N5A.mjs → chunk-SVCKJ5KH.mjs} +4 -4
  129. package/dist/{chunk-M62L2N5A.mjs.map → chunk-SVCKJ5KH.mjs.map} +1 -1
  130. package/dist/{chunk-6QPKC6XP.mjs → chunk-THO4NS6Z.mjs} +3 -3
  131. package/dist/{chunk-6QPKC6XP.mjs.map → chunk-THO4NS6Z.mjs.map} +1 -1
  132. package/dist/{chunk-WIWHM47B.mjs → chunk-TPEPAHU5.mjs} +3 -3
  133. package/dist/{chunk-WIWHM47B.mjs.map → chunk-TPEPAHU5.mjs.map} +1 -1
  134. package/dist/{chunk-CUZ3I6CO.js → chunk-U577ITSA.js} +5 -5
  135. package/dist/{chunk-CUZ3I6CO.js.map → chunk-U577ITSA.js.map} +1 -1
  136. package/dist/{chunk-5BARLEAI.mjs → chunk-UCQDE5UH.mjs} +3 -3
  137. package/dist/{chunk-5BARLEAI.mjs.map → chunk-UCQDE5UH.mjs.map} +1 -1
  138. package/dist/{chunk-QOKMH2TD.mjs → chunk-VA2O5OSV.mjs} +3 -3
  139. package/dist/{chunk-QOKMH2TD.mjs.map → chunk-VA2O5OSV.mjs.map} +1 -1
  140. package/dist/{chunk-M3JCHPK3.mjs → chunk-VJTKIKZY.mjs} +5 -5
  141. package/dist/{chunk-M3JCHPK3.mjs.map → chunk-VJTKIKZY.mjs.map} +1 -1
  142. package/dist/{chunk-F2GECCK7.js → chunk-VUAGR6VL.js} +12 -12
  143. package/dist/{chunk-F2GECCK7.js.map → chunk-VUAGR6VL.js.map} +1 -1
  144. package/dist/{chunk-24LFAQEG.mjs → chunk-XEOIGCUE.mjs} +5 -5
  145. package/dist/{chunk-24LFAQEG.mjs.map → chunk-XEOIGCUE.mjs.map} +1 -1
  146. package/dist/{chunk-GGGX54ZE.js → chunk-ZXC56JS3.js} +14 -14
  147. package/dist/{chunk-GGGX54ZE.js.map → chunk-ZXC56JS3.js.map} +1 -1
  148. package/dist/cli/index.js +211 -211
  149. package/dist/cli/index.mjs +151 -151
  150. package/dist/client/index.js +4 -4
  151. package/dist/client/index.mjs +3 -3
  152. package/dist/commerce/index.js +59 -58
  153. package/dist/commerce/index.mjs +7 -6
  154. package/dist/engage/index.js +11 -10
  155. package/dist/engage/index.js.map +1 -1
  156. package/dist/engage/index.mjs +8 -7
  157. package/dist/engage/index.mjs.map +1 -1
  158. package/dist/fleet/index.js +10 -9
  159. package/dist/fleet/index.mjs +6 -5
  160. package/dist/forms/index.js +13 -13
  161. package/dist/forms/index.mjs +7 -7
  162. package/dist/forms/server.js +2 -2
  163. package/dist/forms/server.mjs +1 -1
  164. package/dist/images/index.js +11 -11
  165. package/dist/images/index.mjs +4 -4
  166. package/dist/index.js +65 -64
  167. package/dist/index.js.map +1 -1
  168. package/dist/index.mjs +11 -10
  169. package/dist/index.mjs.map +1 -1
  170. package/dist/layout/SiteKitClientProviders.d.ts.map +1 -1
  171. package/dist/layout/client.d.ts.map +1 -1
  172. package/dist/layout/client.js +10 -9
  173. package/dist/layout/client.mjs +9 -8
  174. package/dist/layout/index.js +12 -11
  175. package/dist/layout/index.js.map +1 -1
  176. package/dist/layout/index.mjs +10 -9
  177. package/dist/layout/index.mjs.map +1 -1
  178. package/dist/layout/types.d.ts +6 -0
  179. package/dist/layout/types.d.ts.map +1 -1
  180. package/dist/{lib-6GWWPDJR.js → lib-6HOOMENJ.js} +7 -7
  181. package/dist/{lib-WFB5RLEQ.js → lib-BGAWCSUH.js} +8 -8
  182. package/dist/{lib-N5PD6JNJ.mjs → lib-R7IQ4ZHE.mjs} +2 -2
  183. package/dist/lib-RSDMEKDQ.mjs +4 -0
  184. package/dist/maps/index.js +5 -5
  185. package/dist/maps/index.mjs +3 -3
  186. package/dist/portfolio/contract.d.ts +93 -0
  187. package/dist/portfolio/contract.d.ts.map +1 -1
  188. package/dist/portfolio/contract.js +94 -1
  189. package/dist/portfolio/contract.js.map +1 -1
  190. package/dist/portfolio/contract.mjs +79 -2
  191. package/dist/portfolio/contract.mjs.map +1 -1
  192. package/dist/search/index.js +4 -4
  193. package/dist/search/index.mjs +3 -3
  194. package/dist/seo/client.js +7 -6
  195. package/dist/seo/client.mjs +6 -5
  196. package/dist/seo/index.js +7 -6
  197. package/dist/seo/index.js.map +1 -1
  198. package/dist/seo/index.mjs +6 -5
  199. package/dist/seo/index.mjs.map +1 -1
  200. package/dist/seo/register-sitemap-cli.js +2 -2
  201. package/dist/seo/register-sitemap-cli.mjs +1 -1
  202. package/dist/server/index.js +3 -3
  203. package/dist/server/index.mjs +2 -2
  204. package/dist/shared/frame.d.ts +15 -0
  205. package/dist/shared/frame.d.ts.map +1 -1
  206. package/dist/shared/version.d.ts +1 -1
  207. package/dist/signal/index.js +11 -11
  208. package/dist/signal/index.mjs +2 -2
  209. package/dist/sync/index.js +17 -17
  210. package/dist/sync/index.mjs +4 -4
  211. package/dist/{web-vitals.attribution-CHXXWO72.mjs → web-vitals.attribution-7LKLZ5GR.mjs} +3 -3
  212. package/dist/web-vitals.attribution-7LKLZ5GR.mjs.map +1 -0
  213. package/dist/{web-vitals.attribution-SQVZNHN3.js → web-vitals.attribution-ONVYQNRB.js} +3 -3
  214. package/dist/web-vitals.attribution-ONVYQNRB.js.map +1 -0
  215. package/package.json +19 -21
  216. package/dist/AnalyticsProvider-4K5T7OQ7.mjs +0 -12
  217. package/dist/AnalyticsProvider-QXZN5O6D.js +0 -33
  218. package/dist/EngageWidget-S234YAT2.js +0 -21
  219. package/dist/EngageWidget-SQU4T7CI.mjs +0 -12
  220. package/dist/ManagedForm-4PZOCKCV.mjs +0 -16
  221. package/dist/ManagedForm-JCMEE626.js +0 -25
  222. package/dist/SitemapSync-GN4OXIM2.js +0 -18
  223. package/dist/SitemapSync-NG763CGN.mjs +0 -9
  224. package/dist/chunk-5RNAUYWE.js.map +0 -1
  225. package/dist/chunk-A6UYV475.mjs.map +0 -1
  226. package/dist/chunk-CIB3RHNZ.js +0 -8
  227. package/dist/chunk-EWDWLY74.js.map +0 -1
  228. package/dist/chunk-K3PVUXKB.mjs +0 -6
  229. package/dist/chunk-USQPRLSG.mjs.map +0 -1
  230. package/dist/lib-BD4KKQBI.mjs +0 -4
  231. package/dist/web-vitals.attribution-CHXXWO72.mjs.map +0 -1
  232. package/dist/web-vitals.attribution-SQVZNHN3.js.map +0 -1
@@ -3,9 +3,9 @@
3
3
 
4
4
  var chunk7THQ4UW3_js = require('./chunk-7THQ4UW3.js');
5
5
  var chunkHGNSJXWT_js = require('./chunk-HGNSJXWT.js');
6
- var chunk5RNAUYWE_js = require('./chunk-5RNAUYWE.js');
7
- var chunkC7J4XLBN_js = require('./chunk-C7J4XLBN.js');
8
- var chunkCIB3RHNZ_js = require('./chunk-CIB3RHNZ.js');
6
+ var chunkNH2P27MA_js = require('./chunk-NH2P27MA.js');
7
+ var chunkIO65ROAO_js = require('./chunk-IO65ROAO.js');
8
+ var chunkPURI56RE_js = require('./chunk-PURI56RE.js');
9
9
  var react = require('react');
10
10
 
11
11
  // src/fleet/heartbeat.ts
@@ -18,17 +18,17 @@ function detectNextVersion() {
18
18
  async function sendFleetHeartbeat(opts) {
19
19
  const { apiUrl, apiKey } = opts;
20
20
  if (!apiUrl || !apiKey) return false;
21
- const target = chunk5RNAUYWE_js.resolveAnalyticsTarget(opts);
21
+ const target = chunkNH2P27MA_js.resolveAnalyticsTarget(opts);
22
22
  if (!target) return false;
23
23
  const payload = chunk7THQ4UW3_js.buildFleetHeartbeatPayload({
24
- kitVersion: opts.kitVersion || chunkCIB3RHNZ_js.SITE_KIT_VERSION,
24
+ kitVersion: opts.kitVersion || chunkPURI56RE_js.SITE_KIT_VERSION,
25
25
  nextVersion: opts.nextVersion,
26
26
  modules: opts.modules,
27
27
  site: opts.site,
28
28
  source: opts.source
29
29
  });
30
30
  try {
31
- const res = await chunkC7J4XLBN_js.sonorFetch(
31
+ const res = await chunkIO65ROAO_js.sonorFetch(
32
32
  `${target.apiUrl.replace(/\/$/, "")}${FLEET_HEARTBEAT_PATH}`,
33
33
  {
34
34
  method: "POST",
@@ -67,12 +67,12 @@ function FleetHeartbeat({
67
67
  if (!ready || sentRef.current) return;
68
68
  if (typeof window === "undefined") return;
69
69
  const w = window;
70
- const target = chunk5RNAUYWE_js.resolveAnalyticsTarget({ apiUrl, apiKey, allowInFrame, allowLocalhost, debug });
70
+ const target = chunkNH2P27MA_js.resolveAnalyticsTarget({ apiUrl, apiKey, allowInFrame, allowLocalhost, debug });
71
71
  if (!target) return;
72
72
  const { apiUrl: url, apiKey: key } = target;
73
73
  const resolvedSite = site ?? w.__SITE_KIT_SITE__ ?? window.location.host ?? "";
74
74
  if (oncePerSession) {
75
- const stamp = `${chunkCIB3RHNZ_js.SITE_KIT_VERSION}:${resolvedSite}`;
75
+ const stamp = `${chunkPURI56RE_js.SITE_KIT_VERSION}:${resolvedSite}`;
76
76
  try {
77
77
  if (sessionStorage.getItem(SESSION_GUARD_KEY) === stamp) {
78
78
  sentRef.current = true;
@@ -102,5 +102,5 @@ exports.FLEET_HEARTBEAT_PATH = FLEET_HEARTBEAT_PATH;
102
102
  exports.FleetHeartbeat = FleetHeartbeat;
103
103
  exports.detectNextVersion = detectNextVersion;
104
104
  exports.sendFleetHeartbeat = sendFleetHeartbeat;
105
- //# sourceMappingURL=chunk-HSLPN3QK.js.map
106
- //# sourceMappingURL=chunk-HSLPN3QK.js.map
105
+ //# sourceMappingURL=chunk-OY3PDIB3.js.map
106
+ //# sourceMappingURL=chunk-OY3PDIB3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/fleet/heartbeat.ts","../src/fleet/FleetHeartbeat.tsx"],"names":["sanitizeFleetVersion","resolveAnalyticsTarget","buildFleetHeartbeatPayload","SITE_KIT_VERSION","sonorFetch","useDeferredActivation","useRef","useEffect"],"mappings":"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","file":"chunk-HSLPN3QK.js","sourcesContent":["/**\n * @sonordev/site-kit/fleet — heartbeat sender (single source of truth for the POST)\n *\n * One place that turns fleet inputs into a validated payload and ships it to\n * `/api/public/fleet/heartbeat`. Used by BOTH the client component\n * (FleetHeartbeat) and any build-time caller, so the send path never forks.\n *\n * It routes through the shared analytics send gate and `sonorFetch`, which stamps\n * the x-sitekit-version header, attaches x-api-key, and honors the auth\n * circuit breaker — a site on a stale/canceled key will not spam the API.\n */\n\nimport { resolveAnalyticsTarget, type AnalyticsGateOptions } from '../shared/reporting-gate'\nimport { sonorFetch } from '../shared/sonorFetch'\nimport { SITE_KIT_VERSION } from '../shared/version'\nimport {\n buildFleetHeartbeatPayload,\n sanitizeFleetVersion,\n type FleetHeartbeatPayload,\n type FleetHeartbeatSource,\n type FleetModule,\n} from './contract'\n\n/** Canonical ingest path — resolved against the site's Sonor API origin. */\nexport const FLEET_HEARTBEAT_PATH = '/api/public/fleet/heartbeat'\n\nexport interface SendFleetHeartbeatOptions extends AnalyticsGateOptions {\n /** Sonor API origin (e.g. https://api.sonor.io). Trailing slash tolerated. */\n apiUrl: string\n /** Project API key — scopes the request; the project is resolved server-side. */\n apiKey: string\n /** Client-observable active modules (validated/deduped by the contract). */\n modules?: FleetModule[] | string[]\n /** Normalized host for the multi-site sub-dimension (server re-normalizes). */\n site?: string | null\n /** Installed Next.js version, if the caller can resolve it. */\n nextVersion?: string | null\n /** 'client' (runtime boot) or 'build' (CI). Default 'client'. */\n source?: FleetHeartbeatSource\n /** Override the reported kit version. Defaults to the runtime SITE_KIT_VERSION. */\n kitVersion?: string\n /** Log one info line with the result. Never logs at error level. */\n debug?: boolean\n}\n\n/**\n * Best-effort runtime detection of the host Next.js version. Unreliable by\n * design — Next does not expose its version consistently across app/pages\n * router — so it returns null unless a site injects `__SITE_KIT_NEXT_VERSION__`\n * or `window.next.version` is present. Build-time callers should pass\n * `nextVersion` explicitly (resolvable from `next/package.json`).\n */\nexport function detectNextVersion(): string | null {\n if (typeof window === 'undefined') return null\n const w = window as unknown as {\n __SITE_KIT_NEXT_VERSION__?: string\n next?: { version?: string }\n }\n return sanitizeFleetVersion(w.__SITE_KIT_NEXT_VERSION__ ?? w.next?.version ?? null)\n}\n\n/**\n * Fire one heartbeat. Fire-and-forget by contract: it never throws — a\n * telemetry POST must never break a visitor's page or a site's build. Returns\n * true only when the POST was accepted (2xx).\n */\nexport async function sendFleetHeartbeat(opts: SendFleetHeartbeatOptions): Promise<boolean> {\n const { apiUrl, apiKey } = opts\n if (!apiUrl || !apiKey) return false\n const target = resolveAnalyticsTarget(opts)\n if (!target) return false\n\n const payload: FleetHeartbeatPayload = buildFleetHeartbeatPayload({\n kitVersion: opts.kitVersion || SITE_KIT_VERSION,\n nextVersion: opts.nextVersion,\n modules: opts.modules,\n site: opts.site,\n source: opts.source,\n })\n\n try {\n const res = await sonorFetch(\n `${target.apiUrl.replace(/\\/$/, '')}${FLEET_HEARTBEAT_PATH}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n },\n { apiKey: target.apiKey, retries: 0 },\n )\n if (opts.debug) {\n // info, never error: a visitor's console must stay clean (Lighthouse).\n console.info(\n `[Sonor fleet] heartbeat ${res.status} v${payload.kit_version} [${payload.modules.join(',') || 'none'}]`,\n )\n }\n return res.ok\n } catch (err) {\n if (opts.debug) console.info('[Sonor fleet] heartbeat skipped (network)', err)\n return false\n }\n}\n","/**\n * @sonordev/site-kit/fleet — FleetHeartbeat\n *\n * A childless, effect-only client component that reports this site's build\n * fingerprint (kit version, Next.js version, active modules, host) to Sonor\n * exactly once per browser session. It exists so the platform can answer\n * \"which version / modules / key state is each site running\" without shelling\n * into every client repo.\n *\n * It is mounted as a deferred, CHILDLESS SIBLING — never a wrapper — by\n * SiteKitClientProviders, behind the same idle/first-interaction gate as\n * Analytics and Engage, so it never enters the critical hydration path (see\n * CLAUDE.md \"the page must server-render\"). It renders null and carries no\n * visitor data.\n */\n\n'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport { SITE_KIT_VERSION } from '../shared/version'\nimport { detectNextVersion, sendFleetHeartbeat } from './heartbeat'\nimport { resolveAnalyticsTarget, type AnalyticsGateOptions } from '../shared/reporting-gate'\nimport type { FleetModule } from './contract'\n\n/** Session guard key — one heartbeat per session, re-sent when version/host changes. */\nconst SESSION_GUARD_KEY = '_sk_fleet_hb'\n\nexport interface FleetHeartbeatProps extends AnalyticsGateOptions {\n /** Sonor API origin. Falls back to `window.__SITE_KIT_API_URL__` then api.sonor.io. */\n apiUrl?: string\n /** Project API key. Falls back to `window.__SITE_KIT_API_KEY__`. */\n apiKey?: string\n /** Host for the multi-site sub-dimension. Falls back to `__SITE_KIT_SITE__` then location.host. */\n site?: string | null\n /** Client-observable active modules (SiteKitClientProviders passes the enabled set). */\n modules?: FleetModule[]\n /** Installed Next.js version if known; otherwise best-effort runtime detection. */\n nextVersion?: string | null\n /**\n * Self-defer to idle / first interaction. Default true so standalone use is\n * safe. SiteKitClientProviders already gates the mount and passes false.\n */\n defer?: boolean\n /** Send at most once per browser session per (version, host). Default true. */\n oncePerSession?: boolean\n debug?: boolean\n}\n\nexport function FleetHeartbeat({\n apiUrl,\n apiKey,\n site,\n modules,\n nextVersion,\n defer = true,\n oncePerSession = true,\n debug = false,\n allowInFrame = false,\n allowLocalhost = false,\n}: FleetHeartbeatProps) {\n const ready = useDeferredActivation(defer)\n const sentRef = useRef(false)\n\n useEffect(() => {\n if (!ready || sentRef.current) return\n if (typeof window === 'undefined') return\n\n const w = window as unknown as {\n __SITE_KIT_API_URL__?: string\n __SITE_KIT_API_KEY__?: string\n __SITE_KIT_SITE__?: string\n }\n const target = resolveAnalyticsTarget({ apiUrl, apiKey, allowInFrame, allowLocalhost, debug })\n if (!target) return // Gate before stamping session storage.\n const { apiUrl: url, apiKey: key } = target\n\n const resolvedSite = site ?? w.__SITE_KIT_SITE__ ?? window.location.host ?? ''\n\n // Once-per-session-per-(version,host): keeps heartbeat volume to one POST\n // per visitor session while still re-reporting after an upgrade or on a\n // different sub-site. Storage-disabled browsers simply send once per load.\n if (oncePerSession) {\n const stamp = `${SITE_KIT_VERSION}:${resolvedSite}`\n try {\n if (sessionStorage.getItem(SESSION_GUARD_KEY) === stamp) {\n sentRef.current = true\n return\n }\n sessionStorage.setItem(SESSION_GUARD_KEY, stamp)\n } catch {\n /* storage unavailable — fall through and send this load */\n }\n }\n\n sentRef.current = true\n void sendFleetHeartbeat({\n apiUrl: url,\n apiKey: key,\n site: resolvedSite,\n modules,\n nextVersion: nextVersion ?? detectNextVersion(),\n source: 'client',\n allowInFrame,\n allowLocalhost,\n debug,\n })\n }, [ready, apiUrl, apiKey, site, modules, nextVersion, oncePerSession, debug, allowInFrame, allowLocalhost])\n\n return null\n}\n"]}
1
+ {"version":3,"sources":["../src/fleet/heartbeat.ts","../src/fleet/FleetHeartbeat.tsx"],"names":["sanitizeFleetVersion","resolveAnalyticsTarget","buildFleetHeartbeatPayload","SITE_KIT_VERSION","sonorFetch","useDeferredActivation","useRef","useEffect"],"mappings":"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","file":"chunk-OY3PDIB3.js","sourcesContent":["/**\n * @sonordev/site-kit/fleet — heartbeat sender (single source of truth for the POST)\n *\n * One place that turns fleet inputs into a validated payload and ships it to\n * `/api/public/fleet/heartbeat`. Used by BOTH the client component\n * (FleetHeartbeat) and any build-time caller, so the send path never forks.\n *\n * It routes through the shared analytics send gate and `sonorFetch`, which stamps\n * the x-sitekit-version header, attaches x-api-key, and honors the auth\n * circuit breaker — a site on a stale/canceled key will not spam the API.\n */\n\nimport { resolveAnalyticsTarget, type AnalyticsGateOptions } from '../shared/reporting-gate'\nimport { sonorFetch } from '../shared/sonorFetch'\nimport { SITE_KIT_VERSION } from '../shared/version'\nimport {\n buildFleetHeartbeatPayload,\n sanitizeFleetVersion,\n type FleetHeartbeatPayload,\n type FleetHeartbeatSource,\n type FleetModule,\n} from './contract'\n\n/** Canonical ingest path — resolved against the site's Sonor API origin. */\nexport const FLEET_HEARTBEAT_PATH = '/api/public/fleet/heartbeat'\n\nexport interface SendFleetHeartbeatOptions extends AnalyticsGateOptions {\n /** Sonor API origin (e.g. https://api.sonor.io). Trailing slash tolerated. */\n apiUrl: string\n /** Project API key — scopes the request; the project is resolved server-side. */\n apiKey: string\n /** Client-observable active modules (validated/deduped by the contract). */\n modules?: FleetModule[] | string[]\n /** Normalized host for the multi-site sub-dimension (server re-normalizes). */\n site?: string | null\n /** Installed Next.js version, if the caller can resolve it. */\n nextVersion?: string | null\n /** 'client' (runtime boot) or 'build' (CI). Default 'client'. */\n source?: FleetHeartbeatSource\n /** Override the reported kit version. Defaults to the runtime SITE_KIT_VERSION. */\n kitVersion?: string\n /** Log one info line with the result. Never logs at error level. */\n debug?: boolean\n}\n\n/**\n * Best-effort runtime detection of the host Next.js version. Unreliable by\n * design — Next does not expose its version consistently across app/pages\n * router — so it returns null unless a site injects `__SITE_KIT_NEXT_VERSION__`\n * or `window.next.version` is present. Build-time callers should pass\n * `nextVersion` explicitly (resolvable from `next/package.json`).\n */\nexport function detectNextVersion(): string | null {\n if (typeof window === 'undefined') return null\n const w = window as unknown as {\n __SITE_KIT_NEXT_VERSION__?: string\n next?: { version?: string }\n }\n return sanitizeFleetVersion(w.__SITE_KIT_NEXT_VERSION__ ?? w.next?.version ?? null)\n}\n\n/**\n * Fire one heartbeat. Fire-and-forget by contract: it never throws — a\n * telemetry POST must never break a visitor's page or a site's build. Returns\n * true only when the POST was accepted (2xx).\n */\nexport async function sendFleetHeartbeat(opts: SendFleetHeartbeatOptions): Promise<boolean> {\n const { apiUrl, apiKey } = opts\n if (!apiUrl || !apiKey) return false\n const target = resolveAnalyticsTarget(opts)\n if (!target) return false\n\n const payload: FleetHeartbeatPayload = buildFleetHeartbeatPayload({\n kitVersion: opts.kitVersion || SITE_KIT_VERSION,\n nextVersion: opts.nextVersion,\n modules: opts.modules,\n site: opts.site,\n source: opts.source,\n })\n\n try {\n const res = await sonorFetch(\n `${target.apiUrl.replace(/\\/$/, '')}${FLEET_HEARTBEAT_PATH}`,\n {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n },\n { apiKey: target.apiKey, retries: 0 },\n )\n if (opts.debug) {\n // info, never error: a visitor's console must stay clean (Lighthouse).\n console.info(\n `[Sonor fleet] heartbeat ${res.status} v${payload.kit_version} [${payload.modules.join(',') || 'none'}]`,\n )\n }\n return res.ok\n } catch (err) {\n if (opts.debug) console.info('[Sonor fleet] heartbeat skipped (network)', err)\n return false\n }\n}\n","/**\n * @sonordev/site-kit/fleet — FleetHeartbeat\n *\n * A childless, effect-only client component that reports this site's build\n * fingerprint (kit version, Next.js version, active modules, host) to Sonor\n * exactly once per browser session. It exists so the platform can answer\n * \"which version / modules / key state is each site running\" without shelling\n * into every client repo.\n *\n * It is mounted as a deferred, CHILDLESS SIBLING — never a wrapper — by\n * SiteKitClientProviders, behind the same idle/first-interaction gate as\n * Analytics and Engage, so it never enters the critical hydration path (see\n * CLAUDE.md \"the page must server-render\"). It renders null and carries no\n * visitor data.\n */\n\n'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport { SITE_KIT_VERSION } from '../shared/version'\nimport { detectNextVersion, sendFleetHeartbeat } from './heartbeat'\nimport { resolveAnalyticsTarget, type AnalyticsGateOptions } from '../shared/reporting-gate'\nimport type { FleetModule } from './contract'\n\n/** Session guard key — one heartbeat per session, re-sent when version/host changes. */\nconst SESSION_GUARD_KEY = '_sk_fleet_hb'\n\nexport interface FleetHeartbeatProps extends AnalyticsGateOptions {\n /** Sonor API origin. Falls back to `window.__SITE_KIT_API_URL__` then api.sonor.io. */\n apiUrl?: string\n /** Project API key. Falls back to `window.__SITE_KIT_API_KEY__`. */\n apiKey?: string\n /** Host for the multi-site sub-dimension. Falls back to `__SITE_KIT_SITE__` then location.host. */\n site?: string | null\n /** Client-observable active modules (SiteKitClientProviders passes the enabled set). */\n modules?: FleetModule[]\n /** Installed Next.js version if known; otherwise best-effort runtime detection. */\n nextVersion?: string | null\n /**\n * Self-defer to idle / first interaction. Default true so standalone use is\n * safe. SiteKitClientProviders already gates the mount and passes false.\n */\n defer?: boolean\n /** Send at most once per browser session per (version, host). Default true. */\n oncePerSession?: boolean\n debug?: boolean\n}\n\nexport function FleetHeartbeat({\n apiUrl,\n apiKey,\n site,\n modules,\n nextVersion,\n defer = true,\n oncePerSession = true,\n debug = false,\n allowInFrame = false,\n allowLocalhost = false,\n}: FleetHeartbeatProps) {\n const ready = useDeferredActivation(defer)\n const sentRef = useRef(false)\n\n useEffect(() => {\n if (!ready || sentRef.current) return\n if (typeof window === 'undefined') return\n\n const w = window as unknown as {\n __SITE_KIT_API_URL__?: string\n __SITE_KIT_API_KEY__?: string\n __SITE_KIT_SITE__?: string\n }\n const target = resolveAnalyticsTarget({ apiUrl, apiKey, allowInFrame, allowLocalhost, debug })\n if (!target) return // Gate before stamping session storage.\n const { apiUrl: url, apiKey: key } = target\n\n const resolvedSite = site ?? w.__SITE_KIT_SITE__ ?? window.location.host ?? ''\n\n // Once-per-session-per-(version,host): keeps heartbeat volume to one POST\n // per visitor session while still re-reporting after an upgrade or on a\n // different sub-site. Storage-disabled browsers simply send once per load.\n if (oncePerSession) {\n const stamp = `${SITE_KIT_VERSION}:${resolvedSite}`\n try {\n if (sessionStorage.getItem(SESSION_GUARD_KEY) === stamp) {\n sentRef.current = true\n return\n }\n sessionStorage.setItem(SESSION_GUARD_KEY, stamp)\n } catch {\n /* storage unavailable — fall through and send this load */\n }\n }\n\n sentRef.current = true\n void sendFleetHeartbeat({\n apiUrl: url,\n apiKey: key,\n site: resolvedSite,\n modules,\n nextVersion: nextVersion ?? detectNextVersion(),\n source: 'client',\n allowInFrame,\n allowLocalhost,\n debug,\n })\n }, [ready, apiUrl, apiKey, site, modules, nextVersion, oncePerSession, debug, allowInFrame, allowLocalhost])\n\n return null\n}\n"]}
@@ -4,8 +4,8 @@
4
4
  var chunk3DWIYCQX_js = require('./chunk-3DWIYCQX.js');
5
5
  var chunkRC4WWQXR_js = require('./chunk-RC4WWQXR.js');
6
6
  var chunkP4Y75QSU_js = require('./chunk-P4Y75QSU.js');
7
- var chunk5RNAUYWE_js = require('./chunk-5RNAUYWE.js');
8
- var chunkC7J4XLBN_js = require('./chunk-C7J4XLBN.js');
7
+ var chunkNH2P27MA_js = require('./chunk-NH2P27MA.js');
8
+ var chunkIO65ROAO_js = require('./chunk-IO65ROAO.js');
9
9
  var react = require('react');
10
10
  var navigation = require('next/navigation');
11
11
  var jsxRuntime = require('react/jsx-runtime');
@@ -67,10 +67,10 @@ function getMeasurementContext(options = {}) {
67
67
 
68
68
  // src/analytics/send-gate.ts
69
69
  async function analyticsSend(path, body, options = {}) {
70
- const target = chunk5RNAUYWE_js.resolveAnalyticsTarget(options);
70
+ const target = chunkNH2P27MA_js.resolveAnalyticsTarget(options);
71
71
  if (!target) return null;
72
72
  try {
73
- return await chunkC7J4XLBN_js.sonorFetch(
73
+ return await chunkIO65ROAO_js.sonorFetch(
74
74
  `${target.apiUrl}${path}`,
75
75
  {
76
76
  method: options.method || "POST",
@@ -85,9 +85,9 @@ async function analyticsSend(path, body, options = {}) {
85
85
  }
86
86
  }
87
87
  function analyticsBeacon(path, body, options = {}) {
88
- const target = chunk5RNAUYWE_js.resolveAnalyticsTarget(options);
88
+ const target = chunkNH2P27MA_js.resolveAnalyticsTarget(options);
89
89
  if (!target) return;
90
- chunkC7J4XLBN_js.sonorBeacon(`${target.apiUrl}${path}`, body, target.apiKey);
90
+ chunkIO65ROAO_js.sonorBeacon(`${target.apiUrl}${path}`, body, target.apiKey);
91
91
  }
92
92
 
93
93
  // src/analytics/WebVitals.tsx
@@ -159,12 +159,12 @@ function WebVitals({
159
159
  react.useEffect(() => {
160
160
  let cancelled = false;
161
161
  let teardown;
162
- import('./web-vitals.attribution-SQVZNHN3.js').then(({ onCLS, onLCP, onTTFB, onINP, onFCP }) => {
162
+ import('./web-vitals.attribution-ONVYQNRB.js').then(({ onCLS, onLCP, onTTFB, onINP, onFCP }) => {
163
163
  if (cancelled) return;
164
164
  const { propApiUrl: propApiUrl2, propApiKey: propApiKey2, propSite: propSite2, allowInFrame: allowInFrame2, allowLocalhost: allowLocalhost2, debug: debug2, visitorId: visitorId2, sessionId: sessionId2, sessionTimeout: sessionTimeout2 } = propsRef.current;
165
165
  const sent = /* @__PURE__ */ new Map();
166
166
  const report = (metric, viaBeacon = false) => {
167
- if (!chunk5RNAUYWE_js.resolveAnalyticsTarget({ apiUrl: propApiUrl2, apiKey: propApiKey2, allowInFrame: allowInFrame2, allowLocalhost: allowLocalhost2, debug: debug2 })) return;
167
+ if (!chunkNH2P27MA_js.resolveAnalyticsTarget({ apiUrl: propApiUrl2, apiKey: propApiKey2, allowInFrame: allowInFrame2, allowLocalhost: allowLocalhost2, debug: debug2 })) return;
168
168
  if (sent.get(metric.id) === metric.value) return;
169
169
  sent.set(metric.id, metric.value);
170
170
  const site = propSite2 || (typeof window !== "undefined" ? window.__SITE_KIT_SITE__ || window.location.host : "");
@@ -714,7 +714,7 @@ function AnalyticsProvider({
714
714
  if (normalizedPath === lastPathRef.current) return;
715
715
  lastPathRef.current = normalizedPath;
716
716
  const trackPageView = async () => {
717
- if (!chunk5RNAUYWE_js.resolveAnalyticsTarget(gate)) {
717
+ if (!chunkNH2P27MA_js.resolveAnalyticsTarget(gate)) {
718
718
  if (debug) console.warn("[Analytics] Page view skipped (no key, or embedded)");
719
719
  return;
720
720
  }
@@ -782,7 +782,7 @@ function AnalyticsProvider({
782
782
  if (!trackJourneys) return;
783
783
  if (!pathname) return;
784
784
  if (typeof window === "undefined") return;
785
- if (!chunk5RNAUYWE_js.resolveAnalyticsTarget(gate)) return;
785
+ if (!chunkNH2P27MA_js.resolveAnalyticsTarget(gate)) return;
786
786
  const now = Date.now();
787
787
  const previousPath = lastPathRef.current;
788
788
  const previousDuration = pageEnterTimeRef.current > 0 ? Math.round((now - pageEnterTimeRef.current) / 1e3) : 0;
@@ -861,7 +861,7 @@ function AnalyticsProvider({
861
861
  if (typeof window === "undefined") return;
862
862
  if (debug) console.log("[Analytics] Scroll tracking setup:", { trackScrollDepth, hasApiKey: !!propApiKey });
863
863
  if (!trackScrollDepth) return;
864
- if (!chunk5RNAUYWE_js.resolveAnalyticsTarget(gate)) {
864
+ if (!chunkNH2P27MA_js.resolveAnalyticsTarget(gate)) {
865
865
  if (debug) console.warn("[Analytics] Scroll tracking disabled (no key, or embedded)");
866
866
  return;
867
867
  }
@@ -940,7 +940,7 @@ function AnalyticsProvider({
940
940
  react.useEffect(() => {
941
941
  if (!trackClicks) return;
942
942
  if (typeof window === "undefined") return;
943
- if (!chunk5RNAUYWE_js.resolveAnalyticsTarget(gate)) return;
943
+ if (!chunkNH2P27MA_js.resolveAnalyticsTarget(gate)) return;
944
944
  const handleClick = async (e) => {
945
945
  const target = e.target;
946
946
  if (!target) return;
@@ -1075,5 +1075,5 @@ exports.WebVitals = WebVitals;
1075
1075
  exports.useAnalytics = useAnalytics;
1076
1076
  exports.useAnalyticsOptional = useAnalyticsOptional;
1077
1077
  exports.useTrackEvent = useTrackEvent;
1078
- //# sourceMappingURL=chunk-ZOBUA65N.js.map
1079
- //# sourceMappingURL=chunk-ZOBUA65N.js.map
1078
+ //# sourceMappingURL=chunk-PFDRQJKJ.js.map
1079
+ //# sourceMappingURL=chunk-PFDRQJKJ.js.map