@sonordev/site-kit 8.2.0 → 8.4.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 (198) hide show
  1. package/AGENTS.md +13 -1
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +9 -5
  4. package/agent-manifest.json +53 -8
  5. package/dist/{AnalyticsProvider-6TAA3XYB.js → AnalyticsProvider-D6GWEJSB.js} +6 -6
  6. package/dist/{ArticleFaqSection-3Q26DP7P.js → ArticleFaqSection-DEWE5B4Q.js} +1 -1
  7. package/dist/{ArticleViewTracker-H4N7YCLC.js → ArticleViewTracker-YZ76HM64.js} +17 -6
  8. package/dist/{BlocksPopup-FJT5YQD3.js → BlocksPopup-UJXZ4AXG.js} +6 -6
  9. package/dist/{ChatWidget-THQHHTAA.js → ChatWidget-H4EOSH5I.js} +6 -6
  10. package/dist/{FileField-OZXXJGUM.js → FileField-CKBYGCNT.js} +4 -4
  11. package/dist/{FormSpotlight-MLDJS246.js → FormSpotlight-CGF5ZE6S.js} +1 -1
  12. package/dist/{FormStage-6RVY7M3R.js → FormStage-PQPUPQWW.js} +1 -1
  13. package/dist/{ManagedForm-3VV54RVH.js → ManagedForm-YOEZ7CFS.js} +7 -7
  14. package/dist/{ManagedNewsletterForm-RTJDGMGG.js → ManagedNewsletterForm-EUWJ2HCA.js} +25 -11
  15. package/dist/{SignalCore-T7ZOCA44.js → SignalCore-JZSU7A44.js} +14 -8
  16. package/dist/SiteChat-OAZH34W7.js +6 -0
  17. package/dist/SiteDesignReporter-IWBMZJYU.js +12 -0
  18. package/dist/{SitePopups-K6ADAWFK.js → SitePopups-MLAT35UN.js} +6 -6
  19. package/dist/SitemapSync-6KQLKFO2.js +9 -0
  20. package/dist/_client/booking-widget.js +6 -6
  21. package/dist/_client/testimonial-section.js +3 -3
  22. package/dist/affiliates/index.js +4 -4
  23. package/dist/analytics/index.js +6 -6
  24. package/dist/analytics/publication-cta.d.ts +3 -0
  25. package/dist/{article-styles-GFXJJDLE.js → article-styles-AOOVVKXH.js} +7 -5
  26. package/dist/article-tables-6XHVULPU.js +2 -0
  27. package/dist/articles/Article.d.ts +2 -89
  28. package/dist/articles/ArticleFAQ.d.ts +2 -41
  29. package/dist/articles/ArticleFaqSection.d.ts +2 -2
  30. package/dist/articles/ArticleList.d.ts +2 -79
  31. package/dist/articles/ArticleViewTracker.d.ts +2 -15
  32. package/dist/articles/AuthorCard.d.ts +2 -10
  33. package/dist/articles/AuthorPage.d.ts +2 -8
  34. package/dist/articles/ClusterLandingPage.d.ts +2 -40
  35. package/dist/articles/ClusterNavigation.d.ts +2 -37
  36. package/dist/articles/ManagedNewsletterForm.d.ts +3 -12
  37. package/dist/articles/NewsletterShell.d.ts +2 -17
  38. package/dist/articles/NewsletterWidget.d.ts +2 -30
  39. package/dist/articles/PublicationLayout.d.ts +2 -67
  40. package/dist/articles/PublicationSidebar.d.ts +2 -36
  41. package/dist/articles/RelatedPosts.d.ts +2 -22
  42. package/dist/articles/ServiceCallout.d.ts +2 -56
  43. package/dist/articles/TableOfContents.d.ts +2 -6
  44. package/dist/articles/article-photos.d.ts +2 -9
  45. package/dist/articles/article-styles.d.ts +2 -21
  46. package/dist/articles/article-tables.d.ts +2 -12
  47. package/dist/articles/artwork.d.ts +2 -13
  48. package/dist/articles/author-schema.d.ts +2 -72
  49. package/dist/articles/author-social.d.ts +2 -14
  50. package/dist/articles/excerpt.d.ts +2 -17
  51. package/dist/articles/index.d.ts +2 -79
  52. package/dist/articles/index.js +16 -11
  53. package/dist/articles/news-sitemap.d.ts +2 -46
  54. package/dist/articles/processArticleHtml.d.ts +2 -34
  55. package/dist/articles/public-reads.d.ts +2 -26
  56. package/dist/articles/reading-time.d.ts +2 -9
  57. package/dist/articles/routes.d.ts +2 -52
  58. package/dist/articles/server-core.d.ts +2 -461
  59. package/dist/articles/server-ui.d.ts +2 -30
  60. package/dist/articles/server-ui.js +72 -62
  61. package/dist/articles/server.d.ts +2 -461
  62. package/dist/articles/server.js +14 -5
  63. package/dist/articles/types.d.ts +2 -316
  64. package/dist/articles/widget-styles.d.ts +2 -8
  65. package/dist/chat/index.js +8 -8
  66. package/dist/chunk-34ZYJTQR.js +1 -0
  67. package/dist/{chunk-727R7C5R.js → chunk-3VSFOD2Z.js} +2 -2
  68. package/dist/{chunk-JC2VS2SB.js → chunk-44GVU5UH.js} +1 -1
  69. package/dist/{chunk-WYZ4OUON.js → chunk-4HYIDQJJ.js} +1 -1
  70. package/dist/{chunk-WMVK77ND.js → chunk-4K735O3J.js} +1 -1
  71. package/dist/{chunk-L5UOHS6E.js → chunk-5D7ZISUP.js} +1 -1
  72. package/dist/{chunk-Q72M5KBS.js → chunk-5S7YTOCB.js} +1 -1
  73. package/dist/{chunk-WSNG2K3T.js → chunk-5TDZHIG6.js} +3 -3
  74. package/dist/{chunk-6CJGZFOU.js → chunk-A4MPHIVP.js} +1 -1
  75. package/dist/chunk-B7T2SFUF.js +1 -0
  76. package/dist/{chunk-FV2VD7WM.js → chunk-BC7JMY4Z.js} +3 -3
  77. package/dist/chunk-BLCHQIWR.js +319 -0
  78. package/dist/{chunk-NNEIBXGU.js → chunk-BLENFNBW.js} +2 -2
  79. package/dist/{chunk-NFRJTOTB.js → chunk-BSQP6PRA.js} +1 -1
  80. package/dist/{chunk-GKGSXUVQ.js → chunk-BVB5FBAA.js} +1 -1
  81. package/dist/{chunk-WACWV5EP.js → chunk-CE7VPAEH.js} +3 -3
  82. package/dist/{chunk-GYF2ULVO.js → chunk-DJAYFHVF.js} +1 -1
  83. package/dist/{chunk-WBC5B3JD.js → chunk-DKKYZLKR.js} +3 -3
  84. package/dist/{chunk-CAH4Y4PY.js → chunk-DLM4FFNH.js} +6 -2
  85. package/dist/{chunk-575L73NT.js → chunk-DS6LECIX.js} +1 -1
  86. package/dist/{chunk-Y3INC4QJ.js → chunk-E4PTMORJ.js} +1 -1
  87. package/dist/chunk-H72ZFO3F.js +1 -0
  88. package/dist/{chunk-WK3N3Y7V.js → chunk-HH2GOZTO.js} +2 -2
  89. package/dist/{chunk-JBEUZJS3.js → chunk-ITY4UZEJ.js} +3 -3
  90. package/dist/{chunk-GWP2VBFH.js → chunk-J4KX2D3Q.js} +3 -3
  91. package/dist/{chunk-57K4GW3D.js → chunk-JCSU6EJI.js} +1 -1
  92. package/dist/{chunk-SC4MZGWZ.js → chunk-JHTPHA2D.js} +6 -3
  93. package/dist/{chunk-YBAFUM3Z.js → chunk-JV5YWTJN.js} +13 -4
  94. package/dist/{chunk-I6QFPSUU.js → chunk-KASKB7UK.js} +11 -10
  95. package/dist/{chunk-SMYX3AAO.js → chunk-LEGMPX6N.js} +1 -1
  96. package/dist/{chunk-ZM2FNWIQ.js → chunk-LPVEBQVL.js} +1 -1
  97. package/dist/{chunk-HUBMKTPW.js → chunk-M5SF7NCC.js} +1 -1
  98. package/dist/{chunk-EBILJHUF.js → chunk-MTV5LYXN.js} +31 -2
  99. package/dist/{chunk-5ZCY36TY.js → chunk-MZX4EN6Z.js} +1 -1
  100. package/dist/{chunk-7FSB2EXS.js → chunk-OKITZFML.js} +1 -1
  101. package/dist/{chunk-H4R2GPAB.js → chunk-PEI6DRSK.js} +2 -2
  102. package/dist/{chunk-FVXFLVXF.js → chunk-QD73RO67.js} +3 -3
  103. package/dist/{chunk-66G47P5C.js → chunk-QKOVP7WO.js} +2 -2
  104. package/dist/{chunk-3EU6S5YC.js → chunk-RBNHRZGD.js} +1 -1
  105. package/dist/{chunk-XWIRU6UT.js → chunk-S6QDNXDK.js} +2 -2
  106. package/dist/{chunk-FQUGGPBM.js → chunk-TY6WNQO3.js} +124 -41
  107. package/dist/{chunk-QXMIKDOL.js → chunk-UVYUTBT4.js} +14 -4
  108. package/dist/{chunk-3G7YABRA.js → chunk-W7OPEMGJ.js} +4 -1
  109. package/dist/{chunk-JIH32RH2.js → chunk-XA7Q2VQA.js} +1 -1
  110. package/dist/{chunk-X7VKRHFF.js → chunk-XENW66OF.js} +1 -1
  111. package/dist/chunk-XI2XM7UG.js +14 -0
  112. package/dist/{chunk-BQZPHICL.js → chunk-YM5KMNTU.js} +1 -1
  113. package/dist/client/index.js +4 -16
  114. package/dist/fleet/index.js +6 -6
  115. package/dist/forms/index.js +9 -325
  116. package/dist/forms/server.js +2 -2
  117. package/dist/forms/types.d.ts +5 -0
  118. package/dist/forms/useForm.d.ts +4 -0
  119. package/dist/images/index.js +4 -4
  120. package/dist/index.js +1 -1
  121. package/dist/layout/client.js +9 -9
  122. package/dist/layout/index.js +10 -10
  123. package/dist/llms/index.js +8 -8
  124. package/dist/maps/index.js +4 -4
  125. package/dist/mcp/sonor.d.ts +46 -3
  126. package/dist/mcp/sonor.js +51 -29
  127. package/dist/mcp/transport.d.ts +1 -1
  128. package/dist/press-kit/articles/Article.d.ts +89 -0
  129. package/dist/press-kit/articles/ArticleFAQ.d.ts +41 -0
  130. package/dist/press-kit/articles/ArticleFaqSection.d.ts +2 -0
  131. package/dist/press-kit/articles/ArticleList.d.ts +79 -0
  132. package/dist/press-kit/articles/ArticleViewTracker.d.ts +15 -0
  133. package/dist/press-kit/articles/AuthorCard.d.ts +10 -0
  134. package/dist/press-kit/articles/AuthorPage.d.ts +8 -0
  135. package/dist/press-kit/articles/ClusterLandingPage.d.ts +40 -0
  136. package/dist/press-kit/articles/ClusterNavigation.d.ts +37 -0
  137. package/dist/press-kit/articles/ManagedNewsletterForm.d.ts +12 -0
  138. package/dist/press-kit/articles/NewsletterShell.d.ts +17 -0
  139. package/dist/press-kit/articles/NewsletterWidget.d.ts +30 -0
  140. package/dist/press-kit/articles/PublicationLayout.d.ts +67 -0
  141. package/dist/press-kit/articles/PublicationSidebar.d.ts +36 -0
  142. package/dist/press-kit/articles/RelatedPosts.d.ts +22 -0
  143. package/dist/press-kit/articles/ServiceCallout.d.ts +56 -0
  144. package/dist/press-kit/articles/TableOfContents.d.ts +6 -0
  145. package/dist/press-kit/articles/article-photos.d.ts +9 -0
  146. package/dist/press-kit/articles/article-styles.d.ts +21 -0
  147. package/dist/press-kit/articles/article-tables.d.ts +12 -0
  148. package/dist/press-kit/articles/artwork.d.ts +16 -0
  149. package/dist/press-kit/articles/author-schema.d.ts +72 -0
  150. package/dist/press-kit/articles/author-social.d.ts +14 -0
  151. package/dist/press-kit/articles/excerpt.d.ts +17 -0
  152. package/dist/press-kit/articles/index.d.ts +80 -0
  153. package/dist/press-kit/articles/news-sitemap.d.ts +40 -0
  154. package/dist/press-kit/articles/processArticleHtml.d.ts +34 -0
  155. package/dist/press-kit/articles/public-reads.d.ts +42 -0
  156. package/dist/press-kit/articles/publication-definition.d.ts +41 -0
  157. package/dist/press-kit/articles/publication-reads.d.ts +54 -0
  158. package/dist/press-kit/articles/reading-time.d.ts +9 -0
  159. package/dist/press-kit/articles/routes.d.ts +52 -0
  160. package/dist/press-kit/articles/server-core.d.ts +479 -0
  161. package/dist/press-kit/articles/server-ui.d.ts +31 -0
  162. package/dist/press-kit/articles/types.d.ts +339 -0
  163. package/dist/press-kit/articles/widget-styles.d.ts +8 -0
  164. package/dist/reputation/index.js +3 -3
  165. package/dist/reputation/server.js +2 -2
  166. package/dist/revalidate/index.js +2 -2
  167. package/dist/runtime/index.js +5 -4
  168. package/dist/seo/client.js +6 -6
  169. package/dist/seo/index.js +7 -7
  170. package/dist/seo/llms.js +8 -8
  171. package/dist/seo/register-sitemap-cli.js +1 -1
  172. package/dist/seo/sitemap.js +6 -6
  173. package/dist/server/index.js +3 -2
  174. package/dist/shared/build-entries.d.ts +2 -1
  175. package/dist/shared/clientApiConfig.d.ts +2 -0
  176. package/dist/shared/import-specifiers.d.ts +1 -1
  177. package/dist/shared/index.d.ts +6 -0
  178. package/dist/shared/index.js +8 -0
  179. package/dist/shared/reporting-gate.d.ts +2 -0
  180. package/dist/shared/version.d.ts +1 -1
  181. package/dist/signal/index.js +2 -2
  182. package/dist/sitemap/index.js +6 -6
  183. package/dist/sync/index.js +6 -6
  184. package/dist/website/images.js +4 -4
  185. package/dist/website/index.js +7 -7
  186. package/dist/website/popups.js +6 -6
  187. package/dist/{writeLLMsTxt-DGKLYXIW.js → writeLLMsTxt-N4Y4YC2H.js} +5 -5
  188. package/docs/MIGRATING-TO-PRESS-KIT.md +83 -0
  189. package/docs.json +145 -29
  190. package/package.json +15 -5
  191. package/src/articles/README.md +5 -360
  192. package/src/mcp/README.md +16 -0
  193. package/src/og/README.md +1 -1
  194. package/src/runtime/README.md +4 -0
  195. package/dist/SiteChat-JSHPGAE3.js +0 -6
  196. package/dist/SiteDesignReporter-L2JBAKKK.js +0 -12
  197. package/dist/SitemapSync-VV2YSMIW.js +0 -9
  198. package/dist/article-tables-AXSZOGNW.js +0 -2
