@sonordev/site-kit 8.8.1 → 8.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +9 -0
  3. package/agent-manifest.json +49 -42
  4. package/dist/AddressAutocomplete-LQS6GQ4R.js +241 -0
  5. package/dist/AnalyticsProvider-JWS7BLFY.js +19 -0
  6. package/dist/{ArticleViewTracker-PV2RD3P6.js → ArticleViewTracker-CDPVMUAO.js} +11 -10
  7. package/dist/{BlocksPopup-NEEFV2L3.js → BlocksPopup-C5PNJ7U6.js} +4 -5
  8. package/dist/ChatWidget-HEPOE3YC.js +30 -0
  9. package/dist/{FileField-MJ3RCNFJ.js → FileField-6R5LS5NU.js} +1 -3
  10. package/dist/{FormSpotlight-NQPQFZS7.js → FormSpotlight-2BSE7PD2.js} +5 -4
  11. package/dist/{FormStage-4T5PJR5K.js → FormStage-3G46OPPO.js} +5 -4
  12. package/dist/ManagedForm-LTXEU25N.js +29 -0
  13. package/dist/{ManagedNewsletterForm-TUYGN6O3.js → ManagedNewsletterForm-WE6P5DMV.js} +21 -11
  14. package/dist/{SignalCore-OW3YIH6M.js → SignalCore-IP7FE6SN.js} +90 -36
  15. package/dist/{SiteChat-XMKHBSEK.js → SiteChat-3FQYMHCP.js} +2 -2
  16. package/dist/{SiteDesignReporter-BRH7ORQS.js → SiteDesignReporter-HGTX4FX2.js} +5 -6
  17. package/dist/SitePopups-V7MCNSGE.js +19 -0
  18. package/dist/SitemapSync-OAJ7SIET.js +7 -0
  19. package/dist/SitemapSync.d.ts +1 -1
  20. package/dist/_client/booking-widget.d.ts +1 -1
  21. package/dist/_client/booking-widget.js +6 -7
  22. package/dist/_client/reviewed-signal-experiment.d.ts +9 -0
  23. package/dist/_client/reviewed-signal-experiment.js +89 -0
  24. package/dist/_client/testimonial-section.d.ts +1 -1
  25. package/dist/admin-auth/index.d.ts +3 -3
  26. package/dist/affiliates/AffiliatesWidget.d.ts +1 -1
  27. package/dist/affiliates/api.d.ts +1 -1
  28. package/dist/affiliates/index.d.ts +6 -6
  29. package/dist/affiliates/index.js +1 -3
  30. package/dist/affiliates/useAffiliates.d.ts +1 -1
  31. package/dist/analytics/AnalyticsProvider.d.ts +1 -1
  32. package/dist/analytics/dispatch.d.ts +1 -1
  33. package/dist/analytics/index.d.ts +6 -6
  34. package/dist/analytics/index.js +22 -12
  35. package/dist/analytics/publication-cta.d.ts +1 -1
  36. package/dist/analytics/send-gate.d.ts +8 -4
  37. package/dist/api-X6N6V2H3.js +5 -0
  38. package/dist/articles/Article.d.ts +1 -1
  39. package/dist/articles/ArticleFAQ.d.ts +1 -1
  40. package/dist/articles/ArticleFaqSection.d.ts +1 -1
  41. package/dist/articles/ArticleList.d.ts +1 -1
  42. package/dist/articles/ArticleViewTracker.d.ts +1 -1
  43. package/dist/articles/AuthorCard.d.ts +1 -1
  44. package/dist/articles/AuthorPage.d.ts +1 -1
  45. package/dist/articles/ClusterLandingPage.d.ts +1 -1
  46. package/dist/articles/ClusterNavigation.d.ts +1 -1
  47. package/dist/articles/ManagedNewsletterForm.d.ts +2 -2
  48. package/dist/articles/NewsletterShell.d.ts +1 -1
  49. package/dist/articles/NewsletterWidget.d.ts +1 -1
  50. package/dist/articles/PublicationLayout.d.ts +1 -1
  51. package/dist/articles/PublicationSidebar.d.ts +1 -1
  52. package/dist/articles/RelatedPosts.d.ts +1 -1
  53. package/dist/articles/ServiceCallout.d.ts +1 -1
  54. package/dist/articles/TableOfContents.d.ts +1 -1
  55. package/dist/articles/article-photos.d.ts +1 -1
  56. package/dist/articles/article-styles.d.ts +1 -1
  57. package/dist/articles/article-tables.d.ts +1 -1
  58. package/dist/articles/artwork.d.ts +1 -1
  59. package/dist/articles/author-schema.d.ts +1 -1
  60. package/dist/articles/author-social.d.ts +1 -1
  61. package/dist/articles/excerpt.d.ts +1 -1
  62. package/dist/articles/index.d.ts +1 -1
  63. package/dist/articles/index.js +3 -3
  64. package/dist/articles/news-sitemap.d.ts +1 -1
  65. package/dist/articles/processArticleHtml.d.ts +1 -1
  66. package/dist/articles/public-reads.d.ts +1 -1
  67. package/dist/articles/reading-time.d.ts +1 -1
  68. package/dist/articles/routes.d.ts +1 -1
  69. package/dist/articles/server-core.d.ts +1 -1
  70. package/dist/articles/server-ui.d.ts +1 -1
  71. package/dist/articles/server-ui.js +6 -6
  72. package/dist/articles/server.d.ts +1 -1
  73. package/dist/articles/server.js +5 -5
  74. package/dist/articles/types.d.ts +1 -1
  75. package/dist/articles/widget-styles.d.ts +1 -1
  76. package/dist/brand/extract-brand-profile.d.ts +1 -1
  77. package/dist/chat/ChatWidget.d.ts +1 -1
  78. package/dist/chat/EchoUiActions.d.ts +1 -1
  79. package/dist/chat/SiteChat.d.ts +2 -2
  80. package/dist/chat/chat-messages.d.ts +1 -1
  81. package/dist/chat/index.d.ts +7 -7
  82. package/dist/chat/index.js +17 -9
  83. package/dist/chat/launcher-placement.d.ts +1 -1
  84. package/dist/{chunk-OPUY4RS6.js → chunk-2LBKIE2K.js} +2 -1
  85. package/dist/chunk-3RBOES2C.js +36 -0
  86. package/dist/{chunk-XIDWNXZN.js → chunk-3W3MN6Z7.js} +2 -2
  87. package/dist/{chunk-CVADNHJ4.js → chunk-3WMNHFZH.js} +9 -0
  88. package/dist/chunk-533ZSRJF.js +147 -0
  89. package/dist/{chunk-UPFU63L4.js → chunk-55GFMOI6.js} +1 -1
  90. package/dist/chunk-5IVD6G77.js +37 -0
  91. package/dist/chunk-6CIO4X6P.js +77 -0
  92. package/dist/{chunk-G7BRCSV6.js → chunk-727353NY.js} +11 -7
  93. package/dist/{chunk-PSS6M4CG.js → chunk-75N2WALV.js} +2 -2
  94. package/dist/{chunk-ZQSCMYZO.js → chunk-7643MCD2.js} +6 -3
  95. package/dist/chunk-7IZUUXXO.js +1 -0
  96. package/dist/{chunk-GXWM5KNS.js → chunk-7PWXPN53.js} +40 -45
  97. package/dist/{chunk-C7TLGL3R.js → chunk-7VMA3KCN.js} +30 -4
  98. package/dist/{chunk-IDC5CVBR.js → chunk-A66TIJWU.js} +1 -1
  99. package/dist/chunk-ACZ5JNSL.js +78 -0
  100. package/dist/chunk-AG2RDHYZ.js +45 -0
  101. package/dist/{chunk-LNSNA3W4.js → chunk-C4XK472G.js} +4 -3
  102. package/dist/chunk-D4M5K6JN.js +25 -0
  103. package/dist/{chunk-F6WLHVMQ.js → chunk-D4R3FQED.js} +1 -1
  104. package/dist/{chunk-URLTBVRX.js → chunk-DW5X4BC7.js} +3 -3
  105. package/dist/chunk-FRY6PBT6.js +31 -0
  106. package/dist/{chunk-JYITKUUB.js → chunk-G5WUX7VE.js} +1 -1
  107. package/dist/{chunk-VPZJ7ZTL.js → chunk-HHEDRZOJ.js} +1 -1
  108. package/dist/{chunk-2WM4TNDF.js → chunk-HLN7A4GL.js} +1 -1
  109. package/dist/{chunk-DYROJGI2.js → chunk-HNVLINPI.js} +1 -1
  110. package/dist/{chunk-NFGAXWCN.js → chunk-J4R7MHV2.js} +31 -13
  111. package/dist/chunk-JT7GHHMV.js +56 -0
  112. package/dist/chunk-KMNHNCVG.js +20 -0
  113. package/dist/chunk-KQKUXIUD.js +25 -0
  114. package/dist/chunk-MDBXGN6W.js +13 -0
  115. package/dist/{chunk-IWNJCRXW.js → chunk-MIKVCYGX.js} +125 -118
  116. package/dist/{chunk-GQN4BGK6.js → chunk-MKU5ZORB.js} +2 -31
  117. package/dist/chunk-MOACHHOJ.js +20 -0
  118. package/dist/{chunk-M5JIHQ42.js → chunk-NBNDH2J6.js} +2 -2
  119. package/dist/{chunk-YRQS7VAH.js → chunk-NH7K252M.js} +6 -4
  120. package/dist/chunk-NHDRA4Y5.js +6 -0
  121. package/dist/{chunk-SLFYTELD.js → chunk-NWEIHCSE.js} +3 -1
  122. package/dist/{chunk-EATJPSTS.js → chunk-O5LQUBBN.js} +1 -1
  123. package/dist/chunk-OCNODBH4.js +2 -0
  124. package/dist/{chunk-TP32MRXV.js → chunk-OEHIXCYS.js} +2 -2
  125. package/dist/{chunk-Y6SHFILE.js → chunk-OEOSR5EG.js} +1 -1
  126. package/dist/{chunk-KG5IEV7I.js → chunk-ORSQKTMN.js} +1 -1
  127. package/dist/{chunk-SVHPILS3.js → chunk-P7S45DD7.js} +1 -1
  128. package/dist/chunk-PVY7X5UR.js +21 -0
  129. package/dist/{chunk-HN7GVGWC.js → chunk-Q2OE32TH.js} +3 -3
  130. package/dist/chunk-RMPXSEEU.js +62 -0
  131. package/dist/{chunk-THXELZTQ.js → chunk-RUV6DCKL.js} +1 -1
  132. package/dist/{chunk-2WDWQI7K.js → chunk-RYR6N4X4.js} +1 -1
  133. package/dist/{chunk-ODOV76VW.js → chunk-STIVFCWM.js} +1 -1
  134. package/dist/{chunk-6BFQI3ZE.js → chunk-TLKLHSRJ.js} +2 -2
  135. package/dist/chunk-TPHOIE4I.js +73 -0
  136. package/dist/{chunk-SBPUFTMP.js → chunk-UMF5OILQ.js} +2 -2
  137. package/dist/chunk-WYNDBJG7.js +66 -0
  138. package/dist/{chunk-OWZWRP7Y.js → chunk-XAPSYDVT.js} +2 -2
  139. package/dist/{chunk-PAYCK7FC.js → chunk-XJZLXUTG.js} +1 -1
  140. package/dist/{chunk-YEX5RAEU.js → chunk-Y7DZ2ND2.js} +38 -27
  141. package/dist/{chunk-AYQEIMGS.js → chunk-YJ6PRJ7Y.js} +103 -22
  142. package/dist/chunk-Z4XJOVQX.js +9 -0
  143. package/dist/{chunk-6DXQHNZK.js → chunk-Z62W7Q3T.js} +1 -1
  144. package/dist/client/index.d.ts +8 -8
  145. package/dist/client/index.js +9 -8
  146. package/dist/config/index.d.ts +1 -1
  147. package/dist/contracts/broadcast-layouts.d.ts +8 -0
  148. package/dist/contracts/crm-disposition.d.ts +87 -0
  149. package/dist/contracts/decision-roles.d.ts +39 -0
  150. package/dist/contracts/entries.d.ts +1 -1
  151. package/dist/contracts/funnels.d.ts +85 -2
  152. package/dist/contracts/portfolio.d.ts +1 -1
  153. package/dist/contracts/publication-branding.d.ts +3 -3
  154. package/dist/contracts/resonance-constants.d.ts +4 -0
  155. package/dist/contracts/resonance.d.ts +8461 -0
  156. package/dist/contracts/signal-experiments.d.ts +219 -0
  157. package/dist/contracts/site-edit.d.ts +2 -2
  158. package/dist/contracts/sites.d.ts +1 -1
  159. package/dist/contracts/slots.d.ts +2 -2
  160. package/dist/contracts/wire-schema.d.ts +36 -0
  161. package/dist/controls-KLG6VQLO.js +14 -0
  162. package/dist/cta-bar/CtaBar.d.ts +1 -1
  163. package/dist/cta-bar/client.js +3 -2
  164. package/dist/cta-bar/index.d.ts +4 -4
  165. package/dist/cta-bar/index.js +4 -3
  166. package/dist/fleet/FleetHeartbeat.d.ts +2 -2
  167. package/dist/fleet/contract.d.ts +1 -1
  168. package/dist/fleet/heartbeat.d.ts +2 -2
  169. package/dist/fleet/index.d.ts +6 -6
  170. package/dist/fleet/index.js +4 -5
  171. package/dist/forms/AddressAutocomplete.d.ts +20 -0
  172. package/dist/forms/FileField.d.ts +1 -1
  173. package/dist/forms/FormClient.d.ts +4 -3
  174. package/dist/forms/FormEnhancer.d.ts +3 -2
  175. package/dist/forms/FormField.d.ts +3 -1
  176. package/dist/forms/FormSpotlight.d.ts +2 -2
  177. package/dist/forms/FormStage.d.ts +2 -2
  178. package/dist/forms/ManagedForm.d.ts +2 -2
  179. package/dist/forms/PrivateFileField.d.ts +1 -1
  180. package/dist/forms/ServerForm.d.ts +5 -4
  181. package/dist/forms/StaticForm.d.ts +1 -1
  182. package/dist/forms/contract.d.ts +1 -1
  183. package/dist/forms/controls.d.ts +5 -0
  184. package/dist/forms/experience-plan.d.ts +1 -1
  185. package/dist/forms/field-autocomplete.d.ts +1 -1
  186. package/dist/forms/field-controls.d.ts +4 -2
  187. package/dist/forms/field-rules.d.ts +1 -1
  188. package/dist/forms/form-dom-values.d.ts +1 -1
  189. package/dist/forms/index.d.ts +18 -18
  190. package/dist/forms/index.js +21 -11
  191. package/dist/forms/normalize-config.d.ts +1 -1
  192. package/dist/forms/server.d.ts +4 -4
  193. package/dist/forms/server.js +5 -5
  194. package/dist/forms/static.d.ts +2 -2
  195. package/dist/forms/static.js +2 -2
  196. package/dist/forms/submitForm.d.ts +2 -2
  197. package/dist/forms/tracking-session.d.ts +1 -1
  198. package/dist/forms/types.d.ts +9 -0
  199. package/dist/forms/useForm.d.ts +2 -2
  200. package/dist/forms/webmcp.d.ts +2 -2
  201. package/dist/images/api.d.ts +1 -1
  202. package/dist/images/index.d.ts +6 -6
  203. package/dist/images/index.js +2 -4
  204. package/dist/images/server.d.ts +2 -2
  205. package/dist/index.d.ts +13 -13
  206. package/dist/index.js +1 -1
  207. package/dist/landing/contract.d.ts +1 -1
  208. package/dist/landing/contract.js +2 -1
  209. package/dist/landing/index.d.ts +3 -3
  210. package/dist/landing/index.js +3 -2
  211. package/dist/landing/managed-server.d.ts +2 -2
  212. package/dist/landing/managed.d.ts +10 -2
  213. package/dist/landing/server.d.ts +7 -7
  214. package/dist/landing/server.js +13 -8
  215. package/dist/layout/AiDiscoveryLinks.d.ts +1 -1
  216. package/dist/layout/SiteKitClientProviders.d.ts +1 -1
  217. package/dist/layout/SiteKitLayout.d.ts +2 -2
  218. package/dist/layout/client.d.ts +1 -1
  219. package/dist/layout/client.js +15 -11
  220. package/dist/layout/index.d.ts +5 -5
  221. package/dist/layout/index.js +17 -13
  222. package/dist/layout/types.d.ts +2 -2
  223. package/dist/llms/AEOComponents.d.ts +1 -1
  224. package/dist/llms/SpeakableSchema.d.ts +1 -1
  225. package/dist/llms/api.d.ts +1 -1
  226. package/dist/llms/client.d.ts +3 -3
  227. package/dist/llms/contract.d.ts +1 -1
  228. package/dist/llms/generateLLMsTxt.d.ts +1 -1
  229. package/dist/llms/handlers.d.ts +1 -1
  230. package/dist/llms/index.d.ts +21 -21
  231. package/dist/llms/index.js +5 -5
  232. package/dist/llms/merge.d.ts +1 -1
  233. package/dist/llms/sourcedFacts.d.ts +1 -1
  234. package/dist/llms/types.d.ts +5 -5
  235. package/dist/llms/writeLLMsTxt.d.ts +3 -3
  236. package/dist/maps/GoogleMap.d.ts +1 -1
  237. package/dist/maps/NeighborhoodMap.d.ts +1 -1
  238. package/dist/maps/api.d.ts +1 -1
  239. package/dist/maps/index.d.ts +5 -5
  240. package/dist/maps/index.js +8 -80
  241. package/dist/maps/places-library.d.ts +34 -0
  242. package/dist/mcp/WebMcpTools.d.ts +1 -1
  243. package/dist/mcp/client.d.ts +2 -2
  244. package/dist/mcp/discovery.d.ts +2 -2
  245. package/dist/mcp/handlers.d.ts +4 -4
  246. package/dist/mcp/index.d.ts +12 -12
  247. package/dist/mcp/protocol.d.ts +1 -1
  248. package/dist/mcp/report.d.ts +1 -1
  249. package/dist/mcp/serverCard.d.ts +1 -1
  250. package/dist/mcp/sonor.d.ts +5 -5
  251. package/dist/mcp/sonor.js +12 -12
  252. package/dist/mcp/transport.d.ts +1 -1
  253. package/dist/motion/Parallax.d.ts +1 -1
  254. package/dist/motion/ScrollScene.d.ts +1 -1
  255. package/dist/motion/gsap.d.ts +2 -2
  256. package/dist/motion/index.d.ts +9 -9
  257. package/dist/motion/three.d.ts +1 -1
  258. package/dist/og/index.d.ts +5 -5
  259. package/dist/og/pages.d.ts +1 -1
  260. package/dist/og/route-fit.d.ts +17 -0
  261. package/dist/og/template.d.ts +1 -1
  262. package/dist/places-library-RU2YNKFK.js +54 -0
  263. package/dist/portfolio/contract.d.ts +1 -1
  264. package/dist/press-kit/articles/Article.d.ts +2 -2
  265. package/dist/press-kit/articles/ArticleFaqSection.d.ts +1 -1
  266. package/dist/press-kit/articles/ArticleList.d.ts +2 -2
  267. package/dist/press-kit/articles/AuthorCard.d.ts +1 -1
  268. package/dist/press-kit/articles/AuthorPage.d.ts +1 -1
  269. package/dist/press-kit/articles/ClusterLandingPage.d.ts +2 -2
  270. package/dist/press-kit/articles/ClusterNavigation.d.ts +2 -2
  271. package/dist/press-kit/articles/ManagedNewsletterForm.d.ts +2 -2
  272. package/dist/press-kit/articles/PublicationLayout.d.ts +2 -2
  273. package/dist/press-kit/articles/PublicationSidebar.d.ts +1 -1
  274. package/dist/press-kit/articles/RelatedPosts.d.ts +2 -2
  275. package/dist/press-kit/articles/TableOfContents.d.ts +1 -1
  276. package/dist/press-kit/articles/article-body.d.ts +1 -1
  277. package/dist/press-kit/articles/article-headings.d.ts +1 -1
  278. package/dist/press-kit/articles/article-photos.d.ts +1 -1
  279. package/dist/press-kit/articles/artwork.d.ts +2 -2
  280. package/dist/press-kit/articles/author-schema.d.ts +2 -2
  281. package/dist/press-kit/articles/author-social.d.ts +1 -1
  282. package/dist/press-kit/articles/index.d.ts +23 -23
  283. package/dist/press-kit/articles/news-sitemap.d.ts +2 -2
  284. package/dist/press-kit/articles/public-reads.d.ts +1 -1
  285. package/dist/press-kit/articles/publication-reads.d.ts +2 -2
  286. package/dist/press-kit/articles/reading-time.d.ts +1 -1
  287. package/dist/press-kit/articles/server-core.d.ts +20 -20
  288. package/dist/press-kit/articles/server-ui.d.ts +20 -20
  289. package/dist/press-kit/articles/types.d.ts +1 -1
  290. package/dist/proxy/index.d.ts +5 -5
  291. package/dist/proxy/index.js +1 -1
  292. package/dist/reputation/TestimonialSection.d.ts +1 -1
  293. package/dist/reputation/VisualReviewCard.d.ts +1 -1
  294. package/dist/reputation/api.d.ts +1 -1
  295. package/dist/reputation/index.d.ts +4 -4
  296. package/dist/reputation/server.d.ts +3 -3
  297. package/dist/resonance/ResonanceRuntime.d.ts +7 -0
  298. package/dist/resonance/bridge.d.ts +16 -0
  299. package/dist/resonance/consent-adapter.d.ts +26 -0
  300. package/dist/resonance/controller-registry.d.ts +14 -0
  301. package/dist/resonance/controller.d.ts +103 -0
  302. package/dist/resonance/form-context.d.ts +5 -0
  303. package/dist/resonance/index.d.ts +4 -0
  304. package/dist/resonance/index.js +9 -0
  305. package/dist/resonance/meta-pixel.d.ts +67 -0
  306. package/dist/resonance/providers.d.ts +32 -0
  307. package/dist/resonance/runtime-core.d.ts +5 -0
  308. package/dist/revalidate/index.d.ts +3 -3
  309. package/dist/revalidate/index.js +2 -2
  310. package/dist/robots/index.d.ts +3 -3
  311. package/dist/robots/indexnow.js +2 -2
  312. package/dist/runtime/index.d.ts +7 -7
  313. package/dist/runtime/index.js +4 -5
  314. package/dist/runtime-core-EU2RZMOL.js +2213 -0
  315. package/dist/seo/ManagedFAQ.d.ts +1 -1
  316. package/dist/seo/ManagedInternalLinks.d.ts +1 -1
  317. package/dist/seo/ManagedSchema.d.ts +1 -1
  318. package/dist/seo/ManagedScripts.d.ts +1 -1
  319. package/dist/seo/client.d.ts +1 -1
  320. package/dist/seo/client.js +3 -5
  321. package/dist/seo/entry-indexnow.d.ts +1 -1
  322. package/dist/seo/entry-llms-client.d.ts +1 -1
  323. package/dist/seo/entry-llms-contract.d.ts +1 -1
  324. package/dist/seo/entry-llms.d.ts +1 -1
  325. package/dist/seo/entry-meta-contract.d.ts +1 -1
  326. package/dist/seo/entry-og-route.d.ts +1 -1
  327. package/dist/seo/entry-og.d.ts +1 -1
  328. package/dist/seo/entry-pages-contract.d.ts +1 -1
  329. package/dist/seo/entry-redirects.d.ts +1 -1
  330. package/dist/seo/entry-robots.d.ts +1 -1
  331. package/dist/seo/entry-sitemap.d.ts +1 -1
  332. package/dist/seo/getManagedMetadata.d.ts +1 -1
  333. package/dist/seo/index.d.ts +12 -12
  334. package/dist/seo/index.js +9 -11
  335. package/dist/seo/indexnow.d.ts +1 -1
  336. package/dist/seo/indexnow.js +2 -2
  337. package/dist/seo/llms/client.d.ts +1 -1
  338. package/dist/seo/llms/contract.d.ts +1 -1
  339. package/dist/seo/llms.d.ts +1 -1
  340. package/dist/seo/llms.js +5 -5
  341. package/dist/seo/meta/contract.d.ts +1 -1
  342. package/dist/seo/og.d.ts +1 -1
  343. package/dist/seo/pages/contract.d.ts +1 -1
  344. package/dist/seo/redirects.d.ts +1 -1
  345. package/dist/seo/register-sitemap-cli-impl.d.ts +1 -1
  346. package/dist/seo/register-sitemap-cli.js +1 -1
  347. package/dist/seo/robots.d.ts +1 -1
  348. package/dist/seo/routing.d.ts +1 -1
  349. package/dist/seo/server.d.ts +4 -4
  350. package/dist/seo/server.js +3 -3
  351. package/dist/seo/sitemap.d.ts +1 -1
  352. package/dist/seo/sitemap.js +3 -3
  353. package/dist/seo/types.d.ts +1 -1
  354. package/dist/seo-meta/contract.d.ts +1 -1
  355. package/dist/seo-pages/contract.d.ts +1 -1
  356. package/dist/server/index.d.ts +5 -5
  357. package/dist/server/index.js +3 -3
  358. package/dist/server/mint-site-token.d.ts +1 -1
  359. package/dist/server/server-fetch.d.ts +8 -0
  360. package/dist/{server-api-XIKDWSNO.js → server-api-A34TABT2.js} +2 -2
  361. package/dist/shared/build-entries.d.ts +3 -1
  362. package/dist/shared/color.d.ts +1 -1
  363. package/dist/shared/fetchWithRetry.d.ts +6 -0
  364. package/dist/shared/frame.d.ts +1 -1
  365. package/dist/shared/identity-storage.d.ts +6 -4
  366. package/dist/shared/identity.d.ts +1 -3
  367. package/dist/shared/index.d.ts +5 -5
  368. package/dist/shared/index.js +1 -1
  369. package/dist/shared/measurement-analytics.d.ts +1 -0
  370. package/dist/shared/measurement-policy.d.ts +6 -0
  371. package/dist/shared/measurement-proof.d.ts +5 -0
  372. package/dist/shared/measurement-store.d.ts +34 -0
  373. package/dist/shared/measurement-writer.d.ts +6 -0
  374. package/dist/shared/publishCredential.d.ts +1 -1
  375. package/dist/shared/reporting-gate.d.ts +3 -1
  376. package/dist/shared/site-token-claims.d.ts +18 -0
  377. package/dist/shared/site-token-configuration.d.ts +9 -0
  378. package/dist/shared/site-token-refresh.d.ts +7 -0
  379. package/dist/shared/site-token-state.d.ts +23 -0
  380. package/dist/shared/siteToken.d.ts +5 -39
  381. package/dist/shared/sonor-auth-state.d.ts +3 -0
  382. package/dist/shared/sonor-beacon.d.ts +13 -0
  383. package/dist/shared/sonor-fetch-runtime.d.ts +2 -0
  384. package/dist/shared/sonor-fetch.d.ts +7 -0
  385. package/dist/shared/sonorFetch.d.ts +4 -49
  386. package/dist/shared/version.d.ts +1 -1
  387. package/dist/signal/ReviewedSignalExperiment.d.ts +9 -0
  388. package/dist/signal/SignalBridge.d.ts +4 -4
  389. package/dist/signal/SignalCore.d.ts +2 -1
  390. package/dist/signal/SignalExperiment.d.ts +13 -5
  391. package/dist/signal/index.d.ts +3 -3
  392. package/dist/signal/index.js +4 -73
  393. package/dist/signal/store.d.ts +10 -7
  394. package/dist/signal/types.d.ts +4 -0
  395. package/dist/sitemap/index.d.ts +5 -5
  396. package/dist/sitemap/index.js +3 -3
  397. package/dist/sites/contract.d.ts +1 -1
  398. package/dist/sites/normalize.d.ts +1 -1
  399. package/dist/slots/ManagedLink.d.ts +2 -2
  400. package/dist/slots/ManagedList.d.ts +2 -2
  401. package/dist/slots/ManagedRichText.d.ts +1 -1
  402. package/dist/slots/ManagedSlot.d.ts +1 -1
  403. package/dist/slots/contract.d.ts +1 -1
  404. package/dist/slots/edit/locate.d.ts +1 -1
  405. package/dist/slots/index.d.ts +14 -14
  406. package/dist/slots/index.js +2 -2
  407. package/dist/slots/server-api.d.ts +1 -1
  408. package/dist/{chunk-FLOJUMFR.js → sonor-fetch-runtime-SLPBNZY4.js} +27 -36
  409. package/dist/sync/AddToCalendar.d.ts +1 -1
  410. package/dist/sync/BookingWidget.d.ts +1 -1
  411. package/dist/sync/MeetingFormatStep.d.ts +1 -1
  412. package/dist/sync/api.d.ts +2 -2
  413. package/dist/sync/booking-flow.d.ts +1 -1
  414. package/dist/sync/index.d.ts +3 -3
  415. package/dist/sync/index.js +6 -7
  416. package/dist/types.d.ts +6 -6
  417. package/dist/website/BlocksPopup.d.ts +1 -1
  418. package/dist/website/PopupBlocks.d.ts +1 -1
  419. package/dist/website/SiteDesignReporter.d.ts +2 -2
  420. package/dist/website/SitePopups.d.ts +1 -1
  421. package/dist/website/contract.d.ts +1 -1
  422. package/dist/website/cta-bar.d.ts +1 -1
  423. package/dist/website/cta-bar.js +4 -3
  424. package/dist/website/design.d.ts +2 -2
  425. package/dist/website/images/server.d.ts +1 -1
  426. package/dist/website/images-server.d.ts +1 -1
  427. package/dist/website/images.d.ts +1 -1
  428. package/dist/website/images.js +2 -4
  429. package/dist/website/index.d.ts +4 -4
  430. package/dist/website/index.js +5 -6
  431. package/dist/website/landing/server.d.ts +1 -1
  432. package/dist/website/landing/server.js +13 -8
  433. package/dist/website/landing-server.d.ts +1 -1
  434. package/dist/website/landing.d.ts +1 -1
  435. package/dist/website/landing.js +3 -2
  436. package/dist/website/popup-rules.d.ts +2 -2
  437. package/dist/website/popup-types.d.ts +1 -1
  438. package/dist/website/popups.d.ts +4 -4
  439. package/dist/website/popups.js +14 -8
  440. package/dist/website/slots/contract.d.ts +1 -1
  441. package/dist/website/slots-contract.d.ts +1 -1
  442. package/dist/website/slots.d.ts +2 -2
  443. package/dist/website/slots.js +2 -2
  444. package/dist/{writeLLMsTxt-4HHUAOA6.js → writeLLMsTxt-2CBYGKZO.js} +2 -2
  445. package/docs.json +5 -0
  446. package/package.json +8 -2
  447. package/src/analytics/README.md +21 -0
  448. package/src/cta-bar/README.md +4 -0
  449. package/src/forms/README.md +76 -0
  450. package/src/landing/README.md +14 -0
  451. package/src/layout/README.md +3 -0
  452. package/src/resonance/README.md +273 -0
  453. package/src/runtime/README.md +6 -1
  454. package/src/signal/README.md +21 -0
  455. package/src/website/README.md +14 -2
  456. package/dist/AnalyticsProvider-7SBJ27SI.js +0 -13
  457. package/dist/ChatWidget-V46UBDOM.js +0 -20
  458. package/dist/ManagedForm-DDDVMKLJ.js +0 -19
  459. package/dist/SitePopups-VU2C3Z6B.js +0 -13
  460. package/dist/SitemapSync-C4H3HF3L.js +0 -9
  461. package/dist/chunk-5ROTTMBL.js +0 -19
  462. package/dist/chunk-5TM3WPCI.js +0 -7
  463. package/dist/chunk-7HW4TZB5.js +0 -148
  464. package/dist/chunk-IPQKQEWI.js +0 -52
  465. package/dist/chunk-LCDVPAMR.js +0 -24
  466. package/dist/chunk-LQJC5S2M.js +0 -236
  467. package/dist/chunk-SHAUX2MQ.js +0 -163
  468. /package/dist/{chunk-3MJNBOUO.js → chunk-2QPVU63T.js} +0 -0
