@sonordev/site-kit 8.3.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 (100) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/agent-manifest.json +11 -5
  3. package/dist/{AnalyticsProvider-QXO33JUF.js → AnalyticsProvider-D6GWEJSB.js} +5 -5
  4. package/dist/{ArticleViewTracker-KN6ENIRS.js → ArticleViewTracker-YZ76HM64.js} +5 -5
  5. package/dist/{BlocksPopup-3RPN6YVJ.js → BlocksPopup-UJXZ4AXG.js} +5 -5
  6. package/dist/{ChatWidget-D2X445PO.js → ChatWidget-H4EOSH5I.js} +5 -5
  7. package/dist/{FileField-UNGSNGJ5.js → FileField-CKBYGCNT.js} +3 -3
  8. package/dist/{FormSpotlight-JFH2ENKQ.js → FormSpotlight-CGF5ZE6S.js} +1 -1
  9. package/dist/{FormStage-RC3WHHXP.js → FormStage-PQPUPQWW.js} +1 -1
  10. package/dist/{ManagedForm-FOQZ2IYG.js → ManagedForm-YOEZ7CFS.js} +6 -6
  11. package/dist/{ManagedNewsletterForm-NFNF33V3.js → ManagedNewsletterForm-EUWJ2HCA.js} +18 -13
  12. package/dist/{SignalCore-5KABGX5C.js → SignalCore-JZSU7A44.js} +13 -7
  13. package/dist/{SiteChat-JQ46ZIJ4.js → SiteChat-OAZH34W7.js} +2 -2
  14. package/dist/SiteDesignReporter-IWBMZJYU.js +12 -0
  15. package/dist/{SitePopups-WZBKX5Q3.js → SitePopups-MLAT35UN.js} +5 -5
  16. package/dist/SitemapSync-6KQLKFO2.js +9 -0
  17. package/dist/_client/booking-widget.js +5 -5
  18. package/dist/affiliates/index.js +3 -3
  19. package/dist/analytics/index.js +5 -5
  20. package/dist/analytics/publication-cta.d.ts +3 -0
  21. package/dist/{article-styles-7QONZJR5.js → article-styles-AOOVVKXH.js} +4 -2
  22. package/dist/articles/index.js +4 -4
  23. package/dist/articles/server-ui.js +54 -53
  24. package/dist/articles/server.js +4 -4
  25. package/dist/chat/index.js +7 -7
  26. package/dist/{chunk-OIWFXUVD.js → chunk-3VSFOD2Z.js} +2 -2
  27. package/dist/{chunk-DPSNMOMZ.js → chunk-44GVU5UH.js} +1 -1
  28. package/dist/{chunk-QCZHYO5M.js → chunk-4HYIDQJJ.js} +1 -1
  29. package/dist/{chunk-C2UROFGZ.js → chunk-5S7YTOCB.js} +1 -1
  30. package/dist/{chunk-LPKKSYKX.js → chunk-5TDZHIG6.js} +3 -3
  31. package/dist/{chunk-X4IJS7LV.js → chunk-BLCHQIWR.js} +1 -1
  32. package/dist/{chunk-E3UR37RX.js → chunk-BLENFNBW.js} +2 -2
  33. package/dist/{chunk-TT4JZDKM.js → chunk-DKKYZLKR.js} +3 -3
  34. package/dist/{chunk-JO76F5WP.js → chunk-DLM4FFNH.js} +5 -1
  35. package/dist/{chunk-2JMCBJM5.js → chunk-DS6LECIX.js} +1 -1
  36. package/dist/{chunk-SCTVADDL.js → chunk-HH2GOZTO.js} +2 -2
  37. package/dist/{chunk-GKJVSZ7H.js → chunk-ITY4UZEJ.js} +3 -3
  38. package/dist/{chunk-XLAXYPTK.js → chunk-J4KX2D3Q.js} +3 -3
  39. package/dist/{chunk-BOCYBDKV.js → chunk-JCSU6EJI.js} +1 -1
  40. package/dist/{chunk-LBDWAXAO.js → chunk-JHTPHA2D.js} +5 -2
  41. package/dist/{chunk-MQ4REMTH.js → chunk-JV5YWTJN.js} +12 -3
  42. package/dist/{chunk-QDILCQBL.js → chunk-KASKB7UK.js} +11 -10
  43. package/dist/{chunk-5RYSTKVU.js → chunk-LEGMPX6N.js} +1 -1
  44. package/dist/{chunk-WSOZ3FQN.js → chunk-LPVEBQVL.js} +1 -1
  45. package/dist/{chunk-EA6FZMYA.js → chunk-MTV5LYXN.js} +31 -2
  46. package/dist/{chunk-U7Y3QG3A.js → chunk-MZX4EN6Z.js} +1 -1
  47. package/dist/{chunk-3OY52UFM.js → chunk-OKITZFML.js} +1 -1
  48. package/dist/{chunk-QBCWVT2S.js → chunk-PEI6DRSK.js} +2 -2
  49. package/dist/{chunk-HND6BDXC.js → chunk-QD73RO67.js} +2 -2
  50. package/dist/{chunk-4PVMUPC6.js → chunk-QKOVP7WO.js} +1 -1
  51. package/dist/{chunk-C4AFNZT2.js → chunk-RBNHRZGD.js} +1 -1
  52. package/dist/{chunk-WBUG7XRL.js → chunk-S6QDNXDK.js} +1 -1
  53. package/dist/{chunk-KJVUOJMW.js → chunk-TY6WNQO3.js} +150 -67
  54. package/dist/{chunk-SNRE3ZVZ.js → chunk-UVYUTBT4.js} +11 -1
  55. package/dist/{chunk-FHUTOXS7.js → chunk-XENW66OF.js} +1 -1
  56. package/dist/{chunk-IEGDPRQB.js → chunk-XI2XM7UG.js} +1 -1
  57. package/dist/{chunk-NA4Z4CQG.js → chunk-YM5KMNTU.js} +1 -1
  58. package/dist/client/index.js +4 -4
  59. package/dist/fleet/index.js +5 -5
  60. package/dist/forms/index.js +8 -8
  61. package/dist/forms/server.js +2 -2
  62. package/dist/forms/types.d.ts +5 -0
  63. package/dist/forms/useForm.d.ts +4 -0
  64. package/dist/images/index.js +4 -4
  65. package/dist/index.js +1 -1
  66. package/dist/layout/client.js +8 -8
  67. package/dist/layout/index.js +9 -9
  68. package/dist/llms/index.js +4 -4
  69. package/dist/maps/index.js +3 -3
  70. package/dist/mcp/sonor.d.ts +4 -0
  71. package/dist/mcp/sonor.js +33 -16
  72. package/dist/press-kit/articles/artwork.d.ts +3 -0
  73. package/dist/press-kit/articles/index.d.ts +1 -0
  74. package/dist/press-kit/articles/news-sitemap.d.ts +4 -10
  75. package/dist/press-kit/articles/public-reads.d.ts +18 -2
  76. package/dist/press-kit/articles/publication-definition.d.ts +41 -0
  77. package/dist/press-kit/articles/publication-reads.d.ts +54 -0
  78. package/dist/press-kit/articles/server-core.d.ts +21 -3
  79. package/dist/press-kit/articles/types.d.ts +23 -0
  80. package/dist/revalidate/index.js +2 -2
  81. package/dist/runtime/index.js +3 -3
  82. package/dist/seo/client.js +5 -5
  83. package/dist/seo/index.js +5 -5
  84. package/dist/seo/llms.js +4 -4
  85. package/dist/seo/register-sitemap-cli.js +1 -1
  86. package/dist/seo/sitemap.js +2 -2
  87. package/dist/server/index.js +2 -2
  88. package/dist/shared/reporting-gate.d.ts +2 -0
  89. package/dist/shared/version.d.ts +1 -1
  90. package/dist/signal/index.js +2 -2
  91. package/dist/sitemap/index.js +2 -2
  92. package/dist/sync/index.js +5 -5
  93. package/dist/website/images.js +4 -4
  94. package/dist/website/index.js +6 -6
  95. package/dist/website/popups.js +5 -5
  96. package/dist/{writeLLMsTxt-VKHCM5IS.js → writeLLMsTxt-N4Y4YC2H.js} +1 -1
  97. package/package.json +1 -1
  98. package/dist/SiteDesignReporter-N7L6DR4J.js +0 -12
  99. package/dist/SitemapSync-GY6UADRI.js +0 -9
  100. /package/dist/{chunk-D6ZIQMHB.js → chunk-CE7VPAEH.js} +0 -0
