@sonordev/site-kit 8.2.0 → 8.4.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 (198) hide show
  1. package/AGENTS.md +13 -1
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +9 -5
  4. package/agent-manifest.json +53 -8
  5. package/dist/{AnalyticsProvider-6TAA3XYB.js → AnalyticsProvider-D6GWEJSB.js} +6 -6
  6. package/dist/{ArticleFaqSection-3Q26DP7P.js → ArticleFaqSection-DEWE5B4Q.js} +1 -1
  7. package/dist/{ArticleViewTracker-H4N7YCLC.js → ArticleViewTracker-YZ76HM64.js} +17 -6
  8. package/dist/{BlocksPopup-FJT5YQD3.js → BlocksPopup-UJXZ4AXG.js} +6 -6
  9. package/dist/{ChatWidget-THQHHTAA.js → ChatWidget-H4EOSH5I.js} +6 -6
  10. package/dist/{FileField-OZXXJGUM.js → FileField-CKBYGCNT.js} +4 -4
  11. package/dist/{FormSpotlight-MLDJS246.js → FormSpotlight-CGF5ZE6S.js} +1 -1
  12. package/dist/{FormStage-6RVY7M3R.js → FormStage-PQPUPQWW.js} +1 -1
  13. package/dist/{ManagedForm-3VV54RVH.js → ManagedForm-YOEZ7CFS.js} +7 -7
  14. package/dist/{ManagedNewsletterForm-RTJDGMGG.js → ManagedNewsletterForm-EUWJ2HCA.js} +25 -11
  15. package/dist/{SignalCore-T7ZOCA44.js → SignalCore-JZSU7A44.js} +14 -8
  16. package/dist/SiteChat-OAZH34W7.js +6 -0
  17. package/dist/SiteDesignReporter-IWBMZJYU.js +12 -0
  18. package/dist/{SitePopups-K6ADAWFK.js → SitePopups-MLAT35UN.js} +6 -6
  19. package/dist/SitemapSync-6KQLKFO2.js +9 -0
  20. package/dist/_client/booking-widget.js +6 -6
  21. package/dist/_client/testimonial-section.js +3 -3
  22. package/dist/affiliates/index.js +4 -4
  23. package/dist/analytics/index.js +6 -6
  24. package/dist/analytics/publication-cta.d.ts +3 -0
  25. package/dist/{article-styles-GFXJJDLE.js → article-styles-AOOVVKXH.js} +7 -5
  26. package/dist/article-tables-6XHVULPU.js +2 -0
  27. package/dist/articles/Article.d.ts +2 -89
  28. package/dist/articles/ArticleFAQ.d.ts +2 -41
  29. package/dist/articles/ArticleFaqSection.d.ts +2 -2
  30. package/dist/articles/ArticleList.d.ts +2 -79
  31. package/dist/articles/ArticleViewTracker.d.ts +2 -15
  32. package/dist/articles/AuthorCard.d.ts +2 -10
  33. package/dist/articles/AuthorPage.d.ts +2 -8
  34. package/dist/articles/ClusterLandingPage.d.ts +2 -40
  35. package/dist/articles/ClusterNavigation.d.ts +2 -37
  36. package/dist/articles/ManagedNewsletterForm.d.ts +3 -12
  37. package/dist/articles/NewsletterShell.d.ts +2 -17
  38. package/dist/articles/NewsletterWidget.d.ts +2 -30
  39. package/dist/articles/PublicationLayout.d.ts +2 -67
  40. package/dist/articles/PublicationSidebar.d.ts +2 -36
  41. package/dist/articles/RelatedPosts.d.ts +2 -22
  42. package/dist/articles/ServiceCallout.d.ts +2 -56
  43. package/dist/articles/TableOfContents.d.ts +2 -6
  44. package/dist/articles/article-photos.d.ts +2 -9
  45. package/dist/articles/article-styles.d.ts +2 -21
  46. package/dist/articles/article-tables.d.ts +2 -12
  47. package/dist/articles/artwork.d.ts +2 -13
  48. package/dist/articles/author-schema.d.ts +2 -72
  49. package/dist/articles/author-social.d.ts +2 -14
  50. package/dist/articles/excerpt.d.ts +2 -17
  51. package/dist/articles/index.d.ts +2 -79
  52. package/dist/articles/index.js +16 -11
  53. package/dist/articles/news-sitemap.d.ts +2 -46
  54. package/dist/articles/processArticleHtml.d.ts +2 -34
  55. package/dist/articles/public-reads.d.ts +2 -26
  56. package/dist/articles/reading-time.d.ts +2 -9
  57. package/dist/articles/routes.d.ts +2 -52
  58. package/dist/articles/server-core.d.ts +2 -461
  59. package/dist/articles/server-ui.d.ts +2 -30
  60. package/dist/articles/server-ui.js +72 -62
  61. package/dist/articles/server.d.ts +2 -461
  62. package/dist/articles/server.js +14 -5
  63. package/dist/articles/types.d.ts +2 -316
  64. package/dist/articles/widget-styles.d.ts +2 -8
  65. package/dist/chat/index.js +8 -8
  66. package/dist/chunk-34ZYJTQR.js +1 -0
  67. package/dist/{chunk-727R7C5R.js → chunk-3VSFOD2Z.js} +2 -2
  68. package/dist/{chunk-JC2VS2SB.js → chunk-44GVU5UH.js} +1 -1
  69. package/dist/{chunk-WYZ4OUON.js → chunk-4HYIDQJJ.js} +1 -1
  70. package/dist/{chunk-WMVK77ND.js → chunk-4K735O3J.js} +1 -1
  71. package/dist/{chunk-L5UOHS6E.js → chunk-5D7ZISUP.js} +1 -1
  72. package/dist/{chunk-Q72M5KBS.js → chunk-5S7YTOCB.js} +1 -1
  73. package/dist/{chunk-WSNG2K3T.js → chunk-5TDZHIG6.js} +3 -3
  74. package/dist/{chunk-6CJGZFOU.js → chunk-A4MPHIVP.js} +1 -1
  75. package/dist/chunk-B7T2SFUF.js +1 -0
  76. package/dist/{chunk-FV2VD7WM.js → chunk-BC7JMY4Z.js} +3 -3
  77. package/dist/chunk-BLCHQIWR.js +319 -0
  78. package/dist/{chunk-NNEIBXGU.js → chunk-BLENFNBW.js} +2 -2
  79. package/dist/{chunk-NFRJTOTB.js → chunk-BSQP6PRA.js} +1 -1
  80. package/dist/{chunk-GKGSXUVQ.js → chunk-BVB5FBAA.js} +1 -1
  81. package/dist/{chunk-WACWV5EP.js → chunk-CE7VPAEH.js} +3 -3
  82. package/dist/{chunk-GYF2ULVO.js → chunk-DJAYFHVF.js} +1 -1
  83. package/dist/{chunk-WBC5B3JD.js → chunk-DKKYZLKR.js} +3 -3
  84. package/dist/{chunk-CAH4Y4PY.js → chunk-DLM4FFNH.js} +6 -2
  85. package/dist/{chunk-575L73NT.js → chunk-DS6LECIX.js} +1 -1
  86. package/dist/{chunk-Y3INC4QJ.js → chunk-E4PTMORJ.js} +1 -1
  87. package/dist/chunk-H72ZFO3F.js +1 -0
  88. package/dist/{chunk-WK3N3Y7V.js → chunk-HH2GOZTO.js} +2 -2
  89. package/dist/{chunk-JBEUZJS3.js → chunk-ITY4UZEJ.js} +3 -3
  90. package/dist/{chunk-GWP2VBFH.js → chunk-J4KX2D3Q.js} +3 -3
  91. package/dist/{chunk-57K4GW3D.js → chunk-JCSU6EJI.js} +1 -1
  92. package/dist/{chunk-SC4MZGWZ.js → chunk-JHTPHA2D.js} +6 -3
  93. package/dist/{chunk-YBAFUM3Z.js → chunk-JV5YWTJN.js} +13 -4
  94. package/dist/{chunk-I6QFPSUU.js → chunk-KASKB7UK.js} +11 -10
  95. package/dist/{chunk-SMYX3AAO.js → chunk-LEGMPX6N.js} +1 -1
  96. package/dist/{chunk-ZM2FNWIQ.js → chunk-LPVEBQVL.js} +1 -1
  97. package/dist/{chunk-HUBMKTPW.js → chunk-M5SF7NCC.js} +1 -1
  98. package/dist/{chunk-EBILJHUF.js → chunk-MTV5LYXN.js} +31 -2
  99. package/dist/{chunk-5ZCY36TY.js → chunk-MZX4EN6Z.js} +1 -1
  100. package/dist/{chunk-7FSB2EXS.js → chunk-OKITZFML.js} +1 -1
  101. package/dist/{chunk-H4R2GPAB.js → chunk-PEI6DRSK.js} +2 -2
  102. package/dist/{chunk-FVXFLVXF.js → chunk-QD73RO67.js} +3 -3
  103. package/dist/{chunk-66G47P5C.js → chunk-QKOVP7WO.js} +2 -2
  104. package/dist/{chunk-3EU6S5YC.js → chunk-RBNHRZGD.js} +1 -1
  105. package/dist/{chunk-XWIRU6UT.js → chunk-S6QDNXDK.js} +2 -2
  106. package/dist/{chunk-FQUGGPBM.js → chunk-TY6WNQO3.js} +124 -41
  107. package/dist/{chunk-QXMIKDOL.js → chunk-UVYUTBT4.js} +14 -4
  108. package/dist/{chunk-3G7YABRA.js → chunk-W7OPEMGJ.js} +4 -1
  109. package/dist/{chunk-JIH32RH2.js → chunk-XA7Q2VQA.js} +1 -1
  110. package/dist/{chunk-X7VKRHFF.js → chunk-XENW66OF.js} +1 -1
  111. package/dist/chunk-XI2XM7UG.js +14 -0
  112. package/dist/{chunk-BQZPHICL.js → chunk-YM5KMNTU.js} +1 -1
  113. package/dist/client/index.js +4 -16
  114. package/dist/fleet/index.js +6 -6
  115. package/dist/forms/index.js +9 -325
  116. package/dist/forms/server.js +2 -2
  117. package/dist/forms/types.d.ts +5 -0
  118. package/dist/forms/useForm.d.ts +4 -0
  119. package/dist/images/index.js +4 -4
  120. package/dist/index.js +1 -1
  121. package/dist/layout/client.js +9 -9
  122. package/dist/layout/index.js +10 -10
  123. package/dist/llms/index.js +8 -8
  124. package/dist/maps/index.js +4 -4
  125. package/dist/mcp/sonor.d.ts +46 -3
  126. package/dist/mcp/sonor.js +51 -29
  127. package/dist/mcp/transport.d.ts +1 -1
  128. package/dist/press-kit/articles/Article.d.ts +89 -0
  129. package/dist/press-kit/articles/ArticleFAQ.d.ts +41 -0
  130. package/dist/press-kit/articles/ArticleFaqSection.d.ts +2 -0
  131. package/dist/press-kit/articles/ArticleList.d.ts +79 -0
  132. package/dist/press-kit/articles/ArticleViewTracker.d.ts +15 -0
  133. package/dist/press-kit/articles/AuthorCard.d.ts +10 -0
  134. package/dist/press-kit/articles/AuthorPage.d.ts +8 -0
  135. package/dist/press-kit/articles/ClusterLandingPage.d.ts +40 -0
  136. package/dist/press-kit/articles/ClusterNavigation.d.ts +37 -0
  137. package/dist/press-kit/articles/ManagedNewsletterForm.d.ts +12 -0
  138. package/dist/press-kit/articles/NewsletterShell.d.ts +17 -0
  139. package/dist/press-kit/articles/NewsletterWidget.d.ts +30 -0
  140. package/dist/press-kit/articles/PublicationLayout.d.ts +67 -0
  141. package/dist/press-kit/articles/PublicationSidebar.d.ts +36 -0
  142. package/dist/press-kit/articles/RelatedPosts.d.ts +22 -0
  143. package/dist/press-kit/articles/ServiceCallout.d.ts +56 -0
  144. package/dist/press-kit/articles/TableOfContents.d.ts +6 -0
  145. package/dist/press-kit/articles/article-photos.d.ts +9 -0
  146. package/dist/press-kit/articles/article-styles.d.ts +21 -0
  147. package/dist/press-kit/articles/article-tables.d.ts +12 -0
  148. package/dist/press-kit/articles/artwork.d.ts +16 -0
  149. package/dist/press-kit/articles/author-schema.d.ts +72 -0
  150. package/dist/press-kit/articles/author-social.d.ts +14 -0
  151. package/dist/press-kit/articles/excerpt.d.ts +17 -0
  152. package/dist/press-kit/articles/index.d.ts +80 -0
  153. package/dist/press-kit/articles/news-sitemap.d.ts +40 -0
  154. package/dist/press-kit/articles/processArticleHtml.d.ts +34 -0
  155. package/dist/press-kit/articles/public-reads.d.ts +42 -0
  156. package/dist/press-kit/articles/publication-definition.d.ts +41 -0
  157. package/dist/press-kit/articles/publication-reads.d.ts +54 -0
  158. package/dist/press-kit/articles/reading-time.d.ts +9 -0
  159. package/dist/press-kit/articles/routes.d.ts +52 -0
  160. package/dist/press-kit/articles/server-core.d.ts +479 -0
  161. package/dist/press-kit/articles/server-ui.d.ts +31 -0
  162. package/dist/press-kit/articles/types.d.ts +339 -0
  163. package/dist/press-kit/articles/widget-styles.d.ts +8 -0
  164. package/dist/reputation/index.js +3 -3
  165. package/dist/reputation/server.js +2 -2
  166. package/dist/revalidate/index.js +2 -2
  167. package/dist/runtime/index.js +5 -4
  168. package/dist/seo/client.js +6 -6
  169. package/dist/seo/index.js +7 -7
  170. package/dist/seo/llms.js +8 -8
  171. package/dist/seo/register-sitemap-cli.js +1 -1
  172. package/dist/seo/sitemap.js +6 -6
  173. package/dist/server/index.js +3 -2
  174. package/dist/shared/build-entries.d.ts +2 -1
  175. package/dist/shared/clientApiConfig.d.ts +2 -0
  176. package/dist/shared/import-specifiers.d.ts +1 -1
  177. package/dist/shared/index.d.ts +6 -0
  178. package/dist/shared/index.js +8 -0
  179. package/dist/shared/reporting-gate.d.ts +2 -0
  180. package/dist/shared/version.d.ts +1 -1
  181. package/dist/signal/index.js +2 -2
  182. package/dist/sitemap/index.js +6 -6
  183. package/dist/sync/index.js +6 -6
  184. package/dist/website/images.js +4 -4
  185. package/dist/website/index.js +7 -7
  186. package/dist/website/popups.js +6 -6
  187. package/dist/{writeLLMsTxt-DGKLYXIW.js → writeLLMsTxt-N4Y4YC2H.js} +5 -5
  188. package/docs/MIGRATING-TO-PRESS-KIT.md +83 -0
  189. package/docs.json +145 -29
  190. package/package.json +15 -5
  191. package/src/articles/README.md +5 -360
  192. package/src/mcp/README.md +16 -0
  193. package/src/og/README.md +1 -1
  194. package/src/runtime/README.md +4 -0
  195. package/dist/SiteChat-JSHPGAE3.js +0 -6
  196. package/dist/SiteDesignReporter-L2JBAKKK.js +0 -12
  197. package/dist/SitemapSync-VV2YSMIW.js +0 -9
  198. package/dist/article-tables-AXSZOGNW.js +0 -2
