@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
@@ -0,0 +1,9 @@
1
+ // src/shared/sonor-fetch.ts
2
+ async function sonorFetch(url, init = {}, options = {}) {
3
+ if (options.shouldSend && !options.shouldSend()) throw new Error("sonor-dispatch-withdrawn");
4
+ const { executeSonorFetch } = await import('./sonor-fetch-runtime-3PFGUXMF.js');
5
+ if (options.shouldSend && !options.shouldSend()) throw new Error("sonor-dispatch-withdrawn");
6
+ return executeSonorFetch(url, init, options);
7
+ }
8
+
9
+ export { sonorFetch };
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
  import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
3
- import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
3
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
4
4
  import { useState, useEffect } from 'react';
5
5
  import ReactDOM from 'react-dom';
6
6
  import dynamic from 'next/dynamic';
7
7
  import { jsx } from 'react/jsx-runtime';
8
8
 
9
9
  var LazyChatWidget = dynamic(
10
- () => import('./ChatWidget-V46UBDOM.js').then((m) => ({ default: m.ChatWidget })),
10
+ () => import('./ChatWidget-EAATOFCT.js').then((m) => ({ default: m.ChatWidget })),
11
11
  { ssr: false }
12
12
  );
13
13
  function SiteChat(props) {
@@ -0,0 +1,66 @@
1
+ import { advertisingPurposesPermitted } from './chunk-KMNHNCVG.js';
2
+ import { resonanceControllerState } from './chunk-MOACHHOJ.js';
3
+ import { analyticsPurposePermitted, measurementPolicySnapshot } from './chunk-FRY6PBT6.js';
4
+
5
+ // src/resonance/consent-adapter.ts
6
+ var makeStore = () => ({ adapter: null, listeners: /* @__PURE__ */ new Set(), registrations: 0 });
7
+ var store = typeof window === "undefined" ? makeStore() : window.__SONOR_RESONANCE_CMP_V1__ ?? (window.__SONOR_RESONANCE_CMP_V1__ = makeStore());
8
+ var listeners = store.listeners;
9
+ var getConsentAdapter = () => store.adapter;
10
+ var subscribeConsentAdapter = (listener) => {
11
+ listeners.add(listener);
12
+ return () => {
13
+ listeners.delete(listener);
14
+ };
15
+ };
16
+ function registerResonanceConsentAdapter(next) {
17
+ if (store.adapter && store.adapter !== next) throw new Error("A maintained consent adapter is already registered");
18
+ const changed = store.adapter !== next;
19
+ store.adapter = next;
20
+ store.registrations++;
21
+ if (changed) for (const listener of listeners) listener();
22
+ let active = true;
23
+ return () => {
24
+ if (!active || store.adapter !== next) return;
25
+ active = false;
26
+ if (--store.registrations > 0) return;
27
+ store.adapter = null;
28
+ for (const listener of listeners) listener();
29
+ };
30
+ }
31
+
32
+ // src/resonance/bridge.ts
33
+ function getResonanceMeasurementStatus() {
34
+ return {
35
+ state: resonanceControllerState.controller?.status.state ?? "unknown",
36
+ reason: resonanceControllerState.controller?.status.reason ?? null,
37
+ policy: measurementPolicySnapshot().policy,
38
+ analyticsPermitted: analyticsPurposePermitted(),
39
+ advertisingPermitted: advertisingPurposesPermitted(),
40
+ providerBlockers: [...resonanceControllerState.blockers, ...resonanceControllerState.registrationConflict ? ["duplicate_runtime_installation"] : []]
41
+ };
42
+ }
43
+ function setProviderBlockers(next) {
44
+ resonanceControllerState.blockers = [...next];
45
+ }
46
+ function registerResonanceController(next) {
47
+ if (resonanceControllerState.controller && resonanceControllerState.controller !== next) {
48
+ resonanceControllerState.registrationConflict = true;
49
+ return null;
50
+ }
51
+ resonanceControllerState.controller = next;
52
+ return () => {
53
+ if (resonanceControllerState.controller === next) {
54
+ resonanceControllerState.controller = null;
55
+ resonanceControllerState.blockers = [];
56
+ resonanceControllerState.registrationConflict = false;
57
+ }
58
+ };
59
+ }
60
+ function recordResonanceExposure(exposure) {
61
+ const active = resonanceControllerState.controller;
62
+ if (active) void active.exposure(exposure).catch(() => {
63
+ });
64
+ }
65
+
66
+ export { getConsentAdapter, getResonanceMeasurementStatus, recordResonanceExposure, registerResonanceConsentAdapter, registerResonanceController, setProviderBlockers, subscribeConsentAdapter };
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { sanitizeFleetVersion, buildFleetHeartbeatPayload } from './chunk-ZTZQPYP6.js';
3
3
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
4
- import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
5
- import { sonorFetch } from './chunk-FLOJUMFR.js';
6
- import { SITE_KIT_VERSION } from './chunk-F6WLHVMQ.js';
4
+ import { SITE_KIT_VERSION } from './chunk-DXE6SXWW.js';
5
+ import { resolveAnalyticsTarget } from './chunk-7643MCD2.js';
6
+ import { sonorFetch } from './chunk-VXCUXHZO.js';
7
7
  import { useRef, useEffect } from 'react';
8
8
 
9
9
  // src/fleet/heartbeat.ts
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { normalizeCampaignSlug } from './chunk-3MJNBOUO.js';
2
+ import { normalizeCampaignSlug } from './chunk-2QPVU63T.js';
3
3
  import { useEffect } from 'react';
4
4
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,4 +1,4 @@
1
- import { writeLLMsTxtToPublic } from './chunk-KG5IEV7I.js';
1
+ import { writeLLMsTxtToPublic } from './chunk-QLJ2SC3T.js';
2
2
  import { getSiteConfig } from './chunk-Z22QVHT4.js';
3
3
  import { buildFetch } from './chunk-UAYAJPEP.js';
4
4
  import { findAppDirForDiscovery } from './chunk-ZEGVKVD5.js';
@@ -1,5 +1,5 @@
1
- import { readAnalyticsIdentity } from './chunk-5ROTTMBL.js';
2
- import { sonorFetch } from './chunk-FLOJUMFR.js';
1
+ import { readAnalyticsIdentity } from './chunk-PVY7X5UR.js';
2
+ import { sonorFetch } from './chunk-VXCUXHZO.js';
3
3
  import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
4
4
 
5
5
  // src/sync/api.ts
@@ -5,11 +5,11 @@
5
5
  * own tiny subpath so importing a utility never drags a feature module into
6
6
  * the bundle.
7
7
  */
8
- export { useDeferredActivation } from '../shared/defer';
9
- export { VisualViewportGap, useVisualViewportGap, VISUAL_VIEWPORT_GAP_PROPERTY, } from '../shared/visual-viewport-gap';
10
- export { SiteKitCredential } from './SiteKitCredential';
11
- export type { SiteKitCredentialProps } from './SiteKitCredential';
12
- export { useSiteKitIdentity, getOrCreateVisitorId, getOrCreateSessionId, } from '../shared/identity';
13
- export type { SiteKitIdentity } from '../shared/identity';
14
- export { trackEvent, trackConversion } from '../analytics/dispatch';
15
- export type { TrackEventOptions, TrackConversionOptions } from '../analytics/types';
8
+ export { useDeferredActivation } from "../shared/defer.js";
9
+ export { VisualViewportGap, useVisualViewportGap, VISUAL_VIEWPORT_GAP_PROPERTY, } from "../shared/visual-viewport-gap.js";
10
+ export { SiteKitCredential } from "./SiteKitCredential.js";
11
+ export type { SiteKitCredentialProps } from "./SiteKitCredential.js";
12
+ export { useSiteKitIdentity, getOrCreateVisitorId, getOrCreateSessionId, } from "../shared/identity.js";
13
+ export type { SiteKitIdentity } from "../shared/identity.js";
14
+ export { trackEvent, trackConversion } from "../analytics/dispatch.js";
15
+ export type { TrackEventOptions, TrackConversionOptions } from "../analytics/types.js";
@@ -1,14 +1,15 @@
1
1
  'use client';
2
- export { SiteKitCredential } from '../chunk-Y6SHFILE.js';
3
- import '../chunk-OPUY4RS6.js';
2
+ export { SiteKitCredential } from '../chunk-OEOSR5EG.js';
3
+ import '../chunk-2LBKIE2K.js';
4
+ import '../chunk-TPHOIE4I.js';
4
5
  export { VISUAL_VIEWPORT_GAP_PROPERTY, VisualViewportGap, useVisualViewportGap } from '../chunk-6T6CQVNL.js';
5
6
  export { useDeferredActivation } from '../chunk-YC7ELZS3.js';
6
7
  import '../chunk-FESKKJAS.js';
7
- import '../chunk-A4CC4ZG3.js';
8
- export { trackConversion, trackEvent } from '../chunk-LCDVPAMR.js';
9
- export { getOrCreateSessionId, getOrCreateVisitorId, useSiteKitIdentity } from '../chunk-IPQKQEWI.js';
8
+ export { trackConversion, trackEvent } from '../chunk-AG2RDHYZ.js';
9
+ export { getOrCreateSessionId, getOrCreateVisitorId, useSiteKitIdentity } from '../chunk-JT7GHHMV.js';
10
+ import '../chunk-D4M5K6JN.js';
10
11
  import '../chunk-GJWI74ZZ.js';
11
- import '../chunk-5TM3WPCI.js';
12
- import '../chunk-7HW4TZB5.js';
13
- import '../chunk-F6WLHVMQ.js';
12
+ import '../chunk-5IVD6G77.js';
13
+ import '../chunk-A4CC4ZG3.js';
14
+ import '../chunk-FRY6PBT6.js';
14
15
  import '../chunk-PKBMQBKP.js';
@@ -27,7 +27,7 @@
27
27
  * })
