@opensite/ui 2.6.6 → 2.6.8

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 (35) hide show
  1. package/dist/article-breadcrumb-social.cjs +10 -31
  2. package/dist/article-breadcrumb-social.d.cts +5 -1
  3. package/dist/article-breadcrumb-social.d.ts +5 -1
  4. package/dist/article-breadcrumb-social.js +10 -30
  5. package/dist/article-chapters-author.cjs +112 -74
  6. package/dist/article-chapters-author.d.cts +5 -1
  7. package/dist/article-chapters-author.d.ts +5 -1
  8. package/dist/article-chapters-author.js +112 -74
  9. package/dist/article-compact-toc.cjs +25 -51
  10. package/dist/article-compact-toc.d.cts +5 -1
  11. package/dist/article-compact-toc.d.ts +5 -1
  12. package/dist/article-compact-toc.js +25 -51
  13. package/dist/article-sidebar-sticky.cjs +2 -2
  14. package/dist/article-sidebar-sticky.js +2 -2
  15. package/dist/article-split-animated.cjs +10 -29
  16. package/dist/article-split-animated.d.cts +1 -11
  17. package/dist/article-split-animated.d.ts +1 -11
  18. package/dist/article-split-animated.js +10 -29
  19. package/dist/blog-filtered-results.cjs +2 -2
  20. package/dist/blog-filtered-results.js +2 -2
  21. package/dist/carousel-portfolio-hero.cjs +1 -1
  22. package/dist/carousel-portfolio-hero.js +1 -1
  23. package/dist/case-study-stats-metrics.cjs +3 -3
  24. package/dist/case-study-stats-metrics.js +3 -3
  25. package/dist/case-study-toc-social-sidebar.cjs +3 -3
  26. package/dist/case-study-toc-social-sidebar.js +3 -3
  27. package/dist/hero-event-registration.cjs +1 -1
  28. package/dist/hero-event-registration.js +1 -1
  29. package/dist/registry.cjs +54 -112
  30. package/dist/registry.js +54 -112
  31. package/dist/resource-detail-document-sidebar.cjs +3 -3
  32. package/dist/resource-detail-document-sidebar.js +3 -3
  33. package/dist/resource-list-hero-filter.cjs +2 -2
  34. package/dist/resource-list-hero-filter.js +2 -2
  35. package/package.json +1 -1
@@ -10,7 +10,6 @@ var jsxRuntime = require('react/jsx-runtime');
10
10
  var icon = require('@page-speed/icon');
11
11
  var AvatarPrimitive = require('@radix-ui/react-avatar');
12
12
  var reactSlot = require('@radix-ui/react-slot');
13
- var SeparatorPrimitive = require('@radix-ui/react-separator');
14
13
 
15
14
  function _interopNamespace(e) {
16
15
  if (e && e.__esModule) return e;
@@ -32,7 +31,6 @@ function _interopNamespace(e) {
32
31
 
33
32
  var React5__namespace = /*#__PURE__*/_interopNamespace(React5);
34
33
  var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
35
- var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
36
34
 
37
35
  // components/blocks/article/article-breadcrumb-social.tsx
38
36
  function cn(...inputs) {
@@ -521,7 +519,7 @@ function BreadcrumbList({ className, ...props }) {
521
519
  {
522
520
  "data-slot": "breadcrumb-list",
523
521
  className: cn(
524
- "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
522
+ "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5",
525
523
  className
526
524
  ),
527
525
  ...props
@@ -548,7 +546,7 @@ function BreadcrumbLink({
548
546
  Comp,
549
547
  {
550
548
  "data-slot": "breadcrumb-link",
551
- className: cn("hover:text-foreground transition-colors", className),
549
+ className: cn("hover:underline transition-colors", className),
552
550
  ...props
553
551
  }
554
552
  );
@@ -561,7 +559,7 @@ function BreadcrumbPage({ className, ...props }) {
561
559
  role: "link",
562
560
  "aria-disabled": "true",
563
561
  "aria-current": "page",
564
- className: cn("text-foreground font-normal", className),
562
+ className: cn("font-normal", className),
565
563
  ...props
566
564
  }
567
565
  );
@@ -583,26 +581,6 @@ function BreadcrumbSeparator({
583
581
  }
584
582
  );
585
583
  }
586
- function Separator({
587
- className,
588
- orientation = "horizontal",
589
- decorative = true,
590
- ...props
591
- }) {
592
- return /* @__PURE__ */ jsxRuntime.jsx(
593
- SeparatorPrimitive__namespace.Root,
594
- {
595
- "data-slot": "separator",
596
- decorative,
597
- orientation,
598
- className: cn(
599
- "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
600
- className
601
- ),
602
- ...props
603
- }
604
- );
605
- }
606
584
  var maxWidthStyles = {
607
585
  sm: "max-w-screen-sm",
608
586
  md: "max-w-screen-md",
@@ -1010,7 +988,8 @@ function ArticleBreadcrumbSocialComponent({
1010
988
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
1011
989
  spacing = "hero",
1012
990
  pattern,
1013
- patternOpacity
991
+ patternOpacity,
992
+ patternClassName
1014
993
  }) {
1015
994
  const [activeSection, setActiveSection] = React5__namespace.useState(
1016
995
  sections?.[0]?.id || ""
@@ -1077,7 +1056,7 @@ function ArticleBreadcrumbSocialComponent({
1077
1056
  ] }),
1078
1057
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1079
1058
  author.name && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: author.name }),
1080
- (author.role || publishDate || readTime) && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: [author.role, publishDate, readTime].filter(Boolean).join(" \xB7 ") })
1059
+ (author.role || publishDate || readTime) && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm", children: [author.role, publishDate, readTime].filter(Boolean).join(" \xB7 ") })
1081
1060
  ] })
