@dani-builder/blocks 0.2.0
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/LICENSE +21 -0
- package/README.md +53 -0
- package/dist/blocks/bento-grid.d.ts +7 -0
- package/dist/blocks/bento-grid.d.ts.map +1 -0
- package/dist/blocks/bento-grid.js +20 -0
- package/dist/blocks/bento-grid.js.map +1 -0
- package/dist/blocks/block-renderer.d.ts +19 -0
- package/dist/blocks/block-renderer.d.ts.map +1 -0
- package/dist/blocks/block-renderer.js +71 -0
- package/dist/blocks/block-renderer.js.map +1 -0
- package/dist/blocks/content.d.ts +7 -0
- package/dist/blocks/content.d.ts.map +1 -0
- package/dist/blocks/content.js +18 -0
- package/dist/blocks/content.js.map +1 -0
- package/dist/blocks/cta.d.ts +7 -0
- package/dist/blocks/cta.d.ts.map +1 -0
- package/dist/blocks/cta.js +48 -0
- package/dist/blocks/cta.js.map +1 -0
- package/dist/blocks/faq.d.ts +7 -0
- package/dist/blocks/faq.d.ts.map +1 -0
- package/dist/blocks/faq.js +7 -0
- package/dist/blocks/faq.js.map +1 -0
- package/dist/blocks/features.d.ts +11 -0
- package/dist/blocks/features.d.ts.map +1 -0
- package/dist/blocks/features.js +41 -0
- package/dist/blocks/features.js.map +1 -0
- package/dist/blocks/hero.d.ts +7 -0
- package/dist/blocks/hero.d.ts.map +1 -0
- package/dist/blocks/hero.js +57 -0
- package/dist/blocks/hero.js.map +1 -0
- package/dist/blocks/highlights.d.ts +7 -0
- package/dist/blocks/highlights.d.ts.map +1 -0
- package/dist/blocks/highlights.js +29 -0
- package/dist/blocks/highlights.js.map +1 -0
- package/dist/blocks/inquiry-form.d.ts +7 -0
- package/dist/blocks/inquiry-form.d.ts.map +1 -0
- package/dist/blocks/inquiry-form.js +62 -0
- package/dist/blocks/inquiry-form.js.map +1 -0
- package/dist/blocks/logo-cloud.d.ts +7 -0
- package/dist/blocks/logo-cloud.d.ts.map +1 -0
- package/dist/blocks/logo-cloud.js +46 -0
- package/dist/blocks/logo-cloud.js.map +1 -0
- package/dist/blocks/pricing.d.ts +7 -0
- package/dist/blocks/pricing.d.ts.map +1 -0
- package/dist/blocks/pricing.js +40 -0
- package/dist/blocks/pricing.js.map +1 -0
- package/dist/blocks/slider.d.ts +7 -0
- package/dist/blocks/slider.d.ts.map +1 -0
- package/dist/blocks/slider.js +27 -0
- package/dist/blocks/slider.js.map +1 -0
- package/dist/blocks/stats.d.ts +7 -0
- package/dist/blocks/stats.d.ts.map +1 -0
- package/dist/blocks/stats.js +35 -0
- package/dist/blocks/stats.js.map +1 -0
- package/dist/blocks/team.d.ts +7 -0
- package/dist/blocks/team.d.ts.map +1 -0
- package/dist/blocks/team.js +36 -0
- package/dist/blocks/team.js.map +1 -0
- package/dist/blocks/testimonials.d.ts +7 -0
- package/dist/blocks/testimonials.d.ts.map +1 -0
- package/dist/blocks/testimonials.js +47 -0
- package/dist/blocks/testimonials.js.map +1 -0
- package/dist/context.d.ts +37 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +15 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/block-image.d.ts +14 -0
- package/dist/shared/block-image.d.ts.map +1 -0
- package/dist/shared/block-image.js +38 -0
- package/dist/shared/block-image.js.map +1 -0
- package/dist/shared/blocks-renderer.d.ts +8 -0
- package/dist/shared/blocks-renderer.d.ts.map +1 -0
- package/dist/shared/blocks-renderer.js +76 -0
- package/dist/shared/blocks-renderer.js.map +1 -0
- package/dist/shared/count-up.d.ts +12 -0
- package/dist/shared/count-up.d.ts.map +1 -0
- package/dist/shared/count-up.js +74 -0
- package/dist/shared/count-up.js.map +1 -0
- package/dist/shared/icon-renderer.d.ts +10 -0
- package/dist/shared/icon-renderer.d.ts.map +1 -0
- package/dist/shared/icon-renderer.js +76 -0
- package/dist/shared/icon-renderer.js.map +1 -0
- package/dist/shared/reveal.d.ts +12 -0
- package/dist/shared/reveal.d.ts.map +1 -0
- package/dist/shared/reveal.js +34 -0
- package/dist/shared/reveal.js.map +1 -0
- package/dist/shared/section-wrapper.d.ts +21 -0
- package/dist/shared/section-wrapper.d.ts.map +1 -0
- package/dist/shared/section-wrapper.js +44 -0
- package/dist/shared/section-wrapper.js.map +1 -0
- package/dist/shared/strapi-image.d.ts +26 -0
- package/dist/shared/strapi-image.d.ts.map +1 -0
- package/dist/shared/strapi-image.js +22 -0
- package/dist/shared/strapi-image.js.map +1 -0
- package/dist/shared/strapi-link.d.ts +10 -0
- package/dist/shared/strapi-link.d.ts.map +1 -0
- package/dist/shared/strapi-link.js +21 -0
- package/dist/shared/strapi-link.js.map +1 -0
- package/package.json +66 -0
- package/src/styles/blocks.css +291 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import { SectionWrapper } from "../shared/section-wrapper";
|
|
5
|
+
export function InquiryFormBlock({ block }) {
|
|
6
|
+
const [submitted, setSubmitted] = useState(false);
|
|
7
|
+
const [loading, setLoading] = useState(false);
|
|
8
|
+
const [error, setError] = useState(null);
|
|
9
|
+
// Captured after mount (not during render) to avoid a hydration mismatch.
|
|
10
|
+
// The server uses it as a timing trap against instant bot submissions.
|
|
11
|
+
const renderedAtRef = useRef(0);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
renderedAtRef.current = Date.now();
|
|
14
|
+
}, []);
|
|
15
|
+
async function handleSubmit(e) {
|
|
16
|
+
e.preventDefault();
|
|
17
|
+
setLoading(true);
|
|
18
|
+
setError(null); // clear any previous failure on resubmit
|
|
19
|
+
const form = e.currentTarget;
|
|
20
|
+
const formData = new FormData(form);
|
|
21
|
+
try {
|
|
22
|
+
const res = await fetch("/api/inquiries", {
|
|
23
|
+
method: "POST",
|
|
24
|
+
headers: { "Content-Type": "application/json" },
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
name: formData.get("name"),
|
|
27
|
+
email: formData.get("email"),
|
|
28
|
+
phone: formData.get("phone"),
|
|
29
|
+
subject: formData.get("subject"),
|
|
30
|
+
message: formData.get("message"),
|
|
31
|
+
// Anti-spam: honeypot (must stay empty) + client-measured elapsed
|
|
32
|
+
// time since mount (clock-skew-proof, unlike an absolute timestamp).
|
|
33
|
+
company: formData.get("company"),
|
|
34
|
+
_elapsed: renderedAtRef.current
|
|
35
|
+
? Date.now() - renderedAtRef.current
|
|
36
|
+
: undefined,
|
|
37
|
+
}),
|
|
38
|
+
});
|
|
39
|
+
if (res.ok) {
|
|
40
|
+
setSubmitted(true);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Hard-coded Korean defaults for now; CMS-sourced/i18n copy comes
|
|
44
|
+
// with the P1-3 inquiry-form schema extension (400/429 conventions).
|
|
45
|
+
setError(res.status >= 500
|
|
46
|
+
? "일시적인 서버 오류로 전송하지 못했습니다. 잠시 후 다시 시도해 주세요."
|
|
47
|
+
: "메시지를 전송하지 못했습니다. 입력하신 내용을 확인한 뒤 다시 시도해 주세요.");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
setError("서버에 연결하지 못했습니다. 네트워크 상태를 확인한 뒤 다시 시도해 주세요.");
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
setLoading(false);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (submitted) {
|
|
58
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("div", { className: "mx-auto max-w-lg text-center", children: [_jsx("div", { className: "mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-cta/10", children: _jsx("svg", { className: "h-8 w-8 text-cta", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }) }) }), _jsx("p", { className: "text-lg font-semibold", children: block.successMessage ?? "Thank you! We'll be in touch soon." })] }) }));
|
|
59
|
+
}
|
|
60
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("form", { onSubmit: handleSubmit, className: "mx-auto grid max-w-2xl gap-5", children: [_jsxs("div", { className: "absolute left-[-9999px] top-[-9999px] h-0 w-0 overflow-hidden", "aria-hidden": "true", children: [_jsx("label", { htmlFor: "company", children: "Company (leave blank)" }), _jsx("input", { id: "company", name: "company", type: "text", tabIndex: -1, autoComplete: "off" })] }), error && (_jsx("div", { role: "alert", className: "rounded-lg border border-red-300 bg-red-50 px-4 py-3 text-sm text-red-800", children: error })), _jsxs("div", { className: "grid gap-5 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "name", className: "mb-1 block text-sm font-medium", children: "Name *" }), _jsx("input", { id: "name", name: "name", type: "text", required: true, className: "form-input w-full rounded-lg px-4 py-2.5 text-sm transition-colors" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "email", className: "mb-1 block text-sm font-medium", children: "Email *" }), _jsx("input", { id: "email", name: "email", type: "email", required: true, className: "form-input w-full rounded-lg px-4 py-2.5 text-sm transition-colors" })] })] }), _jsxs("div", { className: "grid gap-5 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "phone", className: "mb-1 block text-sm font-medium", children: "Phone" }), _jsx("input", { id: "phone", name: "phone", type: "tel", className: "form-input w-full rounded-lg px-4 py-2.5 text-sm transition-colors" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "subject", className: "mb-1 block text-sm font-medium", children: "Subject" }), _jsx("input", { id: "subject", name: "subject", type: "text", className: "form-input w-full rounded-lg px-4 py-2.5 text-sm transition-colors" })] })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "message", className: "mb-1 block text-sm font-medium", children: "Message" }), _jsx("textarea", { id: "message", name: "message", rows: 5, className: "form-input w-full rounded-lg px-4 py-2.5 text-sm transition-colors" })] }), _jsx("button", { type: "submit", disabled: loading, className: "block-btn disabled:opacity-50", children: loading ? "Sending..." : "Send Message" })] }) }));
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=inquiry-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inquiry-form.js","sourceRoot":"","sources":["../../src/blocks/inquiry-form.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LogoCloudBlock as LogoCloudBlockType } from "@dani-builder/strapi-client/types";
|
|
2
|
+
interface LogoCloudBlockProps {
|
|
3
|
+
block: LogoCloudBlockType;
|
|
4
|
+
}
|
|
5
|
+
export declare function LogoCloudBlock({ block }: LogoCloudBlockProps): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=logo-cloud.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo-cloud.d.ts","sourceRoot":"","sources":["../../src/blocks/logo-cloud.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,IAAI,kBAAkB,EAErC,MAAM,mCAAmC,CAAC;AAK3C,UAAU,mBAAmB;IAC3B,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,+BAY5D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SectionWrapper } from "../shared/section-wrapper";
|
|
3
|
+
import { StrapiImage } from "../shared/strapi-image";
|
|
4
|
+
import { StrapiLink } from "../shared/strapi-link";
|
|
5
|
+
export function LogoCloudBlock({ block }) {
|
|
6
|
+
switch (block.variant) {
|
|
7
|
+
case "grid":
|
|
8
|
+
return _jsx(Grid, { block: block });
|
|
9
|
+
case "split":
|
|
10
|
+
return _jsx(Split, { block: block });
|
|
11
|
+
case "marquee":
|
|
12
|
+
return _jsx(Marquee, { block: block });
|
|
13
|
+
case "inline":
|
|
14
|
+
default:
|
|
15
|
+
return _jsx(Inline, { block: block });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function Marquee({ block }) {
|
|
19
|
+
// The set is duplicated so the -50% keyframe loops seamlessly; the second
|
|
20
|
+
// (visual-only) copy is aria-hidden so screen readers announce each logo once.
|
|
21
|
+
// The CSS animation is gated on prefers-reduced-motion (globals.css), so
|
|
22
|
+
// reduced-motion users get a static (paused) strip.
|
|
23
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "logo-marquee overflow-hidden", children: _jsxs("div", { className: "logo-marquee-track flex w-max items-center gap-x-16", children: [block.items.map((item) => (_jsx(LogoDisplay, { item: item }, item.id))), block.items.map((item) => (_jsx("span", { "aria-hidden": "true", className: "contents", children: _jsx(LogoDisplay, { item: item }) }, `dup-${item.id}`)))] }) }) }));
|
|
24
|
+
}
|
|
25
|
+
function Inline({ block }) {
|
|
26
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "flex flex-wrap items-center justify-center gap-x-12 gap-y-6", children: block.items.map((item) => (_jsx(LogoDisplay, { item: item }, item.id))) }) }));
|
|
27
|
+
}
|
|
28
|
+
function Grid({ block }) {
|
|
29
|
+
const cols = block.items.length <= 3
|
|
30
|
+
? "grid-cols-3"
|
|
31
|
+
: block.items.length <= 4
|
|
32
|
+
? "grid-cols-2 md:grid-cols-4"
|
|
33
|
+
: "grid-cols-3 md:grid-cols-5 lg:grid-cols-6";
|
|
34
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: `grid items-center justify-items-center gap-8 ${cols}`, children: block.items.map((item) => (_jsx(LogoDisplay, { item: item }, item.id))) }) }));
|
|
35
|
+
}
|
|
36
|
+
function Split({ block }) {
|
|
37
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [_jsx("div", {}), _jsx("div", { className: "grid grid-cols-2 items-center gap-8 md:grid-cols-3", children: block.items.map((item) => (_jsx(LogoDisplay, { item: item }, item.id))) })] }) }));
|
|
38
|
+
}
|
|
39
|
+
function LogoDisplay({ item }) {
|
|
40
|
+
const img = (_jsx(StrapiImage, { asset: item.logo, format: "small", alt: item.companyName ?? undefined, className: "h-8 w-auto object-contain opacity-60 grayscale transition-all duration-200 hover:opacity-100 hover:grayscale-0", height: 32, width: 120 }));
|
|
41
|
+
if (item.link) {
|
|
42
|
+
return (_jsx(StrapiLink, { link: item.link, className: "inline-block", children: img }));
|
|
43
|
+
}
|
|
44
|
+
return img;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=logo-cloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo-cloud.js","sourceRoot":"","sources":["../../src/blocks/logo-cloud.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PricingBlock as PricingBlockType } from "@dani-builder/strapi-client/types";
|
|
2
|
+
interface PricingBlockProps {
|
|
3
|
+
block: PricingBlockType;
|
|
4
|
+
}
|
|
5
|
+
export declare function PricingBlock({ block }: PricingBlockProps): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/blocks/pricing.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,IAAI,gBAAgB,EAEjC,MAAM,mCAAmC,CAAC;AAI3C,UAAU,iBAAiB;IACzB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AASD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,iBAAiB,+BAgCxD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SectionWrapper } from "../shared/section-wrapper";
|
|
3
|
+
import { StrapiLink } from "../shared/strapi-link";
|
|
4
|
+
function parseFeatures(tier) {
|
|
5
|
+
return (tier.featureList ?? "")
|
|
6
|
+
.split("\n")
|
|
7
|
+
.map((l) => l.replace(/^[-*]\s*/, "").trim())
|
|
8
|
+
.filter(Boolean);
|
|
9
|
+
}
|
|
10
|
+
export function PricingBlock({ block }) {
|
|
11
|
+
if (block.variant === "with-comparison") {
|
|
12
|
+
return (_jsxs(SectionWrapper, { section: block.section, children: [_jsx(ComparisonTable, { tiers: block.items }), _jsx("div", { className: "grid gap-6 md:hidden", children: block.items.map((tier) => (_jsx(TierCard, { tier: tier }, tier.id))) })] }));
|
|
13
|
+
}
|
|
14
|
+
const cols = block.variant === "single"
|
|
15
|
+
? "max-w-md mx-auto"
|
|
16
|
+
: block.variant === "two-column"
|
|
17
|
+
? "grid md:grid-cols-2 max-w-3xl mx-auto"
|
|
18
|
+
: "grid md:grid-cols-2 lg:grid-cols-3 max-w-5xl mx-auto";
|
|
19
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: `gap-6 ${cols}`, children: block.items.map((tier) => (_jsx(TierCard, { tier: tier }, tier.id))) }) }));
|
|
20
|
+
}
|
|
21
|
+
function ComparisonTable({ tiers }) {
|
|
22
|
+
// Union of all features across tiers, preserving first-seen order.
|
|
23
|
+
const allFeatures = [];
|
|
24
|
+
const perTier = tiers.map((t) => new Set(parseFeatures(t)));
|
|
25
|
+
for (const set of perTier) {
|
|
26
|
+
for (const f of set)
|
|
27
|
+
if (!allFeatures.includes(f))
|
|
28
|
+
allFeatures.push(f);
|
|
29
|
+
}
|
|
30
|
+
return (_jsx("div", { className: "hidden overflow-x-auto md:block", children: _jsxs("table", { className: "w-full min-w-[640px] border-collapse text-sm", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "sticky top-0 z-10 bg-(--card-bg) p-4 text-left align-bottom" }), tiers.map((tier) => (_jsxs("th", { className: `sticky top-0 z-10 p-4 text-center align-bottom ${tier.highlighted ? "bg-primary/10" : "bg-(--card-bg)"}`, children: [_jsx("div", { className: "text-base font-semibold", children: tier.planName }), _jsxs("div", { className: "mt-1", children: [_jsx("span", { className: "text-2xl font-bold", children: tier.price }), tier.billingPeriod && (_jsxs("span", { className: "text-xs text-text-muted", children: ["/", tier.billingPeriod] }))] }), tier.ctaLink && (_jsx("div", { className: "mt-3", children: _jsx(StrapiLink, { link: tier.ctaLink, className: `${tier.highlighted ? "block-btn" : "block-btn-ghost"} px-4! py-2! text-xs!` }) }))] }, tier.id)))] }) }), _jsx("tbody", { children: allFeatures.map((feature, r) => (_jsxs("tr", { className: "border-t border-(--card-border)", children: [_jsx("td", { className: "p-4 text-left font-medium", children: feature }), perTier.map((set, c) => (_jsx("td", { className: `p-4 text-center ${tiers[c]?.highlighted ? "bg-primary/5" : ""}`, children: set.has(feature) ? (_jsx("svg", { className: "mx-auto h-5 w-5 text-cta", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, "aria-label": "Included", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }) })) : (_jsx("span", { className: "text-text-muted", "aria-label": "Not included", children: "\u2014" })) }, c)))] }, r))) })] }) }));
|
|
31
|
+
}
|
|
32
|
+
function TierCard({ tier }) {
|
|
33
|
+
return (_jsxs("div", { className: `block-card flex flex-col p-6 md:p-8 ${tier.highlighted
|
|
34
|
+
? "border-primary shadow-[0_16px_40px_-20px_color-mix(in_srgb,var(--color-primary)_60%,transparent)] ring-1 ring-primary"
|
|
35
|
+
: ""}`, children: [_jsxs("div", { children: [_jsx("h3", { className: "text-lg font-semibold", children: tier.planName }), tier.description && (_jsx("p", { className: "mt-1 text-sm text-text-muted", children: tier.description }))] }), _jsxs("div", { className: "mt-4", children: [_jsx("span", { className: "font-heading text-4xl font-semibold tracking-tight", children: tier.price }), tier.billingPeriod && (_jsxs("span", { className: "ml-1 text-sm text-text-muted", children: ["/", tier.billingPeriod] }))] }), tier.featureList && (_jsx("ul", { className: "mt-6 flex-1 space-y-2.5", children: tier.featureList.split("\n").filter(Boolean).map((line, i) => {
|
|
36
|
+
const text = line.replace(/^[-*]\s*/, "");
|
|
37
|
+
return (_jsxs("li", { className: "flex items-start gap-2 text-sm", children: [_jsx("svg", { className: "mt-0.5 h-4 w-4 shrink-0 text-cta", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 13l4 4L19 7" }) }), text] }, i));
|
|
38
|
+
}) })), tier.ctaLink && (_jsx("div", { className: "mt-6", children: _jsx(StrapiLink, { link: tier.ctaLink, className: `w-full ${tier.highlighted ? "block-btn" : "block-btn-ghost"}` }) }))] }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/blocks/pricing.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SliderBlock as SliderBlockType } from "@dani-builder/strapi-client/types";
|
|
2
|
+
interface SliderBlockProps {
|
|
3
|
+
block: SliderBlockType;
|
|
4
|
+
}
|
|
5
|
+
export declare function SliderBlock({ block }: SliderBlockProps): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=slider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/blocks/slider.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,IAAI,eAAe,EAE/B,MAAM,mCAAmC,CAAC;AAM3C,UAAU,gBAAgB;IACxB,KAAK,EAAE,eAAe,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,gBAAgB,+BAUtD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { SectionWrapper } from "../shared/section-wrapper";
|
|
5
|
+
import { StrapiImage } from "../shared/strapi-image";
|
|
6
|
+
import { BlockImage } from "../shared/block-image";
|
|
7
|
+
import { StrapiLink } from "../shared/strapi-link";
|
|
8
|
+
export function SliderBlock({ block }) {
|
|
9
|
+
return (_jsx(SectionWrapper, { section: block.section, children: block.variant === "card-slider" ? (_jsx(CardSlider, { items: block.items })) : (_jsx(CoverFlow, { items: block.items })) }));
|
|
10
|
+
}
|
|
11
|
+
function CoverFlow({ items }) {
|
|
12
|
+
const [current, setCurrent] = useState(0);
|
|
13
|
+
if (items.length === 0)
|
|
14
|
+
return null;
|
|
15
|
+
const item = items[current];
|
|
16
|
+
return (_jsxs("div", { className: "relative", children: [_jsxs("div", { className: "relative aspect-[16/9] overflow-hidden rounded-2xl", children: [_jsx(StrapiImage, { asset: item.image?.media, alt: item.image?.alt ?? undefined, fill: true, sizes: "(max-width: 1280px) 100vw, 1280px", className: "object-cover", priority: current === 0 }), _jsx("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent" }), _jsxs("div", { className: "absolute bottom-0 left-0 p-6 text-white md:p-10", children: [item.label && (_jsx("h3", { className: "text-2xl font-bold md:text-3xl", children: item.label })), item.description && (_jsx("p", { className: "mt-2 max-w-lg text-sm text-white/80", children: item.description })), item.link && (_jsx("div", { className: "mt-4", children: _jsx(StrapiLink, { link: item.link, className: "text-sm font-semibold text-white underline underline-offset-4 transition-opacity hover:opacity-80" }) }))] })] }), items.length > 1 && (_jsx(SliderControls, { total: items.length, current: current, onChange: setCurrent }))] }));
|
|
17
|
+
}
|
|
18
|
+
function CardSlider({ items }) {
|
|
19
|
+
const [current, setCurrent] = useState(0);
|
|
20
|
+
const visibleCount = 3;
|
|
21
|
+
const start = current;
|
|
22
|
+
return (_jsxs("div", { children: [_jsx("div", { className: "grid gap-6 md:grid-cols-3", children: items.slice(start, start + visibleCount).map((item) => (_jsxs("div", { className: "block-card overflow-hidden", children: [_jsx(BlockImage, { image: item.image, aspect: "3/2", sizes: "(max-width: 768px) 100vw, 33vw" }), _jsxs("div", { className: "p-5", children: [item.label && (_jsx("h3", { className: "font-semibold", children: item.label })), item.description && (_jsx("p", { className: "mt-1 text-sm text-text-muted", children: item.description })), item.link && (_jsx("div", { className: "mt-3", children: _jsx(StrapiLink, { link: item.link, className: "text-sm font-medium text-primary transition-opacity hover:opacity-80" }) }))] })] }, item.id))) }), items.length > visibleCount && (_jsx(SliderControls, { total: Math.ceil(items.length / visibleCount), current: Math.floor(current / visibleCount), onChange: (i) => setCurrent(i * visibleCount) }))] }));
|
|
23
|
+
}
|
|
24
|
+
function SliderControls({ total, current, onChange, }) {
|
|
25
|
+
return (_jsxs("div", { className: "mt-6 flex items-center justify-center gap-3", children: [_jsx("button", { onClick: () => onChange((current - 1 + total) % total), className: "flex h-9 w-9 items-center justify-center rounded-full border border-(--card-border) transition-colors hover:border-primary hover:text-primary", "aria-label": "Previous", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M15 19l-7-7 7-7" }) }) }), _jsx("div", { className: "flex gap-1.5", children: Array.from({ length: total }, (_, i) => (_jsx("button", { onClick: () => onChange(i), className: `h-2 rounded-full transition-all ${i === current ? "w-6 bg-primary" : "w-2 bg-gray-300"}`, "aria-label": `Slide ${i + 1}` }, i))) }), _jsx("button", { onClick: () => onChange((current + 1) % total), className: "flex h-9 w-9 items-center justify-center rounded-full border border-(--card-border) transition-colors hover:border-primary hover:text-primary", "aria-label": "Next", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) }) })] }));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["../../src/blocks/slider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { StatsBlock as StatsBlockType } from "@dani-builder/strapi-client/types";
|
|
2
|
+
interface StatsBlockProps {
|
|
3
|
+
block: StatsBlockType;
|
|
4
|
+
}
|
|
5
|
+
export declare function StatsBlock({ block }: StatsBlockProps): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/blocks/stats.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,IAAI,cAAc,EAE7B,MAAM,mCAAmC,CAAC;AAK3C,UAAU,eAAe;IACvB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,eAAe,+BAUpD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SectionWrapper } from "../shared/section-wrapper";
|
|
3
|
+
import { BlockImage } from "../shared/block-image";
|
|
4
|
+
import { CountUp } from "../shared/count-up";
|
|
5
|
+
export function StatsBlock({ block }) {
|
|
6
|
+
switch (block.variant) {
|
|
7
|
+
case "card-grid":
|
|
8
|
+
return _jsx(CardGrid, { block: block });
|
|
9
|
+
case "split":
|
|
10
|
+
return _jsx(Split, { block: block });
|
|
11
|
+
case "simple":
|
|
12
|
+
default:
|
|
13
|
+
return _jsx(Simple, { block: block });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function Simple({ block }) {
|
|
17
|
+
// Center up to 4 stats on one row; the grid itself is centered so 2–3 items
|
|
18
|
+
// don't strand at the left edge under a centered section header.
|
|
19
|
+
const cols = block.items.length <= 2
|
|
20
|
+
? "grid-cols-2"
|
|
21
|
+
: block.items.length === 3
|
|
22
|
+
? "grid-cols-2 sm:grid-cols-3"
|
|
23
|
+
: "grid-cols-2 lg:grid-cols-4";
|
|
24
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: `mx-auto grid max-w-4xl gap-x-8 gap-y-12 ${cols}`, children: block.items.map((item) => (_jsx(StatDisplay, { item: item, centered: true }, item.id))) }) }));
|
|
25
|
+
}
|
|
26
|
+
function CardGrid({ block }) {
|
|
27
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "grid grid-cols-2 gap-6 lg:grid-cols-4", children: block.items.map((item) => (_jsx("div", { className: "block-card p-6 text-center", children: _jsx(StatDisplay, { item: item, centered: true }) }, item.id))) }) }));
|
|
28
|
+
}
|
|
29
|
+
function Split({ block }) {
|
|
30
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [_jsx("div", { className: "grid grid-cols-2 gap-8", children: block.items.map((item) => (_jsx(StatDisplay, { item: item }, item.id))) }), _jsx(BlockImage, { image: block.image, aspect: "3/2", className: "rounded-2xl shadow-xl ring-1 ring-black/10", sizes: "(max-width: 1024px) 100vw, 50vw" })] }) }));
|
|
31
|
+
}
|
|
32
|
+
function StatDisplay({ item, centered }) {
|
|
33
|
+
return (_jsxs("div", { className: centered ? "text-center" : undefined, children: [_jsx("p", { className: "stat-value font-heading text-4xl font-semibold tracking-tight text-primary md:text-5xl", children: _jsx(CountUp, { value: item.value }) }), item.label && (_jsx("p", { className: "mt-2 text-sm font-semibold", children: item.label })), item.description && (_jsx("p", { className: "mt-1 text-sm text-text-muted", children: item.description }))] }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/blocks/stats.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TeamBlock as TeamBlockType } from "@dani-builder/strapi-client/types";
|
|
2
|
+
interface TeamBlockProps {
|
|
3
|
+
block: TeamBlockType;
|
|
4
|
+
}
|
|
5
|
+
export declare function TeamBlock({ block }: TeamBlockProps): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=team.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/blocks/team.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,IAAI,aAAa,EAE3B,MAAM,mCAAmC,CAAC;AAK3C,UAAU,cAAc;IACtB,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,+BAUlD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SectionWrapper } from "../shared/section-wrapper";
|
|
3
|
+
import { StrapiImage } from "../shared/strapi-image";
|
|
4
|
+
import { StrapiLink } from "../shared/strapi-link";
|
|
5
|
+
export function TeamBlock({ block }) {
|
|
6
|
+
switch (block.variant) {
|
|
7
|
+
case "large-image":
|
|
8
|
+
return _jsx(LargeImage, { block: block });
|
|
9
|
+
case "compact":
|
|
10
|
+
return _jsx(Compact, { block: block });
|
|
11
|
+
case "grid":
|
|
12
|
+
default:
|
|
13
|
+
return _jsx(Grid, { block: block });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function Grid({ block }) {
|
|
17
|
+
const cols = block.items.length <= 3
|
|
18
|
+
? "md:grid-cols-3"
|
|
19
|
+
: "md:grid-cols-2 lg:grid-cols-4";
|
|
20
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: `grid gap-8 ${cols}`, children: block.items.map((member) => (_jsx(MemberCard, { member: member }, member.id))) }) }));
|
|
21
|
+
}
|
|
22
|
+
function LargeImage({ block }) {
|
|
23
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "grid gap-10 md:grid-cols-2 lg:grid-cols-3", children: block.items.map((member) => (_jsxs("div", { className: "text-center", children: [member.photo && (_jsx("div", { className: "relative mx-auto mb-4 aspect-[3/4] w-full max-w-xs overflow-hidden rounded-2xl", children: _jsx(StrapiImage, { asset: member.photo, fill: true, sizes: "(max-width: 768px) 100vw, 320px", className: "object-cover" }) })), _jsx("h3", { className: "text-lg font-semibold", children: member.memberName }), member.role && (_jsx("p", { className: "mt-1 text-sm text-primary font-medium", children: member.role })), member.bio && (_jsx("p", { className: "mt-2 text-sm text-text-muted", children: member.bio })), _jsx(SocialLinks, { links: member.socialLinks })] }, member.id))) }) }));
|
|
24
|
+
}
|
|
25
|
+
function Compact({ block }) {
|
|
26
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3", children: block.items.map((member) => (_jsxs("div", { className: "block-card flex items-center gap-4 p-4", children: [member.photo && (_jsx(StrapiImage, { asset: member.photo, format: "thumbnail", className: "h-14 w-14 shrink-0 rounded-full object-cover", width: 56, height: 56 })), _jsxs("div", { className: "min-w-0", children: [_jsx("h3", { className: "font-semibold truncate", children: member.memberName }), member.role && (_jsx("p", { className: "text-sm text-text-muted truncate", children: member.role }))] })] }, member.id))) }) }));
|
|
27
|
+
}
|
|
28
|
+
function MemberCard({ member }) {
|
|
29
|
+
return (_jsxs("div", { className: "text-center", children: [member.photo && (_jsx("div", { className: "relative mx-auto mb-4 h-24 w-24 overflow-hidden rounded-full", children: _jsx(StrapiImage, { asset: member.photo, fill: true, sizes: "96px", className: "object-cover" }) })), _jsx("h3", { className: "font-semibold", children: member.memberName }), member.role && (_jsx("p", { className: "mt-1 text-sm text-primary font-medium", children: member.role })), member.bio && (_jsx("p", { className: "mt-2 text-sm text-text-muted", children: member.bio })), _jsx(SocialLinks, { links: member.socialLinks })] }));
|
|
30
|
+
}
|
|
31
|
+
function SocialLinks({ links }) {
|
|
32
|
+
if (!links || links.length === 0)
|
|
33
|
+
return null;
|
|
34
|
+
return (_jsx("div", { className: "mt-3 flex items-center justify-center gap-3", children: links.map((link) => (_jsx(StrapiLink, { link: link, className: "text-xs text-text-muted transition-opacity hover:opacity-80" }, link.id))) }));
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=team.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/blocks/team.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TestimonialsBlock as TestimonialsBlockType } from "@dani-builder/strapi-client/types";
|
|
2
|
+
interface TestimonialsBlockProps {
|
|
3
|
+
block: TestimonialsBlockType;
|
|
4
|
+
}
|
|
5
|
+
export declare function TestimonialsBlock({ block }: TestimonialsBlockProps): import("react").JSX.Element;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=testimonials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testimonials.d.ts","sourceRoot":"","sources":["../../src/blocks/testimonials.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,IAAI,qBAAqB,EAE3C,MAAM,mCAAmC,CAAC;AAK3C,UAAU,sBAAsB;IAC9B,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,sBAAsB,+BAYlE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { SectionWrapper } from "../shared/section-wrapper";
|
|
3
|
+
import { StrapiImage } from "../shared/strapi-image";
|
|
4
|
+
import { BlockImage } from "../shared/block-image";
|
|
5
|
+
export function TestimonialsBlock({ block }) {
|
|
6
|
+
switch (block.variant) {
|
|
7
|
+
case "centered":
|
|
8
|
+
return _jsx(Centered, { block: block });
|
|
9
|
+
case "side-by-side":
|
|
10
|
+
return _jsx(SideBySide, { block: block });
|
|
11
|
+
case "subtle-grid":
|
|
12
|
+
return _jsx(SubtleGrid, { block: block });
|
|
13
|
+
case "card-grid":
|
|
14
|
+
default:
|
|
15
|
+
return _jsx(CardGrid, { block: block });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function Centered({ block }) {
|
|
19
|
+
const item = block.items[0];
|
|
20
|
+
if (!item)
|
|
21
|
+
return null;
|
|
22
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("div", { className: "mx-auto max-w-3xl text-center", children: [_jsxs("blockquote", { className: "text-xl font-medium italic leading-relaxed md:text-2xl", children: ["\u201C", item.quote, "\u201D"] }), _jsx(AuthorInfo, { item: item, centered: true })] }) }));
|
|
23
|
+
}
|
|
24
|
+
function SideBySide({ block }) {
|
|
25
|
+
const item = block.items[0];
|
|
26
|
+
if (!item)
|
|
27
|
+
return null;
|
|
28
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsxs("div", { className: "grid items-center gap-12 lg:grid-cols-2", children: [_jsx(BlockImage, { image: block.image, aspect: "4/3", className: "rounded-2xl", sizes: "(max-width: 1024px) 100vw, 50vw" }), _jsxs("div", { children: [_jsxs("blockquote", { className: "text-xl font-medium italic leading-relaxed", children: ["\u201C", item.quote, "\u201D"] }), _jsx(AuthorInfo, { item: item })] })] }) }));
|
|
29
|
+
}
|
|
30
|
+
function CardGrid({ block }) {
|
|
31
|
+
const cols = block.items.length <= 2
|
|
32
|
+
? "md:grid-cols-2"
|
|
33
|
+
: "md:grid-cols-2 lg:grid-cols-3";
|
|
34
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: `grid gap-6 ${cols}`, children: block.items.map((item) => (_jsxs("div", { className: "block-card flex flex-col p-6", children: [item.rating != null && _jsx(StarRating, { rating: item.rating }), _jsxs("blockquote", { className: "mt-3 flex-1 text-sm leading-relaxed text-text-muted", children: ["\u201C", item.quote, "\u201D"] }), _jsx(AuthorInfo, { item: item, compact: true })] }, item.id))) }) }));
|
|
35
|
+
}
|
|
36
|
+
function SubtleGrid({ block }) {
|
|
37
|
+
return (_jsx(SectionWrapper, { section: block.section, children: _jsx("div", { className: "grid gap-8 md:grid-cols-2 lg:grid-cols-3", children: block.items.map((item) => (_jsxs("div", { children: [_jsxs("blockquote", { className: "text-sm italic leading-relaxed text-text-muted", children: ["\u201C", item.quote, "\u201D"] }), _jsx(AuthorInfo, { item: item, compact: true })] }, item.id))) }) }));
|
|
38
|
+
}
|
|
39
|
+
function AuthorInfo({ item, centered, compact, }) {
|
|
40
|
+
if (!item.authorName)
|
|
41
|
+
return null;
|
|
42
|
+
return (_jsxs("div", { className: `mt-4 flex items-center gap-3 ${centered ? "justify-center" : ""}`, children: [item.avatar && (_jsx(StrapiImage, { asset: item.avatar, format: "thumbnail", className: `rounded-full object-cover ${compact ? "h-8 w-8" : "h-10 w-10"}`, width: compact ? 32 : 40, height: compact ? 32 : 40 })), _jsxs("div", { children: [_jsx("p", { className: `font-semibold ${compact ? "text-sm" : ""}`, children: item.authorName }), item.authorRole && (_jsx("p", { className: `text-text-muted ${compact ? "text-xs" : "text-sm"}`, children: item.authorRole }))] })] }));
|
|
43
|
+
}
|
|
44
|
+
function StarRating({ rating }) {
|
|
45
|
+
return (_jsx("div", { className: "flex gap-0.5 text-primary", children: Array.from({ length: 5 }, (_, i) => (_jsx("svg", { className: `h-4 w-4 ${i < rating ? "fill-current" : "fill-gray-200"}`, viewBox: "0 0 20 20", children: _jsx("path", { d: "M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z" }) }, i))) }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=testimonials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testimonials.js","sourceRoot":"","sources":["../../src/blocks/testimonials.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type ComponentType, type ReactNode } from "react";
|
|
2
|
+
import type { StrapiMedia } from "@dani-builder/strapi-client/types";
|
|
3
|
+
/** Props the host's image component must accept (a superset of next/image's). */
|
|
4
|
+
export interface BlocksImageProps {
|
|
5
|
+
src: string;
|
|
6
|
+
alt: string;
|
|
7
|
+
fill?: boolean;
|
|
8
|
+
width?: number;
|
|
9
|
+
height?: number;
|
|
10
|
+
sizes?: string;
|
|
11
|
+
className?: string;
|
|
12
|
+
priority?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/** Props the host's link component must accept (a superset of next/link's). */
|
|
15
|
+
export interface BlocksLinkProps {
|
|
16
|
+
href: string;
|
|
17
|
+
className?: string;
|
|
18
|
+
children?: ReactNode;
|
|
19
|
+
target?: string;
|
|
20
|
+
rel?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The framework adapters the blocks need. The host app injects its own Image
|
|
24
|
+
* (next/image), Link (next/link), and asset-URL resolver — so the blocks stay
|
|
25
|
+
* free of any `next/*` or app-alias imports and can ship as a portable package.
|
|
26
|
+
*/
|
|
27
|
+
export interface BlocksContextValue {
|
|
28
|
+
Image: ComponentType<BlocksImageProps>;
|
|
29
|
+
Link: ComponentType<BlocksLinkProps>;
|
|
30
|
+
resolveAssetUrl: (asset: StrapiMedia | null | undefined, format?: "thumbnail" | "small" | "medium" | "large") => string;
|
|
31
|
+
}
|
|
32
|
+
export declare function BlocksProvider({ value, children, }: {
|
|
33
|
+
value: BlocksContextValue;
|
|
34
|
+
children: ReactNode;
|
|
35
|
+
}): import("react").JSX.Element;
|
|
36
|
+
export declare function useBlocks(): BlocksContextValue;
|
|
37
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAErE,iFAAiF;AACjF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACvC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACrC,eAAe,EAAE,CACf,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACrC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,KAChD,MAAM,CAAC;CACb;AAID,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAEA;AAED,wBAAgB,SAAS,IAAI,kBAAkB,CAM9C"}
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
const BlocksContext = createContext(null);
|
|
5
|
+
export function BlocksProvider({ value, children, }) {
|
|
6
|
+
return _jsx(BlocksContext.Provider, { value: value, children: children });
|
|
7
|
+
}
|
|
8
|
+
export function useBlocks() {
|
|
9
|
+
const ctx = useContext(BlocksContext);
|
|
10
|
+
if (!ctx) {
|
|
11
|
+
throw new Error("@dani-builder/blocks: wrap your app in <BlocksProvider>.");
|
|
12
|
+
}
|
|
13
|
+
return ctx;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsC,MAAM,OAAO,CAAC;AAsCtF,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AAErE,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA0B,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { BlocksProvider, useBlocks, type BlocksContextValue, type BlocksImageProps, type BlocksLinkProps, } from "./context";
|
|
2
|
+
export { BlockRenderer, type AnyPageBlock, type BlockRendererProps, type BlockRenderers, } from "./blocks/block-renderer";
|
|
3
|
+
export { StrapiImage } from "./shared/strapi-image";
|
|
4
|
+
export { StrapiLink } from "./shared/strapi-link";
|
|
5
|
+
export { IconRenderer, iconExists } from "./shared/icon-renderer";
|
|
6
|
+
export { SectionWrapper, SectionDivider } from "./shared/section-wrapper";
|
|
7
|
+
export { BlocksRenderer } from "./shared/blocks-renderer";
|
|
8
|
+
export { CountUp } from "./shared/count-up";
|
|
9
|
+
export { Reveal } from "./shared/reveal";
|
|
10
|
+
export { HeroBlock } from "./blocks/hero";
|
|
11
|
+
export { FeaturesBlock } from "./blocks/features";
|
|
12
|
+
export { CtaBlock } from "./blocks/cta";
|
|
13
|
+
export { ContentBlock } from "./blocks/content";
|
|
14
|
+
export { StatsBlock } from "./blocks/stats";
|
|
15
|
+
export { TestimonialsBlock } from "./blocks/testimonials";
|
|
16
|
+
export { FaqBlock } from "./blocks/faq";
|
|
17
|
+
export { LogoCloudBlock } from "./blocks/logo-cloud";
|
|
18
|
+
export { SliderBlock } from "./blocks/slider";
|
|
19
|
+
export { InquiryFormBlock } from "./blocks/inquiry-form";
|
|
20
|
+
export { HighlightsBlock } from "./blocks/highlights";
|
|
21
|
+
export { BentoGridBlock } from "./blocks/bento-grid";
|
|
22
|
+
export { PricingBlock } from "./blocks/pricing";
|
|
23
|
+
export { TeamBlock } from "./blocks/team";
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Framework adapters (host injects next/image, next/link, asset resolver).
|
|
2
|
+
export { BlocksProvider, useBlocks, } from "./context";
|
|
3
|
+
// Page-level renderer.
|
|
4
|
+
export { BlockRenderer, } from "./blocks/block-renderer";
|
|
5
|
+
// Shared primitives (used by app chrome like footer/navigation too).
|
|
6
|
+
export { StrapiImage } from "./shared/strapi-image";
|
|
7
|
+
export { StrapiLink } from "./shared/strapi-link";
|
|
8
|
+
export { IconRenderer, iconExists } from "./shared/icon-renderer";
|
|
9
|
+
export { SectionWrapper, SectionDivider } from "./shared/section-wrapper";
|
|
10
|
+
export { BlocksRenderer } from "./shared/blocks-renderer";
|
|
11
|
+
export { CountUp } from "./shared/count-up";
|
|
12
|
+
export { Reveal } from "./shared/reveal";
|
|
13
|
+
// Individual blocks (for apps that compose their own renderer).
|
|
14
|
+
export { HeroBlock } from "./blocks/hero";
|
|
15
|
+
export { FeaturesBlock } from "./blocks/features";
|
|
16
|
+
export { CtaBlock } from "./blocks/cta";
|
|
17
|
+
export { ContentBlock } from "./blocks/content";
|
|
18
|
+
export { StatsBlock } from "./blocks/stats";
|
|
19
|
+
export { TestimonialsBlock } from "./blocks/testimonials";
|
|
20
|
+
export { FaqBlock } from "./blocks/faq";
|
|
21
|
+
export { LogoCloudBlock } from "./blocks/logo-cloud";
|
|
22
|
+
export { SliderBlock } from "./blocks/slider";
|
|
23
|
+
export { InquiryFormBlock } from "./blocks/inquiry-form";
|
|
24
|
+
export { HighlightsBlock } from "./blocks/highlights";
|
|
25
|
+
export { BentoGridBlock } from "./blocks/bento-grid";
|
|
26
|
+
export { PricingBlock } from "./blocks/pricing";
|
|
27
|
+
export { TeamBlock } from "./blocks/team";
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EACL,cAAc,EACd,SAAS,GAIV,MAAM,WAAW,CAAC;AAEnB,uBAAuB;AACvB,OAAO,EACL,aAAa,GAId,MAAM,yBAAyB,CAAC;AAEjC,qEAAqE;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,gEAAgE;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|