@sonordev/site-kit 8.0.1 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/agent-manifest.json +1 -1
  3. package/dist/{AnalyticsProvider-EGCZ2MVM.js → AnalyticsProvider-UWTCE5UO.js} +4 -4
  4. package/dist/{ArticleViewTracker-ATNVMT45.js → ArticleViewTracker-MYD6SGNH.js} +3 -3
  5. package/dist/{BlocksPopup-F636XNO4.js → BlocksPopup-OY5G3EFH.js} +4 -4
  6. package/dist/{ChatWidget-EQTLKPJX.js → ChatWidget-BTR5VERC.js} +5 -5
  7. package/dist/{FileField-BUD2YGN5.js → FileField-DEHVYXAO.js} +3 -3
  8. package/dist/{FormSpotlight-NGH56TGC.js → FormSpotlight-VGC4CZL4.js} +1 -1
  9. package/dist/{FormStage-XZRC54SY.js → FormStage-CJUSCSAL.js} +1 -1
  10. package/dist/{ManagedForm-CQDQ4CUN.js → ManagedForm-JCI2KPMO.js} +6 -6
  11. package/dist/{ManagedNewsletterForm-KCN3BTKA.js → ManagedNewsletterForm-DTE4KKXV.js} +4 -4
  12. package/dist/{SignalCore-RDQPM2L2.js → SignalCore-LGCBQDEH.js} +3 -3
  13. package/dist/{SiteChat-QBDOQ5ZZ.js → SiteChat-6SF7PVUT.js} +1 -1
  14. package/dist/{SiteDesignReporter-426TUCUF.js → SiteDesignReporter-VISQZ5NQ.js} +5 -5
  15. package/dist/{SitePopups-KLUD6XIE.js → SitePopups-T6YPHAVY.js} +4 -4
  16. package/dist/{SitemapSync-QOIMV5GO.js → SitemapSync-VKMVRPZL.js} +4 -4
  17. package/dist/_client/booking-widget.js +5 -5
  18. package/dist/affiliates/index.js +3 -3
  19. package/dist/analytics/index.js +4 -4
  20. package/dist/{article-styles-6CM5FUMV.js → article-styles-GGZOQG5X.js} +2 -0
  21. package/dist/articles/article-photos.d.ts +9 -0
  22. package/dist/articles/index.d.ts +1 -0
  23. package/dist/articles/index.js +1 -1
  24. package/dist/articles/server-core.d.ts +2 -0
  25. package/dist/articles/server-ui.d.ts +2 -0
  26. package/dist/articles/server-ui.js +7 -5
  27. package/dist/articles/server.d.ts +2 -0
  28. package/dist/articles/server.js +2 -1
  29. package/dist/articles/types.d.ts +16 -0
  30. package/dist/chat/index.js +6 -6
  31. package/dist/{chunk-OE3NXEOF.js → chunk-255NCCPB.js} +1 -1
  32. package/dist/{chunk-YGXWG54S.js → chunk-2JEUDTL6.js} +1 -1
  33. package/dist/chunk-2UO4HPGE.js +109 -0
  34. package/dist/{chunk-H3SDOSVU.js → chunk-47VB5INH.js} +1 -1
  35. package/dist/{chunk-XPTJRVL2.js → chunk-4Z3DI2EL.js} +3 -2
  36. package/dist/{chunk-Z6PVFZRI.js → chunk-55GHBRCN.js} +1 -1
  37. package/dist/{chunk-7BSC6HF3.js → chunk-5L467Z5Q.js} +3 -3
  38. package/dist/{chunk-6KUCA5HG.js → chunk-6VHDCJIZ.js} +1 -1
  39. package/dist/{chunk-AGJODJ4V.js → chunk-A3EU6HB5.js} +1 -1
  40. package/dist/{chunk-6BXUSAOJ.js → chunk-ADI6IYFH.js} +1 -1
  41. package/dist/{chunk-M62U7TJF.js → chunk-AIDIEVPZ.js} +1 -1
  42. package/dist/{chunk-B7QRRLTU.js → chunk-CSTC6HZO.js} +2 -2
  43. package/dist/{chunk-EE6IG5GK.js → chunk-DOMBP3FW.js} +8 -8
  44. package/dist/{chunk-J6N5DCGW.js → chunk-DSNCU2E3.js} +2 -2
  45. package/dist/{chunk-Z4MK4VOG.js → chunk-DZV3KPVF.js} +1 -1
  46. package/dist/{chunk-IY6G67EF.js → chunk-F2VYN3QL.js} +1 -1
  47. package/dist/{chunk-CAF53GKN.js → chunk-G2HCCWZQ.js} +1 -1
  48. package/dist/{chunk-FIGIJK5F.js → chunk-IAYGTQJD.js} +1 -1
  49. package/dist/{chunk-GMXY2OOY.js → chunk-JT52KYHQ.js} +1 -1
  50. package/dist/{chunk-NKFRW2VB.js → chunk-LLW5HKEE.js} +2 -2
  51. package/dist/{chunk-S5G3A7OZ.js → chunk-NWVB75ER.js} +1 -1
  52. package/dist/{chunk-VQQV7FOX.js → chunk-O4DETQJI.js} +1 -1
  53. package/dist/{chunk-5GB2HHVJ.js → chunk-RSBMQFZW.js} +2 -2
  54. package/dist/{chunk-3222QBUS.js → chunk-S6IGQYHW.js} +1 -1
  55. package/dist/{chunk-OCKGB734.js → chunk-TAO6BVA2.js} +1 -1
  56. package/dist/{chunk-DWNS6ZJM.js → chunk-V56RZH7J.js} +1 -1
  57. package/dist/{chunk-55JLUMAC.js → chunk-WPOFTCKL.js} +2 -2
  58. package/dist/{chunk-JCFQGEG7.js → chunk-XUCU3LX4.js} +1 -1
  59. package/dist/client/index.js +3 -3
  60. package/dist/fleet/index.js +4 -4
  61. package/dist/forms/index.js +7 -7
  62. package/dist/forms/server.js +2 -2
  63. package/dist/images/index.js +4 -4
  64. package/dist/index.js +1 -1
  65. package/dist/layout/client.js +7 -7
  66. package/dist/layout/index.js +8 -8
  67. package/dist/llms/index.js +4 -4
  68. package/dist/maps/index.js +3 -3
  69. package/dist/mcp/sonor.js +11 -9
  70. package/dist/revalidate/index.js +2 -2
  71. package/dist/runtime/index.js +3 -3
  72. package/dist/seo/client.js +4 -4
  73. package/dist/seo/index.js +4 -4
  74. package/dist/seo/llms.js +4 -4
  75. package/dist/seo/register-sitemap-cli.js +1 -1
  76. package/dist/seo/sitemap.js +2 -2
  77. package/dist/server/index.js +2 -2
  78. package/dist/shared/version.d.ts +1 -1
  79. package/dist/signal/index.js +2 -2
  80. package/dist/sitemap/index.js +2 -2
  81. package/dist/sync/index.js +5 -5
  82. package/dist/website/images.js +4 -4
  83. package/dist/website/index.js +5 -5
  84. package/dist/website/popups.js +4 -4
  85. package/dist/{writeLLMsTxt-UZGN6IBU.js → writeLLMsTxt-OS2WBSLM.js} +1 -1
  86. package/package.json +1 -1
  87. package/src/articles/README.md +33 -0
  88. /package/dist/{chunk-TZ5RTANX.js → chunk-GC2QWXJ3.js} +0 -0
