@sonordev/site-kit 7.1.1 → 7.2.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.
- package/AGENTS.md +3 -3
- package/CHANGELOG.md +68 -3426
- package/README.md +9 -8
- package/agent-manifest.json +12 -4
- package/dist/{AnalyticsProvider-3MI5RCTL.js → AnalyticsProvider-SLFFBRPE.js} +4 -4
- package/dist/{ArticleViewTracker-CMBSJR3N.js → ArticleViewTracker-TM5AMGN2.js} +3 -3
- package/dist/{BlocksPopup-X3OAAK2L.js → BlocksPopup-YJNJIVPO.js} +5 -5
- package/dist/ChatWidget-XKOSH66S.js +17 -0
- package/dist/{FileField-QRSEGO6D.js → FileField-CI4UL5SH.js} +3 -3
- package/dist/{FormSpotlight-XKV7VTN4.js → FormSpotlight-F2AAEGBN.js} +20 -6
- package/dist/{FormStage-C3YGYAUZ.js → FormStage-BI5R5CNC.js} +27 -7
- package/dist/ManagedForm-G6COGHXL.js +16 -0
- package/dist/{ManagedNewsletterForm-LPIKGJF4.js → ManagedNewsletterForm-BO3WCGXX.js} +7 -5
- package/dist/{SignalCore-ICXXZBYI.js → SignalCore-ZA6WHKBR.js} +3 -3
- package/dist/SiteChat-YJADDTKG.js +5 -0
- package/dist/{SiteDesignReporter-A7MS2CIP.js → SiteDesignReporter-5YAW36AQ.js} +5 -5
- package/dist/SitePopups-ST5PMKZE.js +10 -0
- package/dist/SitemapSync-RJTEBINX.js +8 -0
- package/dist/SitemapSync.d.ts +1 -1
- package/dist/_client/booking-widget.js +5 -5
- package/dist/_client/testimonial-section.d.ts +1 -1
- package/dist/affiliates/api.d.ts +1 -1
- package/dist/affiliates/index.js +3 -3
- package/dist/analytics/AnalyticsProvider.d.ts +1 -1
- package/dist/analytics/index.js +4 -4
- package/dist/analytics/send-gate.d.ts +13 -26
- package/dist/articles/Article.d.ts +1 -1
- package/dist/articles/ArticleList.d.ts +1 -1
- package/dist/articles/ClusterLandingPage.d.ts +2 -2
- package/dist/articles/PublicationLayout.d.ts +1 -1
- package/dist/articles/PublicationSidebar.d.ts +1 -1
- package/dist/articles/RelatedPosts.d.ts +1 -1
- package/dist/articles/author-schema.d.ts +1 -1
- package/dist/articles/excerpt.d.ts +3 -4
- package/dist/articles/index.d.ts +2 -2
- package/dist/articles/index.js +2 -2
- package/dist/articles/news-sitemap.d.ts +1 -1
- package/dist/articles/processArticleHtml.d.ts +1 -1
- package/dist/articles/server-core.d.ts +4 -4
- package/dist/articles/server-ui.js +3 -2
- package/dist/articles/server.d.ts +4 -4
- package/dist/articles/server.js +2 -1
- package/dist/articles/types.d.ts +1 -1
- package/dist/{engage → chat}/ChatWidget.d.ts +8 -7
- package/dist/{engage → chat}/EchoUiActions.d.ts +4 -4
- package/dist/chat/SiteChat.d.ts +25 -0
- package/dist/{engage → chat}/brand-color.d.ts +2 -2
- package/dist/{engage → chat}/chat-messages.d.ts +1 -1
- package/dist/{engage → chat}/echo-config.d.ts +1 -1
- package/dist/chat/index.d.ts +10 -6
- package/dist/chat/index.js +14 -8
- package/dist/{engage → chat}/launcher-placement.d.ts +1 -7
- package/dist/{engage → chat}/socket-loader.d.ts +2 -2
- package/dist/chat/types.d.ts +136 -0
- package/dist/chunk-27FISYK4.js +4 -0
- package/dist/{chunk-QPEEKFCA.js → chunk-4NTBQNHA.js} +249 -80
- package/dist/{chunk-RK7GF7PQ.js → chunk-5V2V5C3Y.js} +2 -4
- package/dist/{chunk-ICFRH2ED.js → chunk-5YCEMV2L.js} +1 -1
- package/dist/{chunk-V4HUSHZO.js → chunk-64DKGVEI.js} +41 -7
- package/dist/{chunk-GLHQ3LRO.js → chunk-6U3VLV2C.js} +1 -1
- package/dist/{chunk-ZETJTCMV.js → chunk-BC4Y3S3D.js} +1 -1
- package/dist/{chunk-JSZN6LDZ.js → chunk-BF7TZYC3.js} +38 -31
- package/dist/{chunk-EFPS56JA.js → chunk-BKY2ZNM7.js} +1 -1
- package/dist/{chunk-AQSNPZY4.js → chunk-C2FZBUSS.js} +80 -1
- package/dist/{chunk-H42PZKVC.js → chunk-CF5QNFYU.js} +2 -2
- package/dist/{chunk-JC7KXNNM.js → chunk-D5DCBD4Y.js} +2 -2
- package/dist/{chunk-PXZ7LAOY.js → chunk-D6ZC7XKZ.js} +2 -2
- package/dist/chunk-EJVQJCG5.js +370 -0
- package/dist/{chunk-6OL23QYD.js → chunk-F24FNCTK.js} +1 -1
- package/dist/{chunk-NEKEH4CK.js → chunk-FR6BYFPC.js} +53 -21
- package/dist/{chunk-KOPVJQ2P.js → chunk-GEXT7BTE.js} +1 -1
- package/dist/{chunk-ZAWANWUS.js → chunk-GGORNBSC.js} +18 -6
- package/dist/{chunk-DUQMSNF2.js → chunk-HGFAEDG3.js} +1 -1
- package/dist/chunk-HODO5BX5.js +28 -0
- package/dist/chunk-HW7B43E5.js +14 -0
- package/dist/{chunk-EQBZ24VH.js → chunk-IAM3D3RL.js} +43 -24
- package/dist/{chunk-ODADQM6Z.js → chunk-JJ3DELUL.js} +2 -2
- package/dist/{chunk-542MIHNP.js → chunk-JMLK6MH7.js} +1 -1
- package/dist/{chunk-7FWA3I6A.js → chunk-JWTQS5F5.js} +1 -1
- package/dist/{chunk-OUNRFXDC.js → chunk-K4ZHAURD.js} +1 -1
- package/dist/chunk-NV72HZ4W.js +45 -0
- package/dist/{chunk-4Y5FWDPM.js → chunk-NZ4RXN3G.js} +55 -7
- package/dist/chunk-OWZ7ATLZ.js +187 -0
- package/dist/{chunk-TXBAOEKG.js → chunk-PKGN32AU.js} +5 -4
- package/dist/chunk-Q6E4OPGG.js +40 -0
- package/dist/{chunk-J4D6ZXRW.js → chunk-QL6XNPSD.js} +3 -3
- package/dist/{chunk-HAG4YIZY.js → chunk-R46IQIGK.js} +6 -6
- package/dist/{chunk-R3VKF43H.js → chunk-RPZ7OQGD.js} +1 -1
- package/dist/{chunk-Q3S26EQA.js → chunk-S54ECQGY.js} +1 -1
- package/dist/{chunk-JIL5VY2R.js → chunk-VHKEF5ZB.js} +1 -1
- package/dist/{chunk-ILAW3XKD.js → chunk-VO3JYRT5.js} +43 -29
- package/dist/chunk-VWWITFWM.js +300 -0
- package/dist/{chunk-OPRBF7VE.js → chunk-ZTLMPUO6.js} +3 -2
- package/dist/client/index.js +3 -3
- package/dist/cms/CmsPreview.d.ts +2 -2
- package/dist/cms/index.d.ts +3 -3
- package/dist/cms/server-api.d.ts +1 -1
- package/dist/cms/types.d.ts +1 -1
- package/dist/commerce/EventCheckout.d.ts +1 -1
- package/dist/commerce/EventsAgenda.d.ts +3 -3
- package/dist/commerce/api.d.ts +1 -1
- package/dist/commerce/index.js +4 -4
- package/dist/commerce/server.d.ts +3 -4
- package/dist/contracts/color.d.ts +1 -1
- package/dist/contracts/entries.d.ts +1 -1
- package/dist/contracts/error-page.d.ts +183 -0
- package/dist/contracts/fleet.d.ts +9 -9
- package/dist/contracts/forms.d.ts +4 -10
- package/dist/contracts/llms.d.ts +2 -1
- package/dist/contracts/portfolio.d.ts +11 -15
- package/dist/contracts/proposal-sitemap.d.ts +130 -0
- package/dist/contracts/schema-placeholders.d.ts +87 -0
- package/dist/contracts/seo-meta.d.ts +11 -12
- package/dist/contracts/seo-pages.d.ts +12 -18
- package/dist/contracts/site-cache.d.ts +4 -4
- package/dist/contracts/sites-normalize.d.ts +2 -4
- package/dist/contracts/sites.d.ts +3 -5
- package/dist/contracts/slot-content.d.ts +2 -2
- package/dist/contracts/slots.d.ts +6 -6
- package/dist/contracts/voice.d.ts +56 -0
- package/dist/contracts/website.d.ts +2 -2
- package/dist/engage/EngageWidget.d.ts +13 -12
- package/dist/engage/index.d.ts +10 -9
- package/dist/engage/index.js +31 -35
- package/dist/engage/types.d.ts +19 -244
- package/dist/fleet/FleetHeartbeat.d.ts +2 -2
- package/dist/fleet/index.js +4 -4
- package/dist/forms/FormEnhancer.d.ts +25 -12
- package/dist/forms/FormSpotlight.d.ts +2 -2
- package/dist/forms/ManagedForm.d.ts +1 -1
- package/dist/forms/ServerForm.d.ts +11 -10
- package/dist/forms/StaticForm.d.ts +4 -2
- package/dist/forms/field-autocomplete.d.ts +28 -0
- package/dist/forms/field-interactions.d.ts +2 -2
- package/dist/forms/form-dom-values.d.ts +42 -0
- package/dist/forms/form-loaded-at.d.ts +2 -2
- package/dist/forms/formsApi.d.ts +2 -2
- package/dist/forms/index.d.ts +1 -1
- package/dist/forms/index.js +11 -9
- package/dist/forms/server.d.ts +1 -1
- package/dist/forms/server.js +6 -4
- package/dist/forms/static.js +3 -2
- package/dist/forms/submitForm.d.ts +9 -2
- package/dist/forms/types.d.ts +44 -5
- package/dist/forms/useForm.d.ts +21 -4
- package/dist/forms/webmcp.d.ts +38 -0
- package/dist/images/ManagedFavicon.d.ts +1 -1
- package/dist/images/ManagedImage.d.ts +4 -4
- package/dist/images/api.d.ts +1 -1
- package/dist/images/index.d.ts +2 -2
- package/dist/images/index.js +4 -4
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -1
- package/dist/landing/contract.d.ts +3 -4
- package/dist/layout/SiteKitClientProviders.d.ts +4 -4
- package/dist/layout/SiteKitLayout.d.ts +11 -11
- package/dist/layout/client.d.ts +4 -4
- package/dist/layout/client.js +7 -7
- package/dist/layout/index.js +8 -8
- package/dist/layout/types.d.ts +7 -6
- package/dist/llms/SpeakableSchema.d.ts +2 -2
- package/dist/llms/agent-access.d.ts +2 -2
- package/dist/llms/aiRobots.d.ts +4 -4
- package/dist/llms/api.d.ts +2 -2
- package/dist/llms/contract.js +1 -1
- package/dist/llms/generateLLMsTxt.d.ts +1 -1
- package/dist/llms/index.js +6 -6
- package/dist/llms/links.d.ts +1 -1
- package/dist/llms/revalidate.d.ts +1 -1
- package/dist/llms/seo-revalidate.d.ts +2 -3
- package/dist/llms/types.d.ts +6 -6
- package/dist/llms/writeLLMsTxt.d.ts +10 -10
- package/dist/manifest/index.d.ts +8 -8
- package/dist/maps/index.js +3 -3
- package/dist/mcp/WebMcpTools.d.ts +1 -1
- package/dist/mcp/index.js +2 -14
- package/dist/mcp/report.d.ts +2 -2
- package/dist/mcp/serverCard.d.ts +1 -1
- package/dist/mcp/sonor.d.ts +5 -6
- package/dist/mcp/sonor.js +14 -11
- package/dist/mcp/transport.d.ts +1 -2
- package/dist/mcp/types.d.ts +4 -5
- package/dist/motion/engine.d.ts +2 -3
- package/dist/motion/failsafe.d.ts +1 -2
- package/dist/motion/gsap.d.ts +2 -2
- package/dist/motion/three.d.ts +1 -1
- package/dist/og/config.d.ts +4 -4
- package/dist/og/contrast.d.ts +2 -2
- package/dist/og/pages.d.ts +5 -5
- package/dist/og/route-fit.d.ts +2 -2
- package/dist/og/route.d.ts +1 -2
- package/dist/og/template.d.ts +1 -1
- package/dist/proxy/index.d.ts +2 -2
- package/dist/proxy/securityHeaders.d.ts +10 -12
- package/dist/redirects/index.d.ts +7 -7
- package/dist/reputation/TestimonialSection.d.ts +1 -1
- package/dist/reputation/api.d.ts +1 -1
- package/dist/revalidate/index.js +2 -2
- package/dist/robots/index.d.ts +5 -5
- package/dist/robots/indexnow.d.ts +2 -3
- package/dist/seo/ManagedScripts.d.ts +2 -2
- package/dist/seo/client.js +4 -4
- package/dist/seo/getManagedMetadata.d.ts +1 -1
- package/dist/seo/groundingSchema.d.ts +2 -2
- package/dist/seo/index.js +15 -8
- package/dist/seo/llms/contract.js +1 -1
- package/dist/seo/llms.js +6 -6
- package/dist/seo/register-sitemap-cli-impl.d.ts +1 -1
- package/dist/seo/register-sitemap-cli.d.ts +1 -1
- package/dist/seo/register-sitemap-cli.js +2 -2
- package/dist/seo/schema-filter.d.ts +5 -6
- package/dist/seo/server-api.d.ts +1 -1
- package/dist/seo/sitemap.js +4 -4
- package/dist/seo/types.d.ts +4 -4
- package/dist/seo/withManagedMetadata.d.ts +4 -4
- package/dist/server/index.js +2 -2
- package/dist/server/mint-site-token.d.ts +1 -2
- package/dist/server/server-fetch.d.ts +5 -5
- package/dist/shared/build-entries.d.ts +4 -4
- package/dist/shared/dialog.d.ts +27 -0
- package/dist/shared/frame.d.ts +8 -9
- package/dist/shared/fresh-fetch.d.ts +1 -2
- package/dist/shared/identity.d.ts +1 -1
- package/dist/shared/layers.d.ts +7 -0
- package/dist/shared/mid-form.d.ts +53 -0
- package/dist/shared/next-files.d.ts +1 -1
- package/dist/shared/publishCredential.d.ts +1 -1
- package/dist/shared/reporting-gate.d.ts +1 -1
- package/dist/shared/uuid.d.ts +1 -2
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/visual-viewport-gap.d.ts +3 -3
- package/dist/signal/index.js +2 -2
- package/dist/signal/types.d.ts +1 -1
- package/dist/site-config/index.d.ts +2 -2
- package/dist/sitemap/index.d.ts +13 -13
- package/dist/sitemap/index.js +4 -4
- package/dist/sitemap/shared.d.ts +3 -3
- package/dist/sites/site-param.d.ts +2 -2
- package/dist/slots/ManagedRichText.d.ts +1 -1
- package/dist/slots/ManagedSlot.d.ts +1 -1
- package/dist/slots/index.d.ts +1 -3
- package/dist/{socket-loader-R24ZSRSQ.js → socket-loader-CGIPEG74.js} +1 -1
- package/dist/sync/index.js +5 -5
- package/dist/types.d.ts +4 -2
- package/dist/website/BlocksPopup.d.ts +1 -1
- package/dist/website/PopupBlocks.d.ts +8 -6
- package/dist/website/SitePopups.d.ts +25 -0
- package/dist/website/images.js +4 -4
- package/dist/website/index.js +6 -6
- package/dist/website/popup-rules.d.ts +46 -0
- package/dist/website/popup-types.d.ts +113 -0
- package/dist/website/popups.d.ts +2 -6
- package/dist/website/popups.js +6 -14
- package/dist/{writeLLMsTxt-QR23OQUE.js → writeLLMsTxt-OV24LQVL.js} +3 -3
- package/docs/MIGRATING-TO-7.md +50 -22
- package/docs.json +2 -1
- package/package.json +2 -2
- package/src/admin-auth/README.md +3 -3
- package/src/analytics/README.md +9 -11
- package/src/articles/README.md +10 -7
- package/src/{engage → chat}/README.md +63 -62
- package/src/cta-bar/README.md +11 -11
- package/src/forms/README.md +60 -12
- package/src/layout/README.md +8 -5
- package/src/llms/README.md +3 -3
- package/src/mcp/README.md +7 -7
- package/src/motion/README.md +1 -1
- package/src/og/README.md +26 -27
- package/src/proxy/README.md +14 -14
- package/src/seo/README.md +4 -2
- package/src/slots/README.md +1 -1
- package/src/sync/README.md +10 -0
- package/src/website/README.md +133 -0
- package/dist/ChatWidget-JMFBXJ75.js +0 -15
- package/dist/EngageWidget-A3QKZ3SU.js +0 -11
- package/dist/ManagedForm-2GSSDJPP.js +0 -14
- package/dist/SitemapSync-4U654SEA.js +0 -8
- package/dist/chunk-B73QPZPH.js +0 -837
- package/dist/chunk-NDF4A5JM.js +0 -37
- package/dist/chunk-RTMMHTEQ.js +0 -100
- package/dist/engage/DesignRenderer.d.ts +0 -57
- package/dist/engage/element-rules.d.ts +0 -38
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @sonordev/site-kit
|
|
2
2
|
|
|
3
|
-
All-in-one integration kit for [Sonor](https://sonor.io)-powered Next.js sites. One package, one env var, every module: SEO, Analytics, Forms, Articles, Commerce,
|
|
3
|
+
All-in-one integration kit for [Sonor](https://sonor.io)-powered Next.js sites. One package, one env var, every module: SEO, Analytics, Forms, Articles, Commerce, Website chat, Popups, GEO/AEO, Booking, Reputation, A/B Testing, and more — all managed from the Sonor dashboard at [app.sonor.io](https://app.sonor.io).
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -53,7 +53,7 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
|
53
53
|
}
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
`SiteKitLayout` is an RSC-compatible async Server Component that auto-composes: analytics tracking,
|
|
56
|
+
`SiteKitLayout` is an RSC-compatible async Server Component that auto-composes: analytics tracking, website chat, popups, favicons, and managed scripts. No client-side provider wrapping needed: client modules mount as deferred siblings after `{children}`, so the page stays server-rendered. Props and module options: [src/layout/README.md](src/layout/README.md).
|
|
57
57
|
|
|
58
58
|
**Proxy (optional but recommended):**
|
|
59
59
|
|
|
@@ -112,8 +112,8 @@ Every module has its own README in `src/<module>/README.md` with full API docs,
|
|
|
112
112
|
|
|
113
113
|
| Module | Import | Purpose | Docs |
|
|
114
114
|
|--------|--------|---------|------|
|
|
115
|
-
| **Website chat** | `@sonordev/site-kit/chat` | The chat launcher and Echo (Sonor → Messages) | [README](src/
|
|
116
|
-
| **Popups & Banners** | `@sonordev/site-kit/website/popups` | Popups, banners and toasts from Sonor → Website, drawn in the site's own design | [
|
|
115
|
+
| **Website chat** | `@sonordev/site-kit/chat` | The chat launcher and Echo (Sonor → Messages) | [README](src/chat/README.md) |
|
|
116
|
+
| **Popups & Banners** | `@sonordev/site-kit/website/popups` | Popups, banners and toasts from Sonor → Website, drawn in the site's own design | [README](src/website/README.md) |
|
|
117
117
|
| **Forms** | `@sonordev/site-kit/forms` | Managed forms with CRM routing, multi-step, validation | [README](src/forms/README.md) |
|
|
118
118
|
| **Signal** | `@sonordev/site-kit/signal` | A/B experiments, behavior tracking, real-time config | [README](src/signal/README.md) |
|
|
119
119
|
|
|
@@ -149,7 +149,7 @@ Three tiers as three subpaths — a site only installs and ships what it imports
|
|
|
149
149
|
|--------|--------|---------|------|
|
|
150
150
|
| **CTA bar** | `@sonordev/site-kit/website/cta-bar` | `<CtaBar>` + `<CtaBarAction>`: the floating glass mobile CTA bar. Hides over its form and while typing, compacts on scroll, lifts the Echo launcher, emits `cta_click`. Server component. | [README](src/cta-bar/README.md) |
|
|
151
151
|
|
|
152
|
-
Echo's launcher and chat window use the same glass recipe; see [
|
|
152
|
+
Echo's launcher and chat window use the same glass recipe; see [Website chat](src/chat/README.md#liquid-glass-610).
|
|
153
153
|
|
|
154
154
|
---
|
|
155
155
|
|
|
@@ -167,7 +167,8 @@ SiteKitLayout (RSC server component)
|
|
|
167
167
|
│
|
|
168
168
|
├── Client-side (childless siblings after {children}, deferred to idle):
|
|
169
169
|
│ ├── AnalyticsProvider (page views, scroll depth, Web Vitals)
|
|
170
|
-
│ ├──
|
|
170
|
+
│ ├── SitePopups (popups, banners, toasts)
|
|
171
|
+
│ ├── SiteChat (website chat: Echo)
|
|
171
172
|
│ ├── SignalBridge (A/B experiments, opt-in, not deferred)
|
|
172
173
|
│ ├── SitemapSync (browser sitemap fallback, opt-in)
|
|
173
174
|
│ └── FleetHeartbeat (kit version + modules, once per session)
|
|
@@ -209,7 +210,7 @@ import { OfferingCard, ProductPage, EventCalendar } from '@sonordev/site-kit/com
|
|
|
209
210
|
import { BookingWidget } from '@sonordev/site-kit/sync'
|
|
210
211
|
|
|
211
212
|
// Website chat, and popups (SiteKitLayout mounts both; its `chat` and `popups` props turn them off)
|
|
212
|
-
import { ChatWidget } from '@sonordev/site-kit/chat'
|
|
213
|
+
import { SiteChat, ChatWidget } from '@sonordev/site-kit/chat'
|
|
213
214
|
import { SitePopups, PopupBlocks } from '@sonordev/site-kit/website/popups'
|
|
214
215
|
|
|
215
216
|
// Signal (A/B)
|
|
@@ -322,7 +323,7 @@ import type { SiteKitLayoutProps } from '@sonordev/site-kit/layout'
|
|
|
322
323
|
`@sonordev/site-kit` is the client bridge between Next.js marketing sites and the Sonor platform. All persistent data (forms, articles, SEO config, analytics) lives in Sonor — site-kit fetches, renders, and tracks.
|
|
323
324
|
|
|
324
325
|
- **Server components** (SEO, Articles, Images): Import directly, RSC-compatible, no provider needed
|
|
325
|
-
- **Client modules** (Analytics,
|
|
326
|
+
- **Client modules** (Analytics, chat, popups, Signal): Lazy-loaded via `SiteKitLayout`, tree-shaken
|
|
326
327
|
- **Build-time** (Sitemap, llms.txt): Run during `next build`, sync to Sonor
|
|
327
328
|
- **Middleware** (Redirects, Security, AI Discovery): Runs on every request edge
|
|
328
329
|
|
package/agent-manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@sonordev/site-kit",
|
|
4
|
-
"version": "7.
|
|
4
|
+
"version": "7.2.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": [
|
|
@@ -139,7 +139,8 @@
|
|
|
139
139
|
"name": "engage",
|
|
140
140
|
"import": "@sonordev/site-kit/engage",
|
|
141
141
|
"side": "client",
|
|
142
|
-
"purpose": "
|
|
142
|
+
"purpose": "Deprecated alias, kept through 7.x: Engage was retired in Sonor. Re-exports ./chat (ChatWidget, chat types) and ./website/popups under the old names; EngageWidget draws SiteChat and SitePopups.",
|
|
143
|
+
"caution": "Import ./chat or ./website/popups instead, or let SiteKitLayout mount both (its chat and popups props). DesignRenderer (Engage Studio) is gone; popups render from blocks.",
|
|
143
144
|
"stability": "deprecated",
|
|
144
145
|
"movedTo": [
|
|
145
146
|
"@sonordev/site-kit/chat",
|
|
@@ -387,13 +388,13 @@
|
|
|
387
388
|
"name": "chat",
|
|
388
389
|
"import": "@sonordev/site-kit/chat",
|
|
389
390
|
"side": "client",
|
|
390
|
-
"purpose": "Website chat (Sonor → Messages):
|
|
391
|
+
"purpose": "Website chat (Sonor → Messages): SiteChat (idle-deferred launcher, gated like analytics), ChatWidget and Echo. SiteKitLayout mounts it (its `chat` prop); import it to place it yourself."
|
|
391
392
|
},
|
|
392
393
|
{
|
|
393
394
|
"name": "website/popups",
|
|
394
395
|
"import": "@sonordev/site-kit/website/popups",
|
|
395
396
|
"side": "client",
|
|
396
|
-
"purpose": "Website → Popups & Banners: SitePopups shows the popups published for
|
|
397
|
+
"purpose": "Website → Popups & Banners: SitePopups shows the popups, banners and toasts published for the site (only those with blocks), waiting while a visitor is mid-form; PopupBlocks draws one. SiteKitLayout mounts it (its `popups` prop)."
|
|
397
398
|
},
|
|
398
399
|
{
|
|
399
400
|
"name": "website/images",
|
|
@@ -732,6 +733,13 @@
|
|
|
732
733
|
"fix": "Remove the runtime export, then `npx sonor-setup codemod --write` moves the file to proxy.ts.",
|
|
733
734
|
"check": "middleware.netlify"
|
|
734
735
|
},
|
|
736
|
+
{
|
|
737
|
+
"id": "proxy.misplaced",
|
|
738
|
+
"symptom": "The build passes, but the site sends no security headers and runs no Sonor-managed redirects.",
|
|
739
|
+
"cause": "The proxy file sits where Next never reads it. Next reads proxy.ts (and the deprecated middleware.ts) only from the directory that holds the app: the project root, or src/ when the app is src/app. A proxy.ts at the root of a src/app site is ignored without a warning. sonor-setup 7.1.1's codemod renamed middleware.ts in place, which left it at the root on src/app sites.",
|
|
740
|
+
"fix": "Run `npx sonor-setup codemod --write` (7.1.2 or later): it moves the proxy beside the app and fixes its relative imports. It never overwrites, so when a proxy exists in both places it reports both and you keep the right one by hand. Rebuild and re-run doctor.",
|
|
741
|
+
"check": "middleware.netlify"
|
|
742
|
+
},
|
|
735
743
|
{
|
|
736
744
|
"id": "sitemap.trailing-slash",
|
|
737
745
|
"symptom": "Every sitemap URL except / 308-redirects to the same path with a trailing slash; the sitemap disagrees with the canonicals.",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-
|
|
1
|
+
export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-JWTQS5F5.js';
|
|
2
2
|
import './chunk-LCDVPAMR.js';
|
|
3
3
|
import './chunk-24QZEO3Q.js';
|
|
4
4
|
import './chunk-L2V5PUFN.js';
|
|
5
5
|
import './chunk-GJWI74ZZ.js';
|
|
6
6
|
import './chunk-43OCZ3JA.js';
|
|
7
7
|
import './chunk-EKBEOXTH.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
8
|
+
import './chunk-D6ZC7XKZ.js';
|
|
9
|
+
import './chunk-K4ZHAURD.js';
|
|
10
|
+
import './chunk-F24FNCTK.js';
|
|
11
11
|
import './chunk-PKBMQBKP.js';
|
|
@@ -3,9 +3,9 @@ import { useDeferredActivation } from './chunk-YC7ELZS3.js';
|
|
|
3
3
|
import { withSiteBody } from './chunk-MJP63SSS.js';
|
|
4
4
|
import './chunk-FESKKJAS.js';
|
|
5
5
|
import './chunk-A4CC4ZG3.js';
|
|
6
|
-
import { sonorFetch } from './chunk-
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
6
|
+
import { sonorFetch } from './chunk-D6ZC7XKZ.js';
|
|
7
|
+
import './chunk-K4ZHAURD.js';
|
|
8
|
+
import './chunk-F24FNCTK.js';
|
|
9
9
|
import './chunk-PKBMQBKP.js';
|
|
10
10
|
import { useEffect } from 'react';
|
|
11
11
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { getSiteDesignTokens } from './chunk-
|
|
3
|
-
import { DEFAULT_POPUP_TOKENS, PopupBlocks } from './chunk-
|
|
2
|
+
import { getSiteDesignTokens } from './chunk-JJ3DELUL.js';
|
|
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
6
|
import './chunk-43OCZ3JA.js';
|
|
7
7
|
import './chunk-EKBEOXTH.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
8
|
+
import './chunk-D6ZC7XKZ.js';
|
|
9
|
+
import './chunk-K4ZHAURD.js';
|
|
10
|
+
import './chunk-F24FNCTK.js';
|
|
11
11
|
import './chunk-PKBMQBKP.js';
|
|
12
12
|
import { useState } from 'react';
|
|
13
13
|
import { jsx } from 'react/jsx-runtime';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export { ChatWidget, EchoChat, isChatEnabled } from './chunk-64DKGVEI.js';
|
|
2
|
+
import './chunk-6T6CQVNL.js';
|
|
3
|
+
import './chunk-JE4A5S4F.js';
|
|
4
|
+
import './chunk-27FISYK4.js';
|
|
5
|
+
import './chunk-FR6BYFPC.js';
|
|
6
|
+
import './chunk-Q6E4OPGG.js';
|
|
7
|
+
import './chunk-C2FZBUSS.js';
|
|
8
|
+
import './chunk-5SQK3D53.js';
|
|
9
|
+
import './chunk-HW7B43E5.js';
|
|
10
|
+
import './chunk-NJCTQH2P.js';
|
|
11
|
+
import './chunk-S22FSH7C.js';
|
|
12
|
+
import './chunk-L2V5PUFN.js';
|
|
13
|
+
import './chunk-GJWI74ZZ.js';
|
|
14
|
+
import './chunk-D6ZC7XKZ.js';
|
|
15
|
+
import './chunk-K4ZHAURD.js';
|
|
16
|
+
import './chunk-F24FNCTK.js';
|
|
17
|
+
import './chunk-PKBMQBKP.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { sonorFetch } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
2
|
+
import { sonorFetch } from './chunk-D6ZC7XKZ.js';
|
|
3
|
+
import './chunk-K4ZHAURD.js';
|
|
4
|
+
import './chunk-F24FNCTK.js';
|
|
5
5
|
import './chunk-PKBMQBKP.js';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { StageStyles, SummaryTick } from './chunk-J4FSB4OG.js';
|
|
3
|
-
import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-
|
|
4
|
-
import { FormField } from './chunk-
|
|
5
|
-
import {
|
|
3
|
+
import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-D5DCBD4Y.js';
|
|
4
|
+
import { FormField } from './chunk-4NTBQNHA.js';
|
|
5
|
+
import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
|
|
6
|
+
import { isEmptyValue, unseenControlValues, isDisplayOnly } from './chunk-C2FZBUSS.js';
|
|
7
|
+
import './chunk-HW7B43E5.js';
|
|
8
|
+
import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
|
|
6
9
|
import './chunk-PKBMQBKP.js';
|
|
7
10
|
import { useMemo, useCallback, useState, useRef, useEffect } from 'react';
|
|
8
11
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -527,11 +530,21 @@ function FormSpotlight({
|
|
|
527
530
|
const handleSubmit = useCallback(
|
|
528
531
|
(e) => {
|
|
529
532
|
e.preventDefault();
|
|
530
|
-
|
|
533
|
+
const agent = readAgentSubmit(e.nativeEvent);
|
|
534
|
+
if (isSubmitting) {
|
|
535
|
+
agent.respond(Promise.resolve({ status: "busy" }));
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
531
538
|
clearAutoTimer();
|
|
532
|
-
|
|
539
|
+
const domFills = unseenControlValues(
|
|
540
|
+
e.currentTarget,
|
|
541
|
+
config.fields,
|
|
542
|
+
config.honeypot_field || DEFAULT_HONEYPOT_FIELD,
|
|
543
|
+
values
|
|
544
|
+
);
|
|
545
|
+
agent.respond(submit({ agentInvoked: agent.invoked, domFills }));
|
|
533
546
|
},
|
|
534
|
-
[isSubmitting, submit, clearAutoTimer]
|
|
547
|
+
[isSubmitting, submit, clearAutoTimer, config, values]
|
|
535
548
|
);
|
|
536
549
|
useEffect(() => {
|
|
537
550
|
const offender = questions.find((q) => errors[q.slug]);
|
|
@@ -560,6 +573,7 @@ function FormSpotlight({
|
|
|
560
573
|
ref: formRef,
|
|
561
574
|
className: `sk-form sk-spot ${live ? "sk-spot--live " : ""}${className || ""}`,
|
|
562
575
|
"data-sk-part": "spotlight",
|
|
576
|
+
...formToolAttributes(config),
|
|
563
577
|
"data-sk-state": isSubmitting ? "submitting" : "idle",
|
|
564
578
|
"data-sk-ready": ready && momentum.total > 0 ? "true" : void 0,
|
|
565
579
|
onSubmit: handleSubmit,
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { StageStyles, SummaryTick } from './chunk-J4FSB4OG.js';
|
|
3
|
-
import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-
|
|
4
|
-
import { FormField } from './chunk-
|
|
5
|
-
import {
|
|
3
|
+
import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-D5DCBD4Y.js';
|
|
4
|
+
import { FormField } from './chunk-4NTBQNHA.js';
|
|
5
|
+
import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
|
|
6
|
+
import { isEmptyValue, unseenControlValues } from './chunk-C2FZBUSS.js';
|
|
7
|
+
import './chunk-HW7B43E5.js';
|
|
8
|
+
import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
|
|
6
9
|
import './chunk-PKBMQBKP.js';
|
|
7
10
|
import { useState, useRef, useMemo, useEffect, useCallback } from 'react';
|
|
8
11
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
@@ -205,11 +208,27 @@ function FormStage({
|
|
|
205
208
|
const handleSubmit = useCallback(
|
|
206
209
|
(e) => {
|
|
207
210
|
e.preventDefault();
|
|
208
|
-
|
|
209
|
-
if (
|
|
210
|
-
|
|
211
|
+
const agent = readAgentSubmit(e.nativeEvent);
|
|
212
|
+
if (isSubmitting) {
|
|
213
|
+
agent.respond(Promise.resolve({ status: "busy" }));
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (activeIndex !== REST) {
|
|
217
|
+
advance();
|
|
218
|
+
agent.respond(
|
|
219
|
+
Promise.resolve({ status: "next_step", step: activeIndex + 2, totalSteps: views.length })
|
|
220
|
+
);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
const domFills = unseenControlValues(
|
|
224
|
+
e.currentTarget,
|
|
225
|
+
config.fields,
|
|
226
|
+
config.honeypot_field || DEFAULT_HONEYPOT_FIELD,
|
|
227
|
+
values
|
|
228
|
+
);
|
|
229
|
+
agent.respond(submit({ agentInvoked: agent.invoked, domFills }));
|
|
211
230
|
},
|
|
212
|
-
[activeIndex, isSubmitting, advance, submit]
|
|
231
|
+
[activeIndex, isSubmitting, advance, submit, config, values, views.length]
|
|
213
232
|
);
|
|
214
233
|
const handleFinaleSubmit = useCallback(() => {
|
|
215
234
|
hasInteractedRef.current = true;
|
|
@@ -230,6 +249,7 @@ function FormStage({
|
|
|
230
249
|
ref: formRef,
|
|
231
250
|
className: `sk-form sk-stage ${className || ""}`,
|
|
232
251
|
"data-sk-part": "stage",
|
|
252
|
+
...formToolAttributes(config),
|
|
233
253
|
"data-sk-state": isSubmitting ? "submitting" : "idle",
|
|
234
254
|
"data-sk-ready": activeIndex === REST && ready && total > 0 ? "true" : void 0,
|
|
235
255
|
onSubmit: handleSubmit,
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { ManagedForm } from './chunk-IAM3D3RL.js';
|
|
2
|
+
import './chunk-D5DCBD4Y.js';
|
|
3
|
+
import './chunk-DXO6SBMD.js';
|
|
4
|
+
import './chunk-4NTBQNHA.js';
|
|
5
|
+
import './chunk-FR6BYFPC.js';
|
|
6
|
+
import './chunk-Q6E4OPGG.js';
|
|
7
|
+
import './chunk-C2FZBUSS.js';
|
|
8
|
+
import './chunk-5SQK3D53.js';
|
|
9
|
+
import './chunk-HW7B43E5.js';
|
|
10
|
+
import './chunk-NJCTQH2P.js';
|
|
11
|
+
import './chunk-L2V5PUFN.js';
|
|
12
|
+
import './chunk-GJWI74ZZ.js';
|
|
13
|
+
import './chunk-D6ZC7XKZ.js';
|
|
14
|
+
import './chunk-K4ZHAURD.js';
|
|
15
|
+
import './chunk-F24FNCTK.js';
|
|
16
|
+
import './chunk-PKBMQBKP.js';
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { NewsletterShell } from './chunk-SC4MZGWZ.js';
|
|
2
2
|
import './chunk-GYF2ULVO.js';
|
|
3
|
-
import { useForm } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
import { useForm } from './chunk-FR6BYFPC.js';
|
|
4
|
+
import './chunk-Q6E4OPGG.js';
|
|
5
|
+
import './chunk-C2FZBUSS.js';
|
|
5
6
|
import './chunk-5SQK3D53.js';
|
|
7
|
+
import './chunk-HW7B43E5.js';
|
|
6
8
|
import './chunk-NJCTQH2P.js';
|
|
7
9
|
import './chunk-L2V5PUFN.js';
|
|
8
10
|
import './chunk-GJWI74ZZ.js';
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-D6ZC7XKZ.js';
|
|
12
|
+
import './chunk-K4ZHAURD.js';
|
|
13
|
+
import './chunk-F24FNCTK.js';
|
|
12
14
|
import './chunk-PKBMQBKP.js';
|
|
13
15
|
import { jsx } from 'react/jsx-runtime';
|
|
14
16
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-24QZEO3Q.js';
|
|
3
3
|
import { onPageLeave } from './chunk-L2V5PUFN.js';
|
|
4
4
|
import './chunk-GJWI74ZZ.js';
|
|
5
|
-
import { sonorFetch } from './chunk-
|
|
6
|
-
import { getFreshCredential, isSiteToken } from './chunk-
|
|
7
|
-
import './chunk-
|
|
5
|
+
import { sonorFetch } from './chunk-D6ZC7XKZ.js';
|
|
6
|
+
import { getFreshCredential, isSiteToken } from './chunk-K4ZHAURD.js';
|
|
7
|
+
import './chunk-F24FNCTK.js';
|
|
8
8
|
import './chunk-PKBMQBKP.js';
|
|
9
9
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
10
10
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { SiteDesignReporter } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { SiteDesignReporter } from './chunk-5YCEMV2L.js';
|
|
2
|
+
import './chunk-JJ3DELUL.js';
|
|
3
3
|
import './chunk-IHG36STL.js';
|
|
4
4
|
import './chunk-YC7ELZS3.js';
|
|
5
5
|
import './chunk-S22FSH7C.js';
|
|
6
6
|
import './chunk-43OCZ3JA.js';
|
|
7
7
|
import './chunk-EKBEOXTH.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
10
|
-
import './chunk-
|
|
8
|
+
import './chunk-D6ZC7XKZ.js';
|
|
9
|
+
import './chunk-K4ZHAURD.js';
|
|
10
|
+
import './chunk-F24FNCTK.js';
|
|
11
11
|
import './chunk-PKBMQBKP.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { SitePopups } from './chunk-EJVQJCG5.js';
|
|
2
|
+
import './chunk-27FISYK4.js';
|
|
3
|
+
import './chunk-24QZEO3Q.js';
|
|
4
|
+
import './chunk-GJWI74ZZ.js';
|
|
5
|
+
import './chunk-43OCZ3JA.js';
|
|
6
|
+
import './chunk-EKBEOXTH.js';
|
|
7
|
+
import './chunk-D6ZC7XKZ.js';
|
|
8
|
+
import './chunk-K4ZHAURD.js';
|
|
9
|
+
import './chunk-F24FNCTK.js';
|
|
10
|
+
import './chunk-PKBMQBKP.js';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { SitemapSync } from './chunk-GEXT7BTE.js';
|
|
2
|
+
import './chunk-YVKRYQRG.js';
|
|
3
|
+
import './chunk-43OCZ3JA.js';
|
|
4
|
+
import './chunk-EKBEOXTH.js';
|
|
5
|
+
import './chunk-D6ZC7XKZ.js';
|
|
6
|
+
import './chunk-K4ZHAURD.js';
|
|
7
|
+
import './chunk-F24FNCTK.js';
|
|
8
|
+
import './chunk-PKBMQBKP.js';
|
package/dist/SitemapSync.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SitemapSync - Automatically sync sitemap.xml to
|
|
2
|
+
* SitemapSync - Automatically sync sitemap.xml to Sonor API
|
|
3
3
|
*
|
|
4
4
|
* Client-only component. Lives at package root so the main entry does not
|
|
5
5
|
* pull in seo/ (and server-only code). For use in SiteKitLayout and
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { BookingWidget, BookingWidget_default as default } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
2
|
+
export { BookingWidget, BookingWidget_default as default } from '../chunk-GGORNBSC.js';
|
|
3
|
+
import '../chunk-BKY2ZNM7.js';
|
|
4
|
+
import '../chunk-D6ZC7XKZ.js';
|
|
5
|
+
import '../chunk-K4ZHAURD.js';
|
|
6
|
+
import '../chunk-F24FNCTK.js';
|
|
7
7
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @sonordev/site-kit/reputation - Testimonial Section
|
|
3
3
|
*
|
|
4
4
|
* Displays client reviews in a rotating carousel
|
|
5
|
-
* Fetches published reviews from
|
|
5
|
+
* Fetches published reviews from Sonor API public endpoint
|
|
6
6
|
*
|
|
7
7
|
* Minimal styling - let site CSS control appearance
|
|
8
8
|
*/
|
package/dist/affiliates/api.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @sonordev/site-kit/affiliates - Affiliates API
|
|
3
3
|
*
|
|
4
4
|
* API functions for fetching affiliate data for client sites.
|
|
5
|
-
* All data goes through
|
|
5
|
+
* All data goes through Sonor API with API key auth - never Supabase directly.
|
|
6
6
|
*/
|
|
7
7
|
import type { AffiliateWithOffers, FetchAffiliatesOptions } from './types';
|
|
8
8
|
/**
|
package/dist/affiliates/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { sonorFetch } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
2
|
+
import { sonorFetch } from '../chunk-D6ZC7XKZ.js';
|
|
3
|
+
import '../chunk-K4ZHAURD.js';
|
|
4
|
+
import '../chunk-F24FNCTK.js';
|
|
5
5
|
import '../chunk-PKBMQBKP.js';
|
|
6
6
|
import { useState, useEffect } from 'react';
|
|
7
7
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
@@ -27,7 +27,7 @@ interface AnalyticsProviderProps {
|
|
|
27
27
|
/** Callback invoked with page metadata after each page view (used by Signal bridge) */
|
|
28
28
|
onPageMetadata?: (metadata: Record<string, unknown>) => void;
|
|
29
29
|
/**
|
|
30
|
-
* Sub-site identifier (e.g. `
|
|
30
|
+
* Sub-site identifier (e.g. `ohio.example.com`). Every event tagged with
|
|
31
31
|
* this string so a single Sonor project can host many sites and the
|
|
32
32
|
* dashboard can filter / roll up per site. Normally passed in by
|
|
33
33
|
* SiteKitClientProviders; if omitted, falls back to
|
package/dist/analytics/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export { ContactTracking, useContactTracking } from '../chunk-P5GB6NEO.js';
|
|
3
|
-
export { AnalyticsProvider, WebVitals, useAnalytics, useAnalyticsOptional, useTrackEvent } from '../chunk-
|
|
3
|
+
export { AnalyticsProvider, WebVitals, useAnalytics, useAnalyticsOptional, useTrackEvent } from '../chunk-JWTQS5F5.js';
|
|
4
4
|
export { trackConversion, trackEvent } from '../chunk-LCDVPAMR.js';
|
|
5
5
|
import '../chunk-24QZEO3Q.js';
|
|
6
6
|
import '../chunk-L2V5PUFN.js';
|
|
7
7
|
import '../chunk-GJWI74ZZ.js';
|
|
8
8
|
export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from '../chunk-43OCZ3JA.js';
|
|
9
9
|
import '../chunk-EKBEOXTH.js';
|
|
10
|
-
import '../chunk-
|
|
11
|
-
import '../chunk-
|
|
12
|
-
import '../chunk-
|
|
10
|
+
import '../chunk-D6ZC7XKZ.js';
|
|
11
|
+
import '../chunk-K4ZHAURD.js';
|
|
12
|
+
import '../chunk-F24FNCTK.js';
|
|
13
13
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* {@link analyticsBeacon}. Do NOT call sonorFetch/sonorBeacon directly from
|
|
10
10
|
* this module, and do not re-fork the credential resolution below; the
|
|
11
11
|
* eight hand-rolled copies this replaced are exactly how a rule gets fixed
|
|
12
|
-
* in one place and left broken in seven
|
|
12
|
+
* in one place and left broken in seven.
|
|
13
13
|
* `send-gate.test.ts` fails the build if a new direct call appears.
|
|
14
14
|
*
|
|
15
|
-
* Fleet, client SitemapSync and
|
|
15
|
+
* Fleet, client SitemapSync, chat and popups also consult this gate. Local browser
|
|
16
16
|
* hosts are blocked regardless of configured production site identity. Node
|
|
17
17
|
* build callers retain their existing behavior.
|
|
18
18
|
*
|
|
@@ -26,33 +26,20 @@
|
|
|
26
26
|
*
|
|
27
27
|
* 2. IS THERE A CREDENTIAL? Unchanged behavior — no key, no send.
|
|
28
28
|
*
|
|
29
|
-
* ─── Why
|
|
29
|
+
* ─── Why ─────────────────────────────────────────────────────────────────
|
|
30
30
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* true of the PIXELS and false of the JAVASCRIPT: the overlay is an opacity
|
|
38
|
-
* layer over a live frame, so the embedded site loads, hydrates and runs its
|
|
39
|
-
* analytics whether or not it is ever revealed.
|
|
40
|
-
*
|
|
41
|
-
* Measured in the Sonor analytics table before this change (2026-09-08), the
|
|
42
|
-
* signature is unmistakable — from `analytics_page_views`, three views of `/`
|
|
43
|
-
* sharing ONE session_id and ONE visitor_id, milliseconds apart, with
|
|
44
|
-
* referrer `https://upforge.io/`:
|
|
45
|
-
*
|
|
46
|
-
* abbeyglenapts.com 20:02:13.852 / .900 / .921 (48ms, 21ms apart)
|
|
47
|
-
* goldenmilenky.com 04:12:23.840 / .868 / 24.624
|
|
48
|
-
* queencityriverboats 22:12:33.609 / .690 / .784
|
|
31
|
+
* Agency case studies embed a client's whole production site in desktop,
|
|
32
|
+
* tablet and mobile iframes, and `securityHeaders`' DEFAULT_FRAME_ANCESTORS
|
|
33
|
+
* lets them. A screenshot overlay on those frames hides the PIXELS, not the
|
|
34
|
+
* JAVASCRIPT: the overlay is an opacity layer over a live frame, so the
|
|
35
|
+
* embedded site loads, hydrates and runs its analytics whether or not it is
|
|
36
|
+
* ever revealed.
|
|
49
37
|
*
|
|
38
|
+
* The signature is unmistakable: three views of `/` sharing ONE session_id
|
|
39
|
+
* and ONE visitor_id, milliseconds apart, with the portfolio as referrer.
|
|
50
40
|
* Three loads of one page inside 70 milliseconds is not a person; it is the
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* on the day of the fix, the oldest from 2026-06-11. The widening of
|
|
54
|
-
* frame-ancestors to upforgelabs.com (upforge-nextjs 0c12be5) does not start
|
|
55
|
-
* this problem — it multiplies one that was already live.
|
|
41
|
+
* three frames of one case study, sharing storage because they share the
|
|
42
|
+
* embedded site's origin.
|
|
56
43
|
*
|
|
57
44
|
* ─── Same-origin frames are ALLOWED, deliberately ──────────────────────────
|
|
58
45
|
*
|
|
@@ -62,7 +62,7 @@ export interface ArticleServerProps {
|
|
|
62
62
|
unstyled?: boolean;
|
|
63
63
|
siteUrl?: string;
|
|
64
64
|
/**
|
|
65
|
-
* Sub-site host for multi-site projects (e.g. `
|
|
65
|
+
* Sub-site host for multi-site projects (e.g. `charlotte.example.com`). Scopes
|
|
66
66
|
* the post, related-posts and view-count calls to that host. Omit to resolve
|
|
67
67
|
* from NEXT_PUBLIC_SITE_URL. Separate from `siteUrl`, which only decides
|
|
68
68
|
* which links in the body open in a new tab.
|
|
@@ -57,7 +57,7 @@ export interface ArticleListServerProps {
|
|
|
57
57
|
orderBy?: 'published_at' | 'title' | 'view_count';
|
|
58
58
|
order?: 'asc' | 'desc';
|
|
59
59
|
/**
|
|
60
|
-
* Sub-site host for multi-site projects (e.g. `
|
|
60
|
+
* Sub-site host for multi-site projects (e.g. `charlotte.example.com`): the list
|
|
61
61
|
* shows that host's posts plus project-wide ones. Omit to resolve from
|
|
62
62
|
* NEXT_PUBLIC_SITE_URL.
|
|
63
63
|
*/
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - Pillar article (featured, large card)
|
|
8
8
|
* - Support articles (grid, categorized by article_type or funnel_stage)
|
|
9
9
|
*
|
|
10
|
-
* Server component — fetches cluster data from
|
|
10
|
+
* Server component — fetches cluster data from Sonor API.
|
|
11
11
|
* Ships with `.sk-cluster-landing-*` scoped styles.
|
|
12
12
|
*/
|
|
13
13
|
import React from 'react';
|
|
@@ -24,7 +24,7 @@ export interface ClusterLandingPageProps {
|
|
|
24
24
|
/**
|
|
25
25
|
* Include each article's own category segment in its URL:
|
|
26
26
|
* {basePath}/{category}/{slug}. Enable on sites whose article routes are
|
|
27
|
-
* category-segmented (e.g.
|
|
27
|
+
* category-segmented (e.g. /insights/{category}/{slug}) —
|
|
28
28
|
* without it, links point at {basePath}/{slug} and 404 on such sites.
|
|
29
29
|
*/
|
|
30
30
|
categoryInPath?: boolean;
|
|
@@ -8,7 +8,7 @@ import React from 'react';
|
|
|
8
8
|
import { PublicationSidebarProps } from './PublicationSidebar';
|
|
9
9
|
import type { PublicationRoutingOptions } from './routes';
|
|
10
10
|
export interface PublicationLayoutProps {
|
|
11
|
-
/**
|
|
11
|
+
/** Sonor API URL */
|
|
12
12
|
apiUrl?: string;
|
|
13
13
|
/** Project API key */
|
|
14
14
|
apiKey?: string;
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* (Google's profile-page markup for author pages).
|
|
21
21
|
* - The `Person` carries one `@id` everywhere it appears (`authorEntityId`):
|
|
22
22
|
* the row's `entity_id` when the person has a cross-site identity (e.g.
|
|
23
|
-
* https://
|
|
23
|
+
* https://example.com/#person), else `<author profile URL>#person`.
|
|
24
24
|
* - Article bylines (`generateArticleAuthorNode`) reference that same `@id`,
|
|
25
25
|
* so an article, its author page and the person's own site describe one
|
|
26
26
|
* person, which is what a Knowledge Panel is built from.
|