@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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
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
+
3
10
  ## 8.3.0
4
11
 
5
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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@sonordev/site-kit",
4
- "version": "8.3.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,
@@ -658,7 +664,7 @@
658
664
  "from": "@sonordev/site-kit/articles",
659
665
  "to": "@sonordev/press-kit/articles",
660
666
  "package": "@sonordev/press-kit",
661
- "range": "^1.0.0",
667
+ "range": "^1.1.0",
662
668
  "since": "8.3.0",
663
669
  "compatibility": "Legacy site-kit article imports remain supported in 8.x; Press Kit is preferred for new and migrated integrations."
664
670
  },
@@ -666,7 +672,7 @@
666
672
  "from": "@sonordev/site-kit/articles/server",
667
673
  "to": "@sonordev/press-kit/articles/server",
668
674
  "package": "@sonordev/press-kit",
669
- "range": "^1.0.0",
675
+ "range": "^1.1.0",
670
676
  "since": "8.3.0",
671
677
  "compatibility": "Legacy site-kit article imports remain supported in 8.x; Press Kit is preferred for new and migrated integrations."
672
678
  },
@@ -674,7 +680,7 @@
674
680
  "from": "@sonordev/site-kit/articles/server-ui",
675
681
  "to": "@sonordev/press-kit/articles/server-ui",
676
682
  "package": "@sonordev/press-kit",
677
- "range": "^1.0.0",
683
+ "range": "^1.1.0",
678
684
  "since": "8.3.0",
679
685
  "compatibility": "Legacy site-kit article imports remain supported in 8.x; Press Kit is preferred for new and migrated integrations."
680
686
  },
@@ -712,7 +718,7 @@
712
718
  "from": "@sonordev/site-kit",
713
719
  "types": [],
714
720
  "to": "@sonordev/press-kit",
715
- "range": "^1.0.0",
721
+ "range": "^1.1.0",
716
722
  "since": "8.3.0"
717
723
  },