package/AGENTS.md CHANGED
@@ -28,7 +28,7 @@ npx sonor-setup mcp --yes --json # agent tools: MCP
28
28
  # Existing 2.x-6.x site? migrate deterministically:
29
29
  npx sonor-setup codemod --check --json # exit 1 ⇒ work pending
30
30
  npx sonor-setup codemod --write --json # apply (idempotent, minimal diffs)
31
- # 7.x site that imports commerce? One more hop (commerce moved to @sonordev/commerce-kit):
31
+ # Site with commerce or articles? Move imports to their companion packages:
32
32
  npx sonor-setup codemod --only site-kit-8 --write --json # swaps the package name in its imports
33
33
  pnpm install # the codemod edits package.json, not node_modules (or npm / yarn)
34
34
  next build # you run the build
@@ -130,6 +130,18 @@ that sells moves with
130
130
  `sonorMcpServer({ businessName, offerings: { path: '/shop', read: getOfferingsResult } })`,
131
131
  with `getOfferingsResult` from `@sonordev/commerce-kit/commerce/server`.
132
132
 
133
+ **Articles and publications** live in `@sonordev/press-kit` (Site Kit 8.3+ peer).
134
+ Import client components from `/articles`, server data from `/articles/server`,
135
+ and RSC components from `/articles/server-ui`. Keep `SiteKitLayout` from Site Kit.
136
+ Legacy `@sonordev/site-kit/articles*` imports stay compatible in 8.x; migrate
137
+ with `npx sonor-setup codemod --only site-kit-8 --write`, install, and build.
138
+ The codemod adds Press Kit and raises the Site Kit dependency to 8.3.
139
+ Site MCP uses the same readers as the pages:
140
+ `articles: { path: '/news', readMany: getAllArticles, readOne: getArticle }`,
141
+ with both readers from `@sonordev/press-kit/articles/server`. Use `articles: false`
142
+ for a site without articles. New `sonor-setup mcp` scaffolds this wiring;
143
+ `--no-articles` doesn't need Press Kit. See [Press Kit migration](docs/MIGRATING-TO-PRESS-KIT.md).
144
+
133
145
  **Building a package on top of site-kit** (a kit, as commerce-kit is)? Take the
