@sonordev/site-kit 8.5.2 → 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 (99) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/agent-manifest.json +1 -1
  3. package/dist/{AnalyticsProvider-HSJMHYBA.js → AnalyticsProvider-GVJYL6XY.js} +4 -4
  4. package/dist/{ArticleViewTracker-XEA6ZY67.js → ArticleViewTracker-AOJXEBYM.js} +5 -5
  5. package/dist/{BlocksPopup-DUTOENMQ.js → BlocksPopup-AJ3CKVQG.js} +4 -4
  6. package/dist/{ChatWidget-PMVQTSEU.js → ChatWidget-EYBVB5SZ.js} +6 -6
  7. package/dist/FileField-UEQYIFRO.js +237 -0
  8. package/dist/{FormSpotlight-RTPJPLQ3.js → FormSpotlight-H73ZZ66T.js} +2 -2
  9. package/dist/{FormStage-UANGD66Z.js → FormStage-2PLWWYBW.js} +2 -2
  10. package/dist/{ManagedForm-4AACRHEY.js → ManagedForm-ZQOFXEWS.js} +8 -8
  11. package/dist/{ManagedNewsletterForm-RWKFWZ72.js → ManagedNewsletterForm-5TE47YZD.js} +10 -10
  12. package/dist/{SignalCore-XULLPKPX.js → SignalCore-FEFNMNYN.js} +3 -3
  13. package/dist/{SiteChat-P4CRBRJZ.js → SiteChat-3MKYL2XM.js} +1 -1
  14. package/dist/{SiteDesignReporter-QDVP4WMK.js → SiteDesignReporter-AJDIBNHI.js} +5 -5
  15. package/dist/{SitePopups-US6VQN7X.js → SitePopups-C44YTQ3Q.js} +4 -4
  16. package/dist/{SitemapSync-5FBRDGHG.js → SitemapSync-UJA6JVPW.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/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 +7 -7
  24. package/dist/{chunk-N4ZCNYWF.js → chunk-6AWIUO2Z.js} +1 -1
  25. package/dist/{chunk-EQHGPB3J.js → chunk-6NXFA7HE.js} +1 -1
  26. package/dist/{chunk-5BRHTBPO.js → chunk-72F44HKL.js} +1 -1
  27. package/dist/{chunk-3PT6SO65.js → chunk-7R2STOVD.js} +5 -5
  28. package/dist/{chunk-ZSU7KTIE.js → chunk-AJG74ZZV.js} +2 -2
  29. package/dist/{chunk-CFSIGEUW.js → chunk-BUE3Z32O.js} +1 -1
  30. package/dist/{chunk-Q4Y3WIHE.js → chunk-CMUD37WV.js} +1 -1
  31. package/dist/{chunk-TYAVHRWH.js → chunk-CVADNHJ4.js} +8 -2
  32. package/dist/{chunk-A7RZQI6H.js → chunk-DSD3XZQQ.js} +1 -1
  33. package/dist/{chunk-24NM64IV.js → chunk-FTSEP7Q3.js} +2 -2
  34. package/dist/{chunk-HNYECNCU.js → chunk-GFY3E7EQ.js} +1 -1
  35. package/dist/{chunk-27LYZVPP.js → chunk-HMTPRBYJ.js} +2 -2
  36. package/dist/{chunk-ITQND6IB.js → chunk-IGAIQ2B3.js} +2 -2
  37. package/dist/{chunk-GDQKDL3E.js → chunk-IYCSDFPN.js} +2 -2
  38. package/dist/{chunk-T6U6J3QK.js → chunk-JSW42BHL.js} +1 -1
  39. package/dist/{chunk-OFQ3BU52.js → chunk-KTMHRXDT.js} +1 -1
  40. package/dist/{chunk-2QFIYYMP.js → chunk-L6QTERSH.js} +1 -1
  41. package/dist/{chunk-DLTLXYOV.js → chunk-NI6ZTP3D.js} +4 -9
  42. package/dist/{chunk-7HRYSLY2.js → chunk-NUXXFCIT.js} +2 -2
  43. package/dist/{chunk-ANVHRT35.js → chunk-O3Z5HHFP.js} +1 -1
  44. package/dist/{chunk-YW3LNSBM.js → chunk-OFSV5TZY.js} +1 -1
  45. package/dist/{chunk-GLLFIE2R.js → chunk-OWO3RFEX.js} +2 -2
  46. package/dist/{chunk-I4LMZNBN.js → chunk-QNOJSSQT.js} +1 -1
  47. package/dist/{chunk-OEA7U4HJ.js → chunk-QQT2T6JQ.js} +1 -1
  48. package/dist/{chunk-5SQK3D53.js → chunk-TYSIAWC3.js} +1 -0
  49. package/dist/{chunk-ZDUTXHM6.js → chunk-U34O6I7W.js} +2 -2
  50. package/dist/{chunk-FVXCQC7W.js → chunk-VA6IJ55K.js} +1 -1
  51. package/dist/{chunk-LNSF6BJC.js → chunk-VPZJ7ZTL.js} +2 -2
  52. package/dist/{chunk-UGZ3B5AK.js → chunk-YJH6WE76.js} +8 -8
  53. package/dist/{chunk-GTVOB5RN.js → chunk-YNBRVVTX.js} +1 -1
  54. package/dist/{chunk-IXA7ZB6U.js → chunk-ZZSAWXWD.js} +1 -1
  55. package/dist/client/index.js +4 -4
  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 +10 -10
  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 +7 -7
  76. package/dist/layout/index.js +8 -8
  77. package/dist/llms/index.js +4 -4
  78. package/dist/maps/index.js +3 -3
  79. package/dist/mcp/sonor.js +9 -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/index.js +5 -5
  92. package/dist/website/images.js +4 -4
  93. package/dist/website/index.js +5 -5
  94. package/dist/website/popups.js +4 -4
  95. package/dist/{writeLLMsTxt-BAK5XMRR.js → writeLLMsTxt-KHVHNSDM.js} +1 -1
  96. package/package.json +1 -1
  97. package/src/forms/README.md +22 -0
  98. package/dist/FileField-F7BG4XAZ.js +0 -83
  99. /package/dist/{chunk-URZTBPZO.js → chunk-V67OD7RW.js} +0 -0
@@ -1,11 +1,11 @@
1
- export { ServerForm, getFormConfig } from '../chunk-ZSU7KTIE.js';
2
- import '../chunk-GLLFIE2R.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-Q4Y3WIHE.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-GDQKDL3E.js';
4
- import '../chunk-OEA7U4HJ.js';
5
- import '../chunk-CFSIGEUW.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-CFSIGEUW.js';
1
+ export { SITE_KIT_VERSION } from './chunk-BUE3Z32O.js';
2
2
  import './chunk-PKBMQBKP.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- export { SiteKitClientProviders } from '../chunk-UGZ3B5AK.js';
2
+ export { SiteKitClientProviders } from '../chunk-YJH6WE76.js';
3
3
  import '../chunk-6G43IRWR.js';
4
- import '../chunk-FVXCQC7W.js';
5
- import '../chunk-ZDUTXHM6.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';
@@ -12,9 +12,9 @@ import '../chunk-GJWI74ZZ.js';
12
12
  import '../chunk-5TM3WPCI.js';
13
13
  import '../chunk-DLM4FFNH.js';
14
14
  import '../chunk-EKBEOXTH.js';
15
- import '../chunk-GDQKDL3E.js';
16
- import '../chunk-OEA7U4HJ.js';
15
+ import '../chunk-IYCSDFPN.js';
16
+ import '../chunk-QQT2T6JQ.js';
17
17
  import '../chunk-W7OPEMGJ.js';
18
- import '../chunk-CFSIGEUW.js';
19
- import '../chunk-YW3LNSBM.js';
18
+ import '../chunk-BUE3Z32O.js';
19
+ import '../chunk-OFSV5TZY.js';
20
20
  import '../chunk-PKBMQBKP.js';
@@ -1,12 +1,12 @@
1
- import { SiteKitClientProviders } from '../chunk-UGZ3B5AK.js';
1
+ import { SiteKitClientProviders } from '../chunk-YJH6WE76.js';
2
2
  import '../chunk-6G43IRWR.js';
3
- import '../chunk-FVXCQC7W.js';
4
- import '../chunk-ZDUTXHM6.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-T6U6J3QK.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';
@@ -18,11 +18,11 @@ import '../chunk-GJWI74ZZ.js';
18
18
  import '../chunk-5TM3WPCI.js';
19
19
  import '../chunk-DLM4FFNH.js';
20
20
  import '../chunk-EKBEOXTH.js';
21
- import '../chunk-GDQKDL3E.js';
22
- import '../chunk-OEA7U4HJ.js';
21
+ import '../chunk-IYCSDFPN.js';
22
+ import '../chunk-QQT2T6JQ.js';
23
23
  import '../chunk-W7OPEMGJ.js';
24
- import '../chunk-CFSIGEUW.js';
25
- import '../chunk-YW3LNSBM.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-OFQ3BU52.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-GTVOB5RN.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-URZTBPZO.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-CFSIGEUW.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-GDQKDL3E.js';
4
- import '../chunk-OEA7U4HJ.js';
3
+ import { sonorFetch } from '../chunk-IYCSDFPN.js';
4
+ import '../chunk-QQT2T6JQ.js';
5
5
  import { getClientApiConfig } from '../chunk-W7OPEMGJ.js';
6
- import '../chunk-CFSIGEUW.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,16 +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-5BRHTBPO.js';
3
+ import { fetchBookingTypes, fetchAvailability } from '../chunk-72F44HKL.js';
4
4
  import { getLLMsData, getServices, getFAQItems, getPageSummaries } from '../chunk-XA7Q2VQA.js';
5
5
  import '../chunk-5ROTTMBL.js';
6
- import { getFormConfig } from '../chunk-ZSU7KTIE.js';
7
- import '../chunk-GLLFIE2R.js';
6
+ import { getFormConfig } from '../chunk-AJG74ZZV.js';
7
+ import '../chunk-OWO3RFEX.js';
8
8
  import '../chunk-C2FZBUSS.js';
9
9
  import '../chunk-YC7ELZS3.js';
10
- import '../chunk-LNSF6BJC.js';
10
+ import '../chunk-VPZJ7ZTL.js';
11
11
  import '../chunk-DXO6SBMD.js';
12
- import '../chunk-TYAVHRWH.js';
13
- import '../chunk-5SQK3D53.js';
12
+ import '../chunk-CVADNHJ4.js';
13
+ import '../chunk-TYSIAWC3.js';
14
14
  import '../chunk-HW7B43E5.js';
15
15
  import '../chunk-NJCTQH2P.js';
16
16
  import { resolveArticleUrl } from '../chunk-4K735O3J.js';
@@ -22,10 +22,10 @@ import '../chunk-MH2DSGC6.js';
22
22
  import { resolveSiteHost } from '../chunk-FESKKJAS.js';
23
23
  import '../chunk-A4CC4ZG3.js';
24
24
  import '../chunk-5TM3WPCI.js';
25
- import '../chunk-GDQKDL3E.js';
26
- import '../chunk-OEA7U4HJ.js';
25
+ import '../chunk-IYCSDFPN.js';
26
+ import '../chunk-QQT2T6JQ.js';
27
27
  import '../chunk-W7OPEMGJ.js';
28
- import { SITE_KIT_VERSION } from '../chunk-CFSIGEUW.js';
28
+ import { SITE_KIT_VERSION } from '../chunk-BUE3Z32O.js';
29
29
  import '../chunk-PKBMQBKP.js';
30
30
  import 'server-only';
31
31
  import { after } from 'next/server.js';
@@ -1,7 +1,7 @@
1
- import { createSeoRevalidationHandler } from '../chunk-GTVOB5RN.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-CFSIGEUW.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-GDQKDL3E.js';
5
- import '../chunk-OEA7U4HJ.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-CFSIGEUW.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-EQHGPB3J.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-GDQKDL3E.js';
7
- import '../chunk-OEA7U4HJ.js';
6
+ import '../chunk-IYCSDFPN.js';
7
+ import '../chunk-QQT2T6JQ.js';
8
8
  import '../chunk-W7OPEMGJ.js';
9
- import '../chunk-CFSIGEUW.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-EQHGPB3J.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-GDQKDL3E.js';
22
- import '../chunk-OEA7U4HJ.js';
21
+ import '../chunk-IYCSDFPN.js';
22
+ import '../chunk-QQT2T6JQ.js';
23
23
  import '../chunk-W7OPEMGJ.js';
24
- import '../chunk-CFSIGEUW.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-OFQ3BU52.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-GTVOB5RN.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-URZTBPZO.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-CFSIGEUW.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-BAK5XMRR.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-IXA7ZB6U.js';
2
- import '../chunk-URZTBPZO.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-T6U6J3QK.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-CFSIGEUW.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.2";
10
+ export declare const SITE_KIT_VERSION = "8.6.0";
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { useSignalExperiment, useSignalEvent } from '../chunk-YW3LNSBM.js';
3
- export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-YW3LNSBM.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-IXA7ZB6U.js';
2
- import '../chunk-URZTBPZO.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,9 +1,9 @@
1
- export { BookingWidget } from '../chunk-I4LMZNBN.js';
2
- export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-5BRHTBPO.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
3
  import '../chunk-5ROTTMBL.js';
4
4
  import '../chunk-5TM3WPCI.js';
5
- import '../chunk-GDQKDL3E.js';
6
- import '../chunk-OEA7U4HJ.js';
5
+ import '../chunk-IYCSDFPN.js';
6
+ import '../chunk-QQT2T6JQ.js';
7
7
  import '../chunk-W7OPEMGJ.js';
8
- import '../chunk-CFSIGEUW.js';
8
+ import '../chunk-BUE3Z32O.js';
9
9
  import '../chunk-PKBMQBKP.js';
@@ -1,6 +1,6 @@
1
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-Q4Y3WIHE.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-GDQKDL3E.js';
4
- import '../chunk-OEA7U4HJ.js';
5
- import '../chunk-CFSIGEUW.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-A7RZQI6H.js';
3
- export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-7HRYSLY2.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-GDQKDL3E.js';
11
- import '../chunk-OEA7U4HJ.js';
10
+ import '../chunk-IYCSDFPN.js';
11
+ import '../chunk-QQT2T6JQ.js';
12
12
  import '../chunk-W7OPEMGJ.js';
13
- import '../chunk-CFSIGEUW.js';
13
+ import '../chunk-BUE3Z32O.js';
14
14
  import '../chunk-PKBMQBKP.js';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { SitePopups } from '../chunk-24NM64IV.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';
@@ -10,8 +10,8 @@ import '../chunk-GJWI74ZZ.js';
10
10
  import '../chunk-5TM3WPCI.js';
11
11
  import '../chunk-DLM4FFNH.js';
12
12
  import '../chunk-EKBEOXTH.js';
13
- import '../chunk-GDQKDL3E.js';
14
- import '../chunk-OEA7U4HJ.js';
13
+ import '../chunk-IYCSDFPN.js';
14
+ import '../chunk-QQT2T6JQ.js';
15
15
  import '../chunk-W7OPEMGJ.js';
16
- import '../chunk-CFSIGEUW.js';
16
+ import '../chunk-BUE3Z32O.js';
17
17
  import '../chunk-PKBMQBKP.js';
@@ -1,4 +1,4 @@
1
- export { writeLLMsTxtToPublic } from './chunk-URZTBPZO.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.2",
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
@@ -1,83 +0,0 @@
1
- 'use client';
2
- import { sonorFetch } from './chunk-GDQKDL3E.js';
3
- import './chunk-OEA7U4HJ.js';
4
- import { getClientApiConfig } from './chunk-W7OPEMGJ.js';
5
- import './chunk-CFSIGEUW.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 };
File without changes