@sonordev/site-kit 4.2.0 → 4.2.2

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 (208) hide show
  1. package/agent-manifest.json +1 -1
  2. package/dist/AnalyticsProvider-4BQIFRWP.js +31 -0
  3. package/dist/{AnalyticsProvider-JTAJ27EC.js.map → AnalyticsProvider-4BQIFRWP.js.map} +1 -1
  4. package/dist/AnalyticsProvider-EQSG7FGL.mjs +10 -0
  5. package/dist/{AnalyticsProvider-QD7H2FER.mjs.map → AnalyticsProvider-EQSG7FGL.mjs.map} +1 -1
  6. package/dist/ChatWidget-EXJD6YVW.js +20 -0
  7. package/dist/{ChatWidget-7UV4LXJR.js.map → ChatWidget-EXJD6YVW.js.map} +1 -1
  8. package/dist/ChatWidget-ZTKWIKXR.mjs +11 -0
  9. package/dist/{ChatWidget-BS6STWYV.mjs.map → ChatWidget-ZTKWIKXR.mjs.map} +1 -1
  10. package/dist/EngageWidget-BJLSXG2V.mjs +9 -0
  11. package/dist/{EngageWidget-M7MZXPC4.mjs.map → EngageWidget-BJLSXG2V.mjs.map} +1 -1
  12. package/dist/EngageWidget-HY523XM4.js +18 -0
  13. package/dist/{EngageWidget-AQOTCO46.js.map → EngageWidget-HY523XM4.js.map} +1 -1
  14. package/dist/{FileField-VIYBV4GM.mjs → FileField-5U4FYTLN.mjs} +5 -5
  15. package/dist/{FileField-VIYBV4GM.mjs.map → FileField-5U4FYTLN.mjs.map} +1 -1
  16. package/dist/{FileField-JIWKVY73.js → FileField-FV46FKRM.js} +6 -6
  17. package/dist/{FileField-JIWKVY73.js.map → FileField-FV46FKRM.js.map} +1 -1
  18. package/dist/{FormSpotlight-MSBWEM3F.js → FormSpotlight-TUHLSY3O.js} +15 -15
  19. package/dist/{FormSpotlight-MSBWEM3F.js.map → FormSpotlight-TUHLSY3O.js.map} +1 -1
  20. package/dist/{FormSpotlight-7P3JV3XK.mjs → FormSpotlight-W6BNVKNN.mjs} +3 -3
  21. package/dist/{FormSpotlight-7P3JV3XK.mjs.map → FormSpotlight-W6BNVKNN.mjs.map} +1 -1
  22. package/dist/{FormStage-FME3O3N2.js → FormStage-MNXNKSPP.js} +13 -13
  23. package/dist/{FormStage-FME3O3N2.js.map → FormStage-MNXNKSPP.js.map} +1 -1
  24. package/dist/{FormStage-327WGVBM.mjs → FormStage-NKWP3C2S.mjs} +3 -3
  25. package/dist/{FormStage-327WGVBM.mjs.map → FormStage-NKWP3C2S.mjs.map} +1 -1
  26. package/dist/ManagedForm-K4UHRVYV.js +23 -0
  27. package/dist/{ManagedForm-5BXS3XKX.js.map → ManagedForm-K4UHRVYV.js.map} +1 -1
  28. package/dist/ManagedForm-M3XW66FH.mjs +14 -0
  29. package/dist/{ManagedForm-BFZWPWGY.mjs.map → ManagedForm-M3XW66FH.mjs.map} +1 -1
  30. package/dist/{SignalCore-IPLGFFC3.js → SignalCore-7PVCUG2S.js} +11 -11
  31. package/dist/{SignalCore-IPLGFFC3.js.map → SignalCore-7PVCUG2S.js.map} +1 -1
  32. package/dist/{SignalCore-EE2RAGZ2.mjs → SignalCore-S6PCGTHS.mjs} +5 -5
  33. package/dist/{SignalCore-EE2RAGZ2.mjs.map → SignalCore-S6PCGTHS.mjs.map} +1 -1
  34. package/dist/SitemapSync-2HLGUZES.mjs +8 -0
  35. package/dist/{SitemapSync-2X6NM3TX.mjs.map → SitemapSync-2HLGUZES.mjs.map} +1 -1
  36. package/dist/SitemapSync-66HQ4SG2.js +17 -0
  37. package/dist/{SitemapSync-XBYRZ7WH.js.map → SitemapSync-66HQ4SG2.js.map} +1 -1
  38. package/dist/analytics/index.js +9 -9
  39. package/dist/analytics/index.mjs +4 -4
  40. package/dist/{chunk-WCRBZZRI.mjs → chunk-2GUDSTNH.mjs} +89 -20
  41. package/dist/chunk-2GUDSTNH.mjs.map +1 -0
  42. package/dist/{chunk-S2C3QU4E.js → chunk-2LU7BV5K.js} +29 -19
  43. package/dist/chunk-2LU7BV5K.js.map +1 -0
  44. package/dist/{chunk-4YWGUQPU.js → chunk-3BXQP54K.js} +3 -3
  45. package/dist/{chunk-4YWGUQPU.js.map → chunk-3BXQP54K.js.map} +1 -1
  46. package/dist/{chunk-DNEUGYTE.mjs → chunk-4E7NFYL5.mjs} +3 -3
  47. package/dist/{chunk-DNEUGYTE.mjs.map → chunk-4E7NFYL5.mjs.map} +1 -1
  48. package/dist/{chunk-IWFP2FQ5.js → chunk-4MBD6PPV.js} +15 -15
  49. package/dist/{chunk-IWFP2FQ5.js.map → chunk-4MBD6PPV.js.map} +1 -1
  50. package/dist/{chunk-HI6DVYVN.mjs → chunk-4SJITKBL.mjs} +3 -3
  51. package/dist/{chunk-HI6DVYVN.mjs.map → chunk-4SJITKBL.mjs.map} +1 -1
  52. package/dist/{chunk-PKQVV6LW.js → chunk-524SIFK7.js} +13 -13
  53. package/dist/chunk-524SIFK7.js.map +1 -0
  54. package/dist/{chunk-INW43FWV.js → chunk-55FJN7VQ.js} +6 -6
  55. package/dist/{chunk-INW43FWV.js.map → chunk-55FJN7VQ.js.map} +1 -1
  56. package/dist/{chunk-4PP4D3TF.js → chunk-645TOMKQ.js} +4 -4
  57. package/dist/{chunk-4PP4D3TF.js.map → chunk-645TOMKQ.js.map} +1 -1
  58. package/dist/{chunk-DYDAV4Y4.mjs → chunk-7723NZQW.mjs} +4 -4
  59. package/dist/{chunk-DYDAV4Y4.mjs.map → chunk-7723NZQW.mjs.map} +1 -1
  60. package/dist/{chunk-HLCCE7BD.js → chunk-7YVFFQWH.js} +14 -14
  61. package/dist/{chunk-HLCCE7BD.js.map → chunk-7YVFFQWH.js.map} +1 -1
  62. package/dist/{chunk-WCIQKO7W.mjs → chunk-BEHHWRZM.mjs} +3 -3
  63. package/dist/{chunk-WCIQKO7W.mjs.map → chunk-BEHHWRZM.mjs.map} +1 -1
  64. package/dist/{chunk-AVWIKVVE.js → chunk-BUZSBUYJ.js} +14 -14
  65. package/dist/{chunk-AVWIKVVE.js.map → chunk-BUZSBUYJ.js.map} +1 -1
  66. package/dist/{chunk-OO4T5X4Z.mjs → chunk-CM5QUX2T.mjs} +3 -3
  67. package/dist/{chunk-OO4T5X4Z.mjs.map → chunk-CM5QUX2T.mjs.map} +1 -1
  68. package/dist/{chunk-UKFBG6FV.mjs → chunk-D6CPHVMV.mjs} +3 -3
  69. package/dist/{chunk-UKFBG6FV.mjs.map → chunk-D6CPHVMV.mjs.map} +1 -1
  70. package/dist/{chunk-QNEBWBZ4.js → chunk-DEPDYVUH.js} +5 -5
  71. package/dist/{chunk-QNEBWBZ4.js.map → chunk-DEPDYVUH.js.map} +1 -1
  72. package/dist/{chunk-NDASB3X3.js → chunk-F46DCSUI.js} +9 -9
  73. package/dist/{chunk-NDASB3X3.js.map → chunk-F46DCSUI.js.map} +1 -1
  74. package/dist/{chunk-Z7HAQTWP.js → chunk-HYRKVST7.js} +14 -14
  75. package/dist/{chunk-Z7HAQTWP.js.map → chunk-HYRKVST7.js.map} +1 -1
  76. package/dist/{chunk-R6LQRHPQ.mjs → chunk-K7XOPTOE.mjs} +4 -4
  77. package/dist/{chunk-R6LQRHPQ.mjs.map → chunk-K7XOPTOE.mjs.map} +1 -1
  78. package/dist/{chunk-UDPUBSSS.mjs → chunk-KJSYSRMD.mjs} +3 -3
  79. package/dist/{chunk-UDPUBSSS.mjs.map → chunk-KJSYSRMD.mjs.map} +1 -1
  80. package/dist/{chunk-CMIFYDKA.mjs → chunk-L4ZLL6TE.mjs} +4 -4
  81. package/dist/{chunk-CMIFYDKA.mjs.map → chunk-L4ZLL6TE.mjs.map} +1 -1
  82. package/dist/{chunk-WLVS4QBK.js → chunk-LSW5QBW2.js} +4 -4
  83. package/dist/{chunk-WLVS4QBK.js.map → chunk-LSW5QBW2.js.map} +1 -1
  84. package/dist/{chunk-SDBUPTF4.mjs → chunk-MOKM6STG.mjs} +3 -3
  85. package/dist/{chunk-SDBUPTF4.mjs.map → chunk-MOKM6STG.mjs.map} +1 -1
  86. package/dist/chunk-NPCWPOCE.mjs +6 -0
  87. package/dist/{chunk-LS64Y25E.mjs.map → chunk-NPCWPOCE.mjs.map} +1 -1
  88. package/dist/{chunk-FMAEUQEZ.js → chunk-OB6DNGYK.js} +97 -28
  89. package/dist/chunk-OB6DNGYK.js.map +1 -0
  90. package/dist/{chunk-TGGSXT3F.mjs → chunk-P37FFMOZ.mjs} +9 -9
  91. package/dist/chunk-P37FFMOZ.mjs.map +1 -0
  92. package/dist/{chunk-VOMAEC5G.js → chunk-PLY5AP72.js} +3 -3
  93. package/dist/{chunk-VOMAEC5G.js.map → chunk-PLY5AP72.js.map} +1 -1
  94. package/dist/{chunk-KFDFXRBE.js → chunk-QQFWEHYU.js} +4 -4
  95. package/dist/{chunk-KFDFXRBE.js.map → chunk-QQFWEHYU.js.map} +1 -1
  96. package/dist/{chunk-57IFVXCB.mjs → chunk-SED7E3P5.mjs} +4 -4
  97. package/dist/{chunk-57IFVXCB.mjs.map → chunk-SED7E3P5.mjs.map} +1 -1
  98. package/dist/{chunk-MTXQG3TX.mjs → chunk-SS5S43I4.mjs} +18 -8
  99. package/dist/chunk-SS5S43I4.mjs.map +1 -0
  100. package/dist/{chunk-JWIJZQYI.js → chunk-THBZCEA7.js} +5 -5
  101. package/dist/{chunk-JWIJZQYI.js.map → chunk-THBZCEA7.js.map} +1 -1
  102. package/dist/{chunk-VTFDE7H2.js → chunk-TWPLJ27S.js} +7 -7
  103. package/dist/{chunk-VTFDE7H2.js.map → chunk-TWPLJ27S.js.map} +1 -1
  104. package/dist/{chunk-7UCKV4WA.js → chunk-UEOGMRTL.js} +8 -8
  105. package/dist/{chunk-7UCKV4WA.js.map → chunk-UEOGMRTL.js.map} +1 -1
  106. package/dist/{chunk-GXABJJ4F.js → chunk-UF33ENG6.js} +3 -3
  107. package/dist/{chunk-GXABJJ4F.js.map → chunk-UF33ENG6.js.map} +1 -1
  108. package/dist/{chunk-IV7LOJZO.js → chunk-UIKGLLTU.js} +4 -4
  109. package/dist/{chunk-IV7LOJZO.js.map → chunk-UIKGLLTU.js.map} +1 -1
  110. package/dist/chunk-UUBW2NJZ.js +8 -0
  111. package/dist/{chunk-CBN73TLK.js.map → chunk-UUBW2NJZ.js.map} +1 -1
  112. package/dist/{chunk-4HNFMOYE.mjs → chunk-W3QLA5MI.mjs} +3 -3
  113. package/dist/{chunk-4HNFMOYE.mjs.map → chunk-W3QLA5MI.mjs.map} +1 -1
  114. package/dist/{chunk-WFCRXUNA.mjs → chunk-WARTV6ZP.mjs} +4 -4
  115. package/dist/{chunk-WFCRXUNA.mjs.map → chunk-WARTV6ZP.mjs.map} +1 -1
  116. package/dist/{chunk-A5FJZWGY.mjs → chunk-WHHBOYAW.mjs} +4 -4
  117. package/dist/{chunk-A5FJZWGY.mjs.map → chunk-WHHBOYAW.mjs.map} +1 -1
  118. package/dist/{chunk-DSECSIWJ.mjs → chunk-WNK2OK5G.mjs} +3 -3
  119. package/dist/{chunk-DSECSIWJ.mjs.map → chunk-WNK2OK5G.mjs.map} +1 -1
  120. package/dist/{chunk-FFQAKIV5.js → chunk-XBKNPBRB.js} +15 -15
  121. package/dist/{chunk-FFQAKIV5.js.map → chunk-XBKNPBRB.js.map} +1 -1
  122. package/dist/{chunk-VGPZ4PCZ.mjs → chunk-XFVI3SNM.mjs} +3 -3
  123. package/dist/{chunk-VGPZ4PCZ.mjs.map → chunk-XFVI3SNM.mjs.map} +1 -1
  124. package/dist/{chunk-XOSAVYAI.js → chunk-XMZQUC2J.js} +8 -8
  125. package/dist/{chunk-XOSAVYAI.js.map → chunk-XMZQUC2J.js.map} +1 -1
  126. package/dist/{chunk-XXBVF7WN.mjs → chunk-YN5WYGHK.mjs} +3 -3
  127. package/dist/{chunk-XXBVF7WN.mjs.map → chunk-YN5WYGHK.mjs.map} +1 -1
  128. package/dist/{chunk-XZCZCND2.mjs → chunk-YV2TG7JR.mjs} +3 -3
  129. package/dist/{chunk-XZCZCND2.mjs.map → chunk-YV2TG7JR.mjs.map} +1 -1
  130. package/dist/{chunk-MZZQHGXY.mjs → chunk-ZXVMP6SY.mjs} +3 -3
  131. package/dist/{chunk-MZZQHGXY.mjs.map → chunk-ZXVMP6SY.mjs.map} +1 -1
  132. package/dist/cli/index.js +3 -3
  133. package/dist/cli/index.mjs +1 -1
  134. package/dist/client/index.js +4 -4
  135. package/dist/client/index.mjs +3 -3
  136. package/dist/commerce/index.js +56 -56
  137. package/dist/commerce/index.mjs +5 -5
  138. package/dist/engage/index.js +10 -10
  139. package/dist/engage/index.mjs +7 -7
  140. package/dist/fleet/index.js +8 -8
  141. package/dist/fleet/index.mjs +4 -4
  142. package/dist/forms/ManagedForm.d.ts.map +1 -1
  143. package/dist/forms/index.js +16 -16
  144. package/dist/forms/index.mjs +9 -9
  145. package/dist/forms/server.js +10 -10
  146. package/dist/forms/server.mjs +8 -8
  147. package/dist/forms/static.js +7 -7
  148. package/dist/forms/static.mjs +6 -6
  149. package/dist/forms/tracking-session.d.ts +63 -0
  150. package/dist/forms/tracking-session.d.ts.map +1 -0
  151. package/dist/forms/tracking-session.test.d.ts +22 -0
  152. package/dist/forms/tracking-session.test.d.ts.map +1 -0
  153. package/dist/forms/useForm.d.ts +11 -0
  154. package/dist/forms/useForm.d.ts.map +1 -1
  155. package/dist/forms/useFormTracking.d.ts +6 -1
  156. package/dist/forms/useFormTracking.d.ts.map +1 -1
  157. package/dist/images/index.js +11 -11
  158. package/dist/images/index.mjs +4 -4
  159. package/dist/index.js +63 -63
  160. package/dist/index.mjs +9 -9
  161. package/dist/layout/SiteKitClientProviders.d.ts +7 -0
  162. package/dist/layout/SiteKitClientProviders.d.ts.map +1 -1
  163. package/dist/layout/SiteKitLayout.d.ts +18 -1
  164. package/dist/layout/SiteKitLayout.d.ts.map +1 -1
  165. package/dist/layout/client.d.ts +7 -0
  166. package/dist/layout/client.d.ts.map +1 -1
  167. package/dist/layout/client.js +8 -8
  168. package/dist/layout/client.mjs +7 -7
  169. package/dist/layout/index.js +11 -11
  170. package/dist/layout/index.js.map +1 -1
  171. package/dist/layout/index.mjs +9 -9
  172. package/dist/layout/index.mjs.map +1 -1
  173. package/dist/maps/index.js +5 -5
  174. package/dist/maps/index.mjs +3 -3
  175. package/dist/search/index.js +4 -4
  176. package/dist/search/index.mjs +3 -3
  177. package/dist/seo/client.js +5 -5
  178. package/dist/seo/client.mjs +4 -4
  179. package/dist/seo/index.js +5 -5
  180. package/dist/seo/index.mjs +4 -4
  181. package/dist/server/index.js +3 -3
  182. package/dist/server/index.mjs +2 -2
  183. package/dist/shared/version.d.ts +1 -1
  184. package/dist/signal/index.js +11 -11
  185. package/dist/signal/index.mjs +2 -2
  186. package/dist/sync/index.js +16 -16
  187. package/dist/sync/index.mjs +4 -4
  188. package/dist/types.d.ts +5 -2
  189. package/dist/types.d.ts.map +1 -1
  190. package/package.json +3 -3
  191. package/dist/AnalyticsProvider-JTAJ27EC.js +0 -31
  192. package/dist/AnalyticsProvider-QD7H2FER.mjs +0 -10
  193. package/dist/ChatWidget-7UV4LXJR.js +0 -20
  194. package/dist/ChatWidget-BS6STWYV.mjs +0 -11
  195. package/dist/EngageWidget-AQOTCO46.js +0 -18
  196. package/dist/EngageWidget-M7MZXPC4.mjs +0 -9
  197. package/dist/ManagedForm-5BXS3XKX.js +0 -23
  198. package/dist/ManagedForm-BFZWPWGY.mjs +0 -14
  199. package/dist/SitemapSync-2X6NM3TX.mjs +0 -8
  200. package/dist/SitemapSync-XBYRZ7WH.js +0 -17
  201. package/dist/chunk-CBN73TLK.js +0 -8
  202. package/dist/chunk-FMAEUQEZ.js.map +0 -1
  203. package/dist/chunk-LS64Y25E.mjs +0 -6
  204. package/dist/chunk-MTXQG3TX.mjs.map +0 -1
  205. package/dist/chunk-PKQVV6LW.js.map +0 -1
  206. package/dist/chunk-S2C3QU4E.js.map +0 -1
  207. package/dist/chunk-TGGSXT3F.mjs.map +0 -1
  208. package/dist/chunk-WCRBZZRI.mjs.map +0 -1
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunk7UCKV4WA_js = require('../chunk-7UCKV4WA.js');
4
- require('../chunk-IV7LOJZO.js');
3
+ var chunkUEOGMRTL_js = require('../chunk-UEOGMRTL.js');
4
+ require('../chunk-UIKGLLTU.js');
5
5
  require('../chunk-2ACKOMAL.js');