package/dist/seo/llms.js CHANGED
@@ -1,10 +1,10 @@
1
- export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-M62U7TJF.js';
1
+ export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-AIDIEVPZ.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-DWNS6ZJM.js';
4
+ export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-V56RZH7J.js';
5
5
  export { AEOBlock, AEOCitedContent, AEOClaim, AEOComparison, AEODefinition, AEOEntity, AEOProvenanceList, AEOStep, AEOSteps, AEOSummary, DEFAULT_SPEAKABLE_SELECTORS, SpeakableSchema, createSpeakableSchema, getSpeakableSelectorsForPage } from '../chunk-PSAG45YF.js';
6
6
  import '../chunk-XTRZGXB2.js';
7
- export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-TZ5RTANX.js';
7
+ export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-GC2QWXJ3.js';
8
8
  export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-JIH32RH2.js';
9
9
  import '../chunk-L5UOHS6E.js';
10
10
  import '../chunk-WMVK77ND.js';
@@ -16,5 +16,5 @@ import '../chunk-YVKRYQRG.js';
16
16
  import '../chunk-FESKKJAS.js';
17
17
  import '../chunk-A4CC4ZG3.js';
18
18
  import '../chunk-3G7YABRA.js';
19
- import '../chunk-S5G3A7OZ.js';
19
+ import '../chunk-NWVB75ER.js';
20
20
  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-UZGN6IBU.js');
