@sonordev/site-kit 8.5.1 → 8.6.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 (102) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/agent-manifest.json +1 -1
  3. package/dist/{AnalyticsProvider-KLOAGTWZ.js → AnalyticsProvider-GVJYL6XY.js} +6 -6
  4. package/dist/{ArticleViewTracker-VKNPRCY2.js → ArticleViewTracker-AOJXEBYM.js} +7 -7
  5. package/dist/{BlocksPopup-OL3L6BKW.js → BlocksPopup-AJ3CKVQG.js} +4 -4
  6. package/dist/{ChatWidget-YSGSX3WM.js → ChatWidget-EYBVB5SZ.js} +7 -7
  7. package/dist/FileField-UEQYIFRO.js +237 -0
  8. package/dist/{FormSpotlight-JNTADX4I.js → FormSpotlight-H73ZZ66T.js} +2 -2
  9. package/dist/{FormStage-FU5AOMED.js → FormStage-2PLWWYBW.js} +2 -2
  10. package/dist/{ManagedForm-XS6JPQLH.js → ManagedForm-ZQOFXEWS.js} +9 -9
  11. package/dist/{ManagedNewsletterForm-KV4PQDKB.js → ManagedNewsletterForm-5TE47YZD.js} +11 -11
  12. package/dist/{SignalCore-MTYA5WGO.js → SignalCore-FEFNMNYN.js} +5 -5
  13. package/dist/{SiteChat-W25JYBBW.js → SiteChat-3MKYL2XM.js} +1 -1
  14. package/dist/{SiteDesignReporter-7ZJYE2EL.js → SiteDesignReporter-AJDIBNHI.js} +5 -5
  15. package/dist/{SitePopups-Q6OZDNCA.js → SitePopups-C44YTQ3Q.js} +6 -6
  16. package/dist/{SitemapSync-X5RLROGU.js → SitemapSync-UJA6JVPW.js} +4 -4
  17. package/dist/_client/booking-widget.js +7 -5
  18. package/dist/affiliates/index.js +3 -3
  19. package/dist/analytics/index.js +6 -6
  20. package/dist/articles/index.js +1 -1
  21. package/dist/articles/server-ui.js +3 -3
  22. package/dist/articles/server.js +2 -2
  23. package/dist/chat/index.js +8 -8
  24. package/dist/{chunk-B42B2D3N.js → chunk-6AWIUO2Z.js} +1 -1
  25. package/dist/{chunk-PJWAZ3NK.js → chunk-6NXFA7HE.js} +1 -1
  26. package/dist/{chunk-DY3OOSYN.js → chunk-72F44HKL.js} +8 -2
  27. package/dist/{chunk-LKYXK26A.js → chunk-7R2STOVD.js} +5 -5
  28. package/dist/{chunk-TDPYVU3Z.js → chunk-AJG74ZZV.js} +2 -2
  29. package/dist/{chunk-F4CTVKTD.js → chunk-BUE3Z32O.js} +1 -1
  30. package/dist/{chunk-ZPARXMUW.js → chunk-CMUD37WV.js} +1 -1
  31. package/dist/{chunk-TYAVHRWH.js → chunk-CVADNHJ4.js} +8 -2
  32. package/dist/{chunk-2Q4FBZHZ.js → chunk-DSD3XZQQ.js} +1 -1
  33. package/dist/{chunk-N7XRLWGW.js → chunk-FTSEP7Q3.js} +3 -3
  34. package/dist/{chunk-QXTM6ZC5.js → chunk-GFY3E7EQ.js} +2 -2
  35. package/dist/{chunk-AVDSPRCL.js → chunk-HMTPRBYJ.js} +2 -2
  36. package/dist/{chunk-SNU74EFA.js → chunk-IGAIQ2B3.js} +2 -2
  37. package/dist/{chunk-5HQOFANA.js → chunk-IYCSDFPN.js} +2 -2
  38. package/dist/{chunk-OISBBGOB.js → chunk-JSW42BHL.js} +1 -1
  39. package/dist/{chunk-IIBDU7EN.js → chunk-KTMHRXDT.js} +1 -1
  40. package/dist/{chunk-7QAPTPY7.js → chunk-L6QTERSH.js} +1 -1
  41. package/dist/{chunk-6AD52ATG.js → chunk-NI6ZTP3D.js} +4 -9
  42. package/dist/{chunk-ZHRHB4XS.js → chunk-NUXXFCIT.js} +2 -2
  43. package/dist/{chunk-AWQD6V77.js → chunk-O3Z5HHFP.js} +1 -1
  44. package/dist/{chunk-HOFIM5HD.js → chunk-OFSV5TZY.js} +1 -1
  45. package/dist/{chunk-D24GZ5DA.js → chunk-OWO3RFEX.js} +2 -2
  46. package/dist/{chunk-2TL6SL5V.js → chunk-QNOJSSQT.js} +1 -1
  47. package/dist/{chunk-P7HAR2NS.js → chunk-QQT2T6JQ.js} +1 -1
  48. package/dist/{chunk-5SQK3D53.js → chunk-TYSIAWC3.js} +1 -0
  49. package/dist/{chunk-NONH4CXJ.js → chunk-U34O6I7W.js} +2 -2
  50. package/dist/{chunk-JVOLGFBE.js → chunk-VA6IJ55K.js} +1 -1
  51. package/dist/{chunk-LNSF6BJC.js → chunk-VPZJ7ZTL.js} +2 -2
  52. package/dist/{chunk-4SX2HMLH.js → chunk-YJH6WE76.js} +9 -9
  53. package/dist/{chunk-I75RODCU.js → chunk-YNBRVVTX.js} +1 -1
  54. package/dist/{chunk-JQXHA6WI.js → chunk-ZZSAWXWD.js} +1 -1
  55. package/dist/client/index.js +6 -6
  56. package/dist/contracts/broadcast-layouts.d.ts +133 -0
  57. package/dist/contracts/business-claims.d.ts +456 -0
  58. package/dist/contracts/entries.d.ts +1 -1
  59. package/dist/contracts/outreach.d.ts +267 -0
  60. package/dist/contracts/page-titles.d.ts +140 -0
  61. package/dist/contracts/public-url-host.d.ts +10 -0
  62. package/dist/contracts/publication-branding.d.ts +143 -0
  63. package/dist/contracts/publication-charter.d.ts +14 -0
  64. package/dist/fleet/index.js +4 -4
  65. package/dist/forms/FileField.d.ts +3 -1
  66. package/dist/forms/PrivateFileField.d.ts +3 -0
  67. package/dist/forms/index.js +11 -11
  68. package/dist/forms/private-file-rules.d.ts +8 -0
  69. package/dist/forms/server.js +5 -5
  70. package/dist/forms/static.js +3 -3
  71. package/dist/forms/styles.css +17 -1
  72. package/dist/forms/types.d.ts +4 -0
  73. package/dist/images/index.js +4 -4
  74. package/dist/index.js +1 -1
  75. package/dist/layout/client.js +9 -9
  76. package/dist/layout/index.js +10 -10
  77. package/dist/llms/index.js +4 -4
  78. package/dist/maps/index.js +3 -3
  79. package/dist/mcp/sonor.js +11 -9
  80. package/dist/revalidate/index.js +2 -2
  81. package/dist/runtime/index.js +3 -3
  82. package/dist/seo/client.js +4 -4
  83. package/dist/seo/index.js +4 -4
  84. package/dist/seo/llms.js +4 -4
  85. package/dist/seo/register-sitemap-cli.js +1 -1
  86. package/dist/seo/sitemap.js +2 -2
  87. package/dist/server/index.js +2 -2
  88. package/dist/shared/version.d.ts +1 -1
  89. package/dist/signal/index.js +2 -2
  90. package/dist/sitemap/index.js +2 -2
  91. package/dist/sync/api.d.ts +3 -0
  92. package/dist/sync/index.js +7 -5
  93. package/dist/website/images.js +4 -4
  94. package/dist/website/index.js +5 -5
  95. package/dist/website/popups.js +6 -6
  96. package/dist/{writeLLMsTxt-NOTTCJB5.js → writeLLMsTxt-KHVHNSDM.js} +1 -1
  97. package/package.json +1 -1
  98. package/src/forms/README.md +22 -0
  99. package/src/sync/README.md +8 -0
  100. package/dist/FileField-PZOAS6MJ.js +0 -83
  101. package/dist/{chunk-ZKADJNR2.js → chunk-IPQKQEWI.js} +1 -1
  102. /package/dist/{chunk-MWWGUEBK.js → chunk-V67OD7RW.js} +0 -0