718
724
  {
@@ -1,13 +1,13 @@
1
- export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-EA6FZMYA.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-JO76F5WP.js';
7
+ import './chunk-DLM4FFNH.js';
8
8
  import './chunk-EKBEOXTH.js';
9
- import './chunk-OIWFXUVD.js';
10
- import './chunk-C4AFNZT2.js';
9
+ import './chunk-3VSFOD2Z.js';
10
+ import './chunk-RBNHRZGD.js';
11
11
  import './chunk-W7OPEMGJ.js';
12
- import './chunk-C2UROFGZ.js';
12
+ import './chunk-5S7YTOCB.js';
13
13
  import './chunk-PKBMQBKP.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import './chunk-IEGDPRQB.js';
2
+ import './chunk-XI2XM7UG.js';
3
3
  import './chunk-B7T2SFUF.js';
4
- import './chunk-U7Y3QG3A.js';
4
+ import './chunk-MZX4EN6Z.js';
5
5
  import './chunk-6T6CQVNL.js';
6
6
  import './chunk-5ROTTMBL.js';
7
7
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
@@ -15,10 +15,10 @@ import './chunk-LCDVPAMR.js';
15
15
  import './chunk-ZKADJNR2.js';
16
16
  import './chunk-5TM3WPCI.js';
17
17
  import './chunk-GJWI74ZZ.js';
18
- import { sonorFetch } from './chunk-OIWFXUVD.js';
19
- import './chunk-C4AFNZT2.js';
18
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
19
+ import './chunk-RBNHRZGD.js';
20
20
  import { readPublishedApiConfig, readPublishedSite } from './chunk-W7OPEMGJ.js';
21
- import './chunk-C2UROFGZ.js';
21
+ import './chunk-5S7YTOCB.js';
22
22
  import './chunk-PKBMQBKP.js';
23
23
  import { useEffect } from 'react';
24
24
 
@@ -1,14 +1,14 @@
1
1
  'use client';
2
- import { getSiteDesignTokens } from './chunk-TT4JZDKM.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-JO76F5WP.js';
6
+ import './chunk-DLM4FFNH.js';
7
7
  import './chunk-EKBEOXTH.js';
8
- import './chunk-OIWFXUVD.js';
9
- import './chunk-C4AFNZT2.js';
8
+ import './chunk-3VSFOD2Z.js';
9
+ import './chunk-RBNHRZGD.js';
10
10
  import './chunk-W7OPEMGJ.js';
11
- import './chunk-C2UROFGZ.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-HND6BDXC.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-MQ4REMTH.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-OIWFXUVD.js';
17
- import './chunk-C4AFNZT2.js';
16
+ import './chunk-3VSFOD2Z.js';
17
+ import './chunk-RBNHRZGD.js';
18
18
  import './chunk-W7OPEMGJ.js';
19
- import './chunk-C2UROFGZ.js';
19
+ import './chunk-5S7YTOCB.js';
20
20
  import './chunk-PKBMQBKP.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { sonorFetch } from './chunk-OIWFXUVD.js';
3
- import './chunk-C4AFNZT2.js';
2
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
3
+ import './chunk-RBNHRZGD.js';
4
4
  import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
5
- import './chunk-C2UROFGZ.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-DPSNMOMZ.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-DPSNMOMZ.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-XLAXYPTK.js';
2
- import './chunk-DPSNMOMZ.js';
3
- import './chunk-MQ4REMTH.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-OIWFXUVD.js';
16
- import './chunk-C4AFNZT2.js';
15
+ import './chunk-3VSFOD2Z.js';
16
+ import './chunk-RBNHRZGD.js';
17
17
  import './chunk-W7OPEMGJ.js';
18
- import './chunk-C2UROFGZ.js';
18
+ import './chunk-5S7YTOCB.js';
19
19
  import './chunk-PKBMQBKP.js';
@@ -1,12 +1,12 @@
1
- import './chunk-X4IJS7LV.js';
2
- import './chunk-XLAXYPTK.js';
3
- import './chunk-DPSNMOMZ.js';
1
+ import './chunk-BLCHQIWR.js';
2
+ import './chunk-J4KX2D3Q.js';
3
+ import './chunk-44GVU5UH.js';
4
4
  import './chunk-SOD2F6C2.js';
5
5
  import './chunk-YGGDU6C3.js';
6
- import { useForm } from './chunk-MQ4REMTH.js';
6
+ import { useForm } from './chunk-JV5YWTJN.js';
7
7
  import './chunk-Q6E4OPGG.js';
8
8
  import './chunk-5ROTTMBL.js';
9
- import './chunk-5RYSTKVU.js';
9
+ import './chunk-LEGMPX6N.js';
10
10
  import './chunk-C2FZBUSS.js';
11
11
  import './chunk-YC7ELZS3.js';
12
12
  import './chunk-DXO6SBMD.js';
@@ -14,17 +14,17 @@ import './chunk-TYAVHRWH.js';
14
14
  import './chunk-5SQK3D53.js';
15
15
  import './chunk-HW7B43E5.js';
16
16
  import './chunk-NJCTQH2P.js';
17
- import { NewsletterShell } from './chunk-LBDWAXAO.js';
17
+ import { NewsletterShell } from './chunk-JHTPHA2D.js';
18
18
  import './chunk-DJAYFHVF.js';
19
19
  import './chunk-L2V5PUFN.js';
20
20
  import './chunk-5TM3WPCI.js';
21
21
  import './chunk-GJWI74ZZ.js';
22
- import './chunk-OIWFXUVD.js';
23
- import './chunk-C4AFNZT2.js';
22
+ import './chunk-3VSFOD2Z.js';
23
+ import './chunk-RBNHRZGD.js';
24
24
  import './chunk-W7OPEMGJ.js';
25
- import './chunk-C2UROFGZ.js';
25
+ import './chunk-5S7YTOCB.js';
26
26
  import './chunk-PKBMQBKP.js';
27
- import { jsx } from 'react/jsx-runtime';
27
+ import { jsxs, jsx } from 'react/jsx-runtime';
28
28
 
29
29
  function ManagedNewsletterForm({
30
30
  formSlug,
@@ -35,6 +35,8 @@ function ManagedNewsletterForm({
35
35
  }) {
36
36
  const {
37
37
  form,
38
+ reload,
39
+ submissionResult,
38
40
  fetchError,
39
41
  allFields,
40
42
  values,
@@ -46,9 +48,12 @@ function ManagedNewsletterForm({
46
48
  } = useForm(formSlug, { trackAnalytics: true });
47
49
  if (fetchError) {
48
50
  console.warn(`[Articles] NewsletterWidget: form "${formSlug}" could not be loaded`, fetchError);
49
- 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
+ ] });
50
55
  }
51
- if (!form) return null;
56
+ if (!form) return /* @__PURE__ */ jsx("p", { role: "status", children: "Loading signup\u2026" });
52
57
  const emailField = allFields.find((f) => f.field_type === "email") ?? allFields.find((f) => f.slug === "email") ?? allFields[0];
53
58
  if (!emailField) {
54
59
  console.warn(`[Articles] NewsletterWidget: form "${formSlug}" has no fields`);
@@ -67,7 +72,7 @@ function ManagedNewsletterForm({
67
72
  void submit();
68
73
  },
69
74
  status: isComplete ? "success" : isSubmitting ? "submitting" : submitError ? "error" : "idle",
70
- successMessage,
75
+ successMessage: submissionResult?.publicationEnrollment?.message || "Your signup request was received. Enrollment is being confirmed.",
71
76
  errorMessage: submitError
72
77
  }
73
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 { sonorFetch } from './chunk-OIWFXUVD.js';
7
- import { getFreshCredential, isSiteToken } from './chunk-C4AFNZT2.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';
8
10
  import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
9
- import './chunk-C2UROFGZ.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`,
@@ -1,6 +1,6 @@
1
- export { SiteChat } from './chunk-E3UR37RX.js';
1
+ export { SiteChat } from './chunk-BLENFNBW.js';
2
2
  import './chunk-27FISYK4.js';
3
- import './chunk-JO76F5WP.js';
3
+ import './chunk-DLM4FFNH.js';
4
4
  import './chunk-EKBEOXTH.js';
5
5
  import './chunk-W7OPEMGJ.js';
6
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-GKJVSZ7H.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-JO76F5WP.js';
7
+ import './chunk-DLM4FFNH.js';
8
8
  import './chunk-EKBEOXTH.js';
9
- import './chunk-OIWFXUVD.js';
10
- import './chunk-C4AFNZT2.js';
9
+ import './chunk-3VSFOD2Z.js';
10
+ import './chunk-RBNHRZGD.js';
11
11
  import './chunk-W7OPEMGJ.js';
12
- import './chunk-C2UROFGZ.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-4PVMUPC6.js';
3
- import '../chunk-WBUG7XRL.js';
4
- import '../chunk-OIWFXUVD.js';
5
- import '../chunk-C4AFNZT2.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
6
  import '../chunk-W7OPEMGJ.js';
7
- import '../chunk-C2UROFGZ.js';
7
+ import '../chunk-5S7YTOCB.js';
8
8
  import '../chunk-PKBMQBKP.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { sonorFetch } from '../chunk-OIWFXUVD.js';
3
- import '../chunk-C4AFNZT2.js';
2
+ import { sonorFetch } from '../chunk-3VSFOD2Z.js';
3
+ import '../chunk-RBNHRZGD.js';
4
4
  import { getClientApiConfig } from '../chunk-W7OPEMGJ.js';
5
- import '../chunk-C2UROFGZ.js';
5
+ import '../chunk-5S7YTOCB.js';
6
6
  import '../chunk-PKBMQBKP.js';
7
7
  import { useState, useEffect } from 'react';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,17 +1,17 @@
1
1
  'use client';
2
- export { AnalyticsProvider, WebVitals, useAnalytics, useAnalyticsOptional, useTrackEvent } from '../chunk-EA6FZMYA.js';
2
+ export { AnalyticsProvider, WebVitals, useAnalytics, useAnalyticsOptional, useTrackEvent } from '../chunk-MTV5LYXN.js';
3
3
  import { trackConversion } from '../chunk-LCDVPAMR.js';
4
4
  export { trackConversion, trackEvent } from '../chunk-LCDVPAMR.js';
5
5
  import '../chunk-ZKADJNR2.js';
6
6
  import '../chunk-L2V5PUFN.js';
7
7
  import '../chunk-5TM3WPCI.js';
8
8
  import '../chunk-GJWI74ZZ.js';
9
- export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from '../chunk-JO76F5WP.js';
9
+ export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from '../chunk-DLM4FFNH.js';
10
10
  import '../chunk-EKBEOXTH.js';
11
- import '../chunk-OIWFXUVD.js';
12
- import '../chunk-C4AFNZT2.js';
11
+ import '../chunk-3VSFOD2Z.js';
12
+ import '../chunk-RBNHRZGD.js';
13
13
  import '../chunk-W7OPEMGJ.js';
14
- import '../chunk-C2UROFGZ.js';
14
+ import '../chunk-5S7YTOCB.js';
15
15
  import '../chunk-PKBMQBKP.js';
16
16
  import { useCallback, useEffect } from 'react';
17
17
 
@@ -0,0 +1,3 @@
1
+ import type { TrackEventOptions } from './types';
2
+ /** Explicit author-owned link semantics; never infer a conversion from copy. */
3
+ export declare function publicationCtaEvent(target: EventTarget | null): TrackEventOptions | null;
@@ -94,7 +94,7 @@ ${articlePhotoCss}
94
94
  }
95
95
  @media (min-width: 1024px) {
96
96
  .sk-article-layout--has-toc {
97
- grid-template-columns: 1fr 320px;
97
+ grid-template-columns: minmax(0, 1fr) 280px;
98
98
  }
99
99
  }
100
100
 
@@ -410,7 +410,9 @@ ${articlePhotoCss}
410
410
  @media (max-width: 768px) {
411
411
  .sk-article-title { font-size: 1.75rem; }
412
412
  .sk-article-subtitle { font-size: 1.0625rem; }
413
- .sk-article-content { font-size: 1rem; }
413
+ .sk-article-content { font-size: 1.0625rem; }
414
+ .sk-article-breadcrumb { flex-wrap: wrap; }
415
+ .sk-article :is(button, summary), .sk-article-toc-link { min-height: 44px; }
414
416
  .sk-article-related-grid { grid-template-columns: 1fr; }
415
417
  }
416
418
  `.trim()
@@ -1,12 +1,12 @@
1
1
  'use client';
2
- import { NewsletterShell } from '../chunk-LBDWAXAO.js';
2
+ import { NewsletterShell } from '../chunk-JHTPHA2D.js';
3
3
  export { ArticleFAQ } from '../chunk-BVB5FBAA.js';
4
4
  import { getAuthorSocialLinks, readingTimeMinutes } from '../chunk-BC7JMY4Z.js';
5
5
  export { ClusterNavigation, ServiceCallout, ServiceCallouts } from '../chunk-BC7JMY4Z.js';
6
6
  import '../chunk-DJAYFHVF.js';
7
7
  export { addExternalLinkTargets, linkClassificationHost, normalizeSiteHost, resolvePublicationSiteUrl } from '../chunk-5D7ZISUP.js';
8
- import { generateAuthorSchema, resolveArticleArtwork, articleArtworkImageStyle } from '../chunk-SNRE3ZVZ.js';
9
- export { resolveArticleArtwork } from '../chunk-SNRE3ZVZ.js';
8
+ import { generateAuthorSchema, resolveArticleArtwork, articleArtworkImageStyle } from '../chunk-UVYUTBT4.js';
9
+ export { resolveArticleArtwork } from '../chunk-UVYUTBT4.js';
10
10
  import '../chunk-H72ZFO3F.js';
11
11
  import { createPublicationRoutes } from '../chunk-4K735O3J.js';
12
12
  export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-4K735O3J.js';
@@ -20,7 +20,7 @@ import '../chunk-PKBMQBKP.js';
20
20
  import React, { useState, Suspense, useEffect } from 'react';
21
21
  import { jsx, jsxs } from 'react/jsx-runtime';
22
22
 
23
- var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-NFNF33V3.js'));
23
+ var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-EUWJ2HCA.js'));
24
24
  function NewsletterWidget({
25
25
  title = "Subscribe to Our Newsletter",
26
26
  description = "Get the latest posts delivered straight to your inbox.",