@@ -2,17 +2,17 @@ import { readingTimeMinutes, ServiceCallouts, ClusterNavigation, getAuthorSocial
2
2
  export { ClusterNavigation } from '../chunk-BC7JMY4Z.js';
3
3
  import { widgetStyle, widgetTitleStyle } from '../chunk-DJAYFHVF.js';
4
4
  import { resolvePublicationSiteUrl, addExternalLinkTargets } from '../chunk-5D7ZISUP.js';
5
- import { fetchArticleBySlug, fetchRelatedArticles, fetchArticleCategories, getTopicCluster } from '../chunk-KJVUOJMW.js';
5
+ import { fetchArticleBySlug, fetchRelatedArticles, fetchArticleCategories, getTopicCluster, ArticleUnavailableError } from '../chunk-TY6WNQO3.js';
6
6
  import { insertArticlePhotos } from '../chunk-M5SF7NCC.js';
7
7
  export { articlePhotoCss, insertArticlePhotos } from '../chunk-M5SF7NCC.js';
8
8
  export { articleTableCss, wrapArticleTables } from '../chunk-E4PTMORJ.js';
9
- import { resolveArticleArtwork, articleArtworkImageStyle } from '../chunk-SNRE3ZVZ.js';
10
- export { resolveArticleArtwork } from '../chunk-SNRE3ZVZ.js';
9
+ import { resolveArticleArtwork, articleArtworkImageStyle } from '../chunk-UVYUTBT4.js';
10
+ export { resolveArticleArtwork } from '../chunk-UVYUTBT4.js';
11
11
  import '../chunk-H72ZFO3F.js';
12
12
  import { createPublicationRoutes, articleCategorySlug } from '../chunk-4K735O3J.js';
13
13
  export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-4K735O3J.js';
14
14
  import '../chunk-34ZYJTQR.js';
15
- import '../chunk-WSOZ3FQN.js';
15
+ import '../chunk-LPVEBQVL.js';
16
16
  import '../chunk-UAYAJPEP.js';
17
17
  import '../chunk-VWWITFWM.js';
18
18
  import '../chunk-4KZ6W3ZH.js';
@@ -24,7 +24,7 @@ import '../chunk-YVKRYQRG.js';
24
24
  import '../chunk-FESKKJAS.js';
25
25
  import '../chunk-A4CC4ZG3.js';
26
26
  import '../chunk-W7OPEMGJ.js';
27
- import '../chunk-C2UROFGZ.js';
27
+ import '../chunk-5S7YTOCB.js';
28
28
  import '../chunk-PKBMQBKP.js';
29
29
  import 'server-only';
30
30
  import { marked } from 'marked';
@@ -118,7 +118,7 @@ async function Article({
118
118
  }
119
119
  const [post, { articleCss }, { wrapArticleTables: wrapArticleTables2 }] = await Promise.all([
120
120
  fetchArticleBySlug({ apiUrl, apiKey, site }, slug),
121
- unstyled ? Promise.resolve({ articleCss: "" }) : import('../article-styles-7QONZJR5.js'),
121
+ unstyled ? Promise.resolve({ articleCss: "" }) : import('../article-styles-AOOVVKXH.js'),
122
122
  import('../article-tables-6XHVULPU.js')
123
123
  ]);
124
124
  if (!post) {
@@ -144,7 +144,7 @@ async function Article({
144
144
  ...item,
145
145
  answer: addExternalLinkTargets(item.answer || "", siteUrlResolved)
146
146
  })) ?? faqRaw;
147
- const { ArticleViewTracker } = await import('../ArticleViewTracker-KN6ENIRS.js');
147
+ const { ArticleViewTracker } = await import('../ArticleViewTracker-YZ76HM64.js');
148
148
  if (children) {
149
149
  return /* @__PURE__ */ jsxs(Fragment, { children: [
150
150
  /* @__PURE__ */ jsx(ArticleViewTracker, { slug: post.slug, site }),
@@ -219,6 +219,14 @@ async function Article({
219
219
  )) })
220
220
  ] })
221
221
  ] }),
