@opensite/ui 3.6.1 → 3.6.3
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/carousel-autoplay-progress.cjs +84 -84
- package/dist/carousel-autoplay-progress.js +84 -84
- package/dist/registry.cjs +872 -147
- package/dist/registry.js +872 -147
- package/package.json +1 -1
package/dist/registry.cjs
CHANGED
|
@@ -19992,7 +19992,7 @@ function CarouselAutoplayProgress({
|
|
|
19992
19992
|
slides,
|
|
19993
19993
|
slidesSlot,
|
|
19994
19994
|
options,
|
|
19995
|
-
autoplayDelay =
|
|
19995
|
+
autoplayDelay = 5e3,
|
|
19996
19996
|
className,
|
|
19997
19997
|
containerClassName,
|
|
19998
19998
|
trackClassName,
|
|
@@ -20002,7 +20002,7 @@ function CarouselAutoplayProgress({
|
|
|
20002
20002
|
dotsClassName,
|
|
20003
20003
|
progressClassName,
|
|
20004
20004
|
optixFlowConfig,
|
|
20005
|
-
background
|
|
20005
|
+
background,
|
|
20006
20006
|
spacing = "xl",
|
|
20007
20007
|
pattern,
|
|
20008
20008
|
patternOpacity
|
|
@@ -20024,71 +20024,97 @@ function CarouselAutoplayProgress({
|
|
|
20024
20024
|
pattern,
|
|
20025
20025
|
patternOpacity,
|
|
20026
20026
|
children: [
|
|
20027
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden", containerClassName), ref: emblaRef, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20027
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("overflow-hidden", containerClassName), ref: emblaRef, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20028
20028
|
"div",
|
|
20029
20029
|
{
|
|
20030
|
-
className: cn(
|
|
20030
|
+
className: cn(
|
|
20031
|
+
"ml-auto mr-3 flex touch-pan-y touch-pinch-zoom",
|
|
20032
|
+
trackClassName
|
|
20033
|
+
),
|
|
20034
|
+
children: slidesSlot ? slidesSlot : slides?.map((slide, index) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
20035
|
+
"div",
|
|
20036
|
+
{
|
|
20037
|
+
className: cn(
|
|
20038
|
+
"flex-[0_0_70%] transform-gpu pl-3",
|
|
20039
|
+
slideClassName,
|
|
20040
|
+
slide.className
|
|
20041
|
+
),
|
|
20042
|
+
children: [
|
|
20043
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden rounded-lg", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20044
|
+
img.Img,
|
|
20045
|
+
{
|
|
20046
|
+
src: slide.src,
|
|
20047
|
+
alt: typeof slide.alt === "string" ? slide.alt : `Slide ${index + 1}`,
|
|
20048
|
+
className: cn(
|
|
20049
|
+
"h-full w-full object-cover",
|
|
20050
|
+
imageClassName,
|
|
20051
|
+
slide.imageClassName
|
|
20052
|
+
),
|
|
20053
|
+
optixFlowConfig
|
|
20054
|
+
}
|
|
20055
|
+
) }),
|
|
20056
|
+
slide.content && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: slide.content })
|
|
20057
|
+
]
|
|
20058
|
+
},
|
|
20059
|
+
index
|
|
20060
|
+
))
|
|
20061
|
+
}
|
|
20062
|
+
) }),
|
|
20063
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
20064
|
+
"div",
|
|
20065
|
+
{
|
|
20066
|
+
className: cn(
|
|
20067
|
+
"mx-auto mt-7 flex max-w-80 items-center justify-between gap-3",
|
|
20068
|
+
controlsClassName
|
|
20069
|
+
),
|
|
20031
20070
|
children: [
|
|
20032
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "
|
|
20033
|
-
|
|
20071
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center gap-2", dotsClassName), children: scrollSnaps.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
20072
|
+
"button",
|
|
20034
20073
|
{
|
|
20035
|
-
|
|
20036
|
-
|
|
20037
|
-
className: cn(
|
|
20038
|
-
|
|
20074
|
+
type: "button",
|
|
20075
|
+
onClick: () => onAutoplayButtonClick(() => onDotButtonClick(index)),
|
|
20076
|
+
className: cn(
|
|
20077
|
+
"h-3 w-3 rounded-full border-2 border-border transition-colors duration-200",
|
|
20078
|
+
index === selectedIndex ? "bg-primary" : "bg-transparent hover:bg-muted"
|
|
20079
|
+
)
|
|
20080
|
+
},
|
|
20081
|
+
index
|
|
20082
|
+
)) }),
|
|
20083
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20084
|
+
"div",
|
|
20085
|
+
{
|
|
20086
|
+
className: cn(
|
|
20087
|
+
"relative h-2 w-40 max-w-[90%] justify-self-center self-center overflow-hidden rounded-[1.8rem] border-2 border-border transition-opacity duration-300 ease-in-out",
|
|
20088
|
+
"bg-card text-card-foreground",
|
|
20089
|
+
showAutoplayProgress ? "opacity-100" : "opacity-0",
|
|
20090
|
+
progressClassName
|
|
20091
|
+
),
|
|
20092
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
20093
|
+
"div",
|
|
20094
|
+
{
|
|
20095
|
+
className: "absolute bottom-0 top-0 -left-full w-full bg-primary",
|
|
20096
|
+
ref: progressNode,
|
|
20097
|
+
style: {
|
|
20098
|
+
animation: "autoplay-progress linear 1",
|
|
20099
|
+
animationPlayState: showAutoplayProgress ? "running" : "paused"
|
|
20100
|
+
}
|
|
20101
|
+
}
|
|
20102
|
+
)
|
|
20039
20103
|
}
|
|
20040
|
-
) }),
|
|
20041
|
-
slide.content && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4", children: slide.content })
|
|
20042
|
-
]
|
|
20043
|
-
},
|
|
20044
|
-
index
|
|
20045
|
-
)) }) }),
|
|
20046
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("mx-auto mt-7 flex max-w-80 items-center justify-between gap-3", controlsClassName), children: [
|
|
20047
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex justify-center gap-2", dotsClassName), children: scrollSnaps.map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
20048
|
-
"button",
|
|
20049
|
-
{
|
|
20050
|
-
type: "button",
|
|
20051
|
-
onClick: () => onAutoplayButtonClick(() => onDotButtonClick(index)),
|
|
20052
|
-
className: cn(
|
|
20053
|
-
"h-3 w-3 rounded-full border-2 border-border transition-colors duration-200",
|
|
20054
|
-
index === selectedIndex ? "bg-primary" : "bg-transparent hover:bg-muted"
|
|
20055
|
-
)
|
|
20056
|
-
},
|
|
20057
|
-
index
|
|
20058
|
-
)) }),
|
|
20059
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20060
|
-
"div",
|
|
20061
|
-
{
|
|
20062
|
-
className: cn(
|
|
20063
|
-
"relative h-2 w-40 max-w-[90%] justify-self-center self-center overflow-hidden rounded-[1.8rem] border-2 border-border transition-opacity duration-300 ease-in-out",
|
|
20064
|
-
getNestedCardBg(background),
|
|
20065
|
-
showAutoplayProgress ? "opacity-100" : "opacity-0",
|
|
20066
|
-
progressClassName
|
|
20067
20104
|
),
|
|
20068
|
-
|
|
20069
|
-
|
|
20105
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20106
|
+
pressable.Pressable,
|
|
20070
20107
|
{
|
|
20071
|
-
|
|
20072
|
-
|
|
20073
|
-
|
|
20074
|
-
|
|
20075
|
-
|
|
20076
|
-
}
|
|
20108
|
+
size: "icon",
|
|
20109
|
+
variant: "secondary",
|
|
20110
|
+
onClick: toggleAutoplay,
|
|
20111
|
+
asButton: true,
|
|
20112
|
+
children: autoplayIsPlaying ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/pause", size: 16 }) : /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/play", size: 16 })
|
|
20077
20113
|
}
|
|
20078
20114
|
)
|
|
20079
|
-
|
|
20080
|
-
|
|
20081
|
-
|
|
20082
|
-
pressable.Pressable,
|
|
20083
|
-
{
|
|
20084
|
-
size: "icon",
|
|
20085
|
-
variant: "secondary",
|
|
20086
|
-
onClick: toggleAutoplay,
|
|
20087
|
-
asButton: true,
|
|
20088
|
-
children: autoplayIsPlaying ? /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/pause", size: 16 }) : /* @__PURE__ */ jsxRuntime.jsx(DynamicIcon, { name: "lucide/play", size: 16 })
|
|
20089
|
-
}
|
|
20090
|
-
)
|
|
20091
|
-
] }),
|
|
20115
|
+
]
|
|
20116
|
+
}
|
|
20117
|
+
),
|
|
20092
20118
|
/* @__PURE__ */ jsxRuntime.jsx("style", { children: `
|
|
20093
20119
|
@keyframes autoplay-progress {
|
|
20094
20120
|
from {
|
|
@@ -105080,6 +105106,787 @@ var ABOUT_BLOCK_CONTRACTS = {
|
|
|
105080
105106
|
}
|
|
105081
105107
|
}
|
|
105082
105108
|
};
|
|
105109
|
+
var ARTICLE_EXAMPLE_IMAGE_URL = ABOUT_EXAMPLE_IMAGE_URL;
|
|
105110
|
+
var ARTICLE_MEDIA_NOTE = "All article media values must be absolute URLs to real image assets. Do not use relative paths, placeholder media variables, logos, favicons, or video URLs in image props.";
|
|
105111
|
+
var ARTICLE_TRACKING_NOTE = "When TOC or chapter tracking is enabled, every sections[].id or chapters[].id value must match a real heading id generated from markdownString content.";
|
|
105112
|
+
var ARTICLE_SOURCE_NOTE = "Article titles, authors, dates, summaries, chapter names, and body copy must come from source-backed article or blog data. Do not invent bylines or publication metadata.";
|
|
105113
|
+
var articleCapabilities = (...capabilities) => capabilities;
|
|
105114
|
+
var ARTICLE_EXAMPLE_MARKDOWN = `## Overview
|
|
105115
|
+
Modern article layouts need clear hierarchy, source-backed metadata, and media that supports the story.
|
|
105116
|
+
|
|
105117
|
+
## Implementation
|
|
105118
|
+
Use concise section headings that map to the navigation items and keep body copy grounded in the article source.
|
|
105119
|
+
|
|
105120
|
+
## Conclusion
|
|
105121
|
+
Close with a practical takeaway and one clear next action for readers.`;
|
|
105122
|
+
var ARTICLE_BLOCK_CONTRACTS = {
|
|
105123
|
+
"article-hero-prose": {
|
|
105124
|
+
exampleUsage: `
|
|
105125
|
+
<ArticleHeroProse
|
|
105126
|
+
post={{
|
|
105127
|
+
title: "The Evolution of Modern JavaScript",
|
|
105128
|
+
description: "A source-backed analysis of how modern JavaScript patterns changed production web development.",
|
|
105129
|
+
authorName: "Alex Rodriguez",
|
|
105130
|
+
authorHref: "#",
|
|
105131
|
+
authorImage: "${ARTICLE_EXAMPLE_IMAGE_URL}",
|
|
105132
|
+
image: "${ARTICLE_EXAMPLE_IMAGE_URL}",
|
|
105133
|
+
pubDate: new Date("2026-01-20"),
|
|
105134
|
+
}}
|
|
105135
|
+
dateFormat="MMMM d, yyyy"
|
|
105136
|
+
markdownString={"## Overview\\nSource-backed introduction.\\n\\n## Implementation\\nDetailed article body.\\n\\n## Conclusion\\nPractical closing takeaway."}
|
|
105137
|
+
/>
|
|
105138
|
+
`.trim(),
|
|
105139
|
+
importantUsageNotes: "Use for a full long-form article with a strong hero image, author metadata, and rich prose. The post.image and post.authorImage props must be absolute image URLs only, never logos, favicons, placeholder variables, relative /images paths, or video media. Use markdownString for the article body and keep post metadata source-backed.",
|
|
105140
|
+
usageRequirements: {
|
|
105141
|
+
requiredProps: ["post", "markdownString"],
|
|
105142
|
+
propConstraints: {
|
|
105143
|
+
post: { required: true, note: "Source-backed article metadata object." },
|
|
105144
|
+
"post.title": { required: true, maxLength: 90 },
|
|
105145
|
+
"post.description": { required: true, maxLength: 220 },
|
|
105146
|
+
"post.authorName": {
|
|
105147
|
+
required: true,
|
|
105148
|
+
maxLength: 80,
|
|
105149
|
+
note: "Must identify a real article author or organization byline."
|
|
105150
|
+
},
|
|
105151
|
+
"post.pubDate": {
|
|
105152
|
+
required: true,
|
|
105153
|
+
note: "Use a real publication date as a Date-compatible value."
|
|
105154
|
+
},
|
|
105155
|
+
"post.image": {
|
|
105156
|
+
required: true,
|
|
105157
|
+
note: "Absolute hero image URL. IMAGE MEDIA ONLY."
|
|
105158
|
+
},
|
|
105159
|
+
"post.authorImage": {
|
|
105160
|
+
required: false,
|
|
105161
|
+
note: "Absolute author/profile image URL. IMAGE MEDIA ONLY."
|
|
105162
|
+
},
|
|
105163
|
+
markdownString: {
|
|
105164
|
+
required: true,
|
|
105165
|
+
maxLength: 12e3,
|
|
105166
|
+
note: "Long-form markdown article body."
|
|
105167
|
+
}
|
|
105168
|
+
},
|
|
105169
|
+
mediaSlots: {
|
|
105170
|
+
"post.image": imageSlot(
|
|
105171
|
+
"post.image",
|
|
105172
|
+
"Primary article hero image.",
|
|
105173
|
+
["hero", "feature"],
|
|
105174
|
+
"xlarge",
|
|
105175
|
+
true,
|
|
105176
|
+
"16:9"
|
|
105177
|
+
),
|
|
105178
|
+
"post.authorImage": imageSlot(
|
|
105179
|
+
"post.authorImage",
|
|
105180
|
+
"Author avatar or portrait image.",
|
|
105181
|
+
["profile", "avatar"],
|
|
105182
|
+
"small",
|
|
105183
|
+
false,
|
|
105184
|
+
"1:1"
|
|
105185
|
+
)
|
|
105186
|
+
},
|
|
105187
|
+
requiresSiteCapabilities: articleCapabilities(
|
|
105188
|
+
"blog_posts",
|
|
105189
|
+
"team_members",
|
|
105190
|
+
"media_library"
|
|
105191
|
+
),
|
|
105192
|
+
notes: [ARTICLE_SOURCE_NOTE, ARTICLE_MEDIA_NOTE]
|
|
105193
|
+
},
|
|
105194
|
+
exampleProps: {
|
|
105195
|
+
post: {
|
|
105196
|
+
title: "The Evolution of Modern JavaScript",
|
|
105197
|
+
description: "A source-backed analysis of how modern JavaScript patterns changed production web development.",
|
|
105198
|
+
authorName: "Alex Rodriguez",
|
|
105199
|
+
authorHref: "#",
|
|
105200
|
+
authorImage: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105201
|
+
image: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105202
|
+
pubDate: /* @__PURE__ */ new Date("2026-01-20")
|
|
105203
|
+
},
|
|
105204
|
+
dateFormat: "MMMM d, yyyy",
|
|
105205
|
+
markdownString: ARTICLE_EXAMPLE_MARKDOWN
|
|
105206
|
+
}
|
|
105207
|
+
},
|
|
105208
|
+
"article-sidebar-sticky": {
|
|
105209
|
+
exampleUsage: `
|
|
105210
|
+
<ArticleSidebarSticky
|
|
105211
|
+
backHref="#"
|
|
105212
|
+
backText="Back to Blog"
|
|
105213
|
+
title="Mastering React Server Components"
|
|
105214
|
+
authorName="Emma Thompson"
|
|
105215
|
+
authorImage="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105216
|
+
authorHref="#"
|
|
105217
|
+
publishDate="January 18, 2026"
|
|
105218
|
+
heroImageSrc="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105219
|
+
heroImageAlt="React Server Components architecture"
|
|
105220
|
+
markdownString={"## Overview\\nSource-backed introduction.\\n\\n## Implementation\\nDetailed article body.\\n\\n## Conclusion\\nPractical closing takeaway."}
|
|
105221
|
+
/>
|
|
105222
|
+
`.trim(),
|
|
105223
|
+
importantUsageNotes: "Use for long-form articles where a sticky sidebar with back navigation and author attribution should remain visible. heroImageSrc and authorImage must be absolute image URLs only. Do not use placeholder media variables, relative /images paths, logos, favicons, or video URLs. Keep title, authorName, publishDate, and markdownString grounded in the source article.",
|
|
105224
|
+
usageRequirements: {
|
|
105225
|
+
requiredProps: [
|
|
105226
|
+
"title",
|
|
105227
|
+
"authorName",
|
|
105228
|
+
"publishDate",
|
|
105229
|
+
"heroImageSrc",
|
|
105230
|
+
"heroImageAlt",
|
|
105231
|
+
"markdownString"
|
|
105232
|
+
],
|
|
105233
|
+
propConstraints: {
|
|
105234
|
+
title: { required: true, maxLength: 90 },
|
|
105235
|
+
summary: {
|
|
105236
|
+
required: false,
|
|
105237
|
+
maxLength: 240,
|
|
105238
|
+
note: "Optional article summary displayed near the title."
|
|
105239
|
+
},
|
|
105240
|
+
authorName: {
|
|
105241
|
+
required: true,
|
|
105242
|
+
maxLength: 80,
|
|
105243
|
+
note: "Must identify a real article author or organization byline."
|
|
105244
|
+
},
|
|
105245
|
+
publishDate: {
|
|
105246
|
+
required: true,
|
|
105247
|
+
maxLength: 40,
|
|
105248
|
+
note: "Human-readable publication date from the source post."
|
|
105249
|
+
},
|
|
105250
|
+
heroImageSrc: {
|
|
105251
|
+
required: true,
|
|
105252
|
+
note: "Absolute article hero image URL. IMAGE MEDIA ONLY."
|
|
105253
|
+
},
|
|
105254
|
+
heroImageAlt: { required: true, maxLength: 140 },
|
|
105255
|
+
authorImage: {
|
|
105256
|
+
required: false,
|
|
105257
|
+
note: "Absolute author/profile image URL. IMAGE MEDIA ONLY."
|
|
105258
|
+
},
|
|
105259
|
+
markdownString: {
|
|
105260
|
+
required: true,
|
|
105261
|
+
maxLength: 12e3,
|
|
105262
|
+
note: "Long-form markdown article body."
|
|
105263
|
+
}
|
|
105264
|
+
},
|
|
105265
|
+
mediaSlots: {
|
|
105266
|
+
heroImageSrc: imageSlot(
|
|
105267
|
+
"heroImageSrc",
|
|
105268
|
+
"Primary article hero image.",
|
|
105269
|
+
["hero", "feature"],
|
|
105270
|
+
"xlarge",
|
|
105271
|
+
true,
|
|
105272
|
+
"16:9"
|
|
105273
|
+
),
|
|
105274
|
+
authorImage: imageSlot(
|
|
105275
|
+
"authorImage",
|
|
105276
|
+
"Author avatar or portrait image.",
|
|
105277
|
+
["profile", "avatar"],
|
|
105278
|
+
"small",
|
|
105279
|
+
false,
|
|
105280
|
+
"1:1"
|
|
105281
|
+
)
|
|
105282
|
+
},
|
|
105283
|
+
requiresSiteCapabilities: articleCapabilities(
|
|
105284
|
+
"blog_posts",
|
|
105285
|
+
"team_members",
|
|
105286
|
+
"media_library"
|
|
105287
|
+
),
|
|
105288
|
+
notes: [ARTICLE_SOURCE_NOTE, ARTICLE_MEDIA_NOTE]
|
|
105289
|
+
},
|
|
105290
|
+
exampleProps: {
|
|
105291
|
+
backHref: "#",
|
|
105292
|
+
backText: "Back to Blog",
|
|
105293
|
+
title: "Mastering React Server Components",
|
|
105294
|
+
authorName: "Emma Thompson",
|
|
105295
|
+
authorImage: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105296
|
+
authorHref: "#",
|
|
105297
|
+
publishDate: "January 18, 2026",
|
|
105298
|
+
heroImageSrc: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105299
|
+
heroImageAlt: "React Server Components architecture",
|
|
105300
|
+
markdownString: ARTICLE_EXAMPLE_MARKDOWN
|
|
105301
|
+
}
|
|
105302
|
+
},
|
|
105303
|
+
"article-toc-sidebar": {
|
|
105304
|
+
exampleUsage: `
|
|
105305
|
+
<ArticleTocSidebar
|
|
105306
|
+
category="Development"
|
|
105307
|
+
title="Building Scalable Systems"
|
|
105308
|
+
description="A source-backed guide to patterns that help applications grow from prototype to production."
|
|
105309
|
+
authorName="Michael Zhang"
|
|
105310
|
+
authorImage="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105311
|
+
authorHref="#"
|
|
105312
|
+
publishDate="January 12, 2026"
|
|
105313
|
+
readTime="20 min read"
|
|
105314
|
+
heroImageSrc="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105315
|
+
heroImageAlt="Scalable architecture planning session"
|
|
105316
|
+
sections={[
|
|
105317
|
+
{ id: "overview", title: "Overview" },
|
|
105318
|
+
{ id: "implementation", title: "Implementation" },
|
|
105319
|
+
{ id: "conclusion", title: "Conclusion" },
|
|
105320
|
+
]}
|
|
105321
|
+
ctaTitle="Explore More Guides"
|
|
105322
|
+
ctaDescription="Read the next source-backed article in this series."
|
|
105323
|
+
ctaActions={[{ label: "View Guides", href: "#", variant: "default" }]}
|
|
105324
|
+
markdownString={"## Overview\\nSource-backed introduction.\\n\\n## Implementation\\nDetailed article body.\\n\\n## Conclusion\\nPractical closing takeaway."}
|
|
105325
|
+
/>
|
|
105326
|
+
`.trim(),
|
|
105327
|
+
importantUsageNotes: "Use for technical tutorials, guides, and long-form articles that need sticky table-of-contents navigation. sections[].id must map to real headings in markdownString when tracking is enabled. heroImageSrc and authorImage must be absolute image URLs only. Do not use placeholder media variables, relative /images paths, logos, favicons, or video URLs.",
|
|
105328
|
+
usageRequirements: {
|
|
105329
|
+
requiredProps: [
|
|
105330
|
+
"title",
|
|
105331
|
+
"description",
|
|
105332
|
+
"sections",
|
|
105333
|
+
"heroImageSrc",
|
|
105334
|
+
"heroImageAlt",
|
|
105335
|
+
"markdownString"
|
|
105336
|
+
],
|
|
105337
|
+
propConstraints: {
|
|
105338
|
+
title: { required: true, maxLength: 90 },
|
|
105339
|
+
description: { required: true, maxLength: 240 },
|
|
105340
|
+
category: { required: false, maxLength: 40 },
|
|
105341
|
+
authorName: {
|
|
105342
|
+
required: false,
|
|
105343
|
+
maxLength: 80,
|
|
105344
|
+
note: "Must identify a real article author or organization byline when supplied."
|
|
105345
|
+
},
|
|
105346
|
+
publishDate: { required: false, maxLength: 40 },
|
|
105347
|
+
readTime: { required: false, maxLength: 30 },
|
|
105348
|
+
sections: { required: true, minItems: 3, maxItems: 8 },
|
|
105349
|
+
"sections[].id": {
|
|
105350
|
+
required: true,
|
|
105351
|
+
note: "Must match a heading id in markdownString."
|
|
105352
|
+
},
|
|
105353
|
+
"sections[].title": { required: true, maxLength: 60 },
|
|
105354
|
+
heroImageSrc: {
|
|
105355
|
+
required: true,
|
|
105356
|
+
note: "Absolute article hero image URL. IMAGE MEDIA ONLY."
|
|
105357
|
+
},
|
|
105358
|
+
heroImageAlt: { required: true, maxLength: 140 },
|
|
105359
|
+
authorImage: {
|
|
105360
|
+
required: false,
|
|
105361
|
+
note: "Absolute author/profile image URL. IMAGE MEDIA ONLY."
|
|
105362
|
+
},
|
|
105363
|
+
ctaActions: {
|
|
105364
|
+
required: false,
|
|
105365
|
+
maxItems: 2,
|
|
105366
|
+
note: "Use ActionConfig objects; do not use ctaText, ctaHref, or ctaButtonText."
|
|
105367
|
+
},
|
|
105368
|
+
markdownString: {
|
|
105369
|
+
required: true,
|
|
105370
|
+
maxLength: 12e3,
|
|
105371
|
+
note: "Long-form markdown article body."
|
|
105372
|
+
}
|
|
105373
|
+
},
|
|
105374
|
+
mediaSlots: {
|
|
105375
|
+
heroImageSrc: imageSlot(
|
|
105376
|
+
"heroImageSrc",
|
|
105377
|
+
"Primary article hero image.",
|
|
105378
|
+
["hero", "feature"],
|
|
105379
|
+
"xlarge",
|
|
105380
|
+
true,
|
|
105381
|
+
"16:9"
|
|
105382
|
+
),
|
|
105383
|
+
authorImage: imageSlot(
|
|
105384
|
+
"authorImage",
|
|
105385
|
+
"Author avatar or portrait image.",
|
|
105386
|
+
["profile", "avatar"],
|
|
105387
|
+
"small",
|
|
105388
|
+
false,
|
|
105389
|
+
"1:1"
|
|
105390
|
+
)
|
|
105391
|
+
},
|
|
105392
|
+
requiresSiteCapabilities: articleCapabilities(
|
|
105393
|
+
"blog_posts",
|
|
105394
|
+
"team_members",
|
|
105395
|
+
"media_library"
|
|
105396
|
+
),
|
|
105397
|
+
notes: [ARTICLE_SOURCE_NOTE, ARTICLE_MEDIA_NOTE, ARTICLE_TRACKING_NOTE]
|
|
105398
|
+
},
|
|
105399
|
+
exampleProps: {
|
|
105400
|
+
category: "Development",
|
|
105401
|
+
title: "Building Scalable Systems",
|
|
105402
|
+
description: "A source-backed guide to patterns that help applications grow from prototype to production.",
|
|
105403
|
+
authorName: "Michael Zhang",
|
|
105404
|
+
authorImage: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105405
|
+
authorHref: "#",
|
|
105406
|
+
publishDate: "January 12, 2026",
|
|
105407
|
+
readTime: "20 min read",
|
|
105408
|
+
heroImageSrc: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105409
|
+
heroImageAlt: "Scalable architecture planning session",
|
|
105410
|
+
sections: [
|
|
105411
|
+
{ id: "overview", title: "Overview" },
|
|
105412
|
+
{ id: "implementation", title: "Implementation" },
|
|
105413
|
+
{ id: "conclusion", title: "Conclusion" }
|
|
105414
|
+
],
|
|
105415
|
+
ctaTitle: "Explore More Guides",
|
|
105416
|
+
ctaDescription: "Read the next source-backed article in this series.",
|
|
105417
|
+
ctaActions: [{ label: "View Guides", href: "#", variant: "default" }],
|
|
105418
|
+
markdownString: ARTICLE_EXAMPLE_MARKDOWN
|
|
105419
|
+
}
|
|
105420
|
+
},
|
|
105421
|
+
"article-breadcrumb-social": {
|
|
105422
|
+
exampleUsage: `
|
|
105423
|
+
<ArticleBreadcrumbSocial
|
|
105424
|
+
breadcrumbs={[
|
|
105425
|
+
{ label: "Blog", href: "#" },
|
|
105426
|
+
{ label: "Technology", href: "#" },
|
|
105427
|
+
]}
|
|
105428
|
+
currentPage="Building Scalable Web Applications"
|
|
105429
|
+
title="Building Scalable Web Applications in 2026"
|
|
105430
|
+
description="A source-backed article with breadcrumb navigation, sharing controls, and a tracked table of contents."
|
|
105431
|
+
author={{
|
|
105432
|
+
name: "Sarah Mitchell",
|
|
105433
|
+
image: "${ARTICLE_EXAMPLE_IMAGE_URL}",
|
|
105434
|
+
role: "Senior Software Architect",
|
|
105435
|
+
}}
|
|
105436
|
+
publishDate="January 15, 2026"
|
|
105437
|
+
readTime="12 min read"
|
|
105438
|
+
heroImageSrc="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105439
|
+
heroImageAlt="Modern web application architecture"
|
|
105440
|
+
sections={[
|
|
105441
|
+
{ id: "overview", title: "Overview" },
|
|
105442
|
+
{ id: "implementation", title: "Implementation" },
|
|
105443
|
+
{ id: "conclusion", title: "Conclusion" },
|
|
105444
|
+
]}
|
|
105445
|
+
markdownString={"## Overview\\nSource-backed introduction.\\n\\n## Implementation\\nDetailed article body.\\n\\n## Conclusion\\nPractical closing takeaway."}
|
|
105446
|
+
/>
|
|
105447
|
+
`.trim(),
|
|
105448
|
+
importantUsageNotes: "Use for article pages that need breadcrumb navigation, social sharing controls, a sticky TOC, and optional back-to-top behavior. The author prop is an object with name, image, and role; do not use unsupported authorName, authorRole, or shareUrls props. heroImageSrc and author.image must be absolute image URLs only, never placeholder variables, relative /images paths, logos, favicons, or video URLs.",
|
|
105449
|
+
usageRequirements: {
|
|
105450
|
+
requiredProps: [
|
|
105451
|
+
"breadcrumbs",
|
|
105452
|
+
"currentPage",
|
|
105453
|
+
"title",
|
|
105454
|
+
"author",
|
|
105455
|
+
"heroImageSrc",
|
|
105456
|
+
"heroImageAlt",
|
|
105457
|
+
"sections",
|
|
105458
|
+
"markdownString"
|
|
105459
|
+
],
|
|
105460
|
+
propConstraints: {
|
|
105461
|
+
breadcrumbs: { required: true, minItems: 1, maxItems: 4 },
|
|
105462
|
+
"breadcrumbs[].label": { required: true, maxLength: 40 },
|
|
105463
|
+
"breadcrumbs[].href": { required: true },
|
|
105464
|
+
currentPage: { required: true, maxLength: 80 },
|
|
105465
|
+
title: { required: true, maxLength: 100 },
|
|
105466
|
+
description: { required: false, maxLength: 240 },
|
|
105467
|
+
author: { required: true, note: "Source-backed article author object." },
|
|
105468
|
+
"author.name": { required: true, maxLength: 80 },
|
|
105469
|
+
"author.role": { required: false, maxLength: 80 },
|
|
105470
|
+
"author.image": {
|
|
105471
|
+
required: false,
|
|
105472
|
+
note: "Absolute author/profile image URL. IMAGE MEDIA ONLY."
|
|
105473
|
+
},
|
|
105474
|
+
publishDate: { required: true, maxLength: 40 },
|
|
105475
|
+
readTime: { required: false, maxLength: 30 },
|
|
105476
|
+
sections: { required: true, minItems: 3, maxItems: 8 },
|
|
105477
|
+
"sections[].id": {
|
|
105478
|
+
required: true,
|
|
105479
|
+
note: "Must match a heading id in markdownString."
|
|
105480
|
+
},
|
|
105481
|
+
"sections[].title": { required: true, maxLength: 60 },
|
|
105482
|
+
heroImageSrc: {
|
|
105483
|
+
required: true,
|
|
105484
|
+
note: "Absolute article hero image URL. IMAGE MEDIA ONLY."
|
|
105485
|
+
},
|
|
105486
|
+
heroImageAlt: { required: true, maxLength: 140 },
|
|
105487
|
+
markdownString: {
|
|
105488
|
+
required: true,
|
|
105489
|
+
maxLength: 12e3,
|
|
105490
|
+
note: "Long-form markdown article body."
|
|
105491
|
+
}
|
|
105492
|
+
},
|
|
105493
|
+
mediaSlots: {
|
|
105494
|
+
heroImageSrc: imageSlot(
|
|
105495
|
+
"heroImageSrc",
|
|
105496
|
+
"Primary article hero image.",
|
|
105497
|
+
["hero", "feature"],
|
|
105498
|
+
"xlarge",
|
|
105499
|
+
true,
|
|
105500
|
+
"16:9"
|
|
105501
|
+
),
|
|
105502
|
+
"author.image": imageSlot(
|
|
105503
|
+
"author.image",
|
|
105504
|
+
"Author avatar or portrait image.",
|
|
105505
|
+
["profile", "avatar"],
|
|
105506
|
+
"small",
|
|
105507
|
+
false,
|
|
105508
|
+
"1:1"
|
|
105509
|
+
)
|
|
105510
|
+
},
|
|
105511
|
+
requiresSiteCapabilities: articleCapabilities(
|
|
105512
|
+
"blog_posts",
|
|
105513
|
+
"team_members",
|
|
105514
|
+
"media_library"
|
|
105515
|
+
),
|
|
105516
|
+
notes: [
|
|
105517
|
+
ARTICLE_SOURCE_NOTE,
|
|
105518
|
+
ARTICLE_MEDIA_NOTE,
|
|
105519
|
+
ARTICLE_TRACKING_NOTE,
|
|
105520
|
+
"Do not use unsupported shareUrls, authorName, or authorRole props with this block."
|
|
105521
|
+
]
|
|
105522
|
+
},
|
|
105523
|
+
exampleProps: {
|
|
105524
|
+
breadcrumbs: [
|
|
105525
|
+
{ label: "Blog", href: "#" },
|
|
105526
|
+
{ label: "Technology", href: "#" }
|
|
105527
|
+
],
|
|
105528
|
+
currentPage: "Building Scalable Web Applications",
|
|
105529
|
+
title: "Building Scalable Web Applications in 2026",
|
|
105530
|
+
description: "A source-backed article with breadcrumb navigation, sharing controls, and a tracked table of contents.",
|
|
105531
|
+
author: {
|
|
105532
|
+
name: "Sarah Mitchell",
|
|
105533
|
+
image: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105534
|
+
role: "Senior Software Architect"
|
|
105535
|
+
},
|
|
105536
|
+
publishDate: "January 15, 2026",
|
|
105537
|
+
readTime: "12 min read",
|
|
105538
|
+
heroImageSrc: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105539
|
+
heroImageAlt: "Modern web application architecture",
|
|
105540
|
+
sections: [
|
|
105541
|
+
{ id: "overview", title: "Overview" },
|
|
105542
|
+
{ id: "implementation", title: "Implementation" },
|
|
105543
|
+
{ id: "conclusion", title: "Conclusion" }
|
|
105544
|
+
],
|
|
105545
|
+
enableTocTracking: true,
|
|
105546
|
+
enableBackToTop: true,
|
|
105547
|
+
markdownString: ARTICLE_EXAMPLE_MARKDOWN
|
|
105548
|
+
}
|
|
105549
|
+
},
|
|
105550
|
+
"article-compact-toc": {
|
|
105551
|
+
exampleUsage: `
|
|
105552
|
+
<ArticleCompactToc
|
|
105553
|
+
breadcrumbs={[
|
|
105554
|
+
{ label: "Research", href: "#" },
|
|
105555
|
+
{ label: "Studies", href: "#" },
|
|
105556
|
+
]}
|
|
105557
|
+
currentPage="User Behavior Analysis"
|
|
105558
|
+
title="Understanding User Behavior in Modern Web Applications"
|
|
105559
|
+
authorName="Dr. Jennifer Park"
|
|
105560
|
+
authorHref="#"
|
|
105561
|
+
publishDate="January 22, 2026"
|
|
105562
|
+
readTime="8 min read"
|
|
105563
|
+
heroImageSrc="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105564
|
+
heroImageAlt="User behavior analytics workspace"
|
|
105565
|
+
sections={[
|
|
105566
|
+
{ id: "overview", title: "Overview" },
|
|
105567
|
+
{ id: "implementation", title: "Implementation" },
|
|
105568
|
+
{ id: "conclusion", title: "Conclusion" },
|
|
105569
|
+
]}
|
|
105570
|
+
markdownString={"## Overview\\nSource-backed introduction.\\n\\n## Implementation\\nDetailed article body.\\n\\n## Conclusion\\nPractical closing takeaway."}
|
|
105571
|
+
/>
|
|
105572
|
+
`.trim(),
|
|
105573
|
+
importantUsageNotes: "Use for articles that need a compact, mobile-friendly table of contents and a focused reading column. sections[].id must map to real headings in markdownString when tracking is enabled. heroImageSrc must be an absolute image URL only, never a placeholder variable, relative /images path, logo, favicon, or video URL.",
|
|
105574
|
+
usageRequirements: {
|
|
105575
|
+
requiredProps: [
|
|
105576
|
+
"title",
|
|
105577
|
+
"authorName",
|
|
105578
|
+
"publishDate",
|
|
105579
|
+
"heroImageSrc",
|
|
105580
|
+
"heroImageAlt",
|
|
105581
|
+
"sections",
|
|
105582
|
+
"markdownString"
|
|
105583
|
+
],
|
|
105584
|
+
propConstraints: {
|
|
105585
|
+
breadcrumbs: { required: false, minItems: 1, maxItems: 4 },
|
|
105586
|
+
currentPage: { required: false, maxLength: 80 },
|
|
105587
|
+
title: { required: true, maxLength: 100 },
|
|
105588
|
+
description: { required: false, maxLength: 220 },
|
|
105589
|
+
authorName: {
|
|
105590
|
+
required: true,
|
|
105591
|
+
maxLength: 80,
|
|
105592
|
+
note: "Must identify a real article author or organization byline."
|
|
105593
|
+
},
|
|
105594
|
+
publishDate: { required: true, maxLength: 40 },
|
|
105595
|
+
readTime: { required: false, maxLength: 30 },
|
|
105596
|
+
sections: { required: true, minItems: 3, maxItems: 8 },
|
|
105597
|
+
"sections[].id": {
|
|
105598
|
+
required: true,
|
|
105599
|
+
note: "Must match a heading id in markdownString."
|
|
105600
|
+
},
|
|
105601
|
+
"sections[].title": { required: true, maxLength: 60 },
|
|
105602
|
+
heroImageSrc: {
|
|
105603
|
+
required: true,
|
|
105604
|
+
note: "Absolute article hero image URL. IMAGE MEDIA ONLY."
|
|
105605
|
+
},
|
|
105606
|
+
heroImageAlt: { required: true, maxLength: 140 },
|
|
105607
|
+
markdownString: {
|
|
105608
|
+
required: true,
|
|
105609
|
+
maxLength: 12e3,
|
|
105610
|
+
note: "Long-form markdown article body."
|
|
105611
|
+
}
|
|
105612
|
+
},
|
|
105613
|
+
mediaSlots: {
|
|
105614
|
+
heroImageSrc: imageSlot(
|
|
105615
|
+
"heroImageSrc",
|
|
105616
|
+
"Primary article hero image.",
|
|
105617
|
+
["hero", "feature"],
|
|
105618
|
+
"xlarge",
|
|
105619
|
+
true,
|
|
105620
|
+
"16:9"
|
|
105621
|
+
)
|
|
105622
|
+
},
|
|
105623
|
+
requiresSiteCapabilities: articleCapabilities(
|
|
105624
|
+
"blog_posts",
|
|
105625
|
+
"team_members",
|
|
105626
|
+
"media_library"
|
|
105627
|
+
),
|
|
105628
|
+
notes: [ARTICLE_SOURCE_NOTE, ARTICLE_MEDIA_NOTE, ARTICLE_TRACKING_NOTE]
|
|
105629
|
+
},
|
|
105630
|
+
exampleProps: {
|
|
105631
|
+
breadcrumbs: [
|
|
105632
|
+
{ label: "Research", href: "#" },
|
|
105633
|
+
{ label: "Studies", href: "#" }
|
|
105634
|
+
],
|
|
105635
|
+
currentPage: "User Behavior Analysis",
|
|
105636
|
+
title: "Understanding User Behavior in Modern Web Applications",
|
|
105637
|
+
authorName: "Dr. Jennifer Park",
|
|
105638
|
+
authorHref: "#",
|
|
105639
|
+
publishDate: "January 22, 2026",
|
|
105640
|
+
readTime: "8 min read",
|
|
105641
|
+
heroImageSrc: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105642
|
+
heroImageAlt: "User behavior analytics workspace",
|
|
105643
|
+
sections: [
|
|
105644
|
+
{ id: "overview", title: "Overview" },
|
|
105645
|
+
{ id: "implementation", title: "Implementation" },
|
|
105646
|
+
{ id: "conclusion", title: "Conclusion" }
|
|
105647
|
+
],
|
|
105648
|
+
enableTocTracking: true,
|
|
105649
|
+
markdownString: ARTICLE_EXAMPLE_MARKDOWN
|
|
105650
|
+
}
|
|
105651
|
+
},
|
|
105652
|
+
"article-chapters-author": {
|
|
105653
|
+
exampleUsage: `
|
|
105654
|
+
<ArticleChaptersAuthor
|
|
105655
|
+
breadcrumbs={[
|
|
105656
|
+
{ label: "Resources", href: "#" },
|
|
105657
|
+
{ label: "Guides", href: "#" },
|
|
105658
|
+
]}
|
|
105659
|
+
currentPage="Design Patterns"
|
|
105660
|
+
title="The Complete Guide to Design Patterns"
|
|
105661
|
+
subtitle="A source-backed guide to patterns that power modern software architecture"
|
|
105662
|
+
heroImageSrc="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105663
|
+
heroImageAlt="Software architecture planning workspace"
|
|
105664
|
+
chapters={[
|
|
105665
|
+
{ id: "overview", number: 1, title: "Overview" },
|
|
105666
|
+
{ id: "implementation", number: 2, title: "Implementation" },
|
|
105667
|
+
{ id: "conclusion", number: 3, title: "Conclusion" },
|
|
105668
|
+
]}
|
|
105669
|
+
author={{
|
|
105670
|
+
name: "Dr. Marcus Chen",
|
|
105671
|
+
role: "Principal Engineer",
|
|
105672
|
+
image: "${ARTICLE_EXAMPLE_IMAGE_URL}",
|
|
105673
|
+
bio: "Marcus writes source-backed guides on software architecture and distributed systems.",
|
|
105674
|
+
socialLinks: { linkedin: "https://linkedin.com" },
|
|
105675
|
+
}}
|
|
105676
|
+
conclusionTitle="Continue Learning"
|
|
105677
|
+
conclusionDescription="Read the next guide in this source-backed series."
|
|
105678
|
+
conclusionActions={[
|
|
105679
|
+
{ label: "View Guides", href: "#", variant: "default" },
|
|
105680
|
+
{ label: "Download Notes", href: "#", variant: "outline" },
|
|
105681
|
+
]}
|
|
105682
|
+
markdownString={"## Overview\\nSource-backed introduction.\\n\\n## Implementation\\nDetailed article body.\\n\\n## Conclusion\\nPractical closing takeaway."}
|
|
105683
|
+
/>
|
|
105684
|
+
`.trim(),
|
|
105685
|
+
importantUsageNotes: "Use for comprehensive guide-style articles organized into numbered chapters with an author bio and conclusion CTA. chapters[].id must map to real headings in markdownString when tracking is enabled. heroImageSrc and author.image must be absolute image URLs only, never placeholder variables, relative /images paths, logos, favicons, or video URLs. Author identity, bio, and social links must be source-backed.",
|
|
105686
|
+
usageRequirements: {
|
|
105687
|
+
requiredProps: [
|
|
105688
|
+
"title",
|
|
105689
|
+
"subtitle",
|
|
105690
|
+
"chapters",
|
|
105691
|
+
"author",
|
|
105692
|
+
"heroImageSrc",
|
|
105693
|
+
"heroImageAlt",
|
|
105694
|
+
"markdownString"
|
|
105695
|
+
],
|
|
105696
|
+
propConstraints: {
|
|
105697
|
+
breadcrumbs: { required: false, minItems: 1, maxItems: 4 },
|
|
105698
|
+
currentPage: { required: false, maxLength: 80 },
|
|
105699
|
+
title: { required: true, maxLength: 100 },
|
|
105700
|
+
subtitle: { required: true, maxLength: 180 },
|
|
105701
|
+
chapters: { required: true, minItems: 3, maxItems: 7 },
|
|
105702
|
+
"chapters[].id": {
|
|
105703
|
+
required: true,
|
|
105704
|
+
note: "Must match a heading id in markdownString."
|
|
105705
|
+
},
|
|
105706
|
+
"chapters[].number": { required: true },
|
|
105707
|
+
"chapters[].title": { required: true, maxLength: 60 },
|
|
105708
|
+
author: {
|
|
105709
|
+
required: true,
|
|
105710
|
+
note: "Source-backed author bio object."
|
|
105711
|
+
},
|
|
105712
|
+
"author.name": { required: true, maxLength: 80 },
|
|
105713
|
+
"author.role": { required: false, maxLength: 80 },
|
|
105714
|
+
"author.bio": { required: false, maxLength: 320 },
|
|
105715
|
+
"author.image": {
|
|
105716
|
+
required: false,
|
|
105717
|
+
note: "Absolute author/profile image URL. IMAGE MEDIA ONLY."
|
|
105718
|
+
},
|
|
105719
|
+
heroImageSrc: {
|
|
105720
|
+
required: true,
|
|
105721
|
+
note: "Absolute article hero image URL. IMAGE MEDIA ONLY."
|
|
105722
|
+
},
|
|
105723
|
+
heroImageAlt: { required: true, maxLength: 140 },
|
|
105724
|
+
conclusionActions: {
|
|
105725
|
+
required: false,
|
|
105726
|
+
maxItems: 2,
|
|
105727
|
+
note: "Use ActionConfig objects with label, href, and variant."
|
|
105728
|
+
},
|
|
105729
|
+
markdownString: {
|
|
105730
|
+
required: true,
|
|
105731
|
+
maxLength: 14e3,
|
|
105732
|
+
note: "Long-form markdown article body."
|
|
105733
|
+
}
|
|
105734
|
+
},
|
|
105735
|
+
mediaSlots: {
|
|
105736
|
+
heroImageSrc: imageSlot(
|
|
105737
|
+
"heroImageSrc",
|
|
105738
|
+
"Primary article hero image.",
|
|
105739
|
+
["hero", "feature"],
|
|
105740
|
+
"xlarge",
|
|
105741
|
+
true,
|
|
105742
|
+
"16:9"
|
|
105743
|
+
),
|
|
105744
|
+
"author.image": imageSlot(
|
|
105745
|
+
"author.image",
|
|
105746
|
+
"Author avatar or portrait image.",
|
|
105747
|
+
["profile", "avatar"],
|
|
105748
|
+
"small",
|
|
105749
|
+
false,
|
|
105750
|
+
"1:1"
|
|
105751
|
+
)
|
|
105752
|
+
},
|
|
105753
|
+
requiresSiteCapabilities: articleCapabilities(
|
|
105754
|
+
"blog_posts",
|
|
105755
|
+
"team_members",
|
|
105756
|
+
"media_library"
|
|
105757
|
+
),
|
|
105758
|
+
notes: [ARTICLE_SOURCE_NOTE, ARTICLE_MEDIA_NOTE, ARTICLE_TRACKING_NOTE]
|
|
105759
|
+
},
|
|
105760
|
+
exampleProps: {
|
|
105761
|
+
breadcrumbs: [
|
|
105762
|
+
{ label: "Resources", href: "#" },
|
|
105763
|
+
{ label: "Guides", href: "#" }
|
|
105764
|
+
],
|
|
105765
|
+
currentPage: "Design Patterns",
|
|
105766
|
+
title: "The Complete Guide to Design Patterns",
|
|
105767
|
+
subtitle: "A source-backed guide to patterns that power modern software architecture",
|
|
105768
|
+
heroImageSrc: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105769
|
+
heroImageAlt: "Software architecture planning workspace",
|
|
105770
|
+
chapters: [
|
|
105771
|
+
{ id: "overview", number: 1, title: "Overview" },
|
|
105772
|
+
{ id: "implementation", number: 2, title: "Implementation" },
|
|
105773
|
+
{ id: "conclusion", number: 3, title: "Conclusion" }
|
|
105774
|
+
],
|
|
105775
|
+
author: {
|
|
105776
|
+
name: "Dr. Marcus Chen",
|
|
105777
|
+
role: "Principal Engineer",
|
|
105778
|
+
image: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105779
|
+
bio: "Marcus writes source-backed guides on software architecture and distributed systems.",
|
|
105780
|
+
socialLinks: { linkedin: "https://linkedin.com" }
|
|
105781
|
+
},
|
|
105782
|
+
conclusionTitle: "Continue Learning",
|
|
105783
|
+
conclusionDescription: "Read the next guide in this source-backed series.",
|
|
105784
|
+
conclusionActions: [
|
|
105785
|
+
{ label: "View Guides", href: "#", variant: "default" },
|
|
105786
|
+
{ label: "Download Notes", href: "#", variant: "outline" }
|
|
105787
|
+
],
|
|
105788
|
+
enableChapterTracking: true,
|
|
105789
|
+
markdownString: ARTICLE_EXAMPLE_MARKDOWN
|
|
105790
|
+
}
|
|
105791
|
+
},
|
|
105792
|
+
"article-split-animated": {
|
|
105793
|
+
exampleUsage: `
|
|
105794
|
+
<ArticleSplitAnimated
|
|
105795
|
+
image="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105796
|
+
imageAlt="AI-assisted development workflow"
|
|
105797
|
+
category="Artificial Intelligence"
|
|
105798
|
+
categoryHref="#"
|
|
105799
|
+
title="The Future of AI-Assisted Development"
|
|
105800
|
+
description="A source-backed featured article about how AI is changing software delivery workflows."
|
|
105801
|
+
authorName="Dr. Raj Patel"
|
|
105802
|
+
authorImage="${ARTICLE_EXAMPLE_IMAGE_URL}"
|
|
105803
|
+
authorRole="AI Research Lead"
|
|
105804
|
+
authorHref="#"
|
|
105805
|
+
publishDate="January 25, 2026"
|
|
105806
|
+
readTime="15 min read"
|
|
105807
|
+
ctaActions={[{ label: "Read Full Article", href: "#", variant: "default", size: "lg" }]}
|
|
105808
|
+
/>
|
|
105809
|
+
`.trim(),
|
|
105810
|
+
importantUsageNotes: "Use for a featured article or hero post preview, not as a full article body. image and authorImage must be absolute image URLs only, never placeholder variables, relative /images paths, logos, favicons, or video URLs. Use ctaActions ActionConfig objects; this component does not accept ctaText or ctaHref props.",
|
|
105811
|
+
usageRequirements: {
|
|
105812
|
+
requiredProps: ["title", "description", "image", "imageAlt", "ctaActions"],
|
|
105813
|
+
propConstraints: {
|
|
105814
|
+
title: { required: true, maxLength: 90 },
|
|
105815
|
+
description: { required: true, maxLength: 220 },
|
|
105816
|
+
image: {
|
|
105817
|
+
required: true,
|
|
105818
|
+
note: "Absolute featured article image URL. IMAGE MEDIA ONLY."
|
|
105819
|
+
},
|
|
105820
|
+
imageAlt: { required: true, maxLength: 140 },
|
|
105821
|
+
category: { required: false, maxLength: 50 },
|
|
105822
|
+
authorName: {
|
|
105823
|
+
required: false,
|
|
105824
|
+
maxLength: 80,
|
|
105825
|
+
note: "Must identify a real article author or organization byline when supplied."
|
|
105826
|
+
},
|
|
105827
|
+
authorImage: {
|
|
105828
|
+
required: false,
|
|
105829
|
+
note: "Absolute author/profile image URL. IMAGE MEDIA ONLY."
|
|
105830
|
+
},
|
|
105831
|
+
authorRole: { required: false, maxLength: 80 },
|
|
105832
|
+
publishDate: { required: false, maxLength: 40 },
|
|
105833
|
+
readTime: { required: false, maxLength: 30 },
|
|
105834
|
+
ctaActions: {
|
|
105835
|
+
required: true,
|
|
105836
|
+
minItems: 1,
|
|
105837
|
+
maxItems: 2,
|
|
105838
|
+
note: "Use ActionConfig objects; do not use ctaText or ctaHref."
|
|
105839
|
+
}
|
|
105840
|
+
},
|
|
105841
|
+
mediaSlots: {
|
|
105842
|
+
image: imageSlot(
|
|
105843
|
+
"image",
|
|
105844
|
+
"Featured article image.",
|
|
105845
|
+
["hero", "feature"],
|
|
105846
|
+
"xlarge",
|
|
105847
|
+
true,
|
|
105848
|
+
"16:9"
|
|
105849
|
+
),
|
|
105850
|
+
authorImage: imageSlot(
|
|
105851
|
+
"authorImage",
|
|
105852
|
+
"Author avatar or portrait image.",
|
|
105853
|
+
["profile", "avatar"],
|
|
105854
|
+
"small",
|
|
105855
|
+
false,
|
|
105856
|
+
"1:1"
|
|
105857
|
+
)
|
|
105858
|
+
},
|
|
105859
|
+
requiresSiteCapabilities: articleCapabilities(
|
|
105860
|
+
"blog_posts",
|
|
105861
|
+
"team_members",
|
|
105862
|
+
"media_library"
|
|
105863
|
+
),
|
|
105864
|
+
notes: [
|
|
105865
|
+
ARTICLE_SOURCE_NOTE,
|
|
105866
|
+
ARTICLE_MEDIA_NOTE,
|
|
105867
|
+
"Use ctaActions instead of unsupported ctaText or ctaHref props."
|
|
105868
|
+
]
|
|
105869
|
+
},
|
|
105870
|
+
exampleProps: {
|
|
105871
|
+
image: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105872
|
+
imageAlt: "AI-assisted development workflow",
|
|
105873
|
+
category: "Artificial Intelligence",
|
|
105874
|
+
categoryHref: "#",
|
|
105875
|
+
title: "The Future of AI-Assisted Development",
|
|
105876
|
+
description: "A source-backed featured article about how AI is changing software delivery workflows.",
|
|
105877
|
+
authorName: "Dr. Raj Patel",
|
|
105878
|
+
authorImage: ARTICLE_EXAMPLE_IMAGE_URL,
|
|
105879
|
+
authorRole: "AI Research Lead",
|
|
105880
|
+
authorHref: "#",
|
|
105881
|
+
publishDate: "January 25, 2026",
|
|
105882
|
+
readTime: "15 min read",
|
|
105883
|
+
ctaActions: [
|
|
105884
|
+
{ label: "Read Full Article", href: "#", variant: "default", size: "lg" }
|
|
105885
|
+
],
|
|
105886
|
+
enableAnimations: true
|
|
105887
|
+
}
|
|
105888
|
+
}
|
|
105889
|
+
};
|
|
105083
105890
|
var BLOCK_REGISTRY = {
|
|
105084
105891
|
"alternating-blocks": {
|
|
105085
105892
|
id: "alternating-blocks",
|
|
@@ -111638,18 +112445,7 @@ var BLOCK_REGISTRY = {
|
|
|
111638
112445
|
category: "article",
|
|
111639
112446
|
component: ArticleHeroProseComponent,
|
|
111640
112447
|
props: "ArticleHeroProseProps",
|
|
111641
|
-
|
|
111642
|
-
<ArticleHeroProse
|
|
111643
|
-
post={{
|
|
111644
|
-
title: "Designing websites faster with Opensite AI",
|
|
111645
|
-
authorName: "John Doe",
|
|
111646
|
-
image: "/images/hero.jpg",
|
|
111647
|
-
pubDate: new Date(),
|
|
111648
|
-
description: "A step-by-step guide to building modern websites.",
|
|
111649
|
-
authorImage: "/images/author.jpg"
|
|
111650
|
-
}}
|
|
111651
|
-
/>
|
|
111652
|
-
`.trim()
|
|
112448
|
+
...ARTICLE_BLOCK_CONTRACTS["article-hero-prose"]
|
|
111653
112449
|
},
|
|
111654
112450
|
"article-sidebar-sticky": {
|
|
111655
112451
|
id: "article-sidebar-sticky",
|
|
@@ -111669,16 +112465,7 @@ var BLOCK_REGISTRY = {
|
|
|
111669
112465
|
category: "article",
|
|
111670
112466
|
component: ArticleSidebarStickyComponent,
|
|
111671
112467
|
props: "ArticleSidebarStickyProps",
|
|
111672
|
-
|
|
111673
|
-
<ArticleSidebarSticky
|
|
111674
|
-
title="The Art of Modern Web Development"
|
|
111675
|
-
authorName="Sarah Johnson"
|
|
111676
|
-
authorImage="/images/author.jpg"
|
|
111677
|
-
publishDate="December 15, 2024"
|
|
111678
|
-
backHref="/blog"
|
|
111679
|
-
backText="Back to Blog"
|
|
111680
|
-
/>
|
|
111681
|
-
`.trim()
|
|
112468
|
+
...ARTICLE_BLOCK_CONTRACTS["article-sidebar-sticky"]
|
|
111682
112469
|
},
|
|
111683
112470
|
"article-toc-sidebar": {
|
|
111684
112471
|
id: "article-toc-sidebar",
|
|
@@ -111699,19 +112486,7 @@ var BLOCK_REGISTRY = {
|
|
|
111699
112486
|
category: "article",
|
|
111700
112487
|
component: ArticleTocSidebarComponent,
|
|
111701
112488
|
props: "ArticleTocSidebarProps",
|
|
111702
|
-
|
|
111703
|
-
<ArticleTocSidebar
|
|
111704
|
-
title="Building Scalable Applications"
|
|
111705
|
-
description="Learn modern architectural patterns."
|
|
111706
|
-
authorName="Alex Chen"
|
|
111707
|
-
sections={[
|
|
111708
|
-
{ id: "introduction", title: "Introduction" },
|
|
111709
|
-
{ id: "getting-started", title: "Getting Started" }
|
|
111710
|
-
]}
|
|
111711
|
-
ctaTitle="Ready to build?"
|
|
111712
|
-
ctaButtonText="Get Started"
|
|
111713
|
-
/>
|
|
111714
|
-
`.trim()
|
|
112489
|
+
...ARTICLE_BLOCK_CONTRACTS["article-toc-sidebar"]
|
|
111715
112490
|
},
|
|
111716
112491
|
"article-breadcrumb-social": {
|
|
111717
112492
|
id: "article-breadcrumb-social",
|
|
@@ -111731,20 +112506,7 @@ var BLOCK_REGISTRY = {
|
|
|
111731
112506
|
category: "article",
|
|
111732
112507
|
component: ArticleBreadcrumbSocialComponent,
|
|
111733
112508
|
props: "ArticleBreadcrumbSocialProps",
|
|
111734
|
-
|
|
111735
|
-
<ArticleBreadcrumbSocial
|
|
111736
|
-
title="Mastering Performance Optimization"
|
|
111737
|
-
authorName="Emily Rodriguez"
|
|
111738
|
-
authorRole="Senior Engineer"
|
|
111739
|
-
publishDate="January 10, 2025"
|
|
111740
|
-
readTime="15 min read"
|
|
111741
|
-
breadcrumbs={[
|
|
111742
|
-
{ label: "Home", href: "/" },
|
|
111743
|
-
{ label: "Blog", href: "/blog" }
|
|
111744
|
-
]}
|
|
111745
|
-
shareUrls={{ twitter: "#", linkedin: "#" }}
|
|
111746
|
-
/>
|
|
111747
|
-
`.trim()
|
|
112509
|
+
...ARTICLE_BLOCK_CONTRACTS["article-breadcrumb-social"]
|
|
111748
112510
|
},
|
|
111749
112511
|
"article-compact-toc": {
|
|
111750
112512
|
id: "article-compact-toc",
|
|
@@ -111764,18 +112526,7 @@ var BLOCK_REGISTRY = {
|
|
|
111764
112526
|
category: "article",
|
|
111765
112527
|
component: ArticleCompactTocComponent,
|
|
111766
112528
|
props: "ArticleCompactTocProps",
|
|
111767
|
-
|
|
111768
|
-
<ArticleCompactToc
|
|
111769
|
-
title="Understanding User Behavior"
|
|
111770
|
-
authorName="Dr. Michael Chen"
|
|
111771
|
-
publishDate="January 12, 2025"
|
|
111772
|
-
readTime="18 min read"
|
|
111773
|
-
sections={[
|
|
111774
|
-
{ id: "introduction", title: "Introduction" },
|
|
111775
|
-
{ id: "methodology", title: "Methodology" }
|
|
111776
|
-
]}
|
|
111777
|
-
/>
|
|
111778
|
-
`.trim()
|
|
112529
|
+
...ARTICLE_BLOCK_CONTRACTS["article-compact-toc"]
|
|
111779
112530
|
},
|
|
111780
112531
|
"article-chapters-author": {
|
|
111781
112532
|
id: "article-chapters-author",
|
|
@@ -111796,22 +112547,7 @@ var BLOCK_REGISTRY = {
|
|
|
111796
112547
|
category: "article",
|
|
111797
112548
|
component: ArticleChaptersAuthorComponent,
|
|
111798
112549
|
props: "ArticleChaptersAuthorProps",
|
|
111799
|
-
|
|
111800
|
-
<ArticleChaptersAuthor
|
|
111801
|
-
title="A Comprehensive Guide to Design Patterns"
|
|
111802
|
-
subtitle="Master essential patterns every engineer should know"
|
|
111803
|
-
chapters={[
|
|
111804
|
-
{ id: "chapter-1", number: 1, title: "The Foundation" },
|
|
111805
|
-
{ id: "chapter-2", number: 2, title: "Building Blocks" }
|
|
111806
|
-
]}
|
|
111807
|
-
author={{
|
|
111808
|
-
name: "Jessica Williams",
|
|
111809
|
-
role: "Principal Engineer",
|
|
111810
|
-
image: "/images/author.jpg",
|
|
111811
|
-
bio: "15+ years of experience in software architecture."
|
|
111812
|
-
}}
|
|
111813
|
-
/>
|
|
111814
|
-
`.trim()
|
|
112550
|
+
...ARTICLE_BLOCK_CONTRACTS["article-chapters-author"]
|
|
111815
112551
|
},
|
|
111816
112552
|
"article-split-animated": {
|
|
111817
112553
|
id: "article-split-animated",
|
|
@@ -111831,18 +112567,7 @@ var BLOCK_REGISTRY = {
|
|
|
111831
112567
|
category: "article",
|
|
111832
112568
|
component: ArticleSplitAnimatedComponent,
|
|
111833
112569
|
props: "ArticleSplitAnimatedProps",
|
|
111834
|
-
|
|
111835
|
-
<ArticleSplitAnimated
|
|
111836
|
-
title="The Evolution of Design Systems"
|
|
111837
|
-
description="Explore how design systems have transformed..."
|
|
111838
|
-
image="/images/featured.jpg"
|
|
111839
|
-
authorName="David Park"
|
|
111840
|
-
authorRole="Design Lead"
|
|
111841
|
-
category="Design"
|
|
111842
|
-
ctaText="Read Full Article"
|
|
111843
|
-
ctaHref="/article/design-systems"
|
|
111844
|
-
/>
|
|
111845
|
-
`.trim()
|
|
112570
|
+
...ARTICLE_BLOCK_CONTRACTS["article-split-animated"]
|
|
111846
112571
|
},
|
|
111847
112572
|
// FAQ Components
|
|
111848
112573
|
"faq-simple-accordion": {
|