@opensite/ui 0.8.4 → 0.8.5
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.
- package/dist/article-breadcrumb-social.cjs +57 -73
- package/dist/article-breadcrumb-social.d.cts +2 -24
- package/dist/article-breadcrumb-social.d.ts +2 -24
- package/dist/article-breadcrumb-social.js +57 -73
- package/dist/article-compact-toc.cjs +1 -1
- package/dist/article-compact-toc.js +1 -1
- package/dist/article-sidebar-sticky.cjs +73 -26
- package/dist/article-sidebar-sticky.js +73 -26
- package/dist/blog-horizontal-timeline.cjs +7 -4
- package/dist/blog-horizontal-timeline.js +7 -4
- package/dist/faq-split-hero.cjs +704 -0
- package/dist/faq-split-hero.d.cts +118 -0
- package/dist/faq-split-hero.d.ts +118 -0
- package/dist/faq-split-hero.js +682 -0
- package/dist/feature-badge-grid-six.cjs +1 -1
- package/dist/feature-badge-grid-six.js +1 -1
- package/dist/feature-card-grid-linked.cjs +92 -22
- package/dist/feature-card-grid-linked.js +92 -22
- package/dist/feature-carousel-progress.cjs +1 -1
- package/dist/feature-carousel-progress.js +1 -1
- package/dist/feature-checklist-image.cjs +88 -15
- package/dist/feature-checklist-image.js +88 -15
- package/dist/feature-checklist-three-column.cjs +1 -1
- package/dist/feature-checklist-three-column.js +1 -1
- package/dist/feature-icon-grid-accent.cjs +50 -8
- package/dist/feature-icon-grid-accent.js +50 -8
- package/dist/feature-icon-grid-bordered.cjs +84 -14
- package/dist/feature-icon-grid-bordered.js +84 -14
- package/dist/feature-icon-tabs-content.cjs +217 -84
- package/dist/feature-icon-tabs-content.js +217 -84
- package/dist/feature-image-overlay-badge.cjs +106 -33
- package/dist/feature-image-overlay-badge.js +106 -33
- package/dist/feature-numbered-cards.cjs +154 -35
- package/dist/feature-numbered-cards.js +154 -35
- package/dist/feature-showcase.cjs +67 -71
- package/dist/feature-showcase.d.cts +1 -5
- package/dist/feature-showcase.d.ts +1 -5
- package/dist/feature-showcase.js +68 -72
- package/dist/feature-split-image-reverse.cjs +90 -15
- package/dist/feature-split-image-reverse.js +90 -15
- package/dist/feature-split-image.cjs +87 -15
- package/dist/feature-split-image.js +87 -15
- package/dist/feature-stats-highlight.cjs +2 -2
- package/dist/feature-stats-highlight.js +2 -2
- package/dist/feature-tabbed-content-image.cjs +207 -72
- package/dist/feature-tabbed-content-image.js +207 -72
- package/dist/feature-three-column-values.cjs +107 -14
- package/dist/feature-three-column-values.js +107 -14
- package/dist/registry.cjs +1460 -461
- package/dist/registry.js +1460 -461
- package/package.json +1 -1
|
@@ -1081,7 +1081,6 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1081
1081
|
authorClassName,
|
|
1082
1082
|
heroImageClassName,
|
|
1083
1083
|
tocClassName,
|
|
1084
|
-
shareClassName,
|
|
1085
1084
|
breadcrumbs,
|
|
1086
1085
|
breadcrumbsSlot,
|
|
1087
1086
|
currentPage,
|
|
@@ -1096,9 +1095,6 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1096
1095
|
sections,
|
|
1097
1096
|
tocSlot,
|
|
1098
1097
|
renderSectionLink,
|
|
1099
|
-
socialLinks: socialLinksProp,
|
|
1100
|
-
shareUrls,
|
|
1101
|
-
shareSlot,
|
|
1102
1098
|
heroImageSrc,
|
|
1103
1099
|
heroImageAlt,
|
|
1104
1100
|
heroMediaSlot,
|
|
@@ -1107,35 +1103,11 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1107
1103
|
enableBackToTop,
|
|
1108
1104
|
optixFlowConfig,
|
|
1109
1105
|
background,
|
|
1110
|
-
spacing,
|
|
1106
|
+
spacing = "py-6 md:py-32",
|
|
1111
1107
|
pattern,
|
|
1112
1108
|
patternOpacity
|
|
1113
1109
|
}) {
|
|
1114
1110
|
const author = authorProp ?? (authorName ? { name: authorName, image: authorImage, role: authorRole } : void 0);
|
|
1115
|
-
const platformLabels = {
|
|
1116
|
-
twitter: "Twitter",
|
|
1117
|
-
x: "X",
|
|
1118
|
-
facebook: "Facebook",
|
|
1119
|
-
linkedin: "LinkedIn",
|
|
1120
|
-
instagram: "Instagram",
|
|
1121
|
-
github: "GitHub"
|
|
1122
|
-
};
|
|
1123
|
-
const socialIconMap = {
|
|
1124
|
-
twitter: "simple-icons/x",
|
|
1125
|
-
// Twitter is now X
|
|
1126
|
-
x: "simple-icons/x",
|
|
1127
|
-
facebook: "simple-icons/facebook",
|
|
1128
|
-
linkedin: "simple-icons/linkedin",
|
|
1129
|
-
instagram: "simple-icons/instagram",
|
|
1130
|
-
github: "simple-icons/github"
|
|
1131
|
-
};
|
|
1132
|
-
const socialLinks = socialLinksProp ?? (shareUrls ? Object.entries(shareUrls).filter(([, href]) => href).map(([platform, href]) => ({
|
|
1133
|
-
platform,
|
|
1134
|
-
href,
|
|
1135
|
-
icon: /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: socialIconMap[platform] || `simple-icons/${platform}`, size: 16 }),
|
|
1136
|
-
"aria-label": `Share on ${platformLabels[platform] || platform.charAt(0).toUpperCase() + platform.slice(1)}`,
|
|
1137
|
-
className: void 0
|
|
1138
|
-
})) : []);
|
|
1139
1111
|
const [activeSection, setActiveSection] = React6__namespace.useState(
|
|
1140
1112
|
sections?.[0]?.id || ""
|
|
1141
1113
|
);
|
|
@@ -1187,16 +1159,25 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1187
1159
|
const authorContent = React6__namespace.useMemo(() => {
|
|
1188
1160
|
if (authorSlot) return authorSlot;
|
|
1189
1161
|
if (!author) return null;
|
|
1190
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1162
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1163
|
+
"div",
|
|
1164
|
+
{
|
|
1165
|
+
className: cn(
|
|
1166
|
+
"mt-6 flex items-center gap-4 not-prose",
|
|
1167
|
+
authorClassName
|
|
1168
|
+
),
|
|
1169
|
+
children: [
|
|
1170
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: "h-12 w-12", children: [
|
|
1171
|
+
/* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: author.image }),
|
|
1172
|
+
/* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: author.name?.charAt(0) || "A" })
|
|
1173
|
+
] }),
|
|
1174
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1175
|
+
author.name && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-medium", children: author.name }),
|
|
1176
|
+
(author.role || publishDate || readTime) && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: [author.role, publishDate, readTime].filter(Boolean).join(" \xB7 ") })
|
|
1177
|
+
] })
|
|
1178
|
+
]
|
|
1179
|
+
}
|
|
1180
|
+
);
|
|
1200
1181
|
}, [authorSlot, author, publishDate, readTime, authorClassName]);
|
|
1201
1182
|
const heroMediaContent = React6__namespace.useMemo(() => {
|
|
1202
1183
|
if (heroMediaSlot) return heroMediaSlot;
|
|
@@ -1206,11 +1187,20 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1206
1187
|
{
|
|
1207
1188
|
src: heroImageSrc,
|
|
1208
1189
|
alt: heroImageAlt,
|
|
1209
|
-
className: cn(
|
|
1190
|
+
className: cn(
|
|
1191
|
+
"my-8 aspect-video w-full rounded-lg object-cover",
|
|
1192
|
+
heroImageClassName
|
|
1193
|
+
),
|
|
1210
1194
|
optixFlowConfig
|
|
1211
1195
|
}
|
|
1212
1196
|
);
|
|
1213
|
-
}, [
|
|
1197
|
+
}, [
|
|
1198
|
+
heroMediaSlot,
|
|
1199
|
+
heroImageSrc,
|
|
1200
|
+
heroImageAlt,
|
|
1201
|
+
heroImageClassName,
|
|
1202
|
+
optixFlowConfig
|
|
1203
|
+
]);
|
|
1214
1204
|
const tocContent = React6__namespace.useMemo(() => {
|
|
1215
1205
|
if (tocSlot) return tocSlot;
|
|
1216
1206
|
if (!sections || sections.length === 0) return null;
|
|
@@ -1236,26 +1226,6 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1236
1226
|
}) })
|
|
1237
1227
|
] });
|
|
1238
1228
|
}, [tocSlot, sections, activeSection, renderSectionLink, tocClassName]);
|
|
1239
|
-
const shareButtonsContent = React6__namespace.useMemo(() => {
|
|
1240
|
-
if (shareSlot) return shareSlot;
|
|
1241
|
-
if (!socialLinks || socialLinks.length === 0) return null;
|
|
1242
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("rounded-lg border p-4", shareClassName), children: [
|
|
1243
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-4 text-sm font-semibold", children: "Share this article" }),
|
|
1244
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-2", children: socialLinks.map((link, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1245
|
-
Pressable,
|
|
1246
|
-
{
|
|
1247
|
-
href: link.href,
|
|
1248
|
-
className: cn(
|
|
1249
|
-
"flex h-9 w-9 items-center justify-center rounded-md border hover:bg-muted",
|
|
1250
|
-
link.className
|
|
1251
|
-
),
|
|
1252
|
-
"aria-label": link["aria-label"],
|
|
1253
|
-
children: link.icon
|
|
1254
|
-
},
|
|
1255
|
-
index
|
|
1256
|
-
)) })
|
|
1257
|
-
] });
|
|
1258
|
-
}, [shareSlot, socialLinks, shareClassName]);
|
|
1259
1229
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1260
1230
|
Section,
|
|
1261
1231
|
{
|
|
@@ -1268,18 +1238,32 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1268
1238
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("container", containerClassName), children: [
|
|
1269
1239
|
breadcrumbsContent,
|
|
1270
1240
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,1fr)_280px]", children: [
|
|
1271
|
-
children && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1241
|
+
children && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1242
|
+
"article",
|
|
1243
|
+
{
|
|
1244
|
+
className: cn(
|
|
1245
|
+
"prose max-w-none dark:prose-invert",
|
|
1246
|
+
articleClassName
|
|
1247
|
+
),
|
|
1248
|
+
children: [
|
|
1249
|
+
title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1250
|
+
"h1",
|
|
1251
|
+
{
|
|
1252
|
+
className: cn(
|
|
1253
|
+
"text-4xl font-bold tracking-tight md:text-5xl",
|
|
1254
|
+
titleClassName
|
|
1255
|
+
),
|
|
1256
|
+
children: title
|
|
1257
|
+
}
|
|
1258
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title })),
|
|
1259
|
+
authorContent,
|
|
1260
|
+
/* @__PURE__ */ jsxRuntime.jsx(Separator, { className: "my-8" }),
|
|
1261
|
+
heroMediaContent,
|
|
1262
|
+
children
|
|
1263
|
+
]
|
|
1264
|
+
}
|
|
1265
|
+
),
|
|
1266
|
+
/* @__PURE__ */ jsxRuntime.jsx("aside", { className: cn("hidden lg:block", sidebarClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky top-8 space-y-6", children: tocContent }) })
|
|
1283
1267
|
] })
|
|
1284
1268
|
] }),
|
|
1285
1269
|
enableBackToTop && showBackToTop && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { f as SectionBackground, g as SectionSpacing } from './community-initiatives-Sm_ZSgyv.cjs';
|
|
4
4
|
import { P as PatternName } from './pattern-background-a7gKHzHy.cjs';
|
|
5
|
-
import {
|
|
5
|
+
import { O as OptixFlowConfig } from './blocks-Cohq4eio.cjs';
|
|
6
6
|
import 'class-variance-authority';
|
|
7
7
|
import './button-variants-lRElsmTc.cjs';
|
|
8
8
|
import 'class-variance-authority/types';
|
|
@@ -57,10 +57,6 @@ interface ArticleBreadcrumbSocialProps {
|
|
|
57
57
|
* Additional CSS classes for the TOC container
|
|
58
58
|
*/
|
|
59
59
|
tocClassName?: string;
|
|
60
|
-
/**
|
|
61
|
-
* Additional CSS classes for the share buttons container
|
|
62
|
-
*/
|
|
63
|
-
shareClassName?: string;
|
|
64
60
|
/**
|
|
65
61
|
* Breadcrumb navigation items
|
|
66
62
|
*/
|
|
@@ -120,24 +116,6 @@ interface ArticleBreadcrumbSocialProps {
|
|
|
120
116
|
* Render callback for section links (overrides default rendering)
|
|
121
117
|
*/
|
|
122
118
|
renderSectionLink?: (section: ArticleBreadcrumbSection, isActive: boolean) => React.ReactNode;
|
|
123
|
-
/**
|
|
124
|
-
* Social share links
|
|
125
|
-
*/
|
|
126
|
-
socialLinks?: SocialLinkItem[];
|
|
127
|
-
/**
|
|
128
|
-
* @deprecated Use socialLinks instead
|
|
129
|
-
* Share URLs object (backward compatibility)
|
|
130
|
-
*/
|
|
131
|
-
shareUrls?: {
|
|
132
|
-
twitter?: string;
|
|
133
|
-
facebook?: string;
|
|
134
|
-
linkedin?: string;
|
|
135
|
-
instagram?: string;
|
|
136
|
-
};
|
|
137
|
-
/**
|
|
138
|
-
* Custom slot for rendering share buttons (overrides socialLinks)
|
|
139
|
-
*/
|
|
140
|
-
shareSlot?: React.ReactNode;
|
|
141
119
|
/**
|
|
142
120
|
* Hero image source URL
|
|
143
121
|
*/
|
|
@@ -183,6 +161,6 @@ interface ArticleBreadcrumbSocialProps {
|
|
|
183
161
|
*/
|
|
184
162
|
patternOpacity?: number;
|
|
185
163
|
}
|
|
186
|
-
declare function ArticleBreadcrumbSocialComponent({ className, containerClassName, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName,
|
|
164
|
+
declare function ArticleBreadcrumbSocialComponent({ className, containerClassName, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, author: authorProp, authorName, authorImage, authorRole, authorSlot, publishDate, readTime, sections, tocSlot, renderSectionLink, heroImageSrc, heroImageAlt, heroMediaSlot, children, enableTocTracking, enableBackToTop, optixFlowConfig, background, spacing, pattern, patternOpacity, }: ArticleBreadcrumbSocialProps): react_jsx_runtime.JSX.Element;
|
|
187
165
|
|
|
188
166
|
export { type ArticleBreadcrumbSection, ArticleBreadcrumbSocialComponent as ArticleBreadcrumbSocial, type ArticleBreadcrumbSocialProps };
|
|
@@ -2,7 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { f as SectionBackground, g as SectionSpacing } from './community-initiatives-BeWIIjA4.js';
|
|
4
4
|
import { P as PatternName } from './pattern-background-a7gKHzHy.js';
|
|
5
|
-
import {
|
|
5
|
+
import { O as OptixFlowConfig } from './blocks-k17uluAz.js';
|
|
6
6
|
import 'class-variance-authority';
|
|
7
7
|
import './button-variants-lRElsmTc.js';
|
|
8
8
|
import 'class-variance-authority/types';
|
|
@@ -57,10 +57,6 @@ interface ArticleBreadcrumbSocialProps {
|
|
|
57
57
|
* Additional CSS classes for the TOC container
|
|
58
58
|
*/
|
|
59
59
|
tocClassName?: string;
|
|
60
|
-
/**
|
|
61
|
-
* Additional CSS classes for the share buttons container
|
|
62
|
-
*/
|
|
63
|
-
shareClassName?: string;
|
|
64
60
|
/**
|
|
65
61
|
* Breadcrumb navigation items
|
|
66
62
|
*/
|
|
@@ -120,24 +116,6 @@ interface ArticleBreadcrumbSocialProps {
|
|
|
120
116
|
* Render callback for section links (overrides default rendering)
|
|
121
117
|
*/
|
|
122
118
|
renderSectionLink?: (section: ArticleBreadcrumbSection, isActive: boolean) => React.ReactNode;
|
|
123
|
-
/**
|
|
124
|
-
* Social share links
|
|
125
|
-
*/
|
|
126
|
-
socialLinks?: SocialLinkItem[];
|
|
127
|
-
/**
|
|
128
|
-
* @deprecated Use socialLinks instead
|
|
129
|
-
* Share URLs object (backward compatibility)
|
|
130
|
-
*/
|
|
131
|
-
shareUrls?: {
|
|
132
|
-
twitter?: string;
|
|
133
|
-
facebook?: string;
|
|
134
|
-
linkedin?: string;
|
|
135
|
-
instagram?: string;
|
|
136
|
-
};
|
|
137
|
-
/**
|
|
138
|
-
* Custom slot for rendering share buttons (overrides socialLinks)
|
|
139
|
-
*/
|
|
140
|
-
shareSlot?: React.ReactNode;
|
|
141
119
|
/**
|
|
142
120
|
* Hero image source URL
|
|
143
121
|
*/
|
|
@@ -183,6 +161,6 @@ interface ArticleBreadcrumbSocialProps {
|
|
|
183
161
|
*/
|
|
184
162
|
patternOpacity?: number;
|
|
185
163
|
}
|
|
186
|
-
declare function ArticleBreadcrumbSocialComponent({ className, containerClassName, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName,
|
|
164
|
+
declare function ArticleBreadcrumbSocialComponent({ className, containerClassName, breadcrumbClassName, articleClassName, sidebarClassName, titleClassName, authorClassName, heroImageClassName, tocClassName, breadcrumbs, breadcrumbsSlot, currentPage, title, author: authorProp, authorName, authorImage, authorRole, authorSlot, publishDate, readTime, sections, tocSlot, renderSectionLink, heroImageSrc, heroImageAlt, heroMediaSlot, children, enableTocTracking, enableBackToTop, optixFlowConfig, background, spacing, pattern, patternOpacity, }: ArticleBreadcrumbSocialProps): react_jsx_runtime.JSX.Element;
|
|
187
165
|
|
|
188
166
|
export { type ArticleBreadcrumbSection, ArticleBreadcrumbSocialComponent as ArticleBreadcrumbSocial, type ArticleBreadcrumbSocialProps };
|
|
@@ -1058,7 +1058,6 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1058
1058
|
authorClassName,
|
|
1059
1059
|
heroImageClassName,
|
|
1060
1060
|
tocClassName,
|
|
1061
|
-
shareClassName,
|
|
1062
1061
|
breadcrumbs,
|
|
1063
1062
|
breadcrumbsSlot,
|
|
1064
1063
|
currentPage,
|
|
@@ -1073,9 +1072,6 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1073
1072
|
sections,
|
|
1074
1073
|
tocSlot,
|
|
1075
1074
|
renderSectionLink,
|
|
1076
|
-
socialLinks: socialLinksProp,
|
|
1077
|
-
shareUrls,
|
|
1078
|
-
shareSlot,
|
|
1079
1075
|
heroImageSrc,
|
|
1080
1076
|
heroImageAlt,
|
|
1081
1077
|
heroMediaSlot,
|
|
@@ -1084,35 +1080,11 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1084
1080
|
enableBackToTop,
|
|
1085
1081
|
optixFlowConfig,
|
|
1086
1082
|
background,
|
|
1087
|
-
spacing,
|
|
1083
|
+
spacing = "py-6 md:py-32",
|
|
1088
1084
|
pattern,
|
|
1089
1085
|
patternOpacity
|
|
1090
1086
|
}) {
|
|
1091
1087
|
const author = authorProp ?? (authorName ? { name: authorName, image: authorImage, role: authorRole } : void 0);
|
|
1092
|
-
const platformLabels = {
|
|
1093
|
-
twitter: "Twitter",
|
|
1094
|
-
x: "X",
|
|
1095
|
-
facebook: "Facebook",
|
|
1096
|
-
linkedin: "LinkedIn",
|
|
1097
|
-
instagram: "Instagram",
|
|
1098
|
-
github: "GitHub"
|
|
1099
|
-
};
|
|
1100
|
-
const socialIconMap = {
|
|
1101
|
-
twitter: "simple-icons/x",
|
|
1102
|
-
// Twitter is now X
|
|
1103
|
-
x: "simple-icons/x",
|
|
1104
|
-
facebook: "simple-icons/facebook",
|
|
1105
|
-
linkedin: "simple-icons/linkedin",
|
|
1106
|
-
instagram: "simple-icons/instagram",
|
|
1107
|
-
github: "simple-icons/github"
|
|
1108
|
-
};
|
|
1109
|
-
const socialLinks = socialLinksProp ?? (shareUrls ? Object.entries(shareUrls).filter(([, href]) => href).map(([platform, href]) => ({
|
|
1110
|
-
platform,
|
|
1111
|
-
href,
|
|
1112
|
-
icon: /* @__PURE__ */ jsx(DynamicIcon, { name: socialIconMap[platform] || `simple-icons/${platform}`, size: 16 }),
|
|
1113
|
-
"aria-label": `Share on ${platformLabels[platform] || platform.charAt(0).toUpperCase() + platform.slice(1)}`,
|
|
1114
|
-
className: void 0
|
|
1115
|
-
})) : []);
|
|
1116
1088
|
const [activeSection, setActiveSection] = React6.useState(
|
|
1117
1089
|
sections?.[0]?.id || ""
|
|
1118
1090
|
);
|
|
@@ -1164,16 +1136,25 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1164
1136
|
const authorContent = React6.useMemo(() => {
|
|
1165
1137
|
if (authorSlot) return authorSlot;
|
|
1166
1138
|
if (!author) return null;
|
|
1167
|
-
return /* @__PURE__ */ jsxs(
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1139
|
+
return /* @__PURE__ */ jsxs(
|
|
1140
|
+
"div",
|
|
1141
|
+
{
|
|
1142
|
+
className: cn(
|
|
1143
|
+
"mt-6 flex items-center gap-4 not-prose",
|
|
1144
|
+
authorClassName
|
|
1145
|
+
),
|
|
1146
|
+
children: [
|
|
1147
|
+
/* @__PURE__ */ jsxs(Avatar, { className: "h-12 w-12", children: [
|
|
1148
|
+
/* @__PURE__ */ jsx(AvatarImage, { src: author.image }),
|
|
1149
|
+
/* @__PURE__ */ jsx(AvatarFallback, { children: author.name?.charAt(0) || "A" })
|
|
1150
|
+
] }),
|
|
1151
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
1152
|
+
author.name && /* @__PURE__ */ jsx("p", { className: "font-medium", children: author.name }),
|
|
1153
|
+
(author.role || publishDate || readTime) && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: [author.role, publishDate, readTime].filter(Boolean).join(" \xB7 ") })
|
|
1154
|
+
] })
|
|
1155
|
+
]
|
|
1156
|
+
}
|
|
1157
|
+
);
|
|
1177
1158
|
}, [authorSlot, author, publishDate, readTime, authorClassName]);
|
|
1178
1159
|
const heroMediaContent = React6.useMemo(() => {
|
|
1179
1160
|
if (heroMediaSlot) return heroMediaSlot;
|
|
@@ -1183,11 +1164,20 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1183
1164
|
{
|
|
1184
1165
|
src: heroImageSrc,
|
|
1185
1166
|
alt: heroImageAlt,
|
|
1186
|
-
className: cn(
|
|
1167
|
+
className: cn(
|
|
1168
|
+
"my-8 aspect-video w-full rounded-lg object-cover",
|
|
1169
|
+
heroImageClassName
|
|
1170
|
+
),
|
|
1187
1171
|
optixFlowConfig
|
|
1188
1172
|
}
|
|
1189
1173
|
);
|
|
1190
|
-
}, [
|
|
1174
|
+
}, [
|
|
1175
|
+
heroMediaSlot,
|
|
1176
|
+
heroImageSrc,
|
|
1177
|
+
heroImageAlt,
|
|
1178
|
+
heroImageClassName,
|
|
1179
|
+
optixFlowConfig
|
|
1180
|
+
]);
|
|
1191
1181
|
const tocContent = React6.useMemo(() => {
|
|
1192
1182
|
if (tocSlot) return tocSlot;
|
|
1193
1183
|
if (!sections || sections.length === 0) return null;
|
|
@@ -1213,26 +1203,6 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1213
1203
|
}) })
|
|
1214
1204
|
] });
|
|
1215
1205
|
}, [tocSlot, sections, activeSection, renderSectionLink, tocClassName]);
|
|
1216
|
-
const shareButtonsContent = React6.useMemo(() => {
|
|
1217
|
-
if (shareSlot) return shareSlot;
|
|
1218
|
-
if (!socialLinks || socialLinks.length === 0) return null;
|
|
1219
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("rounded-lg border p-4", shareClassName), children: [
|
|
1220
|
-
/* @__PURE__ */ jsx("h3", { className: "mb-4 text-sm font-semibold", children: "Share this article" }),
|
|
1221
|
-
/* @__PURE__ */ jsx("div", { className: "flex gap-2", children: socialLinks.map((link, index) => /* @__PURE__ */ jsx(
|
|
1222
|
-
Pressable,
|
|
1223
|
-
{
|
|
1224
|
-
href: link.href,
|
|
1225
|
-
className: cn(
|
|
1226
|
-
"flex h-9 w-9 items-center justify-center rounded-md border hover:bg-muted",
|
|
1227
|
-
link.className
|
|
1228
|
-
),
|
|
1229
|
-
"aria-label": link["aria-label"],
|
|
1230
|
-
children: link.icon
|
|
1231
|
-
},
|
|
1232
|
-
index
|
|
1233
|
-
)) })
|
|
1234
|
-
] });
|
|
1235
|
-
}, [shareSlot, socialLinks, shareClassName]);
|
|
1236
1206
|
return /* @__PURE__ */ jsxs(
|
|
1237
1207
|
Section,
|
|
1238
1208
|
{
|
|
@@ -1245,18 +1215,32 @@ function ArticleBreadcrumbSocialComponent({
|
|
|
1245
1215
|
/* @__PURE__ */ jsxs("div", { className: cn("container", containerClassName), children: [
|
|
1246
1216
|
breadcrumbsContent,
|
|
1247
1217
|
/* @__PURE__ */ jsxs("div", { className: "grid gap-10 lg:grid-cols-[minmax(0,1fr)_280px]", children: [
|
|
1248
|
-
children && /* @__PURE__ */ jsxs(
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1218
|
+
children && /* @__PURE__ */ jsxs(
|
|
1219
|
+
"article",
|
|
1220
|
+
{
|
|
1221
|
+
className: cn(
|
|
1222
|
+
"prose max-w-none dark:prose-invert",
|
|
1223
|
+
articleClassName
|
|
1224
|
+
),
|
|
1225
|
+
children: [
|
|
1226
|
+
title && (typeof title === "string" ? /* @__PURE__ */ jsx(
|
|
1227
|
+
"h1",
|
|
1228
|
+
{
|
|
1229
|
+
className: cn(
|
|
1230
|
+
"text-4xl font-bold tracking-tight md:text-5xl",
|
|
1231
|
+
titleClassName
|
|
1232
|
+
),
|
|
1233
|
+
children: title
|
|
1234
|
+
}
|
|
1235
|
+
) : /* @__PURE__ */ jsx("div", { className: titleClassName, children: title })),
|
|
1236
|
+
authorContent,
|
|
1237
|
+
/* @__PURE__ */ jsx(Separator, { className: "my-8" }),
|
|
1238
|
+
heroMediaContent,
|
|
1239
|
+
children
|
|
1240
|
+
]
|
|
1241
|
+
}
|
|
1242
|
+
),
|
|
1243
|
+
/* @__PURE__ */ jsx("aside", { className: cn("hidden lg:block", sidebarClassName), children: /* @__PURE__ */ jsx("div", { className: "sticky top-8 space-y-6", children: tocContent }) })
|
|
1260
1244
|
] })
|
|
1261
1245
|
] }),
|
|
1262
1246
|
enableBackToTop && showBackToTop && /* @__PURE__ */ jsx(
|
|
@@ -1002,7 +1002,7 @@ function ArticleSidebarStickyComponent({
|
|
|
1002
1002
|
children,
|
|
1003
1003
|
optixFlowConfig,
|
|
1004
1004
|
background,
|
|
1005
|
-
spacing,
|
|
1005
|
+
spacing = "py-6 md:py-32",
|
|
1006
1006
|
pattern,
|
|
1007
1007
|
patternOpacity
|
|
1008
1008
|
}) {
|
|
@@ -1013,7 +1013,10 @@ function ArticleSidebarStickyComponent({
|
|
|
1013
1013
|
Pressable,
|
|
1014
1014
|
{
|
|
1015
1015
|
href: backHref,
|
|
1016
|
-
className: cn(
|
|
1016
|
+
className: cn(
|
|
1017
|
+
"inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground",
|
|
1018
|
+
backLinkClassName
|
|
1019
|
+
),
|
|
1017
1020
|
children: [
|
|
1018
1021
|
backIcon ?? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/chevron-left", size: 16 }),
|
|
1019
1022
|
backText
|
|
@@ -1021,21 +1024,38 @@ function ArticleSidebarStickyComponent({
|
|
|
1021
1024
|
}
|
|
1022
1025
|
);
|
|
1023
1026
|
}, [backLinkSlot, backHref, backText, backIcon, backLinkClassName]);
|
|
1024
|
-
const renderAuthor = React__namespace.useCallback(
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1030
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1027
|
+
const renderAuthor = React__namespace.useCallback(
|
|
1028
|
+
(isMobile = false) => {
|
|
1029
|
+
if (authorSlot) return authorSlot;
|
|
1030
|
+
if (!authorName) return null;
|
|
1031
|
+
const avatarSize = isMobile ? "h-8 w-8" : "h-10 w-10";
|
|
1032
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-3", authorClassName), children: [
|
|
1033
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Avatar, { className: avatarSize, children: [
|
|
1034
|
+
/* @__PURE__ */ jsxRuntime.jsx(AvatarImage, { src: authorImage }),
|
|
1035
|
+
/* @__PURE__ */ jsxRuntime.jsx(AvatarFallback, { children: authorName.charAt(0) })
|
|
1036
|
+
] }),
|
|
1037
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
1038
|
+
authorHref ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1039
|
+
Pressable,
|
|
1040
|
+
{
|
|
1041
|
+
href: authorHref,
|
|
1042
|
+
className: "text-sm font-medium hover:underline",
|
|
1043
|
+
children: authorName
|
|
1044
|
+
}
|
|
1045
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: authorName }),
|
|
1046
|
+
publishDate && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: publishDate })
|
|
1047
|
+
] })
|
|
1048
|
+
] });
|
|
1049
|
+
},
|
|
1050
|
+
[
|
|
1051
|
+
authorSlot,
|
|
1052
|
+
authorName,
|
|
1053
|
+
authorImage,
|
|
1054
|
+
authorHref,
|
|
1055
|
+
publishDate,
|
|
1056
|
+
authorClassName
|
|
1057
|
+
]
|
|
1058
|
+
);
|
|
1039
1059
|
const heroMediaContent = React__namespace.useMemo(() => {
|
|
1040
1060
|
if (heroMediaSlot) return heroMediaSlot;
|
|
1041
1061
|
if (!heroImageSrc) return null;
|
|
@@ -1044,11 +1064,20 @@ function ArticleSidebarStickyComponent({
|
|
|
1044
1064
|
{
|
|
1045
1065
|
src: heroImageSrc,
|
|
1046
1066
|
alt: heroImageAlt,
|
|
1047
|
-
className: cn(
|
|
1067
|
+
className: cn(
|
|
1068
|
+
"my-8 aspect-video w-full rounded-lg object-cover",
|
|
1069
|
+
heroImageClassName
|
|
1070
|
+
),
|
|
1048
1071
|
optixFlowConfig
|
|
1049
1072
|
}
|
|
1050
1073
|
);
|
|
1051
|
-
}, [
|
|
1074
|
+
}, [
|
|
1075
|
+
heroMediaSlot,
|
|
1076
|
+
heroImageSrc,
|
|
1077
|
+
heroImageAlt,
|
|
1078
|
+
heroImageClassName,
|
|
1079
|
+
optixFlowConfig
|
|
1080
|
+
]);
|
|
1052
1081
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1053
1082
|
Section,
|
|
1054
1083
|
{
|
|
@@ -1062,13 +1091,31 @@ function ArticleSidebarStickyComponent({
|
|
|
1062
1091
|
backLinkContent,
|
|
1063
1092
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children: renderAuthor(false) })
|
|
1064
1093
|
] }) }),
|
|
1065
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1094
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1095
|
+
"article",
|
|
1096
|
+
{
|
|
1097
|
+
className: cn(
|
|
1098
|
+
"prose max-w-none dark:prose-invert",
|
|
1099
|
+
articleClassName
|
|
1100
|
+
),
|
|
1101
|
+
children: [
|
|
1102
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-8 lg:hidden", children: backLinkContent }),
|
|
1103
|
+
title && (typeof title === "string" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1104
|
+
"h1",
|
|
1105
|
+
{
|
|
1106
|
+
className: cn(
|
|
1107
|
+
"text-4xl font-bold tracking-tight md:text-5xl",
|
|
1108
|
+
titleClassName
|
|
1109
|
+
),
|
|
1110
|
+
children: title
|
|
1111
|
+
}
|
|
1112
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: titleClassName, children: title })),
|
|
1113
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "not-prose mt-4 lg:hidden", children: renderAuthor(true) }),
|
|
1114
|
+
heroMediaContent,
|
|
1115
|
+
children
|
|
1116
|
+
]
|
|
1117
|
+
}
|
|
1118
|
+
)
|
|
1072
1119
|
] }) })
|
|
1073
1120
|
}
|
|
1074
1121
|
);
|