222
+ post.editorial_verification?.note && /* @__PURE__ */ jsxs("aside", { className: "sk-article-verification", "aria-label": "Editorial verification", children: [
223
+ /* @__PURE__ */ jsx("h2", { children: "Editorial verification" }),
224
+ /* @__PURE__ */ jsx("p", { children: post.editorial_verification.note }),
225
+ post.editorial_verification.reviewedAt && /* @__PURE__ */ jsxs("p", { children: [
226
+ "Reviewed ",
227
+ /* @__PURE__ */ jsx("time", { dateTime: post.editorial_verification.reviewedAt, children: new Date(post.editorial_verification.reviewedAt).toLocaleDateString("en-US", { timeZone: "UTC" }) })
228
+ ] })
229
+ ] }),
222
230
  post.tags && post.tags.length > 0 && /* @__PURE__ */ jsx("div", { className: cls(unstyled, styles, "tags", "sk-article-tags"), children: post.tags.map((tag, index) => {
223
231
  const tagName = typeof tag === "string" ? tag : tag?.name || "";
224
232
  return /* @__PURE__ */ jsxs("a", { href: `${routes.index}?tag=${encodeURIComponent(tagName)}`, className: cls(unstyled, styles, "tag", "sk-article-tag"), children: [
@@ -226,6 +234,10 @@ async function Article({
226
234
  tagName
227
235
  ] }, `${tagName}-${index}`);
228
236
  }) }),
237
+ post.publication_cta?.label && post.publication_cta.goal && /^(?:https?:\/\/|\/(?!\/))/.test(post.publication_cta.url) && /* @__PURE__ */ jsx("aside", { className: "sk-article-publication-cta", "aria-label": "Next step", children: /* @__PURE__ */ jsxs("a", { href: post.publication_cta.url, "data-sk-article-id": post.id, "data-sk-article-goal": post.publication_cta.goal, style: { display: "inline-flex", alignItems: "center", minHeight: 44, padding: "12px 20px", color: "var(--sk-primary)", border: "1px solid currentColor", borderRadius: 8 }, children: [
238
+ post.publication_cta.label,
239
+ " \u2192"
240
+ ] }) }),
229
241
  /* @__PURE__ */ jsx(
230
242
  ServiceCallouts,
231
243
  {
@@ -358,12 +370,12 @@ async function fetchArticleList(params) {
358
370
  next: { revalidate: 60 }
359
371
  });
360
372
  if (!response.ok) {
361
- console.error("[Articles] Failed to fetch posts:", response.statusText);
362
- return emptyResult();
373
+ throw new ArticleUnavailableError(response.status);
363
374
  }
364
375
  const data = await response.json();
376
+ if (!Array.isArray(data.posts)) throw new ArticleUnavailableError();
365
377
  return {
366
- posts: data.posts || [],
378
+ posts: data.posts,
367
379
  pagination: {
368
380
  page: data.pagination?.page || 1,
369
381
  perPage: data.pagination?.per_page || 12,
@@ -374,13 +386,9 @@ async function fetchArticleList(params) {
374
386
  }
375
387
  };
376
388
  } catch (error) {
377
- console.error("[Articles] Error fetching posts:", error);
378
- return emptyResult();
389
+ throw error instanceof ArticleUnavailableError ? error : new ArticleUnavailableError();
379
390
  }
380
391
  }
381
- function emptyResult() {
382
- return { posts: [], pagination: { page: 1, perPage: 12, total: 0, totalPages: 0, hasNext: false, hasPrev: false } };
383
- }
384
392
  function cls2(unstyled, styles, key, defaultClass, extra) {
385
393
  if (unstyled) return styles[key] || void 0;
386
394
  const base = styles[key] || defaultClass;
@@ -418,7 +426,7 @@ async function ArticleList({
418
426
  const [articleData, categories, { articleListCss }] = await Promise.all([
419
427
  fetchArticleList({ apiUrl, apiKey, category, tag, author, featured, search, cluster, page, perPage, orderBy, order, site }),
420
428
  showCategoryFilter ? fetchArticleCategories({ apiUrl, apiKey, site }) : Promise.resolve([]),
421
- unstyled || children ? Promise.resolve({ articleListCss: "" }) : import('../article-styles-7QONZJR5.js')
429
+ unstyled || children ? Promise.resolve({ articleListCss: "" }) : import('../article-styles-AOOVVKXH.js')
422
430
  ]);
423
431
  if (children) {
424
432
  return children({ posts: articleData.posts, pagination: articleData.pagination, categories });
@@ -952,6 +960,9 @@ async function PublicationLayout({
952
960
  }) {
953
961
  const hasSidebar = showSidebar && layout !== "full-width";
954
962
  return /* @__PURE__ */ jsxs("div", { className, children: [
963
+ /* @__PURE__ */ jsx("style", { children: `.sk-publication-columns { display:grid; gap:48px; grid-template-columns:minmax(0,1fr) 300px; }
964
+ .sk-publication-columns--left { grid-template-columns:300px minmax(0,1fr); }
965
+ @media(max-width:800px) { .sk-publication-columns, .sk-publication-columns--left { grid-template-columns:minmax(0,1fr); gap:32px; } .sk-publication-columns--left > main { grid-row:1; } }` }),
955
966
  hero && /* @__PURE__ */ jsx(
956
967
  "section",
957
968
  {
@@ -999,43 +1010,33 @@ async function PublicationLayout({
999
1010
  margin: "0 auto",
1000
1011
  padding: "40px 20px"
1001
1012
  },
1002
- children: /* @__PURE__ */ jsxs(
1003
- "div",
1004
- {
1005
- style: {
1006
- display: hasSidebar ? "grid" : "block",
1007
- gridTemplateColumns: hasSidebar ? layout === "sidebar-left" ? "300px 1fr" : "1fr 300px" : void 0,
1008
- gap: 48
1009
- },
1010
- children: [
1011
- hasSidebar && layout === "sidebar-left" && /* @__PURE__ */ jsx(
1012
- PublicationSidebar,
1013
- {
1014
- apiUrl,
1015
- apiKey,
1016
- site,
1017
- basePath,
1018
- routing,
1019
- currentCategory,
1020
- ...sidebarProps
1021
- }
1022
- ),
1023
- /* @__PURE__ */ jsx("main", { style: { minWidth: 0 }, children }),
1024
- hasSidebar && layout === "sidebar-right" && /* @__PURE__ */ jsx(
1025
- PublicationSidebar,
1026
- {
1027
- apiUrl,
1028
- apiKey,
1029
- site,
1030
- basePath,
1031
- routing,
1032
- currentCategory,
1033
- ...sidebarProps
1034
- }
1035
- )
1036
- ]
1037
- }
1038
- )
1013
+ children: /* @__PURE__ */ jsxs("div", { className: hasSidebar ? `sk-publication-columns${layout === "sidebar-left" ? " sk-publication-columns--left" : ""}` : void 0, children: [
1014
+ hasSidebar && layout === "sidebar-left" && /* @__PURE__ */ jsx(
1015
+ PublicationSidebar,
1016
+ {
1017
+ apiUrl,
1018
+ apiKey,
1019
+ site,
1020
+ basePath,
1021
+ routing,
1022
+ currentCategory,
1023
+ ...sidebarProps
1024
+ }
1025
+ ),
1026
+ /* @__PURE__ */ jsx("main", { style: { minWidth: 0 }, children }),
1027
+ hasSidebar && layout === "sidebar-right" && /* @__PURE__ */ jsx(
1028
+ PublicationSidebar,
1029
+ {
1030
+ apiUrl,
1031
+ apiKey,
1032
+ site,
1033
+ basePath,
1034
+ routing,
1035
+ currentCategory,
1036
+ ...sidebarProps
1037
+ }
1038
+ )
1039
+ ] })
1039
1040
  }
1040
1041
  )
1041
1042
  ] });
@@ -1,11 +1,11 @@
1
- export { FEED_DEFAULT_ITEMS, NEWS_SITEMAP_MAX_URLS, NEWS_SITEMAP_WINDOW_MS, SEO_LIMITS, buildNewsSitemapXml, cdata, generateAllArticleSchemas, generateArticleCategoryMetadata, generateArticleListSchema, generateArticleMetadata, generateArticleSchema, generateArticleSitemap, generateArticleStaticParams, generateAtomFeed, generateAuthorPageMetadata, generateAuthorStaticParams, generateBreadcrumbSchema, generateCategoryStaticParams, generateClusterArticleSchema, generateClusterBreadcrumbSchema, generateClusterItemListSchema, generateClusterLandingSchema, generateClusterPageMetadata, generateFaqSchema, generateHowToSchema, generateNewsSitemap, generatePublicationMetadata, generateRssFeed, getAllArticleSlugs, getAllArticles, getAllAuthorSlugs, getArticle, getArticleCategories, getAuthorBySlug, getAuthorPosts, getClusterNavigation, getPostsByCategory, getRelatedInsights, getTopicCluster, getTopicClusters, recentNewsPosts, requireArticle, sanitizeExcerpt, validateArticleSeo, validateMetaDescription, validateSeoTitle } from '../chunk-KJVUOJMW.js';
1
+ export { ArticleUnavailableError, FEED_DEFAULT_ITEMS, NEWS_SITEMAP_MAX_URLS, NEWS_SITEMAP_WINDOW_MS, PUBLICATION_PREVIEW_COOKIE, PUBLICATION_PREVIEW_HEADERS, SEO_LIMITS, buildNewsSitemapXml, cdata, createPublicationPreviewHandler, generateAllArticleSchemas, generateArticleCategoryMetadata, generateArticleListSchema, generateArticleMetadata, generateArticleSchema, generateArticleSitemap, generateArticleStaticParams, generateAtomFeed, generateAuthorPageMetadata, generateAuthorStaticParams, generateBreadcrumbSchema, generateCategoryStaticParams, generateClusterArticleSchema, generateClusterBreadcrumbSchema, generateClusterItemListSchema, generateClusterLandingSchema, generateClusterPageMetadata, generateFaqSchema, generateHowToSchema, generateNewsSitemap, generatePublicationMetadata, generateRssFeed, getAllArticleSlugs, getAllArticles, getAllAuthorSlugs, getArticle, getArticleCategories, getArticlePreview, getArticleResult, getAuthorBySlug, getAuthorPosts, getClusterNavigation, getPostsByCategory, getPublicationIssue, getPublicationIssues, getRelatedInsights, getTopicCluster, getTopicClusters, recentNewsPosts, requireArticle, sanitizeExcerpt, validateArticleSeo, validateMetaDescription, validateSeoTitle } from '../chunk-TY6WNQO3.js';
2
2
  export { articlePhotoCss, insertArticlePhotos } from '../chunk-M5SF7NCC.js';
3
3
  export { articleTableCss, wrapArticleTables } from '../chunk-E4PTMORJ.js';
4
- export { authorEntityId, generateArticleAuthorNode, generateAuthorPersonSchema, generateAuthorSchema, resolveArticleArtwork, withArticleAuthorIdentity } from '../chunk-SNRE3ZVZ.js';
4
+ export { articleImageSchema, authorEntityId, generateArticleAuthorNode, generateAuthorPersonSchema, generateAuthorSchema, resolveArticleArtwork, resolveRepresentativeImage, withArticleAuthorIdentity } from '../chunk-UVYUTBT4.js';
5
5
  import '../chunk-H72ZFO3F.js';
6
6
  export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-4K735O3J.js';
7
7
  import '../chunk-34ZYJTQR.js';
8
- import '../chunk-WSOZ3FQN.js';
8
+ import '../chunk-LPVEBQVL.js';
9
9
  import '../chunk-UAYAJPEP.js';
10
10
  import '../chunk-VWWITFWM.js';
11
11
  import '../chunk-4KZ6W3ZH.js';
@@ -17,5 +17,5 @@ import '../chunk-YVKRYQRG.js';
17
17
  import '../chunk-FESKKJAS.js';
18
18
  import '../chunk-A4CC4ZG3.js';
19
19
  import '../chunk-W7OPEMGJ.js';
20
- import '../chunk-C2UROFGZ.js';
20
+ import '../chunk-5S7YTOCB.js';
21
21
  import '../chunk-PKBMQBKP.js';
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-HND6BDXC.js';
3
- export { SiteChat } from '../chunk-E3UR37RX.js';
2
+ export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-QD73RO67.js';
3
+ export { SiteChat } from '../chunk-BLENFNBW.js';
4
4
  import '../chunk-6T6CQVNL.js';
5
5
  import '../chunk-JE4A5S4F.js';
6
6
  import '../chunk-27FISYK4.js';
7
- import '../chunk-MQ4REMTH.js';
7
+ import '../chunk-JV5YWTJN.js';
8
8
  import '../chunk-Q6E4OPGG.js';
9
9
  import '../chunk-5ROTTMBL.js';
10
10
  import '../chunk-C2FZBUSS.js';
@@ -15,12 +15,12 @@ import '../chunk-S22FSH7C.js';
15
15
  import '../chunk-L2V5PUFN.js';
16
16
  import '../chunk-5TM3WPCI.js';
17
17
  import '../chunk-GJWI74ZZ.js';
18
- import '../chunk-JO76F5WP.js';
18
+ import '../chunk-DLM4FFNH.js';
19
19
  import '../chunk-EKBEOXTH.js';
20
- import '../chunk-OIWFXUVD.js';
21
- import '../chunk-C4AFNZT2.js';
20
+ import '../chunk-3VSFOD2Z.js';
21
+ import '../chunk-RBNHRZGD.js';
22
22
  import '../chunk-W7OPEMGJ.js';
23
- import '../chunk-C2UROFGZ.js';
23
+ import '../chunk-5S7YTOCB.js';
24
24
  import '../chunk-PKBMQBKP.js';
25
25
 
26
26
  // src/chat/echo-config.ts
@@ -1,5 +1,5 @@
1
- import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-C4AFNZT2.js';
2
- import { SITE_KIT_VERSION } from './chunk-C2UROFGZ.js';
1
+ import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-RBNHRZGD.js';
2
+ import { SITE_KIT_VERSION } from './chunk-5S7YTOCB.js';
3
3
 
4
4
  // src/shared/fetchWithRetry.ts
5
5
  function backoffDelay(attempt, response) {
@@ -26,7 +26,7 @@ function useFieldControls(fields) {
26
26
  }
27
27
  if (needsFile && !requested.current.file) {
28
28
  requested.current.file = true;
29
- import('./FileField-UNGSNGJ5.js').then((m) => {
29
+ import('./FileField-CKBYGCNT.js').then((m) => {
30
30
  if (!cancelled) setControls((prev) => ({ ...prev, File: m.FileField }));
31
31
  }).catch(() => {
32
32
  requested.current.file = false;
@@ -54,7 +54,7 @@ function useSignal() {
54
54
  return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
55
55
  }
56
56
  var LazySignalCore = dynamic(
57
- () => import('./SignalCore-5KABGX5C.js').then((m) => ({ default: m.SignalCore })),
57
+ () => import('./SignalCore-JZSU7A44.js').then((m) => ({ default: m.SignalCore })),
58
58
  { ssr: false }
59
59
  );
60
60
  function SignalBridge({
@@ -1,4 +1,4 @@
1
1
  // src/shared/version.ts
2
- var SITE_KIT_VERSION = "8.3.0";
2
+ var SITE_KIT_VERSION = "8.4.0";
3
3
 
4
4
  export { SITE_KIT_VERSION };
@@ -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-JO76F5WP.js';
5
- import { sonorFetch } from './chunk-OIWFXUVD.js';
6
- import { SITE_KIT_VERSION } from './chunk-C2UROFGZ.js';
4
+ import { resolveAnalyticsTarget } from './chunk-DLM4FFNH.js';
5
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
6
+ import { SITE_KIT_VERSION } from './chunk-5S7YTOCB.js';
7
7
  import { useRef, useEffect } from 'react';
8
8
 
9
9
  // src/fleet/heartbeat.ts
@@ -1,4 +1,4 @@
1
- import { sonorFetch } from './chunk-OIWFXUVD.js';
1
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
2
2
  import { readPublishedApiConfig } from './chunk-W7OPEMGJ.js';
3
3
 
4
4
  // src/forms/formsApi.ts
@@ -1,13 +1,13 @@
1
1
  'use client';
2
2
  import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
3
- import { resolveAnalyticsTarget } from './chunk-JO76F5WP.js';
3
+ import { resolveAnalyticsTarget } from './chunk-DLM4FFNH.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-D2X445PO.js').then((m) => ({ default: m.ChatWidget })),
10
+ () => import('./ChatWidget-H4EOSH5I.js').then((m) => ({ default: m.ChatWidget })),
11
11
  { ssr: false }
12
12
  );
13
13
  function SiteChat(props) {
@@ -1,8 +1,8 @@
1
1
  import { toHexColor, normalizeDesignTokens, designTokensHash } from './chunk-IHG36STL.js';
2
2
  import { contrastRatio, parseColor, relativeLuminance } from './chunk-S22FSH7C.js';
3
- import { resolveAnalyticsTarget } from './chunk-JO76F5WP.js';
4
- import { sonorFetch } from './chunk-OIWFXUVD.js';
5
- import { SITE_KIT_VERSION } from './chunk-C2UROFGZ.js';
3
+ import { resolveAnalyticsTarget } from './chunk-DLM4FFNH.js';
4
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
5
+ import { SITE_KIT_VERSION } from './chunk-5S7YTOCB.js';
6
6
 
7
7
  // src/website/design.ts
8
8
  var SITE_DESIGN_PATH = "/api/public/site/design";
@@ -46,8 +46,12 @@ function announceFrameReady() {
46
46
  }
47
47
 
48
48
  // src/shared/reporting-gate.ts
49
+ function isPrivatePreview() {
50
+ return typeof document !== "undefined" && !!document.querySelector("[data-sk-private-preview]");
51
+ }
49
52
  var announcedSuppression = false;
50
53
  function resolveAnalyticsTarget(options = {}) {
54
+ if (isPrivatePreview()) return null;
51
55
  const config = typeof window === "undefined" ? void 0 : window;
52
56
  const published = readPublishedApiConfig();
53
57
  const apiUrl = options.apiUrl || published.apiUrl || DEFAULT_SONOR_API_URL;
@@ -66,4 +70,4 @@ function resolveAnalyticsTarget(options = {}) {
66
70
  return { apiUrl, apiKey };
67
71
  }
68
72
 
69
- export { announceFrameReady, isCrossOriginFrame, isFramed, isTopFrameSameOrigin, resolveAnalyticsTarget };
73
+ export { announceFrameReady, isCrossOriginFrame, isFramed, isPrivatePreview, isTopFrameSameOrigin, resolveAnalyticsTarget };
@@ -1,4 +1,4 @@
1
- import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-D6ZIQMHB.js';
1
+ import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-CE7VPAEH.js';
2
2
  import { createHash } from 'crypto';
3
3
  import { existsSync, readFileSync } from 'fs';
4
4
  import { join } from 'path';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { locToPath, isMalformedSitemapPath, inferPageType } from './chunk-YVKRYQRG.js';
3
- import { resolveAnalyticsTarget } from './chunk-JO76F5WP.js';
4
- import { sonorFetch } from './chunk-OIWFXUVD.js';
3
+ import { resolveAnalyticsTarget } from './chunk-DLM4FFNH.js';
4
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
5
5
  import { useRef, useEffect } from 'react';
6
6
 
7
7
  var SYNC_STAMP_KEY = "_sk_sitemap_synced_at";
@@ -2,8 +2,8 @@
2
2
  import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
3
3
  import { readAnalyticsIdentity } from './chunk-5ROTTMBL.js';
4
4
  import { getOrCreateVisitorId } from './chunk-ZKADJNR2.js';
5
- import { resolveAnalyticsTarget } from './chunk-JO76F5WP.js';
6
- import { sonorFetch } from './chunk-OIWFXUVD.js';
5
+ import { resolveAnalyticsTarget } from './chunk-DLM4FFNH.js';
6
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
7
7
  import { useState, useEffect, useCallback, useRef } from 'react';
8
8
  import ReactDOM from 'react-dom';
9
9
  import dynamic from 'next/dynamic';
@@ -161,7 +161,7 @@ function activatePopup(active, id, popups) {
161
161
  return [...active, id];
162
162
  }
163
163
  var LazyBlocksPopup = dynamic(
164
- () => import('./BlocksPopup-3RPN6YVJ.js').then((m) => ({ default: m.BlocksPopup })),
164
+ () => import('./BlocksPopup-UJXZ4AXG.js').then((m) => ({ default: m.BlocksPopup })),
165
165
  { ssr: false }
166
166
  );
167
167
  function SitePopups(props) {
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { countStageViews, countStageQuestions, useFieldControls } from './chunk-DPSNMOMZ.js';
3
- import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-MQ4REMTH.js';
2
+ import { countStageViews, countStageQuestions, useFieldControls } from './chunk-44GVU5UH.js';
3
+ import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-JV5YWTJN.js';
4
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
5
5
  import { isFieldVisible, validateField, isFieldComplete, isDisplayOnly, unseenControlValues } from './chunk-C2FZBUSS.js';
6
6
  import { HoneypotField } from './chunk-DXO6SBMD.js';
@@ -63,7 +63,7 @@ function FormClient({
63
63
  return;
64
64
  }
65
65
  let cancelled = false;
66
- const load = resolvedExperience === "stage" ? import('./FormStage-RC3WHHXP.js').then((m) => m.FormStage) : import('./FormSpotlight-JFH2ENKQ.js').then((m) => m.FormSpotlight);
66
+ const load = resolvedExperience === "stage" ? import('./FormStage-PQPUPQWW.js').then((m) => m.FormStage) : import('./FormSpotlight-CGF5ZE6S.js').then((m) => m.FormSpotlight);
67
67
  load.then((Component) => {
68
68
  if (!cancelled) setExperience(() => Component);
69
69
  }).catch((err) => {
@@ -1,4 +1,4 @@
1
- import { writeLLMsTxtToPublic } from './chunk-D6ZIQMHB.js';
1
+ import { writeLLMsTxtToPublic } from './chunk-CE7VPAEH.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';
@@ -16,7 +16,7 @@ function NewsletterShell({
16
16
  /* @__PURE__ */ jsx("h4", { style: { ...widgetTitleStyle, color: "var(--sk-primary)" }, children: title }),
17
17
  status === "success" ? /* @__PURE__ */ jsx("p", { style: { fontSize: 14, color: "var(--sk-text-secondary)", margin: 0 }, children: successMessage }) : /* @__PURE__ */ jsxs(Fragment, { children: [
18
18
  /* @__PURE__ */ jsx("p", { style: { fontSize: 14, color: "var(--sk-text-secondary)", marginBottom: 16 }, children: description }),
19
- /* @__PURE__ */ jsxs("form", { onSubmit: onFormSubmit, style: { display: "flex", gap: 8 }, children: [
19
+ /* @__PURE__ */ jsxs("form", { onSubmit: onFormSubmit, style: { display: "flex", flexWrap: "wrap", gap: 8 }, children: [
20
20
  /* @__PURE__ */ jsx(
21
21
  "input",
22
22
  {
@@ -28,7 +28,9 @@ function NewsletterShell({
28
28
  onChange: (e) => onEmailChange(e.target.value),
29
29
  disabled: status === "submitting",
30
30
  style: {
31
- flex: 1,
31
+ flex: "1 1 180px",
32
+ minWidth: 0,
33
+ minHeight: 44,
32
34
  padding: "10px 12px",
33
35
  border: "1px solid var(--sk-border)",
34
36
  borderRadius: 8,
@@ -42,6 +44,7 @@ function NewsletterShell({
42
44
  type: "submit",
43
45
  disabled: status === "submitting",
44
46
  style: {
47
+ minHeight: 44,
45
48
  padding: "10px 16px",
46
49
  backgroundColor: "var(--sk-primary)",
47
50
  color: "var(--sk-bg)",
@@ -6,7 +6,7 @@ import { normalizeFormConfig, DEFAULT_FORM_SUCCESS_MESSAGE } from './chunk-5SQK3
6
6
  import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
7
7
  import { onPageLeave } from './chunk-L2V5PUFN.js';
8
8
  import { uuid } from './chunk-GJWI74ZZ.js';
9
- import { sonorFetch, sonorBeacon } from './chunk-OIWFXUVD.js';
9
+ import { sonorFetch, sonorBeacon } from './chunk-3VSFOD2Z.js';
10
10
  import { readPublishedApiConfig, getClientApiConfig } from './chunk-W7OPEMGJ.js';
11
11
  import { useRef, useCallback, useEffect, useState, useMemo } from 'react';
12
12
 
@@ -632,6 +632,7 @@ async function submitForm({
632
632
  }
633
633
  function submitResult(receipt, values) {
634
634
  const r = receipt && typeof receipt === "object" ? receipt : {};
635
+ const enrollment = r.publicationEnrollment;
635
636
  const id = typeof r.submissionId === "string" ? r.submissionId : typeof r.id === "string" ? r.id : "";
636
637
  return {
637
638
  success: r.success !== false,
@@ -639,6 +640,7 @@ function submitResult(receipt, values) {
639
640
  submissionId: id,
640
641
  message: typeof r.message === "string" ? r.message : void 0,
641
642
  redirectUrl: typeof r.redirectUrl === "string" ? r.redirectUrl : null,
643
+ ...enrollment?.status === "accepted" && typeof enrollment.message === "string" ? { publicationEnrollment: { status: "accepted", message: enrollment.message } } : {},
642
644
  data: { ...values }
643
645
  };
644
646
  }
@@ -689,6 +691,9 @@ function useForm(formIdOrSlug, options = {}) {
689
691
  const [step, setStep] = useState(1);
690
692
  const [isSubmitting, setIsSubmitting] = useState(false);
691
693
  const [isComplete, setIsComplete] = useState(false);
694
+ const [reloadVersion, setReloadVersion] = useState(0);
695
+ const [submissionResult, setSubmissionResult] = useState(null);
696
+ const reload = useCallback(() => setReloadVersion((value) => value + 1), []);
692
697
  const [submitError, setSubmitError] = useState(null);
693
698
  const isSubmittingRef = useRef(false);
694
699
  const formLoadedAt = useFormLoadedAt();
@@ -696,7 +701,7 @@ function useForm(formIdOrSlug, options = {}) {
696
701
  const isMultiStep = form?.is_multi_step || false;
697
702
  useEffect(() => {
698
703
  const initialMatches = initialForm && (initialForm.slug === formIdOrSlug || initialForm.id === formIdOrSlug);
699
- if (initialMatches) {
704
+ if (initialMatches && reloadVersion === 0) {
700
705
  const siteKey = initialForm.recaptcha_site_key;
701
706
  if (typeof window !== "undefined" && siteKey) {
702
707
  window.__SITE_KIT_RECAPTCHA_SITE_KEY__ = siteKey;
@@ -750,7 +755,7 @@ function useForm(formIdOrSlug, options = {}) {
750
755
  }
751
756
  }
752
757
  fetchForm();
753
- }, [formIdOrSlug, projectId]);
758
+ }, [formIdOrSlug, projectId, reloadVersion]);
754
759
  const allFields = useMemo(() => form?.fields || [], [form]);
755
760
  const fields = useMemo(() => {
756
761
  if (!isMultiStep) return allFields;
@@ -884,6 +889,7 @@ function useForm(formIdOrSlug, options = {}) {
884
889
  agentInvoked
885
890
  });
886
891
  trackComplete();
892
+ setSubmissionResult(data);
887
893
  setIsComplete(true);
888
894
  onSuccess?.(data);
889
895
  const finalRedirect = redirectUrl !== false ? redirectUrl || form.redirect_url : void 0;
@@ -924,9 +930,12 @@ function useForm(formIdOrSlug, options = {}) {
924
930
  setErrors({});
925
931
  setStep(1);
926
932
  setIsComplete(false);
933
+ setSubmissionResult(null);
927
934
  setSubmitError(null);
928
935
  }, [initialValues]);
929
936
  return {
937
+ reload,
938
+ submissionResult,
930
939
  form,
931
940
  isLoading,
932
941
  fetchError,
@@ -1,15 +1,15 @@
1
1
  'use client';
2
2
  import { SITE_EDIT_PARAM } from './chunk-6G43IRWR.js';
3
- import { publishSiteCredential } from './chunk-U7Y3QG3A.js';
4
- import { FleetHeartbeat } from './chunk-LPKKSYKX.js';
3
+ import { publishSiteCredential } from './chunk-MZX4EN6Z.js';
4
+ import { FleetHeartbeat } from './chunk-5TDZHIG6.js';
5
5
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
6
6
  import { resolveSiteHost } from './chunk-FESKKJAS.js';
7
7
  import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZKADJNR2.js';
8
- import { announceFrameReady, isCrossOriginFrame } from './chunk-JO76F5WP.js';
9
- import { SignalBridge } from './chunk-QCZHYO5M.js';
8
+ import { announceFrameReady, isPrivatePreview, isCrossOriginFrame } from './chunk-DLM4FFNH.js';
9
+ import { SignalBridge } from './chunk-4HYIDQJJ.js';
10
10
  import React, { useState, useRef, useCallback, useEffect, Suspense } from 'react';
11
11
  import dynamic from 'next/dynamic';
12
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
12
+ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
13
13
 
14
14
  // src/shared/edit-bridge.ts
15
15
  function startEditBridge() {
@@ -33,23 +33,23 @@ function startEditBridge() {
33
33
  };
34
34
  }
35
35
  var LazyAnalyticsProvider = dynamic(
36
- () => import('./AnalyticsProvider-QXO33JUF.js').then((m) => ({ default: m.AnalyticsProvider })),
36
+ () => import('./AnalyticsProvider-D6GWEJSB.js').then((m) => ({ default: m.AnalyticsProvider })),
37
37
  { ssr: false }
38
38
  );
39
39
  var LazySiteChat = dynamic(
40
- () => import('./SiteChat-JQ46ZIJ4.js').then((m) => ({ default: m.SiteChat })),
40
+ () => import('./SiteChat-OAZH34W7.js').then((m) => ({ default: m.SiteChat })),
41
41
  { ssr: false }
42
42
  );
43
43
  var LazySitePopups = dynamic(
44
- () => import('./SitePopups-WZBKX5Q3.js').then((m) => ({ default: m.SitePopups })),
44
+ () => import('./SitePopups-MLAT35UN.js').then((m) => ({ default: m.SitePopups })),
45
45
  { ssr: false }
46
46
  );
47
47
  var LazySiteDesignReporter = dynamic(
48
- () => import('./SiteDesignReporter-N7L6DR4J.js').then((m) => ({ default: m.SiteDesignReporter })),
48
+ () => import('./SiteDesignReporter-IWBMZJYU.js').then((m) => ({ default: m.SiteDesignReporter })),
49
49
  { ssr: false }
50
50
  );
51
51
  var LazySitemapSync = dynamic(
52
- () => import('./SitemapSync-GY6UADRI.js').then((m) => ({ default: m.SitemapSync })),
52
+ () => import('./SitemapSync-6KQLKFO2.js').then((m) => ({ default: m.SitemapSync })),
53
53
  { ssr: false }
54
54
  );
55
55
  function SiteKitClientProviders({
@@ -83,6 +83,7 @@ function SiteKitClientProviders({
83
83
  useEffect(() => announceFrameReady(), []);
84
84
  useEffect(() => startEditBridge(), []);
85
85
  const siblings = [];
86
+ if (isPrivatePreview()) return /* @__PURE__ */ jsx(Fragment, { children });
86
87
  if (signal) {
87
88
  const signalConfig = typeof signal === "object" ? signal : {};
88
89
  siblings.push(
@@ -6,7 +6,7 @@ import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
6
6
  import React, { useRef, useEffect, useState, useMemo, useCallback } from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
8
8
 
9
- var loadInteractiveForm = () => import('./ManagedForm-FOQZ2IYG.js').then((m) => m.ManagedForm);
9
+ var loadInteractiveForm = () => import('./ManagedForm-YOEZ7CFS.js').then((m) => m.ManagedForm);
10
10
  var REPLAY_WAIT_MS = 8e3;
11
11
  function FormEnhancer({
12
12
  formId,
@@ -1,7 +1,7 @@
1
1
  import { trackedFreshFetch } from './chunk-UAYAJPEP.js';
2
2
  import { isNextControlFlow } from './chunk-C7TLGL3R.js';
3
3
  import { monotonicMs } from './chunk-MH2DSGC6.js';
4
- import { SITE_KIT_VERSION } from './chunk-C2UROFGZ.js';
4
+ import { SITE_KIT_VERSION } from './chunk-5S7YTOCB.js';
5
5
  import 'server-only';
6
6
 
7
7
  var MINT_PATH = "/api/public/site-token";