@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.
- package/dist/components/electron-download.d.mts +32 -0
- package/dist/components/electron-download.d.ts +32 -0
- package/dist/components/electron-download.js +131 -0
- package/dist/components/electron-download.js.map +1 -0
- package/dist/components/electron-download.mjs +108 -0
- package/dist/components/electron-download.mjs.map +1 -0
- package/dist/components/launch-countdown.d.mts +15 -0
- package/dist/components/launch-countdown.d.ts +15 -0
- package/dist/components/launch-countdown.js +89 -0
- package/dist/components/launch-countdown.js.map +1 -0
- package/dist/components/launch-countdown.mjs +87 -0
- package/dist/components/launch-countdown.mjs.map +1 -0
- package/dist/components/problems-solved.d.mts +37 -0
- package/dist/components/problems-solved.d.ts +37 -0
- package/dist/components/problems-solved.js +157 -0
- package/dist/components/problems-solved.js.map +1 -0
- package/dist/components/problems-solved.mjs +135 -0
- package/dist/components/problems-solved.mjs.map +1 -0
- package/dist/components/website-switcher.d.mts +27 -0
- package/dist/components/website-switcher.d.ts +27 -0
- package/dist/components/website-switcher.js +168 -0
- package/dist/components/website-switcher.js.map +1 -0
- package/dist/components/website-switcher.mjs +146 -0
- package/dist/components/website-switcher.mjs.map +1 -0
- package/dist/content/index.d.mts +24 -1
- package/dist/content/index.d.ts +24 -1
- package/dist/content/index.js +459 -149
- package/dist/content/index.js.map +1 -1
- package/dist/content/index.mjs +378 -87
- package/dist/content/index.mjs.map +1 -1
- package/dist/index.d.mts +15 -2
- package/dist/index.d.ts +15 -2
- package/dist/index.js +817 -86
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +812 -88
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -1
package/dist/content/index.mjs
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import
|
|
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
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
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)
|
|
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
|
-
|
|
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:
|
|
1271
|
-
|
|
1597
|
+
/* @__PURE__ */ jsx("section", { className: "px-4 sm:px-6 lg:px-8 pb-20", children: isPropDriven ? /* @__PURE__ */ jsx(
|
|
1598
|
+
EntriesTimeline,
|
|
1272
1599
|
{
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
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
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
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 }),
|