@sonordev/site-kit 8.8.0 → 8.9.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 (461) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +9 -0
  3. package/agent-manifest.json +8 -1
  4. package/dist/AnalyticsProvider-X7JJN3QL.js +19 -0
  5. package/dist/{ArticleViewTracker-PV2RD3P6.js → ArticleViewTracker-7Q6AMCKX.js} +11 -10
  6. package/dist/{BlocksPopup-NEEFV2L3.js → BlocksPopup-U5VIYEBA.js} +4 -5
  7. package/dist/ChatWidget-EAATOFCT.js +30 -0
  8. package/dist/{FileField-MJ3RCNFJ.js → FileField-YWMSK7RF.js} +1 -3
  9. package/dist/{FormSpotlight-NQPQFZS7.js → FormSpotlight-MAXDW3TK.js} +1 -1
  10. package/dist/{FormStage-4T5PJR5K.js → FormStage-VAHRVOIZ.js} +1 -1
  11. package/dist/ManagedForm-7IZT7ZII.js +29 -0
  12. package/dist/{ManagedNewsletterForm-TUYGN6O3.js → ManagedNewsletterForm-VVXZSEAL.js} +21 -11
  13. package/dist/{SignalCore-OW3YIH6M.js → SignalCore-HAN4O7QG.js} +90 -36
  14. package/dist/{SiteChat-XMKHBSEK.js → SiteChat-3JLCEL2N.js} +2 -2
  15. package/dist/{SiteDesignReporter-BRH7ORQS.js → SiteDesignReporter-6CCO645E.js} +5 -6
  16. package/dist/SitePopups-ZGHQNGGH.js +19 -0
  17. package/dist/SitemapSync-5LSYCBKS.js +7 -0
  18. package/dist/SitemapSync.d.ts +1 -1
  19. package/dist/_client/booking-widget.d.ts +1 -1
  20. package/dist/_client/booking-widget.js +6 -7
  21. package/dist/_client/reviewed-signal-experiment.d.ts +9 -0
  22. package/dist/_client/reviewed-signal-experiment.js +89 -0
  23. package/dist/_client/testimonial-section.d.ts +1 -1
  24. package/dist/admin-auth/index.d.ts +3 -3
  25. package/dist/affiliates/AffiliatesWidget.d.ts +1 -1
  26. package/dist/affiliates/api.d.ts +1 -1
  27. package/dist/affiliates/index.d.ts +6 -6
  28. package/dist/affiliates/index.js +1 -3
  29. package/dist/affiliates/useAffiliates.d.ts +1 -1
  30. package/dist/analytics/AnalyticsProvider.d.ts +1 -1
  31. package/dist/analytics/dispatch.d.ts +1 -1
  32. package/dist/analytics/index.d.ts +6 -6
  33. package/dist/analytics/index.js +22 -12
  34. package/dist/analytics/publication-cta.d.ts +1 -1
  35. package/dist/analytics/send-gate.d.ts +8 -4
  36. package/dist/articles/Article.d.ts +1 -1
  37. package/dist/articles/ArticleFAQ.d.ts +1 -1
  38. package/dist/articles/ArticleFaqSection.d.ts +1 -1
  39. package/dist/articles/ArticleList.d.ts +1 -1
  40. package/dist/articles/ArticleViewTracker.d.ts +1 -1
  41. package/dist/articles/AuthorCard.d.ts +1 -1
  42. package/dist/articles/AuthorPage.d.ts +1 -1
  43. package/dist/articles/ClusterLandingPage.d.ts +1 -1
  44. package/dist/articles/ClusterNavigation.d.ts +1 -1
  45. package/dist/articles/ManagedNewsletterForm.d.ts +2 -2
  46. package/dist/articles/NewsletterShell.d.ts +1 -1
  47. package/dist/articles/NewsletterWidget.d.ts +1 -1
  48. package/dist/articles/PublicationLayout.d.ts +1 -1
  49. package/dist/articles/PublicationSidebar.d.ts +1 -1
  50. package/dist/articles/RelatedPosts.d.ts +1 -1
  51. package/dist/articles/ServiceCallout.d.ts +1 -1
  52. package/dist/articles/TableOfContents.d.ts +1 -1
  53. package/dist/articles/article-photos.d.ts +1 -1
  54. package/dist/articles/article-styles.d.ts +1 -1
  55. package/dist/articles/article-tables.d.ts +1 -1
  56. package/dist/articles/artwork.d.ts +1 -1
  57. package/dist/articles/author-schema.d.ts +1 -1
  58. package/dist/articles/author-social.d.ts +1 -1
  59. package/dist/articles/excerpt.d.ts +1 -1
  60. package/dist/articles/index.d.ts +1 -1
  61. package/dist/articles/index.js +3 -3
  62. package/dist/articles/news-sitemap.d.ts +1 -1
  63. package/dist/articles/processArticleHtml.d.ts +1 -1
  64. package/dist/articles/public-reads.d.ts +1 -1
  65. package/dist/articles/reading-time.d.ts +1 -1
  66. package/dist/articles/routes.d.ts +1 -1
  67. package/dist/articles/server-core.d.ts +1 -1
  68. package/dist/articles/server-ui.d.ts +1 -1
  69. package/dist/articles/server-ui.js +6 -6
  70. package/dist/articles/server.d.ts +1 -1
  71. package/dist/articles/server.js +5 -5
  72. package/dist/articles/types.d.ts +1 -1
  73. package/dist/articles/widget-styles.d.ts +1 -1
  74. package/dist/brand/extract-brand-profile.d.ts +1 -1
  75. package/dist/chat/ChatWidget.d.ts +1 -1
  76. package/dist/chat/EchoUiActions.d.ts +1 -1
  77. package/dist/chat/SiteChat.d.ts +2 -2
  78. package/dist/chat/chat-messages.d.ts +1 -1
  79. package/dist/chat/index.d.ts +7 -7
  80. package/dist/chat/index.js +17 -9
  81. package/dist/chat/launcher-placement.d.ts +1 -1
  82. package/dist/{chunk-OPUY4RS6.js → chunk-2LBKIE2K.js} +2 -1
  83. package/dist/{chunk-XIDWNXZN.js → chunk-3W3MN6Z7.js} +2 -2
  84. package/dist/{chunk-UPFU63L4.js → chunk-55GFMOI6.js} +1 -1
  85. package/dist/chunk-5IVD6G77.js +37 -0
  86. package/dist/{chunk-URLTBVRX.js → chunk-6EDE7BOE.js} +3 -3
  87. package/dist/{chunk-DYROJGI2.js → chunk-6NLVHTYY.js} +1 -1
  88. package/dist/{chunk-ZQSCMYZO.js → chunk-7643MCD2.js} +6 -3
  89. package/dist/chunk-7IZUUXXO.js +1 -0
  90. package/dist/{chunk-C7TLGL3R.js → chunk-7VMA3KCN.js} +30 -4
  91. package/dist/{chunk-OWZWRP7Y.js → chunk-ADQ3VCKK.js} +2 -2
  92. package/dist/chunk-AG2RDHYZ.js +45 -0
  93. package/dist/chunk-AWLPFFPO.js +36 -0
  94. package/dist/{chunk-LNSNA3W4.js → chunk-C4XK472G.js} +4 -3
  95. package/dist/{chunk-TP32MRXV.js → chunk-CJ43K7RA.js} +2 -2
  96. package/dist/chunk-D4M5K6JN.js +25 -0
  97. package/dist/{chunk-F6WLHVMQ.js → chunk-DXE6SXWW.js} +1 -1
  98. package/dist/{chunk-YEX5RAEU.js → chunk-EBEM5BI5.js} +38 -27
  99. package/dist/chunk-F3RKFGRW.js +2 -0
  100. package/dist/chunk-FAY6MOLL.js +62 -0
  101. package/dist/chunk-FRY6PBT6.js +31 -0
  102. package/dist/{chunk-JYITKUUB.js → chunk-G5WUX7VE.js} +1 -1
  103. package/dist/chunk-HJD6KXKH.js +147 -0
  104. package/dist/{chunk-6BFQI3ZE.js → chunk-IO6BWRZ5.js} +2 -2
  105. package/dist/{chunk-THXELZTQ.js → chunk-ISMHDUBW.js} +1 -1
  106. package/dist/{chunk-SLFYTELD.js → chunk-J4LJE4NB.js} +1 -1
  107. package/dist/{chunk-LQJC5S2M.js → chunk-J6D3NEDE.js} +57 -0
  108. package/dist/chunk-JT7GHHMV.js +56 -0
  109. package/dist/{chunk-NFGAXWCN.js → chunk-KGIQYVQ2.js} +31 -13
  110. package/dist/chunk-KMNHNCVG.js +20 -0
  111. package/dist/chunk-KQKUXIUD.js +25 -0
  112. package/dist/{chunk-M5JIHQ42.js → chunk-L3S5WH4C.js} +2 -2
  113. package/dist/chunk-MDBXGN6W.js +13 -0
  114. package/dist/chunk-MOACHHOJ.js +20 -0
  115. package/dist/{chunk-6DXQHNZK.js → chunk-MP35JETP.js} +1 -1
  116. package/dist/chunk-NHDRA4Y5.js +6 -0
  117. package/dist/{chunk-AYQEIMGS.js → chunk-NZHECYLF.js} +103 -22
  118. package/dist/{chunk-EATJPSTS.js → chunk-O5LQUBBN.js} +1 -1
  119. package/dist/{chunk-Y6SHFILE.js → chunk-OEOSR5EG.js} +1 -1
  120. package/dist/{chunk-GQN4BGK6.js → chunk-OUD4RTBD.js} +1 -1
  121. package/dist/chunk-PMXQPO5Q.js +78 -0
  122. package/dist/chunk-PVY7X5UR.js +21 -0
  123. package/dist/{chunk-KG5IEV7I.js → chunk-QLJ2SC3T.js} +1 -1
  124. package/dist/{chunk-2WM4TNDF.js → chunk-QXAJPB6O.js} +1 -1
  125. package/dist/{chunk-2WDWQI7K.js → chunk-RYR6N4X4.js} +1 -1
  126. package/dist/{chunk-G7BRCSV6.js → chunk-S33CUULL.js} +3 -3
  127. package/dist/{chunk-YRQS7VAH.js → chunk-S63QY5XW.js} +2 -2
  128. package/dist/{chunk-GXWM5KNS.js → chunk-SO6RSRUP.js} +40 -45
  129. package/dist/{chunk-ODOV76VW.js → chunk-STIVFCWM.js} +1 -1
  130. package/dist/{chunk-SVHPILS3.js → chunk-T4A5J6SJ.js} +1 -1
  131. package/dist/chunk-TPHOIE4I.js +73 -0
  132. package/dist/{chunk-IWNJCRXW.js → chunk-UG53ZW7S.js} +125 -118
  133. package/dist/chunk-VXCUXHZO.js +9 -0
  134. package/dist/{chunk-SBPUFTMP.js → chunk-WHFWDK2H.js} +2 -2
  135. package/dist/chunk-WYNDBJG7.js +66 -0
  136. package/dist/{chunk-HN7GVGWC.js → chunk-XDH5B3PR.js} +3 -3
  137. package/dist/{chunk-PAYCK7FC.js → chunk-XJZLXUTG.js} +1 -1
  138. package/dist/{chunk-IDC5CVBR.js → chunk-YVEYO3OD.js} +1 -1
  139. package/dist/{chunk-PSS6M4CG.js → chunk-ZRSXCT4O.js} +2 -2
  140. package/dist/client/index.d.ts +8 -8
  141. package/dist/client/index.js +9 -8
  142. package/dist/config/index.d.ts +1 -1
  143. package/dist/contracts/broadcast-layouts.d.ts +8 -0
  144. package/dist/contracts/crm-disposition.d.ts +87 -0
  145. package/dist/contracts/decision-roles.d.ts +39 -0
  146. package/dist/contracts/entries.d.ts +1 -1
  147. package/dist/contracts/funnels.d.ts +85 -2
  148. package/dist/contracts/portfolio.d.ts +1 -1
  149. package/dist/contracts/publication-branding.d.ts +3 -3
  150. package/dist/contracts/resonance-constants.d.ts +4 -0
  151. package/dist/contracts/resonance.d.ts +8461 -0
  152. package/dist/contracts/signal-experiments.d.ts +219 -0
  153. package/dist/contracts/site-edit.d.ts +2 -2
  154. package/dist/contracts/sites.d.ts +1 -1
  155. package/dist/contracts/slots.d.ts +2 -2
  156. package/dist/contracts/wire-schema.d.ts +36 -0
  157. package/dist/cta-bar/CtaBar.d.ts +1 -1
  158. package/dist/cta-bar/client.js +3 -2
  159. package/dist/cta-bar/index.d.ts +4 -4
  160. package/dist/cta-bar/index.js +4 -3
  161. package/dist/fleet/FleetHeartbeat.d.ts +2 -2
  162. package/dist/fleet/contract.d.ts +1 -1
  163. package/dist/fleet/heartbeat.d.ts +2 -2
  164. package/dist/fleet/index.d.ts +6 -6
  165. package/dist/fleet/index.js +4 -5
  166. package/dist/forms/FileField.d.ts +1 -1
  167. package/dist/forms/FormClient.d.ts +2 -2
  168. package/dist/forms/FormEnhancer.d.ts +1 -1
  169. package/dist/forms/FormField.d.ts +1 -1
  170. package/dist/forms/FormSpotlight.d.ts +1 -1
  171. package/dist/forms/FormStage.d.ts +1 -1
  172. package/dist/forms/ManagedForm.d.ts +1 -1
  173. package/dist/forms/PrivateFileField.d.ts +1 -1
  174. package/dist/forms/ServerForm.d.ts +3 -3
  175. package/dist/forms/StaticForm.d.ts +1 -1
  176. package/dist/forms/contract.d.ts +1 -1
  177. package/dist/forms/experience-plan.d.ts +1 -1
  178. package/dist/forms/field-autocomplete.d.ts +1 -1
  179. package/dist/forms/field-controls.d.ts +1 -1
  180. package/dist/forms/field-rules.d.ts +1 -1
  181. package/dist/forms/form-dom-values.d.ts +1 -1
  182. package/dist/forms/index.d.ts +18 -18
  183. package/dist/forms/index.js +21 -11
  184. package/dist/forms/normalize-config.d.ts +1 -1
  185. package/dist/forms/server.d.ts +4 -4
  186. package/dist/forms/server.js +3 -3
  187. package/dist/forms/static.d.ts +2 -2
  188. package/dist/forms/submitForm.d.ts +2 -2
  189. package/dist/forms/tracking-session.d.ts +1 -1
  190. package/dist/forms/useForm.d.ts +2 -2
  191. package/dist/forms/webmcp.d.ts +2 -2
  192. package/dist/images/api.d.ts +1 -1
  193. package/dist/images/index.d.ts +6 -6
  194. package/dist/images/index.js +2 -4
  195. package/dist/images/server.d.ts +2 -2
  196. package/dist/index.d.ts +13 -13
  197. package/dist/index.js +1 -1
  198. package/dist/landing/contract.d.ts +1 -1
  199. package/dist/landing/contract.js +2 -1
  200. package/dist/landing/index.d.ts +3 -3
  201. package/dist/landing/index.js +3 -2
  202. package/dist/landing/managed-server.d.ts +2 -2
  203. package/dist/landing/managed.d.ts +10 -2
  204. package/dist/landing/server.d.ts +7 -7
  205. package/dist/landing/server.js +11 -6
  206. package/dist/layout/AiDiscoveryLinks.d.ts +1 -1
  207. package/dist/layout/SiteKitClientProviders.d.ts +1 -1
  208. package/dist/layout/SiteKitLayout.d.ts +2 -2
  209. package/dist/layout/client.d.ts +1 -1
  210. package/dist/layout/client.js +15 -11
  211. package/dist/layout/index.d.ts +5 -5
  212. package/dist/layout/index.js +17 -13
  213. package/dist/layout/types.d.ts +2 -2
  214. package/dist/llms/AEOComponents.d.ts +1 -1
  215. package/dist/llms/SpeakableSchema.d.ts +1 -1
  216. package/dist/llms/api.d.ts +1 -1
  217. package/dist/llms/client.d.ts +3 -3
  218. package/dist/llms/contract.d.ts +1 -1
  219. package/dist/llms/generateLLMsTxt.d.ts +1 -1
  220. package/dist/llms/handlers.d.ts +1 -1
  221. package/dist/llms/index.d.ts +21 -21
  222. package/dist/llms/index.js +5 -5
  223. package/dist/llms/merge.d.ts +1 -1
  224. package/dist/llms/sourcedFacts.d.ts +1 -1
  225. package/dist/llms/types.d.ts +5 -5
  226. package/dist/llms/writeLLMsTxt.d.ts +3 -3
  227. package/dist/maps/GoogleMap.d.ts +1 -1
  228. package/dist/maps/NeighborhoodMap.d.ts +1 -1
  229. package/dist/maps/api.d.ts +1 -1
  230. package/dist/maps/index.d.ts +5 -5
  231. package/dist/maps/index.js +1 -3
  232. package/dist/mcp/WebMcpTools.d.ts +1 -1
  233. package/dist/mcp/client.d.ts +2 -2
  234. package/dist/mcp/discovery.d.ts +2 -2
  235. package/dist/mcp/handlers.d.ts +4 -4
  236. package/dist/mcp/index.d.ts +12 -12
  237. package/dist/mcp/protocol.d.ts +1 -1
  238. package/dist/mcp/report.d.ts +1 -1
  239. package/dist/mcp/serverCard.d.ts +1 -1
  240. package/dist/mcp/sonor.d.ts +5 -5
  241. package/dist/mcp/sonor.js +10 -10
  242. package/dist/mcp/transport.d.ts +1 -1
  243. package/dist/motion/Parallax.d.ts +1 -1
  244. package/dist/motion/ScrollScene.d.ts +1 -1
  245. package/dist/motion/gsap.d.ts +2 -2
  246. package/dist/motion/index.d.ts +9 -9
  247. package/dist/motion/three.d.ts +1 -1
  248. package/dist/og/index.d.ts +5 -5
  249. package/dist/og/pages.d.ts +1 -1
  250. package/dist/og/route-fit.d.ts +17 -0
  251. package/dist/og/route.d.ts +8 -0
  252. package/dist/og/route.js +1 -1
  253. package/dist/og/template.d.ts +1 -1
  254. package/dist/portfolio/contract.d.ts +1 -1
  255. package/dist/press-kit/articles/Article.d.ts +2 -2
  256. package/dist/press-kit/articles/ArticleFaqSection.d.ts +1 -1
  257. package/dist/press-kit/articles/ArticleList.d.ts +2 -2
  258. package/dist/press-kit/articles/AuthorCard.d.ts +1 -1
  259. package/dist/press-kit/articles/AuthorPage.d.ts +1 -1
  260. package/dist/press-kit/articles/ClusterLandingPage.d.ts +2 -2
  261. package/dist/press-kit/articles/ClusterNavigation.d.ts +2 -2
  262. package/dist/press-kit/articles/ManagedNewsletterForm.d.ts +2 -2
  263. package/dist/press-kit/articles/PublicationLayout.d.ts +2 -2
  264. package/dist/press-kit/articles/PublicationSidebar.d.ts +1 -1
  265. package/dist/press-kit/articles/RelatedPosts.d.ts +2 -2
  266. package/dist/press-kit/articles/TableOfContents.d.ts +1 -1
  267. package/dist/press-kit/articles/article-body.d.ts +1 -1
  268. package/dist/press-kit/articles/article-headings.d.ts +1 -1
  269. package/dist/press-kit/articles/article-photos.d.ts +1 -1
  270. package/dist/press-kit/articles/artwork.d.ts +2 -2
  271. package/dist/press-kit/articles/author-schema.d.ts +2 -2
  272. package/dist/press-kit/articles/author-social.d.ts +1 -1
  273. package/dist/press-kit/articles/index.d.ts +23 -23
  274. package/dist/press-kit/articles/news-sitemap.d.ts +2 -2
  275. package/dist/press-kit/articles/public-reads.d.ts +1 -1
  276. package/dist/press-kit/articles/publication-reads.d.ts +2 -2
  277. package/dist/press-kit/articles/reading-time.d.ts +1 -1
  278. package/dist/press-kit/articles/server-core.d.ts +20 -20
  279. package/dist/press-kit/articles/server-ui.d.ts +20 -20
  280. package/dist/press-kit/articles/types.d.ts +1 -1
  281. package/dist/proxy/index.d.ts +5 -5
  282. package/dist/proxy/index.js +1 -1
  283. package/dist/reputation/TestimonialSection.d.ts +1 -1
  284. package/dist/reputation/VisualReviewCard.d.ts +1 -1
  285. package/dist/reputation/api.d.ts +1 -1
  286. package/dist/reputation/index.d.ts +4 -4
  287. package/dist/reputation/server.d.ts +3 -3
  288. package/dist/resonance/ResonanceRuntime.d.ts +7 -0
  289. package/dist/resonance/bridge.d.ts +16 -0
  290. package/dist/resonance/consent-adapter.d.ts +26 -0
  291. package/dist/resonance/controller-registry.d.ts +14 -0
  292. package/dist/resonance/controller.d.ts +103 -0
  293. package/dist/resonance/form-context.d.ts +5 -0
  294. package/dist/resonance/index.d.ts +4 -0
  295. package/dist/resonance/index.js +9 -0
  296. package/dist/resonance/meta-pixel.d.ts +67 -0
  297. package/dist/resonance/providers.d.ts +32 -0
  298. package/dist/resonance/runtime-core.d.ts +5 -0
  299. package/dist/revalidate/index.d.ts +3 -3
  300. package/dist/revalidate/index.js +2 -2
  301. package/dist/robots/index.d.ts +3 -3
  302. package/dist/robots/indexnow.js +2 -2
  303. package/dist/runtime/index.d.ts +7 -7
  304. package/dist/runtime/index.js +4 -5
  305. package/dist/runtime-core-WT7KKLWQ.js +2213 -0
  306. package/dist/seo/ManagedFAQ.d.ts +1 -1
  307. package/dist/seo/ManagedInternalLinks.d.ts +1 -1
  308. package/dist/seo/ManagedSchema.d.ts +1 -1
  309. package/dist/seo/ManagedScripts.d.ts +1 -1
  310. package/dist/seo/client.d.ts +1 -1
  311. package/dist/seo/client.js +3 -5
  312. package/dist/seo/entry-indexnow.d.ts +1 -1
  313. package/dist/seo/entry-llms-client.d.ts +1 -1
  314. package/dist/seo/entry-llms-contract.d.ts +1 -1
  315. package/dist/seo/entry-llms.d.ts +1 -1
  316. package/dist/seo/entry-meta-contract.d.ts +1 -1
  317. package/dist/seo/entry-og-route.d.ts +1 -1
  318. package/dist/seo/entry-og.d.ts +1 -1
  319. package/dist/seo/entry-pages-contract.d.ts +1 -1
  320. package/dist/seo/entry-redirects.d.ts +1 -1
  321. package/dist/seo/entry-robots.d.ts +1 -1
  322. package/dist/seo/entry-sitemap.d.ts +1 -1
  323. package/dist/seo/getManagedMetadata.d.ts +1 -1
  324. package/dist/seo/index.d.ts +12 -12
  325. package/dist/seo/index.js +9 -11
  326. package/dist/seo/indexnow.d.ts +1 -1
  327. package/dist/seo/indexnow.js +2 -2
  328. package/dist/seo/llms/client.d.ts +1 -1
  329. package/dist/seo/llms/contract.d.ts +1 -1
  330. package/dist/seo/llms.d.ts +1 -1
  331. package/dist/seo/llms.js +5 -5
  332. package/dist/seo/meta/contract.d.ts +1 -1
  333. package/dist/seo/og/route.d.ts +1 -1
  334. package/dist/seo/og/route.js +1 -1
  335. package/dist/seo/og.d.ts +1 -1
  336. package/dist/seo/pages/contract.d.ts +1 -1
  337. package/dist/seo/redirects.d.ts +1 -1
  338. package/dist/seo/register-sitemap-cli-impl.d.ts +1 -1
  339. package/dist/seo/register-sitemap-cli.js +1 -1
  340. package/dist/seo/robots.d.ts +1 -1
  341. package/dist/seo/routing.d.ts +1 -1
  342. package/dist/seo/server.d.ts +4 -4
  343. package/dist/seo/server.js +3 -3
  344. package/dist/seo/sitemap.d.ts +1 -1
  345. package/dist/seo/sitemap.js +3 -3
  346. package/dist/seo/types.d.ts +1 -1
  347. package/dist/seo-meta/contract.d.ts +1 -1
  348. package/dist/seo-pages/contract.d.ts +1 -1
  349. package/dist/server/index.d.ts +5 -5
  350. package/dist/server/index.js +3 -3
  351. package/dist/server/mint-site-token.d.ts +1 -1
  352. package/dist/server/server-fetch.d.ts +8 -0
  353. package/dist/{server-api-XIKDWSNO.js → server-api-A34TABT2.js} +2 -2
  354. package/dist/shared/build-entries.d.ts +3 -1
  355. package/dist/shared/color.d.ts +1 -1
  356. package/dist/shared/fetchWithRetry.d.ts +6 -0
  357. package/dist/shared/frame.d.ts +1 -1
  358. package/dist/shared/identity-storage.d.ts +6 -4
  359. package/dist/shared/identity.d.ts +1 -3
  360. package/dist/shared/index.d.ts +5 -5
  361. package/dist/shared/index.js +1 -1
  362. package/dist/shared/measurement-analytics.d.ts +1 -0
  363. package/dist/shared/measurement-policy.d.ts +6 -0
  364. package/dist/shared/measurement-proof.d.ts +5 -0
  365. package/dist/shared/measurement-store.d.ts +34 -0
  366. package/dist/shared/measurement-writer.d.ts +6 -0
  367. package/dist/shared/publishCredential.d.ts +1 -1
  368. package/dist/shared/reporting-gate.d.ts +3 -1
  369. package/dist/shared/site-token-claims.d.ts +18 -0
  370. package/dist/shared/site-token-configuration.d.ts +9 -0
  371. package/dist/shared/site-token-refresh.d.ts +7 -0
  372. package/dist/shared/site-token-state.d.ts +23 -0
  373. package/dist/shared/siteToken.d.ts +5 -39
  374. package/dist/shared/sonor-auth-state.d.ts +3 -0
  375. package/dist/shared/sonor-beacon.d.ts +13 -0
  376. package/dist/shared/sonor-fetch-runtime.d.ts +2 -0
  377. package/dist/shared/sonor-fetch.d.ts +7 -0
  378. package/dist/shared/sonorFetch.d.ts +4 -49
  379. package/dist/shared/version.d.ts +1 -1
  380. package/dist/signal/ReviewedSignalExperiment.d.ts +9 -0
  381. package/dist/signal/SignalBridge.d.ts +4 -4
  382. package/dist/signal/SignalCore.d.ts +2 -1
  383. package/dist/signal/SignalExperiment.d.ts +13 -5
  384. package/dist/signal/index.d.ts +3 -3
  385. package/dist/signal/index.js +4 -73
  386. package/dist/signal/store.d.ts +10 -7
  387. package/dist/signal/types.d.ts +4 -0
  388. package/dist/sitemap/index.d.ts +5 -5
  389. package/dist/sitemap/index.js +3 -3
  390. package/dist/sites/contract.d.ts +1 -1
  391. package/dist/sites/normalize.d.ts +1 -1
  392. package/dist/slots/ManagedLink.d.ts +2 -2
  393. package/dist/slots/ManagedList.d.ts +2 -2
  394. package/dist/slots/ManagedRichText.d.ts +1 -1
  395. package/dist/slots/ManagedSlot.d.ts +1 -1
  396. package/dist/slots/contract.d.ts +1 -1
  397. package/dist/slots/edit/locate.d.ts +1 -1
  398. package/dist/slots/index.d.ts +14 -14
  399. package/dist/slots/index.js +2 -2
  400. package/dist/slots/server-api.d.ts +1 -1
  401. package/dist/{chunk-FLOJUMFR.js → sonor-fetch-runtime-3PFGUXMF.js} +27 -36
  402. package/dist/sync/AddToCalendar.d.ts +1 -1
  403. package/dist/sync/BookingWidget.d.ts +1 -1
  404. package/dist/sync/MeetingFormatStep.d.ts +1 -1
  405. package/dist/sync/api.d.ts +2 -2
  406. package/dist/sync/booking-flow.d.ts +1 -1
  407. package/dist/sync/index.d.ts +3 -3
  408. package/dist/sync/index.js +6 -7
  409. package/dist/types.d.ts +6 -6
  410. package/dist/website/BlocksPopup.d.ts +1 -1
  411. package/dist/website/PopupBlocks.d.ts +1 -1
  412. package/dist/website/SiteDesignReporter.d.ts +2 -2
  413. package/dist/website/SitePopups.d.ts +1 -1
  414. package/dist/website/contract.d.ts +1 -1
  415. package/dist/website/cta-bar.d.ts +1 -1
  416. package/dist/website/cta-bar.js +4 -3
  417. package/dist/website/design.d.ts +2 -2
  418. package/dist/website/images/server.d.ts +1 -1
  419. package/dist/website/images-server.d.ts +1 -1
  420. package/dist/website/images.d.ts +1 -1
  421. package/dist/website/images.js +2 -4
  422. package/dist/website/index.d.ts +4 -4
  423. package/dist/website/index.js +5 -6
  424. package/dist/website/landing/server.d.ts +1 -1
  425. package/dist/website/landing/server.js +11 -6
  426. package/dist/website/landing-server.d.ts +1 -1
  427. package/dist/website/landing.d.ts +1 -1
  428. package/dist/website/landing.js +3 -2
  429. package/dist/website/popup-rules.d.ts +2 -2
  430. package/dist/website/popup-types.d.ts +1 -1
  431. package/dist/website/popups.d.ts +4 -4
  432. package/dist/website/popups.js +14 -8
  433. package/dist/website/slots/contract.d.ts +1 -1
  434. package/dist/website/slots-contract.d.ts +1 -1
  435. package/dist/website/slots.d.ts +2 -2
  436. package/dist/website/slots.js +2 -2
  437. package/dist/{writeLLMsTxt-4HHUAOA6.js → writeLLMsTxt-JUACXQKP.js} +2 -2
  438. package/docs.json +5 -0
  439. package/package.json +8 -2
  440. package/src/analytics/README.md +21 -0
  441. package/src/cta-bar/README.md +4 -0
  442. package/src/forms/README.md +29 -0
  443. package/src/landing/README.md +14 -0
  444. package/src/layout/README.md +3 -0
  445. package/src/og/README.md +28 -0
  446. package/src/resonance/README.md +273 -0
  447. package/src/runtime/README.md +6 -1
  448. package/src/signal/README.md +21 -0
  449. package/src/website/README.md +14 -2
  450. package/dist/AnalyticsProvider-7SBJ27SI.js +0 -13
  451. package/dist/ChatWidget-V46UBDOM.js +0 -20
  452. package/dist/ManagedForm-DDDVMKLJ.js +0 -19
  453. package/dist/SitePopups-VU2C3Z6B.js +0 -13
  454. package/dist/SitemapSync-C4H3HF3L.js +0 -9
  455. package/dist/chunk-5ROTTMBL.js +0 -19
  456. package/dist/chunk-5TM3WPCI.js +0 -7
  457. package/dist/chunk-7HW4TZB5.js +0 -148
  458. package/dist/chunk-IPQKQEWI.js +0 -52
  459. package/dist/chunk-LCDVPAMR.js +0 -24
  460. package/dist/chunk-SHAUX2MQ.js +0 -163
  461. /package/dist/{chunk-3MJNBOUO.js → chunk-2QPVU63T.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @sonordev/site-kit Changelog
2
2
 
3
+ ## 8.9.0
4
+
5
+ - Keep the CTA bar's actions and page content server-rendered on dynamic routes with Next.js Cache Components. Pathname-dependent CTA behavior and the Resonance runtime wait inside their own Suspense boundaries.
6
+
7
+ - Add `@sonordev/site-kit/resonance`, the measurement runtime that connects your site's consent manager to scoped consent receipts and approved advertising destinations. Register one adapter for the consent manager you already use; the runtime reads its current choices, never creates a banner, and keeps the visitor proof in memory only. `SiteKitLayout` mounts it as a childless sibling, so pages and managed forms render the same when measurement is unavailable. Google tags load only after the required advertising grants. Sites that don't configure it behave as before.
8
+
9
+ - Gate analytics collection, identity initialization, Signal and retries by the visitor's current purpose permission. Explicit denial drops pending tracking work, and a later grant starts fresh without replaying what was denied. A site with no configured requirement keeps its first-party analytics behavior, recorded as an unknown policy rather than a consent grant. Forms and chat keep working without optional measurement.
10
+
11
+ - Show an experiment variant as a measured exposure only when the server confirms the visitor's current assignment. Without that confirmation, or without consent, the control content shows. Accepted forms are still recorded as conversions by the server, never by the browser.
12
+
13
+ - Add the Meta browser pixel loader, switched off in this release. 8.9.0 can't start it: this build implements no loader controls revision, so even a capability witness from Sonor's server can't enable it, and a later release turns it on. When it's on, it will load Meta's script only after the three advertising grants, on pages a person has approved, with a clean address, no fragment and a clean referrer, outside frames, previews and signed-in areas. It mints Meta's own first-party cookies and sends no browser events, passes no user data, reads nothing from the page and attaches no listeners. A site that already has a Meta pixel or a tag manager gets a status code instead of a second pixel. Withdrawing consent pauses the pixel and expires `_fbp` and `_fbc`. The same-page cookie observation now also requires the page to be approved. Read `getResonanceMeasurementStatus()` for the current blocker codes, and see the Resonance page for the Content Security Policy hosts a strict site will need.
14
+
15
+ - Attach one optional Google click identifier to a new consented page-view occurrence. Only the current matching address is read, after advertising permission, including when analytics consent is denied. Ambiguous values are rejected, and nothing is kept in query history or browser storage.
16
+
17
+ - Load less for the same behavior: consent state is read through smaller shared readers that keep permission checks synchronous across bundles, and campaign validation schemas stay out of the deferred Signal runtime.
18
+
19
+ - The Resonance schemas and rules this release uses are the ones published in `@sonordev/contracts` 2.22.0.
20
+
21
+ ## 8.8.1
22
+
23
+ - Add optional full-wordmark presentation to runtime OG cards. Branded cards keep one photograph while fitting the title, and existing cards retain their layout. Use resolved logo assets and intrinsic dimensions with the metadata-file factory.
24
+
3
25
  ## 8.8.0
4
26
 
5
27
  - `@sonordev/site-kit/portfolio/contract` adds the verification, a proof-stage case study section for a build a Lighthouse run can't honestly score, such as an app behind a sign-in. It's a short list of checks, each saying what was checked, where, how, when, what came out and what it doesn't cover. New: `portfolioVerification` in `PORTFOLIO_SECTION_TYPES` (in the proof stage), `verificationProblems`, `readVerificationChecks`, `verificationLink`, `isVacuousScope`, `isPlaceholderText`, `isRealDay`, `latestVerificationDay`, `PORTFOLIO_VERIFICATION_JSON_SCHEMA`, the `PortfolioVerificationData` and `VerificationCheck` types and the limits `VERIFICATION_MAX_CHECKS`, `VERIFICATION_FIELD_MAX_CHARS` and `VERIFICATION_EARLIEST_DAY`. Nothing was removed or renamed. A `Record<PortfolioSectionType, ...>` of your own needs an entry for `portfolioVerification` before it type-checks.
package/README.md CHANGED
@@ -4,6 +4,15 @@ All-in-one integration kit for [Sonor](https://sonor.io)-powered Next.js sites.
4
4
 
5
5
  Articles, publications and Broadcast-powered editorial artwork live in [`@sonordev/press-kit`](https://www.npmjs.com/package/@sonordev/press-kit), a companion built on Site Kit. Legacy article imports remain compatible in 8.x.
6
6
 
7
+ ## Resonance measurement
8
+
9
+ Site Kit 8.9 adds a consent adapter and childless measurement runtime through
10
+ [`@sonordev/site-kit/resonance`](src/resonance/README.md). It uses current server
11
+ receipts for advertising eligibility and keeps the existing analytics provider
12
+ as the pageview counter. Connect your maintained consent manager before enabling
13
+ measurement. Meta browser delivery remains blocked pending verified automatic
14
+ collection controls.
15
+
7
16
  ## Install
8
17
 
9
18
  ```bash
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@sonordev/site-kit",
4
- "version": "8.8.0",
4
+ "version": "8.9.0",
5
5
  "description": "Machine-readable manifest for coding agents integrating a site with Sonor. See AGENTS.md (shipped) and docs/SITE-KIT-AGENT-NATIVE.md.",
6
6
  "env": {
7
7
  "required": [
@@ -141,6 +141,13 @@
141
141
  "purpose": "Page views, scroll depth, web vitals, heatmap clicks.",
142
142
  "caution": "SiteKitLayout already mounts this as a deferred, childless sibling (site-kit >=3.0.2); configure it with analytics={{ ... }} rather than mounting it yourself. Never wrap {children} in AnalyticsProvider: it puts analytics in the hydration path, and lazy-loaded with next/dynamic({ ssr: false }) it de-opts the route to client rendering (SSR bailout). Track custom events with the standalone trackEvent / trackConversion (no provider needed); useAnalytics() throws outside a provider."
143
143
  },
144
+ {
145
+ "name": "resonance",
146
+ "import": "@sonordev/site-kit/resonance",
147
+ "side": "client",
148
+ "purpose": "Purpose-aware measurement and the maintained CMP adapter. SiteKitLayout mounts its childless runtime. Read getResonanceMeasurementStatus for eligibility and provider blockers.",
149
+ "caution": "Advertising requires current server proof and purpose grants. Unknown is never a grant. Meta browser collection remains blocked pending verified automatic collection controls. Accepted forms are server conversions. Package availability does not establish site installation or provider delivery."
150
+ },
144
151
  {
145
152
  "name": "signal",
146
153
  "import": "@sonordev/site-kit/signal",
@@ -0,0 +1,19 @@
1
+ export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-SO6RSRUP.js';
2
+ import './chunk-AG2RDHYZ.js';
3
+ import './chunk-JT7GHHMV.js';
4
+ import './chunk-L2V5PUFN.js';
5
+ import './chunk-PMXQPO5Q.js';
6
+ import './chunk-NHDRA4Y5.js';
7
+ import './chunk-D4M5K6JN.js';
8
+ import './chunk-GJWI74ZZ.js';
9
+ import './chunk-NZOJHERI.js';
10
+ import './chunk-KMNHNCVG.js';
11
+ import './chunk-5IVD6G77.js';
12
+ import './chunk-DXE6SXWW.js';
13
+ import './chunk-7643MCD2.js';
14
+ import './chunk-64XODP7M.js';
15
+ import './chunk-VXCUXHZO.js';
16
+ import './chunk-W7OPEMGJ.js';
17
+ import './chunk-A4CC4ZG3.js';
18
+ import './chunk-FRY6PBT6.js';
19
+ import './chunk-PKBMQBKP.js';
@@ -1,24 +1,25 @@
1
1
  'use client';
2
- import './chunk-Y6SHFILE.js';
2
+ import './chunk-OEOSR5EG.js';
3
3
  import './chunk-B7T2SFUF.js';
4
- import './chunk-OPUY4RS6.js';
4
+ import './chunk-2LBKIE2K.js';
5
+ import './chunk-TPHOIE4I.js';
5
6
  import './chunk-6T6CQVNL.js';
6
- import './chunk-5ROTTMBL.js';
7
+ import './chunk-PVY7X5UR.js';
7
8
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
8
9
  import './chunk-H72ZFO3F.js';
9
10
  import './chunk-4KZ6W3ZH.js';
10
11
  import { withSiteBody } from './chunk-MJP63SSS.js';
11
12
  import './chunk-YVKRYQRG.js';
12
13
  import './chunk-FESKKJAS.js';
13
- import './chunk-A4CC4ZG3.js';
14
- import './chunk-LCDVPAMR.js';
15
- import './chunk-IPQKQEWI.js';
14
+ import './chunk-AG2RDHYZ.js';
15
+ import './chunk-JT7GHHMV.js';
16
+ import './chunk-D4M5K6JN.js';
16
17
  import './chunk-GJWI74ZZ.js';
17
- import './chunk-5TM3WPCI.js';
18
- import { sonorFetch } from './chunk-FLOJUMFR.js';
19
- import './chunk-7HW4TZB5.js';
18
+ import './chunk-5IVD6G77.js';
19
+ import { sonorFetch } from './chunk-VXCUXHZO.js';
20
20
  import { readPublishedApiConfig, readPublishedSite } from './chunk-W7OPEMGJ.js';
21
- import './chunk-F6WLHVMQ.js';
21
+ import './chunk-A4CC4ZG3.js';
22
+ import './chunk-FRY6PBT6.js';
22
23
  import './chunk-PKBMQBKP.js';
23
24
  import { useEffect } from 'react';
24
25
 
@@ -1,15 +1,14 @@
1
1
  'use client';
2
- import { getSiteDesignTokens } from './chunk-URLTBVRX.js';
2
+ import { getSiteDesignTokens } from './chunk-6EDE7BOE.js';
3
3
  import { DEFAULT_POPUP_TOKENS, PopupBlocks } from './chunk-52KO4LKD.js';
4
4
  import './chunk-XLAHRN4B.js';
5
5
  import { normalizePopupBlocks, toHexColor, readableOn } from './chunk-XHYE24HU.js';
6
6
  import './chunk-S22FSH7C.js';
7
- import './chunk-ZQSCMYZO.js';
7
+ import './chunk-DXE6SXWW.js';
8
+ import './chunk-7643MCD2.js';
8
9
  import './chunk-64XODP7M.js';
9
- import './chunk-FLOJUMFR.js';
10
- import './chunk-7HW4TZB5.js';
10
+ import './chunk-VXCUXHZO.js';
11
11
  import './chunk-W7OPEMGJ.js';
12
- import './chunk-F6WLHVMQ.js';
13
12
  import './chunk-PKBMQBKP.js';
14
13
  import { useState } from 'react';
15
14
  import { jsx } from 'react/jsx-runtime';
@@ -0,0 +1,30 @@
1
+ export { ChatWidget, EchoChat, isChatEnabled } from './chunk-CJ43K7RA.js';
2
+ import './chunk-6T6CQVNL.js';
3
+ import './chunk-JE4A5S4F.js';
4
+ import './chunk-27FISYK4.js';
5
+ import './chunk-UG53ZW7S.js';
6
+ import './chunk-Q6E4OPGG.js';
7
+ import './chunk-MDBXGN6W.js';
8
+ import './chunk-PVY7X5UR.js';
9
+ import './chunk-C2FZBUSS.js';
10
+ import './chunk-TYSIAWC3.js';
11
+ import './chunk-HW7B43E5.js';
12
+ import './chunk-NJCTQH2P.js';
13
+ import './chunk-S22FSH7C.js';
14
+ import './chunk-L2V5PUFN.js';
15
+ import './chunk-PMXQPO5Q.js';
16
+ import './chunk-NHDRA4Y5.js';
17
+ import './chunk-D4M5K6JN.js';
18
+ import './chunk-GJWI74ZZ.js';
19
+ import './chunk-NZOJHERI.js';
20
+ import './chunk-KMNHNCVG.js';
21
+ import './chunk-5IVD6G77.js';
22
+ import './chunk-DXE6SXWW.js';
23
+ import './chunk-7643MCD2.js';
24
+ import './chunk-64XODP7M.js';
25
+ import './chunk-VXCUXHZO.js';
26
+ import './chunk-W7OPEMGJ.js';
27
+ import './chunk-A4CC4ZG3.js';
28
+ import './chunk-MOACHHOJ.js';
29
+ import './chunk-FRY6PBT6.js';
30
+ import './chunk-PKBMQBKP.js';
@@ -1,8 +1,6 @@
1
1
  'use client';
2
- import { sonorFetch } from './chunk-FLOJUMFR.js';
3
- import './chunk-7HW4TZB5.js';
2
+ import { sonorFetch } from './chunk-VXCUXHZO.js';
4
3
  import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
5
- import './chunk-F6WLHVMQ.js';
6
4
  import './chunk-PKBMQBKP.js';
7
5
  import React2, { useState, useRef } from 'react';
8
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
3
- import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-GQN4BGK6.js';
3
+ import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-OUD4RTBD.js';
4
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
5
5
  import { isEmptyValue, unseenControlValues, isDisplayOnly } from './chunk-C2FZBUSS.js';
6
6
  import { FormField } from './chunk-CVADNHJ4.js';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
3
- import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-GQN4BGK6.js';
3
+ import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-OUD4RTBD.js';
4
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
5
5
  import { isEmptyValue, unseenControlValues } from './chunk-C2FZBUSS.js';
6
6
  import { FormField } from './chunk-CVADNHJ4.js';
@@ -0,0 +1,29 @@
1
+ export { ManagedForm } from './chunk-S33CUULL.js';
2
+ import './chunk-OUD4RTBD.js';
3
+ import './chunk-UG53ZW7S.js';
4
+ import './chunk-Q6E4OPGG.js';
5
+ import './chunk-MDBXGN6W.js';
6
+ import './chunk-PVY7X5UR.js';
7
+ import './chunk-C2FZBUSS.js';
8
+ import './chunk-DXO6SBMD.js';
9
+ import './chunk-CVADNHJ4.js';
10
+ import './chunk-TYSIAWC3.js';
11
+ import './chunk-HW7B43E5.js';
12
+ import './chunk-NJCTQH2P.js';
13
+ import './chunk-L2V5PUFN.js';
14
+ import './chunk-PMXQPO5Q.js';
15
+ import './chunk-NHDRA4Y5.js';
16
+ import './chunk-D4M5K6JN.js';
17
+ import './chunk-GJWI74ZZ.js';
18
+ import './chunk-NZOJHERI.js';
19
+ import './chunk-KMNHNCVG.js';
20
+ import './chunk-5IVD6G77.js';
21
+ import './chunk-DXE6SXWW.js';
22
+ import './chunk-7643MCD2.js';
23
+ import './chunk-64XODP7M.js';
24
+ import './chunk-VXCUXHZO.js';
25
+ import './chunk-W7OPEMGJ.js';
26
+ import './chunk-A4CC4ZG3.js';
27
+ import './chunk-MOACHHOJ.js';
28
+ import './chunk-FRY6PBT6.js';
29
+ import './chunk-PKBMQBKP.js';
@@ -1,12 +1,13 @@
1
- import './chunk-DYROJGI2.js';
2
- import './chunk-YGGDU6C3.js';
3
- import './chunk-G7BRCSV6.js';
4
- import './chunk-GQN4BGK6.js';
1
+ import './chunk-6NLVHTYY.js';
5
2
  import './chunk-SOD2F6C2.js';
6
- import { useForm } from './chunk-IWNJCRXW.js';
3
+ import './chunk-YGGDU6C3.js';
4
+ import './chunk-S33CUULL.js';
5
+ import './chunk-OUD4RTBD.js';
6
+ import { useForm } from './chunk-UG53ZW7S.js';
7
7
  import './chunk-Q6E4OPGG.js';
8
- import './chunk-5ROTTMBL.js';
9
- import './chunk-SLFYTELD.js';
8
+ import './chunk-MDBXGN6W.js';
9
+ import './chunk-PVY7X5UR.js';
10
+ import './chunk-J4LJE4NB.js';
10
11
  import './chunk-C2FZBUSS.js';
11
12
  import './chunk-YC7ELZS3.js';
12
13
  import './chunk-DXO6SBMD.js';
@@ -17,12 +18,21 @@ import './chunk-NJCTQH2P.js';
17
18
  import { NewsletterShell } from './chunk-JHTPHA2D.js';
18
19
  import './chunk-DJAYFHVF.js';
19
20
  import './chunk-L2V5PUFN.js';
21
+ import './chunk-PMXQPO5Q.js';
22
+ import './chunk-NHDRA4Y5.js';
23
+ import './chunk-D4M5K6JN.js';
20
24
  import './chunk-GJWI74ZZ.js';
21
- import './chunk-5TM3WPCI.js';
22
- import './chunk-FLOJUMFR.js';
23
- import './chunk-7HW4TZB5.js';
25
+ import './chunk-NZOJHERI.js';
26
+ import './chunk-KMNHNCVG.js';
27
+ import './chunk-5IVD6G77.js';
28
+ import './chunk-DXE6SXWW.js';
29
+ import './chunk-7643MCD2.js';
30
+ import './chunk-64XODP7M.js';
31
+ import './chunk-VXCUXHZO.js';
24
32
  import './chunk-W7OPEMGJ.js';
25
- import './chunk-F6WLHVMQ.js';
33
+ import './chunk-A4CC4ZG3.js';
34
+ import './chunk-MOACHHOJ.js';
35
+ import './chunk-FRY6PBT6.js';
26
36
  import './chunk-PKBMQBKP.js';
27
37
  import { jsxs, jsx } from 'react/jsx-runtime';
28
38
 
@@ -1,17 +1,23 @@
1
1
  'use client';
2
- import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-IPQKQEWI.js';
2
+ import { getFreshCredential } from './chunk-FAY6MOLL.js';
3
+ import { isSiteToken } from './chunk-TPHOIE4I.js';
4
+ import { getOrCreateSessionId, getOrCreateVisitorId } from './chunk-JT7GHHMV.js';
3
5
  import { onPageLeave } from './chunk-L2V5PUFN.js';
6
+ import { RESONANCE_SUBJECT_HEADER } from './chunk-NHDRA4Y5.js';
7
+ import './chunk-D4M5K6JN.js';
4
8
  import './chunk-GJWI74ZZ.js';
5
- import './chunk-5TM3WPCI.js';
6
- import { isPrivatePreview } from './chunk-ZQSCMYZO.js';
9
+ import { experimentMeasurementPermitted, currentSubjectProof } from './chunk-KMNHNCVG.js';
10
+ import './chunk-5IVD6G77.js';
11
+ import './chunk-DXE6SXWW.js';
12
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
7
13
  import './chunk-64XODP7M.js';
8
- import { sonorFetch } from './chunk-FLOJUMFR.js';
9
- import { getFreshCredential, isSiteToken } from './chunk-7HW4TZB5.js';
10
- import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
11
- import './chunk-F6WLHVMQ.js';
14
+ import { sonorFetch } from './chunk-VXCUXHZO.js';
15
+ import { getClientApiConfig, readPublishedSite } from './chunk-W7OPEMGJ.js';
16
+ import { subscribeMeasurementPolicy, measurementPolicySnapshot, serverMeasurementPolicySnapshot, analyticsPurposePermitted } from './chunk-FRY6PBT6.js';
12
17
  import './chunk-PKBMQBKP.js';
13
- import { useState, useRef, useEffect, useCallback } from 'react';
18
+ import { useState, useRef, useSyncExternalStore, useEffect, useCallback } from 'react';
14
19
 
20
+ var getClientSite = () => readPublishedSite() || (typeof window !== "undefined" ? window.location.host : "");
15
21
  function getApiConfig() {
16
22
  return getClientApiConfig();
17
23
  }
@@ -56,6 +62,7 @@ function SignalCore({
56
62
  onState
57
63
  }) {
58
64
  const [config, setConfig] = useState(null);
65
+ const [assignmentRevision, setAssignmentRevision] = useState(0);
59
66
  const [loading, setLoading] = useState(true);
60
67
  const [error, setError] = useState(null);
61
68
  const eventSourceRef = useRef(null);
@@ -66,19 +73,53 @@ function SignalCore({
66
73
  const scrollDepthRef = useRef(0);
67
74
  const clickCountRef = useRef(0);
68
75
  const { apiUrl, apiKey } = getApiConfig();
69
- const resolvedVisitorId = externalVisitorId || getOrCreateVisitorId();
70
- const resolvedSessionId = externalSessionId || getOrCreateSessionId();
76
+ const policy = useSyncExternalStore(subscribeMeasurementPolicy, measurementPolicySnapshot, serverMeasurementPolicySnapshot);
77
+ const [identity, setIdentity] = useState({ visitor: "", session: "" });
78
+ const permitted = () => analyticsPurposePermitted() && !!resolveAnalyticsTarget({ apiUrl, apiKey });
79
+ const epoch = policy.collectionEpoch;
80
+ const allowed = () => permitted() && measurementPolicySnapshot().collectionEpoch === epoch;
71
81
  useEffect(() => {
72
- onState({ config, loading, error });
73
- }, [config, loading, error, onState]);
82
+ if (!permitted()) {
83
+ setIdentity({ visitor: "", session: "" });
84
+ return;
85
+ }
86
+ setIdentity({ visitor: externalVisitorId || getOrCreateVisitorId(), session: externalSessionId || getOrCreateSessionId() });
87
+ }, [epoch, externalVisitorId, externalSessionId, apiUrl, apiKey]);
88
+ const resolvedVisitorId = identity.visitor;
89
+ const resolvedSessionId = identity.session;
90
+ useEffect(() => subscribeMeasurementPolicy(() => {
91
+ if (!allowed()) {
92
+ eventQueueRef.current = [];
93
+ assignmentsRef.current.clear();
94
+ eventSourceRef.current?.close();
95
+ eventSourceRef.current = null;
96
+ if (flushTimeoutRef.current) clearTimeout(flushTimeoutRef.current);
97
+ setConfig(null);
98
+ }
99
+ }), [epoch, apiUrl, apiKey]);
100
+ useEffect(() => {
101
+ onState({ config, loading, error, assignmentRevision });
102
+ }, [config, loading, error, assignmentRevision, onState]);
74
103
  const loadExperimentAssignment = useCallback(async (experimentId) => {
75
- const storageKey = `_signal_exp_${experimentId}`;
76
- const stored = localStorage.getItem(storageKey);
104
+ if (!allowed() || !resolvedVisitorId) return null;
105
+ const managed = measurementPolicySnapshot().policy === "configured";
106
+ if (managed && !experimentMeasurementPermitted()) return null;
107
+ const proof = managed ? currentSubjectProof() : null;
108
+ if (managed && assignmentsRef.current.delete(experimentId)) setAssignmentRevision((value) => value + 1);
109
+ const storageKey = `_sk_signal_exp_${experimentId}`;
110
+ let stored = null;
111
+ if (!managed) {
112
+ try {
113
+ stored = localStorage.getItem(storageKey);
114
+ } catch {
115
+ }
116
+ }
77
117
  if (stored) {
78
118
  try {
79
119
  const assignment = JSON.parse(stored);
80
120
  if (assignment.expires > Date.now()) {
81
121
  assignmentsRef.current.set(experimentId, assignment);
122
+ setAssignmentRevision((value) => value + 1);
82
123
  return assignment;
83
124
  }
84
125
  } catch {
@@ -86,29 +127,38 @@ function SignalCore({
86
127
  }
87
128
  try {
88
129
  const response = await sonorFetch(
89
- `${apiUrl}/api/public/signal/experiment/${experimentId}`,
130
+ `${apiUrl}/api/public/signal/experiment/${experimentId}?site=${encodeURIComponent(getClientSite())}`,
90
131
  {
91
132
  headers: {
92
- "x-visitor-id": resolvedVisitorId
133
+ "x-visitor-id": resolvedVisitorId,
134
+ ...currentSubjectProof() ? { [RESONANCE_SUBJECT_HEADER]: currentSubjectProof().subjectProof } : {}
93
135
  }
94
136
  },
95
- { apiKey }
137
+ { apiKey, shouldSend: allowed }
96
138
  );
97
139
  if (!response.ok) return null;
98
140
  const assignment = await response.json();
99
- localStorage.setItem(storageKey, JSON.stringify(assignment));
141
+ if (!allowed() || managed && (!proof || currentSubjectProof()?.subjectProof !== proof.subjectProof || assignment.site !== getClientSite() || !assignment.assignment_id || !assignment.experiment_revision)) return null;
142
+ if (!managed) {
143
+ try {
144
+ localStorage.setItem(storageKey, JSON.stringify(assignment));
145
+ } catch {
146
+ }
147
+ }
100
148
  assignmentsRef.current.set(experimentId, assignment);
149
+ setAssignmentRevision((value) => value + 1);
101
150
  return assignment;
102
151
  } catch (err) {
103
152
  if (isDebug()) console.error("[Signal] Experiment assignment error:", err);
104
153
  return null;
105
154
  }
106
- }, [apiUrl, apiKey]);
155
+ }, [apiUrl, apiKey, resolvedVisitorId, resolvedSessionId, epoch, policy.proof]);
107
156
  const getExperiment = useCallback((experimentId) => {
157
+ if (!permitted() || measurementPolicySnapshot().policy === "configured" && !experimentMeasurementPermitted()) return null;
108
158
  return assignmentsRef.current.get(experimentId) || null;
109
159
  }, []);
110
160
  const fetchConfig = useCallback(async () => {
111
- if (!apiKey || !enabled || isPrivatePreview()) {
161
+ if (!apiKey || !enabled || !allowed() || !resolvedVisitorId) {
112
162
  setLoading(false);
113
163
  return;
114
164
  }
@@ -117,15 +167,17 @@ function SignalCore({
117
167
  `${apiUrl}/api/public/signal/config`,
118
168
  {
119
169
  headers: {
120
- "x-visitor-id": resolvedVisitorId
170
+ "x-visitor-id": resolvedVisitorId,
171
+ ...currentSubjectProof() ? { [RESONANCE_SUBJECT_HEADER]: currentSubjectProof().subjectProof } : {}
121
172
  }
122
173
  },
123
- { apiKey }
174
+ { apiKey, shouldSend: allowed }
124
175
  );
125
176
  if (!response.ok) {
126
177
  throw new Error(`Failed to fetch Signal config: ${response.statusText}`);
127
178
  }
128
179
  const data = await response.json();
180
+ if (!allowed()) return;
129
181
  setConfig(data.config);
130
182
  setError(null);
131
183
  if (experiments && data.config?.experiments) {
@@ -143,7 +195,7 @@ function SignalCore({
143
195
  }
144
196
  }, [apiUrl, apiKey, enabled, experiments, resolvedVisitorId, loadExperimentAssignment]);
145
197
  const connectSSE = useCallback(() => {
146
- if (!apiKey || !enabled || !realtime || isPrivatePreview()) return;
198
+ if (!apiKey || !enabled || !realtime || !allowed() || measurementPolicySnapshot().policy === "configured") return;
147
199
  if (eventSourceRef.current) {
148
200
  eventSourceRef.current.close();
149
201
  eventSourceRef.current = null;
@@ -156,7 +208,7 @@ function SignalCore({
156
208
  }
157
209
  return;
158
210
  }
159
- if (eventSourceRef.current) return;
211
+ if (!allowed() || eventSourceRef.current) return;
160
212
  const url = `${apiUrl}/api/public/signal/stream?token=${encodeURIComponent(credential)}`;
161
213
  connectEventSource(url);
162
214
  })();
@@ -200,7 +252,7 @@ function SignalCore({
200
252
  }
201
253
  }, [apiUrl, apiKey, enabled, realtime, loadExperimentAssignment]);
202
254
  const flushEvents = useCallback(async () => {
203
- if (isPrivatePreview()) {
255
+ if (!allowed() || !resolvedVisitorId || !resolvedSessionId) {
204
256
  eventQueueRef.current = [];
205
257
  return;
206
258
  }
@@ -219,15 +271,15 @@ function SignalCore({
219
271
  events
220
272
  })
221
273
  },
222
- { apiKey, retries: 0 }
274
+ { apiKey, retries: 0, shouldSend: allowed }
223
275
  );
224
276
  } catch (err) {
225
- eventQueueRef.current = [...events, ...eventQueueRef.current];
277
+ if (allowed()) eventQueueRef.current = [...events, ...eventQueueRef.current].slice(0, 100);
226
278
  if (isDebug()) console.error("[Signal] Event flush error:", err);
227
279
  }
228
- }, [apiUrl, apiKey]);
280
+ }, [apiUrl, apiKey, resolvedVisitorId, resolvedSessionId, epoch]);
229
281
  const trackEvent = useCallback((event) => {
230
- if (!enabled || !apiKey || isPrivatePreview()) return;
282
+ if (!enabled || !apiKey || !allowed() || !resolvedVisitorId || !resolvedSessionId) return;
231
283
  const enrichedEvent = {
232
284
  ...event,
233
285
  page_url: window.location.href,
@@ -249,14 +301,14 @@ function SignalCore({
249
301
  page_metadata: pageMetadataRef?.current ?? void 0,
250
302
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
251
303
  };
252
- eventQueueRef.current.push(enrichedEvent);
304
+ if (eventQueueRef.current.length < 100) eventQueueRef.current.push(enrichedEvent);
253
305
  if (flushTimeoutRef.current) {
254
306
  clearTimeout(flushTimeoutRef.current);
255
307
  }
256
308
  flushTimeoutRef.current = setTimeout(flushEvents, 1e3);
257
- }, [enabled, apiKey, flushEvents]);
309
+ }, [enabled, apiKey, flushEvents, epoch]);
258
310
  const trackOutcome = useCallback(async (outcome) => {
259
- if (!enabled || !apiKey || isPrivatePreview()) return;
311
+ if (!enabled || !apiKey || !allowed() || !resolvedVisitorId || !resolvedSessionId) return;
260
312
  try {
261
313
  await sonorFetch(
262
314
  `${apiUrl}/api/public/signal/outcome`,
@@ -272,21 +324,23 @@ function SignalCore({
272
324
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
273
325
  })
274
326
  },
275
- { apiKey, retries: 0 }
327
+ { apiKey, retries: 0, shouldSend: allowed }
276
328
  );
277
329
  } catch (err) {
278
330
  if (isDebug()) console.error("[Signal] Outcome tracking error:", err);
279
331
  }
280
- }, [apiUrl, apiKey, enabled]);
332
+ }, [apiUrl, apiKey, enabled, resolvedVisitorId, resolvedSessionId, epoch]);
281
333
  useEffect(() => {
282
- if (!behaviorTracking || typeof window === "undefined") return;
334
+ if (!behaviorTracking || typeof window === "undefined" || !allowed()) return;
283
335
  const handleScroll = () => {
336
+ if (!allowed()) return;
284
337
  const scrollTop = window.scrollY;
285
338
  const docHeight = document.documentElement.scrollHeight - window.innerHeight;
286
339
  const depth = docHeight > 0 ? Math.round(scrollTop / docHeight * 100) : 0;
287
340
  scrollDepthRef.current = Math.max(scrollDepthRef.current, depth);
288
341
  };
289
342
  const handleClick = () => {
343
+ if (!allowed()) return;
290
344
  clickCountRef.current++;
291
345
  };
292
346
  window.addEventListener("scroll", handleScroll, { passive: true });
@@ -297,7 +351,7 @@ function SignalCore({
297
351
  window.removeEventListener("click", handleClick);
298
352
  stopLeaveListener();
299
353
  };
300
- }, [behaviorTracking, flushEvents]);
354
+ }, [behaviorTracking, flushEvents, epoch]);
301
355
  useEffect(() => {
302
356
  fetchConfig();
303
357
  }, [fetchConfig]);
@@ -1,6 +1,6 @@
1
- export { SiteChat } from './chunk-SBPUFTMP.js';
1
+ export { SiteChat } from './chunk-WHFWDK2H.js';
2
2
  import './chunk-27FISYK4.js';
3
- import './chunk-ZQSCMYZO.js';
3
+ import './chunk-7643MCD2.js';
4
4
  import './chunk-64XODP7M.js';
5
5
  import './chunk-W7OPEMGJ.js';
6
6
  import './chunk-PKBMQBKP.js';
@@ -1,13 +1,12 @@
1
- export { SiteDesignReporter } from './chunk-6BFQI3ZE.js';
2
- import './chunk-URLTBVRX.js';
1
+ export { SiteDesignReporter } from './chunk-IO6BWRZ5.js';
2
+ import './chunk-6EDE7BOE.js';
3
3
  import './chunk-XLAHRN4B.js';
4
4
  import './chunk-XHYE24HU.js';
5
5
  import './chunk-YC7ELZS3.js';
6
6
  import './chunk-S22FSH7C.js';
7
- import './chunk-ZQSCMYZO.js';
7
+ import './chunk-DXE6SXWW.js';
8
+ import './chunk-7643MCD2.js';
8
9
  import './chunk-64XODP7M.js';
9
- import './chunk-FLOJUMFR.js';
10
- import './chunk-7HW4TZB5.js';
10
+ import './chunk-VXCUXHZO.js';
11
11
  import './chunk-W7OPEMGJ.js';
12
- import './chunk-F6WLHVMQ.js';
13
12
  import './chunk-PKBMQBKP.js';
@@ -0,0 +1,19 @@
1
+ export { SitePopups } from './chunk-EBEM5BI5.js';
2
+ import './chunk-27FISYK4.js';
3
+ import './chunk-PVY7X5UR.js';
4
+ import './chunk-JT7GHHMV.js';
5
+ import './chunk-PMXQPO5Q.js';
6
+ import './chunk-NHDRA4Y5.js';
7
+ import './chunk-D4M5K6JN.js';
8
+ import './chunk-GJWI74ZZ.js';
9
+ import './chunk-NZOJHERI.js';
10
+ import './chunk-KMNHNCVG.js';
11
+ import './chunk-5IVD6G77.js';
12
+ import './chunk-DXE6SXWW.js';
13
+ import './chunk-7643MCD2.js';
14
+ import './chunk-64XODP7M.js';
15
+ import './chunk-VXCUXHZO.js';
16
+ import './chunk-W7OPEMGJ.js';
17
+ import './chunk-A4CC4ZG3.js';
18
+ import './chunk-FRY6PBT6.js';
19
+ import './chunk-PKBMQBKP.js';
@@ -0,0 +1,7 @@
1
+ export { SitemapSync } from './chunk-ADQ3VCKK.js';
2
+ import './chunk-YVKRYQRG.js';
3
+ import './chunk-7643MCD2.js';
4
+ import './chunk-64XODP7M.js';
5
+ import './chunk-VXCUXHZO.js';
6
+ import './chunk-W7OPEMGJ.js';
7
+ import './chunk-PKBMQBKP.js';
@@ -12,7 +12,7 @@
12
12
  * import { SitemapSync } from '@sonordev/site-kit/seo'
13
13
  * ```
14
14
  */
15
- import { type AnalyticsGateOptions } from './shared/reporting-gate';
15
+ import { type AnalyticsGateOptions } from "./shared/reporting-gate.js";
16
16
  interface SitemapSyncProps extends AnalyticsGateOptions {
17
17
  /** Custom sitemap URL (defaults to /sitemap.xml) */
18
18
  sitemapUrl?: string;
@@ -1,4 +1,4 @@
1
1
  import * as React from 'react';
2
- import type { BookingWidgetProps } from '../sync/types';
2
+ import type { BookingWidgetProps } from "../sync/types.js";
3
3
  export declare function BookingWidget({ orgSlug, apiKey: propApiKey, apiUrl: propApiUrl, bookingTypeSlug, timezone: propTimezone, className, daysToShow, onBookingComplete, onError, hideTypeSelector, autoSelectFirstDay, styles, }: BookingWidgetProps): React.JSX.Element;
4
4
  export default BookingWidget;
@@ -1,10 +1,9 @@
1
1
  'use client';
2
- export { BookingWidget, BookingWidget_default as default } from '../chunk-6DXQHNZK.js';
3
- import '../chunk-PSS6M4CG.js';
4
- import '../chunk-5ROTTMBL.js';
5
- import '../chunk-5TM3WPCI.js';
6
- import '../chunk-FLOJUMFR.js';
7
- import '../chunk-7HW4TZB5.js';
2
+ export { BookingWidget, BookingWidget_default as default } from '../chunk-MP35JETP.js';
3
+ import '../chunk-ZRSXCT4O.js';
4
+ import '../chunk-PVY7X5UR.js';
5
+ import '../chunk-5IVD6G77.js';
6
+ import '../chunk-VXCUXHZO.js';
8
7
  import '../chunk-W7OPEMGJ.js';
9
- import '../chunk-F6WLHVMQ.js';
8
+ import '../chunk-FRY6PBT6.js';
10
9
  import '../chunk-PKBMQBKP.js';