28
28
  * ```
29
29
  */
30
- import type { SecurityHeadersConfig } from '../proxy/securityHeaders';
30
+ import type { SecurityHeadersConfig } from "../proxy/securityHeaders.js";
31
31
  type NextConfig = Record<string, unknown>;
32
32
  export interface SiteKitNextConfig {
33
33
  /** Additional image domains for next/image optimization */
@@ -85,6 +85,14 @@ export declare const BROADCAST_STYLES: readonly ['glass', 'editorial', 'poster',
85
85
  export type BroadcastStyleId = (typeof BROADCAST_STYLES)[number];
86
86
  export declare const DEFAULT_BROADCAST_STYLE: BroadcastStyleId;
87
87
  export declare const isBroadcastStyleId: (value: unknown) => value is BroadcastStyleId;
88
+ /** Explicit per-review photo presentation; absence keeps the existing automatic layout. */
89
+ export declare const REVIEW_PHOTO_PRESENTATIONS: readonly ['background'];
90
+ export type ReviewPhotoPresentation = (typeof REVIEW_PHOTO_PRESENTATIONS)[number];
91
+ /**
92
+ * A supported explicit photo presentation. Optional input boundaries handle
93
+ * omission (preserve) and null (clear) separately; neither is an explicit value.
94
+ */
95
+ export declare const isReviewPhotoPresentation: (value: unknown) => value is ReviewPhotoPresentation;
88
96
  /**
89
97
  * The review compositions Broadcast draws: `signature` (photo up top, the
90
98
  * quote low) and `frame` (centered). Order matters: a review whose v1 draw
@@ -0,0 +1,87 @@
1
+ /**
2
+ * What a rep's three call outcomes do to a prospect. Single source of truth for
3
+ * the Sales Mode disposition: the Sonor API applies it when a rep taps an
4
+ * outcome, the dashboard shows the same three buttons and reasons, and the
5
+ * sales extension stops guessing at 'contacted' when a number is dialed. One
6
+ * map, so the three can't disagree about what "negative" moves.
7
+ *
8
+ * positive a connected call that went well. The contact is `contacted`,
9
+ * the company is `contacted`, today's reminder is done and the
10
+ * prospect's drip stops, since they're now in a conversation.
11
+ * negative a connected call that ended the lead. The contact is `lost`
12
+ * (a reason is required), the company is `not_a_fit`, today's
13
+ * reminder is done. Only "asked not to call" suppresses outreach.
14
+ * voicemail nobody picked up. Nothing about the contact or company changes,
15
+ * because a voicemail isn't a conversation, and today's reminder
16
+ * moves to the next business day.
17
+ *
18
+ * The contract names the moves; the caller makes them. Which stage key
19
+ * `contacted` or `lost` is on a given project, which instant "the next business
20
+ * day" is in the project's time zone, and how a suppression row is written all
21
+ * stay with the Sonor API. A stage the rep picks by hand afterwards (qualified,
22
+ * say) is a separate move that no disposition makes.
23
+ *
24
+ * Pure data and a few small functions, no dependencies. The wire values (the
25
+ * three dispositions, the five reasons) are stored and sent, so they never
26
+ * change; a different map is a new CRM_DISPOSITION_CONTRACT_VERSION.
27
+ */
28
+ /** Bumped when a disposition's transitions change incompatibly. */
29
+ export declare const CRM_DISPOSITION_CONTRACT_VERSION = 1;
30
+ /** The three words a rep taps after a call, in button order. */
31
+ export declare const SALES_DISPOSITIONS: readonly ['positive', 'negative', 'voicemail'];
32
+ export type SalesDisposition = (typeof SALES_DISPOSITIONS)[number];
33
+ /** What each button says. */
34
+ export declare const SALES_DISPOSITION_LABELS: Record<SalesDisposition, string>;
35
+ /** The one-tap reasons a negative outcome must carry, in the order they're offered. */
36
+ export declare const NEGATIVE_REASONS: readonly ['not_a_fit', 'no_budget', 'has_agency', 'wrong_number', 'do_not_call'];
37
+ export type NegativeReason = (typeof NEGATIVE_REASONS)[number];
38
+ /** What each reason says on its button. `do_not_call` is the one that suppresses outreach. */
39
+ export declare const NEGATIVE_REASON_LABELS: Record<NegativeReason, string>;
40
+ /** Whether a value is one of the three dispositions, spelled exactly. */
41
+ export declare function isSalesDisposition(value: unknown): value is SalesDisposition;
42
+ /** Whether a value is one of the five negative reasons, spelled exactly. */
43
+ export declare function isNegativeReason(value: unknown): value is NegativeReason;
44
+ /** What a disposition changes. A null leaves that thing as it is. */
45
+ export interface DispositionTransitions {
46
+ /** The call row's `outcome_type`. */
47
+ outcomeType: 'connected' | 'left_voicemail';
48
+ /** The call row's `sentiment`. */
49
+ sentiment: 'positive' | 'negative' | null;
50
+ /** The contact's stage, by meaning rather than by a project's stage key. */
51
+ contactStage: 'contacted' | 'lost' | null;
52
+ /** The target company's `status`. */
53
+ companyStatus: 'contacted' | 'not_a_fit' | null;
54
+ /**
55
+ * What happens to the prospect's reminder due today: finish it, or push it to
56
+ * 09:00 on the project's next business day. No disposition leaves it alone
57
+ * today; a caller still handles null so that never has to be a breaking change.
58
+ */
59
+ reminder: 'complete' | 'snooze_next_business_day' | null;
60
+ /** Stop the prospect's enrolled drip or sequence. */
61
+ stopsOutreach: boolean;
62
+ /**
63
+ * Write an outreach suppression for the prospect. That blocks every send on
64
+ * its own, so it isn't also a `stopsOutreach`. Only a negative outcome whose
65
+ * reason is `do_not_call` suppresses.
66
+ */
67
+ suppresses: boolean;
68
+ }
69
+ export interface DispositionOptions {
70
+ /** The negative outcome's reason. Read for a negative outcome only. */
71
+ reason?: NegativeReason | null;
72
+ }
73
+ /**
74
+ * What a disposition changes. Returns a fresh object each call, so a caller can
75
+ * adjust its copy without touching the next caller's. Throws a RangeError for a
76
+ * value that isn't a disposition: check an untrusted one with
77
+ * `dispositionProblem` first.
78
+ */
79
+ export declare function dispositionTransitions(disposition: SalesDisposition, opts?: DispositionOptions): DispositionTransitions;
80
+ /**
81
+ * Why a disposition and its reason can't be applied, in one sentence, or null
82
+ * when they can. A negative outcome needs a reason and no other outcome takes
83
+ * one. A null or undefined reason means none was given.
84
+ */
85
+ export declare function dispositionProblem(disposition: unknown, opts?: {
86
+ reason?: unknown;
87
+ }): string | null;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * What a job title says about a person's part in a buying decision. Single
3
+ * source of truth for the site-people scan: the Sonor API's deterministic scan
4
+ * (JSON-LD persons) and Signal's site-people scout both read this map, so the
5
+ * same person can't be an influencer on one side and an owner on the other.
6
+ *
7
+ * The role is never a model's opinion. A model finds the people; the title the
8
+ * page gives them decides the role, by the rules below, in this order (first
9
+ * match wins):
10
+ *
11
+ * gatekeeper someone who works for a person, whatever that person's
12
+ * title is: "Executive Assistant to the President",
13
+ * "Receptionist"
14
+ * decision_maker a vice president, matched before the president rule can
15
+ * claim the word
16
+ * owner owner, founder, president, CEO, a managing, senior, name
17
+ * or equity partner, a lone "Partner", and "Principal"
18
+ * unless it names a job ("Principal Engineer")
19
+ * decision_maker a chief of something that isn't the CEO, a general
20
+ * manager (or GM), a director, an operations or project
21
+ * manager, an estimator, a superintendent
22
+ * gatekeeper an office manager, an administrator
23
+ * influencer marketing, HR, recruiting, sales, business development
24
+ * gatekeeper a coordinator, last of all
25
+ *
26
+ * So "Vice President of Sales" is a decision maker (not an owner because it
27
+ * says president, not an influencer because it says sales), "Marketing
28
+ * Director" is a decision maker (director beats marketing) and "Marketing
29
+ * Coordinator" is an influencer. A title that names none of these
30
+ * ("Technician", a bare "Manager") has no role: no guess.
31
+ *
32
+ * Pure data and one small function, no dependencies. The four role values are
33
+ * stored and sent, so they never change.
34
+ */
35
+ /** The four parts a person can play in a buying decision, strongest first. */
36
+ export declare const DECISION_ROLES: readonly ['owner', 'decision_maker', 'influencer', 'gatekeeper'];
37
+ export type DecisionRole = (typeof DECISION_ROLES)[number];
38
+ /** The buying role a job title says, or null when it says none ("Technician", "Manager", no title). */
39
+ export declare function decisionRoleForTitle(title: string | null | undefined): DecisionRole | null;
@@ -4,5 +4,5 @@
4
4
  * tsup config, its package.json check and the boundary test, so a new
5
5
  * contract is added in one place.
6
6
  */
7
- export declare const CONTRACT_ENTRIES: readonly ['forms', 'llms', 'slots', 'slot-content', 'site-cache', 'site-edit', 'website', 'color', 'fleet', 'sites', 'seo-pages', 'seo-meta', 'portfolio', 'voice', 'proposal-sitemap', 'error-page', 'schema-placeholders', 'sentences', 'knowledge', 'editorial-media', 'business-claims', 'outreach', 'page-titles', 'broadcast-layouts', 'publication-branding', 'public-url-host', 'inbox', 'funnels'];
7
+ export declare const CONTRACT_ENTRIES: readonly ['forms', 'llms', 'slots', 'slot-content', 'site-cache', 'site-edit', 'website', 'color', 'fleet', 'sites', 'seo-pages', 'seo-meta', 'portfolio', 'voice', 'proposal-sitemap', 'error-page', 'schema-placeholders', 'sentences', 'knowledge', 'editorial-media', 'business-claims', 'outreach', 'page-titles', 'broadcast-layouts', 'publication-branding', 'public-url-host', 'inbox', 'funnels', 'crm-disposition', 'decision-roles', 'resonance', 'resonance-constants', 'signal-experiments'];
8
8
  export type ContractEntry = (typeof CONTRACT_ENTRIES)[number];
@@ -1,5 +1,5 @@
1
- import { type PublicationColors } from './publication-branding';
2
- export { normalizeCampaignSlug } from './campaign-normalize';
1
+ import { type PublicationColors } from "./publication-branding.js";
2
+ export { normalizeCampaignSlug } from "./campaign-normalize.js";
3
3
  export declare const FUNNEL_SCHEMA_VERSION: 1;
4
4
  export declare const MANAGED_FUNNEL_PATH_PREFIX: '/f';
5
5
  export declare const FUNNEL_TEMPLATES: readonly ['newsletter', 'requested_guide', 'inquiry'];
@@ -93,6 +93,8 @@ export interface FunnelDefinition {
93
93
  body: FunnelBodyBlock[];
94
94
  formId: string;
95
95
  offerAssetId?: string | null;
96
+ /** Authored selection and copy only; native owners verify linkage and derive the published manifest. */
97
+ experiment?: FunnelExperimentAuthoring;
96
98
  };
97
99
  permission: {
98
100
  mode: 'requested_only' | 'marketing_opt_in';
@@ -152,6 +154,41 @@ export interface PublishedFunnelPage {
152
154
  tracking: {
153
155
  campaignSlug: string;
154
156
  };
157
+ /** Optional reviewed content only. Requires a compatible installed renderer;
158
+ * older strict page parsers reject this field. No assignment/publication grant. */
159
+ experimentContent?: FunnelExperimentContentManifest;
160
+ }
161
+ /** Optional saved author input. IDs/revisions select an experiment; they grant no authority.
162
+ * Form, offer, brand, goal and page identity remain fixed on the definition. */
163
+ export interface FunnelExperimentAuthoring {
164
+ experimentId: string;
165
+ experimentRevision: number;
166
+ controlVariantKey: string;
167
+ variants: Array<{
168
+ variantKey: string;
169
+ content: {
170
+ headline: string;
171
+ body: FunnelBodyBlock[];
172
+ };
173
+ }>;
174
+ }
175
+ export interface FunnelExperimentContentManifest {
176
+ schemaVersion: 1;
177
+ kind: 'funnel_experiment_content_v1';
178
+ experimentId: string;
179
+ experimentRevision: number;
180
+ goalRevision: string;
181
+ controlVariantKey: string;
182
+ /** contentDigest covers effective FULL content, including the fixed base offer.
183
+ * Native funnelHash owns canonical hashing; this parser checks digest shape only. */
184
+ variants: Array<{
185
+ variantKey: string;
186
+ content: {
187
+ headline: string;
188
+ body: FunnelBodyBlock[];
189
+ };
190
+ contentDigest: string;
191
+ }>;
155
192
  }
156
193
  export interface FunnelOperationReceipt {
157
194
  operationId: string;
@@ -276,6 +313,42 @@ export declare const FUNNEL_DEFINITION_JSON_SCHEMA: {
276
313
  readonly oneOf?: readonly Shape[];
277
314
  readonly $schema: 'http://json-schema.org/draft-07/schema#';
278
315
  };
316
+ export declare const FUNNEL_EXPERIMENT_AUTHORING_JSON_SCHEMA: {
317
+ readonly type?: 'object' | 'array' | 'string' | 'integer' | 'boolean' | 'null';
318
+ readonly properties?: Record<string, Shape>;
319
+ readonly required?: readonly string[];
320
+ readonly additionalProperties?: false;
321
+ readonly items?: Shape;
322
+ readonly minItems?: number;
323
+ readonly maxItems?: number;
324
+ readonly minLength?: number;
325
+ readonly maxLength?: number;
326
+ readonly pattern?: string;
327
+ readonly minimum?: number;
328
+ readonly maximum?: number;
329
+ readonly enum?: readonly unknown[];
330
+ readonly const?: unknown;
331
+ readonly oneOf?: readonly Shape[];
332
+ readonly $schema: 'http://json-schema.org/draft-07/schema#';
333
+ };
334
+ export declare const FUNNEL_EXPERIMENT_CONTENT_JSON_SCHEMA: {
335
+ readonly type?: 'object' | 'array' | 'string' | 'integer' | 'boolean' | 'null';
336
+ readonly properties?: Record<string, Shape>;
337
+ readonly required?: readonly string[];
338
+ readonly additionalProperties?: false;
339
+ readonly items?: Shape;
340
+ readonly minItems?: number;
341
+ readonly maxItems?: number;
342
+ readonly minLength?: number;
343
+ readonly maxLength?: number;
344
+ readonly pattern?: string;
345
+ readonly minimum?: number;
346
+ readonly maximum?: number;
347
+ readonly enum?: readonly unknown[];
348
+ readonly const?: unknown;
349
+ readonly oneOf?: readonly Shape[];
350
+ readonly $schema: 'http://json-schema.org/draft-07/schema#';
351
+ };
279
352
  export declare const PUBLISHED_FUNNEL_PAGE_JSON_SCHEMA: {
280
353
  readonly type?: 'object' | 'array' | 'string' | 'integer' | 'boolean' | 'null';
281
354
  readonly properties?: Record<string, Shape>;
@@ -306,6 +379,16 @@ export declare function isSafeFunnelPublicUrl(value: string): boolean;
306
379
  export declare function managedFunnelPath(value: string): string;
307
380
  export declare function parseFunnelDefinition(value: unknown): FunnelDefinition;
308
381
  export declare function parsePublishedFunnelPage(value: unknown): PublishedFunnelPage;
382
+ /** Complete copy shape only; native project/site/campaign ownership, current
383
+ * experiment revision/keys/control and goal/hash derivation are still required. */
384
+ export declare function parseFunnelExperimentAuthoring(value: unknown): FunnelExperimentAuthoring;
385
+ /** Shape/content checks only. Native owners verify the complete original Signal
386
+ * variant set and hash each effective FULL content with existing funnelHash. */
387
+ export declare function parseFunnelExperimentContent(value: unknown): FunnelExperimentContentManifest;
388
+ /** One effective-content composition for native hashing and existing rendering.
389
+ * Offer and all page identity/form/brand/tracking fields stay on the base page;
390
+ * a client-provided digest or key grants no native permission. */
391
+ export declare function resolveFunnelExperimentContent(value: unknown, variantKey: string): PublishedFunnelPage['content'];
309
392
  export declare function parseFunnelLaunchArgs(value: unknown): FunnelLaunchArgs;
310
393
  export declare function parseFunnelLifecycleArgs(value: unknown, operation?: 'pause' | 'resume' | 'rollback'): FunnelLifecycleArgs;
311
394
  /** Apply presentation-only overrides to an already resolved canonical brand. Null means inherit. */
@@ -16,7 +16,7 @@
16
16
  * must carry, and which numbers may headline. The Sonor API applies the same
17
17
  * rules.
18
18
  */
19
- export { FRAME_READY_MESSAGE, isFrameReadyMessage, type FrameReadyMessage } from './frame-ready';
19
+ export { FRAME_READY_MESSAGE, isFrameReadyMessage, type FrameReadyMessage } from "./frame-ready.js";
20
20
  /** Bump on breaking changes to the collapse policy. */
21
21
  export declare const PORTFOLIO_CONTRACT_VERSION: 1;
22
22
  /** The four beats, in reading order. */
@@ -1,6 +1,6 @@
1
- import { type BroadcastStyleId, type PublicationCardLayout } from './broadcast-layouts';
2
- import { type PublicationCharter } from './publication-charter';
3
- export { PUBLICATION_CHARTER_FIELDS, parsePublicationCharter, parseSiteCharters, publicationCharterContext, publicationCharterFor, type PublicationCharter, } from './publication-charter';
1
+ import { type BroadcastStyleId, type PublicationCardLayout } from "./broadcast-layouts.js";
2
+ import { type PublicationCharter } from "./publication-charter.js";
3
+ export { PUBLICATION_CHARTER_FIELDS, parsePublicationCharter, parseSiteCharters, publicationCharterContext, publicationCharterFor, type PublicationCharter, } from "./publication-charter.js";
4
4
  /** The stored profile's version. A breaking change to the shape bumps it. */
5
5
  export declare const PUBLICATION_BRANDING_VERSION: 1;
6
6
  /** Where a publication appears. `social` overrides every social network; each network can override again. */
@@ -0,0 +1,4 @@
1
+ /** Single source of truth for inert Resonance wire literals; safe in browser entry graphs. */
2
+ export declare const RESONANCE_ATTRIBUTION_MODEL: 'first_party_last_touch_marker_v1';
3
+ export declare const RESONANCE_SOURCE_MARKER_PARAMETER: 'sonor_source';
4
+ export declare const RESONANCE_SUBJECT_HEADER: 'X-Sonor-Resonance-Subject';