6
- require('../chunk-WLVS4QBK.js');
6
+ require('../chunk-LSW5QBW2.js');
7
7
  require('../chunk-KHPJ3CEL.js');
8
- require('../chunk-FFQAKIV5.js');
9
- require('../chunk-KFDFXRBE.js');
10
- require('../chunk-CBN73TLK.js');
8
+ require('../chunk-XBKNPBRB.js');
9
+ require('../chunk-QQFWEHYU.js');
10
+ require('../chunk-UUBW2NJZ.js');
11
11
  require('../chunk-SNAQBZPT.js');
12
12
 
13
13
 
14
14
 
15
15
  Object.defineProperty(exports, "StaticForm", {
16
16
  enumerable: true,
17
- get: function () { return chunk7UCKV4WA_js.StaticForm; }
17
+ get: function () { return chunkUEOGMRTL_js.StaticForm; }
18
18
  });
19
19
  //# sourceMappingURL=static.js.map
20
20
  //# sourceMappingURL=static.js.map
@@ -1,11 +1,11 @@
1
- export { StaticForm } from '../chunk-57IFVXCB.mjs';
2
- import '../chunk-OO4T5X4Z.mjs';
1
+ export { StaticForm } from '../chunk-SED7E3P5.mjs';
2
+ import '../chunk-CM5QUX2T.mjs';
3
3
  import '../chunk-LB7LHVWI.mjs';
