@sonordev/site-kit 8.8.1 → 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 (456) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +9 -0
  3. package/agent-manifest.json +49 -42
  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-JT7GHHMV.js +56 -0
  108. package/dist/{chunk-NFGAXWCN.js → chunk-KGIQYVQ2.js} +31 -13
  109. package/dist/chunk-KMNHNCVG.js +20 -0
  110. package/dist/chunk-KQKUXIUD.js +25 -0
  111. package/dist/{chunk-M5JIHQ42.js → chunk-L3S5WH4C.js} +2 -2
  112. package/dist/chunk-MDBXGN6W.js +13 -0
  113. package/dist/chunk-MOACHHOJ.js +20 -0
  114. package/dist/{chunk-6DXQHNZK.js → chunk-MP35JETP.js} +1 -1
  115. package/dist/chunk-NHDRA4Y5.js +6 -0
  116. package/dist/{chunk-AYQEIMGS.js → chunk-NZHECYLF.js} +103 -22
  117. package/dist/{chunk-EATJPSTS.js → chunk-O5LQUBBN.js} +1 -1
  118. package/dist/{chunk-Y6SHFILE.js → chunk-OEOSR5EG.js} +1 -1
  119. package/dist/{chunk-GQN4BGK6.js → chunk-OUD4RTBD.js} +1 -1
  120. package/dist/chunk-PMXQPO5Q.js +78 -0
  121. package/dist/chunk-PVY7X5UR.js +21 -0
  122. package/dist/{chunk-KG5IEV7I.js → chunk-QLJ2SC3T.js} +1 -1
  123. package/dist/{chunk-2WM4TNDF.js → chunk-QXAJPB6O.js} +1 -1
  124. package/dist/{chunk-2WDWQI7K.js → chunk-RYR6N4X4.js} +1 -1
  125. package/dist/{chunk-G7BRCSV6.js → chunk-S33CUULL.js} +3 -3
  126. package/dist/{chunk-YRQS7VAH.js → chunk-S63QY5XW.js} +2 -2
  127. package/dist/{chunk-GXWM5KNS.js → chunk-SO6RSRUP.js} +40 -45
  128. package/dist/{chunk-ODOV76VW.js → chunk-STIVFCWM.js} +1 -1
  129. package/dist/{chunk-SVHPILS3.js → chunk-T4A5J6SJ.js} +1 -1
  130. package/dist/chunk-TPHOIE4I.js +73 -0
  131. package/dist/{chunk-IWNJCRXW.js → chunk-UG53ZW7S.js} +125 -118
  132. package/dist/chunk-VXCUXHZO.js +9 -0
  133. package/dist/{chunk-SBPUFTMP.js → chunk-WHFWDK2H.js} +2 -2
  134. package/dist/chunk-WYNDBJG7.js +66 -0
  135. package/dist/{chunk-HN7GVGWC.js → chunk-XDH5B3PR.js} +3 -3
  136. package/dist/{chunk-PAYCK7FC.js → chunk-XJZLXUTG.js} +1 -1
  137. package/dist/{chunk-IDC5CVBR.js → chunk-YVEYO3OD.js} +1 -1
  138. package/dist/{chunk-PSS6M4CG.js → chunk-ZRSXCT4O.js} +2 -2
  139. package/dist/client/index.d.ts +8 -8
  140. package/dist/client/index.js +9 -8
  141. package/dist/config/index.d.ts +1 -1
  142. package/dist/contracts/broadcast-layouts.d.ts +8 -0
  143. package/dist/contracts/crm-disposition.d.ts +87 -0
  144. package/dist/contracts/decision-roles.d.ts +39 -0
  145. package/dist/contracts/entries.d.ts +1 -1
  146. package/dist/contracts/funnels.d.ts +85 -2
  147. package/dist/contracts/portfolio.d.ts +1 -1
  148. package/dist/contracts/publication-branding.d.ts +3 -3
  149. package/dist/contracts/resonance-constants.d.ts +4 -0
  150. package/dist/contracts/resonance.d.ts +8461 -0
  151. package/dist/contracts/signal-experiments.d.ts +219 -0
  152. package/dist/contracts/site-edit.d.ts +2 -2
  153. package/dist/contracts/sites.d.ts +1 -1
  154. package/dist/contracts/slots.d.ts +2 -2
  155. package/dist/contracts/wire-schema.d.ts +36 -0
  156. package/dist/cta-bar/CtaBar.d.ts +1 -1
  157. package/dist/cta-bar/client.js +3 -2
  158. package/dist/cta-bar/index.d.ts +4 -4
  159. package/dist/cta-bar/index.js +4 -3
  160. package/dist/fleet/FleetHeartbeat.d.ts +2 -2
  161. package/dist/fleet/contract.d.ts +1 -1
  162. package/dist/fleet/heartbeat.d.ts +2 -2
  163. package/dist/fleet/index.d.ts +6 -6
  164. package/dist/fleet/index.js +4 -5
  165. package/dist/forms/FileField.d.ts +1 -1
  166. package/dist/forms/FormClient.d.ts +2 -2
  167. package/dist/forms/FormEnhancer.d.ts +1 -1
  168. package/dist/forms/FormField.d.ts +1 -1
  169. package/dist/forms/FormSpotlight.d.ts +1 -1
  170. package/dist/forms/FormStage.d.ts +1 -1
  171. package/dist/forms/ManagedForm.d.ts +1 -1
  172. package/dist/forms/PrivateFileField.d.ts +1 -1
  173. package/dist/forms/ServerForm.d.ts +3 -3
  174. package/dist/forms/StaticForm.d.ts +1 -1
  175. package/dist/forms/contract.d.ts +1 -1
  176. package/dist/forms/experience-plan.d.ts +1 -1
  177. package/dist/forms/field-autocomplete.d.ts +1 -1
  178. package/dist/forms/field-controls.d.ts +1 -1
  179. package/dist/forms/field-rules.d.ts +1 -1
  180. package/dist/forms/form-dom-values.d.ts +1 -1
  181. package/dist/forms/index.d.ts +18 -18
  182. package/dist/forms/index.js +21 -11
  183. package/dist/forms/normalize-config.d.ts +1 -1
  184. package/dist/forms/server.d.ts +4 -4
  185. package/dist/forms/server.js +3 -3
  186. package/dist/forms/static.d.ts +2 -2
  187. package/dist/forms/submitForm.d.ts +2 -2
  188. package/dist/forms/tracking-session.d.ts +1 -1
  189. package/dist/forms/useForm.d.ts +2 -2
  190. package/dist/forms/webmcp.d.ts +2 -2
  191. package/dist/images/api.d.ts +1 -1
  192. package/dist/images/index.d.ts +6 -6
  193. package/dist/images/index.js +2 -4
  194. package/dist/images/server.d.ts +2 -2
  195. package/dist/index.d.ts +13 -13
  196. package/dist/index.js +1 -1
  197. package/dist/landing/contract.d.ts +1 -1
  198. package/dist/landing/contract.js +2 -1
  199. package/dist/landing/index.d.ts +3 -3
  200. package/dist/landing/index.js +3 -2
  201. package/dist/landing/managed-server.d.ts +2 -2
  202. package/dist/landing/managed.d.ts +10 -2
  203. package/dist/landing/server.d.ts +7 -7
  204. package/dist/landing/server.js +11 -6
  205. package/dist/layout/AiDiscoveryLinks.d.ts +1 -1
  206. package/dist/layout/SiteKitClientProviders.d.ts +1 -1
  207. package/dist/layout/SiteKitLayout.d.ts +2 -2
  208. package/dist/layout/client.d.ts +1 -1
  209. package/dist/layout/client.js +15 -11
  210. package/dist/layout/index.d.ts +5 -5
  211. package/dist/layout/index.js +17 -13
  212. package/dist/layout/types.d.ts +2 -2
  213. package/dist/llms/AEOComponents.d.ts +1 -1
  214. package/dist/llms/SpeakableSchema.d.ts +1 -1
  215. package/dist/llms/api.d.ts +1 -1
  216. package/dist/llms/client.d.ts +3 -3
  217. package/dist/llms/contract.d.ts +1 -1
  218. package/dist/llms/generateLLMsTxt.d.ts +1 -1
  219. package/dist/llms/handlers.d.ts +1 -1
  220. package/dist/llms/index.d.ts +21 -21
  221. package/dist/llms/index.js +5 -5
  222. package/dist/llms/merge.d.ts +1 -1
  223. package/dist/llms/sourcedFacts.d.ts +1 -1
  224. package/dist/llms/types.d.ts +5 -5
  225. package/dist/llms/writeLLMsTxt.d.ts +3 -3
  226. package/dist/maps/GoogleMap.d.ts +1 -1
  227. package/dist/maps/NeighborhoodMap.d.ts +1 -1
  228. package/dist/maps/api.d.ts +1 -1
  229. package/dist/maps/index.d.ts +5 -5
  230. package/dist/maps/index.js +1 -3
  231. package/dist/mcp/WebMcpTools.d.ts +1 -1
  232. package/dist/mcp/client.d.ts +2 -2
  233. package/dist/mcp/discovery.d.ts +2 -2
  234. package/dist/mcp/handlers.d.ts +4 -4
  235. package/dist/mcp/index.d.ts +12 -12
  236. package/dist/mcp/protocol.d.ts +1 -1
  237. package/dist/mcp/report.d.ts +1 -1
  238. package/dist/mcp/serverCard.d.ts +1 -1
  239. package/dist/mcp/sonor.d.ts +5 -5
  240. package/dist/mcp/sonor.js +10 -10
  241. package/dist/mcp/transport.d.ts +1 -1
  242. package/dist/motion/Parallax.d.ts +1 -1
  243. package/dist/motion/ScrollScene.d.ts +1 -1
  244. package/dist/motion/gsap.d.ts +2 -2
  245. package/dist/motion/index.d.ts +9 -9
  246. package/dist/motion/three.d.ts +1 -1
  247. package/dist/og/index.d.ts +5 -5
  248. package/dist/og/pages.d.ts +1 -1
  249. package/dist/og/route-fit.d.ts +17 -0
  250. package/dist/og/template.d.ts +1 -1
  251. package/dist/portfolio/contract.d.ts +1 -1
  252. package/dist/press-kit/articles/Article.d.ts +2 -2
  253. package/dist/press-kit/articles/ArticleFaqSection.d.ts +1 -1
  254. package/dist/press-kit/articles/ArticleList.d.ts +2 -2
  255. package/dist/press-kit/articles/AuthorCard.d.ts +1 -1
  256. package/dist/press-kit/articles/AuthorPage.d.ts +1 -1
  257. package/dist/press-kit/articles/ClusterLandingPage.d.ts +2 -2
  258. package/dist/press-kit/articles/ClusterNavigation.d.ts +2 -2
  259. package/dist/press-kit/articles/ManagedNewsletterForm.d.ts +2 -2
  260. package/dist/press-kit/articles/PublicationLayout.d.ts +2 -2
  261. package/dist/press-kit/articles/PublicationSidebar.d.ts +1 -1
  262. package/dist/press-kit/articles/RelatedPosts.d.ts +2 -2
  263. package/dist/press-kit/articles/TableOfContents.d.ts +1 -1
  264. package/dist/press-kit/articles/article-body.d.ts +1 -1
  265. package/dist/press-kit/articles/article-headings.d.ts +1 -1
  266. package/dist/press-kit/articles/article-photos.d.ts +1 -1
  267. package/dist/press-kit/articles/artwork.d.ts +2 -2
  268. package/dist/press-kit/articles/author-schema.d.ts +2 -2
  269. package/dist/press-kit/articles/author-social.d.ts +1 -1
  270. package/dist/press-kit/articles/index.d.ts +23 -23
  271. package/dist/press-kit/articles/news-sitemap.d.ts +2 -2
  272. package/dist/press-kit/articles/public-reads.d.ts +1 -1
  273. package/dist/press-kit/articles/publication-reads.d.ts +2 -2
  274. package/dist/press-kit/articles/reading-time.d.ts +1 -1
  275. package/dist/press-kit/articles/server-core.d.ts +20 -20
  276. package/dist/press-kit/articles/server-ui.d.ts +20 -20
  277. package/dist/press-kit/articles/types.d.ts +1 -1
  278. package/dist/proxy/index.d.ts +5 -5
  279. package/dist/proxy/index.js +1 -1
  280. package/dist/reputation/TestimonialSection.d.ts +1 -1
  281. package/dist/reputation/VisualReviewCard.d.ts +1 -1
  282. package/dist/reputation/api.d.ts +1 -1
  283. package/dist/reputation/index.d.ts +4 -4
  284. package/dist/reputation/server.d.ts +3 -3
  285. package/dist/resonance/ResonanceRuntime.d.ts +7 -0
  286. package/dist/resonance/bridge.d.ts +16 -0
  287. package/dist/resonance/consent-adapter.d.ts +26 -0
  288. package/dist/resonance/controller-registry.d.ts +14 -0
  289. package/dist/resonance/controller.d.ts +103 -0
  290. package/dist/resonance/form-context.d.ts +5 -0
  291. package/dist/resonance/index.d.ts +4 -0
  292. package/dist/resonance/index.js +9 -0
  293. package/dist/resonance/meta-pixel.d.ts +67 -0
  294. package/dist/resonance/providers.d.ts +32 -0
  295. package/dist/resonance/runtime-core.d.ts +5 -0
  296. package/dist/revalidate/index.d.ts +3 -3
  297. package/dist/revalidate/index.js +2 -2
  298. package/dist/robots/index.d.ts +3 -3
  299. package/dist/robots/indexnow.js +2 -2
  300. package/dist/runtime/index.d.ts +7 -7
  301. package/dist/runtime/index.js +4 -5
  302. package/dist/runtime-core-WT7KKLWQ.js +2213 -0
  303. package/dist/seo/ManagedFAQ.d.ts +1 -1
  304. package/dist/seo/ManagedInternalLinks.d.ts +1 -1
  305. package/dist/seo/ManagedSchema.d.ts +1 -1
  306. package/dist/seo/ManagedScripts.d.ts +1 -1
  307. package/dist/seo/client.d.ts +1 -1
  308. package/dist/seo/client.js +3 -5
  309. package/dist/seo/entry-indexnow.d.ts +1 -1
  310. package/dist/seo/entry-llms-client.d.ts +1 -1
  311. package/dist/seo/entry-llms-contract.d.ts +1 -1
  312. package/dist/seo/entry-llms.d.ts +1 -1
  313. package/dist/seo/entry-meta-contract.d.ts +1 -1
  314. package/dist/seo/entry-og-route.d.ts +1 -1
  315. package/dist/seo/entry-og.d.ts +1 -1
  316. package/dist/seo/entry-pages-contract.d.ts +1 -1
  317. package/dist/seo/entry-redirects.d.ts +1 -1
  318. package/dist/seo/entry-robots.d.ts +1 -1
  319. package/dist/seo/entry-sitemap.d.ts +1 -1
  320. package/dist/seo/getManagedMetadata.d.ts +1 -1
  321. package/dist/seo/index.d.ts +12 -12
  322. package/dist/seo/index.js +9 -11
  323. package/dist/seo/indexnow.d.ts +1 -1
  324. package/dist/seo/indexnow.js +2 -2
  325. package/dist/seo/llms/client.d.ts +1 -1
  326. package/dist/seo/llms/contract.d.ts +1 -1
  327. package/dist/seo/llms.d.ts +1 -1
  328. package/dist/seo/llms.js +5 -5
  329. package/dist/seo/meta/contract.d.ts +1 -1
  330. package/dist/seo/og.d.ts +1 -1
  331. package/dist/seo/pages/contract.d.ts +1 -1
  332. package/dist/seo/redirects.d.ts +1 -1
  333. package/dist/seo/register-sitemap-cli-impl.d.ts +1 -1
  334. package/dist/seo/register-sitemap-cli.js +1 -1
  335. package/dist/seo/robots.d.ts +1 -1
  336. package/dist/seo/routing.d.ts +1 -1
  337. package/dist/seo/server.d.ts +4 -4
  338. package/dist/seo/server.js +3 -3
  339. package/dist/seo/sitemap.d.ts +1 -1
  340. package/dist/seo/sitemap.js +3 -3
  341. package/dist/seo/types.d.ts +1 -1
  342. package/dist/seo-meta/contract.d.ts +1 -1
  343. package/dist/seo-pages/contract.d.ts +1 -1
  344. package/dist/server/index.d.ts +5 -5
  345. package/dist/server/index.js +3 -3
  346. package/dist/server/mint-site-token.d.ts +1 -1
  347. package/dist/server/server-fetch.d.ts +8 -0
  348. package/dist/{server-api-XIKDWSNO.js → server-api-A34TABT2.js} +2 -2
  349. package/dist/shared/build-entries.d.ts +3 -1
  350. package/dist/shared/color.d.ts +1 -1
  351. package/dist/shared/fetchWithRetry.d.ts +6 -0
  352. package/dist/shared/frame.d.ts +1 -1
  353. package/dist/shared/identity-storage.d.ts +6 -4
  354. package/dist/shared/identity.d.ts +1 -3
  355. package/dist/shared/index.d.ts +5 -5
  356. package/dist/shared/index.js +1 -1
  357. package/dist/shared/measurement-analytics.d.ts +1 -0
  358. package/dist/shared/measurement-policy.d.ts +6 -0
  359. package/dist/shared/measurement-proof.d.ts +5 -0
  360. package/dist/shared/measurement-store.d.ts +34 -0
  361. package/dist/shared/measurement-writer.d.ts +6 -0
  362. package/dist/shared/publishCredential.d.ts +1 -1
  363. package/dist/shared/reporting-gate.d.ts +3 -1
  364. package/dist/shared/site-token-claims.d.ts +18 -0
  365. package/dist/shared/site-token-configuration.d.ts +9 -0
  366. package/dist/shared/site-token-refresh.d.ts +7 -0
  367. package/dist/shared/site-token-state.d.ts +23 -0
  368. package/dist/shared/siteToken.d.ts +5 -39
  369. package/dist/shared/sonor-auth-state.d.ts +3 -0
  370. package/dist/shared/sonor-beacon.d.ts +13 -0
  371. package/dist/shared/sonor-fetch-runtime.d.ts +2 -0
  372. package/dist/shared/sonor-fetch.d.ts +7 -0
  373. package/dist/shared/sonorFetch.d.ts +4 -49
  374. package/dist/shared/version.d.ts +1 -1
  375. package/dist/signal/ReviewedSignalExperiment.d.ts +9 -0
  376. package/dist/signal/SignalBridge.d.ts +4 -4
  377. package/dist/signal/SignalCore.d.ts +2 -1
  378. package/dist/signal/SignalExperiment.d.ts +13 -5
  379. package/dist/signal/index.d.ts +3 -3
  380. package/dist/signal/index.js +4 -73
  381. package/dist/signal/store.d.ts +10 -7
  382. package/dist/signal/types.d.ts +4 -0
  383. package/dist/sitemap/index.d.ts +5 -5
  384. package/dist/sitemap/index.js +3 -3
  385. package/dist/sites/contract.d.ts +1 -1
  386. package/dist/sites/normalize.d.ts +1 -1
  387. package/dist/slots/ManagedLink.d.ts +2 -2
  388. package/dist/slots/ManagedList.d.ts +2 -2
  389. package/dist/slots/ManagedRichText.d.ts +1 -1
  390. package/dist/slots/ManagedSlot.d.ts +1 -1
  391. package/dist/slots/contract.d.ts +1 -1
  392. package/dist/slots/edit/locate.d.ts +1 -1
  393. package/dist/slots/index.d.ts +14 -14
  394. package/dist/slots/index.js +2 -2
  395. package/dist/slots/server-api.d.ts +1 -1
  396. package/dist/{chunk-FLOJUMFR.js → sonor-fetch-runtime-3PFGUXMF.js} +27 -36
  397. package/dist/sync/AddToCalendar.d.ts +1 -1
  398. package/dist/sync/BookingWidget.d.ts +1 -1
  399. package/dist/sync/MeetingFormatStep.d.ts +1 -1
  400. package/dist/sync/api.d.ts +2 -2
  401. package/dist/sync/booking-flow.d.ts +1 -1
  402. package/dist/sync/index.d.ts +3 -3
  403. package/dist/sync/index.js +6 -7
  404. package/dist/types.d.ts +6 -6
  405. package/dist/website/BlocksPopup.d.ts +1 -1
  406. package/dist/website/PopupBlocks.d.ts +1 -1
  407. package/dist/website/SiteDesignReporter.d.ts +2 -2
  408. package/dist/website/SitePopups.d.ts +1 -1
  409. package/dist/website/contract.d.ts +1 -1
  410. package/dist/website/cta-bar.d.ts +1 -1
  411. package/dist/website/cta-bar.js +4 -3
  412. package/dist/website/design.d.ts +2 -2
  413. package/dist/website/images/server.d.ts +1 -1
  414. package/dist/website/images-server.d.ts +1 -1
  415. package/dist/website/images.d.ts +1 -1
  416. package/dist/website/images.js +2 -4
  417. package/dist/website/index.d.ts +4 -4
  418. package/dist/website/index.js +5 -6
  419. package/dist/website/landing/server.d.ts +1 -1
  420. package/dist/website/landing/server.js +11 -6
  421. package/dist/website/landing-server.d.ts +1 -1
  422. package/dist/website/landing.d.ts +1 -1
  423. package/dist/website/landing.js +3 -2
  424. package/dist/website/popup-rules.d.ts +2 -2
  425. package/dist/website/popup-types.d.ts +1 -1
  426. package/dist/website/popups.d.ts +4 -4
  427. package/dist/website/popups.js +14 -8
  428. package/dist/website/slots/contract.d.ts +1 -1
  429. package/dist/website/slots-contract.d.ts +1 -1
  430. package/dist/website/slots.d.ts +2 -2
  431. package/dist/website/slots.js +2 -2
  432. package/dist/{writeLLMsTxt-4HHUAOA6.js → writeLLMsTxt-JUACXQKP.js} +2 -2
  433. package/docs.json +5 -0
  434. package/package.json +8 -2
  435. package/src/analytics/README.md +21 -0
  436. package/src/cta-bar/README.md +4 -0
  437. package/src/forms/README.md +29 -0
  438. package/src/landing/README.md +14 -0
  439. package/src/layout/README.md +3 -0
  440. package/src/resonance/README.md +273 -0
  441. package/src/runtime/README.md +6 -1
  442. package/src/signal/README.md +21 -0
  443. package/src/website/README.md +14 -2
  444. package/dist/AnalyticsProvider-7SBJ27SI.js +0 -13
  445. package/dist/ChatWidget-V46UBDOM.js +0 -20
  446. package/dist/ManagedForm-DDDVMKLJ.js +0 -19
  447. package/dist/SitePopups-VU2C3Z6B.js +0 -13
  448. package/dist/SitemapSync-C4H3HF3L.js +0 -9
  449. package/dist/chunk-5ROTTMBL.js +0 -19
  450. package/dist/chunk-5TM3WPCI.js +0 -7
  451. package/dist/chunk-7HW4TZB5.js +0 -148
  452. package/dist/chunk-IPQKQEWI.js +0 -52
  453. package/dist/chunk-LCDVPAMR.js +0 -24
  454. package/dist/chunk-LQJC5S2M.js +0 -236
  455. package/dist/chunk-SHAUX2MQ.js +0 -163
  456. /package/dist/{chunk-3MJNBOUO.js → chunk-2QPVU63T.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
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
+
3
21
  ## 8.8.1
4
22
 
5
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.
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.1",
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": [
@@ -13,21 +13,21 @@
13
13
  "NEXT_PUBLIC_SONOR_API_KEY",
14
14
  "SONOR_PROJECT_ID"
15
15
  ],
