@sonordev/site-kit 5.8.0 → 5.8.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 (454) hide show
  1. package/agent-manifest.json +1 -1
  2. package/dist/{AnalyticsProvider-OCXRNIVE.js → AnalyticsProvider-4JV3OFCG.js} +10 -10
  3. package/dist/{AnalyticsProvider-OCXRNIVE.js.map → AnalyticsProvider-4JV3OFCG.js.map} +1 -1
  4. package/dist/{AnalyticsProvider-ZAUONQCX.mjs → AnalyticsProvider-LUEUDZZC.mjs} +6 -6
  5. package/dist/{AnalyticsProvider-ZAUONQCX.mjs.map → AnalyticsProvider-LUEUDZZC.mjs.map} +1 -1
  6. package/dist/{BlogViewTracker-HK5C7PU6.js → BlogViewTracker-32C4SCHA.js} +6 -6
  7. package/dist/{BlogViewTracker-HK5C7PU6.js.map → BlogViewTracker-32C4SCHA.js.map} +1 -1
  8. package/dist/{BlogViewTracker-KXRZHN3U.mjs → BlogViewTracker-YQMTEGYZ.mjs} +5 -5
  9. package/dist/{BlogViewTracker-KXRZHN3U.mjs.map → BlogViewTracker-YQMTEGYZ.mjs.map} +1 -1
  10. package/dist/ChatWidget-IRTAMRQS.mjs +15 -0
  11. package/dist/{ChatWidget-54GVS27I.mjs.map → ChatWidget-IRTAMRQS.mjs.map} +1 -1
  12. package/dist/ChatWidget-KCXQXNUF.js +24 -0
  13. package/dist/{ChatWidget-3OW5LY37.js.map → ChatWidget-KCXQXNUF.js.map} +1 -1
  14. package/dist/EngageWidget-7AIUJRXV.mjs +12 -0
  15. package/dist/{EngageWidget-7EUP76WE.mjs.map → EngageWidget-7AIUJRXV.mjs.map} +1 -1
  16. package/dist/EngageWidget-EUUZHQOU.js +21 -0
  17. package/dist/{EngageWidget-DDP5UFA4.js.map → EngageWidget-EUUZHQOU.js.map} +1 -1
  18. package/dist/{FileField-SBPL4JHP.js → FileField-SNI5XCHQ.js} +6 -6
  19. package/dist/{FileField-SBPL4JHP.js.map → FileField-SNI5XCHQ.js.map} +1 -1
  20. package/dist/{FileField-IQLN6E3C.mjs → FileField-XJYJO5HE.mjs} +5 -5
  21. package/dist/{FileField-IQLN6E3C.mjs.map → FileField-XJYJO5HE.mjs.map} +1 -1
  22. package/dist/{FormSpotlight-E2LKKHGV.mjs → FormSpotlight-BCXI4A4R.mjs} +3 -3
  23. package/dist/{FormSpotlight-E2LKKHGV.mjs.map → FormSpotlight-BCXI4A4R.mjs.map} +1 -1
  24. package/dist/{FormSpotlight-YTACNE57.js → FormSpotlight-S64G4CMM.js} +9 -9
  25. package/dist/{FormSpotlight-YTACNE57.js.map → FormSpotlight-S64G4CMM.js.map} +1 -1
  26. package/dist/{FormStage-S277U2CP.js → FormStage-PX5TVY25.js} +9 -9
  27. package/dist/{FormStage-S277U2CP.js.map → FormStage-PX5TVY25.js.map} +1 -1
  28. package/dist/{FormStage-YSBN5XKL.mjs → FormStage-RHARCSPS.mjs} +3 -3
  29. package/dist/{FormStage-YSBN5XKL.mjs.map → FormStage-RHARCSPS.mjs.map} +1 -1
  30. package/dist/ManagedForm-7IDXBQS6.mjs +16 -0
  31. package/dist/{ManagedForm-I3QVRQ53.mjs.map → ManagedForm-7IDXBQS6.mjs.map} +1 -1
  32. package/dist/ManagedForm-RI2TSUZD.js +25 -0
  33. package/dist/{ManagedForm-TSYKQFLJ.js.map → ManagedForm-RI2TSUZD.js.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-YSOPPKS6.js → ManagedNewsletterForm-IAGIHBNT.js} +8 -8
  35. package/dist/{ManagedNewsletterForm-YSOPPKS6.js.map → ManagedNewsletterForm-IAGIHBNT.js.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-T3YRAWKZ.mjs → ManagedNewsletterForm-UXBJ5OJB.mjs} +7 -7
  37. package/dist/{ManagedNewsletterForm-T3YRAWKZ.mjs.map → ManagedNewsletterForm-UXBJ5OJB.mjs.map} +1 -1
  38. package/dist/{SignalCore-PPSIQ4BW.mjs → SignalCore-37WGILFY.mjs} +5 -5
  39. package/dist/{SignalCore-PPSIQ4BW.mjs.map → SignalCore-37WGILFY.mjs.map} +1 -1
  40. package/dist/{SignalCore-SUZH3XWZ.js → SignalCore-Q2BQMPCJ.js} +11 -11
  41. package/dist/{SignalCore-SUZH3XWZ.js.map → SignalCore-Q2BQMPCJ.js.map} +1 -1
  42. package/dist/SitemapSync-DWEL7HTB.js +18 -0
  43. package/dist/{SitemapSync-LH6UVP4P.js.map → SitemapSync-DWEL7HTB.js.map} +1 -1
  44. package/dist/SitemapSync-YIAI7PMT.mjs +9 -0
  45. package/dist/{SitemapSync-HSHCOKCL.mjs.map → SitemapSync-YIAI7PMT.mjs.map} +1 -1
  46. package/dist/analytics/index.js +9 -9
  47. package/dist/analytics/index.mjs +4 -4
  48. package/dist/api-D745LGGU.mjs +0 -1
  49. package/dist/api-XR5APCH3.js +0 -1
  50. package/dist/blog/index.js +17 -17
  51. package/dist/blog/index.mjs +3 -3
  52. package/dist/blog/server-ui.js +14 -14
  53. package/dist/blog/server-ui.mjs +2 -2
  54. package/dist/{chunk-7THZOAUR.mjs → chunk-3EXBBFXX.mjs} +4 -4
  55. package/dist/{chunk-7THZOAUR.mjs.map → chunk-3EXBBFXX.mjs.map} +1 -1
  56. package/dist/{chunk-LBZGYF3B.js → chunk-3HGHWDCY.js} +4 -4
  57. package/dist/{chunk-LBZGYF3B.js.map → chunk-3HGHWDCY.js.map} +1 -1
  58. package/dist/{chunk-4RY7JETY.js → chunk-3Y7IKQDD.js} +14 -14
  59. package/dist/{chunk-4RY7JETY.js.map → chunk-3Y7IKQDD.js.map} +1 -1
  60. package/dist/{chunk-XCYKM2SA.js → chunk-3Z3TOPND.js} +3 -3
  61. package/dist/{chunk-XCYKM2SA.js.map → chunk-3Z3TOPND.js.map} +1 -1
  62. package/dist/{chunk-B35OJ7FR.mjs → chunk-4PXUMDHL.mjs} +3 -3
  63. package/dist/{chunk-B35OJ7FR.mjs.map → chunk-4PXUMDHL.mjs.map} +1 -1
  64. package/dist/{chunk-6SBTHS6C.mjs → chunk-5BZNVKNK.mjs} +3 -3
  65. package/dist/{chunk-6SBTHS6C.mjs.map → chunk-5BZNVKNK.mjs.map} +1 -1
  66. package/dist/chunk-5YA6SI4Z.mjs +0 -1
  67. package/dist/{chunk-TXMVU4EY.mjs → chunk-6FTC6EYD.mjs} +7 -7
  68. package/dist/{chunk-TXMVU4EY.mjs.map → chunk-6FTC6EYD.mjs.map} +1 -1
  69. package/dist/{chunk-QTJTDQYR.js → chunk-73EBIAF3.js} +18 -18
  70. package/dist/{chunk-QTJTDQYR.js.map → chunk-73EBIAF3.js.map} +1 -1
  71. package/dist/{chunk-UWHCHYCX.js → chunk-7BI2RVQD.js} +4 -4
  72. package/dist/{chunk-UWHCHYCX.js.map → chunk-7BI2RVQD.js.map} +1 -1
  73. package/dist/{chunk-B2VFMPVJ.mjs → chunk-7SLYI62M.mjs} +4 -4
  74. package/dist/{chunk-B2VFMPVJ.mjs.map → chunk-7SLYI62M.mjs.map} +1 -1
  75. package/dist/{chunk-L24RDT6Q.mjs → chunk-AHKVOYFO.mjs} +3 -3
  76. package/dist/{chunk-L24RDT6Q.mjs.map → chunk-AHKVOYFO.mjs.map} +1 -1
  77. package/dist/{chunk-HCX343AS.mjs → chunk-ALVQOG4M.mjs} +3 -3
  78. package/dist/{chunk-HCX343AS.mjs.map → chunk-ALVQOG4M.mjs.map} +1 -1
  79. package/dist/{chunk-HEOQT5SM.mjs → chunk-AUTJQGZ2.mjs} +43 -11
  80. package/dist/chunk-AUTJQGZ2.mjs.map +1 -0
  81. package/dist/{chunk-F6SKG34N.js → chunk-D7CF3OPZ.js} +5 -5
  82. package/dist/{chunk-F6SKG34N.js.map → chunk-D7CF3OPZ.js.map} +1 -1
  83. package/dist/{chunk-BER36QXU.js → chunk-DTWR7VRQ.js} +5 -5
  84. package/dist/{chunk-BER36QXU.js.map → chunk-DTWR7VRQ.js.map} +1 -1
  85. package/dist/{chunk-QVHVL7EX.mjs → chunk-EZ5DX7ED.mjs} +3 -3
  86. package/dist/{chunk-QVHVL7EX.mjs.map → chunk-EZ5DX7ED.mjs.map} +1 -1
  87. package/dist/{chunk-HAKD27AZ.js → chunk-F2ZFMPW4.js} +7 -7
  88. package/dist/{chunk-HAKD27AZ.js.map → chunk-F2ZFMPW4.js.map} +1 -1
  89. package/dist/{chunk-6HFFTGFP.mjs → chunk-FWFJZV52.mjs} +4 -4
  90. package/dist/{chunk-6HFFTGFP.mjs.map → chunk-FWFJZV52.mjs.map} +1 -1
  91. package/dist/{chunk-AOWJP25J.mjs → chunk-FX232N4P.mjs} +4 -4
  92. package/dist/{chunk-AOWJP25J.mjs.map → chunk-FX232N4P.mjs.map} +1 -1
  93. package/dist/{chunk-PRTXAIIC.js → chunk-GDH42JAS.js} +15 -15
  94. package/dist/{chunk-PRTXAIIC.js.map → chunk-GDH42JAS.js.map} +1 -1
  95. package/dist/{chunk-EIW6YEPY.js → chunk-GKVEWOYN.js} +8 -8
  96. package/dist/{chunk-EIW6YEPY.js.map → chunk-GKVEWOYN.js.map} +1 -1
  97. package/dist/{chunk-C3WU45JT.js → chunk-HQ2EPU5R.js} +5 -5
  98. package/dist/{chunk-C3WU45JT.js.map → chunk-HQ2EPU5R.js.map} +1 -1
  99. package/dist/chunk-I7AZC5ZQ.js +0 -1
  100. package/dist/chunk-JOYMIGR2.mjs +0 -1
  101. package/dist/{chunk-35ERUUH3.js → chunk-JR2FT6T5.js} +6 -6
  102. package/dist/{chunk-35ERUUH3.js.map → chunk-JR2FT6T5.js.map} +1 -1
  103. package/dist/chunk-JS75ORH7.js +0 -1
  104. package/dist/{chunk-GNDWTXLU.js → chunk-KPWK23G7.js} +3 -3
  105. package/dist/{chunk-GNDWTXLU.js.map → chunk-KPWK23G7.js.map} +1 -1
  106. package/dist/{chunk-2SCDUVFJ.js → chunk-LUF22UGR.js} +8 -8
  107. package/dist/{chunk-2SCDUVFJ.js.map → chunk-LUF22UGR.js.map} +1 -1
  108. package/dist/{chunk-VYL6IHJA.mjs → chunk-NHX6YJ7G.mjs} +8 -8
  109. package/dist/{chunk-VYL6IHJA.mjs.map → chunk-NHX6YJ7G.mjs.map} +1 -1
  110. package/dist/{chunk-O5ZSGBQD.mjs → chunk-NM567VXC.mjs} +4 -4
  111. package/dist/{chunk-O5ZSGBQD.mjs.map → chunk-NM567VXC.mjs.map} +1 -1
  112. package/dist/chunk-NN2YE5WT.js +0 -1
  113. package/dist/chunk-NNZDWY3L.mjs +0 -1
  114. package/dist/{chunk-2FQG2AHJ.js → chunk-OBNMSO66.js} +14 -14
  115. package/dist/{chunk-2FQG2AHJ.js.map → chunk-OBNMSO66.js.map} +1 -1
  116. package/dist/{chunk-HYVEIP2N.mjs → chunk-OX2GTNMB.mjs} +3 -3
  117. package/dist/{chunk-HYVEIP2N.mjs.map → chunk-OX2GTNMB.mjs.map} +1 -1
  118. package/dist/{chunk-YECDJDDD.js → chunk-PXK4WNSU.js} +10 -10
  119. package/dist/{chunk-YECDJDDD.js.map → chunk-PXK4WNSU.js.map} +1 -1
  120. package/dist/{chunk-2OQWLXDO.js → chunk-PXWYMOZY.js} +11 -11
  121. package/dist/{chunk-2OQWLXDO.js.map → chunk-PXWYMOZY.js.map} +1 -1
  122. package/dist/{chunk-3SLFT453.mjs → chunk-QK54SZPF.mjs} +4 -4
  123. package/dist/{chunk-3SLFT453.mjs.map → chunk-QK54SZPF.mjs.map} +1 -1
  124. package/dist/{chunk-JDTU2RWC.js → chunk-QWXTQC3N.js} +3 -3
  125. package/dist/{chunk-JDTU2RWC.js.map → chunk-QWXTQC3N.js.map} +1 -1
  126. package/dist/{chunk-VJ74275U.mjs → chunk-RA4DCRMR.mjs} +3 -3
  127. package/dist/{chunk-VJ74275U.mjs.map → chunk-RA4DCRMR.mjs.map} +1 -1
  128. package/dist/{chunk-N2NZBPQ5.mjs → chunk-RI25UGHE.mjs} +3 -3
  129. package/dist/{chunk-N2NZBPQ5.mjs.map → chunk-RI25UGHE.mjs.map} +1 -1
  130. package/dist/{chunk-3AUFD7KR.mjs → chunk-RQOKQC7J.mjs} +3 -3
  131. package/dist/{chunk-3AUFD7KR.mjs.map → chunk-RQOKQC7J.mjs.map} +1 -1
  132. package/dist/{chunk-PUAXHYBL.mjs → chunk-SCVSPTXJ.mjs} +3 -3
  133. package/dist/{chunk-PUAXHYBL.mjs.map → chunk-SCVSPTXJ.mjs.map} +1 -1
  134. package/dist/{chunk-5WGMXSCB.mjs → chunk-SJPI34DL.mjs} +3 -3
  135. package/dist/{chunk-5WGMXSCB.mjs.map → chunk-SJPI34DL.mjs.map} +1 -1
  136. package/dist/chunk-TAPCWMBV.mjs +6 -0
  137. package/dist/{chunk-HRMGITUZ.mjs.map → chunk-TAPCWMBV.mjs.map} +1 -1
  138. package/dist/{chunk-BFZNLTWK.mjs → chunk-TCVOGK6U.mjs} +3 -3
  139. package/dist/{chunk-BFZNLTWK.mjs.map → chunk-TCVOGK6U.mjs.map} +1 -1
  140. package/dist/chunk-TJVZEDE3.js +8 -0
  141. package/dist/{chunk-5O7JSWT6.js.map → chunk-TJVZEDE3.js.map} +1 -1
  142. package/dist/{chunk-4OS6M3V4.js → chunk-U5WMGUDV.js} +4 -4
  143. package/dist/{chunk-4OS6M3V4.js.map → chunk-U5WMGUDV.js.map} +1 -1
  144. package/dist/{chunk-HQOHB6QF.js → chunk-U6O5NG56.js} +15 -15
  145. package/dist/{chunk-HQOHB6QF.js.map → chunk-U6O5NG56.js.map} +1 -1
  146. package/dist/{chunk-O4YBWJHP.mjs → chunk-X6NPTILR.mjs} +3 -3
  147. package/dist/{chunk-O4YBWJHP.mjs.map → chunk-X6NPTILR.mjs.map} +1 -1
  148. package/dist/{chunk-ZEOC26LZ.js → chunk-YC2CKOX6.js} +51 -19
  149. package/dist/chunk-YC2CKOX6.js.map +1 -0
  150. package/dist/{chunk-PK2OTGW5.mjs → chunk-YVQNOB3Q.mjs} +3 -3
  151. package/dist/{chunk-PK2OTGW5.mjs.map → chunk-YVQNOB3Q.mjs.map} +1 -1
  152. package/dist/{chunk-3BVCF4ZF.js → chunk-ZDXY44FH.js} +4 -4
  153. package/dist/{chunk-3BVCF4ZF.js.map → chunk-ZDXY44FH.js.map} +1 -1
  154. package/dist/{chunk-MHX6TOAS.js → chunk-ZTY4YS7Q.js} +3 -3
  155. package/dist/{chunk-MHX6TOAS.js.map → chunk-ZTY4YS7Q.js.map} +1 -1
  156. package/dist/cli/index.js +3 -4
  157. package/dist/cli/index.mjs +1 -2
  158. package/dist/client/index.js +4 -4
  159. package/dist/client/index.mjs +3 -3
  160. package/dist/commerce/index.js +57 -57
  161. package/dist/commerce/index.mjs +5 -5
  162. package/dist/engage/index.js +10 -10
  163. package/dist/engage/index.mjs +7 -7
  164. package/dist/fleet/index.js +8 -8
  165. package/dist/fleet/index.mjs +4 -4
  166. package/dist/forms/form-values.d.ts +47 -0
  167. package/dist/forms/form-values.d.ts.map +1 -0
  168. package/dist/forms/index.js +16 -16
  169. package/dist/forms/index.mjs +9 -9
  170. package/dist/forms/server.js +10 -10
  171. package/dist/forms/server.mjs +8 -8
  172. package/dist/forms/static.js +7 -7
  173. package/dist/forms/static.mjs +6 -6
  174. package/dist/forms/useForm.d.ts.map +1 -1
  175. package/dist/images/index.js +11 -11
  176. package/dist/images/index.mjs +4 -4
  177. package/dist/index.js +63 -63
  178. package/dist/index.mjs +9 -9
  179. package/dist/layout/client.js +8 -8
  180. package/dist/layout/client.mjs +7 -7
  181. package/dist/layout/index.js +10 -10
  182. package/dist/layout/index.mjs +8 -8
  183. package/dist/lib-6HOOMENJ.js +0 -1
  184. package/dist/lib-BGAWCSUH.js +0 -1
  185. package/dist/lib-R7IQ4ZHE.mjs +0 -1
  186. package/dist/lib-RSDMEKDQ.mjs +0 -1
  187. package/dist/maps/index.js +5 -5
  188. package/dist/maps/index.mjs +3 -3
  189. package/dist/search/index.js +4 -4
  190. package/dist/search/index.mjs +3 -3
  191. package/dist/seo/client.js +5 -5
  192. package/dist/seo/client.mjs +4 -4
  193. package/dist/seo/index.js +5 -5
  194. package/dist/seo/index.mjs +4 -4
  195. package/dist/seo/register-sitemap-cli.js +0 -1
  196. package/dist/seo/register-sitemap-cli.mjs +0 -1
  197. package/dist/server/index.js +3 -3
  198. package/dist/server/index.mjs +2 -2
  199. package/dist/shared/version.d.ts +1 -1
  200. package/dist/signal/index.js +11 -11
  201. package/dist/signal/index.mjs +2 -2
  202. package/dist/sync/index.js +17 -17
  203. package/dist/sync/index.mjs +4 -4
  204. package/dist/writeLLMsTxt-CQ7A4AAL.js +0 -1
  205. package/dist/writeLLMsTxt-NX5MSPYX.mjs +0 -1
  206. package/package.json +21 -19
  207. package/dist/ChatWidget-3OW5LY37.js +0 -24
  208. package/dist/ChatWidget-54GVS27I.mjs +0 -15
  209. package/dist/EngageWidget-7EUP76WE.mjs +0 -12
  210. package/dist/EngageWidget-DDP5UFA4.js +0 -21
  211. package/dist/ManagedForm-I3QVRQ53.mjs +0 -16
  212. package/dist/ManagedForm-TSYKQFLJ.js +0 -25
  213. package/dist/SitemapSync-HSHCOKCL.mjs +0 -9
  214. package/dist/SitemapSync-LH6UVP4P.js +0 -18
  215. package/dist/analytics/send-gate.test.d.ts +0 -20
  216. package/dist/analytics/send-gate.test.d.ts.map +0 -1
  217. package/dist/api-D745LGGU.mjs.map +0 -1
  218. package/dist/api-XR5APCH3.js.map +0 -1
  219. package/dist/blog/artwork-components.test.d.ts +0 -2
  220. package/dist/blog/artwork-components.test.d.ts.map +0 -1
  221. package/dist/blog/artwork.test.d.ts +0 -2
  222. package/dist/blog/artwork.test.d.ts.map +0 -1
  223. package/dist/blog/author-social.test.d.ts +0 -2
  224. package/dist/blog/author-social.test.d.ts.map +0 -1
  225. package/dist/blog/blog-tables.test.d.ts +0 -2
  226. package/dist/blog/blog-tables.test.d.ts.map +0 -1
  227. package/dist/blog/blog-view-tracker.test.d.ts +0 -2
  228. package/dist/blog/blog-view-tracker.test.d.ts.map +0 -1
  229. package/dist/blog/category-metadata.test.d.ts +0 -2
  230. package/dist/blog/category-metadata.test.d.ts.map +0 -1
  231. package/dist/blog/metadata-images.test.d.ts +0 -2
  232. package/dist/blog/metadata-images.test.d.ts.map +0 -1
  233. package/dist/blog/newsletter-widget.test.d.ts +0 -2
  234. package/dist/blog/newsletter-widget.test.d.ts.map +0 -1
  235. package/dist/blog/not-found.test.d.ts +0 -2
  236. package/dist/blog/not-found.test.d.ts.map +0 -1
  237. package/dist/blog/publication-render.test.d.ts +0 -2
  238. package/dist/blog/publication-render.test.d.ts.map +0 -1
  239. package/dist/blog/publication-routes.test.d.ts +0 -2
  240. package/dist/blog/publication-routes.test.d.ts.map +0 -1
  241. package/dist/blog/reading-time.test.d.ts +0 -2
  242. package/dist/blog/reading-time.test.d.ts.map +0 -1
  243. package/dist/blog/sanitize-excerpt.test.d.ts +0 -2
  244. package/dist/blog/sanitize-excerpt.test.d.ts.map +0 -1
  245. package/dist/blog/server-core-contract.test.d.ts +0 -2
  246. package/dist/blog/server-core-contract.test.d.ts.map +0 -1
  247. package/dist/blog/site-scope.test.d.ts +0 -2
  248. package/dist/blog/site-scope.test.d.ts.map +0 -1
  249. package/dist/blog/static-params.test.d.ts +0 -2
  250. package/dist/blog/static-params.test.d.ts.map +0 -1
  251. package/dist/blog/tag-links.test.d.ts +0 -2
  252. package/dist/blog/tag-links.test.d.ts.map +0 -1
  253. package/dist/blog/types-wire-shape.test.d.ts +0 -2
  254. package/dist/blog/types-wire-shape.test.d.ts.map +0 -1
  255. package/dist/brand/extract-brand-profile.test.d.ts +0 -2
  256. package/dist/brand/extract-brand-profile.test.d.ts.map +0 -1
  257. package/dist/brand/status-contrast.test.d.ts +0 -2
  258. package/dist/brand/status-contrast.test.d.ts.map +0 -1
  259. package/dist/chunk-5O7JSWT6.js +0 -8
  260. package/dist/chunk-5YA6SI4Z.mjs.map +0 -1
  261. package/dist/chunk-HEOQT5SM.mjs.map +0 -1
  262. package/dist/chunk-HRMGITUZ.mjs +0 -6
  263. package/dist/chunk-I7AZC5ZQ.js.map +0 -1
  264. package/dist/chunk-JOYMIGR2.mjs.map +0 -1
  265. package/dist/chunk-JS75ORH7.js.map +0 -1
  266. package/dist/chunk-NN2YE5WT.js.map +0 -1
  267. package/dist/chunk-NNZDWY3L.mjs.map +0 -1
  268. package/dist/chunk-ZEOC26LZ.js.map +0 -1
  269. package/dist/cli/agent/envelope.test.d.ts +0 -2
  270. package/dist/cli/agent/envelope.test.d.ts.map +0 -1
  271. package/dist/cli/agent/sitemap-trailing-slash.test.d.ts +0 -2
  272. package/dist/cli/agent/sitemap-trailing-slash.test.d.ts.map +0 -1
  273. package/dist/cli/agent/ssr-bailout.test.d.ts +0 -2
  274. package/dist/cli/agent/ssr-bailout.test.d.ts.map +0 -1
  275. package/dist/cli/codemod/diff.test.d.ts +0 -2
  276. package/dist/cli/codemod/diff.test.d.ts.map +0 -1
  277. package/dist/cli/codemod/transforms.test.d.ts +0 -2
  278. package/dist/cli/codemod/transforms.test.d.ts.map +0 -1
  279. package/dist/cli/commands/config-regression.test.d.ts +0 -2
  280. package/dist/cli/commands/config-regression.test.d.ts.map +0 -1
  281. package/dist/cli/commands/geo.test.d.ts +0 -2
  282. package/dist/cli/commands/geo.test.d.ts.map +0 -1
  283. package/dist/cli/commands/og.test.d.ts +0 -2
  284. package/dist/cli/commands/og.test.d.ts.map +0 -1
  285. package/dist/cli/config.test.d.ts +0 -2
  286. package/dist/cli/config.test.d.ts.map +0 -1
  287. package/dist/cli/generators/index.test.d.ts +0 -2
  288. package/dist/cli/generators/index.test.d.ts.map +0 -1
  289. package/dist/cli/index.js.map +0 -1
  290. package/dist/cli/index.mjs.map +0 -1
  291. package/dist/cli/state.test.d.ts +0 -2
  292. package/dist/cli/state.test.d.ts.map +0 -1
  293. package/dist/commerce/discount-checkout.test.d.ts +0 -2
  294. package/dist/commerce/discount-checkout.test.d.ts.map +0 -1
  295. package/dist/commerce/events-extras.test.d.ts +0 -2
  296. package/dist/commerce/events-extras.test.d.ts.map +0 -1
  297. package/dist/commerce/server-result.test.d.ts +0 -2
  298. package/dist/commerce/server-result.test.d.ts.map +0 -1
  299. package/dist/engage/chat-launcher.test.d.ts +0 -2
  300. package/dist/engage/chat-launcher.test.d.ts.map +0 -1
  301. package/dist/engage/dependency-contract.test.d.ts +0 -2
  302. package/dist/engage/dependency-contract.test.d.ts.map +0 -1
  303. package/dist/engage/launcher-placement.test.d.ts +0 -2
  304. package/dist/engage/launcher-placement.test.d.ts.map +0 -1
  305. package/dist/fleet/contract.test.d.ts +0 -2
  306. package/dist/fleet/contract.test.d.ts.map +0 -1
  307. package/dist/fleet/heartbeat.test.d.ts +0 -2
  308. package/dist/fleet/heartbeat.test.d.ts.map +0 -1
  309. package/dist/forms/contract.test.d.ts +0 -2
  310. package/dist/forms/contract.test.d.ts.map +0 -1
  311. package/dist/forms/field-interactions.test.d.ts +0 -8
  312. package/dist/forms/field-interactions.test.d.ts.map +0 -1
  313. package/dist/forms/field-rules.test.d.ts +0 -8
  314. package/dist/forms/field-rules.test.d.ts.map +0 -1
  315. package/dist/forms/form-field-focus.test.d.ts +0 -8
  316. package/dist/forms/form-field-focus.test.d.ts.map +0 -1
  317. package/dist/forms/ga4-identity.test.d.ts +0 -2
  318. package/dist/forms/ga4-identity.test.d.ts.map +0 -1
  319. package/dist/forms/native-fallback.test.d.ts +0 -2
  320. package/dist/forms/native-fallback.test.d.ts.map +0 -1
  321. package/dist/forms/stage.test.d.ts +0 -2
  322. package/dist/forms/stage.test.d.ts.map +0 -1
  323. package/dist/forms/static-form.test.d.ts +0 -2
  324. package/dist/forms/static-form.test.d.ts.map +0 -1
  325. package/dist/forms/tracking-session.test.d.ts +0 -22
  326. package/dist/forms/tracking-session.test.d.ts.map +0 -1
  327. package/dist/landing/contract.test.d.ts +0 -2
  328. package/dist/landing/contract.test.d.ts.map +0 -1
  329. package/dist/landing/server-entry.test.d.ts +0 -2
  330. package/dist/landing/server-entry.test.d.ts.map +0 -1
  331. package/dist/lib-6HOOMENJ.js.map +0 -1
  332. package/dist/lib-BGAWCSUH.js.map +0 -1
  333. package/dist/lib-R7IQ4ZHE.mjs.map +0 -1
  334. package/dist/lib-RSDMEKDQ.mjs.map +0 -1
  335. package/dist/llms/aiRobots.test.d.ts +0 -2
  336. package/dist/llms/aiRobots.test.d.ts.map +0 -1
  337. package/dist/llms/contract.test.d.ts +0 -2
  338. package/dist/llms/contract.test.d.ts.map +0 -1
  339. package/dist/llms/discovery-headers.test.d.ts +0 -2
  340. package/dist/llms/discovery-headers.test.d.ts.map +0 -1
  341. package/dist/llms/generateLLMsTxt.test.d.ts +0 -2
  342. package/dist/llms/generateLLMsTxt.test.d.ts.map +0 -1
  343. package/dist/llms/handlers.test.d.ts +0 -2
  344. package/dist/llms/handlers.test.d.ts.map +0 -1
  345. package/dist/llms/humanize-industry.test.d.ts +0 -2
  346. package/dist/llms/humanize-industry.test.d.ts.map +0 -1
  347. package/dist/llms/links.test.d.ts +0 -2
  348. package/dist/llms/links.test.d.ts.map +0 -1
  349. package/dist/llms/sourcedFacts.test.d.ts +0 -2
  350. package/dist/llms/sourcedFacts.test.d.ts.map +0 -1
  351. package/dist/llms/wiring.test.d.ts +0 -2
  352. package/dist/llms/wiring.test.d.ts.map +0 -1
  353. package/dist/llms/writeLLMsTxt.test.d.ts +0 -2
  354. package/dist/llms/writeLLMsTxt.test.d.ts.map +0 -1
  355. package/dist/mcp/protocol.test.d.ts +0 -2
  356. package/dist/mcp/protocol.test.d.ts.map +0 -1
  357. package/dist/motion/gsap.test.d.ts +0 -2
  358. package/dist/motion/gsap.test.d.ts.map +0 -1
  359. package/dist/motion/motion.test.d.ts +0 -16
  360. package/dist/motion/motion.test.d.ts.map +0 -1
  361. package/dist/og/pages.test.d.ts +0 -2
  362. package/dist/og/pages.test.d.ts.map +0 -1
  363. package/dist/og/route.test.d.ts +0 -2
  364. package/dist/og/route.test.d.ts.map +0 -1
  365. package/dist/og/template.test.d.ts +0 -2
  366. package/dist/og/template.test.d.ts.map +0 -1
  367. package/dist/og/wiring.test.d.ts +0 -2
  368. package/dist/og/wiring.test.d.ts.map +0 -1
  369. package/dist/portfolio/contract.test.d.ts +0 -2
  370. package/dist/portfolio/contract.test.d.ts.map +0 -1
  371. package/dist/proxy/llms-discovery.test.d.ts +0 -2
  372. package/dist/proxy/llms-discovery.test.d.ts.map +0 -1
  373. package/dist/proxy/securityHeaders.test.d.ts +0 -2
  374. package/dist/proxy/securityHeaders.test.d.ts.map +0 -1
  375. package/dist/proxy/segment.test.d.ts +0 -2
  376. package/dist/proxy/segment.test.d.ts.map +0 -1
  377. package/dist/redirects/index.test.d.ts +0 -2
  378. package/dist/redirects/index.test.d.ts.map +0 -1
  379. package/dist/robots/index.test.d.ts +0 -2
  380. package/dist/robots/index.test.d.ts.map +0 -1
  381. package/dist/seo/getManagedMetadata.test.d.ts +0 -2
  382. package/dist/seo/getManagedMetadata.test.d.ts.map +0 -1
  383. package/dist/seo/managed-schema-filter.test.d.ts +0 -2
  384. package/dist/seo/managed-schema-filter.test.d.ts.map +0 -1
  385. package/dist/seo/register-sitemap-cli-impl.test.d.ts +0 -2
  386. package/dist/seo/register-sitemap-cli-impl.test.d.ts.map +0 -1
  387. package/dist/seo/register-sitemap-cli.js.map +0 -1
  388. package/dist/seo/register-sitemap-cli.mjs.map +0 -1
  389. package/dist/seo/register-sitemap-request.test.d.ts +0 -2
  390. package/dist/seo/register-sitemap-request.test.d.ts.map +0 -1
  391. package/dist/seo/schema-filter.test.d.ts +0 -2
  392. package/dist/seo/schema-filter.test.d.ts.map +0 -1
  393. package/dist/seo/site-scope.test.d.ts +0 -2
  394. package/dist/seo/site-scope.test.d.ts.map +0 -1
  395. package/dist/seo-meta/contract.test.d.ts +0 -2
  396. package/dist/seo-meta/contract.test.d.ts.map +0 -1
  397. package/dist/seo-pages/contract.test.d.ts +0 -2
  398. package/dist/seo-pages/contract.test.d.ts.map +0 -1
  399. package/dist/server/mint-site-token.test.d.ts +0 -2
  400. package/dist/server/mint-site-token.test.d.ts.map +0 -1
  401. package/dist/server/server-fetch.test.d.ts +0 -2
  402. package/dist/server/server-fetch.test.d.ts.map +0 -1
  403. package/dist/shared/client-entry-boundary.test.d.ts +0 -2
  404. package/dist/shared/client-entry-boundary.test.d.ts.map +0 -1
  405. package/dist/shared/fresh-fetch.test.d.ts +0 -2
  406. package/dist/shared/fresh-fetch.test.d.ts.map +0 -1
  407. package/dist/shared/next-files.test.d.ts +0 -2
  408. package/dist/shared/next-files.test.d.ts.map +0 -1
  409. package/dist/shared/no-cjs-require.test.d.ts +0 -2
  410. package/dist/shared/no-cjs-require.test.d.ts.map +0 -1
  411. package/dist/shared/page-leave.test.d.ts +0 -2
  412. package/dist/shared/page-leave.test.d.ts.map +0 -1
  413. package/dist/shared/publishCredential.test.d.ts +0 -2
  414. package/dist/shared/publishCredential.test.d.ts.map +0 -1
  415. package/dist/shared/raw-browser-api-guard.test.d.ts +0 -15
  416. package/dist/shared/raw-browser-api-guard.test.d.ts.map +0 -1
  417. package/dist/shared/siteToken.test.d.ts +0 -2
  418. package/dist/shared/siteToken.test.d.ts.map +0 -1
  419. package/dist/shared/sonorFetch.test.d.ts +0 -2
  420. package/dist/shared/sonorFetch.test.d.ts.map +0 -1
  421. package/dist/shared/source-graph.test.d.ts +0 -2
  422. package/dist/shared/source-graph.test.d.ts.map +0 -1
  423. package/dist/shared/uuid.test.d.ts +0 -2
  424. package/dist/shared/uuid.test.d.ts.map +0 -1
  425. package/dist/shared/version.test.d.ts +0 -2
  426. package/dist/shared/version.test.d.ts.map +0 -1
  427. package/dist/shared/visual-viewport-gap.test.d.ts +0 -2
  428. package/dist/shared/visual-viewport-gap.test.d.ts.map +0 -1
  429. package/dist/sitemap/discover.test.d.ts +0 -2
  430. package/dist/sitemap/discover.test.d.ts.map +0 -1
  431. package/dist/sitemap/shared.test.d.ts +0 -2
  432. package/dist/sitemap/shared.test.d.ts.map +0 -1
  433. package/dist/sitemap/site-scope.test.d.ts +0 -2
  434. package/dist/sitemap/site-scope.test.d.ts.map +0 -1
  435. package/dist/sitemap/trailing-slash.test.d.ts +0 -2
  436. package/dist/sitemap/trailing-slash.test.d.ts.map +0 -1
  437. package/dist/sites/contract.test.d.ts +0 -2
  438. package/dist/sites/contract.test.d.ts.map +0 -1
  439. package/dist/slots/ManagedSlot.test.d.ts +0 -2
  440. package/dist/slots/ManagedSlot.test.d.ts.map +0 -1
  441. package/dist/slots/contract.test.d.ts +0 -2
  442. package/dist/slots/contract.test.d.ts.map +0 -1
  443. package/dist/slots/revalidate.test.d.ts +0 -2
  444. package/dist/slots/revalidate.test.d.ts.map +0 -1
  445. package/dist/slots/server-api.test.d.ts +0 -2
  446. package/dist/slots/server-api.test.d.ts.map +0 -1
  447. package/dist/sync/add-to-calendar.test.d.ts +0 -2
  448. package/dist/sync/add-to-calendar.test.d.ts.map +0 -1
  449. package/dist/sync/api-errors.test.d.ts +0 -2
  450. package/dist/sync/api-errors.test.d.ts.map +0 -1
  451. package/dist/sync/booking-flow.test.d.ts +0 -2
  452. package/dist/sync/booking-flow.test.d.ts.map +0 -1
  453. package/dist/writeLLMsTxt-CQ7A4AAL.js.map +0 -1
  454. package/dist/writeLLMsTxt-NX5MSPYX.mjs.map +0 -1
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkC3WU45JT_js = require('./chunk-C3WU45JT.js');
5
- var chunkHAKD27AZ_js = require('./chunk-HAKD27AZ.js');
4
+ var chunkHQ2EPU5R_js = require('./chunk-HQ2EPU5R.js');
5
+ var chunkF2ZFMPW4_js = require('./chunk-F2ZFMPW4.js');
6
6
  var chunkHGNSJXWT_js = require('./chunk-HGNSJXWT.js');