4
- import '../chunk-XXBVF7WN.mjs';
4
+ import '../chunk-YN5WYGHK.mjs';
5
5
  import '../chunk-TMVKRQGJ.mjs';
6
- import '../chunk-R6LQRHPQ.mjs';
7
- import '../chunk-WCIQKO7W.mjs';
8
- import '../chunk-LS64Y25E.mjs';
6
+ import '../chunk-K7XOPTOE.mjs';
7
+ import '../chunk-BEHHWRZM.mjs';
8
+ import '../chunk-NPCWPOCE.mjs';
9
9
  import '../chunk-BEXTDHO4.mjs';
10
10
  //# sourceMappingURL=static.mjs.map
11
11
  //# sourceMappingURL=static.mjs.map
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @sonordev/site-kit/forms - Form tracking session registry
3
+ *
4
+ * SINGLE SOURCE OF TRUTH for a form's `form_analytics` row: one
5
+ * `/analytics/start` per formId per page load, shared by every tracker
6
+ * mounted for that form. Do NOT re-fork start logic into a caller.
7
+ *
8
+ * The lesson from the double-count bug fixed in 4.2.2: `ManagedForm` called
9
+ * `useForm` (which tracks) AND rendered `FormClient` (which also tracks). Two
10
+ * independent hook instances each minted their own session uuid and POSTed
11
+ * their own start, so a single page load wrote TWO `form_analytics` rows —
12
+ * present in every release up to and including 4.2.1. That halved every reported
13
+ * start -> submission conversion rate, and because each instance registered its
14
+ * own `beforeunload` it wrote two abandonment rows per visit as well. The
15
+ * signature in the data was unmistakable: paired rows where exactly one ever
16
+ * completed (only FormClient's instance owns submit) but BOTH abandoned.
17
+ *
18
+ * Trackers SHARE the resulting analytics row id, so whichever component owns
19
+ * submission can still complete the row no matter which one opened it. That
20
+ * sharing is what makes this safe as a guard rather than a gamble on which
21
+ * instance mounts first.
22
+ */
23
+ export interface TrackingSession {
24
+ /** The uuid reported to the API as this form visit's session. */
25
+ readonly sessionId: string;
26
+ readonly startedAt: number;
27
+ /** Resolves to the analytics row id, or null when the start POST failed. */
28
+ readonly analyticsId: Promise<string | null>;
29
+ /**
30
+ * Abandonment belongs to the ROW, not to a tracker. Every mounted tracker
31
+ * registers its own `beforeunload`; only the first beacon may fire, or one
32
+ * visit reports abandonment as many times as it has trackers.
33
+ */
34
+ abandonSent: boolean;
35
+ /** @internal */
36
+ refCount: number;
37
+ /** @internal */
38
+ releaseTimer: ReturnType<typeof setTimeout> | null;
39
+ }
40
+ /**
41
+ * How long a session outlives its last unmount before a fresh start POST is
42
+ * allowed. Covers React StrictMode's dev-mode mount -> unmount -> mount and the
43
+ * FormEnhancer static -> interactive swap; both remount a form within the same
44
+ * page load and would otherwise mint a second row for one visit.
45
+ */
46
+ export declare const SESSION_GRACE_MS = 2000;
47
+ /**
48
+ * Join the tracking session for `formId`, opening one if none is live.
49
+ *
50
+ * `start` is invoked at most once per session and must resolve to the analytics
51
+ * row id (or null when the POST failed). Callers MUST pair this with
52
+ * {@link releaseTrackingSession} on unmount.
53
+ */
54
+ export declare function acquireTrackingSession(formId: string, start: (sessionId: string) => Promise<string | null>): TrackingSession;
55
+ /**
56
+ * Leave the tracking session. The last tracker out schedules teardown after
57
+ * {@link SESSION_GRACE_MS} rather than deleting immediately, so a remount
58
+ * within the same page load reuses the row instead of opening another.
59
+ */
60
+ export declare function releaseTrackingSession(formId: string, session: TrackingSession): void;
61
+ /** Test-only: drop all live sessions so cases start from a clean registry. */
62
+ export declare function __resetTrackingSessions(): void;
63
+ //# sourceMappingURL=tracking-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-session.d.ts","sourceRoot":"","sources":["../../src/forms/tracking-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC5C;;;;OAIG;IACH,WAAW,EAAE,OAAO,CAAA;IACpB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB;IAChB,YAAY,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAA;CACnD;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAIpC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACnD,eAAe,CAgCjB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAgBrF;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Regression guard: ONE `form_analytics` row per form per page load.
3
+ *
4
+ * The bug, fixed in 4.2.2: `ManagedForm` called `useForm` (which tracks) AND
5
+ * rendered `FormClient` (which also tracks). Two `useFormTracking`
6
+ * instances each minted their own session uuid and POSTed their own
7
+ * `/analytics/start`, so a single page load wrote TWO rows — halving every
8
+ * reported start -> submission conversion rate across the fleet.
9
+ *
10
+ * It went unnoticed for months because both rows look individually plausible.
11
+ * What gave it away in the data was the asymmetry: paired rows where exactly
12
+ * one ever completed (only FormClient's instance owns submit) but BOTH
13
+ * abandoned (each instance registered its own beforeunload) — a shape a single
14
+ * tracker firing twice physically cannot produce, since it has one analytics
15
+ * row id and one listener.
16
+ *
17
+ * These tests pin the two things that keep it fixed:
18
+ * 1. Concurrent trackers collapse to one session and one start POST.
19
+ * 2. Nothing composes two trackers over one form again.
20
+ */
21
+ export {};
22
+ //# sourceMappingURL=tracking-session.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-session.test.d.ts","sourceRoot":"","sources":["../../src/forms/tracking-session.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
@@ -43,6 +43,17 @@ export interface UseFormOptions {
43
43
  * Accepts the RAW API payload; normalized here exactly like a client fetch.
44
44
  */
45
45
  initialForm?: Record<string, unknown> | null;
46
+ /**
47
+ * Report this form's funnel to Sonor (`form_analytics`). Defaults to true —
48
+ * a headless `useForm` consumer renders and submits the form itself, so this
49
+ * hook is the only thing that can track it.
50
+ *
51
+ * `ManagedForm` passes FALSE: it delegates rendering, step navigation and
52
+ * submission to `FormClient`, which tracks that path. Exactly one component
53
+ * may own a form's tracking — two owners was the double-count bug fixed
54
+ * in 4.2.2.
55
+ */
56
+ trackAnalytics?: boolean;
46
57
  }
47
58
  export interface UseFormReturn {
48
59
  /** Form configuration (null while loading) */
@@ -1 +1 @@
1
- {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/forms/useForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAA;AAOhB,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAChD,qCAAqC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC5B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC7C;AAGD,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC9B,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAA;IAClB,0BAA0B;IAC1B,UAAU,EAAE,KAAK,GAAG,IAAI,CAAA;IACxB,yEAAyE;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAE1B,sBAAsB;IACtB,SAAS,EAAE,SAAS,EAAE,CAAA;IACtB,uEAAuE;IACvE,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,yDAAyD;IACzD,aAAa,EAAE,SAAS,EAAE,CAAA;IAE1B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9B,+BAA+B;IAC/B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACpD,wCAAwC;IACxC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACpD,uBAAuB;IACvB,WAAW,EAAE,MAAM,IAAI,CAAA;IAEvB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAEhB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,OAAO,CAAA;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IAEnB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,OAAO,CAAA;IACvB,8BAA8B;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,GAAG,IAAI,CAAA;IAClD,sDAAsD;IACtD,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAA;IAE7C,sBAAsB;IACtB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,uBAAuB;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,OAAO,CAAA;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAMD,wBAAgB,OAAO,CACrB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,cAAmB,GAC3B,aAAa,CA2af"}
1
+ {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/forms/useForm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAWH,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAA;AAOhB,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAChD,qCAAqC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,gCAAgC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC5B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC5C;;;;;;;;;OASG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAGD,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC9B,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAA;IAClB,0BAA0B;IAC1B,UAAU,EAAE,KAAK,GAAG,IAAI,CAAA;IACxB,yEAAyE;IACzE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAE1B,sBAAsB;IACtB,SAAS,EAAE,SAAS,EAAE,CAAA;IACtB,uEAAuE;IACvE,MAAM,EAAE,SAAS,EAAE,CAAA;IACnB,yDAAyD;IACzD,aAAa,EAAE,SAAS,EAAE,CAAA;IAE1B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE9B,+BAA+B;IAC/B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACpD,wCAAwC;IACxC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACpD,uBAAuB;IACvB,WAAW,EAAE,MAAM,IAAI,CAAA;IAEvB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAEhB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,OAAO,CAAA;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IAEnB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,OAAO,CAAA;IACvB,8BAA8B;IAC9B,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,GAAG,IAAI,CAAA;IAClD,sDAAsD;IACtD,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAA;IAE7C,sBAAsB;IACtB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,uBAAuB;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,UAAU,EAAE,OAAO,CAAA;IACnB,kCAAkC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAMD,wBAAgB,OAAO,CACrB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,cAAmB,GAC3B,aAAa,CA6af"}
@@ -1,7 +1,12 @@
1
1
  /**
2
2
  * @sonordev/site-kit/forms - Form Tracking Hook
3
3
  *
4
- * Tracks form analytics including step progress and abandonment
4
+ * Tracks form analytics including step progress and abandonment.
5
+ *
6
+ * The `form_analytics` row is owned by the shared session registry, not by this
7
+ * hook — see `tracking-session.ts`. Every tracker mounted for the same form
8
+ * joins ONE session and shares its analytics row id, so composing two trackers
9
+ * over a single form (as ManagedForm once did) can no longer double-count.
5
10
  */
6
11
  interface UseFormTrackingOptions {
7
12
  formId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"useFormTracking.d.ts","sourceRoot":"","sources":["../../src/forms/useFormTracking.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,UAAU,kBAAkB;IAC1B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,UAAU,EACV,OAAc,EACd,KAAa,GACd,EAAE,sBAAsB,GAAG,kBAAkB,CA+M7C"}
1
+ {"version":3,"file":"useFormTracking.d.ts","sourceRoot":"","sources":["../../src/forms/useFormTracking.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,UAAU,kBAAkB;IAC1B,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,UAAU,EACV,OAAc,EACd,KAAa,GACd,EAAE,sBAAsB,GAAG,kBAAkB,CAuP7C"}
@@ -1,41 +1,41 @@
1
1
  'use strict';
2
2
 
3
- var chunkZ7HAQTWP_js = require('../chunk-Z7HAQTWP.js');
3
+ var chunkHYRKVST7_js = require('../chunk-HYRKVST7.js');
4
4
  var chunkGCPPXUAI_js = require('../chunk-GCPPXUAI.js');
5
- require('../chunk-FFQAKIV5.js');
6
- require('../chunk-KFDFXRBE.js');
7
- require('../chunk-CBN73TLK.js');
5
+ require('../chunk-XBKNPBRB.js');
6
+ require('../chunk-QQFWEHYU.js');
7
+ require('../chunk-UUBW2NJZ.js');
8
8
  require('../chunk-SNAQBZPT.js');
9
9
 
10
10
 
11
11
 
12
12
  Object.defineProperty(exports, "ManagedImage", {
13
13
  enumerable: true,
14
- get: function () { return chunkZ7HAQTWP_js.ManagedImage; }
14
+ get: function () { return chunkHYRKVST7_js.ManagedImage; }
15
15
  });
16
16
  Object.defineProperty(exports, "assignImageToSlot", {
17
17
  enumerable: true,
18
- get: function () { return chunkZ7HAQTWP_js.assignImageToSlot; }
18
+ get: function () { return chunkHYRKVST7_js.assignImageToSlot; }
19
19
  });
20
20
  Object.defineProperty(exports, "clearImageSlot", {
21
21
  enumerable: true,
22
- get: function () { return chunkZ7HAQTWP_js.clearImageSlot; }
22
+ get: function () { return chunkHYRKVST7_js.clearImageSlot; }
23
23
  });
24
24
  Object.defineProperty(exports, "fetchManagedImage", {
25
25
  enumerable: true,
26
- get: function () { return chunkZ7HAQTWP_js.fetchManagedImage; }
26
+ get: function () { return chunkHYRKVST7_js.fetchManagedImage; }
27
27
  });
28
28
  Object.defineProperty(exports, "fetchManagedImages", {
29
29
  enumerable: true,
30
- get: function () { return chunkZ7HAQTWP_js.fetchManagedImages; }
30
+ get: function () { return chunkHYRKVST7_js.fetchManagedImages; }
31
31
  });
32
32
  Object.defineProperty(exports, "listImageFiles", {
33
33
  enumerable: true,
34
- get: function () { return chunkZ7HAQTWP_js.listImageFiles; }
34
+ get: function () { return chunkHYRKVST7_js.listImageFiles; }
35
35
  });
36
36
  Object.defineProperty(exports, "uploadImage", {
37
37
  enumerable: true,
38
- get: function () { return chunkZ7HAQTWP_js.uploadImage; }
38
+ get: function () { return chunkHYRKVST7_js.uploadImage; }
39
39
  });
40
40
  Object.defineProperty(exports, "ManagedFavicon", {
41
41
  enumerable: true,
@@ -1,8 +1,8 @@
1
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-DSECSIWJ.mjs';
1
+ export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-WNK2OK5G.mjs';
2
2
  export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-CU6OGBKK.mjs';
3
- import '../chunk-R6LQRHPQ.mjs';
4
- import '../chunk-WCIQKO7W.mjs';
5
- import '../chunk-LS64Y25E.mjs';
3
+ import '../chunk-K7XOPTOE.mjs';
4
+ import '../chunk-BEHHWRZM.mjs';
5
+ import '../chunk-NPCWPOCE.mjs';
6
6
  import '../chunk-BEXTDHO4.mjs';
7
7
  //# sourceMappingURL=index.mjs.map
8
8
  //# sourceMappingURL=index.mjs.map
package/dist/index.js CHANGED
@@ -3,23 +3,23 @@
3
3
  var chunkJA77WXRE_js = require('./chunk-JA77WXRE.js');
4
4
  var chunkCIM5W3UO_js = require('./chunk-CIM5W3UO.js');
5
5
  var chunkGC3BC6HQ_js = require('./chunk-GC3BC6HQ.js');
6
- var chunkZ7HAQTWP_js = require('./chunk-Z7HAQTWP.js');
6
+ var chunkHYRKVST7_js = require('./chunk-HYRKVST7.js');
7
7
  require('./chunk-GCPPXUAI.js');
8
8
  var chunkEHJANA5C_js = require('./chunk-EHJANA5C.js');
9
9
  var chunkGSRT66PA_js = require('./chunk-GSRT66PA.js');
10
- var chunkHLCCE7BD_js = require('./chunk-HLCCE7BD.js');
11
- var chunkNDASB3X3_js = require('./chunk-NDASB3X3.js');
10
+ var chunk7YVFFQWH_js = require('./chunk-7YVFFQWH.js');
11
+ var chunkF46DCSUI_js = require('./chunk-F46DCSUI.js');
12
12
  require('./chunk-JP5WGL75.js');
13
- var chunkXOSAVYAI_js = require('./chunk-XOSAVYAI.js');
14
- var chunkVOMAEC5G_js = require('./chunk-VOMAEC5G.js');
13
+ var chunkXMZQUC2J_js = require('./chunk-XMZQUC2J.js');
14
+ var chunkPLY5AP72_js = require('./chunk-PLY5AP72.js');
15
15
  require('./chunk-EDZWNCSE.js');
16
- require('./chunk-AVWIKVVE.js');
16
+ require('./chunk-BUZSBUYJ.js');
17
17
  require('./chunk-HMFFAUCD.js');
18
18
  require('./chunk-RC4WWQXR.js');
19
19
  require('./chunk-VJMPIRSD.js');
20
- var chunkFFQAKIV5_js = require('./chunk-FFQAKIV5.js');
21
- require('./chunk-KFDFXRBE.js');
22
- require('./chunk-CBN73TLK.js');
20
+ var chunkXBKNPBRB_js = require('./chunk-XBKNPBRB.js');
21
+ require('./chunk-QQFWEHYU.js');
22
+ require('./chunk-UUBW2NJZ.js');
23
23
  require('./chunk-SNAQBZPT.js');
24
24
  var react = require('react');
25
25
  var jsxRuntime = require('react/jsx-runtime');
@@ -37,7 +37,7 @@ async function apiGet(endpoint) {
37
37
  return null;
38
38
  }
39
39
  try {
40
- const response = await chunkFFQAKIV5_js.sonorFetch(
40
+ const response = await chunkXBKNPBRB_js.sonorFetch(
41
41
  `${apiUrl}${endpoint}`,
42
42
  { method: "GET" },
43
43
  { apiKey, retries: 0 }
@@ -190,31 +190,31 @@ Object.defineProperty(exports, "handleManagedRedirects", {
190
190
  });
191
191
  Object.defineProperty(exports, "ManagedImage", {
192
192
  enumerable: true,
193
- get: function () { return chunkZ7HAQTWP_js.ManagedImage; }
193
+ get: function () { return chunkHYRKVST7_js.ManagedImage; }
194
194
  });
195
195
  Object.defineProperty(exports, "assignImageToSlot", {
196
196
  enumerable: true,
197
- get: function () { return chunkZ7HAQTWP_js.assignImageToSlot; }
197
+ get: function () { return chunkHYRKVST7_js.assignImageToSlot; }
198
198
  });
199
199
  Object.defineProperty(exports, "clearImageSlot", {
200
200
  enumerable: true,
201
- get: function () { return chunkZ7HAQTWP_js.clearImageSlot; }
201
+ get: function () { return chunkHYRKVST7_js.clearImageSlot; }
202
202
  });
203
203
  Object.defineProperty(exports, "fetchManagedImage", {
204
204
  enumerable: true,
205
- get: function () { return chunkZ7HAQTWP_js.fetchManagedImage; }
205
+ get: function () { return chunkHYRKVST7_js.fetchManagedImage; }
206
206
  });
207
207
  Object.defineProperty(exports, "fetchManagedImages", {
208
208
  enumerable: true,
209
- get: function () { return chunkZ7HAQTWP_js.fetchManagedImages; }
209
+ get: function () { return chunkHYRKVST7_js.fetchManagedImages; }
210
210
  });
211
211
  Object.defineProperty(exports, "listImageFiles", {
212
212
  enumerable: true,
213
- get: function () { return chunkZ7HAQTWP_js.listImageFiles; }
213
+ get: function () { return chunkHYRKVST7_js.listImageFiles; }
214
214
  });
215
215
  Object.defineProperty(exports, "uploadImage", {
216
216
  enumerable: true,
217
- get: function () { return chunkZ7HAQTWP_js.uploadImage; }
217
+ get: function () { return chunkHYRKVST7_js.uploadImage; }
218
218
  });
219
219
  Object.defineProperty(exports, "TestimonialSection", {
220
220
  enumerable: true,
@@ -230,187 +230,187 @@ Object.defineProperty(exports, "fetchReviews", {
230
230
  });
231
231
  Object.defineProperty(exports, "CalendarView", {
232
232
  enumerable: true,
233
- get: function () { return chunkHLCCE7BD_js.CalendarView; }
233
+ get: function () { return chunk7YVFFQWH_js.CalendarView; }
234
234
  });
235
235
  Object.defineProperty(exports, "CheckoutForm", {
236
236
  enumerable: true,
237
- get: function () { return chunkHLCCE7BD_js.CheckoutForm; }
237
+ get: function () { return chunk7YVFFQWH_js.CheckoutForm; }
238
238
  });
239
239
  Object.defineProperty(exports, "EventCalendar", {
240
240
  enumerable: true,
241
- get: function () { return chunkHLCCE7BD_js.EventCalendar; }
241
+ get: function () { return chunk7YVFFQWH_js.EventCalendar; }
242
242
  });
243
243
  Object.defineProperty(exports, "EventCheckout", {
244
244
  enumerable: true,
245
- get: function () { return chunkHLCCE7BD_js.EventCheckout; }
245
+ get: function () { return chunk7YVFFQWH_js.EventCheckout; }
246
246
  });
247
247
  Object.defineProperty(exports, "EventEmbed", {
248
248
  enumerable: true,
249
- get: function () { return chunkHLCCE7BD_js.EventEmbed; }
249
+ get: function () { return chunk7YVFFQWH_js.EventEmbed; }
250
250
  });
251
251
  Object.defineProperty(exports, "EventModal", {
252
252
  enumerable: true,
253
- get: function () { return chunkHLCCE7BD_js.EventModal; }
253
+ get: function () { return chunk7YVFFQWH_js.EventModal; }
254
254
  });
255
255
  Object.defineProperty(exports, "EventTile", {
256
256
  enumerable: true,
257
- get: function () { return chunkHLCCE7BD_js.EventTile; }
257
+ get: function () { return chunk7YVFFQWH_js.EventTile; }
258
258
  });
259
259
  Object.defineProperty(exports, "OfferingCard", {
260
260
  enumerable: true,
261
- get: function () { return chunkHLCCE7BD_js.OfferingCard; }
261
+ get: function () { return chunk7YVFFQWH_js.OfferingCard; }
262
262
  });
263
263
  Object.defineProperty(exports, "OfferingList", {
264
264
  enumerable: true,
265
- get: function () { return chunkHLCCE7BD_js.OfferingList; }
265
+ get: function () { return chunk7YVFFQWH_js.OfferingList; }
266
266
  });
267
267
  Object.defineProperty(exports, "ProductEmbed", {
268
268
  enumerable: true,
269
- get: function () { return chunkHLCCE7BD_js.ProductEmbed; }
269
+ get: function () { return chunk7YVFFQWH_js.ProductEmbed; }
270
270
  });
271
271
  Object.defineProperty(exports, "RegistrationForm", {
272
272
  enumerable: true,
273
- get: function () { return chunkHLCCE7BD_js.RegistrationForm; }
273
+ get: function () { return chunk7YVFFQWH_js.RegistrationForm; }
274
274
  });
275
275
  Object.defineProperty(exports, "UpcomingEvents", {
276
276
  enumerable: true,
277
- get: function () { return chunkHLCCE7BD_js.UpcomingEvents; }
277
+ get: function () { return chunk7YVFFQWH_js.UpcomingEvents; }
278
278
  });
279
279
  Object.defineProperty(exports, "createCheckoutSession", {
280
280
  enumerable: true,
281
- get: function () { return chunkHLCCE7BD_js.createCheckoutSession; }
281
+ get: function () { return chunk7YVFFQWH_js.createCheckoutSession; }
282
282
  });
283
283
  Object.defineProperty(exports, "fetchNextEvent", {
284
284
  enumerable: true,
285
- get: function () { return chunkHLCCE7BD_js.fetchNextEvent; }
285
+ get: function () { return chunk7YVFFQWH_js.fetchNextEvent; }
286
286
  });
287
287
  Object.defineProperty(exports, "fetchOffering", {
288
288
  enumerable: true,
289
- get: function () { return chunkHLCCE7BD_js.fetchOffering; }
289
+ get: function () { return chunk7YVFFQWH_js.fetchOffering; }
290
290
  });
291
291
  Object.defineProperty(exports, "fetchOfferings", {
292
292
  enumerable: true,
293
- get: function () { return chunkHLCCE7BD_js.fetchOfferings; }
293
+ get: function () { return chunk7YVFFQWH_js.fetchOfferings; }
294
294
  });
295
295
  Object.defineProperty(exports, "fetchProducts", {
296
296
  enumerable: true,
297
- get: function () { return chunkHLCCE7BD_js.fetchProducts; }
297
+ get: function () { return chunk7YVFFQWH_js.fetchProducts; }
298
298
  });
299
299
  Object.defineProperty(exports, "fetchServices", {
300
300
  enumerable: true,
301
- get: function () { return chunkHLCCE7BD_js.fetchServices; }
301
+ get: function () { return chunk7YVFFQWH_js.fetchServices; }
302
302
  });
303
303
  Object.defineProperty(exports, "fetchUpcomingEvents", {
304
304
  enumerable: true,
305
- get: function () { return chunkHLCCE7BD_js.fetchUpcomingEvents; }
305
+ get: function () { return chunk7YVFFQWH_js.fetchUpcomingEvents; }
306
306
  });
307
307
  Object.defineProperty(exports, "formatDate", {
308
308
  enumerable: true,
309
- get: function () { return chunkHLCCE7BD_js.formatDate; }
309
+ get: function () { return chunk7YVFFQWH_js.formatDate; }
310
310
  });
311
311
  Object.defineProperty(exports, "formatDateTime", {
312
312
  enumerable: true,
313
- get: function () { return chunkHLCCE7BD_js.formatDateTime; }
313
+ get: function () { return chunk7YVFFQWH_js.formatDateTime; }
314
314
  });
315
315
  Object.defineProperty(exports, "formatPrice", {
316
316
  enumerable: true,
317
- get: function () { return chunkHLCCE7BD_js.formatPrice; }
317
+ get: function () { return chunk7YVFFQWH_js.formatPrice; }
318
318
  });
319
319
  Object.defineProperty(exports, "getOfferingUrl", {
320
320
  enumerable: true,
321
- get: function () { return chunkHLCCE7BD_js.getOfferingUrl; }
321
+ get: function () { return chunk7YVFFQWH_js.getOfferingUrl; }
322
322
  });
323
323
  Object.defineProperty(exports, "registerForEvent", {
324
324
  enumerable: true,
325
- get: function () { return chunkHLCCE7BD_js.registerForEvent; }
325
+ get: function () { return chunk7YVFFQWH_js.registerForEvent; }
326
326
  });
327
327
  Object.defineProperty(exports, "useEventModal", {
328
328
  enumerable: true,
329
- get: function () { return chunkHLCCE7BD_js.useEventModal; }
329
+ get: function () { return chunk7YVFFQWH_js.useEventModal; }
330
330
  });
331
331
  Object.defineProperty(exports, "BookingWidget", {
332
332
  enumerable: true,
333
- get: function () { return chunkNDASB3X3_js.BookingWidget; }
333
+ get: function () { return chunkF46DCSUI_js.BookingWidget; }
334
334
  });
335
335
  Object.defineProperty(exports, "createBooking", {
336
336
  enumerable: true,
337
- get: function () { return chunkNDASB3X3_js.createBooking; }
337
+ get: function () { return chunkF46DCSUI_js.createBooking; }
338
338
  });
339
339
  Object.defineProperty(exports, "createSlotHold", {
340
340
  enumerable: true,
341
- get: function () { return chunkNDASB3X3_js.createSlotHold; }
341
+ get: function () { return chunkF46DCSUI_js.createSlotHold; }
342
342
  });
343
343
  Object.defineProperty(exports, "detectTimezone", {
344
344
  enumerable: true,
345
- get: function () { return chunkNDASB3X3_js.detectTimezone; }
345
+ get: function () { return chunkF46DCSUI_js.detectTimezone; }
346
346
  });
347
347
  Object.defineProperty(exports, "fetchAvailability", {
348
348
  enumerable: true,
349
- get: function () { return chunkNDASB3X3_js.fetchAvailability; }
349
+ get: function () { return chunkF46DCSUI_js.fetchAvailability; }
350
350
  });
351
351
  Object.defineProperty(exports, "fetchAvailableDates", {
352
352
  enumerable: true,
353
- get: function () { return chunkNDASB3X3_js.fetchAvailableDates; }
353
+ get: function () { return chunkF46DCSUI_js.fetchAvailableDates; }
354
354
  });
355
355
  Object.defineProperty(exports, "fetchBookingTypeDetails", {
356
356
  enumerable: true,
357
- get: function () { return chunkNDASB3X3_js.fetchBookingTypeDetails; }
357
+ get: function () { return chunkF46DCSUI_js.fetchBookingTypeDetails; }
358
358
  });
359
359
  Object.defineProperty(exports, "fetchBookingTypes", {
360
360
  enumerable: true,
361
- get: function () { return chunkNDASB3X3_js.fetchBookingTypes; }
361
+ get: function () { return chunkF46DCSUI_js.fetchBookingTypes; }
362
362
  });
363
363
  Object.defineProperty(exports, "formatBookingDate", {
364
364
  enumerable: true,
365
- get: function () { return chunkNDASB3X3_js.formatDate; }
365
+ get: function () { return chunkF46DCSUI_js.formatDate; }
366
366
  });
367
367
  Object.defineProperty(exports, "formatBookingTime", {
368
368
  enumerable: true,
369
- get: function () { return chunkNDASB3X3_js.formatTime; }
369
+ get: function () { return chunkF46DCSUI_js.formatTime; }
370
370
  });
371
371
  Object.defineProperty(exports, "formatDuration", {
372
372
  enumerable: true,
373
- get: function () { return chunkNDASB3X3_js.formatDuration; }
373
+ get: function () { return chunkF46DCSUI_js.formatDuration; }
374
374
  });
375
375
  Object.defineProperty(exports, "releaseSlotHold", {
376
376
  enumerable: true,
377
- get: function () { return chunkNDASB3X3_js.releaseSlotHold; }
377
+ get: function () { return chunkF46DCSUI_js.releaseSlotHold; }
378
378
  });
379
379
  Object.defineProperty(exports, "ExperimentConversion", {
380
380
  enumerable: true,
381
- get: function () { return chunkXOSAVYAI_js.ExperimentConversion; }
381
+ get: function () { return chunkXMZQUC2J_js.ExperimentConversion; }
382
382
  });
383
383
  Object.defineProperty(exports, "SignalExperiment", {
384
384
  enumerable: true,
385
- get: function () { return chunkXOSAVYAI_js.SignalExperiment; }
385
+ get: function () { return chunkXMZQUC2J_js.SignalExperiment; }
386
386
  });
387
387
  Object.defineProperty(exports, "useExperimentVariant", {
388
388
  enumerable: true,
389
- get: function () { return chunkXOSAVYAI_js.useExperimentVariant; }
389
+ get: function () { return chunkXMZQUC2J_js.useExperimentVariant; }
390
390
  });
391
391
  Object.defineProperty(exports, "SignalBridge", {
392
392
  enumerable: true,
393
- get: function () { return chunkVOMAEC5G_js.SignalBridge; }
393
+ get: function () { return chunkPLY5AP72_js.SignalBridge; }
394
394
  });
395
395
  Object.defineProperty(exports, "useSignal", {
396
396
  enumerable: true,
397
- get: function () { return chunkVOMAEC5G_js.useSignal; }
397
+ get: function () { return chunkPLY5AP72_js.useSignal; }
398
398
  });
399
399
  Object.defineProperty(exports, "useSignalConfig", {
400
400
  enumerable: true,
401
- get: function () { return chunkVOMAEC5G_js.useSignalConfig; }
401
+ get: function () { return chunkPLY5AP72_js.useSignalConfig; }
402
402
  });
403
403
  Object.defineProperty(exports, "useSignalEvent", {
404
404
  enumerable: true,
405
- get: function () { return chunkVOMAEC5G_js.useSignalEvent; }
405
+ get: function () { return chunkPLY5AP72_js.useSignalEvent; }
406
406
  });
407
407
  Object.defineProperty(exports, "useSignalExperiment", {
408
408
  enumerable: true,
409
- get: function () { return chunkVOMAEC5G_js.useSignalExperiment; }
409
+ get: function () { return chunkPLY5AP72_js.useSignalExperiment; }
410
410
  });
411
411
  Object.defineProperty(exports, "useSignalOutcome", {
412
412
  enumerable: true,
413
- get: function () { return chunkVOMAEC5G_js.useSignalOutcome; }
413
+ get: function () { return chunkPLY5AP72_js.useSignalOutcome; }
414
414
  });
415
415
  exports.AffiliateCard = AffiliateCard;
416
416
  exports.AffiliatesWidget = AffiliatesWidget;
package/dist/index.mjs CHANGED
@@ -1,23 +1,23 @@
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-KRARQ2ZF.mjs';
4
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from './chunk-DSECSIWJ.mjs';
4
+ export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from './chunk-WNK2OK5G.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-DYDAV4Y4.mjs';
9
- export { BookingWidget, createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate as formatBookingDate, formatTime as formatBookingTime, formatDuration, releaseSlotHold } from './chunk-SDBUPTF4.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-7723NZQW.mjs';
9
+ export { BookingWidget, createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate as formatBookingDate, formatTime as formatBookingTime, formatDuration, releaseSlotHold } from './chunk-MOKM6STG.mjs';
10
10
  import './chunk-B22WSN4L.mjs';
11
- export { ExperimentConversion, SignalExperiment, useExperimentVariant } from './chunk-DNEUGYTE.mjs';
12
- export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from './chunk-XZCZCND2.mjs';
11
+ export { ExperimentConversion, SignalExperiment, useExperimentVariant } from './chunk-4E7NFYL5.mjs';
12
+ export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from './chunk-YV2TG7JR.mjs';
13
13
  import './chunk-26JXNW7B.mjs';
14
- import './chunk-4HNFMOYE.mjs';
14
+ import './chunk-W3QLA5MI.mjs';
15
15
  import './chunk-3DPXOZAU.mjs';
16
16
  import './chunk-ZZQAGCSI.mjs';
17
17
  import './chunk-6EDVCUAG.mjs';
18
- import { sonorFetch } from './chunk-R6LQRHPQ.mjs';
19
- import './chunk-WCIQKO7W.mjs';
20
- import './chunk-LS64Y25E.mjs';
18
+ import { sonorFetch } from './chunk-K7XOPTOE.mjs';
19
+ import './chunk-BEHHWRZM.mjs';
20
+ import './chunk-NPCWPOCE.mjs';
21
21
  import './chunk-BEXTDHO4.mjs';
22
22
  import { useState, useEffect } from 'react';
23
23
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -30,6 +30,13 @@ export interface SiteKitClientProvidersProps {
30
30
  analytics?: boolean | AnalyticsConfig;
31
31
  engage?: boolean | EngageConfig;
32
32
  signal?: boolean | SignalConfig;
33
+ /**
34
+ * Runtime SitemapSync from the visitor's browser. Default FALSE — sitemap
35
+ * registration belongs to build time and to sonor-api's nightly reconciler,
36
+ * not to whoever happens to load the page. See SiteKitLayout for the full
37
+ * reasoning; in short, its guards live in session/localStorage, so every new
38
+ * visitor missed them and re-POSTed the whole sitemap.
39
+ */
33
40
  sitemapSync?: boolean;
34
41
  /**
35
42
  * Fleet heartbeat — reports kit version + active modules to Sonor once per
@@ -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,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,WAAkB,EAClB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBAuJ7B"}
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,qBAuJ7B"}