16
- "notes": "SONOR_API_KEY is the ONLY variable a site needs. SiteKitLayout reads it server-side and derives the project id + all client config from it. No NEXT_PUBLIC_ prefix (it must not reach the client bundle). Key format: sonor_{project-uuid-first8}_{secret}. Uptrade keys/vars are fully deprecated \u2014 never add them."
16
+ "notes": "SONOR_API_KEY is the ONLY variable a site needs. SiteKitLayout reads it server-side and derives the project id + all client config from it. No NEXT_PUBLIC_ prefix (it must not reach the client bundle). Key format: sonor_{project-uuid-first8}_{secret}. Uptrade keys/vars are fully deprecated — never add them."
17
17
  },
18
18
  "exitCodes": {
19
- "0": "OK \u2014 goal achieved; for verify, the integration is green",
20
- "1": "FAILED \u2014 ran fine but the result is red (checks failed, verify not green, codemod --check found pending work)",
21
- "2": "USAGE \u2014 bad invocation (unknown flag, wrong directory, not a Next.js project)",
22
- "3": "CONFIG \u2014 missing required input; non-interactive mode needed a prompt",
23
- "4": "NETWORK \u2014 Sonor API unreachable, timed out, or key rejected",
24
- "5": "INTERNAL \u2014 unexpected exception (a CLI bug)"
19
+ "0": "OK — goal achieved; for verify, the integration is green",
20
+ "1": "FAILED — ran fine but the result is red (checks failed, verify not green, codemod --check found pending work)",
21
+ "2": "USAGE — bad invocation (unknown flag, wrong directory, not a Next.js project)",
22
+ "3": "CONFIG — missing required input; non-interactive mode needed a prompt",
23
+ "4": "NETWORK — Sonor API unreachable, timed out, or key rejected",
24
+ "5": "INTERNAL — unexpected exception (a CLI bug)"
25
25
  },