7
- var chunkMHX6TOAS_js = require('./chunk-MHX6TOAS.js');
7
+ var chunkZTY4YS7Q_js = require('./chunk-ZTY4YS7Q.js');
8
8
  var chunkH5NBFNND_js = require('./chunk-H5NBFNND.js');
9
9
  var chunkRC4WWQXR_js = require('./chunk-RC4WWQXR.js');
10
10
  var React = require('react');
@@ -17,15 +17,15 @@ var React__default = /*#__PURE__*/_interopDefault(React);
17
17
  var dynamic__default = /*#__PURE__*/_interopDefault(dynamic);
18
18
 
19
19
  var LazyAnalyticsProvider = dynamic__default.default(
20
- () => import('./AnalyticsProvider-OCXRNIVE.js').then((m) => ({ default: m.AnalyticsProvider })),
20
+ () => import('./AnalyticsProvider-4JV3OFCG.js').then((m) => ({ default: m.AnalyticsProvider })),
21
21
  { ssr: false }
22
22
  );
23
23
  var LazyEngageWidget = dynamic__default.default(
24
- () => import('./EngageWidget-DDP5UFA4.js').then((m) => ({ default: m.EngageWidget })),
24
+ () => import('./EngageWidget-EUUZHQOU.js').then((m) => ({ default: m.EngageWidget })),
25
25
  { ssr: false }
26
26
  );