@@ -1,12 +1,21 @@
1
- export { FEED_DEFAULT_ITEMS, NEWS_SITEMAP_MAX_URLS, NEWS_SITEMAP_WINDOW_MS, SEO_LIMITS, buildNewsSitemapXml, cdata, generateAllArticleSchemas, generateArticleCategoryMetadata, generateArticleListSchema, generateArticleMetadata, generateArticleSchema, generateArticleSitemap, generateArticleStaticParams, generateAtomFeed, generateAuthorPageMetadata, generateAuthorStaticParams, generateBreadcrumbSchema, generateCategoryStaticParams, generateClusterArticleSchema, generateClusterBreadcrumbSchema, generateClusterItemListSchema, generateClusterLandingSchema, generateClusterPageMetadata, generateFaqSchema, generateHowToSchema, generateNewsSitemap, generatePublicationMetadata, generateRssFeed, getAllArticleSlugs, getAllArticles, getAllAuthorSlugs, getArticle, getArticleCategories, getAuthorBySlug, getAuthorPosts, getClusterNavigation, getPostsByCategory, getRelatedInsights, getTopicCluster, getTopicClusters, recentNewsPosts, requireArticle, sanitizeExcerpt, validateArticleSeo, validateMetaDescription, validateSeoTitle } from '../chunk-FQUGGPBM.js';
2
- export { articlePhotoCss, insertArticlePhotos } from '../chunk-HUBMKTPW.js';
3
- export { articleTableCss, wrapArticleTables } from '../chunk-Y3INC4QJ.js';
4
- export { authorEntityId, generateArticleAuthorNode, generateAuthorPersonSchema, generateAuthorSchema, resolveArticleArtwork, withArticleAuthorIdentity } from '../chunk-QXMIKDOL.js';
5
- export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-WMVK77ND.js';
1
+ export { ArticleUnavailableError, FEED_DEFAULT_ITEMS, NEWS_SITEMAP_MAX_URLS, NEWS_SITEMAP_WINDOW_MS, PUBLICATION_PREVIEW_COOKIE, PUBLICATION_PREVIEW_HEADERS, SEO_LIMITS, buildNewsSitemapXml, cdata, createPublicationPreviewHandler, generateAllArticleSchemas, generateArticleCategoryMetadata, generateArticleListSchema, generateArticleMetadata, generateArticleSchema, generateArticleSitemap, generateArticleStaticParams, generateAtomFeed, generateAuthorPageMetadata, generateAuthorStaticParams, generateBreadcrumbSchema, generateCategoryStaticParams, generateClusterArticleSchema, generateClusterBreadcrumbSchema, generateClusterItemListSchema, generateClusterLandingSchema, generateClusterPageMetadata, generateFaqSchema, generateHowToSchema, generateNewsSitemap, generatePublicationMetadata, generateRssFeed, getAllArticleSlugs, getAllArticles, getAllAuthorSlugs, getArticle, getArticleCategories, getArticlePreview, getArticleResult, getAuthorBySlug, getAuthorPosts, getClusterNavigation, getPostsByCategory, getPublicationIssue, getPublicationIssues, getRelatedInsights, getTopicCluster, getTopicClusters, recentNewsPosts, requireArticle, sanitizeExcerpt, validateArticleSeo, validateMetaDescription, validateSeoTitle } from '../chunk-TY6WNQO3.js';
2
+ export { articlePhotoCss, insertArticlePhotos } from '../chunk-M5SF7NCC.js';
3
+ export { articleTableCss, wrapArticleTables } from '../chunk-E4PTMORJ.js';
4
+ export { articleImageSchema, authorEntityId, generateArticleAuthorNode, generateAuthorPersonSchema, generateAuthorSchema, resolveArticleArtwork, resolveRepresentativeImage, withArticleAuthorIdentity } from '../chunk-UVYUTBT4.js';
5
+ import '../chunk-H72ZFO3F.js';
6
+ export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-4K735O3J.js';
7
+ import '../chunk-34ZYJTQR.js';
8
+ import '../chunk-LPVEBQVL.js';
9
+ import '../chunk-UAYAJPEP.js';
6
10
  import '../chunk-VWWITFWM.js';
