@sonordev/site-kit 7.1.2 → 7.3.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 +1 -1
- package/CHANGELOG.md +60 -0
- package/README.md +9 -8
- package/agent-manifest.json +17 -7
- package/dist/{AnalyticsProvider-ZB33W6MC.js → AnalyticsProvider-DJQA66AG.js} +4 -4
- package/dist/{ArticleViewTracker-GMHYLLLZ.js → ArticleViewTracker-GFOAXFV7.js} +3 -3
- package/dist/{BlocksPopup-EA6LYL25.js → BlocksPopup-AHDU34TL.js} +5 -5
- package/dist/ChatWidget-FHBAHFZX.js +17 -0
- package/dist/{FileField-QKA3JB2Q.js → FileField-J5W5MIAZ.js} +3 -3
- package/dist/{FormSpotlight-AQTIA5TP.js → FormSpotlight-PE5YZBFZ.js} +20 -6
- package/dist/{FormStage-FDTLTP3B.js → FormStage-OOPQC27J.js} +27 -7
- package/dist/ManagedForm-JRZAJ7SZ.js +16 -0
- package/dist/{ManagedNewsletterForm-J6QSAGGP.js → ManagedNewsletterForm-TC5542ZG.js} +7 -5
- package/dist/{SignalCore-JZNXOLNT.js → SignalCore-2YP5FCAS.js} +3 -3
- package/dist/SiteChat-EGEZJJVV.js +5 -0
- package/dist/{SiteDesignReporter-W4EJUSTE.js → SiteDesignReporter-YEEWJKWN.js} +5 -5
- package/dist/SitePopups-LQBIXIFV.js +10 -0
- package/dist/SitemapSync-LSZ2EYOF.js +8 -0
- package/dist/_client/booking-widget.js +5 -5
- package/dist/affiliates/index.js +3 -3
- package/dist/analytics/index.js +4 -4
- package/dist/analytics/send-gate.d.ts +1 -1
- package/dist/articles/index.js +2 -2
- package/dist/articles/server-ui.js +3 -2
- package/dist/articles/server.js +2 -1
- package/dist/{engage → chat}/ChatWidget.d.ts +7 -6
- package/dist/{engage → chat}/EchoUiActions.d.ts +1 -1
- package/dist/chat/SiteChat.d.ts +25 -0
- package/dist/{engage → chat}/brand-color.d.ts +1 -1
- 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-HF57LG73.js → chunk-2AD3CDRR.js} +43 -29
- package/dist/{chunk-M3YEPKP7.js → chunk-2ECWEUHP.js} +1 -1
- package/dist/{chunk-LUXVWITO.js → chunk-4NTBQNHA.js} +247 -78
- package/dist/{chunk-AH5Q262S.js → chunk-56KNHB4U.js} +1 -1
- package/dist/{chunk-GLHQ3LRO.js → chunk-6U3VLV2C.js} +1 -1
- package/dist/{chunk-3SDOQUUF.js → chunk-BEBR4OJD.js} +2 -2
- package/dist/{chunk-JSZN6LDZ.js → chunk-BF7TZYC3.js} +38 -31
- package/dist/{chunk-AQSNPZY4.js → chunk-C2FZBUSS.js} +80 -1
- package/dist/{chunk-PHYMNUJU.js → chunk-CYUFBKJQ.js} +1 -1
- package/dist/{chunk-6WIQCXOO.js → chunk-DNPNYWVL.js} +1 -1
- package/dist/{chunk-V6FDQLR7.js → chunk-EPT6FJUY.js} +53 -21
- package/dist/chunk-HODO5BX5.js +28 -0
- package/dist/chunk-HW7B43E5.js +14 -0
- package/dist/{chunk-PGMVL4AB.js → chunk-I2YX3HVD.js} +2 -2
- package/dist/{chunk-JTU2GOM4.js → chunk-L7U23XI2.js} +18 -6
- package/dist/{chunk-YEMPUQVU.js → chunk-MKMD2HJW.js} +2 -2
- package/dist/{chunk-Q4W23JYM.js → chunk-MRQ2U4LZ.js} +1 -1
- package/dist/chunk-MVR4FY5R.js +187 -0
- package/dist/{chunk-VGH4MDTU.js → chunk-NI2XNEMR.js} +1 -1
- package/dist/{chunk-4Y5FWDPM.js → chunk-NZ4RXN3G.js} +55 -7
- package/dist/{chunk-RHNWA34F.js → chunk-O5RGXTWU.js} +41 -7
- package/dist/{chunk-TXBAOEKG.js → chunk-PKGN32AU.js} +5 -4
- package/dist/chunk-Q6E4OPGG.js +40 -0
- package/dist/chunk-RDPW4D33.js +45 -0
- package/dist/{chunk-UXOGCKL6.js → chunk-T4DLETKR.js} +1 -1
- package/dist/{chunk-NK4CSJNP.js → chunk-UPRSH6Q4.js} +2 -2
- package/dist/{chunk-ERXXITG4.js → chunk-VF4F5WXZ.js} +1 -1
- package/dist/chunk-VWWITFWM.js +300 -0
- package/dist/{chunk-WWSHFRDL.js → chunk-WDQB4OXY.js} +7 -3
- package/dist/{chunk-VDF5DFWT.js → chunk-WGG6GTKW.js} +1 -1
- package/dist/{chunk-CSTQDNGK.js → chunk-WGIDC6QP.js} +43 -24
- package/dist/{chunk-V3PUVBME.js → chunk-XLSQTTUE.js} +2 -4
- package/dist/{chunk-JBE46QJZ.js → chunk-Y6LP36UW.js} +1 -1
- package/dist/chunk-YJLS6JBI.js +370 -0
- package/dist/{chunk-QEDHRBAT.js → chunk-Z65DHMTW.js} +26 -9
- package/dist/{chunk-ILU5I6RW.js → chunk-ZHS2XFLV.js} +1 -1
- package/dist/{chunk-D5EC5KVO.js → chunk-ZKHI4E2B.js} +2 -2
- package/dist/{chunk-CIG5UL2S.js → chunk-ZTLMPUO6.js} +3 -2
- package/dist/client/index.js +3 -3
- package/dist/commerce/index.js +4 -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/llms.d.ts +1 -0
- package/dist/contracts/proposal-sitemap.d.ts +130 -0
- package/dist/contracts/schema-placeholders.d.ts +87 -0
- 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 +1 -1
- package/dist/fleet/index.js +4 -4
- package/dist/forms/FormEnhancer.d.ts +25 -12
- package/dist/forms/ServerForm.d.ts +11 -10
- package/dist/forms/StaticForm.d.ts +3 -1
- package/dist/forms/field-autocomplete.d.ts +28 -0
- package/dist/forms/form-dom-values.d.ts +42 -0
- package/dist/forms/index.js +11 -9
- package/dist/forms/server.js +6 -4
- package/dist/forms/static.js +3 -2
- package/dist/forms/submitForm.d.ts +8 -1
- package/dist/forms/types.d.ts +41 -2
- package/dist/forms/useForm.d.ts +21 -4
- package/dist/forms/webmcp.d.ts +38 -0
- package/dist/images/index.js +4 -4
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -1
- package/dist/layout/SiteKitClientProviders.d.ts +3 -3
- package/dist/layout/SiteKitLayout.d.ts +4 -4
- package/dist/layout/client.d.ts +3 -3
- package/dist/layout/client.js +7 -7
- package/dist/layout/index.js +8 -8
- package/dist/layout/types.d.ts +5 -4
- package/dist/llms/agent-access.d.ts +4 -0
- package/dist/llms/contract.js +1 -1
- package/dist/llms/index.js +6 -6
- package/dist/maps/index.js +3 -3
- package/dist/mcp/WebMcpTools.d.ts +5 -4
- package/dist/mcp/client.js +14 -7
- package/dist/mcp/discovery.d.ts +48 -0
- package/dist/mcp/handlers.d.ts +13 -7
- package/dist/mcp/index.d.ts +5 -3
- package/dist/mcp/index.js +62 -30
- package/dist/mcp/serverCard.d.ts +6 -7
- package/dist/mcp/sonor.js +14 -11
- package/dist/revalidate/index.js +2 -2
- package/dist/seo/client.js +4 -4
- 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.js +1 -1
- package/dist/seo/sitemap.js +4 -4
- package/dist/server/index.js +2 -2
- package/dist/shared/dialog.d.ts +27 -0
- 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/reporting-gate.d.ts +1 -1
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/visual-viewport-gap.d.ts +1 -1
- package/dist/signal/index.js +2 -2
- package/dist/signal/types.d.ts +1 -1
- package/dist/sitemap/index.js +4 -4
- package/dist/{socket-loader-R24ZSRSQ.js → socket-loader-CGIPEG74.js} +1 -1
- package/dist/sync/index.js +5 -5
- package/dist/types.d.ts +3 -1
- package/dist/{web-vitals.attribution-GD6LGLVF.js → web-vitals.attribution-N2PCCF4Q.js} +1 -1
- package/dist/website/BlocksPopup.d.ts +1 -1
- package/dist/website/PopupBlocks.d.ts +5 -2
- 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-G3JBNBC5.js → writeLLMsTxt-2NQVDGYI.js} +3 -3
- package/docs/MIGRATING-TO-7.md +41 -9
- package/docs.json +2 -1
- package/package.json +2 -2
- package/src/analytics/README.md +2 -2
- package/src/articles/README.md +4 -1
- package/src/{engage → chat}/README.md +63 -62
- package/src/forms/README.md +49 -3
- package/src/layout/README.md +8 -5
- package/src/llms/README.md +69 -0
- package/src/mcp/README.md +50 -16
- package/src/seo/README.md +3 -1
- package/src/sync/README.md +10 -0
- package/src/website/README.md +133 -0
- package/dist/ChatWidget-UCDWMWCW.js +0 -15
- package/dist/EngageWidget-7ZYSK4GE.js +0 -11
- package/dist/ManagedForm-H7BVAH2W.js +0 -14
- package/dist/SitemapSync-XBANGKHZ.js +0 -8
- package/dist/chunk-NDF4A5JM.js +0 -37
- package/dist/chunk-VLARKWZU.js +0 -100
- package/dist/chunk-YCJT4JJG.js +0 -837
- package/dist/engage/DesignRenderer.d.ts +0 -57
- package/dist/engage/element-rules.d.ts +0 -38
package/dist/mcp/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { MCP_SUPPORTED_PROTOCOL_VERSIONS, dispatch, errorOutcome, JSONRPC_INVALID_REQUEST, META_CLIENT_INFO, JSONRPC_PARSE_ERROR, MCP_PROTOCOL_VERSION_MODERN } from '../chunk-FYAB6CXS.js';
|
|
2
2
|
export { JSONRPC_METHOD_NOT_FOUND, MCP_ERROR_HEADER_MISMATCH, MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION, MCP_PROTOCOL_VERSIONS_LEGACY, MCP_PROTOCOL_VERSION_MODERN, MCP_SUPPORTED_PROTOCOL_VERSIONS, META_CLIENT_INFO, META_PROTOCOL_VERSION, META_SERVER_INFO, dispatch, isSupportedVersion, toToolDescriptor, toToolResult, toolErrorResult, validateArgs } from '../chunk-FYAB6CXS.js';
|
|
3
|
+
export { declarativeToolField, declarativeToolForm } from '../chunk-HW7B43E5.js';
|
|
3
4
|
import '../chunk-PKBMQBKP.js';
|
|
5
|
+
import { createHash } from 'crypto';
|
|
4
6
|
|
|
5
7
|
// src/mcp/types.ts
|
|
6
8
|
function defineMcpTool(tool) {
|
|
@@ -9,6 +11,7 @@ function defineMcpTool(tool) {
|
|
|
9
11
|
|
|
10
12
|
// src/mcp/serverCard.ts
|
|
11
13
|
var MCP_SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
|
|
14
|
+
var MCP_SERVER_CARD_MEDIA_TYPE = "application/mcp-server-card+json";
|
|
12
15
|
var MCP_SERVER_CARD_PATH = "/.well-known/mcp-server-card";
|
|
13
16
|
var MCP_SERVER_CARD_LEGACY_PATH = "/.well-known/mcp.json";
|
|
14
17
|
var SITE_KIT_CARD_META_KEY = "io.sonor.site-kit/tools";
|
|
@@ -69,6 +72,60 @@ function validateMcpServerCard(card) {
|
|
|
69
72
|
}
|
|
70
73
|
return problems;
|
|
71
74
|
}
|
|
75
|
+
var MCP_AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
|
|
76
|
+
var MCP_AI_CATALOG_MEDIA_TYPE = "application/ai-catalog+json";
|
|
77
|
+
function buildMcpAiCatalog(options) {
|
|
78
|
+
const base = new URL(options.baseUrl);
|
|
79
|
+
if (!["http:", "https:"].includes(base.protocol) || base.username || base.password || base.search || base.hash || base.pathname !== "/") {
|
|
80
|
+
throw new Error("baseUrl must be an explicit HTTP(S) origin without credentials, query or fragment");
|
|
81
|
+
}
|
|
82
|
+
const name = /^[^/\s]+\/([^/\s]+)$/.exec(options.info.name)?.[1];
|
|
83
|
+
if (!name) {
|
|
84
|
+
throw new Error('info.name must have a namespace and server name, e.g. "io.example/weather"');
|
|
85
|
+
}
|
|
86
|
+
const path = options.serverCardPath;
|
|
87
|
+
if (!path || path.startsWith("//") || path.includes("\\") || /^[a-z][a-z\d+.-]*:/i.test(path)) {
|
|
88
|
+
throw new Error("serverCardPath must be an origin-relative path");
|
|
89
|
+
}
|
|
90
|
+
const cardUrl = new URL(path.startsWith("/") ? path : `/${path}`, base);
|
|
91
|
+
if (cardUrl.hash) throw new Error("serverCardPath must not include a fragment");
|
|
92
|
+
return {
|
|
93
|
+
specVersion: "1.0",
|
|
94
|
+
entries: [{
|
|
95
|
+
identifier: `urn:air:${base.hostname}:mcp:${encodeURIComponent(name)}`,
|
|
96
|
+
type: MCP_SERVER_CARD_MEDIA_TYPE,
|
|
97
|
+
url: cardUrl.href
|
|
98
|
+
}]
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function createMcpAiCatalogHandler(options) {
|
|
102
|
+
return createMcpDiscoveryHandlers(buildMcpAiCatalog(options), {
|
|
103
|
+
mediaType: MCP_AI_CATALOG_MEDIA_TYPE,
|
|
104
|
+
maxAge: options.maxAge
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
function createMcpDiscoveryHandlers(document, options) {
|
|
108
|
+
const body = `${JSON.stringify(document, null, 2)}
|
|
109
|
+
`;
|
|
110
|
+
const etag = `W/"${createHash("sha256").update(body).digest("base64url")}"`;
|
|
111
|
+
const maxAge = options.maxAge ?? 3600;
|
|
112
|
+
if (!Number.isSafeInteger(maxAge) || maxAge < 0) {
|
|
113
|
+
throw new Error("maxAge must be a non-negative integer");
|
|
114
|
+
}
|
|
115
|
+
const headers = {
|
|
116
|
+
"Content-Type": options.mediaType,
|
|
117
|
+
"Cache-Control": `public, max-age=${maxAge}`,
|
|
118
|
+
ETag: etag,
|
|
119
|
+
"Access-Control-Allow-Origin": "*",
|
|
120
|
+
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
|
121
|
+
"Access-Control-Allow-Headers": "Accept, Content-Type, If-None-Match",
|
|
122
|
+
"Access-Control-Expose-Headers": "ETag"
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
GET: async () => new Response(body, { status: 200, headers }),
|
|
126
|
+
OPTIONS: async () => new Response(null, { status: 204, headers })
|
|
127
|
+
};
|
|
128
|
+
}
|
|
72
129
|
|
|
73
130
|
// src/mcp/handlers.ts
|
|
74
131
|
var MCP_REQUEST_HEADERS = [
|
|
@@ -255,35 +312,10 @@ function createMcpHandler(options) {
|
|
|
255
312
|
return { POST, GET: methodNotAllowed, DELETE: methodNotAllowed, OPTIONS };
|
|
256
313
|
}
|
|
257
314
|
function createMcpServerCardHandler(options) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
const headers = {
|
|
263
|
-
"Content-Type": "application/json",
|
|
264
|
-
"Cache-Control": `public, max-age=${maxAge}`,
|
|
265
|
-
// The card is a discovery document — it is meant to be fetched by anyone.
|
|
266
|
-
"Access-Control-Allow-Origin": "*",
|
|
267
|
-
"Access-Control-Allow-Methods": "GET, OPTIONS",
|
|
268
|
-
"Access-Control-Allow-Headers": "Content-Type"
|
|
269
|
-
};
|
|
270
|
-
return {
|
|
271
|
-
GET: async () => new Response(body, { status: 200, headers }),
|
|
272
|
-
OPTIONS: async () => new Response(null, { status: 204, headers })
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// src/mcp/declarative.ts
|
|
277
|
-
function declarativeToolForm(options) {
|
|
278
|
-
const attributes = {
|
|
279
|
-
toolname: options.name,
|
|
280
|
-
tooldescription: options.description
|
|
281
|
-
};
|
|
282
|
-
if (options.autoSubmit) attributes.toolautosubmit = "";
|
|
283
|
-
return attributes;
|
|
284
|
-
}
|
|
285
|
-
function declarativeToolField(description) {
|
|
286
|
-
return { toolparamdescription: description };
|
|
315
|
+
return createMcpDiscoveryHandlers(buildMcpServerCard(options), {
|
|
316
|
+
mediaType: options.contentType ?? "application/json",
|
|
317
|
+
maxAge: options.maxAge
|
|
318
|
+
});
|
|
287
319
|
}
|
|
288
320
|
|
|
289
|
-
export { MCP_SERVER_CARD_LEGACY_PATH, MCP_SERVER_CARD_PATH, MCP_SERVER_CARD_SCHEMA, SITE_KIT_CARD_META_KEY, WEBMCP_SURFACE_HEADER,
|
|
321
|
+
export { MCP_AI_CATALOG_MEDIA_TYPE, MCP_AI_CATALOG_PATH, MCP_SERVER_CARD_LEGACY_PATH, MCP_SERVER_CARD_MEDIA_TYPE, MCP_SERVER_CARD_PATH, MCP_SERVER_CARD_SCHEMA, SITE_KIT_CARD_META_KEY, WEBMCP_SURFACE_HEADER, buildMcpAiCatalog, buildMcpServerCard, createMcpAiCatalogHandler, createMcpHandler, createMcpServerCardHandler, decodeHeaderValue, defineMcpTool, toolCallRecord, validateMcpServerCard };
|
package/dist/mcp/serverCard.d.ts
CHANGED
|
@@ -11,16 +11,15 @@
|
|
|
11
11
|
* with enough identity attached that a human reviewing the connection knows
|
|
12
12
|
* what they're approving.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* URLs costs nothing, so `createMcpServerCardHandler` is mounted at both.
|
|
19
|
-
* `mcp-server-card` is the canonical one; `mcp.json` is compatibility.
|
|
14
|
+
* The existing well-known paths stay available for compatibility. The newer
|
|
15
|
+
* experimental discovery draft uses a domain AI Catalog pointing to a card
|
|
16
|
+
* URL, with `<streamable-http-url>/server-card` as its recommended location.
|
|
17
|
+
* Hosts can mount the same card handler there without changing the old URLs.
|
|
20
18
|
*/
|
|
21
19
|
import type { McpServerIcon, McpServerInfo, SiteKitMcpTool } from './types';
|
|
22
20
|
export declare const MCP_SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
|
|
23
|
-
|
|
21
|
+
export declare const MCP_SERVER_CARD_MEDIA_TYPE = "application/mcp-server-card+json";
|
|
22
|
+
/** Existing site-kit well-known path; retained for backward compatibility. */
|
|
24
23
|
export declare const MCP_SERVER_CARD_PATH = "/.well-known/mcp-server-card";
|
|
25
24
|
/** Superseded SEP-1649 path, still widely probed. */
|
|
26
25
|
export declare const MCP_SERVER_CARD_LEGACY_PATH = "/.well-known/mcp.json";
|
package/dist/mcp/sonor.js
CHANGED
|
@@ -1,30 +1,33 @@
|
|
|
1
1
|
import { toolErrorResult } from '../chunk-FYAB6CXS.js';
|
|
2
2
|
import { fetchReviews, fetchReviewStats } from '../chunk-EDYHROQ7.js';
|
|
3
3
|
import { getOfferings } from '../chunk-G3NHWMP5.js';
|
|
4
|
-
import { fetchBookingTypes, fetchAvailability } from '../chunk-
|
|
5
|
-
import { getLLMsData, getServices, getFAQItems, getPageSummaries } from '../chunk-
|
|
6
|
-
import { getFormConfig } from '../chunk-
|
|
7
|
-
import '../chunk-
|
|
4
|
+
import { fetchBookingTypes, fetchAvailability } from '../chunk-2ECWEUHP.js';
|
|
5
|
+
import { getLLMsData, getServices, getFAQItems, getPageSummaries } from '../chunk-6U3VLV2C.js';
|
|
6
|
+
import { getFormConfig } from '../chunk-XLSQTTUE.js';
|
|
7
|
+
import '../chunk-MVR4FY5R.js';
|
|
8
8
|
import '../chunk-YC7ELZS3.js';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-ZTLMPUO6.js';
|
|
10
10
|
import '../chunk-DXO6SBMD.js';
|
|
11
|
-
import '../chunk-
|
|
12
|
-
import { getAllArticles, getArticle } from '../chunk-
|
|
11
|
+
import '../chunk-4NTBQNHA.js';
|
|
12
|
+
import { getAllArticles, getArticle } from '../chunk-PKGN32AU.js';
|
|
13
13
|
import '../chunk-Y3INC4QJ.js';
|
|
14
14
|
import '../chunk-QXMIKDOL.js';
|
|
15
15
|
import '../chunk-WMVK77ND.js';
|
|
16
16
|
import { resolveFetch } from '../chunk-VX5CMNMM.js';
|
|
17
|
-
import '../chunk-
|
|
17
|
+
import '../chunk-NZ4RXN3G.js';
|
|
18
|
+
import '../chunk-VWWITFWM.js';
|
|
18
19
|
import '../chunk-MJP63SSS.js';
|
|
19
20
|
import { resolveServerApiConfig } from '../chunk-X6F6SO4S.js';
|
|
20
21
|
import '../chunk-MH2DSGC6.js';
|
|
21
22
|
import { resolveSiteHost } from '../chunk-FESKKJAS.js';
|
|
22
23
|
import '../chunk-A4CC4ZG3.js';
|
|
24
|
+
import '../chunk-C2FZBUSS.js';
|
|
23
25
|
import '../chunk-5SQK3D53.js';
|
|
26
|
+
import '../chunk-HW7B43E5.js';
|
|
24
27
|
import '../chunk-NJCTQH2P.js';
|
|
25
|
-
import '../chunk-
|
|
26
|
-
import '../chunk-
|
|
27
|
-
import { SITE_KIT_VERSION } from '../chunk-
|
|
28
|
+
import '../chunk-BEBR4OJD.js';
|
|
29
|
+
import '../chunk-WGG6GTKW.js';
|
|
30
|
+
import { SITE_KIT_VERSION } from '../chunk-56KNHB4U.js';
|
|
28
31
|
import '../chunk-PKBMQBKP.js';
|
|
29
32
|
import 'server-only';
|
|
30
33
|
import { after } from 'next/server.js';
|
package/dist/revalidate/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createSeoRevalidationHandler } from '../chunk-
|
|
1
|
+
import { createSeoRevalidationHandler } from '../chunk-NI2XNEMR.js';
|
|
2
2
|
import '../chunk-XTRZGXB2.js';
|
|
3
3
|
export { SITE_CACHE_TAGS, SITE_REVALIDATE_PATH, isSiteRevalidatePong } from '../chunk-RYVDGXC2.js';
|
|
4
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-56KNHB4U.js';
|
|
5
5
|
import '../chunk-PKBMQBKP.js';
|
|
6
6
|
|
|
7
7
|
// src/revalidate/index.ts
|
package/dist/seo/client.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SitemapSync } from '../chunk-
|
|
2
|
+
export { SitemapSync } from '../chunk-T4DLETKR.js';
|
|
3
3
|
import '../chunk-YVKRYQRG.js';
|
|
4
4
|
import '../chunk-43OCZ3JA.js';
|
|
5
5
|
import '../chunk-EKBEOXTH.js';
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-BEBR4OJD.js';
|
|
7
|
+
import '../chunk-WGG6GTKW.js';
|
|
8
|
+
import '../chunk-56KNHB4U.js';
|
|
9
9
|
import '../chunk-PKBMQBKP.js';
|
package/dist/seo/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { ManagedNoScripts, ManagedScripts } from '../chunk-MVLMXC44.js';
|
|
2
|
-
import { pickManagedLlmSchemaForJsonLd } from '../chunk-
|
|
2
|
+
import { pickManagedLlmSchemaForJsonLd } from '../chunk-NZ4RXN3G.js';
|
|
3
3
|
import { safeJsonLd } from '../chunk-4KZ6W3ZH.js';
|
|
4
|
-
|
|
4
|
+
import { withoutSchemaPlaceholders } from '../chunk-VWWITFWM.js';
|
|
5
|
+
export { SitemapSync } from '../chunk-T4DLETKR.js';
|
|
5
6
|
import { getManagedMetadata } from '../chunk-4YTYGG2C.js';
|
|
6
7
|
export { generateSitemap, getABVariant, getManagedMetadata, getManagedMetadataWithAB, getRedirect, getRobotsDirective, isIndexable } from '../chunk-4YTYGG2C.js';
|
|
7
8
|
import { getContentBlock, getSchemaMarkups, getSEOPageData, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities, pruneSchemaTypes } from '../chunk-662ILEZ6.js';
|
|
@@ -17,9 +18,9 @@ import '../chunk-FESKKJAS.js';
|
|
|
17
18
|
import '../chunk-A4CC4ZG3.js';
|
|
18
19
|
import '../chunk-43OCZ3JA.js';
|
|
19
20
|
import '../chunk-EKBEOXTH.js';
|
|
20
|
-
import '../chunk-
|
|
21
|
-
import '../chunk-
|
|
22
|
-
import '../chunk-
|
|
21
|
+
import '../chunk-BEBR4OJD.js';
|
|
22
|
+
import '../chunk-WGG6GTKW.js';
|
|
23
|
+
import '../chunk-56KNHB4U.js';
|
|
23
24
|
import '../chunk-PKBMQBKP.js';
|
|
24
25
|
import { Suspense } from 'react';
|
|
25
26
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -73,10 +74,10 @@ async function ManagedSchemaAsync({
|
|
|
73
74
|
const page = pageData?.page;
|
|
74
75
|
const siteUrl = pageData?.project?.site_url || "";
|
|
75
76
|
const deny = new Set(excludeTypes ?? []);
|
|
76
|
-
const fromSonor = (values) => values.map((v) => pruneSchemaTypes(v, deny)).filter(
|
|
77
|
+
const fromSonor = (values) => values.map((v) => withoutPlaceholders(pruneSchemaTypes(v, deny))).filter(isSchemaObject);
|
|
77
78
|
const allSchemas = [
|
|
78
79
|
...fromSonor(entitySchemas),
|
|
79
|
-
...schemas.map((s) => s.schema_json),
|
|
80
|
+
...schemas.map((s) => withoutPlaceholders(s.schema_json)).filter(isSchemaObject),
|
|
80
81
|
// Include auto-generated schema from Signal meta optimization
|
|
81
82
|
...fromSonor(page?.managed_schema ? [page.managed_schema] : []),
|
|
82
83
|
...additionalSchemas
|
|
@@ -127,7 +128,7 @@ async function LLMSchemaAsync({
|
|
|
127
128
|
}) {
|
|
128
129
|
const { page: pageData, project } = await getSEOPageData(path);
|
|
129
130
|
const raw = pageData?.managed_llm_schema;
|
|
130
|
-
const picked = pickManagedLlmSchemaForJsonLd(raw);
|
|
131
|
+
const picked = withoutPlaceholders(pickManagedLlmSchemaForJsonLd(raw));
|
|
131
132
|
if (!picked) {
|
|
132
133
|
return null;
|
|
133
134
|
}
|
|
@@ -183,6 +184,12 @@ function createSpeakableWebPageSchema(type, name, url, speakable) {
|
|
|
183
184
|
speakable: speakableSpec
|
|
184
185
|
};
|
|
185
186
|
}
|
|
187
|
+
function withoutPlaceholders(value) {
|
|
188
|
+
return withoutSchemaPlaceholders(value).value;
|
|
189
|
+
}
|
|
190
|
+
function isSchemaObject(value) {
|
|
191
|
+
return value !== null && typeof value === "object";
|
|
192
|
+
}
|
|
186
193
|
function schemaNodeHasType(node, type) {
|
|
187
194
|
if (!node || typeof node !== "object") return false;
|
|
188
195
|
const t = node["@type"];
|
|
@@ -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';
|
package/dist/seo/llms.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-
|
|
1
|
+
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-WDQB4OXY.js';
|
|
2
2
|
export { buildAiDiscoveryHeaders, wantsLlmsDiscoveryLink } from '../chunk-PO2TRJPY.js';
|
|
3
3
|
export { AI_RETRIEVAL_CRAWLERS, AI_TRAINING_CRAWLERS, buildAiCrawlerRules, createRobotsTxtHandler } from '../chunk-QLTDFUJ7.js';
|
|
4
|
-
export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-
|
|
4
|
+
export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-NI2XNEMR.js';
|
|
5
5
|
import '../chunk-XTRZGXB2.js';
|
|
6
6
|
export { AEOBlock, AEOCitedContent, AEOClaim, AEOComparison, AEODefinition, AEOEntity, AEOProvenanceList, AEOStep, AEOSteps, AEOSummary, DEFAULT_SPEAKABLE_SELECTORS, SpeakableSchema, createSpeakableSchema, getSpeakableSelectorsForPage } from '../chunk-PSAG45YF.js';
|
|
7
|
-
export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-
|
|
8
|
-
export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-
|
|
7
|
+
export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-Z65DHMTW.js';
|
|
8
|
+
export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-6U3VLV2C.js';
|
|
9
9
|
import '../chunk-L5UOHS6E.js';
|
|
10
10
|
import '../chunk-WMVK77ND.js';
|
|
11
11
|
import '../chunk-VX5CMNMM.js';
|
|
12
|
-
export { LLMS_DISCLAIMER_MAX_LENGTH, LLMS_PUBLIC_SUMMARY_MAX_LENGTH, LLM_GEO_CONTRACT_VERSION, MANAGED_LLM_SCHEMA_KNOWN_KEYS, pickManagedLlmSchemaForJsonLd, sanitizeLlmsDisclaimerLine, sanitizeLlmsPublicSummary, sanitizePrimaryLanguageTag } from '../chunk-
|
|
12
|
+
export { LLMS_DISCLAIMER_MAX_LENGTH, LLMS_PUBLIC_SUMMARY_MAX_LENGTH, LLM_GEO_CONTRACT_VERSION, MANAGED_LLM_SCHEMA_KNOWN_KEYS, pickManagedLlmSchemaForJsonLd, sanitizeLlmsDisclaimerLine, sanitizeLlmsPublicSummary, sanitizePrimaryLanguageTag } from '../chunk-NZ4RXN3G.js';
|
|
13
13
|
import '../chunk-4KZ6W3ZH.js';
|
|
14
14
|
import '../chunk-MJP63SSS.js';
|
|
15
15
|
import '../chunk-YVKRYQRG.js';
|
|
16
16
|
import '../chunk-FESKKJAS.js';
|
|
17
17
|
import '../chunk-A4CC4ZG3.js';
|
|
18
|
-
import '../chunk-
|
|
18
|
+
import '../chunk-56KNHB4U.js';
|
|
19
19
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -458,7 +458,7 @@ async function registerLocalSitemap(options) {
|
|
|
458
458
|
}
|
|
459
459
|
if (options.writeLlms && result.success) {
|
|
460
460
|
try {
|
|
461
|
-
const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-
|
|
461
|
+
const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-2NQVDGYI.js');
|
|
462
462
|
const written = await writeLLMsTxtToPublic({
|
|
463
463
|
// Resolved here too: the sync's own `site` is scoped to the branch that
|
|
464
464
|
// posts, and this runs on the skip path as well.
|
package/dist/seo/sitemap.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-Y6LP36UW.js';
|
|
2
2
|
import '../chunk-Z22QVHT4.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-Z65DHMTW.js';
|
|
4
|
+
import '../chunk-6U3VLV2C.js';
|
|
5
5
|
import '../chunk-L5UOHS6E.js';
|
|
6
6
|
import '../chunk-WMVK77ND.js';
|
|
7
7
|
import '../chunk-VX5CMNMM.js';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-NZ4RXN3G.js';
|
|
9
9
|
import '../chunk-MJP63SSS.js';
|
|
10
10
|
import '../chunk-ZEGVKVD5.js';
|
|
11
11
|
import '../chunk-YVKRYQRG.js';
|
package/dist/server/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { resolveClientCredential } from '../chunk-
|
|
1
|
+
export { resolveClientCredential } from '../chunk-DNPNYWVL.js';
|
|
2
2
|
import '../chunk-VX5CMNMM.js';
|
|
3
3
|
export { requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-X6F6SO4S.js';
|
|
4
4
|
import '../chunk-MH2DSGC6.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-56KNHB4U.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit shared: how a popup behaves as a dialog.
|
|
3
|
+
*
|
|
4
|
+
* SINGLE SOURCE OF TRUTH for popup focus and Escape. PopupBlocks (Website →
|
|
5
|
+
* Popups & Banners) calls usePopupDialog. Don't hand-roll another keydown
|
|
6
|
+
* listener or focus trap.
|
|
7
|
+
*
|
|
8
|
+
* - Escape closes, whatever the placement.
|
|
9
|
+
* - A modal popup takes focus when it opens (the dialog element itself, so a
|
|
10
|
+
* screen reader announces its name first; Tab then reaches its controls),
|
|
11
|
+
* keeps Tab inside, and hands focus back to where it was when it closes.
|
|
12
|
+
* - A non-modal one (a bar, a slide-in) leaves focus where it is.
|
|
13
|
+
*
|
|
14
|
+
* React only: no Next imports and no other site-kit imports, because Sonor's
|
|
15
|
+
* popup builder renders PopupBlocks too, from a copy of these files.
|
|
16
|
+
*/
|
|
17
|
+
import { type RefObject } from 'react';
|
|
18
|
+
export interface PopupDialogOptions {
|
|
19
|
+
/** False for a render that isn't live on the page (the builder preview). Default true. */
|
|
20
|
+
enabled?: boolean;
|
|
21
|
+
/** Takes focus, keeps Tab inside and returns focus on close. */
|
|
22
|
+
modal: boolean;
|
|
23
|
+
/** Escape calls it. */
|
|
24
|
+
onClose?: () => void;
|
|
25
|
+
}
|
|
26
|
+
/** Dialog behavior for the popup whose panel (the role="dialog" element) is `panelRef`. */
|
|
27
|
+
export declare function usePopupDialog(panelRef: RefObject<HTMLElement | null>, { enabled, modal, onClose }: PopupDialogOptions): void;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @sonordev/site-kit/shared — Unified Identity Management
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for visitor and session IDs across
|
|
5
|
-
* Analytics, Signal, and
|
|
5
|
+
* Analytics, Signal, chat and popups.
|
|
6
6
|
*
|
|
7
7
|
* Storage keys:
|
|
8
8
|
* localStorage: _sk_vid (visitor ID, persists ~forever)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The layer a site's widgets stack on when the site sets nothing: popups,
|
|
3
|
+
* banners and toasts (SitePopups) and the chat launcher (SiteChat), with the
|
|
4
|
+
* chat window one below. Single source of truth for that default; the
|
|
5
|
+
* layout's `chat.zIndex` (or the deprecated `engage.zIndex`) overrides it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_WIDGET_Z_INDEX = 9999;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit shared: is the visitor in the middle of a form?
|
|
3
|
+
*
|
|
4
|
+
* SINGLE SOURCE OF TRUTH for whether something may open over the page right
|
|
5
|
+
* now. SitePopups asks before any popup or toast opens on its own (whatever
|
|
6
|
+
* the trigger: immediate, delay, scroll or exit intent) and waits while the
|
|
7
|
+
* answer is yes.
|
|
8
|
+
* Don't write a second check; extend this one.
|
|
9
|
+
*
|
|
10
|
+
* Why it matters: a modal popup takes focus and hides the rest of the page
|
|
11
|
+
* from assistive technology while it's open. Opening one mid-form throws a
|
|
12
|
+
* person out of the field they're typing in, and an agent browser filling the
|
|
13
|
+
* form for someone (they act on the accessibility tree) loses every field it
|
|
14
|
+
* was about to fill.
|
|
15
|
+
*
|
|
16
|
+
* Mid-form means any of:
|
|
17
|
+
* - focus is on a field (input, textarea, select) that belongs to a form, or
|
|
18
|
+
* inside a frame in a form (a payment provider's card field);
|
|
19
|
+
* - a form has a field the visitor filled: a value that isn't empty and isn't
|
|
20
|
+
* the one the page rendered with, or one they typed into (watchFormInput);
|
|
21
|
+
* - a site-kit form is carrying what the visitor typed into its server-rendered
|
|
22
|
+
* shell before it upgraded (FormEnhancer marks its wrapper
|
|
23
|
+
* `data-sk-carried`; the upgraded fields are new elements nobody typed into
|
|
24
|
+
* yet, and React keeps their default equal to their value);
|
|
25
|
+
* - a site-kit form is sending (`data-sk-state="submitting"`).
|
|
26
|
+
*
|
|
27
|
+
* Fields a visitor doesn't fill don't count: hidden inputs, buttons, fields
|
|
28
|
+
* nobody can see or reach (inert or aria-hidden), and site-kit's trap field.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Remember which fields the visitor types into from here on. React keeps a
|
|
32
|
+
* controlled field's default value equal to its current value, so comparing
|
|
33
|
+
* the two can't see what someone typed into one; the input event can.
|
|
34
|
+
* Idempotent: one pair of capture listeners per document, kept for the page's
|
|
35
|
+
* life. SitePopups starts it when it mounts.
|
|
36
|
+
*/
|
|
37
|
+
export declare function watchFormInput(doc?: Document): void;
|
|
38
|
+
/** Whether the visitor is in the middle of a form (see the module comment for what counts). */
|
|
39
|
+
export declare function isVisitorMidForm(doc?: Document): boolean;
|
|
40
|
+
export interface MidFormWaitOptions {
|
|
41
|
+
doc?: Document;
|
|
42
|
+
/** How long after focus leaves a field to look again. Default 1500ms. */
|
|
43
|
+
settleMs?: number;
|
|
44
|
+
/** How often to look again while waiting. Default 5000ms. */
|
|
45
|
+
pollMs?: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Run `open` now if the visitor isn't mid-form, otherwise as soon as they
|
|
49
|
+
* aren't: a moment after focus leaves a field, or on the next poll (a form
|
|
50
|
+
* that sent and cleared, or went away). Never gives up on its own; the
|
|
51
|
+
* returned function cancels the wait. `open` runs at most once.
|
|
52
|
+
*/
|
|
53
|
+
export declare function whenNotMidForm(open: () => void, options?: MidFormWaitOptions): () => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Single source of truth for client reporting eligibility and credentials.
|
|
3
|
-
* Analytics, fleet, SitemapSync and
|
|
3
|
+
* Analytics, fleet, SitemapSync, chat and popups all resolve through this gate.
|
|
4
4
|
* Kept separate from transport wrappers so non-analytics modules stay lean.
|
|
5
5
|
*/
|
|
6
6
|
/** Resolved destination for an analytics send. */
|
package/dist/shared/version.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* bottom: calc(24px + env(safe-area-inset-bottom, 0px) + var(--sk-vv-layout-gap, 0px));
|
|
16
16
|
*
|
|
17
17
|
* The Echo launcher and chat popup already include it (see
|
|
18
|
-
*
|
|
18
|
+
* chat/launcher-placement.ts), so mounting the tracker is all a site needs
|
|
19
19
|
* for those; the property is also there for the site's own fixed UI.
|
|
20
20
|
*
|
|
21
21
|
* Opt-in on purpose. The gap also grows to the keyboard's height while a
|
package/dist/signal/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { useSignalExperiment, useSignalEvent } from '../chunk-
|
|
3
|
-
export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-
|
|
2
|
+
import { useSignalExperiment, useSignalEvent } from '../chunk-CYUFBKJQ.js';
|
|
3
|
+
export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-CYUFBKJQ.js';
|
|
4
4
|
import '../chunk-PKBMQBKP.js';
|
|
5
5
|
import React, { useEffect } from 'react';
|
|
6
6
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
package/dist/signal/types.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface SignalConfig {
|
|
|
8
8
|
version: string;
|
|
9
9
|
/** Whether Signal is enabled for this project */
|
|
10
10
|
enabled: boolean;
|
|
11
|
-
/** Engage
|
|
11
|
+
/** Popup overrides (the key keeps the retired Engage module's name) */
|
|
12
12
|
engage?: {
|
|
13
13
|
popups?: Record<string, EngageOverride>;
|
|
14
14
|
nudges?: Record<string, EngageOverride>;
|
package/dist/sitemap/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-
|
|
1
|
+
export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-Y6LP36UW.js';
|
|
2
2
|
import '../chunk-Z22QVHT4.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-Z65DHMTW.js';
|
|
4
|
+
import '../chunk-6U3VLV2C.js';
|
|
5
5
|
import '../chunk-L5UOHS6E.js';
|
|
6
6
|
import '../chunk-WMVK77ND.js';
|
|
7
7
|
import '../chunk-VX5CMNMM.js';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-NZ4RXN3G.js';
|
|
9
9
|
import '../chunk-MJP63SSS.js';
|
|
10
10
|
import '../chunk-ZEGVKVD5.js';
|
|
11
11
|
import '../chunk-YVKRYQRG.js';
|
package/dist/sync/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { BookingWidget } from '../chunk-
|
|
2
|
-
export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
1
|
+
export { BookingWidget } from '../chunk-L7U23XI2.js';
|
|
2
|
+
export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-2ECWEUHP.js';
|
|
3
|
+
import '../chunk-BEBR4OJD.js';
|
|
4
|
+
import '../chunk-WGG6GTKW.js';
|
|
5
|
+
import '../chunk-56KNHB4U.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
package/dist/types.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface ProjectScoped {
|
|
|
14
14
|
}
|
|
15
15
|
export * from './seo/types';
|
|
16
16
|
export * from './analytics/types';
|
|
17
|
-
export * from './
|
|
17
|
+
export * from './chat/types';
|
|
18
|
+
export * from './website/popup-types';
|
|
19
|
+
export type { EngageAnalytics, EngageConfig, EngageElement, TargetingRules, TriggerConfig, WidgetConfig, WidgetType } from './engage/types';
|
|
18
20
|
export * from './forms/types';
|
|
19
21
|
export * from './articles/types';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __publicField } from './chunk-PKBMQBKP.js';
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// node_modules/.pnpm/web-vitals@6.1.0/node_modules/web-vitals/dist/web-vitals.attribution.js
|
|
4
4
|
var t = class {
|
|
5
5
|
constructor() {
|
|
6
6
|
__publicField(this, "t");
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The site side of a blocks popup: re-checks the blocks, measures the site's
|
|
5
5
|
* design once when the popup opens, and hands both to PopupBlocks.
|
|
6
|
-
*
|
|
6
|
+
* SitePopups loads this with a dynamic import, so the renderer, the
|
|
7
7
|
* contract and the design measurement download only when a blocks popup is
|
|
8
8
|
* actually about to show (most page loads have none).
|
|
9
9
|
*/
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Draws a popup from its blocks (heading, formatted text, image, button,
|
|
5
5
|
* divider) in the site's own design. SINGLE renderer for both places a popup
|
|
6
|
-
* appears: on the site (
|
|
6
|
+
* appears: on the site (SitePopups, fed the measured tokens) and in Sonor's
|
|
7
7
|
* builder preview (fed the tokens the site reported). React only, no Next
|
|
8
8
|
* imports, so the dashboard can import it as-is.
|
|
9
9
|
*
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
* Accessibility: a centred popup is a modal dialog (labelled by its heading,
|
|
19
19
|
* focus moves in and is kept there, Escape and the overlay close it, focus
|
|
20
20
|
* goes back where it was). A bar is a labelled region, a slide-in a
|
|
21
|
-
* non-modal dialog; both close on Escape.
|
|
21
|
+
* non-modal dialog; both close on Escape. The focus and Escape behavior is
|
|
22
|
+
* usePopupDialog (../shared/dialog), so the builder's copy needs that file
|
|
23
|
+
* beside it. Text HTML is re-sanitized on
|
|
24
|
+
* render.
|
|
22
25
|
*/
|
|
23
26
|
import React from 'react';
|
|
24
27
|
import { type PopupBlock, type SiteDesignTokens } from './contract';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit/website/popups - SitePopups: the popups, banners and
|
|
3
|
+
* toasts published for this site (Sonor → Website → Popups & Banners).
|
|
4
|
+
*
|
|
5
|
+
* Each shows where and when Sonor says (pages, devices, trigger, frequency,
|
|
6
|
+
* schedule), drawn from its blocks in the site's own design by PopupBlocks.
|
|
7
|
+
* SiteKitLayout mounts it for you (its `popups` prop); mount it yourself only
|
|
8
|
+
* on a site without SiteKitLayout. A project with nothing published costs one
|
|
9
|
+
* request and draws nothing. The renderer downloads when a popup first opens.
|
|
10
|
+
*/
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import { type AnalyticsGateOptions } from '../shared/reporting-gate';
|
|
13
|
+
export interface SitePopupsProps extends AnalyticsGateOptions {
|
|
14
|
+
apiUrl?: string;
|
|
15
|
+
apiKey?: string;
|
|
16
|
+
/** The layer popups, banners and toasts stack on. Default: 9999. */
|
|
17
|
+
zIndex?: number;
|
|
18
|
+
debug?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Same gate as analytics (frames, localhost, a key to send with): a popup in
|
|
22
|
+
* a case study's device frame is shown to the agency's visitor, not this
|
|
23
|
+
* site's, and its impressions would count against this site.
|
|
24
|
+
*/
|
|
25
|
+
export declare function SitePopups(props: SitePopupsProps): React.JSX.Element | null;
|
package/dist/website/images.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-ZHS2XFLV.js';
|
|
2
2
|
export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-BEBR4OJD.js';
|
|
4
|
+
import '../chunk-WGG6GTKW.js';
|
|
5
|
+
import '../chunk-56KNHB4U.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|