27
27
  var LazySitemapSync = dynamic__default.default(
28
- () => import('./SitemapSync-LH6UVP4P.js').then((m) => ({ default: m.SitemapSync })),
28
+ () => import('./SitemapSync-DWEL7HTB.js').then((m) => ({ default: m.SitemapSync })),
29
29
  { ssr: false }
30
30
  );
31
31
  function SiteKitClientProviders({
@@ -45,7 +45,7 @@ function SiteKitClientProviders({
45
45
  const modulesReady = chunkHGNSJXWT_js.useDeferredActivation(defer);
46
46
  const analyticsConfig = typeof analytics === "object" ? analytics : {};
47
47
  const site = chunkH5NBFNND_js.resolveSiteHost(analyticsConfig.site);
48
- chunkC3WU45JT_js.publishSiteCredential({ apiKey, apiUrl, site, debug, mapsBrowserKey });
48
+ chunkHQ2EPU5R_js.publishSiteCredential({ apiKey, apiUrl, site, debug, mapsBrowserKey });
49
49
  const [visitorId] = React.useState(() => chunkRC4WWQXR_js.getOrCreateVisitorId());
50
50
  const [sessionId] = React.useState(() => chunkRC4WWQXR_js.getOrCreateSessionId());
51
51
  const pageMetadataRef = React.useRef(null);
@@ -57,7 +57,7 @@ function SiteKitClientProviders({
57
57
  const signalConfig = typeof signal === "object" ? signal : {};
58
58
  siblings.push(
59
59
  /* @__PURE__ */ jsxRuntime.jsx(
60
- chunkMHX6TOAS_js.SignalBridge,
60
+ chunkZTY4YS7Q_js.SignalBridge,
61
61
  {
62
62
  enabled: true,
63
63
  realtime: signalConfig.realtime !== false,
@@ -134,7 +134,7 @@ function SiteKitClientProviders({
134
134
  if (sitemapSync) activeModules.push("sitemapSync");
135
135
  siblings.push(
136
136
  /* @__PURE__ */ jsxRuntime.jsx(React__default.default.Fragment, { children: modulesReady && /* @__PURE__ */ jsxRuntime.jsx(
137
- chunkHAKD27AZ_js.FleetHeartbeat,
137
+ chunkF2ZFMPW4_js.FleetHeartbeat,
138
138
  {
139
139
  apiUrl,
140
140
  apiKey,
@@ -155,5 +155,5 @@ function SiteKitClientProviders({
155
155
  }
156
156
 
157
157
  exports.SiteKitClientProviders = SiteKitClientProviders;
158
- //# sourceMappingURL=chunk-2OQWLXDO.js.map
159
- //# sourceMappingURL=chunk-2OQWLXDO.js.map
158
+ //# sourceMappingURL=chunk-PXWYMOZY.js.map
159
+ //# sourceMappingURL=chunk-PXWYMOZY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layout/SiteKitClientProviders.tsx"],"names":["dynamic","useDeferredActivation","resolveSiteHost","publishSiteCredential","useState","getOrCreateVisitorId","getOrCreateSessionId","useRef","useCallback","jsx","SignalBridge","React","Suspense","FleetHeartbeat","jsxs","Fragment"],"mappings":"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","file":"chunk-2OQWLXDO.js","sourcesContent":["'use client'\n\n/**\n * SiteKitClientProviders — Client Island\n *\n * This is the 'use client' boundary for SiteKitLayout.\n * It composes the client-only providers (Analytics, Engage, Signal, SitemapSync)\n * that require React context or browser APIs.\n *\n * All modules are lazy-loaded via next/dynamic so their JS is only downloaded\n * when the feature is enabled — keeping the initial bundle lightweight.\n *\n * All modules share a unified identity (visitor ID + session ID) read from\n * the storage-backed singleton (shared/identity), ensuring consistent\n * tracking across Analytics, Signal, and Engage.\n *\n * 4.0 INVARIANT — CHILDREN ARE NEVER WRAPPED. Every module here renders as a\n * childless sibling AFTER {children}; nothing provides context around page\n * content. That makes the prerender-bailout / remount-flash class of bug\n * structurally impossible. Do not reintroduce a wrapper.\n *\n * Props are passed down from the server-side SiteKitLayout component,\n * which reads env vars at render time.\n */\n\nimport React, { Suspense, useCallback, useRef, useState, type ReactNode } from 'react'\nimport dynamic from 'next/dynamic'\nimport {\n getOrCreateVisitorId,\n getOrCreateSessionId,\n} from '../shared/identity'\n// Defer non-critical module mounting until the page is quiet: the lazy\n// modules below are dynamic(ssr:false) and never render on the server, but\n// rendering them during hydration still kicks off their chunk downloads +\n// mount effects inside the critical startup window. useDeferredActivation\n// holds them until window.load + idle or first interaction — the same\n// strategy as the hand-rolled per-site deferrals this replaces (upforge\n// `deferred-analytics.tsx`, TPS `DeferredAnalytics.tsx`). The hook is public\n// (`@sonordev/site-kit/client`) so sites can reuse it for their own scripts.\nimport { useDeferredActivation } from '../shared/defer'\n// Single source of truth for seeding the token manager + the __SITE_KIT_*\n// globals — shared with the public `SiteKitCredential` component that\n// non-core layouts (agency-site-kit) use. Do not re-inline it here.\nimport { publishSiteCredential, resolveSiteHost } from '../shared/publishCredential'\nimport type { AnalyticsConfig, EngageConfig, SignalConfig } from './types'\n\n// Lazy-load feature modules — JS only downloaded when feature is enabled\nconst LazyAnalyticsProvider = dynamic(\n () => import('../analytics/AnalyticsProvider').then(m => ({ default: m.AnalyticsProvider })),\n { ssr: false },\n)\nconst LazyEngageWidget = dynamic(\n () => import('../engage/EngageWidget').then(m => ({ default: m.EngageWidget })),\n { ssr: false },\n)\nconst LazySitemapSync = dynamic(\n () => import('../SitemapSync').then(m => ({ default: m.SitemapSync })),\n { ssr: false },\n)\n// SignalBridge is imported STATICALLY, not via dynamic(ssr:false): it is a\n// tiny SSR-safe context shell that renders children immediately and\n// lazy-loads its machinery (SignalCore) as a childless sibling internally.\n// Wrapping children in a dynamic(ssr:false) component was the old SSR-bailout\n// failure mode — do not reintroduce it.\nimport { SignalBridge } from '../signal/SignalBridge'\n// Fleet heartbeat: a deferred, CHILDLESS SIBLING (like Analytics/Engage) that\n// reports this site's kit version + active modules once per session, so the\n// platform can see version drift across the fleet. Tiny and SSR-safe — renders\n// null until the shared idle gate fires; never wraps page content.\nimport { FleetHeartbeat } from '../fleet/FleetHeartbeat'\nimport type { FleetModule } from '../fleet/contract'\n\nexport interface SiteKitClientProvidersProps {\n children: ReactNode\n apiKey: string\n apiUrl: string\n projectId?: string\n analytics?: boolean | AnalyticsConfig\n engage?: boolean | EngageConfig\n signal?: boolean | SignalConfig\n /**\n * Runtime SitemapSync from the visitor's browser. Default FALSE — sitemap\n * registration belongs to build time and to sonor-api's nightly reconciler,\n * not to whoever happens to load the page. See SiteKitLayout for the full\n * reasoning; in short, its guards live in session/localStorage, so every new\n * visitor missed them and re-POSTed the whole sitemap.\n */\n sitemapSync?: boolean\n /**\n * Fleet heartbeat — reports kit version + active modules to Sonor once per\n * session so the platform can track version drift and key state across every\n * site. Default true. Deferred exactly like Analytics; never in the hydration\n * path, carries no visitor data.\n */\n fleet?: boolean\n /**\n * Defer Analytics / Engage / SitemapSync until window load + idle or first\n * interaction (default true). Pass false to restore legacy eager mounting\n * on hydration. SignalBridge is never deferred — it must apply experiment\n * variants as early as possible.\n */\n defer?: boolean\n debug?: boolean\n /** Browser-safe Google Maps key, resolved server-side by SiteKitLayout. */\n mapsBrowserKey?: string\n}\n\nexport function SiteKitClientProviders({\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 debug = false,\n mapsBrowserKey,\n}: SiteKitClientProvidersProps) {\n // One shared activation gate for all deferred siblings, so they mount in a\n // single commit instead of staggered re-renders.\n const modulesReady = useDeferredActivation(defer)\n // Hoist analytics config so the `site` dimension is resolvable up here.\n const analyticsConfig: AnalyticsConfig =\n typeof analytics === 'object' ? analytics : {}\n\n // Resolve the sub-site identifier — the dimension that lets one Sonor project\n // host many sites (e.g. truepowersystems.com + ohiopowerstudies.com under one\n // TPS project). Precedence lives in resolveSiteHost (shared contract):\n // explicit `analytics.site` > NEXT_PUBLIC_SITE_URL host > window.location.host.\n // Needed as a local too — SignalBridge and the analytics config read it below.\n const site = resolveSiteHost(analyticsConfig.site)\n\n // Seed the token manager + publish the window globals modules read from.\n // No-op on the server; runs during render so it lands before child effects.\n publishSiteCredential({ apiKey, apiUrl, site, debug, mapsBrowserKey })\n\n // Unified identity — single source of truth for all modules\n const [visitorId] = useState(() => getOrCreateVisitorId())\n const [sessionId] = useState(() => getOrCreateSessionId())\n\n // Page metadata bridge: Analytics writes, Signal reads\n const pageMetadataRef = useRef<Record<string, unknown> | null>(null)\n const onPageMetadata = useCallback((metadata: Record<string, unknown>) => {\n pageMetadataRef.current = metadata\n }, [])\n\n // Children render FIRST and are never re-parented. Siblings accumulate after.\n const siblings: ReactNode[] = []\n\n // SignalBridge — childless sibling (4.0: useSignal reads the module store,\n // so it no longer needs to wrap anything). Not gated on modulesReady:\n // experiment variants must apply as early as possible.\n if (signal) {\n const signalConfig: SignalConfig =\n typeof signal === 'object' ? signal : {}\n siblings.push(\n <SignalBridge\n key=\"sk-signal\"\n enabled\n realtime={signalConfig.realtime !== false}\n experiments={signalConfig.experiments !== false}\n behaviorTracking={signalConfig.behaviorTracking !== false}\n visitorId={visitorId}\n sessionId={sessionId}\n pageMetadataRef={pageMetadataRef}\n />,\n )\n }\n\n // Add Analytics if enabled (renders alongside, doesn't wrap).\n //\n // CRITICAL: LazyAnalyticsProvider is dynamic(..., { ssr: false }). Wrapping\n // {content} inside an ssr:false component makes the entire page tree skip\n // server rendering — the route de-opts to 100% client rendering and the\n // hero / LCP element only paints after hydration (mobile LCP ~4s, Lighthouse\n // ~85). Analytics tracks via effects + a metadata ref, so it never needs to\n // wrap page content — mount it as a childless sibling, exactly like Engage.\n // Each deferred sibling is appended as `{modulesReady && <Module/>}` so the\n // children slot never moves in the tree — flipping ready only mounts the\n // sibling, it never remounts page content.\n if (analytics) {\n siblings.push(\n <React.Fragment key=\"sk-analytics\">\n {modulesReady && (\n <Suspense fallback={null}>\n <LazyAnalyticsProvider\n apiUrl={apiUrl}\n apiKey={apiKey}\n site={site}\n trackPageViews={analyticsConfig.trackPageViews !== false}\n trackWebVitals={analyticsConfig.trackWebVitals !== false}\n trackScrollDepth={analyticsConfig.trackScrollDepth !== false}\n trackClicks={analyticsConfig.trackClicks !== false}\n sessionTimeout={analyticsConfig.sessionDuration}\n excludePaths={analyticsConfig.excludePaths}\n // Off by default: a cross-origin embed of this site reports\n // nothing (see analytics/send-gate.ts). Opt in per site.\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n debug={debug}\n externalVisitorId={visitorId}\n externalSessionId={sessionId}\n onPageMetadata={onPageMetadata}\n />\n </Suspense>\n )}\n </React.Fragment>,\n )\n }\n\n // Engage widget — childless sibling\n if (engage) {\n const engageConfig: EngageConfig =\n typeof engage === 'object' ? engage : {}\n siblings.push(\n <React.Fragment key=\"sk-engage\">\n {modulesReady && (\n <LazyEngageWidget\n apiUrl={apiUrl}\n apiKey={apiKey}\n projectId={projectId}\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n position={engageConfig.position || 'bottom-right'}\n offsetBottom={engageConfig.offsetBottom}\n zIndex={engageConfig.zIndex}\n chatEnabled={engageConfig.chatEnabled !== false}\n />\n )}\n </React.Fragment>,\n )\n }\n\n // SitemapSync — childless sibling\n if (sitemapSync) {\n siblings.push(\n <React.Fragment key=\"sk-sitemap\">\n {modulesReady && (\n <LazySitemapSync\n debug={debug}\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n />\n )}\n </React.Fragment>,\n )\n }\n\n // Fleet heartbeat — childless sibling on the same modulesReady idle gate.\n // Reports the modules actually enabled on THIS layout (honest client-observable\n // set) so the platform can answer \"which version / modules is each site\n // running\". defer={false}: the modulesReady gate already handled deferral, so\n // the heartbeat fires on mount (still bounded to once per session internally).\n if (fleet) {\n const activeModules: FleetModule[] = []\n if (analytics) activeModules.push('analytics')\n if (engage) activeModules.push('engage')\n if (signal) activeModules.push('signal')\n if (sitemapSync) activeModules.push('sitemapSync')\n siblings.push(\n <React.Fragment key=\"sk-fleet\">\n {modulesReady && (\n <FleetHeartbeat\n apiUrl={apiUrl}\n apiKey={apiKey}\n site={site}\n modules={activeModules}\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n defer={false}\n debug={debug}\n />\n )}\n </React.Fragment>,\n )\n }\n\n return (\n <>\n {children}\n {siblings}\n </>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/layout/SiteKitClientProviders.tsx"],"names":["dynamic","useDeferredActivation","resolveSiteHost","publishSiteCredential","useState","getOrCreateVisitorId","getOrCreateSessionId","useRef","useCallback","jsx","SignalBridge","React","Suspense","FleetHeartbeat","jsxs","Fragment"],"mappings":"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","file":"chunk-PXWYMOZY.js","sourcesContent":["'use client'\n\n/**\n * SiteKitClientProviders — Client Island\n *\n * This is the 'use client' boundary for SiteKitLayout.\n * It composes the client-only providers (Analytics, Engage, Signal, SitemapSync)\n * that require React context or browser APIs.\n *\n * All modules are lazy-loaded via next/dynamic so their JS is only downloaded\n * when the feature is enabled — keeping the initial bundle lightweight.\n *\n * All modules share a unified identity (visitor ID + session ID) read from\n * the storage-backed singleton (shared/identity), ensuring consistent\n * tracking across Analytics, Signal, and Engage.\n *\n * 4.0 INVARIANT — CHILDREN ARE NEVER WRAPPED. Every module here renders as a\n * childless sibling AFTER {children}; nothing provides context around page\n * content. That makes the prerender-bailout / remount-flash class of bug\n * structurally impossible. Do not reintroduce a wrapper.\n *\n * Props are passed down from the server-side SiteKitLayout component,\n * which reads env vars at render time.\n */\n\nimport React, { Suspense, useCallback, useRef, useState, type ReactNode } from 'react'\nimport dynamic from 'next/dynamic'\nimport {\n getOrCreateVisitorId,\n getOrCreateSessionId,\n} from '../shared/identity'\n// Defer non-critical module mounting until the page is quiet: the lazy\n// modules below are dynamic(ssr:false) and never render on the server, but\n// rendering them during hydration still kicks off their chunk downloads +\n// mount effects inside the critical startup window. useDeferredActivation\n// holds them until window.load + idle or first interaction — the same\n// strategy as the hand-rolled per-site deferrals this replaces (upforge\n// `deferred-analytics.tsx`, TPS `DeferredAnalytics.tsx`). The hook is public\n// (`@sonordev/site-kit/client`) so sites can reuse it for their own scripts.\nimport { useDeferredActivation } from '../shared/defer'\n// Single source of truth for seeding the token manager + the __SITE_KIT_*\n// globals — shared with the public `SiteKitCredential` component that\n// non-core layouts (agency-site-kit) use. Do not re-inline it here.\nimport { publishSiteCredential, resolveSiteHost } from '../shared/publishCredential'\nimport type { AnalyticsConfig, EngageConfig, SignalConfig } from './types'\n\n// Lazy-load feature modules — JS only downloaded when feature is enabled\nconst LazyAnalyticsProvider = dynamic(\n () => import('../analytics/AnalyticsProvider').then(m => ({ default: m.AnalyticsProvider })),\n { ssr: false },\n)\nconst LazyEngageWidget = dynamic(\n () => import('../engage/EngageWidget').then(m => ({ default: m.EngageWidget })),\n { ssr: false },\n)\nconst LazySitemapSync = dynamic(\n () => import('../SitemapSync').then(m => ({ default: m.SitemapSync })),\n { ssr: false },\n)\n// SignalBridge is imported STATICALLY, not via dynamic(ssr:false): it is a\n// tiny SSR-safe context shell that renders children immediately and\n// lazy-loads its machinery (SignalCore) as a childless sibling internally.\n// Wrapping children in a dynamic(ssr:false) component was the old SSR-bailout\n// failure mode — do not reintroduce it.\nimport { SignalBridge } from '../signal/SignalBridge'\n// Fleet heartbeat: a deferred, CHILDLESS SIBLING (like Analytics/Engage) that\n// reports this site's kit version + active modules once per session, so the\n// platform can see version drift across the fleet. Tiny and SSR-safe — renders\n// null until the shared idle gate fires; never wraps page content.\nimport { FleetHeartbeat } from '../fleet/FleetHeartbeat'\nimport type { FleetModule } from '../fleet/contract'\n\nexport interface SiteKitClientProvidersProps {\n children: ReactNode\n apiKey: string\n apiUrl: string\n projectId?: string\n analytics?: boolean | AnalyticsConfig\n engage?: boolean | EngageConfig\n signal?: boolean | SignalConfig\n /**\n * Runtime SitemapSync from the visitor's browser. Default FALSE — sitemap\n * registration belongs to build time and to sonor-api's nightly reconciler,\n * not to whoever happens to load the page. See SiteKitLayout for the full\n * reasoning; in short, its guards live in session/localStorage, so every new\n * visitor missed them and re-POSTed the whole sitemap.\n */\n sitemapSync?: boolean\n /**\n * Fleet heartbeat — reports kit version + active modules to Sonor once per\n * session so the platform can track version drift and key state across every\n * site. Default true. Deferred exactly like Analytics; never in the hydration\n * path, carries no visitor data.\n */\n fleet?: boolean\n /**\n * Defer Analytics / Engage / SitemapSync until window load + idle or first\n * interaction (default true). Pass false to restore legacy eager mounting\n * on hydration. SignalBridge is never deferred — it must apply experiment\n * variants as early as possible.\n */\n defer?: boolean\n debug?: boolean\n /** Browser-safe Google Maps key, resolved server-side by SiteKitLayout. */\n mapsBrowserKey?: string\n}\n\nexport function SiteKitClientProviders({\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 debug = false,\n mapsBrowserKey,\n}: SiteKitClientProvidersProps) {\n // One shared activation gate for all deferred siblings, so they mount in a\n // single commit instead of staggered re-renders.\n const modulesReady = useDeferredActivation(defer)\n // Hoist analytics config so the `site` dimension is resolvable up here.\n const analyticsConfig: AnalyticsConfig =\n typeof analytics === 'object' ? analytics : {}\n\n // Resolve the sub-site identifier — the dimension that lets one Sonor project\n // host many sites (e.g. truepowersystems.com + ohiopowerstudies.com under one\n // TPS project). Precedence lives in resolveSiteHost (shared contract):\n // explicit `analytics.site` > NEXT_PUBLIC_SITE_URL host > window.location.host.\n // Needed as a local too — SignalBridge and the analytics config read it below.\n const site = resolveSiteHost(analyticsConfig.site)\n\n // Seed the token manager + publish the window globals modules read from.\n // No-op on the server; runs during render so it lands before child effects.\n publishSiteCredential({ apiKey, apiUrl, site, debug, mapsBrowserKey })\n\n // Unified identity — single source of truth for all modules\n const [visitorId] = useState(() => getOrCreateVisitorId())\n const [sessionId] = useState(() => getOrCreateSessionId())\n\n // Page metadata bridge: Analytics writes, Signal reads\n const pageMetadataRef = useRef<Record<string, unknown> | null>(null)\n const onPageMetadata = useCallback((metadata: Record<string, unknown>) => {\n pageMetadataRef.current = metadata\n }, [])\n\n // Children render FIRST and are never re-parented. Siblings accumulate after.\n const siblings: ReactNode[] = []\n\n // SignalBridge — childless sibling (4.0: useSignal reads the module store,\n // so it no longer needs to wrap anything). Not gated on modulesReady:\n // experiment variants must apply as early as possible.\n if (signal) {\n const signalConfig: SignalConfig =\n typeof signal === 'object' ? signal : {}\n siblings.push(\n <SignalBridge\n key=\"sk-signal\"\n enabled\n realtime={signalConfig.realtime !== false}\n experiments={signalConfig.experiments !== false}\n behaviorTracking={signalConfig.behaviorTracking !== false}\n visitorId={visitorId}\n sessionId={sessionId}\n pageMetadataRef={pageMetadataRef}\n />,\n )\n }\n\n // Add Analytics if enabled (renders alongside, doesn't wrap).\n //\n // CRITICAL: LazyAnalyticsProvider is dynamic(..., { ssr: false }). Wrapping\n // {content} inside an ssr:false component makes the entire page tree skip\n // server rendering — the route de-opts to 100% client rendering and the\n // hero / LCP element only paints after hydration (mobile LCP ~4s, Lighthouse\n // ~85). Analytics tracks via effects + a metadata ref, so it never needs to\n // wrap page content — mount it as a childless sibling, exactly like Engage.\n // Each deferred sibling is appended as `{modulesReady && <Module/>}` so the\n // children slot never moves in the tree — flipping ready only mounts the\n // sibling, it never remounts page content.\n if (analytics) {\n siblings.push(\n <React.Fragment key=\"sk-analytics\">\n {modulesReady && (\n <Suspense fallback={null}>\n <LazyAnalyticsProvider\n apiUrl={apiUrl}\n apiKey={apiKey}\n site={site}\n trackPageViews={analyticsConfig.trackPageViews !== false}\n trackWebVitals={analyticsConfig.trackWebVitals !== false}\n trackScrollDepth={analyticsConfig.trackScrollDepth !== false}\n trackClicks={analyticsConfig.trackClicks !== false}\n sessionTimeout={analyticsConfig.sessionDuration}\n excludePaths={analyticsConfig.excludePaths}\n // Off by default: a cross-origin embed of this site reports\n // nothing (see analytics/send-gate.ts). Opt in per site.\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n debug={debug}\n externalVisitorId={visitorId}\n externalSessionId={sessionId}\n onPageMetadata={onPageMetadata}\n />\n </Suspense>\n )}\n </React.Fragment>,\n )\n }\n\n // Engage widget — childless sibling\n if (engage) {\n const engageConfig: EngageConfig =\n typeof engage === 'object' ? engage : {}\n siblings.push(\n <React.Fragment key=\"sk-engage\">\n {modulesReady && (\n <LazyEngageWidget\n apiUrl={apiUrl}\n apiKey={apiKey}\n projectId={projectId}\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n position={engageConfig.position || 'bottom-right'}\n offsetBottom={engageConfig.offsetBottom}\n zIndex={engageConfig.zIndex}\n chatEnabled={engageConfig.chatEnabled !== false}\n />\n )}\n </React.Fragment>,\n )\n }\n\n // SitemapSync — childless sibling\n if (sitemapSync) {\n siblings.push(\n <React.Fragment key=\"sk-sitemap\">\n {modulesReady && (\n <LazySitemapSync\n debug={debug}\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n />\n )}\n </React.Fragment>,\n )\n }\n\n // Fleet heartbeat — childless sibling on the same modulesReady idle gate.\n // Reports the modules actually enabled on THIS layout (honest client-observable\n // set) so the platform can answer \"which version / modules is each site\n // running\". defer={false}: the modulesReady gate already handled deferral, so\n // the heartbeat fires on mount (still bounded to once per session internally).\n if (fleet) {\n const activeModules: FleetModule[] = []\n if (analytics) activeModules.push('analytics')\n if (engage) activeModules.push('engage')\n if (signal) activeModules.push('signal')\n if (sitemapSync) activeModules.push('sitemapSync')\n siblings.push(\n <React.Fragment key=\"sk-fleet\">\n {modulesReady && (\n <FleetHeartbeat\n apiUrl={apiUrl}\n apiKey={apiKey}\n site={site}\n modules={activeModules}\n allowInFrame={analyticsConfig.allowInFrame === true}\n allowLocalhost={analyticsConfig.allowLocalhost === true}\n defer={false}\n debug={debug}\n />\n )}\n </React.Fragment>,\n )\n }\n\n return (\n <>\n {children}\n {siblings}\n </>\n )\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { HoneypotField, NativeFallbackFields, nativeFormProps } from './chunk-5WGMXSCB.mjs';
1
+ import { HoneypotField, NativeFallbackFields, nativeFormProps } from './chunk-SJPI34DL.mjs';
2
2
  import { FormField } from './chunk-VJV7WUR2.mjs';
3
- import { normalizeFormConfig } from './chunk-QVHVL7EX.mjs';
3
+ import { normalizeFormConfig } from './chunk-EZ5DX7ED.mjs';
4
4
  import { DEFAULT_HONEYPOT_FIELD } from './chunk-TMVKRQGJ.mjs';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -40,5 +40,5 @@ function StaticForm({ config: raw, className, nativeReturnTo }) {
40
40
  }
41
41
 
42
42
  export { StaticForm };
43
- //# sourceMappingURL=chunk-3SLFT453.mjs.map
44
- //# sourceMappingURL=chunk-3SLFT453.mjs.map
43
+ //# sourceMappingURL=chunk-QK54SZPF.mjs.map
44
+ //# sourceMappingURL=chunk-QK54SZPF.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/forms/StaticForm.tsx"],"names":[],"mappings":";;;;;;AA6DA,SAAS,oBAAoB,MAAA,EAA2B;AACtD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,IAAU,EAAC;AAC9B,EAAA,IAAI,CAAC,MAAA,CAAO,aAAA,EAAe,OAAO,GAAA;AAGlC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAG,EAAA;AACvC,EAAA,OAAO,GAAA,CAAI,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,KAAY,WAAW,CAAA;AAClE;AAEO,SAAS,WAAW,EAAE,MAAA,EAAQ,GAAA,EAAK,SAAA,EAAW,gBAAe,EAAoB;AACtF,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,MAAA,GAAS,oBAAoB,GAAU,CAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,EAAA,MAAM,iBAAA,GAAoB,OAAO,cAAA,IAAkB,sBAAA;AAEnD,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MAGC,eAAA,EAAc,MAAA;AAAA,MACd,eAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,CAAA,QAAA,EAAW,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MACpC,GAAG,gBAAgB,MAAM,CAAA;AAAA,MAE1B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACX,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,CAAA,+CAAA,EAAkD,KAAA,CAAM,KAAA,IAAS,MAAM,CAAA,CAAA;AAAA,YAGlF,8BAAC,SAAA,EAAA,EAAU,KAAA,EAAc,KAAA,EAAO,KAAA,CAAM,iBAAiB,EAAA,EAAI;AAAA,WAAA;AAAA,UAJtD,KAAA,CAAM,MAAM,KAAA,CAAM;AAAA,SAM1B,GACH,CAAA,EACF,CAAA;AAAA,4BAEC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAmB,KAAA,EAAO,EAAE,gBAAgB,UAAA,EAAW,EACpE,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,qCAC7B,QAAA,EAAA,MAAA,CAAO,kBAAA,IAAsB,UAChC,CAAA,EACF,CAAA;AAAA,QAIC,MAAA,CAAO,gBAAA,oBAAoB,GAAA,CAAC,aAAA,EAAA,EAAc,MAAM,iBAAA,EAAmB,CAAA;AAAA,wBAGpE,GAAA,CAAC,oBAAA,EAAA,EAAqB,MAAA,EAAgB,QAAA,EAAU,cAAA,EAAgB;AAAA;AAAA;AAAA,GAClE;AAEJ","file":"chunk-3SLFT453.mjs","sourcesContent":["/**\n * StaticForm — a complete, submittable managed form with ZERO client JavaScript.\n *\n * No `'use client'`. This renders in a Server Component, and what it emits is\n * a real `<form>`: every field, the honeypot, the signed native token, and a\n * submit button. With JavaScript disabled, off, or still downloading, the\n * browser performs an ordinary form-encoded POST to\n * `/api/public/forms/submit-native`, sonor-api runs the honeypot +\n * render-timestamp + quarantine stack, and the lead lands. 4.0.1 built that\n * endpoint; this is what finally puts it under every form by default.\n *\n * ── Why this exists ─────────────────────────────────────────────────────\n *\n * ManagedForm was a client component for historical reasons that no longer\n * hold: it used to fetch its own config (getFormConfig removed that) and it\n * could only submit via JSON (the native endpoint removed that). Nobody moved\n * the boundary afterward, so every site that rendered a form paid for the\n * whole forms runtime — validation, spotlight, celebration, momentum — as an\n * INITIAL script, on the LCP-critical path.\n *\n * Measured on upforge.io's homepage: 48 KB of form code in the initial chunk\n * set cost 6 Lighthouse points (88 -> 82, LCP 3.8s -> 4.7s). Deferring the\n * client component recovered the score but deleted the form from the HTML,\n * taking the no-JS floor and crawlable fields with it. Neither half was\n * acceptable; a server-rendered form is what makes both true at once.\n *\n * Pair it with <FormEnhancer> to upgrade this markup at idle. Alone, it is\n * still a working form — that is the point. Never make this file `'use\n * client'`, and never import a hook into it.\n */\n\nimport React from 'react'\nimport { DEFAULT_HONEYPOT_FIELD } from './contract'\nimport { FormField } from './FormField'\nimport { HoneypotField } from './HoneypotField'\nimport { nativeFormProps, NativeFallbackFields } from './native-fallback'\nimport { normalizeFormConfig } from './normalize-config'\nimport type { ManagedFormConfig } from './types'\n\nexport interface StaticFormProps {\n /**\n * RAW /api/public/forms/config payload from `getFormConfig`, or an\n * already-normalized config. Normalized here through the SAME function the\n * client fetch uses, so the shell and the enhancement cannot disagree about\n * field order, step count, or success copy.\n */\n config: Record<string, unknown> | ManagedFormConfig | null | undefined\n className?: string\n /**\n * Absolute URL the no-JS 303 should return to (usually the page hosting the\n * form). Without it the API falls back to the Referer origin — right site,\n * wrong page.\n */\n nativeReturnTo?: string\n}\n\n/**\n * Fields the static shell can render meaningfully. Conditional logic is a\n * runtime concern (it depends on values the visitor has not entered yet), so\n * a conditional field renders here and the enhancement takes over hiding it.\n */\nfunction visibleStaticFields(config: ManagedFormConfig) {\n const all = config.fields || []\n if (!config.is_multi_step) return all\n // Multi-step is JS-only navigation and is excluded from native POST, so the\n // shell shows step one as a preview of what the form asks for.\n const firstStepId = config.steps?.[0]?.id\n return all.filter((f) => !f.step_id || f.step_id === firstStepId)\n}\n\nexport function StaticForm({ config: raw, className, nativeReturnTo }: StaticFormProps) {\n if (!raw) return null\n const config = normalizeFormConfig(raw as any)\n const fields = visibleStaticFields(config)\n const honeypotFieldName = config.honeypot_field || DEFAULT_HONEYPOT_FIELD\n\n return (\n <form\n // Matches FormClient's classic branch attribute-for-attribute so the\n // enhancement swap is invisible. Change one, change the other.\n data-sk-state=\"idle\"\n data-sk-mount=\"shell\"\n className={`sk-form ${className || ''}`}\n {...nativeFormProps(config)}\n >\n <div className=\"sk-form__step\">\n <div className=\"sk-form__fields\">\n {fields.map((field) => (\n <div\n key={field.id || field.slug}\n className={`sk-form__field-wrapper sk-form__field-wrapper--${field.width || 'full'}`}\n >\n {/* No onChange — FormField renders native uncontrolled controls. */}\n <FormField field={field} value={field.default_value ?? ''} />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"sk-form__actions\" style={{ justifyContent: 'flex-end' }}>\n <button type=\"submit\" className=\"sk-form__btn sk-form__btn--submit\">\n {config.submit_button_text || 'Submit'}\n </button>\n </div>\n\n {/* Same trap the hydrated form uses; no state needed because the value\n is read and stripped server-side. */}\n {config.honeypot_enabled && <HoneypotField name={honeypotFieldName} />}\n\n {/* _sk_token auth + _sk_return destination for the native POST. */}\n <NativeFallbackFields config={config} returnTo={nativeReturnTo} />\n </form>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/forms/StaticForm.tsx"],"names":[],"mappings":";;;;;;AA6DA,SAAS,oBAAoB,MAAA,EAA2B;AACtD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,IAAU,EAAC;AAC9B,EAAA,IAAI,CAAC,MAAA,CAAO,aAAA,EAAe,OAAO,GAAA;AAGlC,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAG,EAAA;AACvC,EAAA,OAAO,GAAA,CAAI,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,KAAY,WAAW,CAAA;AAClE;AAEO,SAAS,WAAW,EAAE,MAAA,EAAQ,GAAA,EAAK,SAAA,EAAW,gBAAe,EAAoB;AACtF,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,MAAA,GAAS,oBAAoB,GAAU,CAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,oBAAoB,MAAM,CAAA;AACzC,EAAA,MAAM,iBAAA,GAAoB,OAAO,cAAA,IAAkB,sBAAA;AAEnD,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MAGC,eAAA,EAAc,MAAA;AAAA,MACd,eAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAW,CAAA,QAAA,EAAW,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MACpC,GAAG,gBAAgB,MAAM,CAAA;AAAA,MAE1B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACZ,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACX,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAW,CAAA,+CAAA,EAAkD,KAAA,CAAM,KAAA,IAAS,MAAM,CAAA,CAAA;AAAA,YAGlF,8BAAC,SAAA,EAAA,EAAU,KAAA,EAAc,KAAA,EAAO,KAAA,CAAM,iBAAiB,EAAA,EAAI;AAAA,WAAA;AAAA,UAJtD,KAAA,CAAM,MAAM,KAAA,CAAM;AAAA,SAM1B,GACH,CAAA,EACF,CAAA;AAAA,4BAEC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAmB,KAAA,EAAO,EAAE,gBAAgB,UAAA,EAAW,EACpE,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,qCAC7B,QAAA,EAAA,MAAA,CAAO,kBAAA,IAAsB,UAChC,CAAA,EACF,CAAA;AAAA,QAIC,MAAA,CAAO,gBAAA,oBAAoB,GAAA,CAAC,aAAA,EAAA,EAAc,MAAM,iBAAA,EAAmB,CAAA;AAAA,wBAGpE,GAAA,CAAC,oBAAA,EAAA,EAAqB,MAAA,EAAgB,QAAA,EAAU,cAAA,EAAgB;AAAA;AAAA;AAAA,GAClE;AAEJ","file":"chunk-QK54SZPF.mjs","sourcesContent":["/**\n * StaticForm — a complete, submittable managed form with ZERO client JavaScript.\n *\n * No `'use client'`. This renders in a Server Component, and what it emits is\n * a real `<form>`: every field, the honeypot, the signed native token, and a\n * submit button. With JavaScript disabled, off, or still downloading, the\n * browser performs an ordinary form-encoded POST to\n * `/api/public/forms/submit-native`, sonor-api runs the honeypot +\n * render-timestamp + quarantine stack, and the lead lands. 4.0.1 built that\n * endpoint; this is what finally puts it under every form by default.\n *\n * ── Why this exists ─────────────────────────────────────────────────────\n *\n * ManagedForm was a client component for historical reasons that no longer\n * hold: it used to fetch its own config (getFormConfig removed that) and it\n * could only submit via JSON (the native endpoint removed that). Nobody moved\n * the boundary afterward, so every site that rendered a form paid for the\n * whole forms runtime — validation, spotlight, celebration, momentum — as an\n * INITIAL script, on the LCP-critical path.\n *\n * Measured on upforge.io's homepage: 48 KB of form code in the initial chunk\n * set cost 6 Lighthouse points (88 -> 82, LCP 3.8s -> 4.7s). Deferring the\n * client component recovered the score but deleted the form from the HTML,\n * taking the no-JS floor and crawlable fields with it. Neither half was\n * acceptable; a server-rendered form is what makes both true at once.\n *\n * Pair it with <FormEnhancer> to upgrade this markup at idle. Alone, it is\n * still a working form — that is the point. Never make this file `'use\n * client'`, and never import a hook into it.\n */\n\nimport React from 'react'\nimport { DEFAULT_HONEYPOT_FIELD } from './contract'\nimport { FormField } from './FormField'\nimport { HoneypotField } from './HoneypotField'\nimport { nativeFormProps, NativeFallbackFields } from './native-fallback'\nimport { normalizeFormConfig } from './normalize-config'\nimport type { ManagedFormConfig } from './types'\n\nexport interface StaticFormProps {\n /**\n * RAW /api/public/forms/config payload from `getFormConfig`, or an\n * already-normalized config. Normalized here through the SAME function the\n * client fetch uses, so the shell and the enhancement cannot disagree about\n * field order, step count, or success copy.\n */\n config: Record<string, unknown> | ManagedFormConfig | null | undefined\n className?: string\n /**\n * Absolute URL the no-JS 303 should return to (usually the page hosting the\n * form). Without it the API falls back to the Referer origin — right site,\n * wrong page.\n */\n nativeReturnTo?: string\n}\n\n/**\n * Fields the static shell can render meaningfully. Conditional logic is a\n * runtime concern (it depends on values the visitor has not entered yet), so\n * a conditional field renders here and the enhancement takes over hiding it.\n */\nfunction visibleStaticFields(config: ManagedFormConfig) {\n const all = config.fields || []\n if (!config.is_multi_step) return all\n // Multi-step is JS-only navigation and is excluded from native POST, so the\n // shell shows step one as a preview of what the form asks for.\n const firstStepId = config.steps?.[0]?.id\n return all.filter((f) => !f.step_id || f.step_id === firstStepId)\n}\n\nexport function StaticForm({ config: raw, className, nativeReturnTo }: StaticFormProps) {\n if (!raw) return null\n const config = normalizeFormConfig(raw as any)\n const fields = visibleStaticFields(config)\n const honeypotFieldName = config.honeypot_field || DEFAULT_HONEYPOT_FIELD\n\n return (\n <form\n // Matches FormClient's classic branch attribute-for-attribute so the\n // enhancement swap is invisible. Change one, change the other.\n data-sk-state=\"idle\"\n data-sk-mount=\"shell\"\n className={`sk-form ${className || ''}`}\n {...nativeFormProps(config)}\n >\n <div className=\"sk-form__step\">\n <div className=\"sk-form__fields\">\n {fields.map((field) => (\n <div\n key={field.id || field.slug}\n className={`sk-form__field-wrapper sk-form__field-wrapper--${field.width || 'full'}`}\n >\n {/* No onChange — FormField renders native uncontrolled controls. */}\n <FormField field={field} value={field.default_value ?? ''} />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"sk-form__actions\" style={{ justifyContent: 'flex-end' }}>\n <button type=\"submit\" className=\"sk-form__btn sk-form__btn--submit\">\n {config.submit_button_text || 'Submit'}\n </button>\n </div>\n\n {/* Same trap the hydrated form uses; no state needed because the value\n is read and stripped server-side. */}\n {config.honeypot_enabled && <HoneypotField name={honeypotFieldName} />}\n\n {/* _sk_token auth + _sk_return destination for the native POST. */}\n <NativeFallbackFields config={config} returnTo={nativeReturnTo} />\n </form>\n )\n}\n"]}
@@ -10,7 +10,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
10
  var React__default = /*#__PURE__*/_interopDefault(React);
11
11
 
12
12
  var InteractiveForm = React.lazy(
13
- () => import('./ManagedForm-TSYKQFLJ.js').then((m) => ({ default: m.ManagedForm }))
13
+ () => import('./ManagedForm-RI2TSUZD.js').then((m) => ({ default: m.ManagedForm }))
14
14
  );
15
15
  function FormEnhancer({
16
16
  formId,
@@ -106,5 +106,5 @@ function EnterStyles() {
106
106
  }
107
107
 
108
108
  exports.FormEnhancer = FormEnhancer;
109
- //# sourceMappingURL=chunk-JDTU2RWC.js.map
110
- //# sourceMappingURL=chunk-JDTU2RWC.js.map
109
+ //# sourceMappingURL=chunk-QWXTQC3N.js.map
110
+ //# sourceMappingURL=chunk-QWXTQC3N.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/forms/FormEnhancer.tsx"],"names":["lazy","useDeferredActivation","useState","jsxs","jsx","Suspense","React","useRef","useEffect"],"mappings":"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","file":"chunk-JDTU2RWC.js","sourcesContent":["'use client'\n\n/**\n * FormEnhancer — the only client code a managed form needs up front.\n *\n * Renders the server-rendered shell (<StaticForm>, passed as `children`) until\n * an idle/first-interaction gate fires, then lazy-imports the interactive form\n * and swaps it in. Everything expensive — validation, conditional logic,\n * spotlight/stage, celebration, momentum — lives behind that dynamic import,\n * so a page ships this boundary and nothing else in its initial chunk set.\n *\n * The shell is a REAL form the whole time (native action + signed token), so\n * the progression is:\n *\n * no JS at all -> shell, submits natively. Works.\n * JS, pre-idle -> shell, submits natively. Works.\n * JS, post-idle -> enhanced form, submits over JSON. Works, with delight.\n * chunk 404s -> shell stays. Works. (Never left blank.)\n *\n * That last line is the invariant to protect: the shell is only removed once\n * the enhancement has actually rendered. Do not \"hide the shell then load\" —\n * a CDN hiccup would leave a visitor staring at an empty box where the form\n * used to be.\n *\n * ── Entrance animation ──────────────────────────────────────────────────\n *\n * Above-the-fold forms upgrade while the visitor is looking at them, so the\n * swap must not pop. The wrapper carries `data-sk-form-mount=\"shell\"` and\n * flips to `\"enhanced\"`, and the enhanced form gets `data-sk-enter` for one\n * frame, so a site can style the transition entirely in CSS:\n *\n * [data-sk-form-mount] { transition: opacity .35s ease }\n * [data-sk-form-mount=\"shell\"] { opacity: .6 }\n *\n * Defaults ship as CSS variables rather than hard-coded values:\n *\n * --sk-form-enter-duration (default 320ms)\n * --sk-form-enter-easing (default cubic-bezier(.22,1,.36,1))\n * --sk-form-enter-distance (default 6px)\n *\n * `enter=\"none\"` opts out entirely; `enter=\"custom\"` emits the data\n * attributes but no site-kit styles, leaving the animation to the site.\n * Every default is collapsed by prefers-reduced-motion.\n */\n\nimport React, { lazy, Suspense, useEffect, useRef, useState } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport type { FormExperience, FormSubmission } from './types'\n\n/** The heavy half. Nothing else in this module may import it statically. */\nconst InteractiveForm = lazy(() =>\n import('./ManagedForm').then((m) => ({ default: m.ManagedForm })),\n)\n\nexport type FormEnterAnimation = 'fade' | 'none' | 'custom'\n\nexport interface FormEnhancerProps {\n formId: string\n /** Server-fetched raw config — hands the enhancement its fields instantly. */\n initialConfig?: Record<string, unknown> | null\n className?: string\n nativeReturnTo?: string\n experience?: FormExperience\n /** Pre-fill field values by slug. See ManagedForm.defaultValues. */\n defaultValues?: Record<string, unknown>\n onSuccess?: (submission: FormSubmission) => void\n onError?: (error: Error) => void\n /**\n * How the enhanced form arrives. 'fade' (default) crossfades and lifts it\n * into place; 'none' swaps instantly; 'custom' emits the data attributes\n * and no styles so the site owns the animation.\n */\n enter?: FormEnterAnimation\n /**\n * Set false to enhance immediately instead of waiting for idle. Only worth\n * it for a form that is the entire point of the page AND above the fold.\n */\n defer?: boolean\n /** The server-rendered <StaticForm>. Shown until the enhancement mounts. */\n children: React.ReactNode\n}\n\nexport function FormEnhancer({\n formId,\n initialConfig,\n className,\n nativeReturnTo,\n experience,\n defaultValues,\n onSuccess,\n onError,\n enter = 'fade',\n defer = true,\n children,\n}: FormEnhancerProps) {\n const ready = useDeferredActivation(defer)\n // Flipped only after the enhancement has actually committed to the DOM, so\n // the shell never disappears ahead of its replacement.\n const [enhanced, setEnhanced] = useState(false)\n\n return (\n <div\n data-sk-form-mount={enhanced ? 'enhanced' : 'shell'}\n data-sk-part=\"form-mount\"\n style={enter === 'fade' ? FADE_HOST : undefined}\n >\n {enter === 'fade' && <EnterStyles />}\n {ready ? (\n <Suspense fallback={children}>\n <Enhanced onMount={() => setEnhanced(true)} fallback={children}>\n <InteractiveForm\n formId={formId}\n initialConfig={initialConfig}\n className={className}\n nativeReturnTo={nativeReturnTo}\n experience={experience}\n defaultValues={defaultValues}\n onSuccess={onSuccess}\n onError={onError}\n />\n </Enhanced>\n </Suspense>\n ) : (\n children\n )}\n </div>\n )\n}\n\n/**\n * Reports the moment the enhancement is on screen, and keeps the shell\n * rendered if it throws. An error boundary is the difference between \"the\n * fancy version failed\" and \"there is no form on this page\".\n */\nclass Enhanced extends React.Component<\n { onMount: () => void; fallback: React.ReactNode; children: React.ReactNode },\n { failed: boolean }\n> {\n state = { failed: false }\n\n static getDerivedStateFromError() {\n return { failed: true }\n }\n\n componentDidCatch(err: unknown) {\n console.error('[Forms] Enhancement failed; keeping the native form:', err)\n }\n\n componentDidMount() {\n if (!this.state.failed) this.props.onMount()\n }\n\n render() {\n if (this.state.failed) return this.props.fallback\n return <FrameTag>{this.props.children}</FrameTag>\n }\n}\n\n/** Adds data-sk-enter for one frame so a CSS transition has something to run. */\nfunction FrameTag({ children }: { children: React.ReactNode }) {\n const ref = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const el = ref.current\n if (!el) return\n el.setAttribute('data-sk-enter', '')\n const id = requestAnimationFrame(() => el.removeAttribute('data-sk-enter'))\n return () => cancelAnimationFrame(id)\n }, [])\n return (\n <div ref={ref} style={{ display: 'contents' }}>\n {children}\n </div>\n )\n}\n\nconst FADE_HOST: React.CSSProperties = {\n transition:\n 'opacity var(--sk-form-enter-duration, 320ms) var(--sk-form-enter-easing, cubic-bezier(.22,1,.36,1))',\n}\n\n/**\n * Scoped to [data-sk-part=\"form-mount\"] so it can never touch a site's own\n * markup. Emitted once per form; identical text dedupes in every browser's\n * style cache and gzips to nothing.\n */\nfunction EnterStyles() {\n return (\n <style\n // biome-ignore lint/security/noDangerouslySetInnerHtml: static string, no interpolation\n dangerouslySetInnerHTML={{\n __html: `\n[data-sk-part=\"form-mount\"][data-sk-form-mount=\"shell\"]{opacity:.55}\n[data-sk-part=\"form-mount\"][data-sk-form-mount=\"enhanced\"]{opacity:1}\n[data-sk-part=\"form-mount\"] [data-sk-enter]{opacity:0;transform:translateY(var(--sk-form-enter-distance,6px))}\n[data-sk-part=\"form-mount\"] [data-sk-enter] *{transition:none!important}\n@media (prefers-reduced-motion: reduce){\n[data-sk-part=\"form-mount\"]{transition:none!important}\n[data-sk-part=\"form-mount\"][data-sk-form-mount=\"shell\"]{opacity:1}\n[data-sk-part=\"form-mount\"] [data-sk-enter]{opacity:1;transform:none}\n}`,\n }}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/forms/FormEnhancer.tsx"],"names":["lazy","useDeferredActivation","useState","jsxs","jsx","Suspense","React","useRef","useEffect"],"mappings":"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","file":"chunk-QWXTQC3N.js","sourcesContent":["'use client'\n\n/**\n * FormEnhancer — the only client code a managed form needs up front.\n *\n * Renders the server-rendered shell (<StaticForm>, passed as `children`) until\n * an idle/first-interaction gate fires, then lazy-imports the interactive form\n * and swaps it in. Everything expensive — validation, conditional logic,\n * spotlight/stage, celebration, momentum — lives behind that dynamic import,\n * so a page ships this boundary and nothing else in its initial chunk set.\n *\n * The shell is a REAL form the whole time (native action + signed token), so\n * the progression is:\n *\n * no JS at all -> shell, submits natively. Works.\n * JS, pre-idle -> shell, submits natively. Works.\n * JS, post-idle -> enhanced form, submits over JSON. Works, with delight.\n * chunk 404s -> shell stays. Works. (Never left blank.)\n *\n * That last line is the invariant to protect: the shell is only removed once\n * the enhancement has actually rendered. Do not \"hide the shell then load\" —\n * a CDN hiccup would leave a visitor staring at an empty box where the form\n * used to be.\n *\n * ── Entrance animation ──────────────────────────────────────────────────\n *\n * Above-the-fold forms upgrade while the visitor is looking at them, so the\n * swap must not pop. The wrapper carries `data-sk-form-mount=\"shell\"` and\n * flips to `\"enhanced\"`, and the enhanced form gets `data-sk-enter` for one\n * frame, so a site can style the transition entirely in CSS:\n *\n * [data-sk-form-mount] { transition: opacity .35s ease }\n * [data-sk-form-mount=\"shell\"] { opacity: .6 }\n *\n * Defaults ship as CSS variables rather than hard-coded values:\n *\n * --sk-form-enter-duration (default 320ms)\n * --sk-form-enter-easing (default cubic-bezier(.22,1,.36,1))\n * --sk-form-enter-distance (default 6px)\n *\n * `enter=\"none\"` opts out entirely; `enter=\"custom\"` emits the data\n * attributes but no site-kit styles, leaving the animation to the site.\n * Every default is collapsed by prefers-reduced-motion.\n */\n\nimport React, { lazy, Suspense, useEffect, useRef, useState } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport type { FormExperience, FormSubmission } from './types'\n\n/** The heavy half. Nothing else in this module may import it statically. */\nconst InteractiveForm = lazy(() =>\n import('./ManagedForm').then((m) => ({ default: m.ManagedForm })),\n)\n\nexport type FormEnterAnimation = 'fade' | 'none' | 'custom'\n\nexport interface FormEnhancerProps {\n formId: string\n /** Server-fetched raw config — hands the enhancement its fields instantly. */\n initialConfig?: Record<string, unknown> | null\n className?: string\n nativeReturnTo?: string\n experience?: FormExperience\n /** Pre-fill field values by slug. See ManagedForm.defaultValues. */\n defaultValues?: Record<string, unknown>\n onSuccess?: (submission: FormSubmission) => void\n onError?: (error: Error) => void\n /**\n * How the enhanced form arrives. 'fade' (default) crossfades and lifts it\n * into place; 'none' swaps instantly; 'custom' emits the data attributes\n * and no styles so the site owns the animation.\n */\n enter?: FormEnterAnimation\n /**\n * Set false to enhance immediately instead of waiting for idle. Only worth\n * it for a form that is the entire point of the page AND above the fold.\n */\n defer?: boolean\n /** The server-rendered <StaticForm>. Shown until the enhancement mounts. */\n children: React.ReactNode\n}\n\nexport function FormEnhancer({\n formId,\n initialConfig,\n className,\n nativeReturnTo,\n experience,\n defaultValues,\n onSuccess,\n onError,\n enter = 'fade',\n defer = true,\n children,\n}: FormEnhancerProps) {\n const ready = useDeferredActivation(defer)\n // Flipped only after the enhancement has actually committed to the DOM, so\n // the shell never disappears ahead of its replacement.\n const [enhanced, setEnhanced] = useState(false)\n\n return (\n <div\n data-sk-form-mount={enhanced ? 'enhanced' : 'shell'}\n data-sk-part=\"form-mount\"\n style={enter === 'fade' ? FADE_HOST : undefined}\n >\n {enter === 'fade' && <EnterStyles />}\n {ready ? (\n <Suspense fallback={children}>\n <Enhanced onMount={() => setEnhanced(true)} fallback={children}>\n <InteractiveForm\n formId={formId}\n initialConfig={initialConfig}\n className={className}\n nativeReturnTo={nativeReturnTo}\n experience={experience}\n defaultValues={defaultValues}\n onSuccess={onSuccess}\n onError={onError}\n />\n </Enhanced>\n </Suspense>\n ) : (\n children\n )}\n </div>\n )\n}\n\n/**\n * Reports the moment the enhancement is on screen, and keeps the shell\n * rendered if it throws. An error boundary is the difference between \"the\n * fancy version failed\" and \"there is no form on this page\".\n */\nclass Enhanced extends React.Component<\n { onMount: () => void; fallback: React.ReactNode; children: React.ReactNode },\n { failed: boolean }\n> {\n state = { failed: false }\n\n static getDerivedStateFromError() {\n return { failed: true }\n }\n\n componentDidCatch(err: unknown) {\n console.error('[Forms] Enhancement failed; keeping the native form:', err)\n }\n\n componentDidMount() {\n if (!this.state.failed) this.props.onMount()\n }\n\n render() {\n if (this.state.failed) return this.props.fallback\n return <FrameTag>{this.props.children}</FrameTag>\n }\n}\n\n/** Adds data-sk-enter for one frame so a CSS transition has something to run. */\nfunction FrameTag({ children }: { children: React.ReactNode }) {\n const ref = useRef<HTMLDivElement>(null)\n useEffect(() => {\n const el = ref.current\n if (!el) return\n el.setAttribute('data-sk-enter', '')\n const id = requestAnimationFrame(() => el.removeAttribute('data-sk-enter'))\n return () => cancelAnimationFrame(id)\n }, [])\n return (\n <div ref={ref} style={{ display: 'contents' }}>\n {children}\n </div>\n )\n}\n\nconst FADE_HOST: React.CSSProperties = {\n transition:\n 'opacity var(--sk-form-enter-duration, 320ms) var(--sk-form-enter-easing, cubic-bezier(.22,1,.36,1))',\n}\n\n/**\n * Scoped to [data-sk-part=\"form-mount\"] so it can never touch a site's own\n * markup. Emitted once per form; identical text dedupes in every browser's\n * style cache and gzips to nothing.\n */\nfunction EnterStyles() {\n return (\n <style\n // biome-ignore lint/security/noDangerouslySetInnerHtml: static string, no interpolation\n dangerouslySetInnerHTML={{\n __html: `\n[data-sk-part=\"form-mount\"][data-sk-form-mount=\"shell\"]{opacity:.55}\n[data-sk-part=\"form-mount\"][data-sk-form-mount=\"enhanced\"]{opacity:1}\n[data-sk-part=\"form-mount\"] [data-sk-enter]{opacity:0;transform:translateY(var(--sk-form-enter-distance,6px))}\n[data-sk-part=\"form-mount\"] [data-sk-enter] *{transition:none!important}\n@media (prefers-reduced-motion: reduce){\n[data-sk-part=\"form-mount\"]{transition:none!important}\n[data-sk-part=\"form-mount\"][data-sk-form-mount=\"shell\"]{opacity:1}\n[data-sk-part=\"form-mount\"] [data-sk-enter]{opacity:1;transform:none}\n}`,\n }}\n />\n )\n}\n"]}
@@ -460,7 +460,7 @@ async function BlogPost({
460
460
  ...item,
461
461
  answer: addExternalLinkTargets(item.answer || "", siteUrlResolved)
462
462
  })) ?? faqRaw;
463
- const { BlogViewTracker } = await import('./BlogViewTracker-KXRZHN3U.mjs');
463
+ const { BlogViewTracker } = await import('./BlogViewTracker-YQMTEGYZ.mjs');
464
464
  if (children) {
465
465
  return /* @__PURE__ */ jsxs(Fragment, { children: [
466
466
  /* @__PURE__ */ jsx(BlogViewTracker, { slug: post.slug, site }),
@@ -1240,5 +1240,5 @@ async function RelatedPosts({
1240
1240
  }
1241
1241
 
1242
1242
  export { BlogLayout, BlogList, BlogPage, BlogPost, BlogPostPage, BlogSidebar, CategoryPage, ClusterNavigation, RelatedPosts, ServiceCallout, ServiceCallouts, getAuthorSocialLinks, readingTimeMinutes };
1243
- //# sourceMappingURL=chunk-VJ74275U.mjs.map
1244
- //# sourceMappingURL=chunk-VJ74275U.mjs.map
1243
+ //# sourceMappingURL=chunk-RA4DCRMR.mjs.map
1244
+ //# sourceMappingURL=chunk-RA4DCRMR.mjs.map