@sonordev/site-kit 2.5.0 → 2.5.2

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 (52) hide show
  1. package/README.md +184 -301
  2. package/dist/EngageWidget-VCMSEZIF.mjs +4 -0
  3. package/dist/{EngageWidget-GI5YY4GM.mjs.map → EngageWidget-VCMSEZIF.mjs.map} +1 -1
  4. package/dist/EngageWidget-XUYC27CV.js +13 -0
  5. package/dist/{EngageWidget-IJGEP44J.js.map → EngageWidget-XUYC27CV.js.map} +1 -1
  6. package/dist/blog/index.d.mts +4 -32
  7. package/dist/blog/index.d.ts +4 -32
  8. package/dist/blog/index.js +13 -189
  9. package/dist/blog/index.js.map +1 -1
  10. package/dist/blog/index.mjs +4 -183
  11. package/dist/blog/index.mjs.map +1 -1
  12. package/dist/blog/server-ui.d.mts +32 -2
  13. package/dist/blog/server-ui.d.ts +32 -2
  14. package/dist/blog/server-ui.js +12 -3
  15. package/dist/blog/server-ui.mjs +2 -1
  16. package/dist/{chunk-K4AUQZG5.js → chunk-7EPMDUE6.js} +2 -2
  17. package/dist/{chunk-K4AUQZG5.js.map → chunk-7EPMDUE6.js.map} +1 -1
  18. package/dist/{chunk-T5UU7I4V.mjs → chunk-EHNJDXBY.mjs} +266 -59
  19. package/dist/chunk-EHNJDXBY.mjs.map +1 -0
  20. package/dist/{chunk-GVDPTXN3.js → chunk-G63AH3C6.js} +3 -3
  21. package/dist/{chunk-GVDPTXN3.js.map → chunk-G63AH3C6.js.map} +1 -1
  22. package/dist/{chunk-SROW253N.js → chunk-GQU4LXOP.js} +2 -2
  23. package/dist/chunk-GQU4LXOP.js.map +1 -0
  24. package/dist/{chunk-QJIEREW4.mjs → chunk-LBII2GAF.mjs} +2 -2
  25. package/dist/chunk-LBII2GAF.mjs.map +1 -0
  26. package/dist/{chunk-F54HGPDM.js → chunk-REJSE5AU.js} +266 -58
  27. package/dist/chunk-REJSE5AU.js.map +1 -0
  28. package/dist/{chunk-DV2BURIN.mjs → chunk-S7OMNQTY.mjs} +3 -3
  29. package/dist/{chunk-DV2BURIN.mjs.map → chunk-S7OMNQTY.mjs.map} +1 -1
  30. package/dist/{chunk-EHKM5Y7Z.mjs → chunk-YX23HISG.mjs} +2 -2
  31. package/dist/{chunk-EHKM5Y7Z.mjs.map → chunk-YX23HISG.mjs.map} +1 -1
  32. package/dist/engage/index.js +4 -4
  33. package/dist/engage/index.mjs +1 -1
  34. package/dist/index.d.mts +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.js +4 -4
  37. package/dist/index.mjs +1 -1
  38. package/dist/layout/client.js +2 -2
  39. package/dist/layout/client.mjs +1 -1
  40. package/dist/layout/index.js +2 -2
  41. package/dist/layout/index.mjs +1 -1
  42. package/dist/signal/index.d.mts +6 -2
  43. package/dist/signal/index.d.ts +6 -2
  44. package/dist/signal/index.js +4 -4
  45. package/dist/signal/index.mjs +1 -1
  46. package/package.json +2 -2
  47. package/dist/EngageWidget-GI5YY4GM.mjs +0 -4
  48. package/dist/EngageWidget-IJGEP44J.js +0 -13
  49. package/dist/chunk-F54HGPDM.js.map +0 -1
  50. package/dist/chunk-QJIEREW4.mjs.map +0 -1
  51. package/dist/chunk-SROW253N.js.map +0 -1
  52. package/dist/chunk-T5UU7I4V.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