11
+ import '../chunk-4KZ6W3ZH.js';
7
12
  import '../chunk-MJP63SSS.js';
13
+ import '../chunk-6KU7STM3.js';
8
14
  import '../chunk-C7TLGL3R.js';
9
15
  import '../chunk-MH2DSGC6.js';
16
+ import '../chunk-YVKRYQRG.js';
10
17
  import '../chunk-FESKKJAS.js';
11
18
  import '../chunk-A4CC4ZG3.js';
19
+ import '../chunk-W7OPEMGJ.js';
20
+ import '../chunk-5S7YTOCB.js';
12
21
  import '../chunk-PKBMQBKP.js';
@@ -1,316 +1,2 @@
1
- /**
2
- * @sonordev/site-kit/articles - Type definitions
3
- */
4
- import type { PublicationRoutingOptions } from './routes';
5
- /** Public, approved photo snapshot. Planning briefs and private source metadata stay in Sonor. */
6
- export interface ArticleEditorialPhoto {
7
- url: string;
8
- alt: string;
9
- caption?: string;
10
- width: number;
11
- height: number;
12
- placement: {
13
- kind: 'after_intro';
14
- } | {
15
- kind: 'after_heading';
16
- heading: string;
17
- headingId?: string;
18
- };
19
- }
20
- export interface Article {
21
- id: string;
22
- project_id: string;
23
- /** URL slug */
24
- slug: string;
25
- /** Content */
26
- title: string;
27
- subtitle?: string;
28
- excerpt?: string;
29
- content: string;
30
- content_html?: string;
31
- /** Complete promotional image, including composed share-card text when generated. */
32
- featured_image?: string;
33
- featured_image_alt?: string;
34
- /** Article artwork, separate from the promotional card. Optional on older APIs. */
35
- editorial_image?: string;
36
- /** Empty for decorative atmosphere artwork; preserve an explicitly empty value. */
37
- editorial_image_alt?: string;
38
- /** Dedicated index frame from Sonor's atmosphere + content-stage renderer. */
39
- index_image?: string;
40
- index_image_alt?: string;
41
- /** Supporting photos placed deliberately in the article body; optional on older APIs. */
42
- editorial_photos?: ArticleEditorialPhoto[];
43
- /** Author - can be string or object depending on API response */
44
- author_id?: string;
45
- author?: ArticleAuthor | string;
46
- /** Categorization - can be string slug or object */
47
- category_id?: string;
48
- category?: ArticleCategory | string;
49
- tags?: string[] | ArticleTag[];
50
- /** SEO */
51
- meta_title?: string;
52
- meta_description?: string;
53
- og_title?: string;
54
- og_description?: string;
55
- canonical_url?: string;
56
- focus_keyphrase?: string;
57
- keywords?: string;
58
- /** Rich content */
59
- table_of_contents?: TocItem[];
60
- faq_items?: {
61
- question: string;
62
- answer: string;
63
- }[];
64
- /** E-E-A-T: when present, use as JSON-LD on the post page (Article/FAQ/Person from Signal) */
65
- schema?: object | object[];
66
- /** Raw DB column name for the same E-E-A-T JSON-LD — the public API passes
67
- * it through unmapped. generateAllArticleSchemas reads schema ?? schema_json. */
68
- schema_json?: object | object[];
69
- service_callouts?: {
70
- title: string;
71
- description?: string;
72
- url?: string;
73
- }[];
74
- /** Publishing */
75
- status: 'draft' | 'published' | 'scheduled' | 'archived';
76
- published_at?: string;
77
- /** Scheduled publish time (blog_posts.scheduled_for) */
78
- scheduled_for?: string;
79
- /** Settings */
80
- allow_comments?: boolean;
81
- featured?: boolean;
82
- /** Computed */
83
- /** Pre-mapped caller data only — the API never returns this name */
84
- reading_time_minutes?: number;
85
- /** The field the API actually returns (blog_posts.reading_time) */
86
- reading_time?: number;
87
- view_count?: number;
88
- word_count?: number;
89
- /** Timestamps */
90
- created_at: string;
91
- updated_at: string;
92
- /** Topic Cluster fields */
93
- article_type?: 'pillar' | 'support' | 'comparison' | 'faq' | 'glossary' | 'checklist' | 'case-study-adjacent';
94
- cluster_id?: string;
95
- cluster_slug?: string;
96
- cluster_name?: string;
97
- parent_pillar_id?: string;
98
- parent_pillar_slug?: string;
99
- parent_pillar_title?: string;
100
- /** The pillar's own category slug, for category-segmented article URLs */
101
- parent_pillar_category?: string;
102
- search_intent?: 'informational' | 'navigational' | 'commercial' | 'transactional';
103
- funnel_stage?: 'awareness' | 'consideration' | 'decision' | 'retention';
104
- relationship_to_pillar?: string;
105
- publish_priority?: number;
106
- canonical_role?: 'primary' | 'supporting' | 'overlap-risk';
107
- ai_summary?: string;
108
- /** Sibling articles in the same cluster (populated by API) */
109
- sibling_articles?: Array<{
110
- slug: string;
111
- title: string;
112
- article_type: string;
113
- category?: string;
114
- }>;
115
- }
116
- export interface ArticleAuthor {
117
- id: string;
118
- project_id: string;
119
- name: string;
120
- slug: string;
121
- bio?: string;
122
- avatar_url?: string;
123
- /** @deprecated Legacy shape — the API column is website_url. getAuthorSocialLinks handles both. */
124
- website?: string;
125
- /** @deprecated Legacy shape — the API columns are linkedin_url/twitter_url/etc. getAuthorSocialLinks handles both. */
126
- social_links?: {
127
- twitter?: string;
128
- linkedin?: string;
129
- github?: string;
130
- };
131
- is_active: boolean;
132
- /** E-E-A-T / Author Page fields */
133
- title?: string;
134
- company?: string;
135
- short_bio?: string;
136
- credentials?: string[];
137
- expertise_areas?: string[];
138
- years_experience?: number;
139
- linkedin_url?: string;
140
- twitter_url?: string;
141
- website_url?: string;
142
- author_page_url?: string;
143
- /**
144
- * schema.org `@id` for this person, shared by every site that describes
145
- * them (blog_authors.entity_id), e.g. `https://example.com/#person`.
146
- * Unset: the kit uses `<author page URL>#person`.
147
- */
148
- entity_id?: string | null;
149
- same_as?: string[];
150
- knows_about?: string[];
151
- is_subject_matter_expert?: boolean;
152
- has_verified_credentials?: boolean;
153
- featured_publications?: string[];
154
- awards?: string[];
155
- post_count?: number;
156
- created_at?: string;
157
- updated_at?: string;
158
- }
159
- /**
160
- * The public /categories endpoint guarantees only name/slug/post_count
161
- * (getCategories maps exactly those keys). id/project_id exist in
162
- * blog_categories but are stripped from the public response — do not
163
- * re-promote them to required.
164
- */
165
- export interface ArticleCategory {
166
- id?: string;
167
- project_id?: string;
168
- name: string;
169
- slug: string;
170
- description?: string;
171
- parent_id?: string;
172
- post_count?: number;
173
- }
174
- /**
175
- * The public /tags endpoint returns only name/slug/post_count. Tags are
176
- * synthesized from blog_posts.tags strings — no id/project_id can ever
177
- * exist, on any server version.
178
- */
179
- export interface ArticleTag {
180
- name: string;
181
- slug: string;
182
- post_count?: number;
183
- }
184
- export interface TopicCluster {
185
- id: string;
186
- cluster_name: string;
187
- cluster_slug: string;
188
- core_topic: string;
189
- primary_entity?: string;
190
- industry?: string;
191
- geo_target?: string;
192
- commercial_goal?: string;
193
- pillar_post_id?: string;
194
- target_service_page?: string;
195
- article_count: number;
196
- pillar: Article | null;
197
- supports: Article[];
198
- interlink_map: Array<{
199
- from: string;
200
- to: string;
201
- anchor: string;
202
- }>;
203
- created_at?: string;
204
- }
205
- export interface ClusterNavigation {
206
- cluster_name: string;
207
- cluster_slug: string;
208
- /** category = the article's own category slug, for category-segmented article URLs */
209
- pillar: {
210
- slug: string;
211
- title: string;
212
- category?: string;
213
- } | null;
214
- siblings: Array<{
215
- slug: string;
216
- title: string;
217
- article_type: string;
218
- category?: string;
219
- }>;
220
- is_pillar: boolean;
221
- }
222
- export interface ArticleListOptions {
223
- projectId: string;
224
- /** Pagination */
225
- page?: number;
226
- perPage?: number;
227
- /** Filters */
228
- category?: string;
229
- tag?: string;
230
- /** Author slug (preferred) or display name; slug filtering requires the current Sonor API */
231
- author?: string;
232
- search?: string;
233
- featured?: boolean;
234
- cluster?: string;
235
- /** Sorting */
236
- orderBy?: 'published_at' | 'title' | 'view_count';
237
- order?: 'asc' | 'desc';
238
- }
239
- export interface ArticleListResult {
240
- posts: Article[];
241
- pagination: {
242
- page: number;
243
- perPage: number;
244
- total: number;
245
- totalPages: number;
246
- hasNext: boolean;
247
- hasPrev: boolean;
248
- };
249
- }
250
- export interface ArticleProps {
251
- projectId: string;
252
- slug: string;
253
- children?: (props: ArticleRenderProps) => React.ReactNode;
254
- }
255
- export interface ArticleRenderProps {
256
- post: Article;
257
- content: string;
258
- relatedPosts?: Article[];
259
- tableOfContents?: TocItem[];
260
- }
261
- export interface ArticleListProps {
262
- projectId: string;
263
- options?: Omit<ArticleListOptions, 'projectId'>;
264
- children?: (props: ArticleListRenderProps) => React.ReactNode;
265
- }
266
- export interface ArticleListRenderProps {
267
- posts: Article[];
268
- pagination: ArticleListResult['pagination'];
269
- categories: ArticleCategory[];
270
- tags: ArticleTag[];
271
- }
272
- export interface AuthorCardProps {
273
- author: ArticleAuthor;
274
- showBio?: boolean;
275
- showSocial?: boolean;
276
- showTrustBlock?: boolean;
277
- className?: string;
278
- }
279
- export interface AuthorPageProps {
280
- author: ArticleAuthor;
281
- posts: Article[];
282
- basePath?: string;
283
- /**
284
- * AuthorPage is exported from the client-stamped `articles` barrel, so from
285
- * a Server Component only serializable options survive: a function
286
- * `authorPages` / `postPath` fails at render. For a custom author route,
287
- * render `generateAuthorSchema` on the server and pass `jsonLd={false}`.
288
- */
289
- routing?: PublicationRoutingOptions;
290
- /** Absolute site origin, so the ProfilePage JSON-LD carries absolute URLs and a Person @id. */
291
- siteUrl?: string;
292
- /** Fallback employer name for the Person when the author row has no company. */
293
- siteName?: string;
294
- /**
295
- * Emit the ProfilePage JSON-LD (default true). Pass false only when the
296
- * page renders generateAuthorSchema itself, so it is never emitted twice.
297
- */
298
- jsonLd?: boolean;
299
- }
300
- export interface RelatedPostsProps {
301
- projectId: string;
302
- postId: string;
303
- limit?: number;
304
- className?: string;
305
- }
306
- export interface TableOfContentsProps {
307
- content: string;
308
- maxDepth?: number;
309
- className?: string;
310
- }
311
- export interface TocItem {
312
- id: string;
313
- text: string;
314
- level: number;
315
- children?: TocItem[];
316
- }
1
+ /** @deprecated Import from @sonordev/press-kit instead. Compatibility build uses the same canonical source. */
2
+ export * from '../press-kit/articles/types';
@@ -1,8 +1,2 @@
1
- import type React from 'react';
2
- /**
3
- * Shared sidebar-widget chrome, extracted from PublicationSidebar so the client-side
4
- * NewsletterWidget (its own module — it needs hooks, and PublicationSidebar is also
5
- * bundled into the un-stamped server entry articles/server-ui) can reuse it.
6
- */
7
- export declare const widgetStyle: React.CSSProperties;
8
- export declare const widgetTitleStyle: React.CSSProperties;
1
+ /** @deprecated Import from @sonordev/press-kit instead. Compatibility build uses the same canonical source. */
2
+ export * from '../press-kit/articles/widget-styles';
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-FVXFLVXF.js';
3
- export { SiteChat } from '../chunk-NNEIBXGU.js';
2
+ export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-QD73RO67.js';
3
+ export { SiteChat } from '../chunk-BLENFNBW.js';
4
4
  import '../chunk-6T6CQVNL.js';