461
+ const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-OS2WBSLM.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.
@@ -1,5 +1,5 @@
1
- export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-OE3NXEOF.js';
2
- import '../chunk-TZ5RTANX.js';
1
+ export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-255NCCPB.js';
2
+ import '../chunk-GC2QWXJ3.js';
3
3
  import '../chunk-JIH32RH2.js';
4
4
  import '../chunk-Z22QVHT4.js';
5
5
  import '../chunk-L5UOHS6E.js';
@@ -1,7 +1,7 @@
1
- export { resolveClientCredential } from '../chunk-H3SDOSVU.js';
1
+ export { resolveClientCredential } from '../chunk-47VB5INH.js';
2
2
  import '../chunk-UAYAJPEP.js';
3
3
  export { SITE_CACHE_TAGS } from '../chunk-6KU7STM3.js';
4
4
  export { isNextControlFlow, requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-C7TLGL3R.js';
5
5
  import '../chunk-MH2DSGC6.js';
6
- import '../chunk-S5G3A7OZ.js';
6
+ import '../chunk-NWVB75ER.js';
7
7
  import '../chunk-PKBMQBKP.js';
@@ -7,4 +7,4 @@
7
7
  * it matches package.json at publish time, and version.test.ts asserts it in
8
8
  * dev, so it can't silently drift.
9
9
  */
10
- export declare const SITE_KIT_VERSION = "8.0.1";
10
+ export declare const SITE_KIT_VERSION = "8.1.0";
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { useSignalExperiment, useSignalEvent } from '../chunk-Z4MK4VOG.js';
3
- export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-Z4MK4VOG.js';
2
+ import { useSignalExperiment, useSignalEvent } from '../chunk-DZV3KPVF.js';
3
+ export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-DZV3KPVF.js';
4
4
  import '../chunk-PKBMQBKP.js';
5
5
  import React, { useEffect } from 'react';
6
6
  import { jsx, Fragment } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
- export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-OE3NXEOF.js';
2
- import '../chunk-TZ5RTANX.js';
1
+ export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-255NCCPB.js';
2
+ import '../chunk-GC2QWXJ3.js';
3
3
  import '../chunk-JIH32RH2.js';
4
4
  import '../chunk-Z22QVHT4.js';
5
5
  import '../chunk-L5UOHS6E.js';
@@ -1,7 +1,7 @@
1
- export { BookingWidget } from '../chunk-Z6PVFZRI.js';
2
- export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-YGXWG54S.js';
1
+ export { BookingWidget } from '../chunk-55GHBRCN.js';
2
+ export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-2JEUDTL6.js';
3
3
  import '../chunk-3G7YABRA.js';
4
- import '../chunk-55JLUMAC.js';
5
- import '../chunk-IY6G67EF.js';
6
- import '../chunk-S5G3A7OZ.js';
4
+ import '../chunk-WPOFTCKL.js';
5
+ import '../chunk-F2VYN3QL.js';
6
+ import '../chunk-NWVB75ER.js';
7
7
  import '../chunk-PKBMQBKP.js';
@@ -1,6 +1,6 @@
1
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-6BXUSAOJ.js';
1
+ export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-ADI6IYFH.js';
2
2
  export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
3
- import '../chunk-55JLUMAC.js';
4
- import '../chunk-IY6G67EF.js';
5
- import '../chunk-S5G3A7OZ.js';
3
+ import '../chunk-WPOFTCKL.js';
4
+ import '../chunk-F2VYN3QL.js';
5
+ import '../chunk-NWVB75ER.js';
6
6
  import '../chunk-PKBMQBKP.js';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- export { SiteDesignReporter } from '../chunk-CAF53GKN.js';
3
- export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-J6N5DCGW.js';
2
+ export { SiteDesignReporter } from '../chunk-G2HCCWZQ.js';
3
+ export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-DSNCU2E3.js';
4
4
  export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-BF7TZYC3.js';
5
5
  import '../chunk-IHG36STL.js';
6
6
  import '../chunk-YC7ELZS3.js';
@@ -8,7 +8,7 @@ import '../chunk-S22FSH7C.js';
8
8
  import '../chunk-CAH4Y4PY.js';
9
9
  import '../chunk-EKBEOXTH.js';
10
10
  import '../chunk-3G7YABRA.js';
11
- import '../chunk-55JLUMAC.js';
12
- import '../chunk-IY6G67EF.js';
13
- import '../chunk-S5G3A7OZ.js';
11
+ import '../chunk-WPOFTCKL.js';
12
+ import '../chunk-F2VYN3QL.js';
13
+ import '../chunk-NWVB75ER.js';
14
14
  import '../chunk-PKBMQBKP.js';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { SitePopups } from '../chunk-NKFRW2VB.js';
2
+ export { SitePopups } from '../chunk-LLW5HKEE.js';
3
3
  import '../chunk-27FISYK4.js';
4
4
  export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-BF7TZYC3.js';
5
5
  import '../chunk-IHG36STL.js';
@@ -11,7 +11,7 @@ import '../chunk-GJWI74ZZ.js';
11
11
  import '../chunk-CAH4Y4PY.js';
12
12
  import '../chunk-EKBEOXTH.js';
13
13
  import '../chunk-3G7YABRA.js';
14
- import '../chunk-55JLUMAC.js';
15
- import '../chunk-IY6G67EF.js';
16
- import '../chunk-S5G3A7OZ.js';
14
+ import '../chunk-WPOFTCKL.js';
15
+ import '../chunk-F2VYN3QL.js';
16
+ import '../chunk-NWVB75ER.js';
17
17
  import '../chunk-PKBMQBKP.js';
@@ -1,4 +1,4 @@
1
- export { writeLLMsTxtToPublic } from './chunk-TZ5RTANX.js';
1
+ export { writeLLMsTxtToPublic } from './chunk-GC2QWXJ3.js';
2
2
  import './chunk-JIH32RH2.js';
3
3
  import './chunk-L5UOHS6E.js';
4
4
  import './chunk-WMVK77ND.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sonordev/site-kit",
3
- "version": "8.0.1",
3
+ "version": "8.1.0",
4
4
  "type": "module",
5
5
  "packageManager": "pnpm@11.5.3",
6
6
  "description": "The Sonor modules a Next.js site needs, from one package and one API key: SEO, analytics, forms, articles, chat, booking, AI visibility and agent tools. Selling online? Add @sonordev/commerce-kit.",
@@ -326,3 +326,36 @@ Components use `.sk-article-*` and `.sk-article-list-*` classes. Import default
326
326
  ```
327
327
 
328
328
  Or use `unstyled` prop + `children` render prop for complete control.
329
+
330
+ ## Supporting photos (8.1)
331
+
332
+ Sonor's article photo plan can attach up to eight supporting images to exact
333
+ places in the article. The public response includes `editorial_photos`, an
334
+ optional array of approved snapshots with `url`, `alt`, optional `caption`,
335
+ `width`, `height`, and `placement`. Placement is `{ kind: 'after_intro' }` or
336
+ `{ kind: 'after_heading', heading: 'Exact section heading' }`. Photo briefs,
337
+ file ownership and private source notes stay in the authenticated API.
338
+
339
+ The default `Article` renderer and the RSS/Atom generators apply these
340
+ placements automatically. Custom publications use the same pure helper after
341
+ converting Markdown to HTML and before rendering their content:
342
+
343
+ ```tsx
344
+ import { insertArticlePhotos, articlePhotoCss } from '@sonordev/site-kit/articles/server-ui'
345
+
346
+ const html = insertArticlePhotos(articleHtml, post.editorial_photos)
347
+ // Render articlePhotoCss once and use html with your existing trusted-content policy.
348
+ ```
349
+
350
+ The helper inserts a semantic figure after the introduction's first prose
351
+ paragraph or a section's first prose paragraph. It preserves the surrounding
352
+ HTML and includes intrinsic dimensions, descriptions, captions and lazy loading.
353
+ It skips missing or duplicate headings, code examples, tables, existing figures,
354
+ lists, and callouts. An image already in the body isn't inserted again. It
355
+ doesn't sanitize the original article HTML; retain your existing content policy.
356
+ Articles without this field render as before. Custom styles can target
357
+ `.sk-article-photo` and `.sk-article-photo figcaption` or use `articlePhotoCss`.
358
+
359
+ Agents managing photos use the authenticated Sonor article media tools. The
360
+ site's public `get_article` MCP tool only reads the approved photo descriptions
361
+ and placements; it can't attach photos or read planning briefs.
File without changes