@@ -1,11 +1,11 @@
1
- export { ServerForm, getFormConfig } from '../chunk-TDPYVU3Z.js';
2
- import '../chunk-D24GZ5DA.js';
1
+ export { ServerForm, getFormConfig } from '../chunk-AJG74ZZV.js';
2
+ import '../chunk-OWO3RFEX.js';
3
3
  import '../chunk-C2FZBUSS.js';
4
4
  import '../chunk-YC7ELZS3.js';
5
- export { StaticForm } from '../chunk-LNSF6BJC.js';
5
+ export { StaticForm } from '../chunk-VPZJ7ZTL.js';
6
6
  import '../chunk-DXO6SBMD.js';
7
- import '../chunk-TYAVHRWH.js';
8
- import '../chunk-5SQK3D53.js';
7
+ import '../chunk-CVADNHJ4.js';
8
+ import '../chunk-TYSIAWC3.js';
9
9
  import '../chunk-HW7B43E5.js';
10
10
  import '../chunk-NJCTQH2P.js';
11
11
  import '../chunk-C7TLGL3R.js';
@@ -1,7 +1,7 @@
1
- export { StaticForm } from '../chunk-LNSF6BJC.js';
1
+ export { StaticForm } from '../chunk-VPZJ7ZTL.js';
2
2
  import '../chunk-DXO6SBMD.js';
3
- import '../chunk-TYAVHRWH.js';
4
- import '../chunk-5SQK3D53.js';
3
+ import '../chunk-CVADNHJ4.js';
4
+ import '../chunk-TYSIAWC3.js';
5
5
  import '../chunk-HW7B43E5.js';