5
5
  import '../chunk-JE4A5S4F.js';
6
6
  import '../chunk-27FISYK4.js';
7
- import '../chunk-YBAFUM3Z.js';
7
+ import '../chunk-JV5YWTJN.js';
8
8
  import '../chunk-Q6E4OPGG.js';
9
9
  import '../chunk-5ROTTMBL.js';
10
10
  import '../chunk-C2FZBUSS.js';
@@ -15,12 +15,12 @@ import '../chunk-S22FSH7C.js';
15
15
  import '../chunk-L2V5PUFN.js';
16
16
  import '../chunk-5TM3WPCI.js';
17
17
  import '../chunk-GJWI74ZZ.js';
18
- import '../chunk-CAH4Y4PY.js';
18
+ import '../chunk-DLM4FFNH.js';
19
19
  import '../chunk-EKBEOXTH.js';
20
- import '../chunk-3G7YABRA.js';
21
- import '../chunk-727R7C5R.js';
22
- import '../chunk-3EU6S5YC.js';
23
- import '../chunk-Q72M5KBS.js';
20
+ import '../chunk-3VSFOD2Z.js';
21
+ import '../chunk-RBNHRZGD.js';
22
+ import '../chunk-W7OPEMGJ.js';
23
+ import '../chunk-5S7YTOCB.js';
24
24
  import '../chunk-PKBMQBKP.js';