1082
1061
  ]
1083
1062
  }
@@ -1121,7 +1100,7 @@ function ArticleBreadcrumbSocialComponent({
1121
1100
  href: `#${section.id}`,
1122
1101
  className: cn(
1123
1102
  "block text-sm transition-colors",
1124
- isActive ? "font-medium" : "text-muted-foreground hover:text-foreground"
1103
+ isActive ? "underline" : ""
1125
1104
  ),
1126
1105
  children: section.title
1127
1106
  },
@@ -1137,7 +1116,8 @@ function ArticleBreadcrumbSocialComponent({
1137
1116
  spacing,
1138
1117
  pattern,
1139
1118
  patternOpacity,
1140
- className,
1119
+ patternClassName,
1120
+ className: cn(pattern && "overflow-visible", className),
1141
1121
  containerClassName,
1142
1122
  children: [
1143
1123
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
@@ -1162,7 +1142,6 @@ function ArticleBreadcrumbSocialComponent({
1162
1142
  }
1163
1143
  ) : title),
1164
1144
  authorContent,
1165
- /* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "my-8" }),
1166
1145
  heroMediaContent,
1167
1146
  children
1168
1147
  ]
@@ -1175,7 +1154,7 @@ function ArticleBreadcrumbSocialComponent({
1175
1154
  "button",
1176
1155
  {
1177
1156
  onClick: scrollToTop,
1178
- className: "fixed bottom-8 right-8 flex h-10 w-10 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-lg transition-opacity hover:opacity-90",
1157
+ className: "fixed bottom-8 right-8 flex h-10 w-10 items-center justify-center rounded-full shadow-lg transition-opacity hover:opacity-90",
1179
1158
  "aria-label": "Back to top",
1180
1159
  children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/arrow-up", size: 20 })
1181
1160
  }
@@ -145,7 +145,11 @@ interface ArticleBreadcrumbSocialProps {
145
145
  * Pattern opacity (0-1)
146
146
  */
147
147
  patternOpacity?: number;
148
+ /**
149
+ * Additional CSS classes for the pattern overlay
150
+ */
151
+ patternClassName?: string;
148
152
  }
149
- declare function ArticleBreadcrumbSocialComponent({ className, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, author, authorSlot, publishDate, readTime, sections, tocSlot, renderSectionLink, heroImageSrc, heroImageAlt, heroMediaSlot, children, enableTocTracking, enableBackToTop, optixFlowConfig, background, containerClassName, spacing, pattern, patternOpacity, }: ArticleBreadcrumbSocialProps): react_jsx_runtime.JSX.Element;
153
+ declare function ArticleBreadcrumbSocialComponent({ className, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, author, authorSlot, publishDate, readTime, sections, tocSlot, renderSectionLink, heroImageSrc, heroImageAlt, heroMediaSlot, children, enableTocTracking, enableBackToTop, optixFlowConfig, background, containerClassName, spacing, pattern, patternOpacity, patternClassName, }: ArticleBreadcrumbSocialProps): react_jsx_runtime.JSX.Element;
150
154
 
151
155
  export { type ArticleBreadcrumbSection, ArticleBreadcrumbSocialComponent as ArticleBreadcrumbSocial, type ArticleBreadcrumbSocialProps };
@@ -145,7 +145,11 @@ interface ArticleBreadcrumbSocialProps {
145
145
  * Pattern opacity (0-1)
146
146
  */
147
147
  patternOpacity?: number;
148
+ /**
149
+ * Additional CSS classes for the pattern overlay
150
+ */
151
+ patternClassName?: string;
148
152
  }
149
- declare function ArticleBreadcrumbSocialComponent({ className, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, author, authorSlot, publishDate, readTime, sections, tocSlot, renderSectionLink, heroImageSrc, heroImageAlt, heroMediaSlot, children, enableTocTracking, enableBackToTop, optixFlowConfig, background, containerClassName, spacing, pattern, patternOpacity, }: ArticleBreadcrumbSocialProps): react_jsx_runtime.JSX.Element;
153
+ declare function ArticleBreadcrumbSocialComponent({ className, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, author, authorSlot, publishDate, readTime, sections, tocSlot, renderSectionLink, heroImageSrc, heroImageAlt, heroMediaSlot, children, enableTocTracking, enableBackToTop, optixFlowConfig, background, containerClassName, spacing, pattern, patternOpacity, patternClassName, }: ArticleBreadcrumbSocialProps): react_jsx_runtime.JSX.Element;
150
154
 
151
155
  export { type ArticleBreadcrumbSection, ArticleBreadcrumbSocialComponent as ArticleBreadcrumbSocial, type ArticleBreadcrumbSocialProps };
@@ -9,7 +9,6 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
9
  import { Icon } from '@page-speed/icon';
10
10
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
11
11
  import { Slot } from '@radix-ui/react-slot';
12
- import * as SeparatorPrimitive from '@radix-ui/react-separator';
13
12
 
14
13
  // components/blocks/article/article-breadcrumb-social.tsx
15
14
  function cn(...inputs) {
@@ -498,7 +497,7 @@ function BreadcrumbList({ className, ...props }) {
498
497
  {
499
498
  "data-slot": "breadcrumb-list",
500
499
  className: cn(
501
- "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
500
+ "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5",
502
501
  className
503
502
  ),
504
503
  ...props
@@ -525,7 +524,7 @@ function BreadcrumbLink({
525
524
  Comp,
526
525
  {
527
526
  "data-slot": "breadcrumb-link",
528
- className: cn("hover:text-foreground transition-colors", className),
527
+ className: cn("hover:underline transition-colors", className),
529
528
  ...props
530
529
  }
531
530
  );
@@ -538,7 +537,7 @@ function BreadcrumbPage({ className, ...props }) {
538
537
  role: "link",
539
538
  "aria-disabled": "true",
540
539
  "aria-current": "page",
541
- className: cn("text-foreground font-normal", className),
540
+ className: cn("font-normal", className),
542
541
  ...props
543
542
  }
544
543
  );
@@ -560,26 +559,6 @@ function BreadcrumbSeparator({
560
559
  }
561
560
  );
562
561
  }
563
- function Separator({
564
- className,
565
- orientation = "horizontal",
566
- decorative = true,
567
- ...props
568
- }) {
569
- return /* @__PURE__ */ jsx(
570
- SeparatorPrimitive.Root,
571
- {
572
- "data-slot": "separator",
573
- decorative,
574
- orientation,
575
- className: cn(
576
- "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
577
- className
578
- ),
579
- ...props
580
- }
581
- );
582
- }
583
562
  var maxWidthStyles = {
584
563
  sm: "max-w-screen-sm",
585
564
  md: "max-w-screen-md",
@@ -987,7 +966,8 @@ function ArticleBreadcrumbSocialComponent({
987
966
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
988
967
  spacing = "hero",
989
968
  pattern,
990
- patternOpacity
969
+ patternOpacity,
970
+ patternClassName
991
971
  }) {
992
972
  const [activeSection, setActiveSection] = React5.useState(
993
973
  sections?.[0]?.id || ""
@@ -1054,7 +1034,7 @@ function ArticleBreadcrumbSocialComponent({
1054
1034
  ] }),
1055
1035
  /* @__PURE__ */ jsxs("div", { children: [
1056
1036
  author.name && /* @__PURE__ */ jsx("p", { className: "font-medium", children: author.name }),
1057
- (author.role || publishDate || readTime) && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: [author.role, publishDate, readTime].filter(Boolean).join(" \xB7 ") })
1037
+ (author.role || publishDate || readTime) && /* @__PURE__ */ jsx("p", { className: "text-sm", children: [author.role, publishDate, readTime].filter(Boolean).join(" \xB7 ") })
1058
1038
  ] })
1059
1039
  ]
1060
1040
  }
@@ -1098,7 +1078,7 @@ function ArticleBreadcrumbSocialComponent({
1098
1078
  href: `#${section.id}`,
1099
1079
  className: cn(
1100
1080
  "block text-sm transition-colors",
1101
- isActive ? "font-medium" : "text-muted-foreground hover:text-foreground"
1081
+ isActive ? "underline" : ""
1102
1082
  ),
1103
1083
  children: section.title
1104
1084
  },
@@ -1114,7 +1094,8 @@ function ArticleBreadcrumbSocialComponent({
1114
1094
  spacing,
1115
1095
  pattern,
1116
1096
  patternOpacity,
1117
- className,
1097
+ patternClassName,
1098
+ className: cn(pattern && "overflow-visible", className),
1118
1099
  containerClassName,
1119
1100
  children: [
1120
1101
  /* @__PURE__ */ jsxs("div", { className: "relative", children: [
@@ -1139,7 +1120,6 @@ function ArticleBreadcrumbSocialComponent({
1139
1120
  }
1140
1121
  ) : title),
1141
1122
  authorContent,
1142
- /* @__PURE__ */ jsx(Separator, { className: "my-8" }),
1143
1123
  heroMediaContent,
1144
1124
  children
1145
1125
  ]
@@ -1152,7 +1132,7 @@ function ArticleBreadcrumbSocialComponent({
1152
1132
  "button",
1153
1133
  {
1154
1134
  onClick: scrollToTop,
1155
- className: "fixed bottom-8 right-8 flex h-10 w-10 items-center justify-center rounded-full bg-primary text-primary-foreground shadow-lg transition-opacity hover:opacity-90",
1135
+ className: "fixed bottom-8 right-8 flex h-10 w-10 items-center justify-center rounded-full shadow-lg transition-opacity hover:opacity-90",
1156
1136
  "aria-label": "Back to top",
1157
1137
  children: /* @__PURE__ */ jsx(DynamicIcon, { name: "lucide/arrow-up", size: 20 })
1158
1138
  }
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React5 = require('react');
4
+ var React6 = require('react');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
7
  var img = require('@page-speed/img');
@@ -10,6 +10,7 @@ var jsxRuntime = require('react/jsx-runtime');
10
10
  var icon = require('@page-speed/icon');
11
11
  var AvatarPrimitive = require('@radix-ui/react-avatar');
12
12
  var reactSlot = require('@radix-ui/react-slot');
13
+ var usePlatformFromUrl = require('@opensite/hooks/usePlatformFromUrl');
13
14
 
14
15
  function _interopNamespace(e) {
15
16
  if (e && e.__esModule) return e;
@@ -29,43 +30,13 @@ function _interopNamespace(e) {
29
30
  return Object.freeze(n);
30
31
  }
31
32
 
32
- var React5__namespace = /*#__PURE__*/_interopNamespace(React5);
33
+ var React6__namespace = /*#__PURE__*/_interopNamespace(React6);
33
34
  var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
34
35
 
35
36
  // components/blocks/article/article-chapters-author.tsx
36
37
  function cn(...inputs) {
37
38
  return tailwindMerge.twMerge(clsx.clsx(inputs));
38
39
  }
39
- function getNestedCardBg(parentBg, variant = "muted", options) {
40
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
41
- if (isDark) {
42
- switch (variant) {
43
- case "muted":
44
- return "bg-background";
45
- case "card":
46
- return "bg-card";
47
- case "accent":
48
- return "bg-accent";
49
- case "subtle":
50
- return "bg-background/50";
51
- }
52
- } else {
53
- switch (variant) {
54
- case "muted":
55
- return "bg-muted";
56
- case "card":
57
- return "bg-card";
58
- case "accent":
59
- return "bg-accent";
60
- case "subtle":
61
- return "bg-muted/50";
62
- }
63
- }
64
- }
65
- function getNestedCardTextColor(parentBg, options) {
66
- const isDark = parentBg === "dark" || parentBg === "secondary" || parentBg === "primary";
67
- return isDark ? "text-foreground" : "";
68
- }
69
40
  function isDarkBackground(bg) {
70
41
  return bg === "dark" || bg === "gradient" || bg === "primary" || bg === "secondary";
71
42
  }
@@ -148,7 +119,7 @@ function useNavigation({
148
119
  href,
149
120
  onClick
150
121
  } = {}) {
151
- const linkType = React5__namespace.useMemo(() => {
122
+ const linkType = React6__namespace.useMemo(() => {
152
123
  if (!href || href.trim() === "") {
153
124
  return onClick ? "none" : "none";
154
125
  }
@@ -169,7 +140,7 @@ function useNavigation({
169
140
  return "internal";
170
141
  }
171
142
  }, [href, onClick]);
172
- const normalizedHref = React5__namespace.useMemo(() => {
143
+ const normalizedHref = React6__namespace.useMemo(() => {
173
144
  if (!href || href.trim() === "") {
174
145
  return void 0;
175
146
  }
@@ -187,7 +158,7 @@ function useNavigation({
187
158
  return trimmed;
188
159
  }
189
160
  }, [href, linkType]);
190
- const target = React5__namespace.useMemo(() => {
161
+ const target = React6__namespace.useMemo(() => {
191
162
  switch (linkType) {
192
163
  case "external":
193
164
  return "_blank";
@@ -200,7 +171,7 @@ function useNavigation({
200
171
  return void 0;
201
172
  }
202
173
  }, [linkType]);
203
- const rel = React5__namespace.useMemo(() => {
174
+ const rel = React6__namespace.useMemo(() => {
204
175
  if (linkType === "external") {
205
176
  return "noopener noreferrer";
206
177
  }
@@ -209,7 +180,7 @@ function useNavigation({
209
180
  const isExternal = linkType === "external";
210
181
  const isInternal = linkType === "internal";
211
182
  const shouldUseRouter = isInternal && typeof normalizedHref === "string" && normalizedHref.startsWith("/");
212
- const handleClick = React5__namespace.useCallback(
183
+ const handleClick = React6__namespace.useCallback(
213
184
  (event) => {
214
185
  if (onClick) {
215
186
  try {
@@ -393,7 +364,7 @@ var buttonVariants = classVarianceAuthority.cva(baseStyles, {
393
364
  size: "default"
394
365
  }
395
366
  });
396
- var Pressable = React5__namespace.forwardRef(
367
+ var Pressable = React6__namespace.forwardRef(
397
368
  ({
398
369
  children,
399
370
  className,
@@ -549,7 +520,7 @@ function BreadcrumbList({ className, ...props }) {
549
520
  {
550
521
  "data-slot": "breadcrumb-list",
551
522
  className: cn(
552
- "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
523
+ "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word sm:gap-2.5",
553
524
  className
554
525
  ),
555
526
  ...props
@@ -576,7 +547,7 @@ function BreadcrumbLink({
576
547
  Comp,
577
548
  {
578
549
  "data-slot": "breadcrumb-link",
579
- className: cn("hover:text-foreground transition-colors", className),
550
+ className: cn("hover:underline transition-colors", className),
580
551
  ...props
581
552
  }
582
553
  );
@@ -589,7 +560,7 @@ function BreadcrumbPage({ className, ...props }) {
589
560
  role: "link",
590
561
  "aria-disabled": "true",
591
562
  "aria-current": "page",
592
- className: cn("text-foreground font-normal", className),
563
+ className: cn("font-normal", className),
593
564
  ...props
594
565
  }
595
566
  );
@@ -620,7 +591,7 @@ var maxWidthStyles = {
620
591
  "4xl": "max-w-[1536px]",
621
592
  full: "max-w-full"
622
593
  };
623
- var Container = React5__namespace.default.forwardRef(
594
+ var Container = React6__namespace.default.forwardRef(
624
595
  ({ children, maxWidth = "xl", className, as = "div", ...props }, ref) => {
625
596
  const Component = as;
626
597
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -926,7 +897,7 @@ var spacingStyles = {
926
897
  };
927
898
  var predefinedSpacings = ["none", "sm", "md", "lg", "xl", "hero"];
928
899
  var isPredefinedSpacing = (spacing) => predefinedSpacings.includes(spacing);
929
- var Section = React5__namespace.default.forwardRef(
900
+ var Section = React6__namespace.default.forwardRef(
930
901
  ({
931
902
  id,
932
903
  title,
@@ -987,6 +958,87 @@ var Section = React5__namespace.default.forwardRef(
987
958
  }
988
959
  );
989
960
  Section.displayName = "Section";
961
+ var platformIconMap = {
962
+ instagram: "cib/instagram",
963
+ linkedin: "cib/linkedin",
964
+ google: "cib/google",
965
+ facebook: "cib/facebook",
966
+ tiktok: "cib/tiktok",
967
+ youtube: "cib/youtube",
968
+ yelp: "cib/yelp",
969
+ spotify: "cib/spotify",
970
+ apple: "cib/apple",
971
+ x: "prime/twitter",
972
+ github: "cib/github",
973
+ snapchat: "cib/snapchat",
974
+ discord: "cib/discord",
975
+ dev: "simple-icons/devdotto",
976
+ substack: "simple-icons/substack",
977
+ reddit: "cib/reddit",
978
+ pinterest: "cib/pinterest",
979
+ threads: "simple-icons/threads",
980
+ twitch: "cib/twitch",
981
+ whatsapp: "cib/whatsapp",
982
+ telegram: "cib/telegram",
983
+ medium: "simple-icons/medium",
984
+ patreon: "cib/patreon",
985
+ onlyfans: "simple-icons/onlyfans",
986
+ eventbrite: "cib/eventbrite",
987
+ npmjs: "simple-icons/npm",
988
+ crates: "cib/rust",
989
+ rubygems: "cib/rubygems",
990
+ behance: "cib/behance",
991
+ dribbble: "cib/dribbble",
992
+ unknown: "icon-park-solid/circular-connection"
993
+ };
994
+ var SocialLinkIcon = React6__namespace.forwardRef(
995
+ ({
996
+ platformName,
997
+ label,
998
+ iconSize = 20,
999
+ iconColor,
1000
+ href,
1001
+ iconClassName,
1002
+ className,
1003
+ iconNameOverride,
1004
+ ...pressableProps
1005
+ }, ref) => {
1006
+ const platform = usePlatformFromUrl.usePlatformFromUrl(href);
1007
+ const smartPlatformName = React6__namespace.useMemo(() => {
1008
+ return platform || platformName;
1009
+ }, [platform, platformName]);
1010
+ const iconName = React6__namespace.useMemo(() => {
1011
+ return iconNameOverride || platformIconMap[smartPlatformName];
1012
+ }, [iconNameOverride, smartPlatformName]);
1013
+ const accessibleLabel = React6__namespace.useMemo(() => {
1014
+ return label || platformName;
1015
+ }, [label, platformName]);
1016
+ return /* @__PURE__ */ jsxRuntime.jsx(
1017
+ Pressable,
1018
+ {
1019
+ ref,
1020
+ href,
1021
+ "aria-label": accessibleLabel,
1022
+ className: cn(
1023
+ "inline-flex items-center justify-center transition-colors",
1024
+ className
1025
+ ),
1026
+ ...pressableProps,
1027
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1028
+ DynamicIcon,
1029
+ {
1030
+ name: iconName,
1031
+ size: iconSize,
1032
+ color: iconColor,
1033
+ className: iconClassName,
1034
+ alt: accessibleLabel
1035
+ }
1036
+ )
1037
+ }
1038
+ );
1039
+ }
1040
+ );
1041
+ SocialLinkIcon.displayName = "SocialLinkIcon";
990
1042
  function ArticleChaptersAuthorComponent({
991
1043
  className,
992
1044
  breadcrumbClassName,
@@ -1022,13 +1074,14 @@ function ArticleChaptersAuthorComponent({
1022
1074
  background,
1023
1075
  containerClassName = "px-6 sm:px-6 md:px-8 lg:px-8",
1024
1076
  spacing = "hero",
1077
+ patternClassName,
1025
1078
  pattern,
1026
1079
  patternOpacity
1027
1080
  }) {
1028
- const [activeChapter, setActiveChapter] = React5__namespace.useState(
1081
+ const [activeChapter, setActiveChapter] = React6__namespace.useState(
1029
1082
  chapters?.[0]?.id || ""
1030
1083
  );
1031
- React5__namespace.useEffect(() => {
1084
+ React6__namespace.useEffect(() => {
1032
1085
  if (!enableChapterTracking || !chapters || chapters.length === 0) return;
1033
1086
  const observer = new IntersectionObserver(
1034
1087
  (entries) => {
@@ -1046,12 +1099,12 @@ function ArticleChaptersAuthorComponent({
1046
1099
  });
1047
1100
  return () => observer.disconnect();
1048
1101
  }, [chapters, enableChapterTracking]);
1049
- const breadcrumbsContent = React5__namespace.useMemo(() => {
1102
+ const breadcrumbsContent = React6__namespace.useMemo(() => {
1050
1103
  if (breadcrumbsSlot) return breadcrumbsSlot;
1051
1104
  if (!breadcrumbs || breadcrumbs.length === 0) return null;
1052
1105
  return /* @__PURE__ */ jsxRuntime.jsx(Breadcrumb, { className: cn("mb-8 md:mb-20", breadcrumbClassName), children: /* @__PURE__ */ jsxRuntime.jsxs(BreadcrumbList, { children: [
1053
1106
  /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: "#", children: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/home", size: 16 }) }) }) }),
1054
- breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxRuntime.jsxs(React5__namespace.Fragment, { children: [
1107
+ breadcrumbs.map((crumb, index) => /* @__PURE__ */ jsxRuntime.jsxs(React6__namespace.Fragment, { children: [
1055
1108
  /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbSeparator, {}),
1056
1109
  /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(Pressable, { href: crumb.href, children: crumb.label }) }) })
1057
1110
  ] }, index)),
@@ -1059,7 +1112,7 @@ function ArticleChaptersAuthorComponent({
1059
1112
  /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbItem, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbPage, { children: typeof currentPage === "string" ? currentPage : currentPage }) })
1060
1113
  ] }) });
1061
1114
  }, [breadcrumbsSlot, breadcrumbs, currentPage, breadcrumbClassName]);
1062
- const chaptersNavContent = React5__namespace.useMemo(() => {
1115
+ const chaptersNavContent = React6__namespace.useMemo(() => {
1063
1116
  if (chaptersSlot) return chaptersSlot;
1064
1117
  if (!chapters || chapters.length === 0) return null;
1065
1118
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("rounded-lg border p-4", chaptersClassName), children: [
@@ -1067,7 +1120,7 @@ function ArticleChaptersAuthorComponent({
1067
1120
  /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "space-y-2", children: chapters.map((chapter) => {
1068
1121
  const isActive = activeChapter === chapter.id;
1069
1122
  if (renderChapterLink) {
1070
- return /* @__PURE__ */ jsxRuntime.jsx(React5__namespace.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
1123
+ return /* @__PURE__ */ jsxRuntime.jsx(React6__namespace.Fragment, { children: renderChapterLink(chapter, isActive) }, chapter.id);
1071
1124
  }
1072
1125
  return /* @__PURE__ */ jsxRuntime.jsxs(
1073
1126
  Pressable,
@@ -1075,16 +1128,14 @@ function ArticleChaptersAuthorComponent({
1075
1128
  href: `#${chapter.id}`,
1076
1129
  className: cn(
1077
1130
  "flex items-center gap-3 text-sm transition-colors",
1078
- isActive ? "font-medium" : ""
1131
+ isActive ? "underline" : ""
1079
1132
  ),
1080
1133
  children: [
1081
1134
  /* @__PURE__ */ jsxRuntime.jsx(
1082
1135
  "span",
1083
1136
  {
1084
1137
  className: cn(
1085
- "flex h-6 w-6 items-center justify-center rounded-full text-xs",
1086
- getNestedCardBg(background),
1087
- getNestedCardTextColor(background)
1138
+ "flex h-6 w-6 items-center justify-center rounded-full text-xs"
1088
1139
  ),
1089
1140
  children: chapter.number
1090
1141
  }
@@ -1103,26 +1154,14 @@ function ArticleChaptersAuthorComponent({
1103
1154
  renderChapterLink,
1104
1155
  chaptersClassName
1105
1156
  ]);
1106
- const authorCardContent = React5__namespace.useMemo(() => {
1157
+ const authorCardContent = React6__namespace.useMemo(() => {
1107
1158
  if (authorSlot) return authorSlot;
1108
1159
  if (!author) return null;
1109
1160
  let socialLinksContent = null;
1110
1161
  if (author.socialLinks) {
1111
1162
  if (Array.isArray(author.socialLinks)) {
1112
1163
  if (author.socialLinks.length > 0) {
1113
- socialLinksContent = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 flex gap-2", children: author.socialLinks.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(
1114
- Pressable,
1115
- {
1116
- href: link.href,
1117
- className: cn(
1118
- "flex h-8 w-8 items-center justify-center rounded-md border",
1119
- link.className
1120
- ),
1121
- "aria-label": link["aria-label"],
1122
- children: link.icon ?? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: `lucide/${link.platform}`, size: 14 })
1123
- },
1124
- index
1125
- )) });
1164
+ socialLinksContent = /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 flex gap-2", children: author.socialLinks.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(SocialLinkIcon, { href: link.href }, index)) });
1126
1165
  }
1127
1166
  } else {
1128
1167
  const links = author.socialLinks;
@@ -1157,14 +1196,14 @@ function ArticleChaptersAuthorComponent({
1157
1196
  ] }),
1158
1197
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
1159
1198
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: author.name }),
1160
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: author.role })
1199
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs", children: author.role })
1161
1200
  ] })
1162
1201
  ] }),
1163
- author.bio && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm text-muted-foreground", children: author.bio }),
1202
+ author.bio && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm", children: author.bio }),
1164
1203
  socialLinksContent
1165
1204
  ] });
1166
1205
  }, [authorSlot, author, authorClassName]);
1167
- const heroMediaContent = React5__namespace.useMemo(() => {
1206
+ const heroMediaContent = React6__namespace.useMemo(() => {
1168
1207
  if (heroMediaSlot) return heroMediaSlot;
1169
1208
  if (!heroImageSrc) return null;
1170
1209
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1186,7 +1225,7 @@ function ArticleChaptersAuthorComponent({
1186
1225
  heroImageClassName,
1187
1226
  optixFlowConfig
1188
1227
  ]);
1189
- const conclusionContent = React5__namespace.useMemo(() => {
1228
+ const conclusionContent = React6__namespace.useMemo(() => {
1190
1229
  if (conclusionSlot) return conclusionSlot;
1191
1230
  if (!conclusionTitle && !conclusionDescription && (!conclusionActions || conclusionActions.length === 0))
1192
1231
  return null;
@@ -1195,8 +1234,6 @@ function ArticleChaptersAuthorComponent({
1195
1234
  {
1196
1235
  className: cn(
1197
1236
  "mt-12 rounded-lg border p-6 not-prose",
1198
- getNestedCardBg(background, "subtle"),
1199
- getNestedCardTextColor(background),
1200
1237
  conclusionClassName
1201
1238
  ),
1202
1239
  children: [
@@ -1243,7 +1280,8 @@ function ArticleChaptersAuthorComponent({
1243
1280
  spacing,
1244
1281
  pattern,
1245
1282
  patternOpacity,
1246
- className,
1283
+ patternClassName,
1284
+ className: cn(pattern && "overflow-visible", className),
1247
1285
  containerClassName,
1248
1286
  children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
1249
1287
  breadcrumbsContent,
@@ -174,7 +174,11 @@ interface ArticleChaptersAuthorProps {
174
174
  * Pattern opacity (0-1)
175
175
  */
176
176
  patternOpacity?: number;
177
+ /**
178
+ * Additional CSS classes for the pattern overlay
179
+ */
180
+ patternClassName?: string;
177
181
  }
178
- declare function ArticleChaptersAuthorComponent({ className, breadcrumbClassName, headerClassName, titleClassName, subtitleClassName, sidebarClassName, articleClassName, chaptersClassName, authorClassName, conclusionClassName, heroImageClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, subtitle, chapters, chaptersSlot, renderChapterLink, author, authorSlot, heroImageSrc, heroImageAlt, heroMediaSlot, conclusionTitle, conclusionDescription, conclusionActions, conclusionSlot, children, enableChapterTracking, optixFlowConfig, background, containerClassName, spacing, pattern, patternOpacity, }: ArticleChaptersAuthorProps): react_jsx_runtime.JSX.Element;
182
+ declare function ArticleChaptersAuthorComponent({ className, breadcrumbClassName, headerClassName, titleClassName, subtitleClassName, sidebarClassName, articleClassName, chaptersClassName, authorClassName, conclusionClassName, heroImageClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, subtitle, chapters, chaptersSlot, renderChapterLink, author, authorSlot, heroImageSrc, heroImageAlt, heroMediaSlot, conclusionTitle, conclusionDescription, conclusionActions, conclusionSlot, children, enableChapterTracking, optixFlowConfig, background, containerClassName, spacing, patternClassName, pattern, patternOpacity, }: ArticleChaptersAuthorProps): react_jsx_runtime.JSX.Element;
179
183
 
180
184
  export { type ArticleAuthor, type ArticleChapter, ArticleChaptersAuthorComponent as ArticleChaptersAuthor, type ArticleChaptersAuthorProps };