@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
|
@@ -24,17 +24,24 @@ export interface SubmitFormArgs {
|
|
|
24
24
|
honeypotValue: string;
|
|
25
25
|
/** Timestamp (ms) the form was first rendered — a weak anti-bot timing signal. */
|
|
26
26
|
formLoadedAt: number;
|
|
27
|
+
/**
|
|
28
|
+
* The browser reported that an AI agent pressed submit (WebMCP's
|
|
29
|
+
* `SubmitEvent.agentInvoked`). Sent so Sonor can tag the lead for the
|
|
30
|
+
* business; it is the browser's word, so it never changes how the
|
|
31
|
+
* submission is checked.
|
|
32
|
+
*/
|
|
33
|
+
agentInvoked?: boolean;
|
|
27
34
|
}
|
|
28
35
|
/**
|
|
29
36
|
* Submit a managed form. Throws on failure (network, timeout, or a non-2xx
|
|
30
37
|
* response) with a human-readable message; resolves with the parsed API
|
|
31
38
|
* response on success.
|
|
32
39
|
*/
|
|
33
|
-
export declare function submitForm({ config, values, honeypotValue, formLoadedAt, }: SubmitFormArgs): Promise<FormSubmitResult>;
|
|
40
|
+
export declare function submitForm({ config, values, honeypotValue, formLoadedAt, agentInvoked, }: SubmitFormArgs): Promise<FormSubmitResult>;
|
|
34
41
|
/**
|
|
35
42
|
* The receipt Sonor returns plus the values that were sent. `onSuccess`
|
|
36
43
|
* callers need the values (free-audit reads the website and email back), and
|
|
37
|
-
* the receipt alone never carried them:
|
|
44
|
+
* the receipt alone never carried them: a site's free-audit handler read
|
|
38
45
|
* `submission.data`, always got undefined, and sent its audit request with no
|
|
39
46
|
* email or URL.
|
|
40
47
|
*/
|
package/dist/forms/types.d.ts
CHANGED
|
@@ -88,7 +88,7 @@ export interface FormField {
|
|
|
88
88
|
destination_field?: string;
|
|
89
89
|
/**
|
|
90
90
|
* What the form says back once this field's row is answered, replacing the
|
|
91
|
-
* built-in sentence ("Nice to meet you,
|
|
91
|
+
* built-in sentence ("Nice to meet you, Jordan."). Set per field in Sonor;
|
|
92
92
|
* the first field in a row that defines one wins. Supports tokens:
|
|
93
93
|
* `{value}` (this field's answer), `{label}`, `{first_name}`, and
|
|
94
94
|
* `{slug}` for any other field's answer, e.g.
|
|
@@ -127,6 +127,45 @@ export interface ConditionalLogic {
|
|
|
127
127
|
* on purpose (a bot must not learn it was caught), so nothing here says
|
|
128
128
|
* whether the lead was accepted, routed or scored.
|
|
129
129
|
*/
|
|
130
|
+
/**
|
|
131
|
+
* Options for a managed form's `submit()`. All optional; `submit()` with no
|
|
132
|
+
* argument behaves exactly as it always has.
|
|
133
|
+
*/
|
|
134
|
+
export interface FormSubmitOptions {
|
|
135
|
+
/**
|
|
136
|
+
* The browser reported that an AI agent pressed submit (WebMCP's
|
|
137
|
+
* `SubmitEvent.agentInvoked`). Sonor tags the lead so the business can see
|
|
138
|
+
* how agent-sent leads compare; it changes nothing else about the submit.
|
|
139
|
+
*/
|
|
140
|
+
agentInvoked?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Values found in the form's controls that React state never received (a
|
|
143
|
+
* control set without an input event). Merged over blank state values
|
|
144
|
+
* before validating. See form-dom-values.ts.
|
|
145
|
+
*/
|
|
146
|
+
domFills?: Record<string, unknown>;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* What `submit()` resolves with. Callers that ignore it keep working; an
|
|
150
|
+
* agent that submitted through WebMCP is handed this as its result.
|
|
151
|
+
*/
|
|
152
|
+
export type FormSubmitOutcome = {
|
|
153
|
+
status: 'sent';
|
|
154
|
+
message: string;
|
|
155
|
+
submissionId?: string;
|
|
156
|
+
} | {
|
|
157
|
+
status: 'invalid';
|
|
158
|
+
errors: Record<string, string>;
|
|
159
|
+
} | {
|
|
160
|
+
status: 'failed';
|
|
161
|
+
message: string;
|
|
162
|
+
} | {
|
|
163
|
+
status: 'busy';
|
|
164
|
+
} | {
|
|
165
|
+
status: 'next_step';
|
|
166
|
+
step: number;
|
|
167
|
+
totalSteps: number;
|
|
168
|
+
};
|
|
130
169
|
export interface FormSubmitResult {
|
|
131
170
|
success: boolean;
|
|
132
171
|
/** The form_submissions row id (same as submissionId). */
|
|
@@ -166,7 +205,7 @@ export interface FormAnalytics {
|
|
|
166
205
|
* - 'spotlight' — THE 4.0 DEFAULT. The classic layout, alive: a glowing ring
|
|
167
206
|
* visits the active field, and each completed row collapses
|
|
168
207
|
* into a sentence the form says back ("Nice to meet you,
|
|
169
|
-
*
|
|
208
|
+
* Jordan.") with an edit affordance to reopen it.
|
|
170
209
|
* - 'stage' — accordion: beats expand/collapse on one surface, answered
|
|
171
210
|
* beats settle into filled rows
|
|
172
211
|
* - 'classic' — the plain grid form, no choreography
|
|
@@ -197,7 +236,7 @@ export interface ExperienceRenderProps {
|
|
|
197
236
|
isFieldVisible: (field: FormField) => boolean;
|
|
198
237
|
fieldIsComplete: (field: FormField) => boolean;
|
|
199
238
|
applyFieldError: (slug: string, error: string) => void;
|
|
200
|
-
submit: () => Promise<
|
|
239
|
+
submit: (options?: FormSubmitOptions) => Promise<FormSubmitOutcome>;
|
|
201
240
|
trackStepChange: (step: number) => void;
|
|
202
241
|
/** Pass to each FormField's onFocus/onBlur (field_interactions). */
|
|
203
242
|
trackFieldFocus: (slug: string) => void;
|
|
@@ -206,7 +245,7 @@ export interface ExperienceRenderProps {
|
|
|
206
245
|
honeypot: React.ReactNode;
|
|
207
246
|
}
|
|
208
247
|
export interface ManagedFormProps {
|
|
209
|
-
/** Form key from
|
|
248
|
+
/** Form key from Sonor */
|
|
210
249
|
formId: string;
|
|
211
250
|
/** @deprecated Project is resolved from API key by the backend. Omit this prop. */
|
|
212
251
|
projectId?: string;
|
|
@@ -269,7 +308,7 @@ export interface FormRenderProps {
|
|
|
269
308
|
/** Go to specific step */
|
|
270
309
|
goToStep: (step: number) => void;
|
|
271
310
|
/** Submit the form */
|
|
272
|
-
submit: () => Promise<
|
|
311
|
+
submit: (options?: FormSubmitOptions) => Promise<FormSubmitOutcome>;
|
|
273
312
|
/** Set field value */
|
|
274
313
|
setFieldValue: (key: string, value: unknown) => void;
|
|
275
314
|
/** Check if field should be visible (conditional logic) */
|
package/dist/forms/useForm.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* const { form, fields, values, errors, setFieldValue, submit, isSubmitting } = useForm('contact-form')
|
|
10
10
|
*
|
|
11
11
|
* return (
|
|
12
|
-
* <form onSubmit={
|
|
12
|
+
* <form {...toolAttributes} onSubmit={handleSubmit}>
|
|
13
13
|
* {fields.map(field => (
|
|
14
14
|
* <MyCustomInput
|
|
15
15
|
* key={field.slug}
|
|
@@ -24,7 +24,9 @@
|
|
|
24
24
|
* )
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
import type {
|
|
27
|
+
import type { DeclarativeToolFormAttributes } from '../mcp/declarative';
|
|
28
|
+
import type { FormEvent } from 'react';
|
|
29
|
+
import type { ManagedFormConfig, FormField, FormSubmitOptions, FormSubmitOutcome, FormSubmitResult } from './types';
|
|
28
30
|
export interface UseFormOptions {
|
|
29
31
|
/** Project ID (defaults to SiteKitLayout config) */
|
|
30
32
|
projectId?: string;
|
|
@@ -98,8 +100,23 @@ export interface UseFormReturn {
|
|
|
98
100
|
validateField: (field: FormField) => string | null;
|
|
99
101
|
/** Check if a field is visible (conditional logic) */
|
|
100
102
|
isFieldVisible: (field: FormField) => boolean;
|
|
101
|
-
/**
|
|
102
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Submit the form. Resolves with what happened (sent, invalid, failed,
|
|
105
|
+
* busy); ignoring the result is fine.
|
|
106
|
+
*/
|
|
107
|
+
submit: (options?: FormSubmitOptions) => Promise<FormSubmitOutcome>;
|
|
108
|
+
/**
|
|
109
|
+
* A ready-made `<form onSubmit>`: prevents the native submit, moves to the
|
|
110
|
+
* next step or submits, and hands an AI agent that submitted through
|
|
111
|
+
* WebMCP the outcome. Prefer it to calling `submit()` yourself.
|
|
112
|
+
*/
|
|
113
|
+
handleSubmit: (event: FormEvent<HTMLFormElement>) => void;
|
|
114
|
+
/**
|
|
115
|
+
* WebMCP attributes for your `<form>` (`toolname`, `tooldescription`), so
|
|
116
|
+
* a browser agent can fill it as a tool. Spread them on the form element.
|
|
117
|
+
* Null until the form config loads.
|
|
118
|
+
*/
|
|
119
|
+
toolAttributes: DeclarativeToolFormAttributes | null;
|
|
103
120
|
/** Submission state */
|
|
104
121
|
isSubmitting: boolean;
|
|
105
122
|
isComplete: boolean;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit/forms - managed forms as WebMCP tools
|
|
3
|
+
*
|
|
4
|
+
* Every managed form carries the declarative WebMCP attributes (`toolname`,
|
|
5
|
+
* `tooldescription`), so a browser agent can treat it as a tool: it fills the
|
|
6
|
+
* same controls a person would and the submit runs the same validation and
|
|
7
|
+
* files the same lead. There is deliberately no `toolautosubmit`. The agent
|
|
8
|
+
* fills the fields and the person it's helping presses Send, which is the
|
|
9
|
+
* right default for anything that files a lead or sends a message.
|
|
10
|
+
*
|
|
11
|
+
* Browsers that don't implement WebMCP ignore the attributes. Each field's
|
|
12
|
+
* label is what an agent reads to understand it (FormField adds the help
|
|
13
|
+
* text as `toolparamdescription` where there is some).
|
|
14
|
+
*
|
|
15
|
+
* Single source of truth for a managed form's tool name and description, and
|
|
16
|
+
* for reading an agent's submit (`SubmitEvent.agentInvoked`, `respondWith`).
|
|
17
|
+
* FormClient, FormSpotlight, FormStage, StaticForm and useForm all use it.
|
|
18
|
+
*/
|
|
19
|
+
import { type DeclarativeToolFormAttributes } from '../mcp/declarative';
|
|
20
|
+
import type { ManagedFormConfig } from './types';
|
|
21
|
+
/** `contact-page` -> `submit_contact_page`. Stable, snake_case, unique per form. */
|
|
22
|
+
export declare function formToolName(config: Pick<ManagedFormConfig, 'slug'>): string;
|
|
23
|
+
/** The tool description an agent reads to decide whether this form is the one. */
|
|
24
|
+
export declare function formToolDescription(config: Pick<ManagedFormConfig, 'name' | 'form_type' | 'description'>): string;
|
|
25
|
+
/** Spread onto the managed form's `<form>` element. */
|
|
26
|
+
export declare function formToolAttributes(config: Pick<ManagedFormConfig, 'slug' | 'name' | 'form_type' | 'description'>): DeclarativeToolFormAttributes;
|
|
27
|
+
export interface AgentSubmit {
|
|
28
|
+
/** True when the browser reports that an AI agent submitted the form. */
|
|
29
|
+
invoked: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Hand the agent the outcome of its submit. Call it synchronously inside
|
|
32
|
+
* the submit handler, after `preventDefault()`. A no-op unless an agent
|
|
33
|
+
* submitted and the browser supports `respondWith`.
|
|
34
|
+
*/
|
|
35
|
+
respond: (outcome: Promise<unknown>) => void;
|
|
36
|
+
}
|
|
37
|
+
/** Read an agent's submit off a native SubmitEvent (`e.nativeEvent` in React). */
|
|
38
|
+
export declare function readAgentSubmit(event: Event | null | undefined): AgentSubmit;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ManagedImage -
|
|
2
|
+
* ManagedImage - Sonor-managed image component
|
|
3
3
|
*
|
|
4
4
|
* Features:
|
|
5
|
-
* - Fetches images from
|
|
5
|
+
* - Fetches images from Sonor API via API key (never direct Supabase)
|
|
6
6
|
* - Dev mode: Click to open image picker modal
|
|
7
7
|
* - Supports responsive variants
|
|
8
8
|
* - Automatic focal point handling
|
|
@@ -43,7 +43,7 @@ export interface ImageFile {
|
|
|
43
43
|
public_url?: string;
|
|
44
44
|
}
|
|
45
45
|
export interface ManagedImageProps {
|
|
46
|
-
/** API key for
|
|
46
|
+
/** API key for Sonor API */
|
|
47
47
|
apiKey?: string;
|
|
48
48
|
/** API URL (defaults to https://api.sonor.io) */
|
|
49
49
|
apiUrl?: string;
|
|
@@ -51,7 +51,7 @@ export interface ManagedImageProps {
|
|
|
51
51
|
slotId: string;
|
|
52
52
|
/** Page path for page-specific slots (defaults to current path) */
|
|
53
53
|
pagePath?: string;
|
|
54
|
-
/** Fallback alt text if not set in
|
|
54
|
+
/** Fallback alt text if not set in Sonor */
|
|
55
55
|
alt?: string;
|
|
56
56
|
/** CSS class names */
|
|
57
57
|
className?: string;
|
package/dist/images/api.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Images API functions
|
|
3
3
|
*
|
|
4
|
-
* All functions use
|
|
4
|
+
* All functions use Sonor API with API key authentication.
|
|
5
5
|
* Never makes direct Supabase calls.
|
|
6
6
|
*/
|
|
7
7
|
import type { ManagedImageData, ImageFile } from './ManagedImage';
|
package/dist/images/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @sonordev/site-kit Images Module
|
|
3
3
|
*
|
|
4
|
-
* Provides managed image components for
|
|
5
|
-
* All API calls go through
|
|
4
|
+
* Provides managed image components for Sonor integration.
|
|
5
|
+
* All API calls go through Sonor API with API key auth.
|
|
6
6
|
*/
|
|
7
7
|
export { ManagedImage } from './ManagedImage';
|
|
8
8
|
export type { ManagedImageProps, ManagedImageData, ImageFile } from './ManagedImage';
|
package/dist/images/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-
|
|
1
|
+
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-JMLK6MH7.js';
|
|
2
2
|
export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-D6ZC7XKZ.js';
|
|
4
|
+
import '../chunk-K4ZHAURD.js';
|
|
5
|
+
import '../chunk-F24FNCTK.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
package/dist/index.d.ts
CHANGED
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
export { SITE_KIT_VERSION } from './shared/version';
|
|
16
16
|
export type { ManagedMetadataResult, ManagedSchemaProps, ManagedFAQData } from './seo/types';
|
|
17
17
|
export type { AnalyticsConfig, AnalyticsEvent, PageView } from './analytics/types';
|
|
18
|
-
export type {
|
|
18
|
+
export type { ChatConfig } from './chat/types';
|
|
19
|
+
export type { SitePopup } from './website/popup-types';
|
|
20
|
+
/** Deprecated names (engage was retired): SitePopup and SitePopupConfig. */
|
|
21
|
+
export type { EngageElement, WidgetConfig } from './engage/types';
|
|
19
22
|
export type { ManagedFormConfig, FormSubmission, FormSubmitResult, FormField } from './forms/types';
|
|
20
23
|
export type { Article as ArticleType, ArticleAuthor, ArticleCategory } from './articles/types';
|
|
21
24
|
export type { CommerceOffering, CommerceCategory, CommerceVariant, CommerceSchedule, OfferingType, Cart, CartItem, } from './commerce/types';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { SITE_KIT_VERSION } from './chunk-
|
|
1
|
+
export { SITE_KIT_VERSION } from './chunk-F24FNCTK.js';
|
|
2
2
|
import './chunk-PKBMQBKP.js';
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Landing-page campaign contract.
|
|
3
3
|
*
|
|
4
|
-
* normalizeCampaignSlug is an inlined MIRROR of
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* vectors (sonor-api's campaign.util.spec.ts and this package's
|
|
4
|
+
* normalizeCampaignSlug is an inlined MIRROR of the Sonor API's campaign
|
|
5
|
+
* normalizer (the CANONICAL copy); keep the function body byte-identical.
|
|
6
|
+
* Both sides assert the same fixed vectors (this package's
|
|
8
7
|
* landing/contract.test.ts), so silent drift fails CI on either side.
|
|
9
8
|
*
|
|
10
9
|
* A slug normalized here always matches the server's canonical form, so the
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SiteKitClientProviders — Client Island
|
|
3
3
|
*
|
|
4
4
|
* This is the 'use client' boundary for SiteKitLayout.
|
|
5
|
-
* It composes the client-only providers (Analytics,
|
|
5
|
+
* It composes the client-only providers (Analytics, chat, popups, Signal, SitemapSync)
|
|
6
6
|
* that require React context or browser APIs.
|
|
7
7
|
*
|
|
8
8
|
* All modules are lazy-loaded via next/dynamic so their JS is only downloaded
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* All modules share a unified identity (visitor ID + session ID) read from
|
|
12
12
|
* the storage-backed singleton (shared/identity), ensuring consistent
|
|
13
|
-
* tracking across Analytics, Signal, and
|
|
13
|
+
* tracking across Analytics, Signal, chat and popups.
|
|
14
14
|
*
|
|
15
15
|
* 4.0 INVARIANT — CHILDREN ARE NEVER WRAPPED. Every module here renders as a
|
|
16
16
|
* childless sibling AFTER {children}; nothing provides context around page
|
|
@@ -37,7 +37,7 @@ export interface SiteKitClientProvidersProps {
|
|
|
37
37
|
signal?: boolean | SignalConfig;
|
|
38
38
|
/**
|
|
39
39
|
* Runtime SitemapSync from the visitor's browser. Default FALSE — sitemap
|
|
40
|
-
* registration belongs to build time and to
|
|
40
|
+
* registration belongs to build time and to Sonor's nightly reconciler,
|
|
41
41
|
* not to whoever happens to load the page. See SiteKitLayout for the full
|
|
42
42
|
* reasoning; in short, its guards live in session/localStorage, so every new
|
|
43
43
|
* visitor missed them and re-POSTed the whole sitemap.
|
|
@@ -56,7 +56,7 @@ export interface SiteKitClientProvidersProps {
|
|
|
56
56
|
*/
|
|
57
57
|
design?: boolean | DesignConfig;
|
|
58
58
|
/**
|
|
59
|
-
* Defer Analytics /
|
|
59
|
+
* Defer Analytics / chat / popups / SitemapSync until window load + idle or first
|
|
60
60
|
* interaction (default true). Pass false to restore legacy eager mounting
|
|
61
61
|
* on hydration. SignalBridge is never deferred — it must apply experiment
|
|
62
62
|
* variants as early as possible.
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
* site-kit feature your layout needs:
|
|
6
6
|
*
|
|
7
7
|
* Server-side (RSC):
|
|
8
|
-
* - ManagedFavicon (link tags from
|
|
8
|
+
* - ManagedFavicon (link tags from the project logo in Sonor)
|
|
9
9
|
* - ManagedScripts position="head" (tracking pixels, analytics tags)
|
|
10
10
|
* - ManagedScripts position="body-end"
|
|
11
11
|
*
|
|
12
12
|
* Client-side (island):
|
|
13
13
|
* - AnalyticsProvider (page views, scroll depth, heatmap, web vitals)
|
|
14
|
-
* -
|
|
14
|
+
* - SitePopups (Website → Popups & Banners) and SiteChat (Website chat)
|
|
15
15
|
* - SignalBridge (A/B experiments, behavior tracking)
|
|
16
|
-
* - SitemapSync (keeps
|
|
16
|
+
* - SitemapSync (keeps Sonor seo_pages in sync)
|
|
17
17
|
*
|
|
18
18
|
* @example
|
|
19
19
|
* ```tsx
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
*
|
|
38
38
|
* @example Opt out of specific features:
|
|
39
39
|
* ```tsx
|
|
40
|
-
* <SiteKitLayout
|
|
40
|
+
* <SiteKitLayout chat={false} popups={false} signal={false}>
|
|
41
41
|
* {children}
|
|
42
42
|
* </SiteKitLayout>
|
|
43
43
|
* ```
|
|
@@ -46,11 +46,11 @@ import * as React from 'react';
|
|
|
46
46
|
import type { AnalyticsConfig, ChatLayoutConfig, DesignConfig, EngageConfig, SignalConfig } from './types';
|
|
47
47
|
export interface SiteKitLayoutProps {
|
|
48
48
|
children: React.ReactNode;
|
|
49
|
-
/**
|
|
49
|
+
/** Sonor API key. Defaults to SONOR_API_KEY env var. */
|
|
50
50
|
apiKey?: string;
|
|
51
|
-
/**
|
|
51
|
+
/** Sonor API URL. Defaults to env or https://api.sonor.io */
|
|
52
52
|
apiUrl?: string;
|
|
53
|
-
/** Project ID (for
|
|
53
|
+
/** Project ID (for chat routing). Auto-resolved if not provided. */
|
|
54
54
|
projectId?: string;
|
|
55
55
|
/** Analytics tracking. true (default) | false | config object */
|
|
56
56
|
analytics?: boolean | AnalyticsConfig;
|
|
@@ -69,13 +69,13 @@ export interface SiteKitLayoutProps {
|
|
|
69
69
|
* Runtime SitemapSync from the visitor's browser. **Default: false.**
|
|
70
70
|
*
|
|
71
71
|
* Sitemap registration is a build-time and server-side job. Build-time
|
|
72
|
-
* `createSitemap` is canonical, and
|
|
72
|
+
* `createSitemap` is canonical, and Sonor's nightly reconciler fetches
|
|
73
73
|
* each host's /sitemap.xml itself, so nothing here needs a visitor.
|
|
74
74
|
*
|
|
75
75
|
* This defaulted to true, and because its throttle lives in sessionStorage
|
|
76
76
|
* and its content hash in localStorage, every first-time visitor, incognito
|
|
77
|
-
* tab and crawler missed both guards and re-POSTed the entire sitemap
|
|
78
|
-
*
|
|
77
|
+
* tab and crawler missed both guards and re-POSTed the entire sitemap, so
|
|
78
|
+
* a busy site took well over a hundred full syncs a day.
|
|
79
79
|
* That coupled sitemap traffic to VISITOR COUNT rather than to content
|
|
80
80
|
* changes — exactly backwards — and made every reader pay for platform
|
|
81
81
|
* bookkeeping in bandwidth, XML parsing and an API round-trip.
|
|
@@ -100,7 +100,7 @@ export interface SiteKitLayoutProps {
|
|
|
100
100
|
*/
|
|
101
101
|
design?: boolean | DesignConfig;
|
|
102
102
|
/**
|
|
103
|
-
* Defer client modules (Analytics,
|
|
103
|
+
* Defer client modules (Analytics, chat, popups, SitemapSync) until window load +
|
|
104
104
|
* idle or the first user interaction, keeping their JS and mount work out of
|
|
105
105
|
* the critical hydration path. Default: true. Pass false to restore legacy
|
|
106
106
|
* eager mounting. SignalBridge is never deferred.
|
package/dist/layout/client.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SiteKitClientProviders — Client Island
|
|
3
3
|
*
|
|
4
4
|
* This is the 'use client' boundary for SiteKitLayout.
|
|
5
|
-
* It composes the client-only providers (Analytics,
|
|
5
|
+
* It composes the client-only providers (Analytics, chat, popups, Signal, SitemapSync)
|
|
6
6
|
* that require React context or browser APIs.
|
|
7
7
|
*
|
|
8
8
|
* All modules are lazy-loaded via next/dynamic so their JS is only downloaded
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* All modules share a unified identity (visitor ID + session ID) read from
|
|
12
12
|
* the storage-backed singleton (shared/identity), ensuring consistent
|
|
13
|
-
* tracking across Analytics, Signal, and
|
|
13
|
+
* tracking across Analytics, Signal, chat and popups.
|
|
14
14
|
*
|
|
15
15
|
* 4.0 INVARIANT — CHILDREN ARE NEVER WRAPPED. Every module here renders as a
|
|
16
16
|
* childless sibling AFTER {children}; nothing provides context around page
|
|
@@ -37,7 +37,7 @@ export interface SiteKitClientProvidersProps {
|
|
|
37
37
|
signal?: boolean | SignalConfig;
|
|
38
38
|
/**
|
|
39
39
|
* Runtime SitemapSync from the visitor's browser. Default FALSE — sitemap
|
|
40
|
-
* registration belongs to build time and to
|
|
40
|
+
* registration belongs to build time and to Sonor's nightly reconciler,
|
|
41
41
|
* not to whoever happens to load the page. See SiteKitLayout for the full
|
|
42
42
|
* reasoning; in short, its guards live in session/localStorage, so every new
|
|
43
43
|
* visitor missed them and re-POSTed the whole sitemap.
|
|
@@ -56,7 +56,7 @@ export interface SiteKitClientProvidersProps {
|
|
|
56
56
|
*/
|
|
57
57
|
design?: boolean | DesignConfig;
|
|
58
58
|
/**
|
|
59
|
-
* Defer Analytics /
|
|
59
|
+
* Defer Analytics / chat / popups / SitemapSync until window load + idle or first
|
|
60
60
|
* interaction (default true). Pass false to restore legacy eager mounting
|
|
61
61
|
* on hydration. SignalBridge is never deferred — it must apply experiment
|
|
62
62
|
* variants as early as possible.
|
package/dist/layout/client.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SiteKitClientProviders } from '../chunk-
|
|
2
|
+
export { SiteKitClientProviders } from '../chunk-VO3JYRT5.js';
|
|
3
3
|
import '../chunk-6G43IRWR.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-HGFAEDG3.js';
|
|
5
|
+
import '../chunk-CF5QNFYU.js';
|
|
6
6
|
import '../chunk-ZTZQPYP6.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-S54ECQGY.js';
|
|
8
8
|
import '../chunk-YC7ELZS3.js';
|
|
9
9
|
import '../chunk-FESKKJAS.js';
|
|
10
10
|
import '../chunk-A4CC4ZG3.js';
|
|
@@ -12,7 +12,7 @@ import '../chunk-24QZEO3Q.js';
|
|
|
12
12
|
import '../chunk-GJWI74ZZ.js';
|
|
13
13
|
import '../chunk-43OCZ3JA.js';
|
|
14
14
|
import '../chunk-EKBEOXTH.js';
|
|
15
|
-
import '../chunk-
|
|
16
|
-
import '../chunk-
|
|
17
|
-
import '../chunk-
|
|
15
|
+
import '../chunk-D6ZC7XKZ.js';
|
|
16
|
+
import '../chunk-K4ZHAURD.js';
|
|
17
|
+
import '../chunk-F24FNCTK.js';
|
|
18
18
|
import '../chunk-PKBMQBKP.js';
|
package/dist/layout/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { SiteKitClientProviders } from '../chunk-
|
|
1
|
+
import { SiteKitClientProviders } from '../chunk-VO3JYRT5.js';
|
|
2
2
|
import '../chunk-6G43IRWR.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-HGFAEDG3.js';
|
|
4
|
+
import '../chunk-CF5QNFYU.js';
|
|
5
5
|
import '../chunk-ZTZQPYP6.js';
|
|
6
6
|
import { ManagedFavicon } from '../chunk-GW7GSBO7.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-S54ECQGY.js';
|
|
8
8
|
import '../chunk-YC7ELZS3.js';
|
|
9
|
-
import { resolveClientCredential } from '../chunk-
|
|
9
|
+
import { resolveClientCredential } from '../chunk-RPZ7OQGD.js';
|
|
10
10
|
import '../chunk-VX5CMNMM.js';
|
|
11
11
|
import { ManagedScripts } from '../chunk-MVLMXC44.js';
|
|
12
12
|
import { resolveApiOrigin } from '../chunk-X6F6SO4S.js';
|
|
@@ -17,9 +17,9 @@ import '../chunk-24QZEO3Q.js';
|
|
|
17
17
|
import '../chunk-GJWI74ZZ.js';
|
|
18
18
|
import '../chunk-43OCZ3JA.js';
|
|
19
19
|
import '../chunk-EKBEOXTH.js';
|
|
20
|
-
import '../chunk-
|
|
21
|
-
import '../chunk-
|
|
22
|
-
import '../chunk-
|
|
20
|
+
import '../chunk-D6ZC7XKZ.js';
|
|
21
|
+
import '../chunk-K4ZHAURD.js';
|
|
22
|
+
import '../chunk-F24FNCTK.js';
|
|
23
23
|
import '../chunk-PKBMQBKP.js';
|
|
24
24
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
25
25
|
|
package/dist/layout/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Kept in a shared file so both server (SiteKitLayout) and client
|
|
4
4
|
* (SiteKitClientProviders) components can reference them.
|
|
5
5
|
*/
|
|
6
|
-
import type { ChatLauncherPlacement } from '../
|
|
6
|
+
import type { ChatLauncherPlacement } from '../chat/types';
|
|
7
7
|
import type { SiteDesignConfig } from '../website/design';
|
|
8
8
|
/**
|
|
9
9
|
* The site's design, for popups (Website → Popups & Banners). site-kit
|
|
@@ -20,7 +20,7 @@ export interface AnalyticsConfig {
|
|
|
20
20
|
excludePaths?: string[];
|
|
21
21
|
/**
|
|
22
22
|
* Sub-site identifier — the domain/brand this set of pages belongs to under
|
|
23
|
-
* the Sonor project (e.g. `
|
|
23
|
+
* the Sonor project (e.g. `ohio.example.com`, `example.com`).
|
|
24
24
|
* Every analytics event is tagged with this dimension so a single Sonor
|
|
25
25
|
* project can host many sites and the dashboard can filter / roll up per
|
|
26
26
|
* site. If omitted, SiteKitLayout falls back to the host of
|
|
@@ -33,7 +33,7 @@ export interface AnalyticsConfig {
|
|
|
33
33
|
*
|
|
34
34
|
* A framed page's visitor is on whoever framed it, not on this site, so by
|
|
35
35
|
* default an embed reports nothing — see `analytics/send-gate.ts` for the
|
|
36
|
-
* phantom traffic that prompted this (
|
|
36
|
+
* phantom traffic that prompted this (agency case studies embed live
|
|
37
37
|
* client sites, and every view was writing page views into the client's own
|
|
38
38
|
* project). Same-origin frames are never blocked: a site embedding itself
|
|
39
39
|
* is a real visit to that site.
|
|
@@ -47,9 +47,10 @@ export interface AnalyticsConfig {
|
|
|
47
47
|
allowLocalhost?: boolean;
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
|
-
* Launcher placement (`position`,
|
|
51
|
-
* ChatLauncherPlacement in
|
|
52
|
-
* config surface extends
|
|
50
|
+
* The deprecated `engage` prop's config. Launcher placement (`position`,
|
|
51
|
+
* `offsetBottom`, `zIndex`) comes from ChatLauncherPlacement in chat/types,
|
|
52
|
+
* the one definition every chat config surface extends; `zIndex` also stacks
|
|
53
|
+
* popups.
|
|
53
54
|
*/
|
|
54
55
|
export interface EngageConfig extends ChatLauncherPlacement {
|
|
55
56
|
chatEnabled?: boolean;
|
|
@@ -17,8 +17,8 @@ import type { SpeakableSchemaProps, SpeakableConfig } from './types';
|
|
|
17
17
|
* // In a page component
|
|
18
18
|
* <SpeakableSchema
|
|
19
19
|
* type="Article"
|
|
20
|
-
* name="Family Law Services in
|
|
21
|
-
* url="https://
|
|
20
|
+
* name="Family Law Services in Springfield"
|
|
21
|
+
* url="https://example.com/family-law"
|
|
22
22
|
* speakable={{
|
|
23
23
|
* cssSelectors: ['.page-summary', '.key-points', 'h1']
|
|
24
24
|
* }}
|
|
@@ -24,7 +24,7 @@ export declare function formatAgentAccessSection(baseUrl: string, options?: Agen
|
|
|
24
24
|
/**
|
|
25
25
|
* Add the section to finished markdown, once. Left out when the markdown
|
|
26
26
|
* already points agents at a server card: a site describing its own MCP
|
|
27
|
-
* server
|
|
27
|
+
* server in a section of its own keeps its own words.
|
|
28
28
|
*/
|
|
29
29
|
export declare function appendAgentAccessSection(markdown: string, baseUrl: string, options?: AgentAccessOptions): string;
|
|
30
30
|
/** The markdown already tells agents where an MCP server is. */
|
|
@@ -33,7 +33,7 @@ export declare function describesMcp(markdown: string): boolean;
|
|
|
33
33
|
* - `built-in`: site-kit's Sonor tools (`sonorMcpServer` / `sonorMcpTools`),
|
|
34
34
|
* what `npx sonor-setup mcp` writes. site-kit's automatic MCP extras (the
|
|
35
35
|
* llms.txt section) are on for these.
|
|
36
|
-
* - `custom`: the site runs an MCP server of its own
|
|
36
|
+
* - `custom`: the site runs an MCP server of its own. site-kit
|
|
37
37
|
* leaves it alone: nothing automatic, `sonor-setup mcp` won't write over
|
|
38
38
|
* it, and anything it adds is opt-in.
|
|
39
39
|
* - `null`: no MCP server.
|
package/dist/llms/aiRobots.d.ts
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* - createRobotsTxtHandler(): a plain-text robots.txt route handler.
|
|
12
12
|
*
|
|
13
13
|
* No `Content-Signal` line is ever emitted (6.3.4). Google's robots.txt
|
|
14
|
-
* parser reports it as an "Unknown directive" error in Search Console
|
|
15
|
-
*
|
|
14
|
+
* parser reports it as an "Unknown directive" error in Search Console, and
|
|
15
|
+
* robots.txt is the one file
|
|
16
16
|
* that must parse cleanly for every crawler. Training/retrieval preferences
|
|
17
17
|
* are expressed by the per-crawler Allow/Disallow rules instead, which every
|
|
18
18
|
* crawler understands.
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
* Retrieval/search agents — fetch on demand or index for AI search, cite sources.
|
|
29
29
|
*
|
|
30
30
|
* MistralAI-User (Le Chat fetching a page for a user) and YouBot (You.com's
|
|
31
|
-
* search index) were added 2026-09-15
|
|
32
|
-
*
|
|
31
|
+
* search index) were added 2026-09-15, after a site had to name them in its
|
|
32
|
+
* own robots.txt beside this list.
|
|
33
33
|
*/
|
|
34
34
|
export declare const AI_RETRIEVAL_CRAWLERS: readonly ['OAI-SearchBot', 'ChatGPT-User', 'Claude-SearchBot', 'Claude-User', 'PerplexityBot', 'Perplexity-User', 'GoogleOther', 'Applebot', 'DuckAssistBot', 'MistralAI-User', 'YouBot'];
|
|
35
35
|
/**
|
package/dist/llms/api.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export declare const getFAQItems: (projectId?: string, limit?: number, site?: st
|
|
|
35
35
|
*/
|
|
36
36
|
export declare const getPageSummaries: (projectId?: string, limit?: number, site?: string) => Promise<LLMPageSummary[]>;
|
|
37
37
|
/**
|
|
38
|
-
* Fetch AI-optimized llms.txt markdown from
|
|
38
|
+
* Fetch AI-optimized llms.txt markdown from Sonor API (build-time)
|
|
39
39
|
* Used by writeLLMsTxtToPublic for static file generation
|
|
40
40
|
*
|
|
41
41
|
* Always fresh (shared/fresh-fetch.ts). With Next's patched fetch and no cache
|
|
@@ -44,7 +44,7 @@ export declare const getPageSummaries: (projectId?: string, limit?: number, site
|
|
|
44
44
|
*/
|
|
45
45
|
export declare function getOptimizedLLMsTxt(options?: {
|
|
46
46
|
full?: boolean;
|
|
47
|
-
/** Matches
|
|
47
|
+
/** Matches Sonor GET /api/public/llms/txt?publicSummaryOnly=true */
|
|
48
48
|
publicSummaryOnly?: boolean;
|
|
49
49
|
/**
|
|
50
50
|
* Sub-site host — scopes the page index to THIS domain on multi-site
|
package/dist/llms/contract.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { LLMS_DISCLAIMER_MAX_LENGTH, LLMS_PUBLIC_SUMMARY_MAX_LENGTH, LLM_GEO_CONTRACT_VERSION, MANAGED_LLM_SCHEMA_KNOWN_KEYS, isEmittableReviewNode, pickManagedLlmSchemaForJsonLd, sanitizeLlmsDisclaimerLine, sanitizeLlmsPublicSummary, sanitizePrimaryLanguageTag } from '../chunk-
|
|
1
|
+
export { LLMS_DISCLAIMER_MAX_LENGTH, LLMS_PUBLIC_SUMMARY_MAX_LENGTH, LLM_GEO_CONTRACT_VERSION, MANAGED_LLM_SCHEMA_KNOWN_KEYS, clipAtWordBoundary, isEmittableReviewNode, pickManagedLlmSchemaForJsonLd, sanitizeLlmsDisclaimerLine, sanitizeLlmsPublicSummary, sanitizePrimaryLanguageTag } from '../chunk-NZ4RXN3G.js';
|
|
2
2
|
import '../chunk-PKBMQBKP.js';
|