134
146
  browser transport from `@sonordev/site-kit/runtime` (`sonorFetch`,
135
147
  `getClientApiConfig`) and server data from `@sonordev/site-kit/server`, and
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @sonordev/site-kit Changelog
2
2
 
3
+ ## 8.4.0
4
+
5
+ - Article MCP reads use canonical/category routing, full archive/body search, pagination and long-content continuation.
6
+ - Managed forms expose accepted publication enrollment receipts and a retry that preserves entered values.
7
+ - Legacy article entries bundle Press Kit 1.1 compatibility from the same source.
8
+ - Private previews suppress analytics, Signal and public discovery; approved article CTAs use the existing consent-aware event transport.
9
+
10
+ ## 8.3.0
11
+
12
+ - Extract publication components and article data helpers into `@sonordev/press-kit` 1.0.0, with existing article imports kept compatible through source shims built from the same implementation.
13
+ - Add the framework-free `/shared` entry for site-scoped requests, URL shaping and safe JSON-LD.
14
+
3
15
  ## 8.2.0
4
16
 
5
17
  - Article photo placement uses the same pure contract as Sonor's editor and preview: exact section anchors, missing prose diagnostics, duplicate detection, and independent website placement.
package/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # @sonordev/site-kit
2
2
 
3
- All-in-one integration kit for [Sonor](https://sonor.io)-powered Next.js sites. One package, one env var, and the modules a site needs: SEO, Analytics, Forms, Articles, Website chat, Popups, GEO/AEO, Booking, Reputation, A/B Testing, and more, all managed from the Sonor dashboard at [app.sonor.io](https://app.sonor.io). Products, events and memberships come from the companion package [`@sonordev/commerce-kit`](https://sonor.dev/commerce-kit), which builds on site-kit.
3
+ All-in-one integration kit for [Sonor](https://sonor.io)-powered Next.js sites. One shared foundation and one env var for the modules a site needs: SEO, Analytics, Forms, Website chat, Popups, GEO/AEO, Booking, Reputation, A/B Testing, and more, all managed from the Sonor dashboard at [app.sonor.io](https://app.sonor.io). Products, events and memberships come from the companion package [`@sonordev/commerce-kit`](https://sonor.dev/commerce-kit), which builds on site-kit.
4
+
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.
4
6
 
5
7
  ## Install
6
8
 
@@ -10,6 +12,8 @@ npm install @sonordev/site-kit
10
12
 
11
13
  Selling products, events or memberships? Add the companion package too: `npm install @sonordev/commerce-kit`. See [Commerce and memberships](#commerce-and-memberships).
12
14
 
15
+ Publishing articles? Add `npm install @sonordev/press-kit` alongside Site Kit 8.3 or newer. See [Moving to Press Kit](docs/MIGRATING-TO-PRESS-KIT.md).
16
+
13
17
  ## What's new in 8.0
14
18
 
15
19
  - **Commerce and memberships are their own package.** Products, services, events, checkout and the new memberships module now live in [`@sonordev/commerce-kit`](https://sonor.dev/commerce-kit), which builds on site-kit and releases on its own. A site that doesn't sell anything changes nothing. A site that does swaps the package name in its imports: `npx sonor-setup codemod --only site-kit-8 --write`, then install and build. See [docs/MIGRATING-TO-8.md](docs/MIGRATING-TO-8.md).
@@ -112,7 +116,7 @@ Every module has its own README in `src/<module>/README.md` with full API docs,
112
116
 
113
117
  | Module | Import | Purpose | Docs |
114
118
  |--------|--------|---------|------|
115
- | **Articles** | `@sonordev/site-kit/articles` | Sonor-managed articles with SSG, topic clusters, E-E-A-T | [README](src/articles/README.md) |
119
+ | **Articles** | `@sonordev/press-kit/articles` | Sonor-managed articles with SSG, topic clusters, E-E-A-T | [README](src/articles/README.md) |
116
120
  | **Images** | `@sonordev/site-kit/website/images` | Managed image slots with dev-mode editing | [README](src/images/README.md) |
117
121
  | **Reputation** | `@sonordev/site-kit/reputation` | Reviews, testimonials, rating stats | [README](src/reputation/README.md) |
118
122
 
@@ -219,8 +223,8 @@ import { AnalyticsProvider, useAnalytics, WebVitals } from '@sonordev/site-kit/a
219
223
  import { ManagedForm, useForm, formsApi, field } from '@sonordev/site-kit/forms'
220
224
 
221
225
  // Articles (server components; keeps server-only data helpers out of client bundles)
222
- import { Article, ArticleList, ClusterLandingPage } from '@sonordev/site-kit/articles/server-ui'
223
- import { getArticle, generateArticleStaticParams } from '@sonordev/site-kit/articles/server'
226
+ import { Article, ArticleList, ClusterLandingPage } from '@sonordev/press-kit/articles/server-ui'
227
+ import { getArticle, generateArticleStaticParams } from '@sonordev/press-kit/articles/server'
224
228
 
225
229
  // Commerce and memberships are their own package: npm install @sonordev/commerce-kit
226
230
  import { OfferingCard, ProductPage, EventCalendar } from '@sonordev/commerce-kit/commerce'
@@ -336,7 +340,7 @@ Fully typed. All types are exported from their respective module paths:
336
340
  ```ts
337
341
  import type { LLMsDataResponse, GenerateLLMSTxtOptions } from '@sonordev/site-kit/seo/llms'
338
342
  import type { ManagedFormConfig, UseFormReturn } from '@sonordev/site-kit/forms'
339
- import type { Article, TopicCluster } from '@sonordev/site-kit/articles'
343
+ import type { Article, TopicCluster } from '@sonordev/press-kit/articles'
340
344
  import type { SiteKitLayoutProps } from '@sonordev/site-kit/layout'
341
345
  import type { CommerceOffering } from '@sonordev/commerce-kit' // commerce types live in commerce-kit
342
346
  ```
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@sonordev/site-kit",
4
- "version": "8.2.0",
4
+ "version": "8.4.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": [
@@ -32,6 +32,12 @@
32
32
  "npx sonor-setup verify --json # exit 0 === done"
33
33
  ],
34
34
  "commands": [
35
+ {
36
+ "name": "publication",
37
+ "json": true,
38
+ "interactive": false,
39
+ "purpose": "Preview a tenant-authored publication definition with --config publication.json. --write creates brand-owned newsroom, journal or briefing routes without overwriting existing work. No credentials, records, audience enrollment or publishing."
40
+ },
35
41
  {
36
42
  "name": "verify",
37
43
  "json": true,
@@ -54,7 +60,7 @@
54
60
  "name": "codemod",
55
61
  "json": true,
56
62
  "interactive": false,
57
- "purpose": "Deterministic migration of a 2.x-7.x site to the current site-kit (uptrade-to-sonor, provider-to-layout, analytics-sibling, site-kit-7, site-kit-8, next-16-proxy). site-kit-8 moves commerce imports to @sonordev/commerce-kit and adds the dependency. Dry-run by default; --write applies; --check gates (exit 1 if pending)."
63
+ "purpose": "Deterministic migration of a 2.x-7.x site to the current site-kit (uptrade-to-sonor, provider-to-layout, analytics-sibling, site-kit-7, site-kit-8, next-16-proxy). site-kit-8 moves commerce imports to @sonordev/commerce-kit and article imports to @sonordev/press-kit; it adds dependencies and raises site-kit to the required version (8.3 for Press Kit). Dry-run by default; --write applies; --check gates (exit 1 if pending). --only press-kit migrates only article imports and dependencies, preserving commerce code and dependencies; it shares the same migration engine."
58
64
  },
59
65
  {
60
66
  "name": "manifest",
@@ -90,7 +96,7 @@
90
96
  "name": "mcp",
91
97
  "json": true,
92
98
  "interactive": false,
93
- "purpose": "Give agents the site's tools: writes the MCP server (site-kit's built-in Sonor tools), the endpoint with tool-call reporting, the canonical server card and compatibility aliases, the experimental AI catalog, and on Netlify the rate-limited relay. Never overwrites without --force; --dry-run to preview."
99
+ "purpose": "Give agents the site's tools: writes the MCP server (site-kit's built-in Sonor tools), the endpoint with tool-call reporting, the canonical server card and compatibility aliases, the experimental AI catalog, and on Netlify the rate-limited relay. Never overwrites without --force; --dry-run to preview. Articles use Press Kit readers (requires installed Site Kit >=8.3); --no-articles needs no Press Kit and retains the 7.3 discovery minimum."
94
100
  },
95
101
  {
96
102
  "name": "next16",
@@ -161,20 +167,22 @@
161
167
  "name": "articles",
162
168
  "import": "@sonordev/site-kit/articles",
163
169
  "side": "client",
164
- "purpose": "Client-only article pieces: TableOfContents, ArticleFAQ, AuthorCard, AuthorPage, ServiceCallout, NewsletterWidget, ClusterNavigation, ArticleViewTracker. Types for every article component.",
165
- "caution": "Stamped 'use client' at build time. It exports no async server components: Article, ArticleList, PublicationLayout, PublicationPage, ArticlePage, CategoryPage, PublicationSidebar, RelatedPosts and ClusterLandingPage come from @sonordev/site-kit/articles/server-ui."
170
+ "purpose": "Compatibility entry since Site Kit 8.3. Preferred import: @sonordev/press-kit/articles. Client-only article pieces: TableOfContents, ArticleFAQ, AuthorCard, AuthorPage, ServiceCallout, NewsletterWidget, ClusterNavigation, ArticleViewTracker. Types for every article component.",
171
+ "caution": "New integrations use @sonordev/press-kit/articles. Install @sonordev/press-kit with Site Kit >=8.3. Legacy Site Kit imports remain supported in 8.x. Stamped 'use client' at build time. It exports no async server components: Article, ArticleList, PublicationLayout, PublicationPage, ArticlePage, CategoryPage, PublicationSidebar, RelatedPosts and ClusterLandingPage come from @sonordev/press-kit/articles/server-ui."
166
172
  },
167
173
  {
168
174
  "name": "articles/server",
169
175
  "import": "@sonordev/site-kit/articles/server",
170
176
  "side": "server",
171
- "purpose": "Server-only article data, SSG, metadata, schema, RSS/Atom feeds (20 newest by default), article sitemap with images, and a Google News sitemap. Shared publication routing supports basePath, includeCategoryInPath and custom postPath/categoryPath; resolveArticleArtwork separates article art from full cards; wrapArticleTables supplies accessible article tables."
177
+ "purpose": "Compatibility entry since Site Kit 8.3. Preferred import: @sonordev/press-kit/articles/server. Server-only article data, SSG, metadata, schema, RSS/Atom feeds (20 newest by default), article sitemap with images, and a Google News sitemap. Shared publication routing supports basePath, includeCategoryInPath and custom postPath/categoryPath; resolveArticleArtwork separates article art from full cards; wrapArticleTables supplies accessible article tables.",
178
+ "caution": "New integrations use @sonordev/press-kit/articles/server. Install @sonordev/press-kit with Site Kit >=8.3. Legacy Site Kit imports remain supported in 8.x. "
172
179
  },
173
180
  {
174
181
  "name": "articles/server-ui",
175
182
  "import": "@sonordev/site-kit/articles/server-ui",
176
183
  "side": "server",
177
- "purpose": "RSC-safe article UI: Article, ArticleList, PublicationLayout, PublicationSidebar, RelatedPosts, ClusterLandingPage, ClusterNavigation, and page helpers. Pass a shared routing object (basePath defaults to /articles) so a site keeps its own publication path. Article art, complete generated cards and themed table scrolling are handled by default."
184
+ "purpose": "Compatibility entry since Site Kit 8.3. Preferred import: @sonordev/press-kit/articles/server-ui. RSC-safe article UI: Article, ArticleList, PublicationLayout, PublicationSidebar, RelatedPosts, ClusterLandingPage, ClusterNavigation, and page helpers. Pass a shared routing object (basePath defaults to /articles) so a site keeps its own publication path. Article art, complete generated cards and themed table scrolling are handled by default.",
185
+ "caution": "New integrations use @sonordev/press-kit/articles/server-ui. Install @sonordev/press-kit with Site Kit >=8.3. Legacy Site Kit imports remain supported in 8.x. "
178
186
  },
179
187
  {
180
188
  "name": "sync",
@@ -290,7 +298,7 @@
290
298
  "name": "mcp/sonor",
291
299
  "import": "@sonordev/site-kit/mcp/sonor",
292
300
  "side": "server",
293
- "purpose": "The MCP tools every Sonor site can serve with no code: sonorMcpServer / sonorMcpTools (get_business_profile, list_services, search_faq, find_pages, list_articles, get_article, get_reviews; opt-in list_offerings, check_availability, get_inquiry_form + send_inquiry through Sonor's agent-inquiry door) and reportToolCallsToSonor (createMcpHandler's onToolCall: which agents used the site). Mount with `npx sonor-setup mcp`."
301
+ "purpose": "The MCP tools every Sonor site can serve with no code: sonorMcpServer / sonorMcpTools (get_business_profile, list_services, search_faq, find_pages, list_articles, get_article, get_reviews; opt-in list_offerings, check_availability, get_inquiry_form + send_inquiry through Sonor's agent-inquiry door) and reportToolCallsToSonor (createMcpHandler's onToolCall: which agents used the site). Mount with `npx sonor-setup mcp`. Article tools accept articles: { path, readMany: getAllArticles, readOne: getArticle } from @sonordev/press-kit/articles/server (Site Kit >=8.3); articles:false omits them. Existing 8.x servers retain legacy readers."
294
302
  },
295
303
  {
296
304
  "name": "admin-auth",
@@ -643,9 +651,39 @@
643
651
  "movedTo": [
644
652
  "@sonordev/site-kit/website/landing/server"
645
653
  ]
654
+ },
655
+ {
656
+ "name": "shared",
657
+ "import": "@sonordev/site-kit/shared",
658
+ "side": "shared",
659
+ "purpose": "Framework-free shared URL/site/JSON-LD helpers for companion kits: withSiteParam, withSiteBody, resolveSiteHost, readPublishedSite, applyTrailingSlash, resolveTrailingSlash and safeJsonLd. Unstamped; safe for server and client imports."
646
660
  }
647
661
  ],
648
662
  "relocated": [
663
+ {
664
+ "from": "@sonordev/site-kit/articles",
665
+ "to": "@sonordev/press-kit/articles",
666
+ "package": "@sonordev/press-kit",
667
+ "range": "^1.1.0",
668
+ "since": "8.3.0",
669
+ "compatibility": "Legacy site-kit article imports remain supported in 8.x; Press Kit is preferred for new and migrated integrations."
670
+ },
671
+ {
672
+ "from": "@sonordev/site-kit/articles/server",
673
+ "to": "@sonordev/press-kit/articles/server",
674
+ "package": "@sonordev/press-kit",
675
+ "range": "^1.1.0",
676
+ "since": "8.3.0",
677
+ "compatibility": "Legacy site-kit article imports remain supported in 8.x; Press Kit is preferred for new and migrated integrations."
678
+ },
679
+ {
680
+ "from": "@sonordev/site-kit/articles/server-ui",
681
+ "to": "@sonordev/press-kit/articles/server-ui",
682
+ "package": "@sonordev/press-kit",
683
+ "range": "^1.1.0",
684
+ "since": "8.3.0",
685
+ "compatibility": "Legacy site-kit article imports remain supported in 8.x; Press Kit is preferred for new and migrated integrations."
686
+ },
649
687
  {
650
688
  "from": "@sonordev/site-kit/commerce",
651
689
  "to": "@sonordev/commerce-kit/commerce",
@@ -676,6 +714,13 @@
676
714
  }
677
715
  ],
678
716
  "relocatedTypes": [
717
+ {
718
+ "from": "@sonordev/site-kit",
719
+ "types": [],
720
+ "to": "@sonordev/press-kit",
721
+ "range": "^1.1.0",
722
+ "since": "8.3.0"
723
+ },
679
724
  {
680
725
  "from": "@sonordev/site-kit",
681
726
  "types": [
@@ -1,13 +1,13 @@
1
- export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-EBILJHUF.js';
1
+ export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-MTV5LYXN.js';
2
2
  import './chunk-LCDVPAMR.js';
3
3
  import './chunk-ZKADJNR2.js';
4
4
  import './chunk-L2V5PUFN.js';
5
5
  import './chunk-5TM3WPCI.js';
6
6
  import './chunk-GJWI74ZZ.js';
7
- import './chunk-CAH4Y4PY.js';
7
+ import './chunk-DLM4FFNH.js';
8
8
  import './chunk-EKBEOXTH.js';
9
- import './chunk-3G7YABRA.js';
10
- import './chunk-727R7C5R.js';
11
- import './chunk-3EU6S5YC.js';
12
- import './chunk-Q72M5KBS.js';
9
+ import './chunk-3VSFOD2Z.js';
10
+ import './chunk-RBNHRZGD.js';
11
+ import './chunk-W7OPEMGJ.js';
12
+ import './chunk-5S7YTOCB.js';
13
13
  import './chunk-PKBMQBKP.js';
@@ -1,4 +1,4 @@
1
- import { ArticleFAQ } from './chunk-GKGSXUVQ.js';
1
+ import { ArticleFAQ } from './chunk-BVB5FBAA.js';
2
2
  import './chunk-PKBMQBKP.js';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,19 +1,30 @@
1
1
  'use client';
2
+ import './chunk-XI2XM7UG.js';
3
+ import './chunk-B7T2SFUF.js';
4
+ import './chunk-MZX4EN6Z.js';
5
+ import './chunk-6T6CQVNL.js';
6
+ import './chunk-5ROTTMBL.js';
2
7
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
8
+ import './chunk-H72ZFO3F.js';
9
+ import './chunk-4KZ6W3ZH.js';
3
10
  import { withSiteBody } from './chunk-MJP63SSS.js';
11
+ import './chunk-YVKRYQRG.js';
4
12
  import './chunk-FESKKJAS.js';
5
13
  import './chunk-A4CC4ZG3.js';
6
- import { readPublishedApiConfig } from './chunk-3G7YABRA.js';
7
- import { sonorFetch } from './chunk-727R7C5R.js';
8
- import './chunk-3EU6S5YC.js';
9
- import './chunk-Q72M5KBS.js';
14
+ import './chunk-LCDVPAMR.js';
15
+ import './chunk-ZKADJNR2.js';
16
+ import './chunk-5TM3WPCI.js';
17
+ import './chunk-GJWI74ZZ.js';
18
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
19
+ import './chunk-RBNHRZGD.js';
20
+ import { readPublishedApiConfig, readPublishedSite } from './chunk-W7OPEMGJ.js';
21
+ import './chunk-5S7YTOCB.js';
10
22
  import './chunk-PKBMQBKP.js';
11
23
  import { useEffect } from 'react';
12
24
 
13
25
  var SESSION_KEY_PREFIX = "__sonor_article_viewed__:";
14
26
  function trackArticleView(slug, site) {
15
27
  if (!slug || typeof window === "undefined") return;
16
- const w = window;
17
28
  const { apiUrl: baseUrl, apiKey } = readPublishedApiConfig();
18
29
  if (!baseUrl || !apiKey) return;
19
30
  const key = `${SESSION_KEY_PREFIX}${slug}`;
@@ -26,7 +37,7 @@ function trackArticleView(slug, site) {
26
37
  {
27
38
  method: "POST",
28
39
  headers: { "Content-Type": "application/json" },
29
- body: JSON.stringify(withSiteBody({ slug }, site || w.__SITE_KIT_SITE__))
40
+ body: JSON.stringify(withSiteBody({ slug }, site || readPublishedSite()))
30
41
  },
31
42
  { retries: 0 }
32
43
  ).then((res) => {
@@ -1,14 +1,14 @@
1
1
  'use client';
2
- import { getSiteDesignTokens } from './chunk-WBC5B3JD.js';
2
+ import { getSiteDesignTokens } from './chunk-DKKYZLKR.js';
3
3
  import { DEFAULT_POPUP_TOKENS, PopupBlocks } from './chunk-BF7TZYC3.js';
4
4
  import { normalizePopupBlocks, toHexColor, readableOn } from './chunk-IHG36STL.js';
5
5
  import './chunk-S22FSH7C.js';
6
- import './chunk-CAH4Y4PY.js';
6
+ import './chunk-DLM4FFNH.js';
7
7
  import './chunk-EKBEOXTH.js';
8
- import './chunk-3G7YABRA.js';
9
- import './chunk-727R7C5R.js';
10
- import './chunk-3EU6S5YC.js';
11
- import './chunk-Q72M5KBS.js';
8
+ import './chunk-3VSFOD2Z.js';
9
+ import './chunk-RBNHRZGD.js';
10
+ import './chunk-W7OPEMGJ.js';
11
+ import './chunk-5S7YTOCB.js';
12
12
  import './chunk-PKBMQBKP.js';
13
13
  import { useState } from 'react';
14
14
  import { jsx } from 'react/jsx-runtime';
@@ -1,8 +1,8 @@
1
- export { ChatWidget, EchoChat, isChatEnabled } from './chunk-FVXFLVXF.js';
1
+ export { ChatWidget, EchoChat, isChatEnabled } from './chunk-QD73RO67.js';
2
2
  import './chunk-6T6CQVNL.js';
3
3
  import './chunk-JE4A5S4F.js';
4
4
  import './chunk-27FISYK4.js';
5
- import './chunk-YBAFUM3Z.js';
5
+ import './chunk-JV5YWTJN.js';
6
6
  import './chunk-Q6E4OPGG.js';
7
7
  import './chunk-5ROTTMBL.js';
8
8
  import './chunk-C2FZBUSS.js';
@@ -13,8 +13,8 @@ import './chunk-S22FSH7C.js';
13
13
  import './chunk-L2V5PUFN.js';
14
14
  import './chunk-5TM3WPCI.js';
15
15
  import './chunk-GJWI74ZZ.js';
16
- import './chunk-3G7YABRA.js';
17
- import './chunk-727R7C5R.js';
18
- import './chunk-3EU6S5YC.js';
19
- import './chunk-Q72M5KBS.js';
16
+ import './chunk-3VSFOD2Z.js';
17
+ import './chunk-RBNHRZGD.js';
18
+ import './chunk-W7OPEMGJ.js';
19
+ import './chunk-5S7YTOCB.js';
20
20
  import './chunk-PKBMQBKP.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { getClientApiConfig } from './chunk-3G7YABRA.js';
3
- import { sonorFetch } from './chunk-727R7C5R.js';
4
- import './chunk-3EU6S5YC.js';
5
- import './chunk-Q72M5KBS.js';
2
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
3
+ import './chunk-RBNHRZGD.js';
4
+ import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
5
+ import './chunk-5S7YTOCB.js';
6
6
  import './chunk-PKBMQBKP.js';
7
7
  import React from 'react';
8
8
  import { jsxs, Fragment, jsx } 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-JC2VS2SB.js';
3
+ import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-44GVU5UH.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-TYAVHRWH.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-JC2VS2SB.js';
3
+ import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-44GVU5UH.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-TYAVHRWH.js';
@@ -1,6 +1,6 @@
1
- export { ManagedForm } from './chunk-GWP2VBFH.js';
2
- import './chunk-JC2VS2SB.js';
3
- import './chunk-YBAFUM3Z.js';
1
+ export { ManagedForm } from './chunk-J4KX2D3Q.js';
2
+ import './chunk-44GVU5UH.js';
3
+ import './chunk-JV5YWTJN.js';
4
4
  import './chunk-Q6E4OPGG.js';
5
5
  import './chunk-5ROTTMBL.js';
6
6
  import './chunk-C2FZBUSS.js';
@@ -12,8 +12,8 @@ import './chunk-NJCTQH2P.js';
12
12
  import './chunk-L2V5PUFN.js';
13
13
  import './chunk-5TM3WPCI.js';
14
14
  import './chunk-GJWI74ZZ.js';
15
- import './chunk-3G7YABRA.js';
16
- import './chunk-727R7C5R.js';
17
- import './chunk-3EU6S5YC.js';
18
- import './chunk-Q72M5KBS.js';
15
+ import './chunk-3VSFOD2Z.js';
16
+ import './chunk-RBNHRZGD.js';
17
+ import './chunk-W7OPEMGJ.js';
18
+ import './chunk-5S7YTOCB.js';
19
19
  import './chunk-PKBMQBKP.js';
@@ -1,21 +1,30 @@
1
- import { useForm } from './chunk-YBAFUM3Z.js';
1
+ import './chunk-BLCHQIWR.js';
2
+ import './chunk-J4KX2D3Q.js';
3
+ import './chunk-44GVU5UH.js';
4
+ import './chunk-SOD2F6C2.js';
5
+ import './chunk-YGGDU6C3.js';
6
+ import { useForm } from './chunk-JV5YWTJN.js';
2
7
  import './chunk-Q6E4OPGG.js';
3
8
  import './chunk-5ROTTMBL.js';
9
+ import './chunk-LEGMPX6N.js';
4
10
  import './chunk-C2FZBUSS.js';
11
+ import './chunk-YC7ELZS3.js';
12
+ import './chunk-DXO6SBMD.js';
13
+ import './chunk-TYAVHRWH.js';
5
14
  import './chunk-5SQK3D53.js';
6
15
  import './chunk-HW7B43E5.js';
7
16
  import './chunk-NJCTQH2P.js';
8
- import { NewsletterShell } from './chunk-SC4MZGWZ.js';
9
- import './chunk-GYF2ULVO.js';
17
+ import { NewsletterShell } from './chunk-JHTPHA2D.js';
18
+ import './chunk-DJAYFHVF.js';
10
19
  import './chunk-L2V5PUFN.js';
11
20
  import './chunk-5TM3WPCI.js';
12
21
  import './chunk-GJWI74ZZ.js';
13
- import './chunk-3G7YABRA.js';
14
- import './chunk-727R7C5R.js';
15
- import './chunk-3EU6S5YC.js';
16
- import './chunk-Q72M5KBS.js';
22
+ import './chunk-3VSFOD2Z.js';
23
+ import './chunk-RBNHRZGD.js';
24
+ import './chunk-W7OPEMGJ.js';
25
+ import './chunk-5S7YTOCB.js';
17
26
  import './chunk-PKBMQBKP.js';
18
- import { jsx } from 'react/jsx-runtime';
27
+ import { jsxs, jsx } from 'react/jsx-runtime';
19
28
 
20
29
  function ManagedNewsletterForm({
21
30
  formSlug,
@@ -26,6 +35,8 @@ function ManagedNewsletterForm({
26
35
  }) {
27
36
  const {
28
37
  form,
38
+ reload,
39
+ submissionResult,
29
40
  fetchError,
30
41
  allFields,
31
42
  values,
@@ -37,9 +48,12 @@ function ManagedNewsletterForm({
37
48
  } = useForm(formSlug, { trackAnalytics: true });
38
49
  if (fetchError) {
39
50
  console.warn(`[Articles] NewsletterWidget: form "${formSlug}" could not be loaded`, fetchError);
40
- return null;
51
+ return /* @__PURE__ */ jsxs("div", { role: "status", children: [
52
+ /* @__PURE__ */ jsx("p", { children: "Signup is temporarily unavailable." }),
53
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: reload, children: "Try again" })
54
+ ] });
41
55
  }
42
- if (!form) return null;
56
+ if (!form) return /* @__PURE__ */ jsx("p", { role: "status", children: "Loading signup\u2026" });
43
57
  const emailField = allFields.find((f) => f.field_type === "email") ?? allFields.find((f) => f.slug === "email") ?? allFields[0];
44
58
  if (!emailField) {
45
59
  console.warn(`[Articles] NewsletterWidget: form "${formSlug}" has no fields`);
@@ -58,7 +72,7 @@ function ManagedNewsletterForm({
58
72
  void submit();
59
73
  },
60
74
  status: isComplete ? "success" : isSubmitting ? "submitting" : submitError ? "error" : "idle",
61
- successMessage,
75
+ successMessage: submissionResult?.publicationEnrollment?.message || "Your signup request was received. Enrollment is being confirmed.",
62
76
  errorMessage: submitError
63
77
  }
64
78
  );
@@ -3,10 +3,12 @@ import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZKADJNR2.js'
3
3
  import { onPageLeave } from './chunk-L2V5PUFN.js';
4
4
  import './chunk-5TM3WPCI.js';
5
5
  import './chunk-GJWI74ZZ.js';
6
- import { getClientApiConfig } from './chunk-3G7YABRA.js';
7
- import { sonorFetch } from './chunk-727R7C5R.js';
8
- import { getFreshCredential, isSiteToken } from './chunk-3EU6S5YC.js';
9
- import './chunk-Q72M5KBS.js';
6
+ import { isPrivatePreview } from './chunk-DLM4FFNH.js';
7
+ import './chunk-EKBEOXTH.js';
8
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
9
+ import { getFreshCredential, isSiteToken } from './chunk-RBNHRZGD.js';
10
+ import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
11
+ import './chunk-5S7YTOCB.js';
10
12
  import './chunk-PKBMQBKP.js';
11
13
  import { useState, useRef, useEffect, useCallback } from 'react';
12
14
 
@@ -106,7 +108,7 @@ function SignalCore({
106
108
  return assignmentsRef.current.get(experimentId) || null;
107
109
  }, []);
108
110
  const fetchConfig = useCallback(async () => {
109
- if (!apiKey || !enabled) {
111
+ if (!apiKey || !enabled || isPrivatePreview()) {
110
112
  setLoading(false);
111
113
  return;
112
114
  }
@@ -141,7 +143,7 @@ function SignalCore({
141
143
  }
142
144
  }, [apiUrl, apiKey, enabled, experiments, resolvedVisitorId, loadExperimentAssignment]);
143
145
  const connectSSE = useCallback(() => {
144
- if (!apiKey || !enabled || !realtime) return;
146
+ if (!apiKey || !enabled || !realtime || isPrivatePreview()) return;
145
147
  if (eventSourceRef.current) {
146
148
  eventSourceRef.current.close();
147
149
  eventSourceRef.current = null;
@@ -198,6 +200,10 @@ function SignalCore({
198
200
  }
199
201
  }, [apiUrl, apiKey, enabled, realtime, loadExperimentAssignment]);
200
202
  const flushEvents = useCallback(async () => {
203
+ if (isPrivatePreview()) {
204
+ eventQueueRef.current = [];
205
+ return;
206
+ }
201
207
  if (eventQueueRef.current.length === 0) return;
202
208
  const events = [...eventQueueRef.current];
203
209
  eventQueueRef.current = [];
@@ -221,7 +227,7 @@ function SignalCore({
221
227
  }
222
228
  }, [apiUrl, apiKey]);
223
229
  const trackEvent = useCallback((event) => {
224
- if (!enabled || !apiKey) return;
230
+ if (!enabled || !apiKey || isPrivatePreview()) return;
225
231
  const enrichedEvent = {
226
232
  ...event,
227
233
  page_url: window.location.href,
@@ -250,7 +256,7 @@ function SignalCore({
250
256
  flushTimeoutRef.current = setTimeout(flushEvents, 1e3);
251
257
  }, [enabled, apiKey, flushEvents]);
252
258
  const trackOutcome = useCallback(async (outcome) => {
253
- if (!enabled || !apiKey) return;
259
+ if (!enabled || !apiKey || isPrivatePreview()) return;
254
260
  try {
255
261
  await sonorFetch(
256
262
  `${apiUrl}/api/public/signal/outcome`,
@@ -0,0 +1,6 @@
1
+ export { SiteChat } from './chunk-BLENFNBW.js';
2
+ import './chunk-27FISYK4.js';
3
+ import './chunk-DLM4FFNH.js';
4
+ import './chunk-EKBEOXTH.js';
5
+ import './chunk-W7OPEMGJ.js';
6
+ import './chunk-PKBMQBKP.js';
@@ -0,0 +1,12 @@
1
+ export { SiteDesignReporter } from './chunk-PEI6DRSK.js';
2
+ import './chunk-DKKYZLKR.js';
3
+ import './chunk-IHG36STL.js';
4
+ import './chunk-YC7ELZS3.js';
5
+ import './chunk-S22FSH7C.js';
6
+ import './chunk-DLM4FFNH.js';
7
+ import './chunk-EKBEOXTH.js';
8
+ import './chunk-3VSFOD2Z.js';
9
+ import './chunk-RBNHRZGD.js';
10
+ import './chunk-W7OPEMGJ.js';
11
+ import './chunk-5S7YTOCB.js';
12
+ import './chunk-PKBMQBKP.js';
@@ -1,13 +1,13 @@
1
- export { SitePopups } from './chunk-JBEUZJS3.js';
1
+ export { SitePopups } from './chunk-ITY4UZEJ.js';
2
2
  import './chunk-27FISYK4.js';
3
3
  import './chunk-5ROTTMBL.js';
4
4
  import './chunk-ZKADJNR2.js';
5
5
  import './chunk-5TM3WPCI.js';
6
6
  import './chunk-GJWI74ZZ.js';
7
- import './chunk-CAH4Y4PY.js';
7
+ import './chunk-DLM4FFNH.js';
8
8
  import './chunk-EKBEOXTH.js';
9
- import './chunk-3G7YABRA.js';
10
- import './chunk-727R7C5R.js';
11
- import './chunk-3EU6S5YC.js';
12
- import './chunk-Q72M5KBS.js';
9
+ import './chunk-3VSFOD2Z.js';
10
+ import './chunk-RBNHRZGD.js';
11
+ import './chunk-W7OPEMGJ.js';
12
+ import './chunk-5S7YTOCB.js';
13
13
  import './chunk-PKBMQBKP.js';
@@ -0,0 +1,9 @@
1
+ export { SitemapSync } from './chunk-HH2GOZTO.js';
2
+ import './chunk-YVKRYQRG.js';
3
+ import './chunk-DLM4FFNH.js';
4
+ import './chunk-EKBEOXTH.js';
5
+ import './chunk-3VSFOD2Z.js';
6
+ import './chunk-RBNHRZGD.js';
7
+ import './chunk-W7OPEMGJ.js';
8
+ import './chunk-5S7YTOCB.js';
9
+ import './chunk-PKBMQBKP.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- export { BookingWidget, BookingWidget_default as default } from '../chunk-66G47P5C.js';
3
- import '../chunk-XWIRU6UT.js';
4
- import '../chunk-3G7YABRA.js';
5
- import '../chunk-727R7C5R.js';
6
- import '../chunk-3EU6S5YC.js';
7
- import '../chunk-Q72M5KBS.js';
2
+ export { BookingWidget, BookingWidget_default as default } from '../chunk-QKOVP7WO.js';
3
+ import '../chunk-S6QDNXDK.js';
4
+ import '../chunk-3VSFOD2Z.js';
5
+ import '../chunk-RBNHRZGD.js';
6
+ import '../chunk-W7OPEMGJ.js';
7
+ import '../chunk-5S7YTOCB.js';
8
8
  import '../chunk-PKBMQBKP.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- export { TestimonialSection } from '../chunk-6CJGZFOU.js';
2
+ export { TestimonialSection } from '../chunk-A4MPHIVP.js';
3
3
  import '../chunk-CAT235HY.js';
4
- import '../chunk-NFRJTOTB.js';
4
+ import '../chunk-BSQP6PRA.js';
5
5
  import '../chunk-MH2DSGC6.js';
6
- import '../chunk-3G7YABRA.js';
6
+ import '../chunk-W7OPEMGJ.js';
7
7
  import '../chunk-PKBMQBKP.js';