- export { BlogList, BlogListServerProps, BlogListStyles, BlogPost, BlogPostServerProps, BlogPostStyles } from './server-ui.js';
1
+ export { BlogList, BlogListServerProps, BlogListStyles, BlogPost, BlogPostServerProps, BlogPostStyles, ClusterLandingPage, ClusterLandingPageProps, ClusterNavigation, ClusterNavigationProps } from './server-ui.js';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import React__default from 'react';
4
- import { A as AuthorCardProps, c as AuthorPageProps, B as BlogPost, d as TableOfContentsProps, C as ClusterNavigation$1, T as TopicCluster } from '../types-5P5B9RgV.js';
5
- export { m as BlogAnalytics, a as BlogAuthor, b as BlogCategory, f as BlogListOptions, j as BlogListProps, k as BlogListRenderProps, g as BlogListResult, h as BlogPostProps, i as BlogPostRenderProps, e as BlogTag, R as RelatedPostsProps, l as TocItem } from '../types-5P5B9RgV.js';
4
+ import { A as AuthorCardProps, c as AuthorPageProps, B as BlogPost, d as TableOfContentsProps } from '../types-5P5B9RgV.js';
5
+ export { m as BlogAnalytics, a as BlogAuthor, b as BlogCategory, f as BlogListOptions, j as BlogListProps, k as BlogListRenderProps, g as BlogListResult, h as BlogPostProps, i as BlogPostRenderProps, e as BlogTag, R as RelatedPostsProps, l as TocItem, T as TopicCluster } from '../types-5P5B9RgV.js';
6
6
 
7
7
  interface BlogSidebarProps {
8
8
  /** Portal API URL */
@@ -206,34 +206,6 @@ interface BlogFAQProps {
206
206
  }
207
207
  declare function BlogFAQ({ items, title, allowMultiple, styles, unstyled, }: BlogFAQProps): react_jsx_runtime.JSX.Element | null;
208
208
 
209
- interface ClusterNavigationProps {
210
- /** Cluster navigation data (from getClusterNavigation) */
211
- navigation: ClusterNavigation$1;
212
- /** Base path for blog URLs (default: /blog) */
213
- basePath?: string;
214
- /** Disable default styles */
215
- unstyled?: boolean;
216
- /** Custom class name */
217
- className?: string;
218
- }
219
- declare function ClusterNavigation({ navigation, basePath, unstyled, className, }: ClusterNavigationProps): react_jsx_runtime.JSX.Element | null;
220
-
221
- interface ClusterLandingPageProps {
222
- /** Cluster slug to fetch */
223
- slug: string;
224
- /** Base path for blog URLs (default: /blog) */
225
- basePath?: string;
226
- /** Disable default styles */
227
- unstyled?: boolean;
228
- /** Custom class name */
229
- className?: string;
230
- /** Render prop for full data access */
231
- children?: (props: {
232
- cluster: TopicCluster;
233
- }) => React__default.ReactNode;
234
- }
235
- declare function ClusterLandingPage({ slug, basePath, unstyled, className, children, }: ClusterLandingPageProps): Promise<string | number | bigint | boolean | Iterable<React__default.ReactNode> | react_jsx_runtime.JSX.Element | null | undefined>;
236
-
237
209
  /**
238
210
  * Post-process Portal/blog HTML for safe, consistent link behavior.
239
211
  * Server-safe string transforms only (no DOM).
@@ -252,4 +224,4 @@ declare function resolveBlogSiteUrl(explicit?: string): string;
252
224
  */
253
225
  declare function addExternalLinkTargets(html: string, siteUrl: string): string;
254
226
 
255
- export { AuthorCard, AuthorCardProps, AuthorPage, AuthorPageProps, BlogFAQ, type BlogFAQProps, BlogLayout, type BlogLayoutProps, BlogPage, type BlogPageProps, BlogPostPage, type BlogPostPageProps, BlogSidebar, type BlogSidebarProps, CategoryPage, type CategoryPageProps, ClusterLandingPage, type ClusterLandingPageProps, ClusterNavigation, type ClusterNavigationProps, type FaqItem, NewsletterWidget, type NewsletterWidgetProps, RelatedPosts, ServiceCallout, type ServiceCalloutProps, ServiceCallouts, TableOfContents, TableOfContentsProps, TopicCluster, addExternalLinkTargets, normalizeSiteHost, resolveBlogSiteUrl };
227
+ export { AuthorCard, AuthorCardProps, AuthorPage, AuthorPageProps, BlogFAQ, type BlogFAQProps, BlogLayout, type BlogLayoutProps, BlogPage, type BlogPageProps, BlogPostPage, type BlogPostPageProps, BlogSidebar, type BlogSidebarProps, CategoryPage, type CategoryPageProps, type FaqItem, NewsletterWidget, type NewsletterWidgetProps, RelatedPosts, ServiceCallout, type ServiceCalloutProps, ServiceCallouts, TableOfContents, TableOfContentsProps, addExternalLinkTargets, normalizeSiteHost, resolveBlogSiteUrl };
@@ -2,8 +2,8 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkUJQYSVYV_js = require('../chunk-UJQYSVYV.js');
5
+ var chunkREJSE5AU_js = require('../chunk-REJSE5AU.js');
5
6
  var chunkDZKX3GHL_js = require('../chunk-DZKX3GHL.js');
6
- var chunkF54HGPDM_js = require('../chunk-F54HGPDM.js');
7
7
  require('../chunk-ZSMWDLMK.js');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
9
  var react = require('react');
@@ -876,185 +876,6 @@ function TableOfContents({
876
876
  )) })