26
26
  "canonicalSequence": [
27
27
  "npx sonor-setup manifest --json",
28
28
  "npx sonor-setup init --api-key $SONOR_API_KEY --yes --json",
29
29
  "npx sonor-setup scaffold --yes --json",
30
- "npx sonor-setup codemod --check --json # an existing 2.x\u20137.x site \u2192 migrate (--write) if exit 1",
30
+ "npx sonor-setup codemod --check --json # an existing 2.x–7.x site → migrate (--write) if exit 1",
31
31
  "next build",
32
32
  "npx sonor-setup verify --json # exit 0 === done"
33
33
  ],
@@ -42,7 +42,7 @@
42
42
  "name": "verify",
43
43
  "json": true,
44
44
  "interactive": false,
45
- "purpose": "The definition of done: static health + key validity + SSR render. Exit 0 \u21d4 green."
45
+ "purpose": "The definition of done: static health + key validity + SSR render. Exit 0 ⇔ green."
46
46
  },
47
47
  {
48
48
  "name": "doctor",
@@ -141,17 +141,24 @@
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",
147
154
  "side": "client",
148
- "purpose": "SignalBridge \u2014 real-time A/B experiments and behavior tracking (full_signal plan)."
155
+ "purpose": "SignalBridge — real-time A/B experiments and behavior tracking (full_signal plan)."
149
156
  },
