@burdenoff/website-sdk 2026.703.2 → 2026.709.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/components/electron-download.d.mts +32 -0
  2. package/dist/components/electron-download.d.ts +32 -0
  3. package/dist/components/electron-download.js +131 -0
  4. package/dist/components/electron-download.js.map +1 -0
  5. package/dist/components/electron-download.mjs +108 -0
  6. package/dist/components/electron-download.mjs.map +1 -0
  7. package/dist/components/launch-countdown.d.mts +15 -0
  8. package/dist/components/launch-countdown.d.ts +15 -0
  9. package/dist/components/launch-countdown.js +89 -0
  10. package/dist/components/launch-countdown.js.map +1 -0
  11. package/dist/components/launch-countdown.mjs +87 -0
  12. package/dist/components/launch-countdown.mjs.map +1 -0
  13. package/dist/components/problems-solved.d.mts +37 -0
  14. package/dist/components/problems-solved.d.ts +37 -0
  15. package/dist/components/problems-solved.js +157 -0
  16. package/dist/components/problems-solved.js.map +1 -0
  17. package/dist/components/problems-solved.mjs +135 -0
  18. package/dist/components/problems-solved.mjs.map +1 -0
  19. package/dist/components/website-switcher.d.mts +27 -0
  20. package/dist/components/website-switcher.d.ts +27 -0
  21. package/dist/components/website-switcher.js +168 -0
  22. package/dist/components/website-switcher.js.map +1 -0
  23. package/dist/components/website-switcher.mjs +146 -0
  24. package/dist/components/website-switcher.mjs.map +1 -0
  25. package/dist/content/index.d.mts +24 -1
  26. package/dist/content/index.d.ts +24 -1
  27. package/dist/content/index.js +459 -149
  28. package/dist/content/index.js.map +1 -1
  29. package/dist/content/index.mjs +378 -87
  30. package/dist/content/index.mjs.map +1 -1
  31. package/dist/index.d.mts +15 -2
  32. package/dist/index.d.ts +15 -2
  33. package/dist/index.js +817 -86
  34. package/dist/index.js.map +1 -1
  35. package/dist/index.mjs +812 -88
  36. package/dist/index.mjs.map +1 -1
  37. package/package.json +3 -1
@@ -1,6 +1,12 @@
1
- import { createContext, useState, useCallback, useEffect, useContext } from 'react';
1
+ import * as React from 'react';
2
+ import { createContext, useState, useCallback, useEffect, useContext, useMemo } from 'react';
2
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
4
  import { Helmet } from 'react-helmet-async';
5
+ import { History, Search, ChevronLeft, ChevronRight } from 'lucide-react';
6
+ import { Slot } from '@radix-ui/react-slot';
7
+ import { cva } from 'class-variance-authority';
8
+ import { clsx } from 'clsx';
9
+ import { twMerge } from 'tailwind-merge';
4
10
 
5
11
  var __defProp = Object.defineProperty;
6
12
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -1121,6 +1127,65 @@ function CaseStudyPage(props) {
1121
1127
  ] })
1122
1128
  ] });
1123
1129
  }
1130
+ function cn(...inputs) {
1131
+ return twMerge(clsx(inputs));
1132
+ }
1133
+ var buttonVariants = cva(
1134
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1135
+ {
1136
+ variants: {
1137
+ variant: {
1138
+ default: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
1139
+ destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
1140
+ outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
1141
+ secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
1142
+ ghost: "hover:bg-accent hover:text-accent-foreground",
1143
+ link: "text-primary underline-offset-4 hover:underline"
1144
+ },
1145
+ size: {
1146
+ default: "h-9 px-4 py-2",
1147
+ sm: "h-8 rounded-md px-3 text-xs",
1148
+ lg: "h-10 rounded-md px-8",
1149
+ icon: "h-9 w-9"
1150
+ }
1151
+ },
1152
+ defaultVariants: {
1153
+ variant: "default",
1154
+ size: "default"
1155
+ }
1156
+ }
1157
+ );
1158
+ var Button = React.forwardRef(
1159
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
1160
+ const Comp = asChild ? Slot : "button";
1161
+ return /* @__PURE__ */ jsx(
1162
+ Comp,
1163
+ {
1164
+ className: cn(buttonVariants({ variant, size, className })),
1165
+ ref,
1166
+ ...props
1167
+ }
1168
+ );
1169
+ }
1170
+ );
1171
+ Button.displayName = "Button";
1172
+ var Input = React.forwardRef(
1173
+ ({ className, type, ...props }, ref) => {
1174
+ return /* @__PURE__ */ jsx(
1175
+ "input",
1176
+ {
1177
+ type,
1178
+ className: cn(
1179
+ "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
1180
+ className
1181
+ ),
1182
+ ref,
1183
+ ...props
1184
+ }
1185
+ );
1186
+ }
1187
+ );
1188
+ Input.displayName = "Input";
1124
1189
  var CHANGELOG_TAG = "changelog";