877
877
  ] });
878
878
  }
879
- var clusterLandingCss = `
880
- .sk-cluster-landing { max-width: 72rem; margin: 0 auto; padding: 2rem 1rem; }
881
-
882
- .sk-cluster-hero { margin-bottom: 3rem; text-align: center; }
883
- .sk-cluster-hero-label {
884
- display: inline-flex; align-items: center; gap: 0.375rem;
885
- font-size: 0.75rem; font-weight: 600; text-transform: uppercase;
886
- letter-spacing: 0.05em; color: #6366f1; margin-bottom: 0.75rem;
887
- }
888
- .sk-cluster-hero-title {
889
- font-size: 2.25rem; font-weight: 800; color: #111827;
890
- line-height: 1.2; margin: 0 0 0.75rem 0;
891
- }
892
- .sk-cluster-hero-desc {
893
- font-size: 1.125rem; color: #6b7280; max-width: 40rem;
894
- margin: 0 auto; line-height: 1.6;
895
- }
896
- .sk-cluster-hero-meta {
897
- display: flex; justify-content: center; gap: 1.5rem;
898
- margin-top: 1rem; font-size: 0.875rem; color: #9ca3af;
899
- }
900
-
901
- .sk-cluster-pillar-card {
902
- display: block; text-decoration: none; color: inherit;
903
- padding: 2rem; border-radius: 0.75rem;
904
- background: linear-gradient(135deg, rgba(99,102,241,0.04), rgba(99,102,241,0.01));
905
- border: 2px solid rgba(99,102,241,0.2);
906
- margin-bottom: 3rem; transition: border-color 0.2s, box-shadow 0.2s;
907
- }
908
- .sk-cluster-pillar-card:hover {
909
- border-color: rgba(99,102,241,0.4);
910
- box-shadow: 0 4px 24px rgba(99,102,241,0.08);
911
- }
912
- .sk-cluster-pillar-label {
913
- display: inline-flex; align-items: center; gap: 0.375rem;
914
- font-size: 0.6875rem; font-weight: 700; text-transform: uppercase;
915
- letter-spacing: 0.05em; color: #6366f1; margin-bottom: 0.75rem;
916
- padding: 0.25rem 0.5rem; border-radius: 9999px;
917
- background: rgba(99,102,241,0.08);
918
- }
919
- .sk-cluster-pillar-title {
920
- font-size: 1.5rem; font-weight: 700; color: #111827;
921
- margin: 0 0 0.5rem 0; line-height: 1.3;
922
- }
923
- .sk-cluster-pillar-excerpt {
924
- font-size: 1rem; color: #6b7280; line-height: 1.6;
925
- margin: 0 0 1rem 0;
926
- }
927
- .sk-cluster-pillar-meta {
928
- display: flex; gap: 1rem; font-size: 0.8125rem; color: #9ca3af;
929
- }
930
-
931
- .sk-cluster-supports-section { margin-bottom: 2rem; }
932
- .sk-cluster-supports-title {
933
- font-size: 1.25rem; font-weight: 700; color: #111827;
934
- margin: 0 0 1.25rem 0;
935
- }
936
- .sk-cluster-supports-grid {
937
- display: grid; gap: 1.25rem;
938
- grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
939
- }
940
- .sk-cluster-support-card {
941
- display: block; text-decoration: none; color: inherit;
942
- padding: 1.25rem; border-radius: 0.5rem;
943
- border: 1px solid #e5e7eb; background: #fff;
944
- transition: border-color 0.2s, box-shadow 0.2s;
945
- }
946
- .sk-cluster-support-card:hover {
947
- border-color: #c7d2fe;
948
- box-shadow: 0 2px 12px rgba(0,0,0,0.04);
949
- }
950
- .sk-cluster-support-card-header {
951
- display: flex; align-items: center; gap: 0.5rem;
952
- margin-bottom: 0.5rem;
953
- }
954
- .sk-cluster-support-type {
955
- display: inline-flex; align-items: center;
956
- padding: 0.125rem 0.375rem; border-radius: 9999px;
957
- font-size: 0.6875rem; font-weight: 500;
958
- background: rgba(99,102,241,0.06); color: #6366f1;
959
- border: 1px solid rgba(99,102,241,0.12);
960
- text-transform: capitalize;
961
- }
962
- .sk-cluster-support-intent {
963
- font-size: 0.6875rem; color: #9ca3af;
964
- text-transform: capitalize;
965
- }
966
- .sk-cluster-support-title {
967
- font-size: 1rem; font-weight: 600; color: #111827;
968
- margin: 0 0 0.375rem 0; line-height: 1.4;
969
- }
970
- .sk-cluster-support-excerpt {
971
- font-size: 0.875rem; color: #6b7280; line-height: 1.5;
972
- margin: 0; display: -webkit-box; -webkit-line-clamp: 2;
973
- -webkit-box-orient: vertical; overflow: hidden;
974
- }
975
- .sk-cluster-support-meta {
976
- display: flex; gap: 0.75rem; margin-top: 0.75rem;
977
- font-size: 0.75rem; color: #9ca3af;
978
- }
979
- `;
980
- async function ClusterLandingPage({
981
- slug,
982
- basePath = "/blog",
983
- unstyled = false,
984
- className,
985
- children
986
- }) {
987
- const cluster = await chunkDZKX3GHL_js.getTopicCluster(slug);
988
- if (!cluster) {
989
- return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "4rem 1rem", textAlign: "center", color: "#6b7280" }, children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Topic cluster not found." }) });
990
- }
991
- if (children) {
992
- return children({ cluster });
993
- }
994
- const pillar = cluster.pillar;
995
- const supports = cluster.supports || [];
996
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
997
- !unstyled && /* @__PURE__ */ jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: clusterLandingCss } }),
998
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${unstyled ? "" : "sk-cluster-landing"} ${className || ""}`, children: [
999
- /* @__PURE__ */ jsxRuntime.jsxs("header", { className: unstyled ? "" : "sk-cluster-hero", children: [
1000
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: unstyled ? "" : "sk-cluster-hero-label", children: "Topic Cluster" }),
1001
- /* @__PURE__ */ jsxRuntime.jsx("h1", { className: unstyled ? "" : "sk-cluster-hero-title", children: cluster.cluster_name }),
1002
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: unstyled ? "" : "sk-cluster-hero-desc", children: [
1003
- cluster.core_topic,
1004
- cluster.geo_target ? ` in ${cluster.geo_target}` : ""
1005
- ] }),
1006
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: unstyled ? "" : "sk-cluster-hero-meta", children: [
1007
- /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1008
- cluster.article_count,
1009
- " articles"
1010
- ] }),
1011
- cluster.geo_target && /* @__PURE__ */ jsxRuntime.jsx("span", { children: cluster.geo_target })
1012
- ] })
1013
- ] }),
1014
- pillar && /* @__PURE__ */ jsxRuntime.jsxs("a", { href: `${basePath}/${pillar.slug}`, className: unstyled ? "" : "sk-cluster-pillar-card", children: [
1015
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: unstyled ? "" : "sk-cluster-pillar-label", children: "Pillar Guide" }),
1016
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: unstyled ? "" : "sk-cluster-pillar-title", children: pillar.title }),
1017
- pillar.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: unstyled ? "" : "sk-cluster-pillar-excerpt", children: pillar.excerpt }),
1018
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: unstyled ? "" : "sk-cluster-pillar-meta", children: [
1019
- pillar.reading_time_minutes && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1020
- pillar.reading_time_minutes,
1021
- " min read"
1022
- ] }),
1023
- pillar.word_count && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1024
- pillar.word_count.toLocaleString(),
1025
- " words"
1026
- ] })
1027
- ] })
1028
- ] }),
1029
- supports.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("section", { className: unstyled ? "" : "sk-cluster-supports-section", children: [
1030
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: unstyled ? "" : "sk-cluster-supports-title", children: "Deep Dives" }),
1031
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: unstyled ? "" : "sk-cluster-supports-grid", children: supports.map((post) => /* @__PURE__ */ jsxRuntime.jsxs(
1032
- "a",
1033
- {
1034
- href: `${basePath}/${post.slug}`,
1035
- className: unstyled ? "" : "sk-cluster-support-card",
1036
- children: [
1037
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: unstyled ? "" : "sk-cluster-support-card-header", children: [
1038
- post.article_type && /* @__PURE__ */ jsxRuntime.jsx("span", { className: unstyled ? "" : "sk-cluster-support-type", children: post.article_type }),
1039
- post.search_intent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: unstyled ? "" : "sk-cluster-support-intent", children: post.search_intent })
1040
- ] }),
1041
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: unstyled ? "" : "sk-cluster-support-title", children: post.title }),
1042
- post.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { className: unstyled ? "" : "sk-cluster-support-excerpt", children: post.excerpt }),
1043
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: unstyled ? "" : "sk-cluster-support-meta", children: [
1044
- post.reading_time_minutes && /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
1045
- post.reading_time_minutes,
1046
- " min read"
1047
- ] }),
1048
- post.relationship_to_pillar && /* @__PURE__ */ jsxRuntime.jsx("span", { children: post.relationship_to_pillar })
1049
- ] })
1050
- ]
1051
- },
1052
- post.id || post.slug
1053
- )) })
1054
- ] })
1055
- ] })
1056
- ] });
1057
- }
1058
879
 
1059
880
  Object.defineProperty(exports, "BlogFAQ", {
1060
881
  enumerable: true,
@@ -1062,35 +883,39 @@ Object.defineProperty(exports, "BlogFAQ", {
1062
883
  });
1063
884
  Object.defineProperty(exports, "BlogList", {
1064
885
  enumerable: true,
1065
- get: function () { return chunkF54HGPDM_js.BlogList; }
886
+ get: function () { return chunkREJSE5AU_js.BlogList; }
1066
887
  });
1067
888
  Object.defineProperty(exports, "BlogPost", {
1068
889
  enumerable: true,
1069
- get: function () { return chunkF54HGPDM_js.BlogPost; }
890
+ get: function () { return chunkREJSE5AU_js.BlogPost; }
891
+ });
892
+ Object.defineProperty(exports, "ClusterLandingPage", {
893
+ enumerable: true,
894
+ get: function () { return chunkREJSE5AU_js.ClusterLandingPage; }
1070
895
  });
1071
896
  Object.defineProperty(exports, "ClusterNavigation", {
1072
897
  enumerable: true,
1073
- get: function () { return chunkF54HGPDM_js.ClusterNavigation; }
898
+ get: function () { return chunkREJSE5AU_js.ClusterNavigation; }
1074
899
  });
1075
900
  Object.defineProperty(exports, "ServiceCallout", {
1076
901
  enumerable: true,
1077
- get: function () { return chunkF54HGPDM_js.ServiceCallout; }
902
+ get: function () { return chunkREJSE5AU_js.ServiceCallout; }
1078
903
  });
1079
904
  Object.defineProperty(exports, "ServiceCallouts", {
1080
905
  enumerable: true,
1081
- get: function () { return chunkF54HGPDM_js.ServiceCallouts; }
906
+ get: function () { return chunkREJSE5AU_js.ServiceCallouts; }
1082
907
  });
1083
908
  Object.defineProperty(exports, "addExternalLinkTargets", {
1084
909
  enumerable: true,
1085
- get: function () { return chunkF54HGPDM_js.addExternalLinkTargets; }
910
+ get: function () { return chunkREJSE5AU_js.addExternalLinkTargets; }
1086
911
  });
1087
912
  Object.defineProperty(exports, "normalizeSiteHost", {
1088
913
  enumerable: true,
1089
- get: function () { return chunkF54HGPDM_js.normalizeSiteHost; }
914
+ get: function () { return chunkREJSE5AU_js.normalizeSiteHost; }
1090
915
  });
1091
916
  Object.defineProperty(exports, "resolveBlogSiteUrl", {
1092
917
  enumerable: true,
1093
- get: function () { return chunkF54HGPDM_js.resolveBlogSiteUrl; }
918
+ get: function () { return chunkREJSE5AU_js.resolveBlogSiteUrl; }
1094
919
  });
1095
920
  exports.AuthorCard = AuthorCard;
1096
921
  exports.AuthorPage = AuthorPage;
@@ -1099,7 +924,6 @@ exports.BlogPage = BlogPage;
1099
924
  exports.BlogPostPage = BlogPostPage;
1100
925
  exports.BlogSidebar = BlogSidebar;
1101
926
  exports.CategoryPage = CategoryPage;
1102
- exports.ClusterLandingPage = ClusterLandingPage;
1103
927
  exports.NewsletterWidget = NewsletterWidget;
1104
928
  exports.RelatedPosts = RelatedPosts;
1105
929
  exports.TableOfContents = TableOfContents;