@burdenoff/website-sdk 2026.719.3 → 2026.719.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/content/index.d.mts +18 -0
- package/dist/content/index.d.ts +18 -0
- package/dist/content/index.js +488 -96
- package/dist/content/index.js.map +1 -1
- package/dist/content/index.mjs +489 -97
- package/dist/content/index.mjs.map +1 -1
- package/dist/index.js +488 -96
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +488 -96
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/content/index.js
CHANGED
|
@@ -800,6 +800,18 @@ function BlogPostPage(props) {
|
|
|
800
800
|
] });
|
|
801
801
|
}
|
|
802
802
|
var CASE_STUDY_TAG = "case-study";
|
|
803
|
+
var ANIMATION_STYLES = `
|
|
804
|
+
@keyframes csFadeUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } }
|
|
805
|
+
@keyframes csFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
|
|
806
|
+
.cs-fade-up { animation: csFadeUp 0.5s cubic-bezier(0.16, 1, 0.3, 1) both; }
|
|
807
|
+
.cs-float { animation: csFloat 7s ease-in-out infinite; }
|
|
808
|
+
@media (prefers-reduced-motion: reduce) {
|
|
809
|
+
.cs-fade-up, .cs-float { animation: none !important; }
|
|
810
|
+
}
|
|
811
|
+
`;
|
|
812
|
+
function AnimationStyles() {
|
|
813
|
+
return /* @__PURE__ */ jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: ANIMATION_STYLES } });
|
|
814
|
+
}
|
|
803
815
|
var CASE_STUDIES_QUERY = `
|
|
804
816
|
query CaseStudies($productId: String!, $limit: Int, $offset: Int) {
|
|
805
817
|
publicContentPages(productId: $productId, limit: $limit, offset: $offset) {
|
|
@@ -846,91 +858,355 @@ var CASE_STUDY_QUERY = `
|
|
|
846
858
|
}
|
|
847
859
|
}
|
|
848
860
|
`;
|
|
849
|
-
function
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
const formattedDate = date ? new Date(date).toLocaleDateString("en-US", {
|
|
861
|
+
function formatDate(value) {
|
|
862
|
+
if (!value) return "";
|
|
863
|
+
const d = new Date(value);
|
|
864
|
+
if (Number.isNaN(d.getTime())) return "";
|
|
865
|
+
return d.toLocaleDateString("en-US", {
|
|
855
866
|
year: "numeric",
|
|
856
867
|
month: "long",
|
|
857
868
|
day: "numeric"
|
|
858
|
-
})
|
|
869
|
+
});
|
|
870
|
+
}
|
|
871
|
+
function Thumbnail({
|
|
872
|
+
src,
|
|
873
|
+
alt,
|
|
874
|
+
className = ""
|
|
875
|
+
}) {
|
|
859
876
|
const [imgError, setImgError] = React.useState(false);
|
|
877
|
+
if (src && !imgError) {
|
|
878
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
879
|
+
"img",
|
|
880
|
+
{
|
|
881
|
+
src,
|
|
882
|
+
alt,
|
|
883
|
+
className,
|
|
884
|
+
loading: "lazy",
|
|
885
|
+
onError: () => setImgError(true)
|
|
886
|
+
}
|
|
887
|
+
);
|
|
888
|
+
}
|
|
889
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
890
|
+
"div",
|
|
891
|
+
{
|
|
892
|
+
className: `flex items-center justify-center bg-gradient-to-br from-muted/60 to-muted ${className}`,
|
|
893
|
+
"aria-hidden": "true",
|
|
894
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
895
|
+
"svg",
|
|
896
|
+
{
|
|
897
|
+
className: "w-12 h-12 text-muted-foreground/25",
|
|
898
|
+
fill: "none",
|
|
899
|
+
viewBox: "0 0 24 24",
|
|
900
|
+
stroke: "currentColor",
|
|
901
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
902
|
+
"path",
|
|
903
|
+
{
|
|
904
|
+
strokeLinecap: "round",
|
|
905
|
+
strokeLinejoin: "round",
|
|
906
|
+
strokeWidth: 1.5,
|
|
907
|
+
d: "M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"
|
|
908
|
+
}
|
|
909
|
+
)
|
|
910
|
+
}
|
|
911
|
+
)
|
|
912
|
+
}
|
|
913
|
+
);
|
|
914
|
+
}
|
|
915
|
+
function MetaRow({
|
|
916
|
+
post,
|
|
917
|
+
className = ""
|
|
918
|
+
}) {
|
|
919
|
+
const formattedDate = formatDate(post.publishedAt || post.lastUpdated);
|
|
920
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
921
|
+
"div",
|
|
922
|
+
{
|
|
923
|
+
className: `flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground ${className}`,
|
|
924
|
+
children: [
|
|
925
|
+
post.author && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: post.author }),
|
|
926
|
+
post.author && formattedDate && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\xB7" }),
|
|
927
|
+
formattedDate && /* @__PURE__ */ jsxRuntime.jsx("span", { children: formattedDate }),
|
|
928
|
+
post.readingTime ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
929
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\xB7" }),
|
|
930
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
931
|
+
post.readingTime,
|
|
932
|
+
" min read"
|
|
933
|
+
] })
|
|
934
|
+
] }) : null
|
|
935
|
+
]
|
|
936
|
+
}
|
|
937
|
+
);
|
|
938
|
+
}
|
|
939
|
+
function FeaturedCard({
|
|
940
|
+
post,
|
|
941
|
+
basePath
|
|
942
|
+
}) {
|
|
860
943
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
861
944
|
"a",
|
|
862
945
|
{
|
|
863
946
|
href: `${basePath}/${post.slug}`,
|
|
864
|
-
className: "group
|
|
947
|
+
className: "group relative grid md:grid-cols-2 gap-0 overflow-hidden rounded-2xl border bg-card shadow-sm transition-all duration-300 hover:-translate-y-1 hover:shadow-xl hover:border-primary/40",
|
|
865
948
|
children: [
|
|
866
|
-
|
|
867
|
-
|
|
949
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative aspect-[16/10] md:aspect-auto md:h-full overflow-hidden", children: [
|
|
950
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
951
|
+
Thumbnail,
|
|
952
|
+
{
|
|
953
|
+
src: post.thumbnail,
|
|
954
|
+
alt: post.title,
|
|
955
|
+
className: "w-full h-full min-h-[220px] object-cover transition-transform duration-500 group-hover:scale-[1.04]"
|
|
956
|
+
}
|
|
957
|
+
),
|
|
958
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "absolute top-4 left-4 inline-flex items-center gap-1 rounded-full bg-primary px-2.5 py-1 text-xs font-semibold text-primary-foreground shadow-sm", children: [
|
|
959
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
960
|
+
"svg",
|
|
961
|
+
{
|
|
962
|
+
className: "h-3 w-3",
|
|
963
|
+
viewBox: "0 0 20 20",
|
|
964
|
+
fill: "currentColor",
|
|
965
|
+
"aria-hidden": "true",
|
|
966
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.286 3.957a1 1 0 00.95.69h4.162c.969 0 1.371 1.24.588 1.81l-3.368 2.447a1 1 0 00-.364 1.118l1.287 3.957c.3.921-.755 1.688-1.54 1.118l-3.367-2.447a1 1 0 00-1.176 0l-3.367 2.447c-.784.57-1.838-.197-1.539-1.118l1.286-3.957a1 1 0 00-.363-1.118L2.98 9.384c-.783-.57-.38-1.81.588-1.81h4.162a1 1 0 00.95-.69l1.286-3.957z" })
|
|
967
|
+
}
|
|
968
|
+
),
|
|
969
|
+
"Featured"
|
|
970
|
+
] })
|
|
971
|
+
] }),
|
|
972
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col justify-center p-6 sm:p-8", children: [
|
|
973
|
+
post.category && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mb-3 inline-block w-fit rounded-full bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary", children: post.category }),
|
|
974
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl sm:text-2xl font-bold text-foreground transition-colors group-hover:text-primary line-clamp-3", children: post.title }),
|
|
975
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-sm sm:text-base text-muted-foreground line-clamp-3", children: post.excerpt || post.seoDescription || "" }),
|
|
976
|
+
/* @__PURE__ */ jsxRuntime.jsx(MetaRow, { post, className: "mt-5" }),
|
|
977
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "mt-5 inline-flex items-center gap-1 text-sm font-semibold text-primary", children: [
|
|
978
|
+
"Read the story",
|
|
979
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
980
|
+
"svg",
|
|
981
|
+
{
|
|
982
|
+
className: "h-4 w-4 transition-transform duration-300 group-hover:translate-x-1",
|
|
983
|
+
viewBox: "0 0 20 20",
|
|
984
|
+
fill: "currentColor",
|
|
985
|
+
"aria-hidden": "true",
|
|
986
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
987
|
+
"path",
|
|
988
|
+
{
|
|
989
|
+
fillRule: "evenodd",
|
|
990
|
+
d: "M7.293 4.293a1 1 0 011.414 0l5 5a1 1 0 010 1.414l-5 5a1 1 0 01-1.414-1.414L11.586 10 7.293 5.707a1 1 0 010-1.414z",
|
|
991
|
+
clipRule: "evenodd"
|
|
992
|
+
}
|
|
993
|
+
)
|
|
994
|
+
}
|
|
995
|
+
)
|
|
996
|
+
] })
|
|
997
|
+
] })
|
|
998
|
+
]
|
|
999
|
+
}
|
|
1000
|
+
);
|
|
1001
|
+
}
|
|
1002
|
+
function CaseStudyCard({
|
|
1003
|
+
post,
|
|
1004
|
+
basePath = "/case-studies"
|
|
1005
|
+
}) {
|
|
1006
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1007
|
+
"a",
|
|
1008
|
+
{
|
|
1009
|
+
href: `${basePath}/${post.slug}`,
|
|
1010
|
+
className: "group flex flex-col overflow-hidden rounded-xl border bg-card transition-all duration-300 hover:-translate-y-1 hover:shadow-lg hover:border-primary/40",
|
|
1011
|
+
children: [
|
|
1012
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9] overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1013
|
+
Thumbnail,
|
|
868
1014
|
{
|
|
869
1015
|
src: post.thumbnail,
|
|
870
1016
|
alt: post.title,
|
|
871
|
-
className: "w-full h-full object-cover group-hover:scale-105
|
|
872
|
-
loading: "lazy",
|
|
873
|
-
onError: () => setImgError(true)
|
|
1017
|
+
className: "w-full h-full object-cover transition-transform duration-500 group-hover:scale-105"
|
|
874
1018
|
}
|
|
875
|
-
) })
|
|
1019
|
+
) }),
|
|
1020
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 flex-col p-5 sm:p-6", children: [
|
|
1021
|
+
post.category && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mb-3 inline-block w-fit rounded-full bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary", children: post.category }),
|
|
1022
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mb-2 text-lg font-semibold text-foreground transition-colors group-hover:text-primary line-clamp-2", children: post.title }),
|
|
1023
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-4 text-sm text-muted-foreground line-clamp-3", children: post.excerpt || post.seoDescription || "" }),
|
|
1024
|
+
/* @__PURE__ */ jsxRuntime.jsx(MetaRow, { post, className: "mt-auto" })
|
|
1025
|
+
] })
|
|
1026
|
+
]
|
|
1027
|
+
}
|
|
1028
|
+
);
|
|
1029
|
+
}
|
|
1030
|
+
function EmptyState({
|
|
1031
|
+
productLabel,
|
|
1032
|
+
title,
|
|
1033
|
+
subtitle,
|
|
1034
|
+
contactHref,
|
|
1035
|
+
contactLabel,
|
|
1036
|
+
exploreHref,
|
|
1037
|
+
exploreLabel
|
|
1038
|
+
}) {
|
|
1039
|
+
const highlights = [
|
|
1040
|
+
{
|
|
1041
|
+
title: "Real outcomes, real teams",
|
|
1042
|
+
body: `We're partnering with our earliest adopters right now. As they ship results with ${productLabel}, their stories will land here \u2014 measured and unembellished.`,
|
|
1043
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1044
|
+
"path",
|
|
1045
|
+
{
|
|
1046
|
+
strokeLinecap: "round",
|
|
1047
|
+
strokeLinejoin: "round",
|
|
1048
|
+
strokeWidth: 1.5,
|
|
1049
|
+
d: "M3 13.125C3 12.504 3.504 12 4.125 12h2.25c.621 0 1.125.504 1.125 1.125v6.75C7.5 20.496 6.996 21 6.375 21h-2.25A1.125 1.125 0 013 19.875v-6.75zM9.75 8.625c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125v11.25c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V8.625zM16.5 4.125c0-.621.504-1.125 1.125-1.125h2.25C20.496 3 21 3.504 21 4.125v15.75c0 .621-.504 1.125-1.125 1.125h-2.25a1.125 1.125 0 01-1.125-1.125V4.125z"
|
|
1050
|
+
}
|
|
1051
|
+
)
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
title: "See it on your use case",
|
|
1055
|
+
body: `Want to know how ${productLabel} would work for your team? We'll walk you through exactly what to expect \u2014 no pitch, just specifics.`,
|
|
1056
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1057
|
+
"path",
|
|
1058
|
+
{
|
|
1059
|
+
strokeLinecap: "round",
|
|
1060
|
+
strokeLinejoin: "round",
|
|
1061
|
+
strokeWidth: 1.5,
|
|
1062
|
+
d: "M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z M15 12a3 3 0 11-6 0 3 3 0 016 0z"
|
|
1063
|
+
}
|
|
1064
|
+
)
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
title: "Be the first story",
|
|
1068
|
+
body: `Building something with ${productLabel} worth talking about? Tell us \u2014 the best early stories become the case studies featured on this page.`,
|
|
1069
|
+
icon: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1070
|
+
"path",
|
|
1071
|
+
{
|
|
1072
|
+
strokeLinecap: "round",
|
|
1073
|
+
strokeLinejoin: "round",
|
|
1074
|
+
strokeWidth: 1.5,
|
|
1075
|
+
d: "M11.48 3.499a.562.562 0 011.04 0l2.125 5.111a.563.563 0 00.475.345l5.518.442c.499.04.701.663.321.988l-4.204 3.602a.563.563 0 00-.182.557l1.285 5.385a.562.562 0 01-.84.61l-4.725-2.885a.562.562 0 00-.586 0L6.982 20.54a.562.562 0 01-.84-.61l1.285-5.386a.562.562 0 00-.182-.557l-4.204-3.602a.562.562 0 01.321-.988l5.518-.442a.563.563 0 00.475-.345L11.48 3.5z"
|
|
1076
|
+
}
|
|
1077
|
+
)
|
|
1078
|
+
}
|
|
1079
|
+
];
|
|
1080
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cs-fade-up mx-auto max-w-4xl", children: [
|
|
1081
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative overflow-hidden rounded-3xl border bg-card px-6 py-14 text-center sm:px-12 sm:py-16", children: [
|
|
1082
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1083
|
+
"div",
|
|
1084
|
+
{
|
|
1085
|
+
className: "pointer-events-none absolute -top-24 -right-16 h-64 w-64 rounded-full bg-primary/10 blur-3xl",
|
|
1086
|
+
"aria-hidden": "true"
|
|
1087
|
+
}
|
|
1088
|
+
),
|
|
1089
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1090
|
+
"div",
|
|
1091
|
+
{
|
|
1092
|
+
className: "pointer-events-none absolute -bottom-24 -left-16 h-64 w-64 rounded-full bg-primary/5 blur-3xl",
|
|
1093
|
+
"aria-hidden": "true"
|
|
1094
|
+
}
|
|
1095
|
+
),
|
|
1096
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
1097
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "cs-float mx-auto flex h-20 w-20 items-center justify-center rounded-2xl bg-primary/10 text-primary ring-1 ring-primary/20", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
876
1098
|
"svg",
|
|
877
1099
|
{
|
|
878
|
-
className: "
|
|
1100
|
+
className: "h-10 w-10",
|
|
879
1101
|
fill: "none",
|
|
880
1102
|
viewBox: "0 0 24 24",
|
|
881
1103
|
stroke: "currentColor",
|
|
1104
|
+
"aria-hidden": "true",
|
|
882
1105
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
883
1106
|
"path",
|
|
884
1107
|
{
|
|
885
1108
|
strokeLinecap: "round",
|
|
886
1109
|
strokeLinejoin: "round",
|
|
887
1110
|
strokeWidth: 1.5,
|
|
888
|
-
d: "
|
|
1111
|
+
d: "M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z"
|
|
889
1112
|
}
|
|
890
1113
|
)
|
|
891
1114
|
}
|
|
892
1115
|
) }),
|
|
893
|
-
/* @__PURE__ */ jsxRuntime.
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
/* @__PURE__ */ jsxRuntime.
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
1116
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "mt-8 text-2xl font-bold tracking-tight text-foreground sm:text-3xl", children: title }),
|
|
1117
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mx-auto mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground sm:text-lg", children: subtitle }),
|
|
1118
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row", children: [
|
|
1119
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1120
|
+
"a",
|
|
1121
|
+
{
|
|
1122
|
+
href: contactHref,
|
|
1123
|
+
className: "inline-flex w-full items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3 text-sm font-semibold text-primary-foreground shadow-sm transition-all hover:opacity-90 hover:shadow-md sm:w-auto",
|
|
1124
|
+
children: [
|
|
1125
|
+
contactLabel,
|
|
1126
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1127
|
+
"svg",
|
|
1128
|
+
{
|
|
1129
|
+
className: "h-4 w-4",
|
|
1130
|
+
viewBox: "0 0 20 20",
|
|
1131
|
+
fill: "currentColor",
|
|
1132
|
+
"aria-hidden": "true",
|
|
1133
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1134
|
+
"path",
|
|
1135
|
+
{
|
|
1136
|
+
fillRule: "evenodd",
|
|
1137
|
+
d: "M7.293 4.293a1 1 0 011.414 0l5 5a1 1 0 010 1.414l-5 5a1 1 0 01-1.414-1.414L11.586 10 7.293 5.707a1 1 0 010-1.414z",
|
|
1138
|
+
clipRule: "evenodd"
|
|
1139
|
+
}
|
|
1140
|
+
)
|
|
1141
|
+
}
|
|
1142
|
+
)
|
|
1143
|
+
]
|
|
1144
|
+
}
|
|
1145
|
+
),
|
|
1146
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1147
|
+
"a",
|
|
1148
|
+
{
|
|
1149
|
+
href: exploreHref,
|
|
1150
|
+
className: "inline-flex w-full items-center justify-center gap-2 rounded-lg border border-border bg-background px-6 py-3 text-sm font-semibold text-foreground transition-colors hover:bg-muted sm:w-auto",
|
|
1151
|
+
children: exploreLabel
|
|
1152
|
+
}
|
|
1153
|
+
)
|
|
909
1154
|
] })
|
|
910
|
-
]
|
|
911
|
-
}
|
|
912
|
-
|
|
1155
|
+
] })
|
|
1156
|
+
] }),
|
|
1157
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-8 grid gap-4 sm:grid-cols-3", children: highlights.map((h) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1158
|
+
"div",
|
|
1159
|
+
{
|
|
1160
|
+
className: "rounded-2xl border bg-card/60 p-5 text-left transition-colors hover:border-primary/30",
|
|
1161
|
+
children: [
|
|
1162
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 text-primary", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1163
|
+
"svg",
|
|
1164
|
+
{
|
|
1165
|
+
className: "h-5 w-5",
|
|
1166
|
+
fill: "none",
|
|
1167
|
+
viewBox: "0 0 24 24",
|
|
1168
|
+
stroke: "currentColor",
|
|
1169
|
+
"aria-hidden": "true",
|
|
1170
|
+
children: h.icon
|
|
1171
|
+
}
|
|
1172
|
+
) }),
|
|
1173
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "mt-4 text-sm font-semibold text-foreground", children: h.title }),
|
|
1174
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-sm leading-relaxed text-muted-foreground", children: h.body })
|
|
1175
|
+
]
|
|
1176
|
+
},
|
|
1177
|
+
h.title
|
|
1178
|
+
)) })
|
|
1179
|
+
] });
|
|
913
1180
|
}
|
|
914
1181
|
function CaseStudiesListPage(props) {
|
|
915
1182
|
const {
|
|
916
1183
|
productName,
|
|
1184
|
+
eyebrow = "Customer Stories",
|
|
917
1185
|
heroTitle = "Case Studies",
|
|
918
|
-
heroSubtitle = "Real-world stories of teams building with our platform",
|
|
1186
|
+
heroSubtitle = "Real-world stories of teams building with our platform.",
|
|
919
1187
|
caseStudyBasePath = "/case-studies",
|
|
920
1188
|
className = "",
|
|
921
1189
|
seoTitle,
|
|
922
1190
|
seoDescription,
|
|
923
|
-
seoKeywords
|
|
1191
|
+
seoKeywords,
|
|
1192
|
+
contactHref = "/contact",
|
|
1193
|
+
contactLabel = "Get in touch",
|
|
1194
|
+
exploreHref = "/features",
|
|
1195
|
+
exploreLabel = "Explore the product",
|
|
1196
|
+
emptyTitle,
|
|
1197
|
+
emptySubtitle
|
|
924
1198
|
} = props;
|
|
925
1199
|
const client = useWebSDK();
|
|
926
1200
|
const config = useWebSDKConfig();
|
|
927
1201
|
const { product } = useProduct();
|
|
928
1202
|
const resolvedProductId = product?.id || config.productId;
|
|
1203
|
+
const productLabel = product?.name || productName || "our platform";
|
|
929
1204
|
const [posts, setPosts] = React.useState([]);
|
|
930
1205
|
const [total, setTotal] = React.useState(0);
|
|
931
1206
|
const [loading, setLoading] = React.useState(true);
|
|
932
1207
|
const [error, setError] = React.useState(null);
|
|
933
1208
|
const [offset, setOffset] = React.useState(0);
|
|
1209
|
+
const [activeCategory, setActiveCategory] = React.useState("All");
|
|
934
1210
|
const limit = 12;
|
|
935
1211
|
const fetchPosts = React.useCallback(async () => {
|
|
936
1212
|
if (!resolvedProductId) return;
|
|
@@ -943,6 +1219,7 @@ function CaseStudiesListPage(props) {
|
|
|
943
1219
|
});
|
|
944
1220
|
if (result.errors?.length) {
|
|
945
1221
|
setError(result.errors[0]?.message ?? "Failed to load case studies");
|
|
1222
|
+
setPosts([]);
|
|
946
1223
|
return;
|
|
947
1224
|
}
|
|
948
1225
|
const caseStudies = (result.data?.publicContentPages?.items || []).filter(
|
|
@@ -952,7 +1229,8 @@ function CaseStudiesListPage(props) {
|
|
|
952
1229
|
setTotal(result.data?.publicContentPages?.total || 0);
|
|
953
1230
|
setError(null);
|
|
954
1231
|
} catch {
|
|
955
|
-
setError("
|
|
1232
|
+
setError("load-failed");
|
|
1233
|
+
setPosts([]);
|
|
956
1234
|
} finally {
|
|
957
1235
|
setLoading(false);
|
|
958
1236
|
}
|
|
@@ -960,9 +1238,25 @@ function CaseStudiesListPage(props) {
|
|
|
960
1238
|
React.useEffect(() => {
|
|
961
1239
|
fetchPosts();
|
|
962
1240
|
}, [fetchPosts]);
|
|
963
|
-
const
|
|
964
|
-
|
|
965
|
-
|
|
1241
|
+
const categories = React.useMemo(() => {
|
|
1242
|
+
const set = /* @__PURE__ */ new Set();
|
|
1243
|
+
posts.forEach((p) => {
|
|
1244
|
+
if (p.category) set.add(p.category);
|
|
1245
|
+
});
|
|
1246
|
+
return ["All", ...Array.from(set)];
|
|
1247
|
+
}, [posts]);
|
|
1248
|
+
const visiblePosts = React.useMemo(() => {
|
|
1249
|
+
if (activeCategory === "All") return posts;
|
|
1250
|
+
return posts.filter((p) => p.category === activeCategory);
|
|
1251
|
+
}, [posts, activeCategory]);
|
|
1252
|
+
const featuredPosts = visiblePosts.filter((p) => p.featured);
|
|
1253
|
+
const regularPosts = visiblePosts.filter((p) => !p.featured);
|
|
1254
|
+
const hasContent = !loading && !error && posts.length > 0;
|
|
1255
|
+
const showEmpty = !loading && (error !== null || posts.length === 0);
|
|
1256
|
+
const resolvedEmptyTitle = emptyTitle ?? "Case studies are on the way";
|
|
1257
|
+
const resolvedEmptySubtitle = emptySubtitle ?? `${productLabel} is early in its journey, and we'd rather show you real, measurable results than filler. We're working closely with our first teams now \u2014 their stories will be published here soon. In the meantime, we'd love to show you what's possible.`;
|
|
1258
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `w-full ${className}`, "data-cs": "case-studies-v2", children: [
|
|
1259
|
+
/* @__PURE__ */ jsxRuntime.jsx(AnimationStyles, {}),
|
|
966
1260
|
seoTitle && /* @__PURE__ */ jsxRuntime.jsx(
|
|
967
1261
|
PageHead,
|
|
968
1262
|
{
|
|
@@ -972,35 +1266,69 @@ function CaseStudiesListPage(props) {
|
|
|
972
1266
|
keywords: seoKeywords
|
|
973
1267
|
}
|
|
974
1268
|
),
|
|
975
|
-
/* @__PURE__ */ jsxRuntime.
|
|
976
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
1269
|
+
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "relative overflow-hidden", children: [
|
|
1270
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1271
|
+
"div",
|
|
1272
|
+
{
|
|
1273
|
+
className: "pointer-events-none absolute inset-x-0 -top-32 mx-auto h-72 max-w-3xl rounded-full bg-primary/10 blur-3xl",
|
|
1274
|
+
"aria-hidden": "true"
|
|
1275
|
+
}
|
|
1276
|
+
),
|
|
1277
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mx-auto max-w-7xl px-4 py-16 sm:px-6 sm:py-20 md:py-24 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-3xl text-center", children: [
|
|
1278
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-2 rounded-full border border-primary/20 bg-primary/10 px-3 py-1 text-xs font-semibold uppercase tracking-wide text-primary", children: [
|
|
1279
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-primary" }),
|
|
1280
|
+
eyebrow
|
|
1281
|
+
] }),
|
|
1282
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-5 text-3xl font-bold tracking-tight text-foreground sm:text-4xl md:text-5xl", children: heroTitle }),
|
|
1283
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: heroSubtitle })
|
|
1284
|
+
] }) })
|
|
1285
|
+
] }),
|
|
1286
|
+
/* @__PURE__ */ jsxRuntime.jsx("section", { className: "pb-20 sm:pb-24", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: loading ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-6 sm:gap-8 md:grid-cols-2 lg:grid-cols-3", children: [1, 2, 3, 4, 5, 6].map((i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
980
1287
|
"div",
|
|
981
1288
|
{
|
|
982
|
-
className: "
|
|
1289
|
+
className: "overflow-hidden rounded-xl border bg-card animate-pulse",
|
|
983
1290
|
children: [
|
|
984
1291
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9] bg-muted" }),
|
|
985
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "
|
|
986
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4
|
|
987
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-6
|
|
988
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 bg-muted
|
|
989
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4
|
|
1292
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 p-6", children: [
|
|
1293
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-1/4 rounded bg-muted" }),
|
|
1294
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-6 w-3/4 rounded bg-muted" }),
|
|
1295
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 rounded bg-muted" }),
|
|
1296
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-1/2 rounded bg-muted" })
|
|
990
1297
|
] })
|
|
991
1298
|
]
|
|
992
1299
|
},
|
|
993
1300
|
i
|
|
994
|
-
)) }) :
|
|
995
|
-
|
|
996
|
-
|
|
1301
|
+
)) }) : showEmpty ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1302
|
+
EmptyState,
|
|
1303
|
+
{
|
|
1304
|
+
productLabel,
|
|
1305
|
+
title: resolvedEmptyTitle,
|
|
1306
|
+
subtitle: resolvedEmptySubtitle,
|
|
1307
|
+
contactHref,
|
|
1308
|
+
contactLabel,
|
|
1309
|
+
exploreHref,
|
|
1310
|
+
exploreLabel
|
|
1311
|
+
}
|
|
1312
|
+
) : hasContent ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1313
|
+
categories.length > 2 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-10 flex flex-wrap justify-center gap-2", children: categories.map((cat) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1314
|
+
"button",
|
|
1315
|
+
{
|
|
1316
|
+
type: "button",
|
|
1317
|
+
onClick: () => setActiveCategory(cat),
|
|
1318
|
+
className: `rounded-full border px-4 py-1.5 text-sm font-medium transition-colors ${activeCategory === cat ? "border-primary bg-primary text-primary-foreground" : "border-border bg-background text-muted-foreground hover:border-primary/40 hover:text-foreground"}`,
|
|
1319
|
+
children: cat
|
|
1320
|
+
},
|
|
1321
|
+
cat
|
|
1322
|
+
)) }),
|
|
1323
|
+
featuredPosts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-10 grid gap-6 sm:gap-8 lg:grid-cols-2", children: featuredPosts.map((post) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1324
|
+
FeaturedCard,
|
|
997
1325
|
{
|
|
998
1326
|
post,
|
|
999
1327
|
basePath: caseStudyBasePath
|
|
1000
1328
|
},
|
|
1001
1329
|
post.id
|
|
1002
1330
|
)) }),
|
|
1003
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid md:grid-cols-2 lg:grid-cols-3
|
|
1331
|
+
regularPosts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-6 sm:gap-8 md:grid-cols-2 lg:grid-cols-3", children: regularPosts.map((post) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1004
1332
|
CaseStudyCard,
|
|
1005
1333
|
{
|
|
1006
1334
|
post,
|
|
@@ -1008,13 +1336,13 @@ function CaseStudiesListPage(props) {
|
|
|
1008
1336
|
},
|
|
1009
1337
|
post.id
|
|
1010
1338
|
)) }),
|
|
1011
|
-
total > limit && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-center gap-4
|
|
1339
|
+
activeCategory === "All" && total > limit && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-14 flex justify-center gap-4", children: [
|
|
1012
1340
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1013
1341
|
"button",
|
|
1014
1342
|
{
|
|
1015
1343
|
onClick: () => setOffset(Math.max(0, offset - limit)),
|
|
1016
1344
|
disabled: offset === 0,
|
|
1017
|
-
className: "px-5 py-2.5 text-sm font-medium
|
|
1345
|
+
className: "rounded-lg border px-5 py-2.5 text-sm font-medium transition-colors hover:bg-muted disabled:opacity-40",
|
|
1018
1346
|
children: "Previous"
|
|
1019
1347
|
}
|
|
1020
1348
|
),
|
|
@@ -1023,12 +1351,29 @@ function CaseStudiesListPage(props) {
|
|
|
1023
1351
|
{
|
|
1024
1352
|
onClick: () => setOffset(offset + limit),
|
|
1025
1353
|
disabled: offset + limit >= total,
|
|
1026
|
-
className: "px-5 py-2.5 text-sm font-medium
|
|
1354
|
+
className: "rounded-lg border px-5 py-2.5 text-sm font-medium transition-colors hover:bg-muted disabled:opacity-40",
|
|
1027
1355
|
children: "Next"
|
|
1028
1356
|
}
|
|
1029
1357
|
)
|
|
1358
|
+
] }),
|
|
1359
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-16 overflow-hidden rounded-2xl border bg-gradient-to-br from-primary/10 via-card to-card p-8 text-center sm:p-10", children: [
|
|
1360
|
+
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-xl font-bold text-foreground sm:text-2xl", children: "Want results like these?" }),
|
|
1361
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mx-auto mt-2 max-w-xl text-sm text-muted-foreground sm:text-base", children: [
|
|
1362
|
+
"Tell us about your goals and we\u2019ll show you exactly how",
|
|
1363
|
+
" ",
|
|
1364
|
+
productLabel,
|
|
1365
|
+
" can help."
|
|
1366
|
+
] }),
|
|
1367
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1368
|
+
"a",
|
|
1369
|
+
{
|
|
1370
|
+
href: contactHref,
|
|
1371
|
+
className: "mt-6 inline-flex items-center justify-center gap-2 rounded-lg bg-primary px-6 py-3 text-sm font-semibold text-primary-foreground shadow-sm transition-all hover:opacity-90 hover:shadow-md",
|
|
1372
|
+
children: contactLabel
|
|
1373
|
+
}
|
|
1374
|
+
)
|
|
1030
1375
|
] })
|
|
1031
|
-
] }) }) })
|
|
1376
|
+
] }) : null }) })
|
|
1032
1377
|
] });
|
|
1033
1378
|
}
|
|
1034
1379
|
function CaseStudyPage(props) {
|
|
@@ -1036,12 +1381,15 @@ function CaseStudyPage(props) {
|
|
|
1036
1381
|
productName,
|
|
1037
1382
|
caseStudiesListUrl = "/case-studies",
|
|
1038
1383
|
backLabel = "Back to Case Studies",
|
|
1384
|
+
contactHref = "/contact",
|
|
1385
|
+
contactLabel = "Get in touch",
|
|
1039
1386
|
className = ""
|
|
1040
1387
|
} = props;
|
|
1041
1388
|
const client = useWebSDK();
|
|
1042
1389
|
const config = useWebSDKConfig();
|
|
1043
1390
|
const { product } = useProduct();
|
|
1044
1391
|
const resolvedProductId = product?.id || config.productId;
|
|
1392
|
+
const productLabel = product?.name || productName || "our team";
|
|
1045
1393
|
const [post, setPost] = React.useState(null);
|
|
1046
1394
|
const [loading, setLoading] = React.useState(true);
|
|
1047
1395
|
const [error, setError] = React.useState(null);
|
|
@@ -1070,36 +1418,64 @@ function CaseStudyPage(props) {
|
|
|
1070
1418
|
fetchPost();
|
|
1071
1419
|
}, [client, slug, resolvedProductId]);
|
|
1072
1420
|
if (loading) {
|
|
1073
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-full ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-4xl
|
|
1074
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-8
|
|
1075
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4
|
|
1076
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9] bg-muted
|
|
1077
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 bg-muted
|
|
1421
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-full ${className}`, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto max-w-4xl px-4 py-24 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "animate-pulse space-y-6", children: [
|
|
1422
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-8 w-2/3 rounded bg-muted" }),
|
|
1423
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-1/3 rounded bg-muted" }),
|
|
1424
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9] rounded-xl bg-muted" }),
|
|
1425
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 rounded bg-muted" }, i)) })
|
|
1078
1426
|
] }) }) });
|
|
1079
1427
|
}
|
|
1080
1428
|
if (error || !post) {
|
|
1081
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-full ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-
|
|
1082
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
1083
|
-
|
|
1084
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1085
|
-
"a",
|
|
1429
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `w-full ${className}`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto max-w-2xl px-4 py-24 text-center sm:px-6 lg:px-8", children: [
|
|
1430
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-auto flex h-16 w-16 items-center justify-center rounded-2xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1431
|
+
"svg",
|
|
1086
1432
|
{
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1433
|
+
className: "h-8 w-8",
|
|
1434
|
+
fill: "none",
|
|
1435
|
+
viewBox: "0 0 24 24",
|
|
1436
|
+
stroke: "currentColor",
|
|
1437
|
+
"aria-hidden": "true",
|
|
1438
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1439
|
+
"path",
|
|
1440
|
+
{
|
|
1441
|
+
strokeLinecap: "round",
|
|
1442
|
+
strokeLinejoin: "round",
|
|
1443
|
+
strokeWidth: 1.5,
|
|
1444
|
+
d: "M9.879 7.519c1.171-1.025 3.071-1.025 4.242 0 1.172 1.025 1.172 2.687 0 3.712-.203.179-.43.326-.67.442-.745.361-1.45.999-1.45 1.827v.75M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9 5.25h.008v.008H12v-.008z"
|
|
1445
|
+
}
|
|
1446
|
+
)
|
|
1093
1447
|
}
|
|
1094
|
-
)
|
|
1448
|
+
) }),
|
|
1449
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mt-6 text-2xl font-bold text-foreground", children: "Case study not found" }),
|
|
1450
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mx-auto mt-3 max-w-md text-muted-foreground", children: [
|
|
1451
|
+
"This story isn\u2019t available yet \u2014 but there\u2019s plenty more to explore, and we\u2019re always happy to talk through what ",
|
|
1452
|
+
productLabel,
|
|
1453
|
+
" can do."
|
|
1454
|
+
] }),
|
|
1455
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row", children: [
|
|
1456
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1457
|
+
"a",
|
|
1458
|
+
{
|
|
1459
|
+
href: caseStudiesListUrl,
|
|
1460
|
+
className: "inline-flex items-center justify-center rounded-lg border px-5 py-2.5 text-sm font-semibold text-foreground transition-colors hover:bg-muted",
|
|
1461
|
+
children: [
|
|
1462
|
+
"\u2190 ",
|
|
1463
|
+
backLabel
|
|
1464
|
+
]
|
|
1465
|
+
}
|
|
1466
|
+
),
|
|
1467
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1468
|
+
"a",
|
|
1469
|
+
{
|
|
1470
|
+
href: contactHref,
|
|
1471
|
+
className: "inline-flex items-center justify-center rounded-lg bg-primary px-5 py-2.5 text-sm font-semibold text-primary-foreground transition-all hover:opacity-90",
|
|
1472
|
+
children: contactLabel
|
|
1473
|
+
}
|
|
1474
|
+
)
|
|
1475
|
+
] })
|
|
1095
1476
|
] }) });
|
|
1096
1477
|
}
|
|
1097
|
-
const
|
|
1098
|
-
const formattedDate = date ? new Date(date).toLocaleDateString("en-US", {
|
|
1099
|
-
year: "numeric",
|
|
1100
|
-
month: "long",
|
|
1101
|
-
day: "numeric"
|
|
1102
|
-
}) : "";
|
|
1478
|
+
const formattedDate = formatDate(post.publishedAt || post.lastUpdated);
|
|
1103
1479
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `w-full ${className}`, children: [
|
|
1104
1480
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1105
1481
|
PageHead,
|
|
@@ -1110,41 +1486,57 @@ function CaseStudyPage(props) {
|
|
|
1110
1486
|
keywords: post.seoKeywords || ""
|
|
1111
1487
|
}
|
|
1112
1488
|
),
|
|
1113
|
-
/* @__PURE__ */ jsxRuntime.jsxs("article", { className: "max-w-4xl
|
|
1489
|
+
/* @__PURE__ */ jsxRuntime.jsxs("article", { className: "mx-auto max-w-4xl px-4 py-16 sm:px-6 sm:py-20 lg:px-8", children: [
|
|
1114
1490
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
1115
1491
|
"a",
|
|
1116
1492
|
{
|
|
1117
1493
|
href: caseStudiesListUrl,
|
|
1118
|
-
className: "inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground
|
|
1494
|
+
className: "mb-8 inline-flex items-center gap-1 text-sm text-muted-foreground transition-colors hover:text-foreground",
|
|
1119
1495
|
children: [
|
|
1120
1496
|
"\u2190 ",
|
|
1121
1497
|
backLabel
|
|
1122
1498
|
]
|
|
1123
1499
|
}
|
|
1124
1500
|
),
|
|
1125
|
-
post.category && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block
|
|
1126
|
-
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "
|
|
1127
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3 text-sm text-muted-foreground
|
|
1501
|
+
post.category && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "mb-4 inline-block rounded-full bg-primary/10 px-2.5 py-1 text-xs font-medium text-primary", children: post.category }),
|
|
1502
|
+
/* @__PURE__ */ jsxRuntime.jsx("h1", { className: "mb-4 text-3xl font-bold tracking-tight text-foreground sm:text-4xl md:text-5xl", children: post.title }),
|
|
1503
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-8 flex flex-wrap items-center gap-3 text-sm text-muted-foreground", children: [
|
|
1128
1504
|
post.author && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: post.author }),
|
|
1129
1505
|
post.author && formattedDate && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\xB7" }),
|
|
1130
1506
|
formattedDate && /* @__PURE__ */ jsxRuntime.jsx("span", { children: formattedDate }),
|
|
1131
|
-
post.readingTime
|
|
1507
|
+
post.readingTime ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1132
1508
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "\xB7" }),
|
|
1133
1509
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
|
|
1134
1510
|
post.readingTime,
|
|
1135
1511
|
" min read"
|
|
1136
1512
|
] })
|
|
1137
|
-
] })
|
|
1513
|
+
] }) : null
|
|
1138
1514
|
] }),
|
|
1139
|
-
post.thumbnail && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-[16/9]
|
|
1515
|
+
post.thumbnail && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-10 aspect-[16/9] overflow-hidden rounded-xl", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1140
1516
|
"img",
|
|
1141
1517
|
{
|
|
1142
1518
|
src: post.thumbnail,
|
|
1143
1519
|
alt: post.title,
|
|
1144
|
-
className: "
|
|
1520
|
+
className: "h-full w-full object-cover"
|
|
1145
1521
|
}
|
|
1146
1522
|
) }),
|
|
1147
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-gray dark:prose-invert
|
|
1523
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-gray max-w-none dark:prose-invert", children: /* @__PURE__ */ jsxRuntime.jsx(ContentRenderer, { content: post.content, format: post.contentFormat }) }),
|
|
1524
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-14 rounded-2xl border bg-gradient-to-br from-primary/10 via-card to-card p-8 text-center", children: [
|
|
1525
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h2", { className: "text-xl font-bold text-foreground", children: [
|
|
1526
|
+
"Curious what ",
|
|
1527
|
+
productLabel,
|
|
1528
|
+
" could do for you?"
|
|
1529
|
+
] }),
|
|
1530
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mx-auto mt-2 max-w-lg text-sm text-muted-foreground", children: "We\u2019re happy to walk you through it \u2014 no pressure, just a conversation about your goals." }),
|
|
1531
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1532
|
+
"a",
|
|
1533
|
+
{
|
|
1534
|
+
href: contactHref,
|
|
1535
|
+
className: "mt-6 inline-flex items-center justify-center rounded-lg bg-primary px-6 py-3 text-sm font-semibold text-primary-foreground shadow-sm transition-all hover:opacity-90 hover:shadow-md",
|
|
1536
|
+
children: contactLabel
|
|
1537
|
+
}
|
|
1538
|
+
)
|
|
1539
|
+
] })
|
|
1148
1540
|
] })
|
|
1149
1541
|
] });
|
|
1150
1542
|
}
|
|
@@ -1239,7 +1631,7 @@ var CHANGELOG_ENTRY_QUERY = `
|
|
|
1239
1631
|
}
|
|
1240
1632
|
}
|
|
1241
1633
|
`;
|
|
1242
|
-
function
|
|
1634
|
+
function formatDate2(value) {
|
|
1243
1635
|
if (!value) return "";
|
|
1244
1636
|
return new Date(value).toLocaleDateString("en-US", {
|
|
1245
1637
|
year: "numeric",
|
|
@@ -1361,7 +1753,7 @@ function CmsTimeline(props) {
|
|
|
1361
1753
|
),
|
|
1362
1754
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-6 sm:p-8", children: [
|
|
1363
1755
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground mb-2", children: [
|
|
1364
|
-
entry.publishedAt && /* @__PURE__ */ jsxRuntime.jsx("time", { dateTime: entry.publishedAt, children:
|
|
1756
|
+
entry.publishedAt && /* @__PURE__ */ jsxRuntime.jsx("time", { dateTime: entry.publishedAt, children: formatDate2(entry.publishedAt || entry.lastUpdated) }),
|
|
1365
1757
|
entry.author && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1366
1758
|
" \xB7 ",
|
|
1367
1759
|
entry.author
|
|
@@ -1505,7 +1897,7 @@ function EntriesTimeline(props) {
|
|
|
1505
1897
|
{
|
|
1506
1898
|
className: "text-xs text-muted-foreground",
|
|
1507
1899
|
dateTime: entry.date,
|
|
1508
|
-
children:
|
|
1900
|
+
children: formatDate2(entry.date)
|
|
1509
1901
|
}
|
|
1510
1902
|
)
|
|
1511
1903
|
] }),
|