@sonordev/site-kit 8.7.0 → 8.8.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 (101) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/agent-manifest.json +1 -1
  3. package/dist/{AnalyticsProvider-3UIQMIRW.js → AnalyticsProvider-7SBJ27SI.js} +6 -6
  4. package/dist/{ArticleViewTracker-KNXP2DXL.js → ArticleViewTracker-PV2RD3P6.js} +5 -5
  5. package/dist/{BlocksPopup-DFE32GPX.js → BlocksPopup-NEEFV2L3.js} +6 -6
  6. package/dist/{ChatWidget-L74L4YAD.js → ChatWidget-V46UBDOM.js} +5 -5
  7. package/dist/{FileField-P3PLEAON.js → FileField-MJ3RCNFJ.js} +3 -3
  8. package/dist/{FormSpotlight-DNBSBRIE.js → FormSpotlight-NQPQFZS7.js} +1 -1
  9. package/dist/{FormStage-I4JGLT57.js → FormStage-4T5PJR5K.js} +1 -1
  10. package/dist/{ManagedForm-GJRGBM6W.js → ManagedForm-DDDVMKLJ.js} +6 -6
  11. package/dist/{ManagedNewsletterForm-AUZ6YB7G.js → ManagedNewsletterForm-TUYGN6O3.js} +8 -8
  12. package/dist/{SignalCore-UV7K7PT4.js → SignalCore-OW3YIH6M.js} +5 -5
  13. package/dist/SiteChat-XMKHBSEK.js +6 -0
  14. package/dist/SiteDesignReporter-BRH7ORQS.js +13 -0
  15. package/dist/{SitePopups-XHWU7GNF.js → SitePopups-VU2C3Z6B.js} +6 -6
  16. package/dist/SitemapSync-C4H3HF3L.js +9 -0
  17. package/dist/_client/booking-widget.js +5 -5
  18. package/dist/admin-auth/index.d.ts +2 -2
  19. package/dist/admin-auth/session.d.ts +2 -2
  20. package/dist/affiliates/index.js +3 -3
  21. package/dist/analytics/index.js +6 -6
  22. package/dist/articles/index.js +1 -1
  23. package/dist/articles/server-ui.js +3 -3
  24. package/dist/articles/server.js +2 -2
  25. package/dist/chat/index.js +8 -8
  26. package/dist/{chunk-HM7CDWFK.js → chunk-2WM4TNDF.js} +1 -1
  27. package/dist/chunk-64XODP7M.js +7 -0
  28. package/dist/{chunk-XC2TWYDV.js → chunk-6BFQI3ZE.js} +2 -2
  29. package/dist/{chunk-YYPYLYZM.js → chunk-6DXQHNZK.js} +1 -1
  30. package/dist/{chunk-P5PRR2BB.js → chunk-7HW4TZB5.js} +1 -1
  31. package/dist/{chunk-FXR5PJDL.js → chunk-AYQEIMGS.js} +2 -32
  32. package/dist/{chunk-RHT7OZNF.js → chunk-DYROJGI2.js} +1 -1
  33. package/dist/{chunk-MNORERMF.js → chunk-F6WLHVMQ.js} +1 -1
  34. package/dist/{chunk-UYOE3HA4.js → chunk-FLOJUMFR.js} +2 -2
  35. package/dist/{chunk-L2KSHJS2.js → chunk-G7BRCSV6.js} +3 -3
  36. package/dist/{chunk-36ZMNBXZ.js → chunk-GQN4BGK6.js} +1 -1
  37. package/dist/{chunk-7YB3QA4P.js → chunk-GXWM5KNS.js} +2 -2
  38. package/dist/{chunk-5WHBYQJ4.js → chunk-HN7GVGWC.js} +3 -3
  39. package/dist/{chunk-3MLWIBHX.js → chunk-IDC5CVBR.js} +1 -1
  40. package/dist/{chunk-LGWN6KCN.js → chunk-IWNJCRXW.js} +1 -1
  41. package/dist/{chunk-T6TWPKBL.js → chunk-M5JIHQ42.js} +1 -1
  42. package/dist/{chunk-RWWSOYJO.js → chunk-NFGAXWCN.js} +9 -9
  43. package/dist/{chunk-JWCCY72G.js → chunk-OPUY4RS6.js} +1 -1
  44. package/dist/{chunk-OHLCE4GC.js → chunk-OWZWRP7Y.js} +2 -2
  45. package/dist/{chunk-DJIGFX33.js → chunk-PSS6M4CG.js} +1 -1
  46. package/dist/{chunk-BAJUXQTH.js → chunk-SBPUFTMP.js} +2 -2
  47. package/dist/{chunk-KLIDCNML.js → chunk-SHAUX2MQ.js} +1 -1
  48. package/dist/{chunk-G5FD7UXK.js → chunk-SLFYTELD.js} +1 -1
  49. package/dist/{chunk-HWQPCZOX.js → chunk-SVHPILS3.js} +1 -1
  50. package/dist/{chunk-MJW6YIDJ.js → chunk-THXELZTQ.js} +1 -1
  51. package/dist/{chunk-BJYX6SFI.js → chunk-TP32MRXV.js} +2 -2
  52. package/dist/{chunk-IXZBOOAD.js → chunk-URLTBVRX.js} +3 -3
  53. package/dist/chunk-XS2ORMUG.js +32 -0
  54. package/dist/{chunk-A2MDVP47.js → chunk-Y6SHFILE.js} +1 -1
  55. package/dist/{chunk-U4OQJQK6.js → chunk-YEX5RAEU.js} +3 -3
  56. package/dist/{chunk-DPYGC7WE.js → chunk-YRQS7VAH.js} +1 -1
  57. package/dist/{chunk-QTBAKOCZ.js → chunk-ZQSCMYZO.js} +1 -1
  58. package/dist/client/index.js +4 -4
  59. package/dist/contracts/frame-ready.d.ts +23 -0
  60. package/dist/contracts/portfolio.d.ts +197 -14
  61. package/dist/fleet/index.js +6 -6
  62. package/dist/forms/index.js +8 -8
  63. package/dist/forms/server.js +2 -2
  64. package/dist/images/index.js +4 -4
  65. package/dist/index.js +1 -1
  66. package/dist/landing/server.js +4 -3
  67. package/dist/layout/client.js +9 -9
  68. package/dist/layout/index.js +10 -10
  69. package/dist/llms/index.js +4 -4
  70. package/dist/maps/index.js +3 -3
  71. package/dist/mcp/sonor.js +6 -6
  72. package/dist/og/pages.d.ts +3 -3
  73. package/dist/portfolio/contract.js +705 -1
  74. package/dist/press-kit/articles/article-body.d.ts +1 -2
  75. package/dist/press-kit/articles/types.d.ts +1 -1
  76. package/dist/revalidate/index.js +2 -2
  77. package/dist/runtime/index.js +3 -3
  78. package/dist/seo/client.js +6 -6
  79. package/dist/seo/index.js +6 -6
  80. package/dist/seo/llms.js +4 -4
  81. package/dist/seo/register-sitemap-cli.js +1 -1
  82. package/dist/seo/sitemap.js +2 -2
  83. package/dist/server/index.js +2 -2
  84. package/dist/shared/frame.d.ts +1 -1
  85. package/dist/shared/source-graph.d.ts +5 -5
  86. package/dist/shared/version.d.ts +1 -1
  87. package/dist/signal/index.js +2 -2
  88. package/dist/sitemap/index.js +2 -2
  89. package/dist/sitemap/shared.d.ts +1 -2
  90. package/dist/sync/index.js +5 -5
  91. package/dist/website/images.js +4 -4
  92. package/dist/website/index.js +7 -7
  93. package/dist/website/landing/server.js +4 -3
  94. package/dist/website/popups.js +6 -6
  95. package/dist/{writeLLMsTxt-QN2HIVT4.js → writeLLMsTxt-4HHUAOA6.js} +1 -1
  96. package/package.json +1 -1
  97. package/dist/SiteChat-6UWE545R.js +0 -6
  98. package/dist/SiteDesignReporter-ZSU76DZJ.js +0 -13
  99. package/dist/SitemapSync-ELWV6W7Y.js +0 -9
  100. package/dist/chunk-VEJD5EJ2.js +0 -344
  101. /package/dist/{chunk-XZFOQ2V4.js → chunk-KG5IEV7I.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @sonordev/site-kit Changelog
2
2
 
3
+ ## 8.8.0
4
+
5
+ - `@sonordev/site-kit/portfolio/contract` adds the verification, a proof-stage case study section for a build a Lighthouse run can't honestly score, such as an app behind a sign-in. It's a short list of checks, each saying what was checked, where, how, when, what came out and what it doesn't cover. New: `portfolioVerification` in `PORTFOLIO_SECTION_TYPES` (in the proof stage), `verificationProblems`, `readVerificationChecks`, `verificationLink`, `isVacuousScope`, `isPlaceholderText`, `isRealDay`, `latestVerificationDay`, `PORTFOLIO_VERIFICATION_JSON_SCHEMA`, the `PortfolioVerificationData` and `VerificationCheck` types and the limits `VERIFICATION_MAX_CHECKS`, `VERIFICATION_FIELD_MAX_CHARS` and `VERIFICATION_EARLIEST_DAY`. Nothing was removed or renamed. A `Record<PortfolioSectionType, ...>` of your own needs an entry for `portfolioVerification` before it type-checks.
6
+ - A verification completes the proof stage on its own once it has a check a page can show: `caseStudyStageStatus` accepts it where it expected a Performance section (`STAGE_CORE_ALTERNATES`, `stageCoreSections`), and now reads each section's `data` to tell. A reported number's date has to be a real day; `2026-02-31` used to pass. The same code ships as `@sonordev/contracts` 2.16.0.
7
+ - Analytics, the layout, SEO, chat and popups load about 4 KB less gzipped JavaScript than they did in 8.7.0. The message a framed page posts to tell its embedder it has painted lived in the case study rules, so every page carried all of them. It's now its own small module, and `@sonordev/site-kit/portfolio/contract` still exports it.
8
+
3
9
  ## 8.7.0
4
10
 
5
11
  - Add opt-in managed landing-page reads and a bounded server-rendered layout through `website/landing/server`. Published reads are site scoped and uncached. Private previews use inert conversion controls and suppress reporting.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@sonordev/site-kit",
4
- "version": "8.7.0",
4
+ "version": "8.8.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": [
@@ -1,13 +1,13 @@
1
- export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-7YB3QA4P.js';
1
+ export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-GXWM5KNS.js';
2
2
  import './chunk-LCDVPAMR.js';
3
3
  import './chunk-IPQKQEWI.js';
4
4
  import './chunk-L2V5PUFN.js';
5
5
  import './chunk-GJWI74ZZ.js';
6
6
  import './chunk-5TM3WPCI.js';
7
- import './chunk-QTBAKOCZ.js';
8
- import './chunk-VEJD5EJ2.js';
9
- import './chunk-UYOE3HA4.js';
10
- import './chunk-P5PRR2BB.js';
7
+ import './chunk-ZQSCMYZO.js';
8
+ import './chunk-64XODP7M.js';
9
+ import './chunk-FLOJUMFR.js';
10
+ import './chunk-7HW4TZB5.js';
11
11
  import './chunk-W7OPEMGJ.js';
12
- import './chunk-MNORERMF.js';
12
+ import './chunk-F6WLHVMQ.js';
13
13
  import './chunk-PKBMQBKP.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import './chunk-A2MDVP47.js';
2
+ import './chunk-Y6SHFILE.js';
3
3
  import './chunk-B7T2SFUF.js';
4
- import './chunk-JWCCY72G.js';
4
+ import './chunk-OPUY4RS6.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-IPQKQEWI.js';
16
16
  import './chunk-GJWI74ZZ.js';
17
17
  import './chunk-5TM3WPCI.js';
18
- import { sonorFetch } from './chunk-UYOE3HA4.js';
19
- import './chunk-P5PRR2BB.js';
18
+ import { sonorFetch } from './chunk-FLOJUMFR.js';
19
+ import './chunk-7HW4TZB5.js';
20
20
  import { readPublishedApiConfig, readPublishedSite } from './chunk-W7OPEMGJ.js';
21
- import './chunk-MNORERMF.js';
21
+ import './chunk-F6WLHVMQ.js';
22
22
  import './chunk-PKBMQBKP.js';
23
23
  import { useEffect } from 'react';
24
24
 
@@ -1,15 +1,15 @@
1
1
  'use client';
2
- import { getSiteDesignTokens } from './chunk-IXZBOOAD.js';
2
+ import { getSiteDesignTokens } from './chunk-URLTBVRX.js';
3
3
  import { DEFAULT_POPUP_TOKENS, PopupBlocks } from './chunk-52KO4LKD.js';
4
4
  import './chunk-XLAHRN4B.js';
5
5
  import { normalizePopupBlocks, toHexColor, readableOn } from './chunk-XHYE24HU.js';
6
6
  import './chunk-S22FSH7C.js';
7
- import './chunk-QTBAKOCZ.js';
8
- import './chunk-VEJD5EJ2.js';
9
- import './chunk-UYOE3HA4.js';
10
- import './chunk-P5PRR2BB.js';
7
+ import './chunk-ZQSCMYZO.js';
8
+ import './chunk-64XODP7M.js';
9
+ import './chunk-FLOJUMFR.js';
10
+ import './chunk-7HW4TZB5.js';
11
11
  import './chunk-W7OPEMGJ.js';
12
- import './chunk-MNORERMF.js';
12
+ import './chunk-F6WLHVMQ.js';
13
13
  import './chunk-PKBMQBKP.js';
14
14
  import { useState } from 'react';
15
15
  import { jsx } from 'react/jsx-runtime';
@@ -1,8 +1,8 @@
1
- export { ChatWidget, EchoChat, isChatEnabled } from './chunk-BJYX6SFI.js';
1
+ export { ChatWidget, EchoChat, isChatEnabled } from './chunk-TP32MRXV.js';
2
2
  import './chunk-6T6CQVNL.js';
3
3
  import './chunk-JE4A5S4F.js';
4
4
  import './chunk-27FISYK4.js';
5
- import './chunk-LGWN6KCN.js';
5
+ import './chunk-IWNJCRXW.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-GJWI74ZZ.js';
15
15
  import './chunk-5TM3WPCI.js';
16
- import './chunk-UYOE3HA4.js';
17
- import './chunk-P5PRR2BB.js';
16
+ import './chunk-FLOJUMFR.js';
17
+ import './chunk-7HW4TZB5.js';
18
18
  import './chunk-W7OPEMGJ.js';
19
- import './chunk-MNORERMF.js';
19
+ import './chunk-F6WLHVMQ.js';
20
20
  import './chunk-PKBMQBKP.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { sonorFetch } from './chunk-UYOE3HA4.js';
3
- import './chunk-P5PRR2BB.js';
2
+ import { sonorFetch } from './chunk-FLOJUMFR.js';
3
+ import './chunk-7HW4TZB5.js';
4
4
  import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
5
- import './chunk-MNORERMF.js';
5
+ import './chunk-F6WLHVMQ.js';
6
6
  import './chunk-PKBMQBKP.js';
7
7
  import React2, { useState, useRef } from 'react';
8
8
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
3
- import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-36ZMNBXZ.js';
3
+ import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-GQN4BGK6.js';
4
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
5
5
  import { isEmptyValue, unseenControlValues, isDisplayOnly } from './chunk-C2FZBUSS.js';
6
6
  import { FormField } from './chunk-CVADNHJ4.js';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
3
- import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-36ZMNBXZ.js';
3
+ import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-GQN4BGK6.js';
4
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
5
5
  import { isEmptyValue, unseenControlValues } from './chunk-C2FZBUSS.js';
6
6
  import { FormField } from './chunk-CVADNHJ4.js';
@@ -1,6 +1,6 @@
1
- export { ManagedForm } from './chunk-L2KSHJS2.js';
2
- import './chunk-36ZMNBXZ.js';
3
- import './chunk-LGWN6KCN.js';
1
+ export { ManagedForm } from './chunk-G7BRCSV6.js';
2
+ import './chunk-GQN4BGK6.js';
3
+ import './chunk-IWNJCRXW.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-GJWI74ZZ.js';
14
14
  import './chunk-5TM3WPCI.js';
15
- import './chunk-UYOE3HA4.js';
16
- import './chunk-P5PRR2BB.js';
15
+ import './chunk-FLOJUMFR.js';
16
+ import './chunk-7HW4TZB5.js';
17
17
  import './chunk-W7OPEMGJ.js';
18
- import './chunk-MNORERMF.js';
18
+ import './chunk-F6WLHVMQ.js';
19
19
  import './chunk-PKBMQBKP.js';
@@ -1,12 +1,12 @@
1
- import './chunk-RHT7OZNF.js';
1
+ import './chunk-DYROJGI2.js';
2
2
  import './chunk-YGGDU6C3.js';
3
- import './chunk-L2KSHJS2.js';
4
- import './chunk-36ZMNBXZ.js';
3
+ import './chunk-G7BRCSV6.js';
4
+ import './chunk-GQN4BGK6.js';
5
5
  import './chunk-SOD2F6C2.js';
6
- import { useForm } from './chunk-LGWN6KCN.js';
6
+ import { useForm } from './chunk-IWNJCRXW.js';
7
7
  import './chunk-Q6E4OPGG.js';
8
8
  import './chunk-5ROTTMBL.js';
9
- import './chunk-G5FD7UXK.js';
9
+ import './chunk-SLFYTELD.js';
10
10
  import './chunk-C2FZBUSS.js';
11
11
  import './chunk-YC7ELZS3.js';
12
12
  import './chunk-DXO6SBMD.js';
@@ -19,10 +19,10 @@ import './chunk-DJAYFHVF.js';
19
19
  import './chunk-L2V5PUFN.js';
20
20
  import './chunk-GJWI74ZZ.js';
21
21
  import './chunk-5TM3WPCI.js';
22
- import './chunk-UYOE3HA4.js';
23
- import './chunk-P5PRR2BB.js';
22
+ import './chunk-FLOJUMFR.js';
23
+ import './chunk-7HW4TZB5.js';
24
24
  import './chunk-W7OPEMGJ.js';
25
- import './chunk-MNORERMF.js';
25
+ import './chunk-F6WLHVMQ.js';
26
26
  import './chunk-PKBMQBKP.js';
27
27
  import { jsxs, jsx } from 'react/jsx-runtime';
28
28
 
@@ -3,12 +3,12 @@ import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-IPQKQEWI.js'
3
3
  import { onPageLeave } from './chunk-L2V5PUFN.js';
4
4
  import './chunk-GJWI74ZZ.js';
5
5
  import './chunk-5TM3WPCI.js';
6
- import { isPrivatePreview } from './chunk-QTBAKOCZ.js';
7
- import './chunk-VEJD5EJ2.js';
8
- import { sonorFetch } from './chunk-UYOE3HA4.js';
9
- import { getFreshCredential, isSiteToken } from './chunk-P5PRR2BB.js';
6
+ import { isPrivatePreview } from './chunk-ZQSCMYZO.js';
7
+ import './chunk-64XODP7M.js';
8
+ import { sonorFetch } from './chunk-FLOJUMFR.js';
9
+ import { getFreshCredential, isSiteToken } from './chunk-7HW4TZB5.js';
10
10
  import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
11
- import './chunk-MNORERMF.js';
11
+ import './chunk-F6WLHVMQ.js';
12
12
  import './chunk-PKBMQBKP.js';
13
13
  import { useState, useRef, useEffect, useCallback } from 'react';
14
14
 
@@ -0,0 +1,6 @@
1
+ export { SiteChat } from './chunk-SBPUFTMP.js';
2
+ import './chunk-27FISYK4.js';
3
+ import './chunk-ZQSCMYZO.js';
4
+ import './chunk-64XODP7M.js';
5
+ import './chunk-W7OPEMGJ.js';
6
+ import './chunk-PKBMQBKP.js';
@@ -0,0 +1,13 @@
1
+ export { SiteDesignReporter } from './chunk-6BFQI3ZE.js';
2
+ import './chunk-URLTBVRX.js';
3
+ import './chunk-XLAHRN4B.js';
4
+ import './chunk-XHYE24HU.js';
5
+ import './chunk-YC7ELZS3.js';
6
+ import './chunk-S22FSH7C.js';
7
+ import './chunk-ZQSCMYZO.js';
8
+ import './chunk-64XODP7M.js';
9
+ import './chunk-FLOJUMFR.js';
10
+ import './chunk-7HW4TZB5.js';
11
+ import './chunk-W7OPEMGJ.js';
12
+ import './chunk-F6WLHVMQ.js';
13
+ import './chunk-PKBMQBKP.js';
@@ -1,13 +1,13 @@
1
- export { SitePopups } from './chunk-U4OQJQK6.js';
1
+ export { SitePopups } from './chunk-YEX5RAEU.js';
2
2
  import './chunk-27FISYK4.js';
3
3
  import './chunk-5ROTTMBL.js';
4
4
  import './chunk-IPQKQEWI.js';
5
5
  import './chunk-GJWI74ZZ.js';
6
6
  import './chunk-5TM3WPCI.js';
7
- import './chunk-QTBAKOCZ.js';
8
- import './chunk-VEJD5EJ2.js';
9
- import './chunk-UYOE3HA4.js';
10
- import './chunk-P5PRR2BB.js';
7
+ import './chunk-ZQSCMYZO.js';
8
+ import './chunk-64XODP7M.js';
9
+ import './chunk-FLOJUMFR.js';
10
+ import './chunk-7HW4TZB5.js';
11
11
  import './chunk-W7OPEMGJ.js';
12
- import './chunk-MNORERMF.js';
12
+ import './chunk-F6WLHVMQ.js';
13
13
  import './chunk-PKBMQBKP.js';
@@ -0,0 +1,9 @@
1
+ export { SitemapSync } from './chunk-OWZWRP7Y.js';
2
+ import './chunk-YVKRYQRG.js';
3
+ import './chunk-ZQSCMYZO.js';
4
+ import './chunk-64XODP7M.js';
5
+ import './chunk-FLOJUMFR.js';
6
+ import './chunk-7HW4TZB5.js';
7
+ import './chunk-W7OPEMGJ.js';
8
+ import './chunk-F6WLHVMQ.js';
9
+ import './chunk-PKBMQBKP.js';
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { BookingWidget, BookingWidget_default as default } from '../chunk-YYPYLYZM.js';
3
- import '../chunk-DJIGFX33.js';
2
+ export { BookingWidget, BookingWidget_default as default } from '../chunk-6DXQHNZK.js';
3
+ import '../chunk-PSS6M4CG.js';
4
4
  import '../chunk-5ROTTMBL.js';
5
5
  import '../chunk-5TM3WPCI.js';
6
- import '../chunk-UYOE3HA4.js';
7
- import '../chunk-P5PRR2BB.js';
6
+ import '../chunk-FLOJUMFR.js';
7
+ import '../chunk-7HW4TZB5.js';
8
8
  import '../chunk-W7OPEMGJ.js';
9
- import '../chunk-MNORERMF.js';
9
+ import '../chunk-F6WLHVMQ.js';
10
10
  import '../chunk-PKBMQBKP.js';
@@ -2,8 +2,8 @@
2
2
  * @sonordev/site-kit/admin-auth — "Sign in with Sonor" for a site's own admin area
3
3
  *
4
4
  * SINGLE SOURCE OF TRUTH for the Sonor SSO handshake on client sites. Before
5
- * this module, 4m-lawn-care (/bid, /route), legacy-clay-classic (/admin) and the
6
- * CCG builder (/studio) each carried a hand-copied version, and the copies had
5
+ * this module, three client sites (an /admin area, a /studio builder and a
6
+ * pair of /bid and /route tools) each carried a hand-copied version, and the copies had
7
7
  * already drifted (Node vs Web Crypto, 7 vs 30 day sessions, roles in one only).
8
8
  * Do not re-fork it into a site.
9
9
  *
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * Format: `<base64url(payload)>.<base64url(HMAC-SHA256(payloadB64))>`, payload
5
5
  * `{ email, contactId, iat, exp }` in Unix seconds. This is byte-compatible with
6
- * the hand-rolled Web Crypto sessions legacy-clay-classic and the CCG builder
7
- * shipped before this module existed, so a site that passes its old cookie name
6
+ * the hand-rolled Web Crypto sessions that client sites shipped before this
7
+ * module existed, so a site that passes its old cookie name
8
8
  * and secret keeps every signed-in user signed in across the switch.
9
9
  *
10
10
  * Web Crypto only (never Node `crypto`): these helpers run in Edge middleware
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { sonorFetch } from '../chunk-UYOE3HA4.js';
3
- import '../chunk-P5PRR2BB.js';
2
+ import { sonorFetch } from '../chunk-FLOJUMFR.js';
3
+ import '../chunk-7HW4TZB5.js';
4
4
  import { getClientApiConfig } from '../chunk-W7OPEMGJ.js';
5
- import '../chunk-MNORERMF.js';
5
+ import '../chunk-F6WLHVMQ.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-7YB3QA4P.js';
2
+ export { AnalyticsProvider, WebVitals, useAnalytics, useAnalyticsOptional, useTrackEvent } from '../chunk-GXWM5KNS.js';
3
3
  import { trackConversion } from '../chunk-LCDVPAMR.js';
4
4
  export { trackConversion, trackEvent } from '../chunk-LCDVPAMR.js';
5
5
  import '../chunk-IPQKQEWI.js';
6
6
  import '../chunk-L2V5PUFN.js';
7
7
  import '../chunk-GJWI74ZZ.js';
8
8
  import '../chunk-5TM3WPCI.js';
9
- export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from '../chunk-QTBAKOCZ.js';
10
- import '../chunk-VEJD5EJ2.js';
11
- import '../chunk-UYOE3HA4.js';
12
- import '../chunk-P5PRR2BB.js';
9
+ export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from '../chunk-ZQSCMYZO.js';
10
+ import '../chunk-64XODP7M.js';
11
+ import '../chunk-FLOJUMFR.js';
12
+ import '../chunk-7HW4TZB5.js';
13
13
  import '../chunk-W7OPEMGJ.js';
14
- import '../chunk-MNORERMF.js';
14
+ import '../chunk-F6WLHVMQ.js';
15
15
  import '../chunk-PKBMQBKP.js';
16
16
  import { useCallback, useEffect } from 'react';
17
17
 
@@ -21,7 +21,7 @@ import '../chunk-PKBMQBKP.js';
21
21
  import React, { useState, Suspense, useEffect } from 'react';
22
22
  import { jsx, jsxs } from 'react/jsx-runtime';
23
23
 
24
- var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-AUZ6YB7G.js'));
24
+ var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-TUYGN6O3.js'));
25
25
  function NewsletterWidget({
26
26
  title = "Subscribe to Our Newsletter",
27
27
  description = "Get the latest posts delivered straight to your inbox.",
@@ -13,7 +13,7 @@ import { stripHtmlTags } from '../chunk-IBHBEUZV.js';
13
13
  import { createPublicationRoutes, articleCategorySlug } from '../chunk-4K735O3J.js';
14
14
  export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-4K735O3J.js';
15
15
  import '../chunk-34ZYJTQR.js';
16
- import '../chunk-T6TWPKBL.js';
16
+ import '../chunk-M5JIHQ42.js';
17
17
  import '../chunk-UAYAJPEP.js';
18
18
  import '../chunk-VWWITFWM.js';
19
19
  import '../chunk-4KZ6W3ZH.js';
@@ -25,7 +25,7 @@ import '../chunk-YVKRYQRG.js';
25
25
  import '../chunk-FESKKJAS.js';
26
26
  import '../chunk-A4CC4ZG3.js';
27
27
  import '../chunk-W7OPEMGJ.js';
28
- import '../chunk-MNORERMF.js';
28
+ import '../chunk-F6WLHVMQ.js';
29
29
  import '../chunk-PKBMQBKP.js';
30
30
  import 'server-only';
31
31
  import { notFound } from 'next/navigation';
@@ -118,7 +118,7 @@ async function Article({
118
118
  ...item,
119
119
  answer: addExternalLinkTargets(item.answer || "", siteUrlResolved)
120
120
  })) ?? faqRaw;
121
- const { ArticleViewTracker } = await import('../ArticleViewTracker-KNXP2DXL.js');
121
+ const { ArticleViewTracker } = await import('../ArticleViewTracker-PV2RD3P6.js');
122
122
  if (children) {
123
123
  return /* @__PURE__ */ jsxs(Fragment, { children: [
124
124
  /* @__PURE__ */ jsx(ArticleViewTracker, { slug: post.slug, site }),
@@ -6,7 +6,7 @@ import '../chunk-H72ZFO3F.js';
6
6
  import '../chunk-IBHBEUZV.js';
7
7
  export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-4K735O3J.js';
8
8
  import '../chunk-34ZYJTQR.js';
9
- import '../chunk-T6TWPKBL.js';
9
+ import '../chunk-M5JIHQ42.js';
10
10
  import '../chunk-UAYAJPEP.js';
11
11
  import '../chunk-VWWITFWM.js';
12
12
  import '../chunk-4KZ6W3ZH.js';
@@ -18,5 +18,5 @@ import '../chunk-YVKRYQRG.js';
18
18
  import '../chunk-FESKKJAS.js';
19
19
  import '../chunk-A4CC4ZG3.js';
20
20
  import '../chunk-W7OPEMGJ.js';
21
- import '../chunk-MNORERMF.js';
21
+ import '../chunk-F6WLHVMQ.js';
22
22
  import '../chunk-PKBMQBKP.js';
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-BJYX6SFI.js';
3
- export { SiteChat } from '../chunk-BAJUXQTH.js';
2
+ export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-TP32MRXV.js';
3
+ export { SiteChat } from '../chunk-SBPUFTMP.js';
4
4
  import '../chunk-6T6CQVNL.js';
5
5
  import '../chunk-JE4A5S4F.js';
6
6
  import '../chunk-27FISYK4.js';
7
- import '../chunk-LGWN6KCN.js';
7
+ import '../chunk-IWNJCRXW.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-GJWI74ZZ.js';
17
17
  import '../chunk-5TM3WPCI.js';
18
- import '../chunk-QTBAKOCZ.js';
19
- import '../chunk-VEJD5EJ2.js';
20
- import '../chunk-UYOE3HA4.js';
21
- import '../chunk-P5PRR2BB.js';
18
+ import '../chunk-ZQSCMYZO.js';
19
+ import '../chunk-64XODP7M.js';
20
+ import '../chunk-FLOJUMFR.js';
21
+ import '../chunk-7HW4TZB5.js';
22
22
  import '../chunk-W7OPEMGJ.js';
23
- import '../chunk-MNORERMF.js';
23
+ import '../chunk-F6WLHVMQ.js';
24
24
  import '../chunk-PKBMQBKP.js';
25
25
 
26
26
  // src/chat/echo-config.ts
@@ -1,4 +1,4 @@
1
- import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-XZFOQ2V4.js';
1
+ import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-KG5IEV7I.js';
2
2
  import { createHash } from 'crypto';
3
3
  import { existsSync, readFileSync } from 'fs';
4
4
  import { join } from 'path';
@@ -0,0 +1,7 @@
1
+ // src/contracts/frame-ready.ts
2
+ var FRAME_READY_MESSAGE = "sonor:frame-ready";
3
+ function isFrameReadyMessage(data) {
4
+ return !!data && typeof data === "object" && data.type === FRAME_READY_MESSAGE && data.v === 1;
5
+ }
6
+
7
+ export { FRAME_READY_MESSAGE, isFrameReadyMessage };
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- import { getSiteDesignTokens, tokensForReport, shouldReportDesign, sendSiteDesign } from './chunk-IXZBOOAD.js';
2
+ import { getSiteDesignTokens, tokensForReport, shouldReportDesign, sendSiteDesign } from './chunk-URLTBVRX.js';
3
3
  import { designTokensHash } from './chunk-XHYE24HU.js';
4
4
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
5
- import { resolveAnalyticsTarget } from './chunk-QTBAKOCZ.js';
5
+ import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
6
6
  import { useRef, useEffect } from 'react';
7
7
 
8
8
  var STAMP_KEY = (site) => `_sk_design_sent:${site}`;
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { detectTimezone, releaseSlotHold, fetchBookingTypeDetails, fetchBookingTypes, fetchAvailability, createSlotHold, createBooking, formatDuration, formatDate, formatTime, prepareMeeting } from './chunk-DJIGFX33.js';
2
+ import { detectTimezone, releaseSlotHold, fetchBookingTypeDetails, fetchBookingTypes, fetchAvailability, createSlotHold, createBooking, formatDuration, formatDate, formatTime, prepareMeeting } from './chunk-PSS6M4CG.js';
3
3
  import { readPublishedApiConfig, DEFAULT_SONOR_API_URL } from './chunk-W7OPEMGJ.js';
4
4
  import { useState, useRef, useMemo, useCallback, useEffect, useId } from 'react';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { SITE_KIT_VERSION } from './chunk-MNORERMF.js';
1
+ import { SITE_KIT_VERSION } from './chunk-F6WLHVMQ.js';
2
2
 
3
3
  // src/shared/siteToken.ts
4
4
  var SITE_TOKEN_PREFIX = "st1.";
@@ -1,43 +1,13 @@
1
+ import { isBlockedPublicUrlHost } from './chunk-XS2ORMUG.js';
1
2
  import { LandingPage } from './chunk-PAYCK7FC.js';
2
3
  import { normalizeCampaignSlug } from './chunk-3MJNBOUO.js';
3
4
  import { landingPageMetadata } from './chunk-JESLPEST.js';
4
- import { ServerForm } from './chunk-DPYGC7WE.js';
5
+ import { ServerForm } from './chunk-YRQS7VAH.js';
5
6
  import { serverApiFetch } from './chunk-C7TLGL3R.js';
6
7
  import { normalizeSiteHost } from './chunk-A4CC4ZG3.js';
7
8
  import 'server-only';
8
9
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
10
 
10
- // src/contracts/public-url-host.ts
11
- function isPrivateIpv4(a, b) {
12
- return a === 127 || a === 10 || a === 0 || a === 192 && b === 168 || a === 172 && b >= 16 && b <= 31 || a === 169 && b === 254 || a === 100 && b >= 64 && b <= 127 || a >= 224;
13
- }
14
- function ipv6Words(host) {
15
- if (!host.includes(":") || !/^[a-f\d:.]+$/.test(host)) return null;
16
- let canonical;
17
- try {
18
- canonical = new URL(`http://[${host}]/`).hostname.slice(1, -1);
19
- } catch {
20
- return null;
21
- }
22
- const sides = canonical.split("::");
23
- const left = sides[0] ? sides[0].split(":") : [];
24
- const right = sides.length > 1 && sides[1] ? sides[1].split(":") : [];
25
- return [...left, ...Array(sides.length > 1 ? 8 - left.length - right.length : 0).fill("0"), ...right].map((word) => parseInt(word, 16));
26
- }
27
- function isBlockedPublicUrlHost(rawHost) {
28
- const host = rawHost.toLowerCase().replace(/^\[|\]$/g, "");
29
- const blockedName = host === "localhost" || host.endsWith(".localhost") || host.endsWith(".local") || host.endsWith(".internal");
30
- if (host.includes(":") && host.includes("%")) return true;
31
- const ipv4 = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
32
- const blockedIp = !!ipv4 && isPrivateIpv4(Number(ipv4[1]), Number(ipv4[2]));
33
- const words = ipv6Words(host);
34
- const blockedIpv6 = !!words && // Unspecified/loopback, unique-local, link-local, deprecated site-local
35
- // and multicast destinations aren't public logo/webhook endpoints.
36
- (words.every((word) => word === 0) || words.slice(0, 7).every((word) => word === 0) && words[7] === 1 || (words[0] & 65024) === 64512 || (words[0] & 65472) === 65152 || (words[0] & 65472) === 65216 || (words[0] & 65280) === 65280 || // IPv4-mapped and older IPv4-compatible forms carry an IPv4 destination.
37
- words.slice(0, 5).every((word) => word === 0) && [0, 65535].includes(words[5]) && isPrivateIpv4(words[6] >> 8, words[6] & 255));
38
- return blockedName || blockedIp || blockedIpv6;
39
- }
40
-
41
11
  // src/contracts/publication-branding.ts
42
12
  var PUBLICATION_COLOR_FIELDS = ["primary", "secondary", "accent", "background", "surface", "text", "muted", "border"];
43
13
  var GENERIC_FONT_FAMILIES = /* @__PURE__ */ new Set(["serif", "sans-serif", "monospace", "system-ui", "cursive", "fantasy", "ui-serif", "ui-sans-serif", "ui-monospace"]);
@@ -1,4 +1,4 @@
1
- import { sonorFetch } from './chunk-UYOE3HA4.js';
1
+ import { sonorFetch } from './chunk-FLOJUMFR.js';
2
2
  import { readPublishedApiConfig } from './chunk-W7OPEMGJ.js';
3
3
 
4
4
  // src/forms/formsApi.ts
@@ -1,4 +1,4 @@
1
1
  // src/shared/version.ts
2
- var SITE_KIT_VERSION = "8.7.0";
2
+ var SITE_KIT_VERSION = "8.8.0";
3
3
 
4
4
  export { SITE_KIT_VERSION };
@@ -1,5 +1,5 @@
1
- import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-P5PRR2BB.js';
2
- import { SITE_KIT_VERSION } from './chunk-MNORERMF.js';
1
+ import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-7HW4TZB5.js';
2
+ import { SITE_KIT_VERSION } from './chunk-F6WLHVMQ.js';
3
3
 
4
4
  // src/shared/fetchWithRetry.ts
5
5
  function backoffDelay(attempt, response) {
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { countStageViews, countStageQuestions, useFieldControls } from './chunk-36ZMNBXZ.js';
3
- import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-LGWN6KCN.js';
2
+ import { countStageViews, countStageQuestions, useFieldControls } from './chunk-GQN4BGK6.js';
3
+ import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-IWNJCRXW.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-I4JGLT57.js').then((m) => m.FormStage) : import('./FormSpotlight-DNBSBRIE.js').then((m) => m.FormSpotlight);
66
+ const load = resolvedExperience === "stage" ? import('./FormStage-4T5PJR5K.js').then((m) => m.FormStage) : import('./FormSpotlight-NQPQFZS7.js').then((m) => m.FormSpotlight);
67
67
  load.then((Component) => {
68
68
  if (!cancelled) setExperience(() => Component);
69
69
  }).catch((err) => {
@@ -22,7 +22,7 @@ function useFieldControls(fields) {
22
22
  });
23
23
  }
24
24
  if (needsFile) {
25
- import('./FileField-P3PLEAON.js').then((m) => {
25
+ import('./FileField-MJ3RCNFJ.js').then((m) => {
26
26
  if (!cancelled) setControls((prev) => ({ ...prev, File: m.FileField }));
27
27
  }).catch(() => {
28
28
  });
@@ -2,8 +2,8 @@
2
2
  import { registerAnalyticsDispatcher } from './chunk-LCDVPAMR.js';
3
3
  import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-IPQKQEWI.js';
4
4
  import { onPageLeave } from './chunk-L2V5PUFN.js';
5
- import { resolveAnalyticsTarget } from './chunk-QTBAKOCZ.js';
6
- import { sonorFetch, sonorBeacon } from './chunk-UYOE3HA4.js';
5
+ import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
6
+ import { sonorFetch, sonorBeacon } from './chunk-FLOJUMFR.js';
7
7
  import { createContext, useRef, useEffect, useState, useMemo, useCallback, useContext } from 'react';
8
8
  import { usePathname } from 'next/navigation';
9
9
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -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-QTBAKOCZ.js';
5
- import { sonorFetch } from './chunk-UYOE3HA4.js';
6
- import { SITE_KIT_VERSION } from './chunk-MNORERMF.js';
4
+ import { resolveAnalyticsTarget } from './chunk-ZQSCMYZO.js';
5
+ import { sonorFetch } from './chunk-FLOJUMFR.js';
6
+ import { SITE_KIT_VERSION } from './chunk-F6WLHVMQ.js';
7
7
  import { useRef, useEffect } from 'react';
8
8
 
9
9
  // src/fleet/heartbeat.ts