@@ -1,6 +1,6 @@
1
- import { FormEnhancer } from './chunk-SLFYTELD.js';
2
- import { StaticForm } from './chunk-VPZJ7ZTL.js';
3
- import { serverApiFetch } from './chunk-C7TLGL3R.js';
1
+ import { FormEnhancer } from './chunk-NWEIHCSE.js';
2
+ import { StaticForm } from './chunk-HHEDRZOJ.js';
3
+ import { serverApiFetch } from './chunk-7VMA3KCN.js';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
6
6
  async function ServerForm({
@@ -11,7 +11,8 @@ async function ServerForm({
11
11
  defer = true,
12
12
  initialConfig,
13
13
  configOptions,
14
- defaultValues
14
+ defaultValues,
15
+ addressAutocomplete
15
16
  }) {
16
17
  const config = initialConfig ?? await getFormConfig(formId, configOptions);
17
18
  const shell = /* @__PURE__ */ jsx(StaticForm, { config, className });
@@ -23,6 +24,7 @@ async function ServerForm({
23
24
  className,
24
25
  experience,
25
26
  defaultValues,
27
+ addressAutocomplete,
26
28
  enter,
27
29
  defer,
28
30
  children: shell
@@ -0,0 +1,6 @@
1
+ // src/contracts/resonance-constants.ts
2
+ var RESONANCE_ATTRIBUTION_MODEL = "first_party_last_touch_marker_v1";
3
+ var RESONANCE_SOURCE_MARKER_PARAMETER = "sonor_source";
4
+ var RESONANCE_SUBJECT_HEADER = "X-Sonor-Resonance-Subject";
5
+
6
+ export { RESONANCE_ATTRIBUTION_MODEL, RESONANCE_SOURCE_MARKER_PARAMETER, RESONANCE_SUBJECT_HEADER };
@@ -6,7 +6,7 @@ import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
6
6
  import React, { useRef, useEffect, useState, useMemo, useCallback } from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
8
8
 
9
- var loadInteractiveForm = () => import('./ManagedForm-DDDVMKLJ.js').then((m) => m.ManagedForm);
9
+ var loadInteractiveForm = () => import('./ManagedForm-LTXEU25N.js').then((m) => m.ManagedForm);
10
10
  var REPLAY_WAIT_MS = 8e3;
11
11
  function FormEnhancer({
12
12
  formId,
@@ -14,6 +14,7 @@ function FormEnhancer({
14
14
  className,
15
15
  experience,
16
16
  defaultValues,
17
+ addressAutocomplete,
17
18
  onSuccess,
18
19
  onError,
19
20
  enter = "fade",
@@ -123,6 +124,7 @@ function FormEnhancer({
123
124
  className,
124
125
  experience,
125
126
  defaultValues: seededValues,
127
+ addressAutocomplete,
126
128
  onSuccess,
127
129
  onError
128
130
  }
@@ -1,4 +1,4 @@
1
- import { serverApiFetch } from './chunk-C7TLGL3R.js';
1
+ import { serverApiFetch } from './chunk-7VMA3KCN.js';
2
2
 
3
3
  // src/robots/indexnow.ts
4
4
  var INDEXNOW_KEY_PATH = "/indexnow.txt";
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{useSignalExperiment as v,useSignalEvent as x}from"./chunk-533ZSRJF.js";import{recordRenderedResonanceExposure as E}from"./chunk-MOACHHOJ.js";import{subscribeMeasurementPolicy as C,measurementPolicySnapshot as S,serverMeasurementPolicySnapshot as R}from"./chunk-FRY6PBT6.js";import k,{lazy as h,Suspense as w,useRef as j,useSyncExternalStore as P,useEffect as $}from"react";import{usePathname as b}from"next/navigation";import{jsx as o,Fragment as m}from"react/jsx-runtime";var K=h(()=>import("./_client/reviewed-signal-experiment.js"));function O(e){if(e.reviewedContext){const n=e.reviewedContext.controlVariantKey,c=e.children?e.children({variant:n,isControl:!0}):Object.prototype.hasOwnProperty.call(e.variants,n)&&e.variants[n]!==void 0?e.variants[n]:e.fallback||null;return o(w,{fallback:c,children:o(K,{...e,reviewedContext:e.reviewedContext})})}return o(M,{...e})}function M({experimentId:e,variants:n,fallback:c,trackImpression:a=!0,children:s}){const{assignment:i,variant:t,isControl:l}=v(e),f=x(),d=b(),p=j(""),r=P(C,S,R);if($(()=>{const _=!!s||!!t&&n[t]!==void 0;if(a&&t&&_){const u=r.config;if(u){if(!i?.assignment_id||!i.experiment_revision||i.site!==u.site)return;const g=`${i.assignment_id}:${i.experiment_revision}:${t}:${d}:${r.proof?.currentConsentRevision}`;if(g===p.current)return;E({projectId:u.projectId,site:u.site,experimentId:e,experimentRevision:i.experiment_revision,assignmentId:i.assignment_id,variantKey:t,occurredAt:new Date().toISOString()})&&(p.current=g);return}f({event_type:"experiment",event_name:"impression",event_data:{experiment_id:e,variant_key:t}})}},[e,t,i,d,a,f,s,n,r.config?.projectId,r.config?.site,r.config?.configRevision,r.config?.policyRevision,r.proof?.currentConsentRevision]),s)return o(m,{children:s({variant:t||"control",isControl:l})});const y=n[t||"control"];return y!==void 0?o(m,{children:y}):c?o(m,{children:c}):o(m,{children:n.control||null})}function V(e){return v(e)}function z({experimentId:e,outcomeType:n="click",value:c,children:a}){const s=x(),{variant:i}=v(e),t=()=>{s({event_type:"experiment",event_name:"conversion",event_data:{experiment_id:e,variant_key:i,outcome_type:n,value:c}})};return k.cloneElement(a,{onClick:l=>{t(),a.props.onClick&&a.props.onClick(l)}})}export{z as ExperimentConversion,O as SignalExperiment,V as useExperimentVariant};
@@ -2,9 +2,9 @@
2
2
  import { VISUAL_VIEWPORT_GAP_PROPERTY } from './chunk-6T6CQVNL.js';
3
3
  import { GlassStyles } from './chunk-JE4A5S4F.js';
4
4
  import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
5
- import { useForm } from './chunk-IWNJCRXW.js';
5
+ import { useForm } from './chunk-MIKVCYGX.js';
6
6
  import { parseColor, relativeLuminance, DARK_LUMINANCE, contrastRatio } from './chunk-S22FSH7C.js';
7
- import { sonorFetch } from './chunk-FLOJUMFR.js';
7
+ import { sonorFetch } from './chunk-Z4XJOVQX.js';
8
8
  import { readPublishedApiConfig } from './chunk-W7OPEMGJ.js';
9
9
  import { useState, useEffect, useRef, useLayoutEffect, useCallback, Fragment as Fragment$1 } from 'react';
10
10
  import { lexer } from 'marked';
@@ -1,4 +1,4 @@
1
- import { publishSiteCredential } from './chunk-OPUY4RS6.js';
1
+ import { publishSiteCredential } from './chunk-2LBKIE2K.js';
2
2
 
3
3
  // src/client/SiteKitCredential.tsx
4
4
  function SiteKitCredential({
@@ -330,7 +330,7 @@ async function generateLLMsTxt(options) {
330
330
  if (includeEntities) {
331
331
  attemptedSections.push("knowledge-graph");
332
332
  optionalFetches.push(
333
- import('./server-api-XIKDWSNO.js').then(async ({ getEntities, getPrimaryEntity }) => {
333
+ import('./server-api-A34TABT2.js').then(async ({ getEntities, getPrimaryEntity }) => {
334
334
  const [entities, primaryEntity] = await Promise.all([
335
335
  getEntities().then((e) => e.slice(0, maxEntities)),
336
336
  getPrimaryEntity()
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { sonorFetch } from './chunk-FLOJUMFR.js';
2
+ import { sonorFetch } from './chunk-Z4XJOVQX.js';
3
3
  import { useState, useCallback, useEffect } from 'react';
4
4
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
5
5
 
@@ -0,0 +1,21 @@
1
+ import { identityStorageKeys, memoryIdentity } from './chunk-5IVD6G77.js';
2
+ import { analyticsPurposePermitted } from './chunk-FRY6PBT6.js';
3
+
4
+ // src/shared/identity-reader.ts
5
+ function readKey(kind, key) {
6
+ try {
7
+ return window[kind].getItem(key) || null;
8
+ } catch {
9
+ return null;
10
+ }
11
+ }
12
+ function readAnalyticsIdentity() {
13
+ if (typeof window === "undefined" || !analyticsPurposePermitted()) return { sessionId: null, visitorId: null };
14
+ const keys = identityStorageKeys();
15
+ return {
16
+ sessionId: readKey("sessionStorage", keys.session) || memoryIdentity.sessionId || null,
17
+ visitorId: readKey("localStorage", keys.visitor) || memoryIdentity.visitorId || null
18
+ };
19
+ }
20
+
21
+ export { readAnalyticsIdentity };
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { sanitizeFleetVersion, buildFleetHeartbeatPayload } from './chunk-ZTZQPYP6.js';
3
3
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
4
- import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
5
- import { sonorFetch } from './chunk-FLOJUMFR.js';
6
- import { SITE_KIT_VERSION } from './chunk-F6WLHVMQ.js';
4
+ import { SITE_KIT_VERSION } from './chunk-D4R3FQED.js';
5
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
6
+ import { sonorFetch } from './chunk-Z4XJOVQX.js';
7
7
  import { useRef, useEffect } from 'react';
8
8
 
9
9
  // src/fleet/heartbeat.ts
@@ -0,0 +1,62 @@
1
+ import { isSiteToken, configureSiteCredential, storeToken, tokenExp } from './chunk-TPHOIE4I.js';
2
+ import { siteTokenState } from './chunk-D4M5K6JN.js';
3
+ import { SITE_KIT_VERSION } from './chunk-D4R3FQED.js';
4
+
5
+ // src/shared/site-token-refresh.ts
6
+ var REFRESH_SKEW_MS = 5 * 6e4;
7
+ var REFRESH_TIMEOUT_MS = 6e3;
8
+ function needsRefresh() {
9
+ if (!siteTokenState.isToken) return false;
10
+ if (!siteTokenState.token) return true;
11
+ return Date.now() >= tokenExp(siteTokenState.token) - REFRESH_SKEW_MS;
12
+ }
13
+ async function doRefresh() {
14
+ const current = siteTokenState.token;
15
+ if (!current) return null;
16
+ try {
17
+ const res = await fetch(`${siteTokenState.apiUrl}/api/public/site-token/refresh`, {
18
+ method: "POST",
19
+ headers: {
20
+ "content-type": "application/json",
21
+ "x-sitekit-version": SITE_KIT_VERSION,
22
+ // Send the current token as x-api-key too, so the server's key-scoped
23
+ // throttler buckets refreshes by token rather than by shared CDN IP.
24
+ "x-api-key": current
25
+ },
26
+ body: JSON.stringify({ token: current }),
27
+ signal: typeof AbortSignal !== "undefined" && AbortSignal.timeout ? AbortSignal.timeout(REFRESH_TIMEOUT_MS) : void 0
28
+ });
29
+ if (!res.ok) return null;
30
+ const data = await res.json().catch(() => null);
31
+ const next = data?.token;
32
+ if (typeof next === "string" && isSiteToken(next)) {
33
+ siteTokenState.token = next;
34
+ storeToken(next);
35
+ return next;
36
+ }
37
+ return null;
38
+ } catch {
39
+ return null;
40
+ }
41
+ }
42
+ function refreshSiteToken() {
43
+ if (!siteTokenState.isToken) return Promise.resolve(null);
44
+ if (siteTokenState.refreshing) return siteTokenState.refreshing;
45
+ siteTokenState.refreshing = doRefresh().finally(() => {
46
+ siteTokenState.refreshing = null;
47
+ });
48
+ return siteTokenState.refreshing;
49
+ }
50
+ async function getFreshCredential(seed) {
51
+ if (!siteTokenState.isToken && isSiteToken(seed)) {
52
+ configureSiteCredential({ credential: seed });
53
+ }
54
+ if (!siteTokenState.isToken) return seed ?? siteTokenState.seed;
55
+ if (needsRefresh()) {
56
+ const refreshed = await refreshSiteToken();
57
+ if (refreshed) return refreshed;
58
+ }
59
+ return siteTokenState.token ?? seed ?? siteTokenState.seed;
60
+ }
61
+
62
+ export { getFreshCredential, refreshSiteToken };
@@ -1,5 +1,5 @@
1
1
  import { secretsMatch, readCappedBody } from './chunk-XTRZGXB2.js';
2
- import { SITE_KIT_VERSION } from './chunk-F6WLHVMQ.js';
2
+ import { SITE_KIT_VERSION } from './chunk-D4R3FQED.js';
3
3
 
4
4
  // src/llms/revalidate.ts
5
5
  function createLlmsRevalidateHandler(secret, options) {
@@ -1,7 +1,7 @@
1
1
  import { SLOTS_CONTRACT_VERSION, verifySlotContent, canonicalJson } from './chunk-VCJYLYJV.js';
2
2
  import { isValidSlotId, SLOT_CONTENT_MAX_LENGTH, parseSlotRichText, normalizeSlotValue } from './chunk-LPH5FANE.js';
3
3
  import { SITE_CACHE_TAGS } from './chunk-HY7ZEU2C.js';
4
- import { resolveServerApiConfig } from './chunk-C7TLGL3R.js';
4
+ import { resolveServerApiConfig } from './chunk-7VMA3KCN.js';
5
5
  import 'server-only';
6
6
  import * as React from 'react';
7
7
  import { cache } from 'react';
@@ -1,6 +1,6 @@
1
1
  import { withSiteBody } from './chunk-MJP63SSS.js';
2
2
  import { SITE_CACHE_TAGS } from './chunk-HY7ZEU2C.js';
3
- import { serverApiFetch, requireServerApiConfig } from './chunk-C7TLGL3R.js';
3
+ import { serverApiFetch, requireServerApiConfig } from './chunk-7VMA3KCN.js';
4
4
  import { postRegisterSitemap, resolveSyncSite } from './chunk-DIKNRN34.js';
5
5
  import { cache } from 'react';
6
6
  import 'server-only';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { getSiteDesignTokens, tokensForReport, shouldReportDesign, sendSiteDesign } from './chunk-URLTBVRX.js';
2
+ import { getSiteDesignTokens, tokensForReport, shouldReportDesign, sendSiteDesign } from './chunk-DW5X4BC7.js';
3
3
  import { designTokensHash } from './chunk-XHYE24HU.js';
4
4
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
5
- import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
5
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
6
6
  import { useRef, useEffect } from 'react';
7
7
 
8
8
  var STAMP_KEY = (site) => `_sk_design_sent:${site}`;
@@ -0,0 +1,73 @@
1
+ import { siteTokenState } from './chunk-D4M5K6JN.js';
2
+
3
+ // src/shared/site-token-claims.ts
4
+ var SITE_TOKEN_PREFIX = "st1.";
5
+ function isSiteToken(credential) {
6
+ return typeof credential === "string" && credential.startsWith(SITE_TOKEN_PREFIX);
7
+ }
8
+ function decodeSiteTokenClaims(token) {
9
+ if (!isSiteToken(token)) return null;
10
+ const seg = token.split(".")[1];
11
+ if (!seg) return null;
12
+ try {
13
+ const b64 = seg.replace(/-/g, "+").replace(/_/g, "/");
14
+ const json = typeof atob === "function" ? atob(b64) : Buffer.from(seg, "base64url").toString("utf8");
15
+ const claims = JSON.parse(json);
16
+ return typeof claims === "object" && claims ? claims : null;
17
+ } catch {
18
+ return null;
19
+ }
20
+ }
21
+ function credentialBreakerId(credential) {
22
+ if (!credential) return "(anonymous)";
23
+ const claims = decodeSiteTokenClaims(credential);
24
+ if (claims?.pid) return `pid:${claims.pid}`;
25
+ return credential.slice(0, 16);
26
+ }
27
+ function tokenExp(token) {
28
+ const claims = decodeSiteTokenClaims(token);
29
+ return typeof claims?.exp === "number" ? claims.exp * 1e3 : 0;
30
+ }
31
+
32
+ // src/shared/site-token-configuration.ts
33
+ var STORAGE_KEY = "__sonor_site_token__";
34
+ function readStoredToken() {
35
+ if (typeof window === "undefined") return null;
36
+ try {
37
+ const raw = window.sessionStorage.getItem(STORAGE_KEY);
38
+ if (!raw) return null;
39
+ const parsed = JSON.parse(raw);
40
+ return typeof parsed?.token === "string" ? parsed.token : null;
41
+ } catch {
42
+ return null;
43
+ }
44
+ }
45
+ function storeToken(token) {
46
+ if (typeof window === "undefined") return;
47
+ try {
48
+ window.sessionStorage.setItem(STORAGE_KEY, JSON.stringify({ token }));
49
+ } catch {
50
+ }
51
+ try {
52
+ ;
53
+ window.__SITE_KIT_API_KEY__ = token;
54
+ } catch {
55
+ }
56
+ }
57
+ function configureSiteCredential(opts) {
58
+ siteTokenState.seed = opts.credential;
59
+ siteTokenState.isToken = isSiteToken(opts.credential);
60
+ if (opts.apiUrl) siteTokenState.apiUrl = opts.apiUrl.replace(/\/+$/, "");
61
+ if (!siteTokenState.isToken) {
62
+ siteTokenState.token = null;
63
+ return;
64
+ }
65
+ const prior = siteTokenState.token;
66
+ let best = opts.credential ?? null;
67
+ const stored = readStoredToken();
68
+ if (stored && tokenExp(stored) > tokenExp(best)) best = stored;
69
+ if (prior && tokenExp(prior) > tokenExp(best)) best = prior;
70
+ siteTokenState.token = best;
71
+ }
72
+
73
+ export { configureSiteCredential, credentialBreakerId, isSiteToken, storeToken, tokenExp };
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
  import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
3
- import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
3
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
4
4
  import { useState, useEffect } from 'react';
5
5
  import ReactDOM from 'react-dom';
6
6
  import dynamic from 'next/dynamic';
7
7
  import { jsx } from 'react/jsx-runtime';
8
8
 
9
9
  var LazyChatWidget = dynamic(
10
- () => import('./ChatWidget-V46UBDOM.js').then((m) => ({ default: m.ChatWidget })),
10
+ () => import('./ChatWidget-HEPOE3YC.js').then((m) => ({ default: m.ChatWidget })),
11
11
  { ssr: false }
12
12
  );
13
13
  function SiteChat(props) {
@@ -0,0 +1,66 @@
1
+ import { advertisingPurposesPermitted } from './chunk-KMNHNCVG.js';
2
+ import { resonanceControllerState } from './chunk-MOACHHOJ.js';
3
+ import { analyticsPurposePermitted, measurementPolicySnapshot } from './chunk-FRY6PBT6.js';
4
+
5
+ // src/resonance/consent-adapter.ts
6
+ var makeStore = () => ({ adapter: null, listeners: /* @__PURE__ */ new Set(), registrations: 0 });
7
+ var store = typeof window === "undefined" ? makeStore() : window.__SONOR_RESONANCE_CMP_V1__ ?? (window.__SONOR_RESONANCE_CMP_V1__ = makeStore());
8
+ var listeners = store.listeners;
9
+ var getConsentAdapter = () => store.adapter;
10
+ var subscribeConsentAdapter = (listener) => {
11
+ listeners.add(listener);
12
+ return () => {
13
+ listeners.delete(listener);
14
+ };
15
+ };
16
+ function registerResonanceConsentAdapter(next) {
17
+ if (store.adapter && store.adapter !== next) throw new Error("A maintained consent adapter is already registered");
18
+ const changed = store.adapter !== next;
19
+ store.adapter = next;
20
+ store.registrations++;
21
+ if (changed) for (const listener of listeners) listener();
22
+ let active = true;
23
+ return () => {
24
+ if (!active || store.adapter !== next) return;
25
+ active = false;
26
+ if (--store.registrations > 0) return;
27
+ store.adapter = null;
28
+ for (const listener of listeners) listener();
29
+ };
30
+ }
31
+
32
+ // src/resonance/bridge.ts
33
+ function getResonanceMeasurementStatus() {
34
+ return {
35
+ state: resonanceControllerState.controller?.status.state ?? "unknown",
36
+ reason: resonanceControllerState.controller?.status.reason ?? null,
37
+ policy: measurementPolicySnapshot().policy,
38
+ analyticsPermitted: analyticsPurposePermitted(),
39
+ advertisingPermitted: advertisingPurposesPermitted(),
40
+ providerBlockers: [...resonanceControllerState.blockers, ...resonanceControllerState.registrationConflict ? ["duplicate_runtime_installation"] : []]
41
+ };
42
+ }
43
+ function setProviderBlockers(next) {
44
+ resonanceControllerState.blockers = [...next];
45
+ }
46
+ function registerResonanceController(next) {
47
+ if (resonanceControllerState.controller && resonanceControllerState.controller !== next) {
48
+ resonanceControllerState.registrationConflict = true;
49
+ return null;
50
+ }
51
+ resonanceControllerState.controller = next;
52
+ return () => {
53
+ if (resonanceControllerState.controller === next) {
54
+ resonanceControllerState.controller = null;
55
+ resonanceControllerState.blockers = [];
56
+ resonanceControllerState.registrationConflict = false;
57
+ }
58
+ };
59
+ }
60
+ function recordResonanceExposure(exposure) {
61
+ const active = resonanceControllerState.controller;
62
+ if (active) void active.exposure(exposure).catch(() => {
63
+ });
64
+ }
65
+
66
+ export { getConsentAdapter, getResonanceMeasurementStatus, recordResonanceExposure, registerResonanceConsentAdapter, registerResonanceController, setProviderBlockers, subscribeConsentAdapter };
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { locToPath, isMalformedSitemapPath, inferPageType } from './chunk-YVKRYQRG.js';
3
- import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
4
- import { sonorFetch } from './chunk-FLOJUMFR.js';
3
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
4
+ import { sonorFetch } from './chunk-Z4XJOVQX.js';
5
5
  import { useRef, useEffect } from 'react';
6
6
 
7
7
  var SYNC_STAMP_KEY = "_sk_sitemap_synced_at";
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { normalizeCampaignSlug } from './chunk-3MJNBOUO.js';
2
+ import { normalizeCampaignSlug } from './chunk-2QPVU63T.js';
3
3
  import { useEffect } from 'react';
4
4
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,10 +1,12 @@
1
1
  'use client';
2
2
  import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
3
- import { readAnalyticsIdentity } from './chunk-5ROTTMBL.js';
4
- import { getOrCreateVisitorId } from './chunk-IPQKQEWI.js';
5
- import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
6
- import { sonorFetch } from './chunk-FLOJUMFR.js';
7
- import { useState, useEffect, useCallback, useRef } from 'react';
3
+ import { readAnalyticsIdentity } from './chunk-PVY7X5UR.js';
4
+ import { getOrCreateVisitorId } from './chunk-JT7GHHMV.js';
5
+ import { resolveAnalyticsTarget as resolveAnalyticsTarget$1, analyticsSend } from './chunk-ACZ5JNSL.js';
6
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
7
+ import { sonorFetch } from './chunk-Z4XJOVQX.js';
8
+ import { subscribeMeasurementPolicy, measurementPolicySnapshot, serverMeasurementPolicySnapshot } from './chunk-FRY6PBT6.js';
9
+ import { useState, useEffect, useCallback, useSyncExternalStore, useRef } from 'react';
8
10
  import ReactDOM from 'react-dom';
9
11
  import dynamic from 'next/dynamic';
10
12
  import { usePathname } from 'next/navigation';
@@ -161,7 +163,7 @@ function activatePopup(active, id, popups) {
161
163
  return [...active, id];
162
164
  }
163
165
  var LazyBlocksPopup = dynamic(
164
- () => import('./BlocksPopup-NEEFV2L3.js').then((m) => ({ default: m.BlocksPopup })),
166
+ () => import('./BlocksPopup-C5PNJ7U6.js').then((m) => ({ default: m.BlocksPopup })),
165
167
  { ssr: false }
166
168
  );
167
169
  function SitePopups(props) {
@@ -173,7 +175,9 @@ function AllowedSitePopups({
173
175
  apiUrl,
174
176
  apiKey,
175
177
  zIndex = DEFAULT_WIDGET_Z_INDEX,
176
- debug = false
178
+ debug = false,
179
+ allowInFrame = false,
180
+ allowLocalhost = false
177
181
  }) {
178
182
  const pathname = usePathname();
179
183
  const [popups, setPopups] = useState([]);
@@ -182,13 +186,19 @@ function AllowedSitePopups({
182
186
  useEffect(() => {
183
187
  let cancelled = false;
184
188
  async function load() {
185
- const visitorId = getOrCreateVisitorId();
186
- const url = typeof window !== "undefined" ? window.location.href : "";
189
+ const epoch = measurementPolicySnapshot().collectionEpoch;
190
+ const endpoint = `${apiUrl.replace(/\/$/, "")}/engage/widget/elements`;
191
+ const requestUrl = () => {
192
+ const tracking = !!resolveAnalyticsTarget$1({ apiUrl, apiKey, allowInFrame, allowLocalhost, measurementEpoch: epoch });
193
+ const visitorId = tracking ? getOrCreateVisitorId() : "";
194
+ const url = typeof window !== "undefined" ? tracking ? window.location.href : window.location.origin + window.location.pathname : "";
195
+ return `${endpoint}?url=${encodeURIComponent(url)}&visitorId=${encodeURIComponent(visitorId)}&deviceType=${getDeviceType()}`;
196
+ };
187
197
  try {
188
198
  const response = await sonorFetch(
189
- `${apiUrl.replace(/\/$/, "")}/engage/widget/elements?url=${encodeURIComponent(url)}&visitorId=${encodeURIComponent(visitorId)}&deviceType=${getDeviceType()}`,
199
+ requestUrl(),
190
200
  {},
191
- { apiKey }
201
+ { apiKey, prepareUrl: requestUrl }
192
202
  );
193
203
  if (!response.ok) {
194
204
  if (debug) console.error("[SitePopups] Error loading popups:", response.statusText);
@@ -207,7 +217,7 @@ function AllowedSitePopups({
207
217
  return () => {
208
218
  cancelled = true;
209
219
  };
210
- }, [apiUrl, apiKey, debug]);
220
+ }, [apiUrl, apiKey, debug, allowInFrame, allowLocalhost]);
211
221
  useEffect(() => {
212
222
  watchFormInput();
213
223
  }, []);
@@ -290,7 +300,9 @@ function AllowedSitePopups({
290
300
  onEngaged: () => recordSeen(popup.id),
291
301
  zIndex,
292
302
  apiUrl,
293
- apiKey
303
+ apiKey,
304
+ allowInFrame,
305
+ allowLocalhost
294
306
  },
295
307
  popup.id
296
308
  );
@@ -304,18 +316,22 @@ function PopupView({
304
316
  onEngaged,
305
317
  zIndex,
306
318
  apiUrl,
307
- apiKey
319
+ apiKey,
320
+ allowInFrame,
321
+ allowLocalhost
308
322
  }) {
323
+ const policy = useSyncExternalStore(subscribeMeasurementPolicy, measurementPolicySnapshot, serverMeasurementPolicySnapshot);
324
+ const gate = { apiUrl: apiUrl.replace(/\/+$/, ""), apiKey, allowInFrame, allowLocalhost, measurementEpoch: policy.collectionEpoch };
309
325
  const rootRef = useRef(null);
310
326
  const counted = useRef(false);
311
327
  useEffect(() => {
312
328
  const el = rootRef.current;
313
- if (!el || counted.current) return;
329
+ if (!el || counted.current || !resolveAnalyticsTarget$1(gate)) return;
314
330
  const observer = new IntersectionObserver(
315
331
  ([entry]) => {
316
- if (entry.isIntersecting && !counted.current) {
332
+ if (entry.isIntersecting && entry.intersectionRatio >= 0.5 && !counted.current && resolveAnalyticsTarget$1(gate)) {
317
333
  counted.current = true;
318
- trackPopupEvent(apiUrl, apiKey, "impression", { elementId: popup.id });
334
+ trackPopupEvent("impression", { elementId: popup.id }, gate);
319
335
  observer.disconnect();
320
336
  }
321
337
  },
@@ -323,7 +339,7 @@ function PopupView({
323
339
  );
324
340
  observer.observe(el);
325
341
  return () => observer.disconnect();
326
- }, [apiUrl, apiKey, popup.id]);
342
+ }, [apiUrl, apiKey, popup.id, allowInFrame, allowLocalhost, policy.collectionEpoch]);
327
343
  const layout = popup.layout;
328
344
  const position = layout?.corner ?? popup.config?.position;
329
345
  const corner = position === "bottom-left" || position === "top-left" || position === "top-right" ? position : "bottom-right";
@@ -341,20 +357,15 @@ function PopupView({
341
357
  onClose: onDismiss,
342
358
  onButton: (url) => {
343
359
  onEngaged();
344
- trackPopupEvent(apiUrl, apiKey, "click", { elementId: popup.id, action: "navigate", url });
360
+ trackPopupEvent("click", { elementId: popup.id, action: "navigate", url }, gate);
345
361
  }
346
362
  }
347
363
  );
348
364
  }
349
- function trackPopupEvent(apiUrl, apiKey, endpoint, data) {
365
+ function trackPopupEvent(endpoint, data, gate) {
366
+ if (!resolveAnalyticsTarget$1(gate)) return;
350
367
  const { visitorId } = readAnalyticsIdentity();
351
- sonorFetch(`${apiUrl.replace(/\/$/, "")}/engage/widget/${endpoint}`, {
352
- method: "POST",
353
- headers: { "Content-Type": "application/json" },
354
- body: JSON.stringify({ ...data, visitorId, pageUrl: window.location.href }),
355
- keepalive: true
356
- }, { apiKey, retries: 0 }).catch(() => {
357
- });
368
+ void analyticsSend(`/engage/widget/${endpoint}`, { ...data, visitorId, pageUrl: window.location.href }, { ...gate, keepalive: true });
358
369
  }
359
370
  function getDeviceType() {
360
371
  if (typeof navigator === "undefined") return "desktop";