6
6
  import '../chunk-NJCTQH2P.js';
7
7
  import '../chunk-PKBMQBKP.js';
@@ -439,4 +439,20 @@
439
439
  color: var(--sk-text-tertiary);
440
440
  margin: 8px 0;
441
441
  }
442
-
442
+ .sk-file-dropzone { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; min-height: 180px; padding: 24px 16px; border: 1.5px dashed rgba(var(--sk-primary-rgb), .38); border-radius: 12px; background: rgba(var(--sk-primary-rgb), .035); color: var(--sk-primary); text-align: center; cursor: pointer; }
443
+ .sk-file-dropzone--active, .sk-file-dropzone:focus-within { outline: 2px solid var(--sk-primary); outline-offset: 3px; background: rgba(var(--sk-primary-rgb), .075); }
444
+ .sk-file-dropzone--busy { cursor: progress; }
445
+ .sk-file-dropzone__title { display: block; font-size: 15px; font-weight: 600; }
446
+ .sk-file-dropzone__hint { font-size: 12px; color: var(--sk-text-secondary); }
447
+ .sk-file-dropzone__hint span { color: var(--sk-primary); text-decoration: underline; text-underline-offset: 3px; }
448
+ .sk-file-dropzone__formats { font-size: 10px; color: var(--sk-text-tertiary); margin-top: 4px; }
449
+ .sk-file-dropzone__input { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
450
+ .sk-private-files__list { list-style: none; padding: 0; margin: 12px 0 0; }
451
+ .sk-private-files__list li { display: flex; align-items: center; gap: 12px; justify-content: space-between; border: 1px solid rgba(var(--sk-primary-rgb), .15); border-radius: 9px; padding: 12px; margin-top: 8px; }
452
+ .sk-private-files__name { min-width: 0; overflow-wrap: anywhere; font-size: 12px; color: var(--sk-text-primary); }
453
+ .sk-private-files__name small { display: block; font-size: 10px; color: var(--sk-text-tertiary); margin-top: 4px; }
454
+ .sk-private-files__list li > div { display: flex; gap: 10px; flex-shrink: 0; }
455
+ .sk-private-files__list button { padding: 5px 0; min-height: 32px; font-size: 10px; color: var(--sk-primary); cursor: pointer; text-decoration: underline; text-underline-offset: 3px; }
456
+ .sk-private-files__list button:disabled { opacity: .5; cursor: wait; }
457
+ .sk-private-files__status { font-size: 10px; color: var(--sk-text-tertiary); margin: 9px 0 0; line-height: 1.7; }
458
+ .sk-private-files__error { font-size: 12px; color: var(--sk-error); margin: 9px 0 0; line-height: 1.7; }
@@ -107,6 +107,10 @@ export interface FieldOption {
107
107
  label: string;
108
108
  }
109
109
  export interface ValidationRules {
110
+ /** Use private Sonor attachment storage instead of the public media upload. */
111
+ private_attachments?: boolean;
112
+ /** Private document fields accept 1 to 4 files. */
113
+ max_files?: number;
110
114
  min_length?: number;
111
115
  max_length?: number;
112
116
  min?: number;
@@ -1,6 +1,6 @@
1
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-ZPARXMUW.js';
1
+ export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-CMUD37WV.js';
2
2
  export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
3
- import '../chunk-5HQOFANA.js';
4
- import '../chunk-P7HAR2NS.js';
5
- import '../chunk-F4CTVKTD.js';
3
+ import '../chunk-IYCSDFPN.js';
4
+ import '../chunk-QQT2T6JQ.js';
5
+ import '../chunk-BUE3Z32O.js';
6
6
  import '../chunk-PKBMQBKP.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { SITE_KIT_VERSION } from './chunk-F4CTVKTD.js';
1
+ export { SITE_KIT_VERSION } from './chunk-BUE3Z32O.js';
2
2
  import './chunk-PKBMQBKP.js';
@@ -1,20 +1,20 @@
1
1
  'use client';
2
- export { SiteKitClientProviders } from '../chunk-4SX2HMLH.js';
2
+ export { SiteKitClientProviders } from '../chunk-YJH6WE76.js';
3
3
  import '../chunk-6G43IRWR.js';
4
- import '../chunk-JVOLGFBE.js';
5
- import '../chunk-NONH4CXJ.js';
4
+ import '../chunk-VA6IJ55K.js';
5
+ import '../chunk-U34O6I7W.js';
6
6
  import '../chunk-ZTZQPYP6.js';
7
7
  import '../chunk-YC7ELZS3.js';
8
8
  import '../chunk-FESKKJAS.js';
9
9
  import '../chunk-A4CC4ZG3.js';
10
- import '../chunk-ZKADJNR2.js';
11
- import '../chunk-5TM3WPCI.js';
10
+ import '../chunk-IPQKQEWI.js';
12
11
  import '../chunk-GJWI74ZZ.js';
12
+ import '../chunk-5TM3WPCI.js';
13
13
  import '../chunk-DLM4FFNH.js';
14
14
  import '../chunk-EKBEOXTH.js';
15
- import '../chunk-5HQOFANA.js';
16
- import '../chunk-P7HAR2NS.js';
15
+ import '../chunk-IYCSDFPN.js';
16
+ import '../chunk-QQT2T6JQ.js';
17
17
  import '../chunk-W7OPEMGJ.js';
18
- import '../chunk-F4CTVKTD.js';
19
- import '../chunk-HOFIM5HD.js';
18
+ import '../chunk-BUE3Z32O.js';
19
+ import '../chunk-OFSV5TZY.js';
20
20
  import '../chunk-PKBMQBKP.js';
@@ -1,28 +1,28 @@
1
- import { SiteKitClientProviders } from '../chunk-4SX2HMLH.js';
1
+ import { SiteKitClientProviders } from '../chunk-YJH6WE76.js';
2
2
  import '../chunk-6G43IRWR.js';
3
- import '../chunk-JVOLGFBE.js';
4
- import '../chunk-NONH4CXJ.js';
3
+ import '../chunk-VA6IJ55K.js';
4
+ import '../chunk-U34O6I7W.js';
5
5
  import '../chunk-ZTZQPYP6.js';
6
6
  import { aiDiscoveryLinks } from '../chunk-MTDVV5P3.js';
7
7
  import { ManagedFavicon } from '../chunk-GW7GSBO7.js';
8
8
  import '../chunk-YC7ELZS3.js';
9
- import { resolveClientCredential } from '../chunk-OISBBGOB.js';
9
+ import { resolveClientCredential } from '../chunk-JSW42BHL.js';
10
10
  import '../chunk-UAYAJPEP.js';
11
11
  import { ManagedScripts } from '../chunk-MVLMXC44.js';
12
12
  import { resolveApiOrigin } from '../chunk-C7TLGL3R.js';
13
13
  import '../chunk-MH2DSGC6.js';
14
14
  import '../chunk-FESKKJAS.js';
15
15
  import '../chunk-A4CC4ZG3.js';
16
- import '../chunk-ZKADJNR2.js';
17
- import '../chunk-5TM3WPCI.js';
16
+ import '../chunk-IPQKQEWI.js';
18
17
  import '../chunk-GJWI74ZZ.js';
18
+ import '../chunk-5TM3WPCI.js';
19
19
  import '../chunk-DLM4FFNH.js';
20
20
  import '../chunk-EKBEOXTH.js';
21
- import '../chunk-5HQOFANA.js';
22
- import '../chunk-P7HAR2NS.js';
21
+ import '../chunk-IYCSDFPN.js';
22
+ import '../chunk-QQT2T6JQ.js';
23
23
  import '../chunk-W7OPEMGJ.js';
24
- import '../chunk-F4CTVKTD.js';
25
- import '../chunk-HOFIM5HD.js';
24
+ import '../chunk-BUE3Z32O.js';
25
+ import '../chunk-OFSV5TZY.js';
26
26
  import '../chunk-PKBMQBKP.js';
27
27
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
28
28
 
@@ -1,10 +1,10 @@
1
- export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-IIBDU7EN.js';
1
+ export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-KTMHRXDT.js';
2
2
  export { buildAiDiscoveryHeaders, wantsLlmsDiscoveryLink } from '../chunk-MTDVV5P3.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-I75RODCU.js';
4
+ export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-YNBRVVTX.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-MWWGUEBK.js';
7
+ export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-V67OD7RW.js';
8
8
  export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-XA7Q2VQA.js';
9
9
  import '../chunk-5D7ZISUP.js';
10
10
  import '../chunk-4K735O3J.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-W7OPEMGJ.js';
19
- import '../chunk-F4CTVKTD.js';
19
+ import '../chunk-BUE3Z32O.js';
20
20
  import '../chunk-PKBMQBKP.js';
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { monotonicMs } from '../chunk-MH2DSGC6.js';
3
- import { sonorFetch } from '../chunk-5HQOFANA.js';
4
- import '../chunk-P7HAR2NS.js';
3
+ import { sonorFetch } from '../chunk-IYCSDFPN.js';
4
+ import '../chunk-QQT2T6JQ.js';
5
5
  import { getClientApiConfig } from '../chunk-W7OPEMGJ.js';
6
- import '../chunk-F4CTVKTD.js';
6
+ import '../chunk-BUE3Z32O.js';
7
7
  import '../chunk-PKBMQBKP.js';
8
8
  import { useState, useCallback, useEffect } from 'react';
9
9
  import { APIProvider, Map as Map$1, AdvancedMarker, Pin, InfoWindow } from '@vis.gl/react-google-maps';
package/dist/mcp/sonor.js CHANGED
@@ -1,15 +1,16 @@
1
1
  import { fetchReviews, fetchReviewStats } from '../chunk-BSQP6PRA.js';
2
2
  import { toolErrorResult } from '../chunk-FYAB6CXS.js';
3
- import { fetchBookingTypes, fetchAvailability } from '../chunk-DY3OOSYN.js';
3
+ import { fetchBookingTypes, fetchAvailability } from '../chunk-72F44HKL.js';
4
4
  import { getLLMsData, getServices, getFAQItems, getPageSummaries } from '../chunk-XA7Q2VQA.js';
5
- import { getFormConfig } from '../chunk-TDPYVU3Z.js';
6
- import '../chunk-D24GZ5DA.js';
5
+ import '../chunk-5ROTTMBL.js';
6
+ import { getFormConfig } from '../chunk-AJG74ZZV.js';
7
+ import '../chunk-OWO3RFEX.js';
7
8
  import '../chunk-C2FZBUSS.js';
8
9
  import '../chunk-YC7ELZS3.js';
9
- import '../chunk-LNSF6BJC.js';
10
+ import '../chunk-VPZJ7ZTL.js';
10
11
  import '../chunk-DXO6SBMD.js';
11
- import '../chunk-TYAVHRWH.js';
12
- import '../chunk-5SQK3D53.js';
12
+ import '../chunk-CVADNHJ4.js';
13
+ import '../chunk-TYSIAWC3.js';
13
14
  import '../chunk-HW7B43E5.js';
14
15
  import '../chunk-NJCTQH2P.js';
15
16
  import { resolveArticleUrl } from '../chunk-4K735O3J.js';
@@ -20,10 +21,11 @@ import { resolveServerApiConfig } from '../chunk-C7TLGL3R.js';
20
21
  import '../chunk-MH2DSGC6.js';
21
22
  import { resolveSiteHost } from '../chunk-FESKKJAS.js';
22
23
  import '../chunk-A4CC4ZG3.js';
23
- import '../chunk-5HQOFANA.js';
24
- import '../chunk-P7HAR2NS.js';
24
+ import '../chunk-5TM3WPCI.js';
25
+ import '../chunk-IYCSDFPN.js';
26
+ import '../chunk-QQT2T6JQ.js';
25
27
  import '../chunk-W7OPEMGJ.js';
26
- import { SITE_KIT_VERSION } from '../chunk-F4CTVKTD.js';
28
+ import { SITE_KIT_VERSION } from '../chunk-BUE3Z32O.js';
27
29
  import '../chunk-PKBMQBKP.js';
28
30
  import 'server-only';
29
31
  import { after } from 'next/server.js';
@@ -1,7 +1,7 @@
1
- import { createSeoRevalidationHandler } from '../chunk-I75RODCU.js';
1
+ import { createSeoRevalidationHandler } from '../chunk-YNBRVVTX.js';
2
2
  import '../chunk-XTRZGXB2.js';
3
3
  export { SITE_CACHE_TAGS, SITE_REVALIDATE_PATH, isSiteRevalidatePong } from '../chunk-6KU7STM3.js';
4
- import '../chunk-F4CTVKTD.js';
4
+ import '../chunk-BUE3Z32O.js';
5
5
  import '../chunk-PKBMQBKP.js';
6
6
 
7
7
  // src/revalidate/index.ts
@@ -1,8 +1,8 @@
1
1
  import '../chunk-B7T2SFUF.js';
2
2
  export { readAnalyticsIdentity } from '../chunk-5ROTTMBL.js';
3
3
  import '../chunk-5TM3WPCI.js';
4
- export { sonorFetch } from '../chunk-5HQOFANA.js';
5
- import '../chunk-P7HAR2NS.js';
4
+ export { sonorFetch } from '../chunk-IYCSDFPN.js';
5
+ import '../chunk-QQT2T6JQ.js';
6
6
  export { DEFAULT_SONOR_API_URL, getClientApiConfig, readPublishedApiConfig } from '../chunk-W7OPEMGJ.js';
7
- import '../chunk-F4CTVKTD.js';
7
+ import '../chunk-BUE3Z32O.js';
8
8
  import '../chunk-PKBMQBKP.js';
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { SitemapSync } from '../chunk-PJWAZ3NK.js';
2
+ export { SitemapSync } from '../chunk-6NXFA7HE.js';
3
3
  import '../chunk-YVKRYQRG.js';
4
4
  import '../chunk-DLM4FFNH.js';
5
5
  import '../chunk-EKBEOXTH.js';
6
- import '../chunk-5HQOFANA.js';
7
- import '../chunk-P7HAR2NS.js';
6
+ import '../chunk-IYCSDFPN.js';
7
+ import '../chunk-QQT2T6JQ.js';
8
8
  import '../chunk-W7OPEMGJ.js';
9
- import '../chunk-F4CTVKTD.js';
9
+ import '../chunk-BUE3Z32O.js';
10
10
  import '../chunk-PKBMQBKP.js';
package/dist/seo/index.js CHANGED
@@ -2,7 +2,7 @@ export { ManagedNoScripts, ManagedScripts } from '../chunk-MVLMXC44.js';
2
2
  import { pickManagedLlmSchemaForJsonLd } from '../chunk-NZ4RXN3G.js';
3
3
  import { withoutSchemaPlaceholders } from '../chunk-VWWITFWM.js';
4
4
  import { safeJsonLd } from '../chunk-4KZ6W3ZH.js';
5
- export { SitemapSync } from '../chunk-PJWAZ3NK.js';
5
+ export { SitemapSync } from '../chunk-6NXFA7HE.js';
6
6
  import { getManagedMetadata, mergeAlternates } from '../chunk-URJN75ZG.js';
7
7
  export { generateSitemap, getABVariant, getManagedMetadata, getManagedMetadataWithAB, getRedirect, getRobotsDirective, isIndexable } from '../chunk-URJN75ZG.js';
8
8
  import { getSchemaMarkups, getSEOPageData, getEntityEnhancedSchema, getFAQData, getInternalLinks, pruneSchemaTypes } from '../chunk-Y35BWW2C.js';
@@ -18,10 +18,10 @@ import '../chunk-FESKKJAS.js';
18
18
  import '../chunk-A4CC4ZG3.js';
19
19
  import '../chunk-DLM4FFNH.js';
20
20
  import '../chunk-EKBEOXTH.js';
21
- import '../chunk-5HQOFANA.js';
22
- import '../chunk-P7HAR2NS.js';
21
+ import '../chunk-IYCSDFPN.js';
22
+ import '../chunk-QQT2T6JQ.js';
23
23
  import '../chunk-W7OPEMGJ.js';
24
- import '../chunk-F4CTVKTD.js';
24
+ import '../chunk-BUE3Z32O.js';
25
25
  import '../chunk-PKBMQBKP.js';
26
26
  import { Suspense } from 'react';
27
27
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
package/dist/seo/llms.js CHANGED
@@ -1,10 +1,10 @@
1
- export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-IIBDU7EN.js';
1
+ export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-KTMHRXDT.js';
2
2
  export { buildAiDiscoveryHeaders, wantsLlmsDiscoveryLink } from '../chunk-MTDVV5P3.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-I75RODCU.js';
4
+ export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-YNBRVVTX.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-MWWGUEBK.js';
7
+ export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-V67OD7RW.js';
8
8
  export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-XA7Q2VQA.js';
9
9
  import '../chunk-5D7ZISUP.js';
10
10
  import '../chunk-4K735O3J.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-W7OPEMGJ.js';
19
- import '../chunk-F4CTVKTD.js';
19
+ import '../chunk-BUE3Z32O.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-NOTTCJB5.js');
461
+ const { writeLLMsTxtToPublic } = await import('../writeLLMsTxt-KHVHNSDM.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-JQXHA6WI.js';
2
- import '../chunk-MWWGUEBK.js';
1
+ export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-ZZSAWXWD.js';
2
+ import '../chunk-V67OD7RW.js';
3
3
  import '../chunk-XA7Q2VQA.js';
4
4
  import '../chunk-Z22QVHT4.js';
5
5
  import '../chunk-5D7ZISUP.js';
@@ -1,8 +1,8 @@
1
1
  import '../chunk-34ZYJTQR.js';
2
- export { resolveClientCredential } from '../chunk-OISBBGOB.js';
2
+ export { resolveClientCredential } from '../chunk-JSW42BHL.js';
3
3
  import '../chunk-UAYAJPEP.js';
4
4
  export { SITE_CACHE_TAGS } from '../chunk-6KU7STM3.js';
5
5
  export { isNextControlFlow, requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-C7TLGL3R.js';
6
6
  import '../chunk-MH2DSGC6.js';
7
- import '../chunk-F4CTVKTD.js';
7
+ import '../chunk-BUE3Z32O.js';
8
8
  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.5.1";
10
+ export declare const SITE_KIT_VERSION = "8.6.0";
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { useSignalExperiment, useSignalEvent } from '../chunk-HOFIM5HD.js';
3
- export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-HOFIM5HD.js';
2
+ import { useSignalExperiment, useSignalEvent } from '../chunk-OFSV5TZY.js';
3
+ export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-OFSV5TZY.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-JQXHA6WI.js';
2
- import '../chunk-MWWGUEBK.js';
1
+ export { createSitemap, getPortfolioPaths, syncSitemapToPortal } from '../chunk-ZZSAWXWD.js';
2
+ import '../chunk-V67OD7RW.js';
3
3
  import '../chunk-XA7Q2VQA.js';
4
4
  import '../chunk-Z22QVHT4.js';
5
5
  import '../chunk-5D7ZISUP.js';
@@ -50,6 +50,9 @@ export declare function createBooking(bookingData: {
50
50
  timezone?: string;
51
51
  holdId?: string;
52
52
  sessionId?: string;
53
+ /** Analytics identity, distinct from the booking hold's sessionId. */
54
+ visitorId?: string;
55
+ analyticsSessionId?: string;
53
56
  sourceUrl?: string;
54
57
  }, apiUrl?: string, apiKey?: string): Promise<BookingResult>;
55
58
  /**
@@ -1,7 +1,9 @@
1
- export { BookingWidget } from '../chunk-2TL6SL5V.js';
2
- export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-DY3OOSYN.js';
3
- import '../chunk-5HQOFANA.js';
4
- import '../chunk-P7HAR2NS.js';
1
+ export { BookingWidget } from '../chunk-QNOJSSQT.js';
2
+ export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-72F44HKL.js';
3
+ import '../chunk-5ROTTMBL.js';
4
+ import '../chunk-5TM3WPCI.js';
5
+ import '../chunk-IYCSDFPN.js';
6
+ import '../chunk-QQT2T6JQ.js';
5
7
  import '../chunk-W7OPEMGJ.js';
6
- import '../chunk-F4CTVKTD.js';
8
+ import '../chunk-BUE3Z32O.js';
7
9
  import '../chunk-PKBMQBKP.js';
@@ -1,6 +1,6 @@
1
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-ZPARXMUW.js';
1
+ export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-CMUD37WV.js';
2
2
  export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
3
- import '../chunk-5HQOFANA.js';
4
- import '../chunk-P7HAR2NS.js';
5
- import '../chunk-F4CTVKTD.js';
3
+ import '../chunk-IYCSDFPN.js';
4
+ import '../chunk-QQT2T6JQ.js';
5
+ import '../chunk-BUE3Z32O.js';
6
6
  import '../chunk-PKBMQBKP.js';
@@ -1,14 +1,14 @@
1
1
  'use client';
2
- export { SiteDesignReporter } from '../chunk-2Q4FBZHZ.js';
3
- export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-ZHRHB4XS.js';
2
+ export { SiteDesignReporter } from '../chunk-DSD3XZQQ.js';
3
+ export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-NUXXFCIT.js';
4
4
  export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-BF7TZYC3.js';
5
5
  import '../chunk-IHG36STL.js';
6
6
  import '../chunk-YC7ELZS3.js';
7
7
  import '../chunk-S22FSH7C.js';
8
8
  import '../chunk-DLM4FFNH.js';
9
9
  import '../chunk-EKBEOXTH.js';
10
- import '../chunk-5HQOFANA.js';
11
- import '../chunk-P7HAR2NS.js';
10
+ import '../chunk-IYCSDFPN.js';
11
+ import '../chunk-QQT2T6JQ.js';
12
12
  import '../chunk-W7OPEMGJ.js';
13
- import '../chunk-F4CTVKTD.js';
13
+ import '../chunk-BUE3Z32O.js';
14
14
  import '../chunk-PKBMQBKP.js';
@@ -1,17 +1,17 @@
1
1
  'use client';
2
- export { SitePopups } from '../chunk-N7XRLWGW.js';
2
+ export { SitePopups } from '../chunk-FTSEP7Q3.js';
3
3
  import '../chunk-27FISYK4.js';
4
4
  export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-BF7TZYC3.js';
5
5
  import '../chunk-IHG36STL.js';
6
6
  import '../chunk-5ROTTMBL.js';
7
7
  import '../chunk-S22FSH7C.js';
8
- import '../chunk-ZKADJNR2.js';
9
- import '../chunk-5TM3WPCI.js';
8
+ import '../chunk-IPQKQEWI.js';
10
9
  import '../chunk-GJWI74ZZ.js';
10
+ import '../chunk-5TM3WPCI.js';
11
11
  import '../chunk-DLM4FFNH.js';
12
12
  import '../chunk-EKBEOXTH.js';
13
- import '../chunk-5HQOFANA.js';
14
- import '../chunk-P7HAR2NS.js';
13
+ import '../chunk-IYCSDFPN.js';
14
+ import '../chunk-QQT2T6JQ.js';
15
15
  import '../chunk-W7OPEMGJ.js';
16
- import '../chunk-F4CTVKTD.js';
16
+ import '../chunk-BUE3Z32O.js';
17
17
  import '../chunk-PKBMQBKP.js';
@@ -1,4 +1,4 @@
1
- export { writeLLMsTxtToPublic } from './chunk-MWWGUEBK.js';
1
+ export { writeLLMsTxtToPublic } from './chunk-V67OD7RW.js';
2
2
  import './chunk-XA7Q2VQA.js';
3
3
  import './chunk-5D7ZISUP.js';
4
4
  import './chunk-4K735O3J.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sonordev/site-kit",
3
- "version": "8.5.1",
3
+ "version": "8.6.0",
4
4
  "type": "module",
5
5
  "packageManager": "pnpm@11.5.3",
6
6
  "description": "Sonor's Next.js foundation: SEO, analytics, forms, chat, booking, AI visibility and agent tools. Add @sonordev/press-kit for publications or @sonordev/commerce-kit for selling. Legacy article imports remain compatible in 8.x.",
@@ -313,6 +313,28 @@ tag, and add `autocompleteFor` to your controls for the autofill tokens.
313
313
  form can send a managed form, so `enhance={false}` only ever produced a form
314
314
  that silently went nowhere.
315
315
 
316
+ ## Private documents (8.6.0+)
317
+
318
+ A managed `file` field with `validation.private_attachments: true` uses the
319
+ private document control. Set `validation.max_files` from one to four. It
320
+ accepts PDF, JPEG, PNG and WebP, up to 10 MB per file, with drag and drop,
321
+ upload status, removal and retry. A required field stays unanswered until
322
+ every selected file has uploaded successfully.
323
+
324
+ This requires the Sonor API private attachment migration and endpoints plus
325
+ the Sonor app's authorized document download controls. It never falls back
326
+ to the public media upload endpoint. The server-rendered file control stays
327
+ disabled until enhancement, so it can't accidentally use a public upload.
328
+ Keep the private flag in `ServerForm`'s `initialConfig`; if configuration is
329
+ unavailable, render a contact fallback instead of fetching an unmarked field.
330
+
331
+ Uploads return signed, expiring grants. Submissions store private document
332
+ references, and the Sonor app obtains short-lived download URLs only after
333
+ checking access to the submission. Do not display those references as links.
334
+
335
+ Date and file controls load on demand. They also finish loading when React
336
+ Strict Mode restarts their effects during development.
337
+
316
338
  ## Styles
317
339
 
318
340
  ```tsx
@@ -112,6 +112,14 @@ Each booking gives the guest one calendar invitation, and `invitation` says who
112
112
 
113
113
  APIs older than the field don't send it; treat a missing `invitation` like `'sonor'`. `calendarLinks` is still sent for every booking so older widgets keep working. If you build your own success screen with `createBooking`, check `invitation` before you render `calendarLinks`.
114
114
 
115
+ `createBooking` attaches the browser's existing analytics `visitorId` and
116
+ `analyticsSessionId` automatically, including for custom booking screens. Sonor
117
+ links that journey to the contact resolved from the accepted booking. These IDs
118
+ are separate from `sessionId`, which owns a slot hold; don't replace a hold's
119
+ session with the analytics session. With analytics disabled, no tracking IDs or
120
+ visits are invented. Custom callers can pass their existing analytics IDs
121
+ explicitly. The contact identity is resolved by Sonor, never supplied by the browser.
122
+
115
123
  ## Features
116
124
 
117
125
  - Automatic timezone detection
@@ -1,83 +0,0 @@
1
- 'use client';
2
- import { sonorFetch } from './chunk-5HQOFANA.js';
3
- import './chunk-P7HAR2NS.js';
4
- import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
5
- import './chunk-F4CTVKTD.js';
6
- import './chunk-PKBMQBKP.js';
7
- import React from 'react';
8
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
9
-
10
- function FileField({
11
- field,
12
- inputId,
13
- classPrefix,
14
- baseInputStyle,
15
- onChange
16
- }) {
17
- const [status, setStatus] = React.useState("idle");
18
- const [fileName, setFileName] = React.useState("");
19
- const handleFile = async (e) => {
20
- const file = e.target.files?.[0];
21
- if (!file) return;
22
- setFileName(file.name);
23
- setStatus("uploading");
24
- onChange("");
25
- try {
26
- const url = await uploadFormFile(file);
27
- onChange(url);
28
- setStatus("idle");
29
- } catch (err) {
30
- console.error("[Forms] File upload failed:", err);
31
- onChange("");
32
- setStatus("error");
33
- }
34
- };
35
- return /* @__PURE__ */ jsxs(Fragment, { children: [
36
- /* @__PURE__ */ jsx(
37
- "input",
38
- {
39
- id: inputId,
40
- className: `${classPrefix}__input ${classPrefix}__input--file`,
41
- type: "file",
42
- name: field.slug,
43
- required: field.is_required,
44
- disabled: status === "uploading",
45
- onChange: handleFile,
46
- style: baseInputStyle
47
- }
48
- ),
49
- status === "uploading" && /* @__PURE__ */ jsxs("p", { style: { color: "var(--sk-text-tertiary, #6b7280)", fontSize: 14, marginTop: 4 }, children: [
50
- "Uploading ",
51
- fileName,
52
- "\u2026"
53
- ] }),
54
- status === "error" && /* @__PURE__ */ jsx("p", { role: "alert", style: { color: "var(--sk-error, #dc2626)", fontSize: 14, marginTop: 4 }, children: "Upload failed. Please choose the file again." })
55
- ] });
56
- }
57
- async function uploadFormFile(file) {
58
- const { apiUrl, apiKey } = getClientApiConfig();
59
- if (!apiKey) {
60
- throw new Error("API key is required to upload files.");
61
- }
62
- const body = new FormData();
63
- body.append("file", file);
64
- const response = await sonorFetch(
65
- `${apiUrl}/api/public/forms/upload`,
66
- {
67
- method: "POST",
68
- headers: { Authorization: `Bearer ${apiKey}` },
69
- body
70
- },
71
- { retries: 1, timeoutMs: 6e4 }
72
- );
73
- if (!response.ok) {
74
- throw new Error(`Upload failed (${response.status})`);
75
- }
76
- const data = await response.json().catch(() => null);
77
- if (!data?.url) {
78
- throw new Error("Upload did not return a URL.");
79
- }
80
- return data.url;
81
- }
82
-
83
- export { FileField };
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { VISITOR_ID_KEY, memoryIdentity, SESSION_ID_KEY, SESSION_TIME_KEY } from './chunk-5TM3WPCI.js';
3
2
  import { uuid } from './chunk-GJWI74ZZ.js';
3
+ import { VISITOR_ID_KEY, memoryIdentity, SESSION_ID_KEY, SESSION_TIME_KEY } from './chunk-5TM3WPCI.js';
4
4
  import { useState } from 'react';
5
5
 
6
6
  function getOrCreateVisitorId() {
File without changes