1125
1190
  var CHANGELOG_LIST_QUERY = `
1126
1191
  query ChangelogList($productId: String!, $limit: Int, $offset: Int) {
@@ -1166,21 +1231,17 @@ function sortByDateDesc(a, b) {
1166
1231
  const db = new Date(b.publishedAt || b.lastUpdated || 0).getTime();
1167
1232
  return db - da;
1168
1233
  }
1169
- function ChangelogPage(props) {
1170
- const {
1171
- productName,
1172
- heroEyebrow = "What's new",
1173
- heroTitle = "Changelog",
1174
- heroSubtitle = "Platform updates, improvements, and announcements \u2014 newest first.",
1175
- ctaTitle,
1176
- ctaSubtitle,
1177
- ctaHref,
1178
- ctaLabel,
1179
- className = "",
1180
- seoTitle,
1181
- seoDescription,
1182
- seoKeywords
1183
- } = props;
1234
+ function normalize(value) {
1235
+ return value.toLowerCase().trim();
1236
+ }
1237
+ function paginate(items, page, pageSize) {
1238
+ const start = (page - 1) * pageSize;
1239
+ return items.slice(start, start + pageSize);
1240
+ }
1241
+ function parseEntryDate(date) {
1242
+ return new Date(date).getTime();
1243
+ }
1244
+ function useCmsChangelog() {
1184
1245
  const client = useWebSDK();
1185
1246
  const config = useWebSDKConfig();
1186
1247
  const { product } = useProduct();
@@ -1189,7 +1250,10 @@ function ChangelogPage(props) {
1189
1250
  const [loading, setLoading] = useState(true);
1190
1251
  const [error, setError] = useState(null);
1191
1252
  const fetchEntries = useCallback(async () => {
1192
- if (!resolvedProductId) return;
1253
+ if (!resolvedProductId) {
1254
+ setLoading(false);
1255
+ return;
1256
+ }
1193
1257
  setLoading(true);
1194
1258
  try {
1195
1259
  const listResult = await client.query(CHANGELOG_LIST_QUERY, {
@@ -1231,93 +1295,320 @@ function ChangelogPage(props) {
1231
1295
  useEffect(() => {
1232
1296
  fetchEntries();
1233
1297
  }, [fetchEntries]);
1298
+ return { entries, loading, error };
1299
+ }
1300
+ function CmsTimeline(props) {
1301
+ const { entries, loading, error } = props;
1302
+ if (loading) {
1303
+ return /* @__PURE__ */ jsx("div", { className: "max-w-3xl mx-auto space-y-12", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx(
1304
+ "div",
1305
+ {
1306
+ className: "rounded-2xl border border-border/40 bg-card overflow-hidden animate-pulse",
1307
+ children: /* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8 space-y-4", children: [
1308
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-muted rounded w-1/3" }),
1309
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-2/3" }),
1310
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded" }),
1311
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded w-5/6" })
1312
+ ] })
1313
+ },
1314
+ i
1315
+ )) });
1316
+ }
1317
+ if (error) {
1318
+ return /* @__PURE__ */ jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: error }) });
1319
+ }
1320
+ if (entries.length === 0) {
1321
+ return /* @__PURE__ */ jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "No changelog entries yet. Check back soon!" }) });
1322
+ }
1323
+ return /* @__PURE__ */ jsx("div", { className: "max-w-3xl mx-auto space-y-12", children: entries.map((entry) => /* @__PURE__ */ jsxs(
1324
+ "article",
1325
+ {
1326
+ id: entry.slug,
1327
+ className: "rounded-2xl border border-border/40 bg-card overflow-hidden scroll-mt-24",
1328
+ children: [
1329
+ entry.thumbnail && /* @__PURE__ */ jsx(
1330
+ "img",
1331
+ {
1332
+ src: entry.thumbnail,
1333
+ alt: "",
1334
+ width: 1024,
1335
+ height: 576,
1336
+ loading: "lazy",
1337
+ decoding: "async",
1338
+ className: "w-full aspect-video object-cover border-b border-border/40"
1339
+ }
1340
+ ),
1341
+ /* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8", children: [
1342
+ /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mb-2", children: [
1343
+ entry.publishedAt && /* @__PURE__ */ jsx("time", { dateTime: entry.publishedAt, children: formatDate(entry.publishedAt || entry.lastUpdated) }),
1344
+ entry.author && /* @__PURE__ */ jsxs(Fragment, { children: [
1345
+ " \xB7 ",
1346
+ entry.author
1347
+ ] })
1348
+ ] }),
1349
+ /* @__PURE__ */ jsx("h2", { className: "text-xl sm:text-2xl font-bold text-foreground mb-4", children: entry.title }),
1350
+ entry.content ? /* @__PURE__ */ jsx("div", { className: "prose prose-sm prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsx(
1351
+ ContentRenderer,
1352
+ {
1353
+ content: entry.content,
1354
+ format: entry.contentFormat
1355
+ }
1356
+ ) }) : entry.excerpt && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: entry.excerpt })
1357
+ ] })
1358
+ ]
1359
+ },
1360
+ entry.id
1361
+ )) });
1362
+ }
1363
+ function EntryContent({ content }) {
1364
+ if (typeof content === "string") {
1365
+ return /* @__PURE__ */ jsx("div", { className: "prose prose-sm prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsx(ContentRenderer, { content, format: "markdown" }) });
1366
+ }
1367
+ return /* @__PURE__ */ jsx("div", { className: "prose prose-sm max-w-none", children: content });
1368
+ }
1369
+ function EntriesTimeline(props) {
1370
+ const { entries, pageSize, productName } = props;
1371
+ const [query, setQuery] = useState("");
1372
+ const [selectedCategory, setSelectedCategory] = useState(null);
1373
+ const [page, setPage] = useState(1);
1374
+ const categories = useMemo(
1375
+ () => Array.from(new Set(entries.map((e) => e.category))).sort(),
1376
+ [entries]
1377
+ );
1378
+ const filtered = useMemo(() => {
1379
+ const normalized = normalize(query);
1380
+ return entries.filter((entry) => {
1381
+ if (selectedCategory && entry.category !== selectedCategory) {
1382
+ return false;
1383
+ }
1384
+ if (!normalized) return true;
1385
+ const haystack = [
1386
+ entry.title,
1387
+ entry.version,
1388
+ entry.category,
1389
+ ...entry.tags ?? [],
1390
+ typeof entry.content === "string" ? entry.content : ""
1391
+ ].join(" ").toLowerCase();
1392
+ return haystack.includes(normalized);
1393
+ }).sort((a, b) => parseEntryDate(b.date) - parseEntryDate(a.date));
1394
+ }, [entries, query, selectedCategory]);
1395
+ const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize));
1396
+ const safePage = Math.min(page, totalPages);
1397
+ const pageItems = paginate(filtered, safePage, pageSize);
1398
+ useEffect(() => {
1399
+ setPage(1);
1400
+ }, [query, selectedCategory]);
1401
+ if (entries.length === 0) {
1402
+ return /* @__PURE__ */ jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "No changelog entries yet. Check back soon!" }) });
1403
+ }
1404
+ return /* @__PURE__ */ jsxs("div", { className: "max-w-3xl mx-auto", children: [
1405
+ /* @__PURE__ */ jsxs("div", { className: "mb-8 space-y-4", children: [
1406
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1407
+ /* @__PURE__ */ jsx(
1408
+ Search,
1409
+ {
1410
+ className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground",
1411
+ "aria-hidden": "true"
1412
+ }
1413
+ ),
1414
+ /* @__PURE__ */ jsx(
1415
+ Input,
1416
+ {
1417
+ type: "search",
1418
+ placeholder: "Search releases, features, fixes\u2026",
1419
+ value: query,
1420
+ onChange: (e) => setQuery(e.target.value),
1421
+ className: "pl-9",
1422
+ "aria-label": "Search changelog"
1423
+ }
1424
+ )
1425
+ ] }),
1426
+ categories.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
1427
+ /* @__PURE__ */ jsx(
1428
+ "button",
1429
+ {
1430
+ type: "button",
1431
+ onClick: () => setSelectedCategory(null),
1432
+ className: cn(
1433
+ "px-3 py-1 rounded-full text-xs font-medium border transition-colors",
1434
+ selectedCategory === null ? "bg-primary text-primary-foreground border-primary" : "bg-background text-muted-foreground border-border/60 hover:border-primary/40"
1435
+ ),
1436
+ children: "All"
1437
+ }
1438
+ ),
1439
+ categories.map((category) => /* @__PURE__ */ jsx(
1440
+ "button",
1441
+ {
1442
+ type: "button",
1443
+ onClick: () => setSelectedCategory(category),
1444
+ className: cn(
1445
+ "px-3 py-1 rounded-full text-xs font-medium border transition-colors",
1446
+ selectedCategory === category ? "bg-primary text-primary-foreground border-primary" : "bg-background text-muted-foreground border-border/60 hover:border-primary/40"
1447
+ ),
1448
+ children: category
1449
+ },
1450
+ category
1451
+ ))
1452
+ ] })
1453
+ ] }),
1454
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1455
+ /* @__PURE__ */ jsx(
1456
+ "div",
1457
+ {
1458
+ className: "absolute left-[1.125rem] top-3 bottom-3 w-px bg-border/60 hidden sm:block",
1459
+ "aria-hidden": "true"
1460
+ }
1461
+ ),
1462
+ /* @__PURE__ */ jsx("div", { className: "space-y-8", children: pageItems.map((entry) => /* @__PURE__ */ jsxs(
1463
+ "article",
1464
+ {
1465
+ className: "relative sm:pl-12",
1466
+ children: [
1467
+ /* @__PURE__ */ jsx(
1468
+ "div",
1469
+ {
1470
+ className: "hidden sm:flex absolute left-2 top-2 h-5 w-5 items-center justify-center rounded-full border-2 border-background bg-primary ring-1 ring-border/40",
1471
+ "aria-hidden": "true",
1472
+ children: /* @__PURE__ */ jsx("span", { className: "h-2 w-2 rounded-full bg-primary-foreground" })
1473
+ }
1474
+ ),
1475
+ /* @__PURE__ */ jsx("div", { className: "rounded-2xl border border-border/40 bg-card overflow-hidden", children: /* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8", children: [
1476
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2 mb-3", children: [
1477
+ /* @__PURE__ */ jsx("span", { className: "inline-flex items-center rounded-md bg-primary/10 px-2 py-1 text-xs font-medium text-primary", children: entry.category }),
1478
+ /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center rounded-md bg-muted px-2 py-1 text-xs font-mono font-medium text-muted-foreground", children: [
1479
+ "v",
1480
+ entry.version
1481
+ ] }),
1482
+ /* @__PURE__ */ jsx(
1483
+ "time",
1484
+ {
1485
+ className: "text-xs text-muted-foreground",
1486
+ dateTime: entry.date,
1487
+ children: formatDate(entry.date)
1488
+ }
1489
+ )
1490
+ ] }),
1491
+ entry.tags && entry.tags.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5 mb-3", children: entry.tags.map((tag) => /* @__PURE__ */ jsx(
1492
+ "span",
1493
+ {
1494
+ className: "text-[10px] uppercase tracking-wide text-muted-foreground bg-background border border-border/40 px-1.5 py-0.5 rounded",
1495
+ children: tag
1496
+ },
1497
+ tag
1498
+ )) }),
1499
+ /* @__PURE__ */ jsx("h2", { className: "text-xl sm:text-2xl font-bold text-foreground mb-4", children: entry.title }),
1500
+ /* @__PURE__ */ jsx(EntryContent, { content: entry.content })
1501
+ ] }) })
1502
+ ]
1503
+ },
1504
+ `${entry.version}-${entry.date}`
1505
+ )) })
1506
+ ] }),
1507
+ pageItems.length === 0 && /* @__PURE__ */ jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "No entries match your filters." }) }),
1508
+ totalPages > 1 && /* @__PURE__ */ jsxs("div", { className: "mt-10 flex items-center justify-between", children: [
1509
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
1510
+ "Page ",
1511
+ safePage,
1512
+ " of ",
1513
+ totalPages,
1514
+ " \xB7 ",
1515
+ filtered.length,
1516
+ " entries"
1517
+ ] }),
1518
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1519
+ /* @__PURE__ */ jsx(
1520
+ Button,
1521
+ {
1522
+ variant: "outline",
1523
+ size: "sm",
1524
+ onClick: () => setPage((p) => Math.max(1, p - 1)),
1525
+ disabled: safePage <= 1,
1526
+ "aria-label": "Previous page",
1527
+ children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
1528
+ }
1529
+ ),
1530
+ /* @__PURE__ */ jsx(
1531
+ Button,
1532
+ {
1533
+ variant: "outline",
1534
+ size: "sm",
1535
+ onClick: () => setPage((p) => Math.min(totalPages, p + 1)),
1536
+ disabled: safePage >= totalPages,
1537
+ "aria-label": "Next page",
1538
+ children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
1539
+ }
1540
+ )
1541
+ ] })
1542
+ ] }),
1543
+ productName && pageItems.length > 0 && /* @__PURE__ */ jsx("script", { type: "application/ld+json", children: JSON.stringify({
1544
+ "@context": "https://schema.org",
1545
+ "@type": "ItemList",
1546
+ name: `${productName} Changelog`,
1547
+ itemListElement: pageItems.map((entry, index) => ({
1548
+ "@type": "ListItem",
1549
+ position: (safePage - 1) * pageSize + index + 1,
1550
+ name: entry.title,
1551
+ description: typeof entry.content === "string" ? entry.content.slice(0, 200) : void 0,
1552
+ datePublished: entry.date
1553
+ }))
1554
+ }) })
1555
+ ] });
1556
+ }
1557
+ function ChangelogPage(props) {
1558
+ const {
1559
+ productName,
1560
+ heroEyebrow = "What's new",
1561
+ heroTitle = "Changelog",
1562
+ heroSubtitle = "Platform updates, improvements, and announcements \u2014 newest first.",
1563
+ ctaTitle,
1564
+ ctaSubtitle,
1565
+ ctaHref,
1566
+ ctaLabel,
1567
+ className = "",
1568
+ seoTitle,
1569
+ seoDescription,
1570
+ seoKeywords,
1571
+ entries,
1572
+ pageSize = 10
1573
+ } = props;
1574
+ const { product } = useProduct();
1575
+ const resolvedProductName = productName || product?.name;
1576
+ const cms = useCmsChangelog();
1234
1577
  const showCta = Boolean(ctaHref && ctaLabel);
1578
+ const isPropDriven = entries != null;
1235
1579
  return /* @__PURE__ */ jsxs("div", { className: `w-full ${className}`, children: [
1236
- seoTitle && /* @__PURE__ */ jsx(
1580
+ /* @__PURE__ */ jsx(
1237
1581
  PageHead,
1238
1582
  {
1239
- title: seoTitle,
1583
+ title: seoTitle || heroTitle,
1240
1584
  description: seoDescription || heroSubtitle,
1241
- productName,
1585
+ productName: resolvedProductName,
1242
1586
  keywords: seoKeywords
1243
1587
  }
1244
1588
  ),
1245
1589
  /* @__PURE__ */ jsx("section", { className: "py-16 md:py-20 px-4 sm:px-6 lg:px-8 text-center", children: /* @__PURE__ */ jsxs("div", { className: "max-w-3xl mx-auto", children: [
1246
1590
  /* @__PURE__ */ jsxs("div", { className: "inline-flex items-center gap-2 px-3 py-1.5 rounded-full bg-primary/10 border border-primary/20 text-xs font-medium text-primary mb-6", children: [
1247
- /* @__PURE__ */ jsx(
1248
- "svg",
1249
- {
1250
- className: "h-3.5 w-3.5",
1251
- fill: "none",
1252
- viewBox: "0 0 24 24",
1253
- stroke: "currentColor",
1254
- children: /* @__PURE__ */ jsx(
1255
- "path",
1256
- {
1257
- strokeLinecap: "round",
1258
- strokeLinejoin: "round",
1259
- strokeWidth: 2,
1260
- d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
1261
- }
1262
- )
1263
- }
1264
- ),
1591
+ /* @__PURE__ */ jsx(History, { className: "h-3.5 w-3.5", "aria-hidden": "true" }),
1265
1592
  heroEyebrow
1266
1593
  ] }),
1267
1594
  /* @__PURE__ */ jsx("h1", { className: "text-4xl sm:text-5xl font-bold text-foreground mb-4", children: heroTitle }),
1268
1595
  /* @__PURE__ */ jsx("p", { className: "text-lg text-muted-foreground", children: heroSubtitle })
1269
1596
  ] }) }),
1270
- /* @__PURE__ */ jsx("section", { className: "px-4 sm:px-6 lg:px-8 pb-20", children: /* @__PURE__ */ jsx("div", { className: "max-w-3xl mx-auto space-y-12", children: loading ? [1, 2, 3].map((i) => /* @__PURE__ */ jsx(
1271
- "div",
1597
+ /* @__PURE__ */ jsx("section", { className: "px-4 sm:px-6 lg:px-8 pb-20", children: isPropDriven ? /* @__PURE__ */ jsx(
1598
+ EntriesTimeline,
1272
1599
  {
1273
- className: "rounded-2xl border border-border/40 bg-card overflow-hidden animate-pulse",
1274
- children: /* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8 space-y-4", children: [
1275
- /* @__PURE__ */ jsx("div", { className: "h-3 bg-muted rounded w-1/3" }),
1276
- /* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-2/3" }),
1277
- /* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded" }),
1278
- /* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded w-5/6" })
1279
- ] })
1280
- },
1281
- i
1282
- )) : error ? /* @__PURE__ */ jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: error }) }) : entries.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: "No changelog entries yet. Check back soon!" }) }) : entries.map((entry) => /* @__PURE__ */ jsxs(
1283
- "article",
1600
+ entries,
1601
+ pageSize,
1602
+ productName: resolvedProductName
1603
+ }
1604
+ ) : /* @__PURE__ */ jsx(
1605
+ CmsTimeline,
1284
1606
  {
1285
- id: entry.slug,
1286
- className: "rounded-2xl border border-border/40 bg-card overflow-hidden scroll-mt-24",
1287
- children: [
1288
- entry.thumbnail && /* @__PURE__ */ jsx(
1289
- "img",
1290
- {
1291
- src: entry.thumbnail,
1292
- alt: "",
1293
- width: 1024,
1294
- height: 576,
1295
- loading: "lazy",
1296
- decoding: "async",
1297
- className: "w-full aspect-video object-cover border-b border-border/40"
1298
- }
1299
- ),
1300
- /* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8", children: [
1301
- /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mb-2", children: [
1302
- entry.publishedAt && /* @__PURE__ */ jsx("time", { dateTime: entry.publishedAt, children: formatDate(entry.publishedAt || entry.lastUpdated) }),
1303
- entry.author && /* @__PURE__ */ jsxs(Fragment, { children: [
1304
- " \xB7 ",
1305
- entry.author
1306
- ] })
1307
- ] }),
1308
- /* @__PURE__ */ jsx("h2", { className: "text-xl sm:text-2xl font-bold text-foreground mb-4", children: entry.title }),
1309
- entry.content ? /* @__PURE__ */ jsx("div", { className: "prose prose-sm prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsx(
1310
- ContentRenderer,
1311
- {
1312
- content: entry.content,
1313
- format: entry.contentFormat
1314
- }
1315
- ) }) : entry.excerpt && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: entry.excerpt })
1316
- ] })
1317
- ]
1318
- },
1319
- entry.id
1320
- )) }) }),
1607
+ entries: cms.entries,
1608
+ loading: cms.loading,
1609
+ error: cms.error
1610
+ }
1611
+ ) }),
1321
1612
  showCta && /* @__PURE__ */ jsx("section", { className: "py-14 px-4 sm:px-6 lg:px-8 bg-primary/5 border-t border-border/40", children: /* @__PURE__ */ jsxs("div", { className: "max-w-2xl mx-auto text-center", children: [
1322
1613
  ctaTitle && /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-foreground mb-3", children: ctaTitle }),
1323
1614
  ctaSubtitle && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-7", children: ctaSubtitle }),