150
157
  {
151
158
  "name": "forms",
152
159
  "import": "@sonordev/site-kit/forms",
153
160
  "side": "client",
154
- "purpose": "Managed forms; routes submissions by type (prospect\u2192CRM, support\u2192ticket, newsletter\u2192subscriber)."
161
+ "purpose": "Managed forms; routes submissions by type (prospect→CRM, support→ticket, newsletter→subscriber)."
155
162
  },
156
163
  {
157
164
  "name": "forms/contract",
@@ -201,7 +208,7 @@
201
208
  "name": "sitemap",
202
209
  "import": "@sonordev/site-kit/sitemap",
203
210
  "side": "server",
204
- "purpose": "createSitemap \u2014 discovers pages and syncs seo_pages. Pair with the sonor-register-sitemap postbuild step.",
211
+ "purpose": "createSitemap — discovers pages and syncs seo_pages. Pair with the sonor-register-sitemap postbuild step.",
205
212
  "stability": "deprecated",
206
213
  "movedTo": [
207
214
  "@sonordev/site-kit/seo/sitemap"
@@ -221,7 +228,7 @@
221
228
  "name": "images",
222
229
  "import": "@sonordev/site-kit/images",
223
230
  "side": "server",
224
- "purpose": "ManagedImage \u2014 Sonor-managed image slots.",
231
+ "purpose": "ManagedImage — Sonor-managed image slots.",
225
232
  "stability": "deprecated",
226
233
  "movedTo": [
227
234
  "@sonordev/site-kit/website/images"
@@ -270,7 +277,7 @@
270
277
  "name": "llms/contract",
271
278
  "import": "@sonordev/site-kit/llms/contract",
272
279
  "side": "server",
273
- "purpose": "Pure LLM/GEO sanitizers + contract version \u2014 imported by the Nest APIs.",
280
+ "purpose": "Pure LLM/GEO sanitizers + contract version — imported by the Nest APIs.",
274
281
  "stability": "deprecated",
275
282
  "movedTo": [
276
283
  "@sonordev/site-kit/seo/llms/contract"
@@ -304,13 +311,13 @@
304
311
  "name": "admin-auth",
305
312
  "import": "@sonordev/site-kit/admin-auth",
306
313
  "side": "server",
307
- "purpose": "Sign in with Sonor \u2014 SSO gate, callback/logout handlers and getSession() for a site's own admin area."
314
+ "purpose": "Sign in with Sonor — SSO gate, callback/logout handlers and getSession() for a site's own admin area."
308
315
  },
309
316
  {
310
317
  "name": "slots",
311
318
  "import": "@sonordev/site-kit/slots",
312
319
  "side": "server",
313
- "purpose": "Managed copy \u2014 named, Sonor-editable text, rich text, links and lists inside elements you own.",
320
+ "purpose": "Managed copy — named, Sonor-editable text, rich text, links and lists inside elements you own.",
314
321
  "stability": "deprecated",
315
322
  "movedTo": [
316
323
  "@sonordev/site-kit/website/slots"
@@ -329,7 +336,7 @@
329
336
  "name": "revalidate",
330
337
  "import": "@sonordev/site-kit/revalidate",
331
338
  "side": "server",
332
- "purpose": "Live updates \u2014 the one-line /api/seo-revalidate route Sonor calls when content changes, so cached pages refresh in seconds."
339
+ "purpose": "Live updates — the one-line /api/seo-revalidate route Sonor calls when content changes, so cached pages refresh in seconds."
333
340
  },
334
341
  {
335
342
  "name": "sites/contract",
@@ -363,7 +370,7 @@
363
370
  "name": "website",
364
371
  "import": "@sonordev/site-kit/website",
365
372
  "side": "client",
366
- "purpose": "Website module (mirrors Sonor \u2192 Website): PopupBlocks draws a popup from blocks in the site\u2019s own design; SiteDesignReporter (mounted by SiteKitLayout; design={false} turns it off) tells Sonor what the site looks like so the popup builder previews in it."
373
+ "purpose": "Website module (mirrors Sonor → Website): PopupBlocks draws a popup from blocks in the site’s own design; SiteDesignReporter (mounted by SiteKitLayout; design={false} turns it off) tells Sonor what the site looks like so the popup builder previews in it."
367
374
  },
368
375
  {
369
376
  "name": "website/contract",
@@ -375,19 +382,19 @@
375
382
  "name": "chat",
376
383
  "import": "@sonordev/site-kit/chat",
377
384
  "side": "client",
378
- "purpose": "Website chat (Sonor \u2192 Messages): SiteChat (idle-deferred launcher, gated like analytics), ChatWidget and Echo. SiteKitLayout mounts it (its `chat` prop); import it to place it yourself."
385
+ "purpose": "Website chat (Sonor → Messages): SiteChat (idle-deferred launcher, gated like analytics), ChatWidget and Echo. SiteKitLayout mounts it (its `chat` prop); import it to place it yourself."
379
386
  },
380
387
  {
381
388
  "name": "website/popups",
382
389
  "import": "@sonordev/site-kit/website/popups",
383
390
  "side": "client",
384
- "purpose": "Website \u2192 Popups & Banners: SitePopups shows the popups, banners and toasts published for the site (only those with blocks), waiting while a visitor is mid-form; PopupBlocks draws one. SiteKitLayout mounts it (its `popups` prop)."
391
+ "purpose": "Website → Popups & Banners: SitePopups shows the popups, banners and toasts published for the site (only those with blocks), waiting while a visitor is mid-form; PopupBlocks draws one. SiteKitLayout mounts it (its `popups` prop)."
385
392
  },
386
393
  {
387
394
  "name": "website/images",
388
395
  "import": "@sonordev/site-kit/website/images",
389
396
  "side": "server",
390
- "purpose": "ManagedImage \u2014 Sonor-managed image slots."
397
+ "purpose": "ManagedImage — Sonor-managed image slots."
391
398
  },
392
399
  {
393
400
  "name": "website/images/server",
@@ -398,7 +405,7 @@
398
405
  "name": "website/slots",
399
406
  "import": "@sonordev/site-kit/website/slots",
400
407
  "side": "server",
401
- "purpose": "Managed copy \u2014 named, Sonor-editable text, rich text, links and lists inside elements you own."
408
+ "purpose": "Managed copy — named, Sonor-editable text, rich text, links and lists inside elements you own."
402
409
  },
403
410
  {
404
411
  "name": "website/slots/contract",
@@ -409,7 +416,7 @@
409
416
  "name": "website/landing",
410
417
  "import": "@sonordev/site-kit/website/landing",
411
418
  "side": "mixed",
412
- "purpose": "Paid-ad landing pages: wrap the route in <LandingPage campaign=\"...\"> and export landingPageMetadata() \u2014 noindex by default, excluded from SEO/sitemap, campaign-stamped analytics reporting under Analytics > Landing Pages.",
419
+ "purpose": "Paid-ad landing pages: wrap the route in <LandingPage campaign=\"...\"> and export landingPageMetadata() — noindex by default, excluded from SEO/sitemap, campaign-stamped analytics reporting under Analytics > Landing Pages.",
413
420
  "caution": "Also exclude the route from sitemap.xml/app sitemap. landingPageMetadata() is the reliable noindex; the component's hoisted meta is belt-and-braces only."
414
421
  },
415
422
  {
@@ -428,7 +435,7 @@
428
435
  "name": "seo/sitemap",
429
436
  "import": "@sonordev/site-kit/seo/sitemap",
430
437
  "side": "server",
431
- "purpose": "createSitemap \u2014 discovers pages and syncs seo_pages. Pair with the sonor-register-sitemap postbuild step."
438
+ "purpose": "createSitemap — discovers pages and syncs seo_pages. Pair with the sonor-register-sitemap postbuild step."
432
439
  },
433
440
  {
434
441
  "name": "seo/robots",
@@ -473,7 +480,7 @@
473
480
  "name": "seo/llms/contract",
474
481
  "import": "@sonordev/site-kit/seo/llms/contract",
475
482
  "side": "server",
476
- "purpose": "Pure LLM/GEO sanitizers + contract version \u2014 imported by the Nest APIs."
483
+ "purpose": "Pure LLM/GEO sanitizers + contract version — imported by the Nest APIs."
477
484
  },
478
485
  {
479
486
  "name": "seo/meta/contract",
@@ -525,7 +532,7 @@
525
532
  "name": "landing",
526
533
  "import": "@sonordev/site-kit/landing",
527
534
  "side": "mixed",
528
- "purpose": "Paid-ad landing pages: wrap the route in <LandingPage campaign=\"...\"> and export landingPageMetadata() \u2014 noindex by default, excluded from SEO/sitemap, campaign-stamped analytics reporting under Analytics > Landing Pages.",
535
+ "purpose": "Paid-ad landing pages: wrap the route in <LandingPage campaign=\"...\"> and export landingPageMetadata() — noindex by default, excluded from SEO/sitemap, campaign-stamped analytics reporting under Analytics > Landing Pages.",
529
536
  "caution": "Also exclude the route from sitemap.xml/app sitemap. landingPageMetadata() is the reliable noindex; the component's hoisted meta is belt-and-braces only.",
530
537
  "stability": "deprecated",
531
538
  "movedTo": [
@@ -537,20 +544,20 @@
537
544
  "import": "@sonordev/site-kit/layout",
538
545
  "side": "server",
539
546
  "primary": true,
540
- "purpose": "SiteKitLayout \u2014 the root integration point. Wrap {children}. Reads SONOR_API_KEY server-side."
547
+ "purpose": "SiteKitLayout — the root integration point. Wrap {children}. Reads SONOR_API_KEY server-side."
541
548
  },
542
549
  {
543
550
  "name": "proxy",
544
551
  "import": "@sonordev/site-kit/proxy",
545
552
  "side": "server",
546
553
  "purpose": "createProxy + security headers, exported from proxy.ts. Next 16 renamed the middleware file convention to proxy.",
547
- "caution": "`export const config = siteKitMatcher` is a BUILD ERROR \u2014 Next statically parses config.matcher and rejects imported values, so inline the array. Do not add a `runtime` export: Proxy defaults to Node and the option throws in proxy files."
554
+ "caution": "`export const config = siteKitMatcher` is a BUILD ERROR — Next statically parses config.matcher and rejects imported values, so inline the array. Do not add a `runtime` export: Proxy defaults to Node and the option throws in proxy files."
548
555
  },
549
556
  {
550
557
  "name": "middleware",
551
558
  "import": "@sonordev/site-kit/middleware",
552
559
  "side": "server",
553
- "purpose": "DEPRECATED alias of the proxy module \u2014 identical exports, same built file. Use @sonordev/site-kit/proxy.",
560
+ "purpose": "DEPRECATED alias of the proxy module — identical exports, same built file. Use @sonordev/site-kit/proxy.",
554
561
  "caution": "Kept so the 100+ sites already importing it keep building. New code should import @sonordev/site-kit/proxy and call createProxy.",
555
562
  "stability": "deprecated",
556
563
  "movedTo": [
@@ -604,14 +611,14 @@
604
611
  "name": "motion/gsap",
605
612
  "import": "@sonordev/site-kit/motion/gsap",
606
613
  "side": "client",
607
- "purpose": "Tier 1: lazy-loaded GSAP (useGsap, loadGsap, useExpandCollapse). Optional peer `gsap` \u2014 a site must `npm i gsap` before importing this subpath.",
614
+ "purpose": "Tier 1: lazy-loaded GSAP (useGsap, loadGsap, useExpandCollapse). Optional peer `gsap` — a site must `npm i gsap` before importing this subpath.",
608
615
  "caution": "Below the fold only; gsap loads when the element nears the viewport, never on the LCP path. ScrollSmoother is deliberately excluded (native scroll only)."
609
616
  },
610
617
  {
611
618
  "name": "motion/three",
612
619
  "import": "@sonordev/site-kit/motion/three",
613
620
  "side": "client",
614
- "purpose": "Tier 2: three.js stages on the scroll engine (useThreeStage, canRunWebGL, loadTexture). Optional peer `three` \u2014 flagship builds only (~180KB gz).",
621
+ "purpose": "Tier 2: three.js stages on the scroll engine (useThreeStage, canRunWebGL, loadTexture). Optional peer `three` — flagship builds only (~180KB gz).",
615
622
  "caution": "Mount the scene as a dynamic(ssr:false) CHILDLESS sibling of the server-rendered stage, never wrapping it. Copy lives in the DOM, never in the canvas. canRunWebGL() false = keep the server-rendered still."
616
623
  },
617
624
  {
@@ -748,22 +755,22 @@
748
755
  {
749
756
  "import": "@sonordev/site-kit/cms",
750
757
  "since": "8.0.0",
751
- "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website \u2192 Content."
758
+ "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website → Content."
752
759
  },
753
760
  {
754
761
  "import": "@sonordev/site-kit/cms/server",
755
762
  "since": "8.0.0",
756
- "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website \u2192 Content."
763
+ "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website → Content."
757
764
  },
758
765
  {
759
766
  "import": "@sonordev/site-kit/website/cms",
760
767
  "since": "8.0.0",
761
- "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website \u2192 Content."
768
+ "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website → Content."
762
769
  },
763
770
  {
764
771
  "import": "@sonordev/site-kit/website/cms/server",
765
772
  "since": "8.0.0",
766
- "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website \u2192 Content."
773
+ "why": "The Sanity CMS is retired in Sonor and no longer serves pages. Site copy is managed copy: ManagedSlot, ManagedRichText, ManagedLink and ManagedList from @sonordev/site-kit/website/slots, edited in Sonor under Website → Content."
767
774
  },
768
775
  {
769
776
  "import": "@sonordev/site-kit/seo",
@@ -787,7 +794,7 @@
787
794
  "blessedPatterns": [
788
795
  {
789
796
  "id": "layout.sitekit",
790
- "title": "Root layout \u2014 SiteKitLayout (server component)",
797
+ "title": "Root layout — SiteKitLayout (server component)",
791
798
  "code": "import { SiteKitLayout } from '@sonordev/site-kit/layout'\n\nexport default function RootLayout({ children }) {\n return (\n <html lang=\"en\">\n <body>\n <SiteKitLayout>{children}</SiteKitLayout>\n </body>\n </html>\n )\n}"
792
799
  },
793
800
  {
@@ -798,12 +805,12 @@
798
805
  {
799
806
  "id": "env.single-var",
800
807
  "title": "The one env var",
801
- "code": "# .env.local \u2014 the only variable a site needs\nSONOR_API_KEY=sonor_1a2b3c4d_... # server-side only, no NEXT_PUBLIC_ prefix"
808
+ "code": "# .env.local — the only variable a site needs\nSONOR_API_KEY=sonor_1a2b3c4d_... # server-side only, no NEXT_PUBLIC_ prefix"
802
809
  },
803
810
  {
804
811
  "id": "landing.campaign-page",
805
- "title": "Paid-ad landing page \u2014 noindex, campaign-stamped, SEO-excluded",
806
- "code": "import { LandingPage, landingPageMetadata } from '@sonordev/site-kit/website/landing'\n\nexport const metadata = landingPageMetadata({\n title: 'Spring HVAC Tune-Up | Acme Heating',\n description: 'Book your $99 spring tune-up.',\n})\n\nexport default function SpringHvacLandingPage() {\n return (\n <LandingPage campaign=\"spring-hvac-2026\">\n {/* page content: hero, offer, ManagedForm, tel: CTA */}\n </LandingPage>\n )\n}\n\n// Also: keep this route OUT of sitemap.xml (app/sitemap.ts) \u2014 landing pages\n// are campaign surfaces, not SEO pages."
812
+ "title": "Paid-ad landing page — noindex, campaign-stamped, SEO-excluded",
813
+ "code": "import { LandingPage, landingPageMetadata } from '@sonordev/site-kit/website/landing'\n\nexport const metadata = landingPageMetadata({\n title: 'Spring HVAC Tune-Up | Acme Heating',\n description: 'Book your $99 spring tune-up.',\n})\n\nexport default function SpringHvacLandingPage() {\n return (\n <LandingPage campaign=\"spring-hvac-2026\">\n {/* page content: hero, offer, ManagedForm, tel: CTA */}\n </LandingPage>\n )\n}\n\n// Also: keep this route OUT of sitemap.xml (app/sitemap.ts) — landing pages\n// are campaign surfaces, not SEO pages."
807
814
  }
808
815
  ],
809
816
  "failureModes": [
@@ -816,9 +823,9 @@
816
823
  },
817
824
  {
818
825
  "id": "static.dynamic-not-found",
819
- "symptom": "`next build` lists nearly every route as \u0192 (dynamic) instead of \u25cb/\u25cf (static); TTFB rises on every page.",
826
+ "symptom": "`next build` lists nearly every route as ƒ (dynamic) instead of ○/● (static); TTFB rises on every page.",
820
827
  "cause": "The root app/not-found.tsx reads a request API: headers() or cookies() (or, before 7.0, resolveManagedRedirect()). Next renders the root not-found boundary inside every page, so that one call opts every route into dynamic rendering.",
821
- "fix": "Keep app/not-found.tsx free of request APIs. Set createProxy({ redirects: true }) in proxy.ts (the default), which applies Sonor-managed redirects with a five-minute in-memory rule cache. Rebuild and confirm the route table shows \u25cb/\u25cf again.",
828
+ "fix": "Keep app/not-found.tsx free of request APIs. Set createProxy({ redirects: true }) in proxy.ts (the default), which applies Sonor-managed redirects with a five-minute in-memory rule cache. Rebuild and confirm the route table shows ○/● again.",
822
829
  "check": null
823
830
  },
824
831
  {
@@ -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