@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/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { createContext, useMemo, useContext, useState, useCallback, useLayoutEffect, useRef, useEffect } from 'react';
|
|
3
3
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
|
-
import { Instagram, Youtube, Facebook, Github, Linkedin, Twitter, Mail, Phone, MapPin, Clock, Send, CheckCircle, Upload,
|
|
4
|
+
import { Instagram, Youtube, Facebook, Github, Linkedin, Twitter, Mail, Phone, MapPin, Clock, Send, CheckCircle, Upload, Globe, ChevronDown, Search, Rocket, ArrowRight, Download, History, ChevronLeft, ChevronRight, FileText } from 'lucide-react';
|
|
5
5
|
import ReCAPTCHA3 from 'react-google-recaptcha';
|
|
6
6
|
import { toast } from 'sonner';
|
|
7
7
|
import { Helmet } from 'react-helmet-async';
|
|
@@ -13,6 +13,7 @@ import * as LabelPrimitive from '@radix-ui/react-label';
|
|
|
13
13
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
14
14
|
import { useForm } from 'react-hook-form';
|
|
15
15
|
import { z } from 'zod';
|
|
16
|
+
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
|
|
16
17
|
|
|
17
18
|
var __defProp = Object.defineProperty;
|
|
18
19
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -3913,6 +3914,329 @@ function ResourceLinks({
|
|
|
3913
3914
|
}
|
|
3914
3915
|
) }, resource)) });
|
|
3915
3916
|
}
|
|
3917
|
+
function normalizeSearch(value) {
|
|
3918
|
+
return value.toLowerCase().trim();
|
|
3919
|
+
}
|
|
3920
|
+
function filterProducts(products, query) {
|
|
3921
|
+
const normalized = normalizeSearch(query);
|
|
3922
|
+
if (!normalized) return products;
|
|
3923
|
+
return products.filter((p) => normalizeSearch(p.name).includes(normalized));
|
|
3924
|
+
}
|
|
3925
|
+
function WebsiteSwitcher({
|
|
3926
|
+
products,
|
|
3927
|
+
triggerLabel = "Explore products",
|
|
3928
|
+
searchPlaceholder = "Find a product\u2026",
|
|
3929
|
+
emptyText = "No products match your search.",
|
|
3930
|
+
className
|
|
3931
|
+
}) {
|
|
3932
|
+
const [open, setOpen] = useState(false);
|
|
3933
|
+
const [query, setQuery] = useState("");
|
|
3934
|
+
const filtered = useMemo(
|
|
3935
|
+
() => filterProducts(products, query),
|
|
3936
|
+
[products, query]
|
|
3937
|
+
);
|
|
3938
|
+
return /* @__PURE__ */ jsxs(DropdownMenu.Root, { open, onOpenChange: setOpen, children: [
|
|
3939
|
+
/* @__PURE__ */ jsxs(
|
|
3940
|
+
DropdownMenu.Trigger,
|
|
3941
|
+
{
|
|
3942
|
+
className: cn(
|
|
3943
|
+
"inline-flex items-center gap-1.5 text-sm font-medium transition-colors",
|
|
3944
|
+
"text-muted-foreground hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring rounded-md",
|
|
3945
|
+
className
|
|
3946
|
+
),
|
|
3947
|
+
"aria-label": triggerLabel,
|
|
3948
|
+
children: [
|
|
3949
|
+
/* @__PURE__ */ jsx(Globe, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
3950
|
+
/* @__PURE__ */ jsx("span", { className: "hidden sm:inline", children: triggerLabel }),
|
|
3951
|
+
/* @__PURE__ */ jsx(
|
|
3952
|
+
ChevronDown,
|
|
3953
|
+
{
|
|
3954
|
+
className: cn(
|
|
3955
|
+
"h-3.5 w-3.5 transition-transform duration-200",
|
|
3956
|
+
open && "rotate-180"
|
|
3957
|
+
),
|
|
3958
|
+
"aria-hidden": "true"
|
|
3959
|
+
}
|
|
3960
|
+
)
|
|
3961
|
+
]
|
|
3962
|
+
}
|
|
3963
|
+
),
|
|
3964
|
+
/* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsxs(
|
|
3965
|
+
DropdownMenu.Content,
|
|
3966
|
+
{
|
|
3967
|
+
className: "z-50 min-w-[16rem] max-w-[20rem] rounded-lg border border-border/60 bg-popover p-2 shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2",
|
|
3968
|
+
sideOffset: 8,
|
|
3969
|
+
align: "end",
|
|
3970
|
+
avoidCollisions: true,
|
|
3971
|
+
children: [
|
|
3972
|
+
/* @__PURE__ */ jsxs("div", { className: "px-2 pb-2 pt-1", children: [
|
|
3973
|
+
/* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Burdenoff ecosystem" }),
|
|
3974
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
3975
|
+
/* @__PURE__ */ jsx(
|
|
3976
|
+
Search,
|
|
3977
|
+
{
|
|
3978
|
+
className: "absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground",
|
|
3979
|
+
"aria-hidden": "true"
|
|
3980
|
+
}
|
|
3981
|
+
),
|
|
3982
|
+
/* @__PURE__ */ jsx(
|
|
3983
|
+
Input,
|
|
3984
|
+
{
|
|
3985
|
+
type: "search",
|
|
3986
|
+
value: query,
|
|
3987
|
+
onChange: (e) => setQuery(e.target.value),
|
|
3988
|
+
placeholder: searchPlaceholder,
|
|
3989
|
+
className: "h-8 pl-8 text-sm",
|
|
3990
|
+
"aria-label": searchPlaceholder,
|
|
3991
|
+
onKeyDown: (e) => {
|
|
3992
|
+
if (e.key === "Escape") {
|
|
3993
|
+
setQuery("");
|
|
3994
|
+
}
|
|
3995
|
+
}
|
|
3996
|
+
}
|
|
3997
|
+
)
|
|
3998
|
+
] })
|
|
3999
|
+
] }),
|
|
4000
|
+
/* @__PURE__ */ jsx(DropdownMenu.Separator, { className: "my-1 h-px bg-border/60" }),
|
|
4001
|
+
/* @__PURE__ */ jsx("div", { className: "max-h-[min(60vh,24rem)] overflow-y-auto py-1", children: filtered.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-4 text-center text-sm text-muted-foreground", children: emptyText }) : filtered.map((product) => /* @__PURE__ */ jsx(DropdownMenu.Item, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
4002
|
+
"a",
|
|
4003
|
+
{
|
|
4004
|
+
href: product.websiteUrl,
|
|
4005
|
+
target: "_blank",
|
|
4006
|
+
rel: "noopener noreferrer",
|
|
4007
|
+
className: cn(
|
|
4008
|
+
"flex items-center gap-3 rounded-md px-2 py-2 text-sm outline-none",
|
|
4009
|
+
"text-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground"
|
|
4010
|
+
),
|
|
4011
|
+
children: [
|
|
4012
|
+
product.logoUrl ? /* @__PURE__ */ jsx(
|
|
4013
|
+
"img",
|
|
4014
|
+
{
|
|
4015
|
+
src: product.logoUrl,
|
|
4016
|
+
alt: "",
|
|
4017
|
+
"aria-hidden": "true",
|
|
4018
|
+
className: "h-5 w-5 shrink-0 rounded object-contain"
|
|
4019
|
+
}
|
|
4020
|
+
) : /* @__PURE__ */ jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center rounded bg-primary/10 text-[10px] font-bold text-primary", children: product.name.charAt(0) }),
|
|
4021
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: product.name })
|
|
4022
|
+
]
|
|
4023
|
+
}
|
|
4024
|
+
) }, product.slug)) }),
|
|
4025
|
+
/* @__PURE__ */ jsx(DropdownMenu.Arrow, { className: "fill-popover" })
|
|
4026
|
+
]
|
|
4027
|
+
}
|
|
4028
|
+
) })
|
|
4029
|
+
] });
|
|
4030
|
+
}
|
|
4031
|
+
function splitRemaining(ms) {
|
|
4032
|
+
const clamped = Math.max(0, ms);
|
|
4033
|
+
const totalSeconds = Math.floor(clamped / 1e3);
|
|
4034
|
+
return {
|
|
4035
|
+
days: Math.floor(totalSeconds / 86400),
|
|
4036
|
+
hours: Math.floor(totalSeconds % 86400 / 3600),
|
|
4037
|
+
minutes: Math.floor(totalSeconds % 3600 / 60),
|
|
4038
|
+
seconds: totalSeconds % 60
|
|
4039
|
+
};
|
|
4040
|
+
}
|
|
4041
|
+
function padTwo(n) {
|
|
4042
|
+
return String(n).padStart(2, "0");
|
|
4043
|
+
}
|
|
4044
|
+
function LaunchCountdown({
|
|
4045
|
+
launchDate,
|
|
4046
|
+
launchLabel,
|
|
4047
|
+
launchedMessage = "We have launched!",
|
|
4048
|
+
className
|
|
4049
|
+
}) {
|
|
4050
|
+
const [now, setNow] = useState(() => Date.now());
|
|
4051
|
+
const remainingMs = launchDate - now;
|
|
4052
|
+
const hasLaunched = remainingMs <= 0;
|
|
4053
|
+
useEffect(() => {
|
|
4054
|
+
if (hasLaunched) return;
|
|
4055
|
+
const interval = setInterval(() => {
|
|
4056
|
+
setNow(Date.now());
|
|
4057
|
+
}, 1e3);
|
|
4058
|
+
return () => clearInterval(interval);
|
|
4059
|
+
}, [hasLaunched]);
|
|
4060
|
+
const { days, hours, minutes, seconds } = splitRemaining(remainingMs);
|
|
4061
|
+
const cells = [
|
|
4062
|
+
{ label: "Days", value: padTwo(Math.min(days, 99)) },
|
|
4063
|
+
{ label: "Hours", value: padTwo(hours) },
|
|
4064
|
+
{ label: "Minutes", value: padTwo(minutes) },
|
|
4065
|
+
{ label: "Seconds", value: padTwo(seconds) }
|
|
4066
|
+
];
|
|
4067
|
+
return /* @__PURE__ */ jsxs(
|
|
4068
|
+
"div",
|
|
4069
|
+
{
|
|
4070
|
+
className: cn("inline-flex flex-col gap-3", className),
|
|
4071
|
+
role: "timer",
|
|
4072
|
+
"aria-label": launchLabel ?? (hasLaunched ? launchedMessage : `Countdown to launch`),
|
|
4073
|
+
children: [
|
|
4074
|
+
!hasLaunched && /* @__PURE__ */ jsx("span", { className: "text-xs font-mono uppercase tracking-wider text-muted-foreground", children: "Launching in" }),
|
|
4075
|
+
/* @__PURE__ */ jsx("div", { className: "flex gap-2 sm:gap-3", children: hasLaunched ? /* @__PURE__ */ jsxs(
|
|
4076
|
+
"div",
|
|
4077
|
+
{
|
|
4078
|
+
className: cn(
|
|
4079
|
+
"flex min-w-[15rem] items-center justify-center gap-3 rounded-lg border border-primary/30 bg-primary/10 px-6 py-4",
|
|
4080
|
+
"text-center"
|
|
4081
|
+
),
|
|
4082
|
+
children: [
|
|
4083
|
+
/* @__PURE__ */ jsx(Rocket, { className: "h-5 w-5 text-primary", "aria-hidden": "true" }),
|
|
4084
|
+
/* @__PURE__ */ jsx("span", { className: "text-lg font-semibold text-foreground", children: launchedMessage })
|
|
4085
|
+
]
|
|
4086
|
+
}
|
|
4087
|
+
) : cells.map((cell) => /* @__PURE__ */ jsxs(
|
|
4088
|
+
"div",
|
|
4089
|
+
{
|
|
4090
|
+
className: cn(
|
|
4091
|
+
"flex min-w-[3.75rem] flex-col items-center rounded-lg border border-border/60 bg-card px-3 py-2 sm:min-w-[4.5rem] sm:px-4 sm:py-3"
|
|
4092
|
+
),
|
|
4093
|
+
children: [
|
|
4094
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-2xl font-bold tabular-nums text-foreground sm:text-3xl", children: cell.value }),
|
|
4095
|
+
/* @__PURE__ */ jsx("span", { className: "mt-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground sm:text-xs", children: cell.label })
|
|
4096
|
+
]
|
|
4097
|
+
},
|
|
4098
|
+
cell.label
|
|
4099
|
+
)) }),
|
|
4100
|
+
!hasLaunched && launchLabel && /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: launchLabel })
|
|
4101
|
+
]
|
|
4102
|
+
}
|
|
4103
|
+
);
|
|
4104
|
+
}
|
|
4105
|
+
function ProblemsSolvedSection({
|
|
4106
|
+
eyebrow,
|
|
4107
|
+
title,
|
|
4108
|
+
subtitle,
|
|
4109
|
+
problems,
|
|
4110
|
+
storyBasePath = "/use-cases",
|
|
4111
|
+
storyLabel = "See the story",
|
|
4112
|
+
className,
|
|
4113
|
+
children
|
|
4114
|
+
}) {
|
|
4115
|
+
return /* @__PURE__ */ jsx(
|
|
4116
|
+
"section",
|
|
4117
|
+
{
|
|
4118
|
+
className: cn(
|
|
4119
|
+
"py-16 md:py-24 px-4 sm:px-6 lg:px-8 bg-muted/30",
|
|
4120
|
+
className
|
|
4121
|
+
),
|
|
4122
|
+
children: /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto", children: [
|
|
4123
|
+
(eyebrow || title || subtitle) && /* @__PURE__ */ jsxs("div", { className: "max-w-3xl mx-auto text-center mb-12 md:mb-16", children: [
|
|
4124
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-xs font-mono uppercase tracking-widest text-primary mb-4", children: eyebrow }),
|
|
4125
|
+
title && /* @__PURE__ */ jsx("h2", { className: "text-3xl sm:text-4xl font-bold text-foreground mb-4", children: title }),
|
|
4126
|
+
subtitle && /* @__PURE__ */ jsx("p", { className: "text-lg text-muted-foreground", children: subtitle })
|
|
4127
|
+
] }),
|
|
4128
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6", children: problems.map((item, index) => {
|
|
4129
|
+
const Icon = item.icon;
|
|
4130
|
+
const storyHref = item.storySlug ? `${storyBasePath.replace(/\/$/, "")}/${item.storySlug}` : null;
|
|
4131
|
+
return /* @__PURE__ */ jsxs(
|
|
4132
|
+
"div",
|
|
4133
|
+
{
|
|
4134
|
+
className: cn(
|
|
4135
|
+
"group relative flex flex-col rounded-2xl border border-border/40 bg-card p-6 transition-colors",
|
|
4136
|
+
"hover:border-primary/30"
|
|
4137
|
+
),
|
|
4138
|
+
children: [
|
|
4139
|
+
/* @__PURE__ */ jsx(
|
|
4140
|
+
"div",
|
|
4141
|
+
{
|
|
4142
|
+
className: cn(
|
|
4143
|
+
"mb-5 inline-flex h-12 w-12 items-center justify-center rounded-xl",
|
|
4144
|
+
"bg-primary/10 text-primary"
|
|
4145
|
+
),
|
|
4146
|
+
children: /* @__PURE__ */ jsx(Icon, { className: "h-6 w-6", "aria-hidden": true })
|
|
4147
|
+
}
|
|
4148
|
+
),
|
|
4149
|
+
/* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children: item.problem }),
|
|
4150
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed mb-4 flex-1", children: item.solution }),
|
|
4151
|
+
storyHref && /* @__PURE__ */ jsx(
|
|
4152
|
+
Button,
|
|
4153
|
+
{
|
|
4154
|
+
variant: "ghost",
|
|
4155
|
+
className: "justify-start px-0 h-auto py-0 text-sm group/link",
|
|
4156
|
+
asChild: true,
|
|
4157
|
+
children: /* @__PURE__ */ jsxs(
|
|
4158
|
+
"a",
|
|
4159
|
+
{
|
|
4160
|
+
href: storyHref,
|
|
4161
|
+
className: "inline-flex items-center gap-1 text-primary hover:underline",
|
|
4162
|
+
children: [
|
|
4163
|
+
storyLabel,
|
|
4164
|
+
/* @__PURE__ */ jsx(
|
|
4165
|
+
ArrowRight,
|
|
4166
|
+
{
|
|
4167
|
+
className: "h-3.5 w-3.5 transition-transform group-hover/link:translate-x-0.5",
|
|
4168
|
+
"aria-hidden": "true"
|
|
4169
|
+
}
|
|
4170
|
+
)
|
|
4171
|
+
]
|
|
4172
|
+
}
|
|
4173
|
+
)
|
|
4174
|
+
}
|
|
4175
|
+
)
|
|
4176
|
+
]
|
|
4177
|
+
},
|
|
4178
|
+
`${item.problem}-${index}`
|
|
4179
|
+
);
|
|
4180
|
+
}) }),
|
|
4181
|
+
children && /* @__PURE__ */ jsx("div", { className: "mt-12", children })
|
|
4182
|
+
] })
|
|
4183
|
+
}
|
|
4184
|
+
);
|
|
4185
|
+
}
|
|
4186
|
+
function detectElectronPlatform(userAgent = typeof navigator !== "undefined" ? navigator.userAgent : "") {
|
|
4187
|
+
const ua = userAgent.toLowerCase();
|
|
4188
|
+
if (ua.includes("win")) return "win";
|
|
4189
|
+
if (ua.includes("mac")) return "mac";
|
|
4190
|
+
if (ua.includes("linux")) return "linux";
|
|
4191
|
+
return "unknown";
|
|
4192
|
+
}
|
|
4193
|
+
function buildDownloadUrl(base, artifactName, platform, platformMap) {
|
|
4194
|
+
const normalizedBase = base.replace(/\/$/, "");
|
|
4195
|
+
const platformKey = platformMap[platform] ?? platform;
|
|
4196
|
+
const fileName = artifactName.includes("{platform}") ? artifactName.replace(/\{platform\}/g, platformKey) : artifactName;
|
|
4197
|
+
return `${normalizedBase}/${fileName}`;
|
|
4198
|
+
}
|
|
4199
|
+
function ElectronDownloadLink({
|
|
4200
|
+
downloadBaseUrl,
|
|
4201
|
+
artifactName,
|
|
4202
|
+
hidden = true,
|
|
4203
|
+
label = "Download desktop app",
|
|
4204
|
+
downloadLabel = label,
|
|
4205
|
+
platformMap = {},
|
|
4206
|
+
className,
|
|
4207
|
+
variant = "default",
|
|
4208
|
+
size = "default"
|
|
4209
|
+
}) {
|
|
4210
|
+
if (hidden) return null;
|
|
4211
|
+
const platform = detectElectronPlatform();
|
|
4212
|
+
const href = buildDownloadUrl(
|
|
4213
|
+
downloadBaseUrl,
|
|
4214
|
+
artifactName,
|
|
4215
|
+
platform,
|
|
4216
|
+
platformMap
|
|
4217
|
+
);
|
|
4218
|
+
return /* @__PURE__ */ jsx(
|
|
4219
|
+
Button,
|
|
4220
|
+
{
|
|
4221
|
+
variant,
|
|
4222
|
+
size,
|
|
4223
|
+
className: cn("inline-flex items-center gap-2", className),
|
|
4224
|
+
asChild: true,
|
|
4225
|
+
children: /* @__PURE__ */ jsxs(
|
|
4226
|
+
"a",
|
|
4227
|
+
{
|
|
4228
|
+
href,
|
|
4229
|
+
download: true,
|
|
4230
|
+
"aria-label": `${downloadLabel}${platform !== "unknown" ? ` for ${platform}` : ""}`,
|
|
4231
|
+
children: [
|
|
4232
|
+
/* @__PURE__ */ jsx(Download, { className: "h-4 w-4", "aria-hidden": "true" }),
|
|
4233
|
+
label
|
|
4234
|
+
]
|
|
4235
|
+
}
|
|
4236
|
+
)
|
|
4237
|
+
}
|
|
4238
|
+
);
|
|
4239
|
+
}
|
|
3916
4240
|
function RybbitAnalytics({
|
|
3917
4241
|
siteId,
|
|
3918
4242
|
scriptUrl = "https://analytics.burdenoff.com/api/script.js",
|
|
@@ -4683,21 +5007,17 @@ function sortByDateDesc(a, b) {
|
|
|
4683
5007
|
const db = new Date(b.publishedAt || b.lastUpdated || 0).getTime();
|
|
4684
5008
|
return db - da;
|
|
4685
5009
|
}
|
|
4686
|
-
function
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
seoTitle,
|
|
4698
|
-
seoDescription,
|
|
4699
|
-
seoKeywords
|
|
4700
|
-
} = props;
|
|
5010
|
+
function normalize(value) {
|
|
5011
|
+
return value.toLowerCase().trim();
|
|
5012
|
+
}
|
|
5013
|
+
function paginate(items, page, pageSize) {
|
|
5014
|
+
const start = (page - 1) * pageSize;
|
|
5015
|
+
return items.slice(start, start + pageSize);
|
|
5016
|
+
}
|
|
5017
|
+
function parseEntryDate(date) {
|
|
5018
|
+
return new Date(date).getTime();
|
|
5019
|
+
}
|
|
5020
|
+
function useCmsChangelog() {
|
|
4701
5021
|
const client = useWebSDK();
|
|
4702
5022
|
const config = useWebSDKConfig();
|
|
4703
5023
|
const { product } = useProduct();
|
|
@@ -4706,7 +5026,10 @@ function ChangelogPage(props) {
|
|
|
4706
5026
|
const [loading, setLoading] = useState(true);
|
|
4707
5027
|
const [error, setError] = useState(null);
|
|
4708
5028
|
const fetchEntries = useCallback(async () => {
|
|
4709
|
-
if (!resolvedProductId)
|
|
5029
|
+
if (!resolvedProductId) {
|
|
5030
|
+
setLoading(false);
|
|
5031
|
+
return;
|
|
5032
|
+
}
|
|
4710
5033
|
setLoading(true);
|
|
4711
5034
|
try {
|
|
4712
5035
|
const listResult = await client.query(CHANGELOG_LIST_QUERY, {
|
|
@@ -4748,93 +5071,320 @@ function ChangelogPage(props) {
|
|
|
4748
5071
|
useEffect(() => {
|
|
4749
5072
|
fetchEntries();
|
|
4750
5073
|
}, [fetchEntries]);
|
|
5074
|
+
return { entries, loading, error };
|
|
5075
|
+
}
|
|
5076
|
+
function CmsTimeline(props) {
|
|
5077
|
+
const { entries, loading, error } = props;
|
|
5078
|
+
if (loading) {
|
|
5079
|
+
return /* @__PURE__ */ jsx("div", { className: "max-w-3xl mx-auto space-y-12", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsx(
|
|
5080
|
+
"div",
|
|
5081
|
+
{
|
|
5082
|
+
className: "rounded-2xl border border-border/40 bg-card overflow-hidden animate-pulse",
|
|
5083
|
+
children: /* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8 space-y-4", children: [
|
|
5084
|
+
/* @__PURE__ */ jsx("div", { className: "h-3 bg-muted rounded w-1/3" }),
|
|
5085
|
+
/* @__PURE__ */ jsx("div", { className: "h-6 bg-muted rounded w-2/3" }),
|
|
5086
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded" }),
|
|
5087
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 bg-muted rounded w-5/6" })
|
|
5088
|
+
] })
|
|
5089
|
+
},
|
|
5090
|
+
i
|
|
5091
|
+
)) });
|
|
5092
|
+
}
|
|
5093
|
+
if (error) {
|
|
5094
|
+
return /* @__PURE__ */ jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: error }) });
|
|
5095
|
+
}
|
|
5096
|
+
if (entries.length === 0) {
|
|
5097
|
+
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!" }) });
|
|
5098
|
+
}
|
|
5099
|
+
return /* @__PURE__ */ jsx("div", { className: "max-w-3xl mx-auto space-y-12", children: entries.map((entry) => /* @__PURE__ */ jsxs(
|
|
5100
|
+
"article",
|
|
5101
|
+
{
|
|
5102
|
+
id: entry.slug,
|
|
5103
|
+
className: "rounded-2xl border border-border/40 bg-card overflow-hidden scroll-mt-24",
|
|
5104
|
+
children: [
|
|
5105
|
+
entry.thumbnail && /* @__PURE__ */ jsx(
|
|
5106
|
+
"img",
|
|
5107
|
+
{
|
|
5108
|
+
src: entry.thumbnail,
|
|
5109
|
+
alt: "",
|
|
5110
|
+
width: 1024,
|
|
5111
|
+
height: 576,
|
|
5112
|
+
loading: "lazy",
|
|
5113
|
+
decoding: "async",
|
|
5114
|
+
className: "w-full aspect-video object-cover border-b border-border/40"
|
|
5115
|
+
}
|
|
5116
|
+
),
|
|
5117
|
+
/* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8", children: [
|
|
5118
|
+
/* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mb-2", children: [
|
|
5119
|
+
entry.publishedAt && /* @__PURE__ */ jsx("time", { dateTime: entry.publishedAt, children: formatDate(entry.publishedAt || entry.lastUpdated) }),
|
|
5120
|
+
entry.author && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
5121
|
+
" \xB7 ",
|
|
5122
|
+
entry.author
|
|
5123
|
+
] })
|
|
5124
|
+
] }),
|
|
5125
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl sm:text-2xl font-bold text-foreground mb-4", children: entry.title }),
|
|
5126
|
+
entry.content ? /* @__PURE__ */ jsx("div", { className: "prose prose-sm prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsx(
|
|
5127
|
+
ContentRenderer,
|
|
5128
|
+
{
|
|
5129
|
+
content: entry.content,
|
|
5130
|
+
format: entry.contentFormat
|
|
5131
|
+
}
|
|
5132
|
+
) }) : entry.excerpt && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: entry.excerpt })
|
|
5133
|
+
] })
|
|
5134
|
+
]
|
|
5135
|
+
},
|
|
5136
|
+
entry.id
|
|
5137
|
+
)) });
|
|
5138
|
+
}
|
|
5139
|
+
function EntryContent({ content }) {
|
|
5140
|
+
if (typeof content === "string") {
|
|
5141
|
+
return /* @__PURE__ */ jsx("div", { className: "prose prose-sm prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsx(ContentRenderer, { content, format: "markdown" }) });
|
|
5142
|
+
}
|
|
5143
|
+
return /* @__PURE__ */ jsx("div", { className: "prose prose-sm max-w-none", children: content });
|
|
5144
|
+
}
|
|
5145
|
+
function EntriesTimeline(props) {
|
|
5146
|
+
const { entries, pageSize, productName } = props;
|
|
5147
|
+
const [query, setQuery] = useState("");
|
|
5148
|
+
const [selectedCategory, setSelectedCategory] = useState(null);
|
|
5149
|
+
const [page, setPage] = useState(1);
|
|
5150
|
+
const categories = useMemo(
|
|
5151
|
+
() => Array.from(new Set(entries.map((e) => e.category))).sort(),
|
|
5152
|
+
[entries]
|
|
5153
|
+
);
|
|
5154
|
+
const filtered = useMemo(() => {
|
|
5155
|
+
const normalized = normalize(query);
|
|
5156
|
+
return entries.filter((entry) => {
|
|
5157
|
+
if (selectedCategory && entry.category !== selectedCategory) {
|
|
5158
|
+
return false;
|
|
5159
|
+
}
|
|
5160
|
+
if (!normalized) return true;
|
|
5161
|
+
const haystack = [
|
|
5162
|
+
entry.title,
|
|
5163
|
+
entry.version,
|
|
5164
|
+
entry.category,
|
|
5165
|
+
...entry.tags ?? [],
|
|
5166
|
+
typeof entry.content === "string" ? entry.content : ""
|
|
5167
|
+
].join(" ").toLowerCase();
|
|
5168
|
+
return haystack.includes(normalized);
|
|
5169
|
+
}).sort((a, b) => parseEntryDate(b.date) - parseEntryDate(a.date));
|
|
5170
|
+
}, [entries, query, selectedCategory]);
|
|
5171
|
+
const totalPages = Math.max(1, Math.ceil(filtered.length / pageSize));
|
|
5172
|
+
const safePage = Math.min(page, totalPages);
|
|
5173
|
+
const pageItems = paginate(filtered, safePage, pageSize);
|
|
5174
|
+
useEffect(() => {
|
|
5175
|
+
setPage(1);
|
|
5176
|
+
}, [query, selectedCategory]);
|
|
5177
|
+
if (entries.length === 0) {
|
|
5178
|
+
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!" }) });
|
|
5179
|
+
}
|
|
5180
|
+
return /* @__PURE__ */ jsxs("div", { className: "max-w-3xl mx-auto", children: [
|
|
5181
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-8 space-y-4", children: [
|
|
5182
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
5183
|
+
/* @__PURE__ */ jsx(
|
|
5184
|
+
Search,
|
|
5185
|
+
{
|
|
5186
|
+
className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground",
|
|
5187
|
+
"aria-hidden": "true"
|
|
5188
|
+
}
|
|
5189
|
+
),
|
|
5190
|
+
/* @__PURE__ */ jsx(
|
|
5191
|
+
Input,
|
|
5192
|
+
{
|
|
5193
|
+
type: "search",
|
|
5194
|
+
placeholder: "Search releases, features, fixes\u2026",
|
|
5195
|
+
value: query,
|
|
5196
|
+
onChange: (e) => setQuery(e.target.value),
|
|
5197
|
+
className: "pl-9",
|
|
5198
|
+
"aria-label": "Search changelog"
|
|
5199
|
+
}
|
|
5200
|
+
)
|
|
5201
|
+
] }),
|
|
5202
|
+
categories.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
5203
|
+
/* @__PURE__ */ jsx(
|
|
5204
|
+
"button",
|
|
5205
|
+
{
|
|
5206
|
+
type: "button",
|
|
5207
|
+
onClick: () => setSelectedCategory(null),
|
|
5208
|
+
className: cn(
|
|
5209
|
+
"px-3 py-1 rounded-full text-xs font-medium border transition-colors",
|
|
5210
|
+
selectedCategory === null ? "bg-primary text-primary-foreground border-primary" : "bg-background text-muted-foreground border-border/60 hover:border-primary/40"
|
|
5211
|
+
),
|
|
5212
|
+
children: "All"
|
|
5213
|
+
}
|
|
5214
|
+
),
|
|
5215
|
+
categories.map((category) => /* @__PURE__ */ jsx(
|
|
5216
|
+
"button",
|
|
5217
|
+
{
|
|
5218
|
+
type: "button",
|
|
5219
|
+
onClick: () => setSelectedCategory(category),
|
|
5220
|
+
className: cn(
|
|
5221
|
+
"px-3 py-1 rounded-full text-xs font-medium border transition-colors",
|
|
5222
|
+
selectedCategory === category ? "bg-primary text-primary-foreground border-primary" : "bg-background text-muted-foreground border-border/60 hover:border-primary/40"
|
|
5223
|
+
),
|
|
5224
|
+
children: category
|
|
5225
|
+
},
|
|
5226
|
+
category
|
|
5227
|
+
))
|
|
5228
|
+
] })
|
|
5229
|
+
] }),
|
|
5230
|
+
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
5231
|
+
/* @__PURE__ */ jsx(
|
|
5232
|
+
"div",
|
|
5233
|
+
{
|
|
5234
|
+
className: "absolute left-[1.125rem] top-3 bottom-3 w-px bg-border/60 hidden sm:block",
|
|
5235
|
+
"aria-hidden": "true"
|
|
5236
|
+
}
|
|
5237
|
+
),
|
|
5238
|
+
/* @__PURE__ */ jsx("div", { className: "space-y-8", children: pageItems.map((entry) => /* @__PURE__ */ jsxs(
|
|
5239
|
+
"article",
|
|
5240
|
+
{
|
|
5241
|
+
className: "relative sm:pl-12",
|
|
5242
|
+
children: [
|
|
5243
|
+
/* @__PURE__ */ jsx(
|
|
5244
|
+
"div",
|
|
5245
|
+
{
|
|
5246
|
+
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",
|
|
5247
|
+
"aria-hidden": "true",
|
|
5248
|
+
children: /* @__PURE__ */ jsx("span", { className: "h-2 w-2 rounded-full bg-primary-foreground" })
|
|
5249
|
+
}
|
|
5250
|
+
),
|
|
5251
|
+
/* @__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: [
|
|
5252
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-2 mb-3", children: [
|
|
5253
|
+
/* @__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 }),
|
|
5254
|
+
/* @__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: [
|
|
5255
|
+
"v",
|
|
5256
|
+
entry.version
|
|
5257
|
+
] }),
|
|
5258
|
+
/* @__PURE__ */ jsx(
|
|
5259
|
+
"time",
|
|
5260
|
+
{
|
|
5261
|
+
className: "text-xs text-muted-foreground",
|
|
5262
|
+
dateTime: entry.date,
|
|
5263
|
+
children: formatDate(entry.date)
|
|
5264
|
+
}
|
|
5265
|
+
)
|
|
5266
|
+
] }),
|
|
5267
|
+
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(
|
|
5268
|
+
"span",
|
|
5269
|
+
{
|
|
5270
|
+
className: "text-[10px] uppercase tracking-wide text-muted-foreground bg-background border border-border/40 px-1.5 py-0.5 rounded",
|
|
5271
|
+
children: tag
|
|
5272
|
+
},
|
|
5273
|
+
tag
|
|
5274
|
+
)) }),
|
|
5275
|
+
/* @__PURE__ */ jsx("h2", { className: "text-xl sm:text-2xl font-bold text-foreground mb-4", children: entry.title }),
|
|
5276
|
+
/* @__PURE__ */ jsx(EntryContent, { content: entry.content })
|
|
5277
|
+
] }) })
|
|
5278
|
+
]
|
|
5279
|
+
},
|
|
5280
|
+
`${entry.version}-${entry.date}`
|
|
5281
|
+
)) })
|
|
5282
|
+
] }),
|
|
5283
|
+
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." }) }),
|
|
5284
|
+
totalPages > 1 && /* @__PURE__ */ jsxs("div", { className: "mt-10 flex items-center justify-between", children: [
|
|
5285
|
+
/* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
|
|
5286
|
+
"Page ",
|
|
5287
|
+
safePage,
|
|
5288
|
+
" of ",
|
|
5289
|
+
totalPages,
|
|
5290
|
+
" \xB7 ",
|
|
5291
|
+
filtered.length,
|
|
5292
|
+
" entries"
|
|
5293
|
+
] }),
|
|
5294
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
5295
|
+
/* @__PURE__ */ jsx(
|
|
5296
|
+
Button,
|
|
5297
|
+
{
|
|
5298
|
+
variant: "outline",
|
|
5299
|
+
size: "sm",
|
|
5300
|
+
onClick: () => setPage((p) => Math.max(1, p - 1)),
|
|
5301
|
+
disabled: safePage <= 1,
|
|
5302
|
+
"aria-label": "Previous page",
|
|
5303
|
+
children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
|
|
5304
|
+
}
|
|
5305
|
+
),
|
|
5306
|
+
/* @__PURE__ */ jsx(
|
|
5307
|
+
Button,
|
|
5308
|
+
{
|
|
5309
|
+
variant: "outline",
|
|
5310
|
+
size: "sm",
|
|
5311
|
+
onClick: () => setPage((p) => Math.min(totalPages, p + 1)),
|
|
5312
|
+
disabled: safePage >= totalPages,
|
|
5313
|
+
"aria-label": "Next page",
|
|
5314
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
|
|
5315
|
+
}
|
|
5316
|
+
)
|
|
5317
|
+
] })
|
|
5318
|
+
] }),
|
|
5319
|
+
productName && pageItems.length > 0 && /* @__PURE__ */ jsx("script", { type: "application/ld+json", children: JSON.stringify({
|
|
5320
|
+
"@context": "https://schema.org",
|
|
5321
|
+
"@type": "ItemList",
|
|
5322
|
+
name: `${productName} Changelog`,
|
|
5323
|
+
itemListElement: pageItems.map((entry, index) => ({
|
|
5324
|
+
"@type": "ListItem",
|
|
5325
|
+
position: (safePage - 1) * pageSize + index + 1,
|
|
5326
|
+
name: entry.title,
|
|
5327
|
+
description: typeof entry.content === "string" ? entry.content.slice(0, 200) : void 0,
|
|
5328
|
+
datePublished: entry.date
|
|
5329
|
+
}))
|
|
5330
|
+
}) })
|
|
5331
|
+
] });
|
|
5332
|
+
}
|
|
5333
|
+
function ChangelogPage(props) {
|
|
5334
|
+
const {
|
|
5335
|
+
productName,
|
|
5336
|
+
heroEyebrow = "What's new",
|
|
5337
|
+
heroTitle = "Changelog",
|
|
5338
|
+
heroSubtitle = "Platform updates, improvements, and announcements \u2014 newest first.",
|
|
5339
|
+
ctaTitle,
|
|
5340
|
+
ctaSubtitle,
|
|
5341
|
+
ctaHref,
|
|
5342
|
+
ctaLabel,
|
|
5343
|
+
className = "",
|
|
5344
|
+
seoTitle,
|
|
5345
|
+
seoDescription,
|
|
5346
|
+
seoKeywords,
|
|
5347
|
+
entries,
|
|
5348
|
+
pageSize = 10
|
|
5349
|
+
} = props;
|
|
5350
|
+
const { product } = useProduct();
|
|
5351
|
+
const resolvedProductName = productName || product?.name;
|
|
5352
|
+
const cms = useCmsChangelog();
|
|
4751
5353
|
const showCta = Boolean(ctaHref && ctaLabel);
|
|
5354
|
+
const isPropDriven = entries != null;
|
|
4752
5355
|
return /* @__PURE__ */ jsxs("div", { className: `w-full ${className}`, children: [
|
|
4753
|
-
|
|
5356
|
+
/* @__PURE__ */ jsx(
|
|
4754
5357
|
PageHead,
|
|
4755
5358
|
{
|
|
4756
|
-
title: seoTitle,
|
|
5359
|
+
title: seoTitle || heroTitle,
|
|
4757
5360
|
description: seoDescription || heroSubtitle,
|
|
4758
|
-
productName,
|
|
5361
|
+
productName: resolvedProductName,
|
|
4759
5362
|
keywords: seoKeywords
|
|
4760
5363
|
}
|
|
4761
5364
|
),
|
|
4762
5365
|
/* @__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: [
|
|
4763
5366
|
/* @__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: [
|
|
4764
|
-
/* @__PURE__ */ jsx(
|
|
4765
|
-
"svg",
|
|
4766
|
-
{
|
|
4767
|
-
className: "h-3.5 w-3.5",
|
|
4768
|
-
fill: "none",
|
|
4769
|
-
viewBox: "0 0 24 24",
|
|
4770
|
-
stroke: "currentColor",
|
|
4771
|
-
children: /* @__PURE__ */ jsx(
|
|
4772
|
-
"path",
|
|
4773
|
-
{
|
|
4774
|
-
strokeLinecap: "round",
|
|
4775
|
-
strokeLinejoin: "round",
|
|
4776
|
-
strokeWidth: 2,
|
|
4777
|
-
d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
4778
|
-
}
|
|
4779
|
-
)
|
|
4780
|
-
}
|
|
4781
|
-
),
|
|
5367
|
+
/* @__PURE__ */ jsx(History, { className: "h-3.5 w-3.5", "aria-hidden": "true" }),
|
|
4782
5368
|
heroEyebrow
|
|
4783
5369
|
] }),
|
|
4784
5370
|
/* @__PURE__ */ jsx("h1", { className: "text-4xl sm:text-5xl font-bold text-foreground mb-4", children: heroTitle }),
|
|
4785
5371
|
/* @__PURE__ */ jsx("p", { className: "text-lg text-muted-foreground", children: heroSubtitle })
|
|
4786
5372
|
] }) }),
|
|
4787
|
-
/* @__PURE__ */ jsx("section", { className: "px-4 sm:px-6 lg:px-8 pb-20", children:
|
|
4788
|
-
|
|
5373
|
+
/* @__PURE__ */ jsx("section", { className: "px-4 sm:px-6 lg:px-8 pb-20", children: isPropDriven ? /* @__PURE__ */ jsx(
|
|
5374
|
+
EntriesTimeline,
|
|
4789
5375
|
{
|
|
4790
|
-
|
|
4791
|
-
|
|
4792
|
-
|
|
4793
|
-
|
|
4794
|
-
|
|
4795
|
-
|
|
4796
|
-
] })
|
|
4797
|
-
},
|
|
4798
|
-
i
|
|
4799
|
-
)) : 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(
|
|
4800
|
-
"article",
|
|
5376
|
+
entries,
|
|
5377
|
+
pageSize,
|
|
5378
|
+
productName: resolvedProductName
|
|
5379
|
+
}
|
|
5380
|
+
) : /* @__PURE__ */ jsx(
|
|
5381
|
+
CmsTimeline,
|
|
4801
5382
|
{
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
{
|
|
4808
|
-
src: entry.thumbnail,
|
|
4809
|
-
alt: "",
|
|
4810
|
-
width: 1024,
|
|
4811
|
-
height: 576,
|
|
4812
|
-
loading: "lazy",
|
|
4813
|
-
decoding: "async",
|
|
4814
|
-
className: "w-full aspect-video object-cover border-b border-border/40"
|
|
4815
|
-
}
|
|
4816
|
-
),
|
|
4817
|
-
/* @__PURE__ */ jsxs("div", { className: "p-6 sm:p-8", children: [
|
|
4818
|
-
/* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mb-2", children: [
|
|
4819
|
-
entry.publishedAt && /* @__PURE__ */ jsx("time", { dateTime: entry.publishedAt, children: formatDate(entry.publishedAt || entry.lastUpdated) }),
|
|
4820
|
-
entry.author && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
4821
|
-
" \xB7 ",
|
|
4822
|
-
entry.author
|
|
4823
|
-
] })
|
|
4824
|
-
] }),
|
|
4825
|
-
/* @__PURE__ */ jsx("h2", { className: "text-xl sm:text-2xl font-bold text-foreground mb-4", children: entry.title }),
|
|
4826
|
-
entry.content ? /* @__PURE__ */ jsx("div", { className: "prose prose-sm prose-gray dark:prose-invert max-w-none", children: /* @__PURE__ */ jsx(
|
|
4827
|
-
ContentRenderer,
|
|
4828
|
-
{
|
|
4829
|
-
content: entry.content,
|
|
4830
|
-
format: entry.contentFormat
|
|
4831
|
-
}
|
|
4832
|
-
) }) : entry.excerpt && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: entry.excerpt })
|
|
4833
|
-
] })
|
|
4834
|
-
]
|
|
4835
|
-
},
|
|
4836
|
-
entry.id
|
|
4837
|
-
)) }) }),
|
|
5383
|
+
entries: cms.entries,
|
|
5384
|
+
loading: cms.loading,
|
|
5385
|
+
error: cms.error
|
|
5386
|
+
}
|
|
5387
|
+
) }),
|
|
4838
5388
|
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: [
|
|
4839
5389
|
ctaTitle && /* @__PURE__ */ jsx("h2", { className: "text-2xl font-bold text-foreground mb-3", children: ctaTitle }),
|
|
4840
5390
|
ctaSubtitle && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mb-7", children: ctaSubtitle }),
|
|
@@ -5649,6 +6199,180 @@ function ContractsPage(props) {
|
|
|
5649
6199
|
] });
|
|
5650
6200
|
}
|
|
5651
6201
|
|
|
5652
|
-
|
|
6202
|
+
// src/data/products.ts
|
|
6203
|
+
var ECOSYSTEM_PRODUCTS = [
|
|
6204
|
+
{
|
|
6205
|
+
slug: "workspaces",
|
|
6206
|
+
name: "Workspaces",
|
|
6207
|
+
websiteUrl: "https://burdenoff.com"
|
|
6208
|
+
},
|
|
6209
|
+
{
|
|
6210
|
+
slug: "vibecontrols",
|
|
6211
|
+
name: "VibeControls",
|
|
6212
|
+
websiteUrl: "https://vibecontrols.com"
|
|
6213
|
+
},
|
|
6214
|
+
{
|
|
6215
|
+
slug: "fluidgrids",
|
|
6216
|
+
name: "FluidGrids",
|
|
6217
|
+
websiteUrl: "https://fluidgrids.com"
|
|
6218
|
+
},
|
|
6219
|
+
{ slug: "botlit", name: "BotLit", websiteUrl: "https://botlit.com" },
|
|
6220
|
+
{
|
|
6221
|
+
slug: "bigconsole",
|
|
6222
|
+
name: "BigConsole",
|
|
6223
|
+
websiteUrl: "https://bigconsole.com"
|
|
6224
|
+
},
|
|
6225
|
+
{
|
|
6226
|
+
slug: "semanticfed",
|
|
6227
|
+
name: "SemanticFed",
|
|
6228
|
+
websiteUrl: "https://semanticfed.com"
|
|
6229
|
+
},
|
|
6230
|
+
{
|
|
6231
|
+
slug: "intelwatchtower",
|
|
6232
|
+
name: "IntelWatchTower",
|
|
6233
|
+
websiteUrl: "https://intelwatchtower.com"
|
|
6234
|
+
},
|
|
6235
|
+
{ slug: "buildmyiq", name: "BuildMyIQ", websiteUrl: "https://buildmyiq.com" },
|
|
6236
|
+
{
|
|
6237
|
+
slug: "assethandler",
|
|
6238
|
+
name: "AssetHandler",
|
|
6239
|
+
websiteUrl: "https://assethandler.com"
|
|
6240
|
+
},
|
|
6241
|
+
{
|
|
6242
|
+
slug: "crewfoundry",
|
|
6243
|
+
name: "CrewFoundry",
|
|
6244
|
+
websiteUrl: "https://crewfoundry.com"
|
|
6245
|
+
},
|
|
6246
|
+
{
|
|
6247
|
+
slug: "planmagnet",
|
|
6248
|
+
name: "PlanMagnet",
|
|
6249
|
+
websiteUrl: "https://planmagnet.com"
|
|
6250
|
+
},
|
|
6251
|
+
{
|
|
6252
|
+
slug: "eventfullymanaged",
|
|
6253
|
+
name: "EventfullyManaged",
|
|
6254
|
+
websiteUrl: "https://eventfullymanaged.com"
|
|
6255
|
+
},
|
|
6256
|
+
{
|
|
6257
|
+
slug: "headshotmarketing",
|
|
6258
|
+
name: "HeadshotMarketing Platform",
|
|
6259
|
+
websiteUrl: "https://headshotmarketing.com"
|
|
6260
|
+
},
|
|
6261
|
+
{
|
|
6262
|
+
slug: "technospam",
|
|
6263
|
+
name: "TechnoSpam",
|
|
6264
|
+
websiteUrl: "https://technospam.com"
|
|
6265
|
+
},
|
|
6266
|
+
{ slug: "kadaikodi", name: "Kadaikodi", websiteUrl: "https://kadaikodi.com" },
|
|
6267
|
+
{
|
|
6268
|
+
slug: "movethewheels",
|
|
6269
|
+
name: "MoveTheWheels",
|
|
6270
|
+
websiteUrl: "https://movethewheels.com"
|
|
6271
|
+
},
|
|
6272
|
+
{
|
|
6273
|
+
slug: "healthybowl",
|
|
6274
|
+
name: "HealthyBowl Platform",
|
|
6275
|
+
websiteUrl: "https://gethealthybowl.com"
|
|
6276
|
+
},
|
|
6277
|
+
{ slug: "ggnomad", name: "GGNomad", websiteUrl: "https://ggnomad.com" },
|
|
6278
|
+
{
|
|
6279
|
+
slug: "timecampus",
|
|
6280
|
+
name: "TimeCampus Platform",
|
|
6281
|
+
websiteUrl: "https://timecampus.com"
|
|
6282
|
+
},
|
|
6283
|
+
{
|
|
6284
|
+
slug: "manufacturedops",
|
|
6285
|
+
name: "ManufacturedOps",
|
|
6286
|
+
websiteUrl: "https://manufacturedops.com"
|
|
6287
|
+
},
|
|
6288
|
+
{
|
|
6289
|
+
slug: "theglobalfuel",
|
|
6290
|
+
name: "TheGlobalFuel",
|
|
6291
|
+
websiteUrl: "https://theglobalfuel.com"
|
|
6292
|
+
},
|
|
6293
|
+
{
|
|
6294
|
+
slug: "housingvista",
|
|
6295
|
+
name: "HousingVista",
|
|
6296
|
+
websiteUrl: "https://housingvista.com"
|
|
6297
|
+
},
|
|
6298
|
+
{
|
|
6299
|
+
slug: "proserviceworld",
|
|
6300
|
+
name: "ProServiceWorld",
|
|
6301
|
+
websiteUrl: "https://proserviceworld.com"
|
|
6302
|
+
},
|
|
6303
|
+
{
|
|
6304
|
+
slug: "mybodyshield",
|
|
6305
|
+
name: "MyBodyShield",
|
|
6306
|
+
websiteUrl: "https://mybodyshield.com"
|
|
6307
|
+
},
|
|
6308
|
+
{
|
|
6309
|
+
slug: "artistrybase",
|
|
6310
|
+
name: "ArtistryBase",
|
|
6311
|
+
websiteUrl: "https://artistrybase.com"
|
|
6312
|
+
},
|
|
6313
|
+
{
|
|
6314
|
+
slug: "theculturepost",
|
|
6315
|
+
name: "TheCulturePost",
|
|
6316
|
+
websiteUrl: "https://theculturepost.com"
|
|
6317
|
+
},
|
|
6318
|
+
{ slug: "collabkin", name: "CollabKin", websiteUrl: "https://collabkin.com" },
|
|
6319
|
+
{
|
|
6320
|
+
slug: "comradecircle",
|
|
6321
|
+
name: "ComradeCircle",
|
|
6322
|
+
websiteUrl: "https://comradecircle.com"
|
|
6323
|
+
},
|
|
6324
|
+
{
|
|
6325
|
+
slug: "brainyrich",
|
|
6326
|
+
name: "BrainyRich",
|
|
6327
|
+
websiteUrl: "https://brainyrich.com"
|
|
6328
|
+
},
|
|
6329
|
+
{
|
|
6330
|
+
slug: "cosmicintersection",
|
|
6331
|
+
name: "CosmicIntersection",
|
|
6332
|
+
websiteUrl: "https://cosmicintersection.com"
|
|
6333
|
+
},
|
|
6334
|
+
{
|
|
6335
|
+
slug: "govcitizenhub",
|
|
6336
|
+
name: "GovCitizenHub",
|
|
6337
|
+
websiteUrl: "https://govcitizenhub.com"
|
|
6338
|
+
},
|
|
6339
|
+
{
|
|
6340
|
+
slug: "adaptercloud",
|
|
6341
|
+
name: "AdapterCloud",
|
|
6342
|
+
websiteUrl: "https://adaptercloud.com"
|
|
6343
|
+
},
|
|
6344
|
+
{
|
|
6345
|
+
slug: "subscriberbot",
|
|
6346
|
+
name: "SubscriberBot",
|
|
6347
|
+
websiteUrl: "https://subscriberbot.com"
|
|
6348
|
+
},
|
|
6349
|
+
{
|
|
6350
|
+
slug: "hookmovies",
|
|
6351
|
+
name: "HookMovies",
|
|
6352
|
+
websiteUrl: "https://hookmovies.com"
|
|
6353
|
+
},
|
|
6354
|
+
{
|
|
6355
|
+
slug: "coolandlovely",
|
|
6356
|
+
name: "CoolAndLovely",
|
|
6357
|
+
websiteUrl: "https://coolandlovely.com"
|
|
6358
|
+
},
|
|
6359
|
+
{
|
|
6360
|
+
slug: "atheletebridge",
|
|
6361
|
+
name: "AthleteBridge",
|
|
6362
|
+
websiteUrl: "https://atheletebridge.com"
|
|
6363
|
+
},
|
|
6364
|
+
{
|
|
6365
|
+
slug: "labsofscience",
|
|
6366
|
+
name: "LabsOfScience",
|
|
6367
|
+
websiteUrl: "https://labsofscience.com"
|
|
6368
|
+
},
|
|
6369
|
+
{
|
|
6370
|
+
slug: "ecoimpacthub",
|
|
6371
|
+
name: "EcoImpactHub",
|
|
6372
|
+
websiteUrl: "https://ecoimpacthub.com"
|
|
6373
|
+
}
|
|
6374
|
+
];
|
|
6375
|
+
|
|
6376
|
+
export { BlogListPage, BlogPostPage, Button, CareersApplyForm, CaseStudiesListPage, CaseStudyPage, ChangelogPage, ContactPage, ContentRenderer, ContractsPage, DEFAULT_CONTACT_CATEGORIES, ECOSYSTEM_PRODUCTS, ElectronDownloadLink, Input, Label, LaunchCountdown, NewsletterForm, NewsletterPage, PageHead, PartnersPage, PressKitPage, PricingPage, PricingSection, ProblemsSolvedSection, ProductProvider, ResourceLinks, RybbitAnalytics, Select, SocialLinks, Textarea, UnsubscribePage, WaitlistForm, WaitlistPage, WebSDKClient, WebSDKProvider, WebsiteSwitcher, buttonVariants, cn, detectElectronPlatform, useContentPage, useContentPages, useProduct, useProductConfig, useWebSDK, useWebSDKConfig };
|
|
5653
6377
|
//# sourceMappingURL=index.mjs.map
|
|
5654
6378
|
//# sourceMappingURL=index.mjs.map
|