25
25
 
26
26
  // src/chat/echo-config.ts
@@ -0,0 +1 @@
1
+
@@ -1,5 +1,5 @@
1
- import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-3EU6S5YC.js';
2
- import { SITE_KIT_VERSION } from './chunk-Q72M5KBS.js';
1
+ import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-RBNHRZGD.js';
2
+ import { SITE_KIT_VERSION } from './chunk-5S7YTOCB.js';
3
3
 
4
4
  // src/shared/fetchWithRetry.ts
5
5
  function backoffDelay(attempt, response) {
@@ -26,7 +26,7 @@ function useFieldControls(fields) {
26
26
  }
27
27
  if (needsFile && !requested.current.file) {
28
28
  requested.current.file = true;
29
- import('./FileField-OZXXJGUM.js').then((m) => {
29
+ import('./FileField-CKBYGCNT.js').then((m) => {
30
30
  if (!cancelled) setControls((prev) => ({ ...prev, File: m.FileField }));
31
31
  }).catch(() => {
32
32
  requested.current.file = false;
@@ -54,7 +54,7 @@ function useSignal() {
54
54
  return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
55
55
  }
56
56
  var LazySignalCore = dynamic(
57
- () => import('./SignalCore-T7ZOCA44.js').then((m) => ({ default: m.SignalCore })),
57
+ () => import('./SignalCore-JZSU7A44.js').then((m) => ({ default: m.SignalCore })),
58
58
  { ssr: false }
59
59
  );
60
60
  function SignalBridge({
@@ -1,4 +1,4 @@
1
- // src/articles/routes.ts
1
+ // packages/press-kit/src/articles/routes.ts
2
2
  var DEFAULT_PUBLICATION_PATH = "/articles";
3
3
  function articleCategorySlug(category) {
4
4
  const value = typeof category === "string" ? category : category?.slug || category?.name || "";
@@ -1,4 +1,4 @@
1
- // src/articles/processArticleHtml.ts
1
+ // packages/press-kit/src/articles/processArticleHtml.ts
2
2
  function linkClassificationHost(siteUrl) {
3
3
  try {
4
4
  const base = siteUrl.startsWith("http") ? siteUrl : `https://${siteUrl}`;
@@ -1,4 +1,4 @@
1
1
  // src/shared/version.ts
2
- var SITE_KIT_VERSION = "8.2.0";
2
+ var SITE_KIT_VERSION = "8.4.0";
3
3
 
4
4
  export { SITE_KIT_VERSION };
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { sanitizeFleetVersion, buildFleetHeartbeatPayload } from './chunk-ZTZQPYP6.js';
3
3
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
4
- import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
5
- import { sonorFetch } from './chunk-727R7C5R.js';
6
- import { SITE_KIT_VERSION } from './chunk-Q72M5KBS.js';
4
+ import { resolveAnalyticsTarget } from './chunk-DLM4FFNH.js';
5
+ import { sonorFetch } from './chunk-3VSFOD2Z.js';
6
+ import { SITE_KIT_VERSION } from './chunk-5S7YTOCB.js';
7
7
  import { useRef, useEffect } from 'react';
8
8
 
9
9
  // src/fleet/heartbeat.ts
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { reviewPhotoUrl } from './chunk-CAT235HY.js';
3
- import { fetchReviews } from './chunk-NFRJTOTB.js';
3
+ import { fetchReviews } from './chunk-BSQP6PRA.js';
4
4
  import { useState, useEffect, useCallback } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -0,0 +1 @@
1
+
@@ -1,4 +1,4 @@
1
- import { createPublicationRoutes } from './chunk-WMVK77ND.js';
1
+ import { createPublicationRoutes } from './chunk-4K735O3J.js';
2
2
  import { resolveTrailingSlash, applyTrailingSlash } from './chunk-YVKRYQRG.js';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -323,7 +323,7 @@ function ClusterNavigation({
323
323
  ] });
324
324
  }
325
325
 
326
- // src/articles/author-social.ts
326
+ // packages/press-kit/src/articles/author-social.ts
327
327
  var withPrefix = (value, base) => value.startsWith("http") ? value : `${base}${value}`;
328
328
  function getAuthorSocialLinks(author) {
329
329
  const links = [];
@@ -338,7 +338,7 @@ function getAuthorSocialLinks(author) {
338
338
  return links;
339
339
  }
340
340
 
341
- // src/articles/reading-time.ts
341
+ // packages/press-kit/src/articles/reading-time.ts
342
342
  function readingTimeMinutes(post) {
343
343
  const value = post.reading_time_minutes ?? post.reading_time;
344
344
  return typeof value === "number" && value > 0 ? value : null;