@sprintup-cms/sdk 1.8.30 → 1.8.38
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/next/index.cjs +196 -7
- package/dist/next/index.cjs.map +1 -1
- package/dist/next/index.js +196 -7
- package/dist/next/index.js.map +1 -1
- package/dist/react/index.cjs +196 -0
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +196 -0
- package/dist/react/index.js.map +1 -1
- package/package.json +1 -1
package/dist/next/index.cjs
CHANGED
|
@@ -393,6 +393,24 @@ function FAQBlock({ block }) {
|
|
|
393
393
|
] }, i)) })
|
|
394
394
|
] });
|
|
395
395
|
}
|
|
396
|
+
function TeamMemberBlock({ block }) {
|
|
397
|
+
const d = getData(block);
|
|
398
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col sm:flex-row items-center sm:items-start gap-4 p-6 rounded-xl border border-border bg-card", children: [
|
|
399
|
+
d.avatar ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
400
|
+
"img",
|
|
401
|
+
{
|
|
402
|
+
src: d.avatar,
|
|
403
|
+
alt: d.name || "Team member",
|
|
404
|
+
className: "w-20 h-20 rounded-full object-cover border-2 border-border flex-shrink-0"
|
|
405
|
+
}
|
|
406
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-20 h-20 rounded-full bg-muted flex items-center justify-center text-muted-foreground text-2xl font-semibold flex-shrink-0", children: (d.name || "T").charAt(0).toUpperCase() }),
|
|
407
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center sm:text-left", children: [
|
|
408
|
+
d.name && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-lg", children: d.name }),
|
|
409
|
+
d.role && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-primary font-medium", children: d.role }),
|
|
410
|
+
d.bio && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-2 leading-relaxed", children: d.bio })
|
|
411
|
+
] })
|
|
412
|
+
] });
|
|
413
|
+
}
|
|
396
414
|
function StatsBlock({ block }) {
|
|
397
415
|
const d = getData(block);
|
|
398
416
|
const items = d.items || d.stats || [];
|
|
@@ -592,6 +610,175 @@ function SectionBlock({ block, pageType }) {
|
|
|
592
610
|
([key, value]) => isHtml(value) ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "prose prose-neutral dark:prose-invert max-w-none", dangerouslySetInnerHTML: { __html: String(value) } }, key) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground", children: String(value) }, key)
|
|
593
611
|
) });
|
|
594
612
|
}
|
|
613
|
+
var FEATURE_ICONS = {
|
|
614
|
+
zap: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" }) }),
|
|
615
|
+
shield: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }) }),
|
|
616
|
+
star: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: /* @__PURE__ */ jsxRuntime.jsx("polygon", { points: "12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2" }) }),
|
|
617
|
+
check: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }),
|
|
618
|
+
lock: /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: [
|
|
619
|
+
/* @__PURE__ */ jsxRuntime.jsx("rect", { x: "3", y: "11", width: "18", height: "11", rx: "2", ry: "2" }),
|
|
620
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" })
|
|
621
|
+
] }),
|
|
622
|
+
globe: /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: [
|
|
623
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
624
|
+
/* @__PURE__ */ jsxRuntime.jsx("line", { x1: "2", y1: "12", x2: "22", y2: "12" }),
|
|
625
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" })
|
|
626
|
+
] }),
|
|
627
|
+
clock: /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: [
|
|
628
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
629
|
+
/* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "12 6 12 12 16 14" })
|
|
630
|
+
] }),
|
|
631
|
+
heart: /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z" }) }),
|
|
632
|
+
settings: /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: [
|
|
633
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3" }),
|
|
634
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" })
|
|
635
|
+
] }),
|
|
636
|
+
users: /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: [
|
|
637
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" }),
|
|
638
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "9", cy: "7", r: "4" }),
|
|
639
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87" }),
|
|
640
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75" })
|
|
641
|
+
] }),
|
|
642
|
+
trending: /* @__PURE__ */ jsxRuntime.jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "w-5 h-5", children: [
|
|
643
|
+
/* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "23 6 13.5 15.5 8.5 10.5 1 18" }),
|
|
644
|
+
/* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "17 6 23 6 23 12" })
|
|
645
|
+
] })
|
|
646
|
+
};
|
|
647
|
+
function CardGridBlock({ block }) {
|
|
648
|
+
const d = getData(block);
|
|
649
|
+
const cards = Array.isArray(d.cards) ? d.cards : [];
|
|
650
|
+
const cols = Number(d.columns) || 3;
|
|
651
|
+
const gridCols = cols === 2 ? "sm:grid-cols-2" : cols === 4 ? "sm:grid-cols-2 lg:grid-cols-4" : "sm:grid-cols-2 lg:grid-cols-3";
|
|
652
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: "py-12", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-6xl mx-auto px-4", children: [
|
|
653
|
+
d.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl md:text-3xl font-bold tracking-tight text-center text-balance mb-8", children: d.title }),
|
|
654
|
+
cards.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-muted-foreground", children: "No cards added yet." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: `grid grid-cols-1 gap-6 ${gridCols}`, children: cards.map((card, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col rounded-xl border border-border bg-card overflow-hidden hover:shadow-md transition-shadow", children: [
|
|
655
|
+
card.image && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
656
|
+
"img",
|
|
657
|
+
{
|
|
658
|
+
src: card.image,
|
|
659
|
+
alt: card.title || "",
|
|
660
|
+
className: "w-full h-full object-cover",
|
|
661
|
+
onError: (e) => {
|
|
662
|
+
e.target.style.display = "none";
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
) }),
|
|
666
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 p-5 gap-2", children: [
|
|
667
|
+
card.title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-base", children: card.title }),
|
|
668
|
+
card.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed flex-1", children: card.description }),
|
|
669
|
+
card.link && /* @__PURE__ */ jsxRuntime.jsxs("a", { href: card.link, className: "inline-flex items-center text-sm font-medium text-primary hover:underline mt-2", children: [
|
|
670
|
+
card.linkText || "Learn more",
|
|
671
|
+
" \u2192"
|
|
672
|
+
] })
|
|
673
|
+
] })
|
|
674
|
+
] }, i)) })
|
|
675
|
+
] }) });
|
|
676
|
+
}
|
|
677
|
+
function TimelineBlock({ block }) {
|
|
678
|
+
const d = getData(block);
|
|
679
|
+
const items = Array.isArray(d.items) ? d.items : [];
|
|
680
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: "py-12", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-3xl mx-auto px-4", children: [
|
|
681
|
+
(d.title || d.subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-10", children: [
|
|
682
|
+
d.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl md:text-3xl font-bold tracking-tight text-balance", children: d.title }),
|
|
683
|
+
d.subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-muted-foreground text-pretty", children: d.subtitle })
|
|
684
|
+
] }),
|
|
685
|
+
items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-muted-foreground", children: "No timeline items added yet." }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
|
|
686
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-6 top-0 bottom-0 w-px bg-border", "aria-hidden": "true" }),
|
|
687
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-8", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex gap-6", children: [
|
|
688
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full bg-primary text-primary-foreground flex items-center justify-center text-xs font-bold z-10 ring-4 ring-background", children: item.year || i + 1 }),
|
|
689
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 pb-2 pt-1", children: [
|
|
690
|
+
item.title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-base", children: item.title }),
|
|
691
|
+
item.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1 leading-relaxed", children: item.description })
|
|
692
|
+
] })
|
|
693
|
+
] }, i)) })
|
|
694
|
+
] })
|
|
695
|
+
] }) });
|
|
696
|
+
}
|
|
697
|
+
function PricingCardBlock({ block }) {
|
|
698
|
+
const d = getData(block);
|
|
699
|
+
const features = Array.isArray(d.features) ? d.features : [];
|
|
700
|
+
const featured = Boolean(d.featured);
|
|
701
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `relative flex flex-col rounded-2xl border p-8 ${featured ? "border-primary bg-primary text-primary-foreground shadow-xl scale-105" : "border-border bg-card"}`, children: [
|
|
702
|
+
featured && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 rounded-full bg-primary-foreground text-primary text-xs font-semibold", children: "Most Popular" }),
|
|
703
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-6", children: [
|
|
704
|
+
d.name && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: `text-xl font-bold ${featured ? "text-primary-foreground" : ""}`, children: d.name }),
|
|
705
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2 flex items-end gap-1", children: [
|
|
706
|
+
d.price && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-4xl font-extrabold tracking-tight ${featured ? "text-primary-foreground" : ""}`, children: d.price }),
|
|
707
|
+
d.period && /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-sm mb-1 ${featured ? "text-primary-foreground/70" : "text-muted-foreground"}`, children: d.period })
|
|
708
|
+
] })
|
|
709
|
+
] }),
|
|
710
|
+
features.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "space-y-3 flex-1 mb-8", children: features.map((feat, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2 text-sm", children: [
|
|
711
|
+
/* @__PURE__ */ jsxRuntime.jsx("svg", { className: `w-4 h-4 flex-shrink-0 ${featured ? "text-primary-foreground" : "text-primary"}`, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }),
|
|
712
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: featured ? "text-primary-foreground/90" : "", children: feat })
|
|
713
|
+
] }, i)) }),
|
|
714
|
+
d.button && /* @__PURE__ */ jsxRuntime.jsx(
|
|
715
|
+
"a",
|
|
716
|
+
{
|
|
717
|
+
href: d.url || "#",
|
|
718
|
+
className: `block text-center py-2.5 px-6 rounded-lg font-semibold text-sm transition-opacity hover:opacity-90 ${featured ? "bg-primary-foreground text-primary" : "bg-primary text-primary-foreground"}`,
|
|
719
|
+
children: d.button
|
|
720
|
+
}
|
|
721
|
+
)
|
|
722
|
+
] });
|
|
723
|
+
}
|
|
724
|
+
function IconFeatureBlock({ block }) {
|
|
725
|
+
const d = getData(block);
|
|
726
|
+
const iconKey = (d.icon || "zap").toLowerCase();
|
|
727
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-4 p-6 rounded-xl border border-border bg-card", children: [
|
|
728
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-12 h-12 rounded-lg bg-primary/10 text-primary flex items-center justify-center flex-shrink-0", children: FEATURE_ICONS[iconKey] ?? /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "w-6 h-6", children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }) }) }),
|
|
729
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
730
|
+
d.title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-base", children: d.title }),
|
|
731
|
+
d.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1 leading-relaxed", children: d.description })
|
|
732
|
+
] })
|
|
733
|
+
] });
|
|
734
|
+
}
|
|
735
|
+
function FeatureGridBlock({ block }) {
|
|
736
|
+
const d = getData(block);
|
|
737
|
+
const features = Array.isArray(d.features) ? d.features : [];
|
|
738
|
+
const cols = Number(d.columns) || 3;
|
|
739
|
+
const gridCols = cols === 2 ? "sm:grid-cols-2" : cols === 4 ? "sm:grid-cols-2 lg:grid-cols-4" : "sm:grid-cols-2 lg:grid-cols-3";
|
|
740
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: "py-12", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-w-6xl mx-auto px-4", children: [
|
|
741
|
+
(d.title || d.subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center mb-10", children: [
|
|
742
|
+
d.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl md:text-3xl font-bold tracking-tight text-balance", children: d.title }),
|
|
743
|
+
d.subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-muted-foreground text-pretty", children: d.subtitle })
|
|
744
|
+
] }),
|
|
745
|
+
features.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-center text-sm text-muted-foreground", children: "No features added yet." }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: `grid grid-cols-1 gap-6 ${gridCols}`, children: features.map((feat, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-3 p-6 rounded-xl border border-border bg-card hover:shadow-md transition-shadow", children: [
|
|
746
|
+
feat.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-10 h-10 rounded-lg bg-primary/10 text-primary flex items-center justify-center flex-shrink-0", children: FEATURE_ICONS[feat.icon] ?? /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", className: "w-5 h-5", children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }) }) }),
|
|
747
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
748
|
+
feat.title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "font-semibold text-base", children: feat.title }),
|
|
749
|
+
feat.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground mt-1 leading-relaxed", children: feat.description })
|
|
750
|
+
] })
|
|
751
|
+
] }, i)) })
|
|
752
|
+
] }) });
|
|
753
|
+
}
|
|
754
|
+
function TwoColumnBlock({ block }) {
|
|
755
|
+
const d = getData(block);
|
|
756
|
+
const imagePos = d.imagePosition === "left" ? "flex-row-reverse" : "flex-row";
|
|
757
|
+
const hasImage = Boolean(d.image);
|
|
758
|
+
return /* @__PURE__ */ jsxRuntime.jsx("section", { className: "py-10", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `flex flex-col md:${imagePos} gap-8 md:gap-12 items-center`, children: [
|
|
759
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 space-y-4", children: [
|
|
760
|
+
d.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl md:text-3xl font-bold tracking-tight text-balance", children: d.title }),
|
|
761
|
+
d.text && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground leading-relaxed text-pretty", children: d.text }),
|
|
762
|
+
d.button && /* @__PURE__ */ jsxRuntime.jsx(
|
|
763
|
+
"a",
|
|
764
|
+
{
|
|
765
|
+
href: d.buttonUrl || "#",
|
|
766
|
+
className: "inline-flex items-center gap-2 px-5 py-2.5 rounded-lg bg-primary text-primary-foreground text-sm font-medium hover:opacity-90 transition-opacity",
|
|
767
|
+
children: d.button
|
|
768
|
+
}
|
|
769
|
+
)
|
|
770
|
+
] }),
|
|
771
|
+
hasImage && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 w-full", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
772
|
+
"img",
|
|
773
|
+
{
|
|
774
|
+
src: d.image,
|
|
775
|
+
alt: d.title || "",
|
|
776
|
+
className: "w-full rounded-xl object-cover border border-border shadow-sm"
|
|
777
|
+
}
|
|
778
|
+
) }),
|
|
779
|
+
!hasImage && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 w-full rounded-xl bg-muted border border-border aspect-video flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "No image set" }) })
|
|
780
|
+
] }) });
|
|
781
|
+
}
|
|
595
782
|
var BUILT_IN = {
|
|
596
783
|
// Structured page type — content is nested { sectionName: { fieldName: value } }
|
|
597
784
|
"__structured__": (b, pt) => /* @__PURE__ */ jsxRuntime.jsx(StructuredBlock, { block: b, pageType: pt }),
|
|
@@ -603,6 +790,7 @@ var BUILT_IN = {
|
|
|
603
790
|
"hero-section": (b) => /* @__PURE__ */ jsxRuntime.jsx(HeroBlock, { block: b }),
|
|
604
791
|
cta: (b) => /* @__PURE__ */ jsxRuntime.jsx(CTABlock, { block: b }),
|
|
605
792
|
faq: (b) => /* @__PURE__ */ jsxRuntime.jsx(FAQBlock, { block: b }),
|
|
793
|
+
"team-member": (b) => /* @__PURE__ */ jsxRuntime.jsx(TeamMemberBlock, { block: b }),
|
|
606
794
|
stats: (b) => /* @__PURE__ */ jsxRuntime.jsx(StatsBlock, { block: b }),
|
|
607
795
|
testimonial: (b) => /* @__PURE__ */ jsxRuntime.jsx(TestimonialBlock, { block: b }),
|
|
608
796
|
quote: (b) => /* @__PURE__ */ jsxRuntime.jsx(QuoteBlock, { block: b }),
|
|
@@ -610,11 +798,19 @@ var BUILT_IN = {
|
|
|
610
798
|
divider: () => /* @__PURE__ */ jsxRuntime.jsx(DividerBlock, {}),
|
|
611
799
|
spacer: (b) => /* @__PURE__ */ jsxRuntime.jsx(SpacerBlock, { block: b }),
|
|
612
800
|
video: (b) => /* @__PURE__ */ jsxRuntime.jsx(VideoBlock, { block: b }),
|
|
801
|
+
"card-grid": (b) => /* @__PURE__ */ jsxRuntime.jsx(CardGridBlock, { block: b }),
|
|
802
|
+
timeline: (b) => /* @__PURE__ */ jsxRuntime.jsx(TimelineBlock, { block: b }),
|
|
803
|
+
"pricing-card": (b) => /* @__PURE__ */ jsxRuntime.jsx(PricingCardBlock, { block: b }),
|
|
804
|
+
"icon-feature": (b) => /* @__PURE__ */ jsxRuntime.jsx(IconFeatureBlock, { block: b }),
|
|
805
|
+
"feature-grid": (b) => /* @__PURE__ */ jsxRuntime.jsx(FeatureGridBlock, { block: b }),
|
|
806
|
+
"two-column": (b) => /* @__PURE__ */ jsxRuntime.jsx(TwoColumnBlock, { block: b }),
|
|
613
807
|
"product-list": (b) => /* @__PURE__ */ jsxRuntime.jsx(ProductListBlock, { block: b })
|
|
614
808
|
};
|
|
615
809
|
function CMSBlocks({ blocks, pageType, className = "", custom = {} }) {
|
|
616
810
|
if (!blocks?.length) return null;
|
|
811
|
+
console.log("[v0] CMSBlocks received blocks:", blocks.map((b) => ({ id: b.id, type: b.type, hasData: !!b.data, hasContent: !!b.content, dataKeys: Object.keys(b.data ?? b.content ?? {}) })));
|
|
617
812
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `space-y-8 ${className}`, children: blocks.map((block) => {
|
|
813
|
+
console.log("[v0] rendering block type:", block.type, "inBuiltIn:", !!BUILT_IN[block.type]);
|
|
618
814
|
if (custom[block.type]) return /* @__PURE__ */ jsxRuntime.jsx(React__default.default.Fragment, { children: custom[block.type](block) }, block.id);
|
|
619
815
|
if (BUILT_IN[block.type]) return /* @__PURE__ */ jsxRuntime.jsx(React__default.default.Fragment, { children: BUILT_IN[block.type](block, pageType) }, block.id);
|
|
620
816
|
return /* @__PURE__ */ jsxRuntime.jsx(SectionBlock, { block, pageType }, block.id);
|
|
@@ -669,13 +865,6 @@ function ServerProductListBlock({ block }) {
|
|
|
669
865
|
fieldCtaUrl
|
|
670
866
|
} = cfg;
|
|
671
867
|
const fm = { fieldTitle, fieldPrice, fieldColor, fieldCategory, fieldBadge, fieldDescription, fieldCtaUrl };
|
|
672
|
-
console.log("[v0] ServerProductListBlock cfg keys:", Object.keys(cfg));
|
|
673
|
-
console.log("[v0] ServerProductListBlock fm:", JSON.stringify(fm));
|
|
674
|
-
console.log("[v0] ServerProductListBlock rawProducts count:", Array.isArray(block._resolvedProducts) ? block._resolvedProducts.length : "none", "| prefetched:", Array.isArray(cfg.prefetchedProducts) ? cfg.prefetchedProducts.length : "none");
|
|
675
|
-
if (Array.isArray(cfg.prefetchedProducts) && cfg.prefetchedProducts[0]) {
|
|
676
|
-
console.log("[v0] first product keys:", Object.keys(cfg.prefetchedProducts[0]));
|
|
677
|
-
console.log("[v0] first product sample:", JSON.stringify(cfg.prefetchedProducts[0]).slice(0, 300));
|
|
678
|
-
}
|
|
679
868
|
const cols = parseInt(String(columns), 10);
|
|
680
869
|
const gridCols = cols === 2 ? "sm:grid-cols-2" : cols === 4 ? "sm:grid-cols-2 lg:grid-cols-4" : "sm:grid-cols-2 lg:grid-cols-3";
|
|
681
870
|
const rawProducts = Array.isArray(block._resolvedProducts) ? block._resolvedProducts : Array.isArray(cfg.prefetchedProducts) ? cfg.prefetchedProducts : [];
|