@vadimcomanescu/nadicode-design-system 2.0.5 → 2.0.7
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/.agents/skills/seed/contract.md +1 -0
- package/.agents/skills/seed/recipes/marketing-shell.md +10 -19
- package/.agents/skills/seed/recipes/navigation-shell.md +5 -5
- package/.agents/skills/seed/recipes/service-detail.md +1 -1
- package/.agents/skills/seed/references/blocks.md +25 -24
- package/.agents/skills/seed/references/brand-override.md +3 -1
- package/css/tokens.css +300 -122
- package/dist/catalog.json +1926 -125
- package/dist/chunk-2BADJLMV.js +117 -0
- package/dist/chunk-35EX5FP5.js +106 -0
- package/dist/chunk-5PORR6LE.js +60 -0
- package/dist/chunk-5PZ4VR2D.js +142 -0
- package/dist/chunk-5UESKK6S.js +76 -0
- package/dist/chunk-6N6CSJVE.js +269 -0
- package/dist/chunk-AURJQZC4.js +110 -0
- package/dist/{chunk-DF47R6LN.js → chunk-AWIG4QN6.js} +9 -9
- package/dist/chunk-AYWL4IYM.js +67 -0
- package/dist/{chunk-SV3KZ6CB.js → chunk-DSMGCFMJ.js} +7 -2
- package/dist/chunk-E4L6LR6P.js +33 -0
- package/dist/chunk-EJNF6JLL.js +105 -0
- package/dist/chunk-FX23F33E.js +57 -0
- package/dist/chunk-GJPTPLCQ.js +52 -0
- package/dist/chunk-GV4PKHG4.js +147 -0
- package/dist/chunk-HJ3A2YNO.js +163 -0
- package/dist/chunk-HJZRSPWB.js +38 -0
- package/dist/chunk-IDKZEPWK.js +133 -0
- package/dist/chunk-K7NQ6ZAW.js +84 -0
- package/dist/chunk-LCKLZ4XK.js +60 -0
- package/dist/chunk-MX5FUFQR.js +205 -0
- package/dist/chunk-NEHCPO53.js +44 -0
- package/dist/chunk-OHOOQUVJ.js +113 -0
- package/dist/chunk-QIHA7S3A.js +36 -0
- package/dist/chunk-RKQPU75I.js +126 -0
- package/dist/chunk-RMLS2QUC.js +77 -0
- package/dist/chunk-TS2JSPQR.js +120 -0
- package/dist/chunk-TUKZKU72.js +110 -0
- package/dist/chunk-TZXZFSD2.js +33 -0
- package/dist/chunk-UGV45DH3.js +18 -0
- package/dist/chunk-VBZQ4DBE.js +52 -0
- package/dist/{chunk-LQLFA2EL.js → chunk-VDONTZZX.js} +2 -2
- package/dist/{chunk-RWNJ54CI.js → chunk-VN475YZS.js} +1 -1
- package/dist/chunk-VZCB4APK.js +94 -0
- package/dist/chunk-W7FXDRQJ.js +94 -0
- package/dist/chunk-WAVU744B.js +183 -0
- package/dist/{chunk-5I3FWRC5.js → chunk-WOYBVPXK.js} +10 -10
- package/dist/chunk-WST5NLLC.js +73 -0
- package/dist/chunk-X6VXWEDO.js +125 -0
- package/dist/chunk-ZM2NODUK.js +39 -0
- package/dist/components/blocks/AccountLockedBlock.js +7 -57
- package/dist/components/blocks/ActivityFeedBlock.js +6 -39
- package/dist/components/blocks/AgentConversationBlock.js +5 -33
- package/dist/components/blocks/AudioVisualizerBlock.d.ts +1 -1
- package/dist/components/blocks/AudioVisualizerBlock.js +2 -2
- package/dist/components/blocks/AuthSuccessBlock.js +5 -60
- package/dist/components/blocks/BarChartBlock.d.ts +1 -1
- package/dist/components/blocks/BarChartBlock.js +2 -2
- package/dist/components/blocks/CallToActionBlock.d.ts +1 -1
- package/dist/components/blocks/CallToActionBlock.js +6 -52
- package/dist/components/blocks/ChangelogBlock.js +8 -105
- package/dist/components/blocks/ChartCollectionBlock.js +2 -2
- package/dist/components/blocks/CodeBlock.js +7 -60
- package/dist/components/blocks/ComparisonBlock.js +9 -94
- package/dist/components/blocks/ContactBlock.js +11 -120
- package/dist/components/blocks/FAQBlock.js +6 -44
- package/dist/components/blocks/FeatureBlock.d.ts +10 -14
- package/dist/components/blocks/FeatureBlock.js +17 -159
- package/dist/components/blocks/FeatureGridBlock.d.ts +1 -1
- package/dist/components/blocks/FeatureGridBlock.js +2 -2
- package/dist/components/blocks/FooterBlock.d.ts +2 -2
- package/dist/components/blocks/FooterBlock.js +11 -67
- package/dist/components/blocks/HeaderBlock.d.ts +2 -2
- package/dist/components/blocks/HeaderBlock.js +1 -1
- package/dist/components/blocks/HeatmapChartBlock.d.ts +1 -1
- package/dist/components/blocks/HeatmapChartBlock.js +1 -1
- package/dist/components/blocks/HeroBlock.d.ts +6 -3
- package/dist/components/blocks/HeroBlock.js +16 -199
- package/dist/components/blocks/HeroSectionBlock.d.ts +1 -1
- package/dist/components/blocks/HeroSectionBlock.js +4 -4
- package/dist/components/blocks/IntegrationsBlock.d.ts +1 -1
- package/dist/components/blocks/IntegrationsBlock.js +4 -4
- package/dist/components/blocks/InteractiveAreaChartBlock.d.ts +1 -1
- package/dist/components/blocks/InteractiveAreaChartBlock.js +2 -2
- package/dist/components/blocks/NewsletterBlock.js +11 -84
- package/dist/components/blocks/PasswordRecoveryBlock.js +14 -142
- package/dist/components/blocks/PricingBlock.d.ts +1 -1
- package/dist/components/blocks/PricingBlock.js +11 -110
- package/dist/components/blocks/ProcessFlowBlock.js +10 -77
- package/dist/components/blocks/ResetPasswordBlock.js +11 -125
- package/dist/components/blocks/SignUpBlock.d.ts +1 -1
- package/dist/components/blocks/SignUpBlock.js +2 -2
- package/dist/components/blocks/SocialProofBlock.d.ts +7 -11
- package/dist/components/blocks/SocialProofBlock.js +8 -107
- package/dist/components/blocks/StatsBlock.d.ts +1 -1
- package/dist/components/blocks/StatsBlock.js +2 -2
- package/dist/components/blocks/StatsMarketingBlock.d.ts +1 -1
- package/dist/components/blocks/StatsMarketingBlock.js +5 -36
- package/dist/components/blocks/TeamBlock.d.ts +1 -1
- package/dist/components/blocks/TeamBlock.js +4 -52
- package/dist/components/blocks/TestimonialsBlock.d.ts +1 -1
- package/dist/components/blocks/TestimonialsBlock.js +4 -133
- package/dist/components/blocks/TwoFactorChallengeBlock.js +9 -94
- package/dist/components/blocks/TwoFactorSetupBlock.js +16 -183
- package/dist/components/blocks/UsageDonutBlock.d.ts +1 -1
- package/dist/components/blocks/UsageDonutBlock.js +2 -2
- package/dist/components/logos/index.js +2 -2
- package/dist/components/page-kits/AccountLockedPageKit.d.ts +10 -0
- package/dist/components/page-kits/AccountLockedPageKit.js +48 -0
- package/dist/components/page-kits/AgentsChatPageKit.d.ts +46 -0
- package/dist/components/page-kits/AgentsChatPageKit.js +289 -0
- package/dist/components/page-kits/AnalyticsPageKit.d.ts +49 -0
- package/dist/components/page-kits/AnalyticsPageKit.js +277 -0
- package/dist/components/page-kits/BlogContentPageKit.d.ts +64 -0
- package/dist/components/page-kits/BlogContentPageKit.js +296 -0
- package/dist/components/page-kits/CheckoutPageKit.d.ts +36 -0
- package/dist/components/page-kits/CheckoutPageKit.js +209 -0
- package/dist/components/page-kits/CompanySuitePageKit.d.ts +25 -0
- package/dist/components/page-kits/CompanySuitePageKit.js +240 -0
- package/dist/components/page-kits/CrudFormPageKit.d.ts +54 -0
- package/dist/components/page-kits/CrudFormPageKit.js +138 -0
- package/dist/components/page-kits/CrudListDetailPageKit.d.ts +70 -0
- package/dist/components/page-kits/CrudListDetailPageKit.js +138 -0
- package/dist/components/page-kits/DashboardPageKit.d.ts +39 -0
- package/dist/components/page-kits/DashboardPageKit.js +284 -0
- package/dist/components/page-kits/ErrorPageKit.d.ts +22 -0
- package/dist/components/page-kits/ErrorPageKit.js +55 -0
- package/dist/components/page-kits/KanbanBoardPageKit.d.ts +31 -0
- package/dist/components/page-kits/KanbanBoardPageKit.js +305 -0
- package/dist/components/page-kits/LandingPageKit.d.ts +29 -0
- package/dist/components/page-kits/LandingPageKit.js +221 -0
- package/dist/components/page-kits/LoginPageKit.d.ts +16 -0
- package/dist/components/page-kits/LoginPageKit.js +43 -0
- package/dist/components/page-kits/MarketingShellPageKit.d.ts +21 -0
- package/dist/components/page-kits/MarketingShellPageKit.js +131 -0
- package/dist/components/page-kits/NavigationShellPageKit.d.ts +41 -0
- package/dist/components/page-kits/NavigationShellPageKit.js +132 -0
- package/dist/components/page-kits/OnboardingPageKit.d.ts +26 -0
- package/dist/components/page-kits/OnboardingPageKit.js +248 -0
- package/dist/components/page-kits/PricingPageKit.d.ts +41 -0
- package/dist/components/page-kits/PricingPageKit.js +279 -0
- package/dist/components/page-kits/ProfileSettingsPageKit.d.ts +50 -0
- package/dist/components/page-kits/ProfileSettingsPageKit.js +171 -0
- package/dist/components/page-kits/RecoveryPageKit.d.ts +17 -0
- package/dist/components/page-kits/RecoveryPageKit.js +58 -0
- package/dist/components/page-kits/ResetPageKit.d.ts +14 -0
- package/dist/components/page-kits/ResetPageKit.js +52 -0
- package/dist/components/page-kits/ServiceSuitePageKit.d.ts +25 -0
- package/dist/components/page-kits/ServiceSuitePageKit.js +320 -0
- package/dist/components/page-kits/SettingsPageKit.d.ts +27 -0
- package/dist/components/page-kits/SettingsPageKit.js +11 -0
- package/dist/components/page-kits/SignupPageKit.d.ts +15 -0
- package/dist/components/page-kits/SignupPageKit.js +41 -0
- package/dist/components/page-kits/SuccessPageKit.d.ts +15 -0
- package/dist/components/page-kits/SuccessPageKit.js +146 -0
- package/dist/components/page-kits/TeamSettingsPageKit.d.ts +50 -0
- package/dist/components/page-kits/TeamSettingsPageKit.js +297 -0
- package/dist/components/page-kits/TwoFactorPageKit.d.ts +16 -0
- package/dist/components/page-kits/TwoFactorPageKit.js +156 -0
- package/dist/components/page-kits/VerifyEmailPageKit.d.ts +15 -0
- package/dist/components/page-kits/VerifyEmailPageKit.js +146 -0
- package/dist/components/page-kits/VoiceAgentsPageKit.d.ts +35 -0
- package/dist/components/page-kits/VoiceAgentsPageKit.js +246 -0
- package/dist/components/ui/AudioWaveform.js +2 -76
- package/dist/components/ui/AvatarUpload.js +1 -1
- package/dist/components/ui/Breadcrumb.js +4 -106
- package/dist/components/ui/ChartCard.js +5 -38
- package/dist/components/ui/CheckoutFormDemo.js +5 -6
- package/dist/components/ui/DataFreshness.js +2 -73
- package/dist/components/ui/MouseEffect.js +1 -1
- package/dist/components/ui/NativeSelect.js +2 -18
- package/dist/components/ui/Pagination.js +6 -117
- package/dist/components/ui/ShaderBackground.js +2 -2
- package/dist/hooks/use-shader-preset.js +2 -2
- package/dist/lib/shader-presets.js +1 -1
- package/dist/lib/tokens.config.d.ts +19 -0
- package/package.json +793 -681
- package/scripts/ds-check.mjs +10 -2
- package/src/lib/tokens.config.js +63 -41
|
@@ -15,5 +15,5 @@ interface PricingTableProps {
|
|
|
15
15
|
showBillingToggle?: boolean;
|
|
16
16
|
className?: string;
|
|
17
17
|
}
|
|
18
|
-
export declare function
|
|
18
|
+
export declare function PricingBlock({ title, description, plans, showBillingToggle, className, }: PricingTableProps): import("react/jsx-runtime").JSX.Element;
|
|
19
19
|
export {};
|
|
@@ -1,125 +1,26 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
2
|
+
export { PricingBlock } from '../../chunk-AURJQZC4.js';
|
|
3
|
+
import '../../chunk-DARC2ACH.js';
|
|
3
4
|
import '../../chunk-G5EO22OR.js';
|
|
4
5
|
import '../../chunk-ANBJ2OLC.js';
|
|
5
6
|
import '../../chunk-LV4LBWCS.js';
|
|
6
7
|
import '../../chunk-XZ3A33GP.js';
|
|
7
|
-
import
|
|
8
|
+
import '../../chunk-F3T2U7YL.js';
|
|
8
9
|
import '../../chunk-6DYFX5IR.js';
|
|
9
10
|
import '../../chunk-EB5PYS7Q.js';
|
|
10
11
|
import '../../chunk-OHX2LFAH.js';
|
|
11
12
|
import '../../chunk-SGI25ZJ6.js';
|
|
12
|
-
import
|
|
13
|
-
import
|
|
13
|
+
import '../../chunk-R7N7YLFT.js';
|
|
14
|
+
import '../../chunk-DQPK2XRL.js';
|
|
14
15
|
import '../../chunk-ULLTRLBD.js';
|
|
15
16
|
import '../../chunk-4O6L5YWT.js';
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
17
|
+
import '../../chunk-WI547C47.js';
|
|
18
|
+
import '../../chunk-AH6YSYYT.js';
|
|
19
|
+
import '../../chunk-7KIDDF3I.js';
|
|
19
20
|
import '../../chunk-PD2YEH3H.js';
|
|
20
21
|
import '../../chunk-CRY67BIF.js';
|
|
21
22
|
import '../../chunk-HJC6U46F.js';
|
|
22
|
-
import
|
|
23
|
-
import
|
|
23
|
+
import '../../chunk-CXACRCZ4.js';
|
|
24
|
+
import '../../chunk-S4JAHKOP.js';
|
|
24
25
|
import '../../chunk-ASKFAYYR.js';
|
|
25
|
-
import
|
|
26
|
-
import { useTranslations } from 'next-intl';
|
|
27
|
-
import { useState } from 'react';
|
|
28
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
29
|
-
|
|
30
|
-
var defaultPlans = [
|
|
31
|
-
{
|
|
32
|
-
name: "Starter",
|
|
33
|
-
description: "Perfect for hobbyists and side projects.",
|
|
34
|
-
price: "$0",
|
|
35
|
-
period: "/forever",
|
|
36
|
-
features: ["1,000 requests/mo", "Community support", "1 project", "Basic analytics"],
|
|
37
|
-
action: "Get Started",
|
|
38
|
-
variant: "outline"
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
name: "Pro",
|
|
42
|
-
description: "For professional developers and small teams.",
|
|
43
|
-
price: (isYearly) => isYearly ? "$29" : "$39",
|
|
44
|
-
period: "/month",
|
|
45
|
-
features: ["100,000 requests/mo", "Priority support", "Unlimited projects", "Advanced analytics", "Custom domains"],
|
|
46
|
-
action: "Upgrade to Pro",
|
|
47
|
-
variant: "accent",
|
|
48
|
-
popular: true
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
name: "Enterprise",
|
|
52
|
-
description: "Custom solutions for large organizations.",
|
|
53
|
-
price: "Custom",
|
|
54
|
-
period: "",
|
|
55
|
-
features: ["Unlimited requests", "24/7 Dedicated support", "SSO & Audit logs", "SLA guarantees", "On-premise deployment"],
|
|
56
|
-
action: "Contact Sales",
|
|
57
|
-
variant: "outline"
|
|
58
|
-
}
|
|
59
|
-
];
|
|
60
|
-
function resolvePrice(price, isYearly) {
|
|
61
|
-
return typeof price === "function" ? price(isYearly) : price;
|
|
62
|
-
}
|
|
63
|
-
function PricingTable({
|
|
64
|
-
title = "Simple, transparent pricing",
|
|
65
|
-
description = "Choose the plan that's right for you. Change or cancel anytime.",
|
|
66
|
-
plans = defaultPlans,
|
|
67
|
-
showBillingToggle = true,
|
|
68
|
-
className
|
|
69
|
-
}) {
|
|
70
|
-
const t = useTranslations("blocks.pricingBlock");
|
|
71
|
-
const [isYearly, setIsYearly] = useState(false);
|
|
72
|
-
return /* @__PURE__ */ jsx("section", { className: className ?? "py-16 md:py-24", children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto px-6 lg:px-8", children: [
|
|
73
|
-
/* @__PURE__ */ jsxs("div", { className: "mb-12 text-center", children: [
|
|
74
|
-
/* @__PURE__ */ jsx(Heading, { level: 2, size: "section", className: "mb-4 sm:text-4xl", children: title }),
|
|
75
|
-
/* @__PURE__ */ jsx("p", { className: "mb-8 text-lg text-text-secondary", children: description }),
|
|
76
|
-
!!showBillingToggle && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-4", children: [
|
|
77
|
-
/* @__PURE__ */ jsx("span", { className: cn("text-sm font-medium", !isYearly ? "text-text-primary" : "text-text-tertiary"), children: t("monthly") }),
|
|
78
|
-
/* @__PURE__ */ jsx(Switch, { checked: isYearly, onCheckedChange: setIsYearly, "aria-label": t("toggleYearlyBilling") }),
|
|
79
|
-
/* @__PURE__ */ jsxs("span", { className: cn("text-sm font-medium", isYearly ? "text-text-primary" : "text-text-tertiary"), children: [
|
|
80
|
-
t("yearly"),
|
|
81
|
-
" ",
|
|
82
|
-
/* @__PURE__ */ jsx("span", { className: "ml-1.5 text-accent", children: t("savePercent") })
|
|
83
|
-
] })
|
|
84
|
-
] })
|
|
85
|
-
] }),
|
|
86
|
-
/* @__PURE__ */ jsx(StaggerChildren, { staggerMs: 120, className: "grid gap-8 md:grid-cols-3", children: plans.map((plan) => {
|
|
87
|
-
const priceStr = resolvePrice(plan.price, isYearly);
|
|
88
|
-
const card = /* @__PURE__ */ jsxs(
|
|
89
|
-
Card,
|
|
90
|
-
{
|
|
91
|
-
interactive: true,
|
|
92
|
-
className: cn(
|
|
93
|
-
"flex flex-col relative overflow-hidden transition-all duration-300",
|
|
94
|
-
plan.popular ? "border-accent shadow-lg shadow-accent/5 z-10" : "border-border/50 hover:border-border"
|
|
95
|
-
),
|
|
96
|
-
children: [
|
|
97
|
-
plan.popular && /* @__PURE__ */ jsx("div", { className: "absolute -top-4 left-0 ring-0 w-full flex justify-center", children: /* @__PURE__ */ jsx(Badge, { variant: "accent", className: "shadow-lg", children: t("mostPopular") }) }),
|
|
98
|
-
/* @__PURE__ */ jsxs(CardHeader, { className: "pb-8 pt-8", children: [
|
|
99
|
-
/* @__PURE__ */ jsx(CardTitle, { className: "text-xl font-semibold text-text-primary", children: plan.name }),
|
|
100
|
-
/* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: plan.description })
|
|
101
|
-
] }),
|
|
102
|
-
/* @__PURE__ */ jsxs(CardContent, { className: "flex-1", children: [
|
|
103
|
-
/* @__PURE__ */ jsxs("div", { className: "mb-8 flex items-baseline", children: [
|
|
104
|
-
priceStr === "Custom" ? /* @__PURE__ */ jsx("span", { className: "text-4xl font-extrabold text-text-primary", children: priceStr }) : /* @__PURE__ */ jsxs("span", { className: "text-4xl font-extrabold text-text-primary tabular-nums", children: [
|
|
105
|
-
"$",
|
|
106
|
-
/* @__PURE__ */ jsx(CountingNumber, { number: parseInt(priceStr.slice(1), 10), inViewOnce: true })
|
|
107
|
-
] }),
|
|
108
|
-
/* @__PURE__ */ jsx("span", { className: "ml-1.5 text-text-tertiary", children: plan.period })
|
|
109
|
-
] }),
|
|
110
|
-
/* @__PURE__ */ jsx("ul", { className: "space-y-4", children: plan.features.map((feature) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-4 text-sm text-text-secondary", children: [
|
|
111
|
-
/* @__PURE__ */ jsx("div", { className: cn("flex h-5 w-5 items-center justify-center rounded-full bg-primary/10 text-primary"), children: /* @__PURE__ */ jsx(CheckIcon, { size: 12 }) }),
|
|
112
|
-
feature
|
|
113
|
-
] }, feature)) })
|
|
114
|
-
] }),
|
|
115
|
-
/* @__PURE__ */ jsx(CardFooter, { children: /* @__PURE__ */ jsx(Button, { className: "w-full", variant: plan.variant, children: plan.action }) })
|
|
116
|
-
]
|
|
117
|
-
},
|
|
118
|
-
plan.name
|
|
119
|
-
);
|
|
120
|
-
return plan.popular ? /* @__PURE__ */ jsx(Shine, { enable: true, loop: true, loopDelay: 3e3, color: "var(--color-accent)", opacity: 0.12, duration: 1500, children: card }, plan.name) : /* @__PURE__ */ jsx("div", { children: card }, plan.name);
|
|
121
|
-
}) })
|
|
122
|
-
] }) });
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
export { PricingTable };
|
|
26
|
+
import '../../chunk-QYZT24TS.js';
|
|
@@ -1,82 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
2
|
+
export { ProcessFlowBlock } from '../../chunk-RMLS2QUC.js';
|
|
3
|
+
import '../../chunk-DQPK2XRL.js';
|
|
4
|
+
import '../../chunk-WI547C47.js';
|
|
5
|
+
import '../../chunk-I23DDSU7.js';
|
|
6
|
+
import '../../chunk-AH6YSYYT.js';
|
|
6
7
|
import '../../chunk-PD2YEH3H.js';
|
|
7
8
|
import '../../chunk-CRY67BIF.js';
|
|
8
9
|
import '../../chunk-HJC6U46F.js';
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
10
|
+
import '../../chunk-CGUCH322.js';
|
|
11
|
+
import '../../chunk-OITJWGFV.js';
|
|
12
|
+
import '../../chunk-T6BRD7TS.js';
|
|
13
|
+
import '../../chunk-S4JAHKOP.js';
|
|
13
14
|
import '../../chunk-ASKFAYYR.js';
|
|
14
|
-
import
|
|
15
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
16
|
-
|
|
17
|
-
var defaultSteps = [
|
|
18
|
-
{
|
|
19
|
-
title: "Discovery",
|
|
20
|
-
description: "We analyze your workflows and identify automation opportunities.",
|
|
21
|
-
icon: /* @__PURE__ */ jsx(SearchIcon, { size: 24, "aria-hidden": true })
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
title: "Implementation",
|
|
25
|
-
description: "Our team builds and integrates AI solutions tailored to your needs.",
|
|
26
|
-
icon: /* @__PURE__ */ jsx(SettingsIcon, { size: 24, "aria-hidden": true })
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
title: "Optimization",
|
|
30
|
-
description: "Continuous monitoring and refinement to maximize ROI.",
|
|
31
|
-
icon: /* @__PURE__ */ jsx(SparklesIcon, { size: 24, "aria-hidden": true })
|
|
32
|
-
}
|
|
33
|
-
];
|
|
34
|
-
function ProcessFlowBlock({
|
|
35
|
-
title = "How it works",
|
|
36
|
-
description,
|
|
37
|
-
badge,
|
|
38
|
-
steps = defaultSteps,
|
|
39
|
-
className
|
|
40
|
-
}) {
|
|
41
|
-
const colsClass = steps.length === 4 ? "md:grid-cols-4" : "md:grid-cols-3";
|
|
42
|
-
return /* @__PURE__ */ jsx("section", { className: cn("py-16 md:py-32", className), children: /* @__PURE__ */ jsxs("div", { className: "mx-auto max-w-5xl px-6", children: [
|
|
43
|
-
/* @__PURE__ */ jsx(ScrollFadeIn, { children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
|
|
44
|
-
!!badge && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "mb-4", children: badge }),
|
|
45
|
-
/* @__PURE__ */ jsx(Heading, { level: 2, size: "section", className: "text-4xl lg:text-5xl", children: title }),
|
|
46
|
-
!!description && /* @__PURE__ */ jsx("p", { className: "mt-4 text-text-secondary", children: description })
|
|
47
|
-
] }) }),
|
|
48
|
-
/* @__PURE__ */ jsxs("div", { className: "relative mt-8 md:mt-16", children: [
|
|
49
|
-
/* @__PURE__ */ jsx(
|
|
50
|
-
"div",
|
|
51
|
-
{
|
|
52
|
-
"aria-hidden": true,
|
|
53
|
-
className: "absolute left-6 top-0 hidden h-full w-px border-l border-dashed border-border md:left-0 md:right-0 md:top-10 md:mx-auto md:block md:h-px md:w-full md:border-l-0 md:border-t"
|
|
54
|
-
}
|
|
55
|
-
),
|
|
56
|
-
/* @__PURE__ */ jsx(
|
|
57
|
-
"div",
|
|
58
|
-
{
|
|
59
|
-
"aria-hidden": true,
|
|
60
|
-
className: "absolute left-6 top-0 block h-full w-px border-l border-dashed border-border md:hidden"
|
|
61
|
-
}
|
|
62
|
-
),
|
|
63
|
-
/* @__PURE__ */ jsx(
|
|
64
|
-
StaggerChildren,
|
|
65
|
-
{
|
|
66
|
-
staggerMs: 120,
|
|
67
|
-
className: cn("relative grid gap-8", colsClass),
|
|
68
|
-
children: steps.map((step, i) => /* @__PURE__ */ jsxs("div", { className: "relative flex flex-col items-center text-center", children: [
|
|
69
|
-
/* @__PURE__ */ jsx("div", { className: "mb-4 flex size-10 items-center justify-center rounded-full bg-accent text-accent-foreground text-sm font-bold", children: String(i + 1).padStart(2, "0") }),
|
|
70
|
-
/* @__PURE__ */ jsxs(Card, { className: "w-full", children: [
|
|
71
|
-
step.icon && /* @__PURE__ */ jsx("div", { className: "mb-2 flex justify-center text-accent", children: step.icon }),
|
|
72
|
-
/* @__PURE__ */ jsx(Heading, { level: 3, size: "title", className: "font-medium", children: step.title }),
|
|
73
|
-
/* @__PURE__ */ jsx("p", { className: "mt-2 text-sm text-text-secondary", children: step.description })
|
|
74
|
-
] })
|
|
75
|
-
] }, step.title))
|
|
76
|
-
}
|
|
77
|
-
)
|
|
78
|
-
] })
|
|
79
|
-
] }) });
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export { ProcessFlowBlock };
|
|
15
|
+
import '../../chunk-QYZT24TS.js';
|
|
@@ -1,133 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
export { ResetPasswordBlock } from '../../chunk-X6VXWEDO.js';
|
|
3
|
+
import '../../chunk-ZLSWCV55.js';
|
|
4
|
+
import '../../chunk-UJDEGCCZ.js';
|
|
5
|
+
import '../../chunk-RX5EUODB.js';
|
|
5
6
|
import '../../chunk-AP3XXYAY.js';
|
|
6
7
|
import '../../chunk-LIBXYD5Q.js';
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
8
|
+
import '../../chunk-AH6YSYYT.js';
|
|
9
|
+
import '../../chunk-7KIDDF3I.js';
|
|
10
|
+
import '../../chunk-PD2YEH3H.js';
|
|
10
11
|
import '../../chunk-CRY67BIF.js';
|
|
11
12
|
import '../../chunk-HJC6U46F.js';
|
|
12
|
-
import
|
|
13
|
+
import '../../chunk-QSU23VYZ.js';
|
|
13
14
|
import '../../chunk-666N6OTL.js';
|
|
14
15
|
import '../../chunk-FMH55OKV.js';
|
|
15
|
-
import
|
|
16
|
-
import
|
|
16
|
+
import '../../chunk-CXACRCZ4.js';
|
|
17
|
+
import '../../chunk-UIUMTURU.js';
|
|
17
18
|
import '../../chunk-ASKFAYYR.js';
|
|
18
|
-
import
|
|
19
|
-
import * as React from 'react';
|
|
20
|
-
import { useTranslations } from 'next-intl';
|
|
21
|
-
import { useReducedMotion } from 'motion/react';
|
|
22
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
23
|
-
|
|
24
|
-
var RULE_TESTS = [
|
|
25
|
-
{ key: "minLength", test: (v) => v.length >= 8 },
|
|
26
|
-
{ key: "uppercase", test: (v) => /[A-Z]/.test(v) },
|
|
27
|
-
{ key: "number", test: (v) => /\d/.test(v) },
|
|
28
|
-
{ key: "special", test: (v) => /[^A-Za-z0-9]/.test(v) }
|
|
29
|
-
];
|
|
30
|
-
function ResetPasswordBlock({
|
|
31
|
-
className,
|
|
32
|
-
onSubmit,
|
|
33
|
-
onBackToLogin,
|
|
34
|
-
title,
|
|
35
|
-
description
|
|
36
|
-
}) {
|
|
37
|
-
const prefersReduced = useReducedMotion();
|
|
38
|
-
const t = useTranslations("auth.reset");
|
|
39
|
-
const [password, setPassword] = React.useState("");
|
|
40
|
-
const [confirm, setConfirm] = React.useState("");
|
|
41
|
-
const [loading, setLoading] = React.useState(false);
|
|
42
|
-
const [error, setError] = React.useState("");
|
|
43
|
-
const resolvedTitle = title ?? t("title");
|
|
44
|
-
const resolvedDescription = description ?? t("description");
|
|
45
|
-
const rules = React.useMemo(() => RULE_TESTS.map((r) => ({ label: t(`rules.${r.key}`), test: r.test })), [t]);
|
|
46
|
-
const allRulesPass = rules.every((r) => r.test(password));
|
|
47
|
-
const passwordsMatch = password === confirm && confirm.length > 0;
|
|
48
|
-
const handleSubmit = (e) => {
|
|
49
|
-
e.preventDefault();
|
|
50
|
-
if (!allRulesPass) return;
|
|
51
|
-
if (!passwordsMatch) {
|
|
52
|
-
setError(t("passwordMismatch"));
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
setError("");
|
|
56
|
-
setLoading(true);
|
|
57
|
-
onSubmit?.(password);
|
|
58
|
-
};
|
|
59
|
-
return /* @__PURE__ */ jsx(m.div, { ...prefersReduced ? {} : scaleIn, className: cn("w-full max-w-sm mx-auto", className), children: /* @__PURE__ */ jsxs(Card, { children: [
|
|
60
|
-
/* @__PURE__ */ jsxs(CardHeader, { className: "text-center", children: [
|
|
61
|
-
/* @__PURE__ */ jsx("div", { className: "mx-auto mb-2", children: /* @__PURE__ */ jsx(KeyIcon, { size: 32, className: "text-text-secondary" }) }),
|
|
62
|
-
/* @__PURE__ */ jsx(CardTitle, { className: "text-2xl", children: resolvedTitle }),
|
|
63
|
-
/* @__PURE__ */ jsx(CardDescription, { children: resolvedDescription })
|
|
64
|
-
] }),
|
|
65
|
-
/* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs("form", { noValidate: true, onSubmit: handleSubmit, className: "grid gap-4", children: [
|
|
66
|
-
/* @__PURE__ */ jsxs(Field, { children: [
|
|
67
|
-
/* @__PURE__ */ jsx(FieldLabel, { htmlFor: "new-password", children: t("newPassword") }),
|
|
68
|
-
/* @__PURE__ */ jsx(
|
|
69
|
-
PasswordInput,
|
|
70
|
-
{
|
|
71
|
-
name: "password",
|
|
72
|
-
id: "new-password",
|
|
73
|
-
value: password,
|
|
74
|
-
onChange: (e) => setPassword(e.target.value),
|
|
75
|
-
placeholder: t("newPasswordPlaceholder"),
|
|
76
|
-
autoComplete: "new-password"
|
|
77
|
-
}
|
|
78
|
-
)
|
|
79
|
-
] }),
|
|
80
|
-
/* @__PURE__ */ jsxs(Field, { children: [
|
|
81
|
-
/* @__PURE__ */ jsx(FieldLabel, { htmlFor: "confirm-password", children: t("confirmPassword") }),
|
|
82
|
-
/* @__PURE__ */ jsx(
|
|
83
|
-
PasswordInput,
|
|
84
|
-
{
|
|
85
|
-
name: "confirmPassword",
|
|
86
|
-
id: "confirm-password",
|
|
87
|
-
value: confirm,
|
|
88
|
-
onChange: (e) => setConfirm(e.target.value),
|
|
89
|
-
placeholder: t("confirmPasswordPlaceholder"),
|
|
90
|
-
autoComplete: "new-password"
|
|
91
|
-
}
|
|
92
|
-
)
|
|
93
|
-
] }),
|
|
94
|
-
/* @__PURE__ */ jsxs("ul", { className: "space-y-1.5 text-xs", "aria-label": "Password requirements", children: [
|
|
95
|
-
rules.map((rule) => {
|
|
96
|
-
const pass = rule.test(password);
|
|
97
|
-
return /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2", children: [
|
|
98
|
-
pass ? /* @__PURE__ */ jsx(CheckIcon, { size: 14, className: "text-success shrink-0" }) : /* @__PURE__ */ jsx(XIcon, { size: 14, className: "text-text-tertiary shrink-0" }),
|
|
99
|
-
/* @__PURE__ */ jsx("span", { className: pass ? "text-success" : "text-text-tertiary", children: rule.label })
|
|
100
|
-
] }, rule.label);
|
|
101
|
-
}),
|
|
102
|
-
/* @__PURE__ */ jsxs("li", { className: "flex items-center gap-2", children: [
|
|
103
|
-
passwordsMatch ? /* @__PURE__ */ jsx(CheckIcon, { size: 14, className: "text-success shrink-0" }) : /* @__PURE__ */ jsx(XIcon, { size: 14, className: "text-text-tertiary shrink-0" }),
|
|
104
|
-
/* @__PURE__ */ jsx("span", { className: passwordsMatch ? "text-success" : "text-text-tertiary", children: t("rules.match") })
|
|
105
|
-
] })
|
|
106
|
-
] }),
|
|
107
|
-
!!error && /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-destructive", children: error }),
|
|
108
|
-
/* @__PURE__ */ jsx(
|
|
109
|
-
Button,
|
|
110
|
-
{
|
|
111
|
-
variant: "accent",
|
|
112
|
-
className: "w-full",
|
|
113
|
-
disabled: loading || !allRulesPass || !passwordsMatch,
|
|
114
|
-
children: loading ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
115
|
-
/* @__PURE__ */ jsx(Spinner, { className: "mr-2" }),
|
|
116
|
-
t("pending")
|
|
117
|
-
] }) : t("submit")
|
|
118
|
-
}
|
|
119
|
-
)
|
|
120
|
-
] }) }),
|
|
121
|
-
/* @__PURE__ */ jsx(CardFooter, { className: "justify-center", children: /* @__PURE__ */ jsx(
|
|
122
|
-
"button",
|
|
123
|
-
{
|
|
124
|
-
type: "button",
|
|
125
|
-
onClick: onBackToLogin,
|
|
126
|
-
className: "text-sm text-text-tertiary hover:text-text-primary transition-colors",
|
|
127
|
-
children: t("backToLogin")
|
|
128
|
-
}
|
|
129
|
-
) })
|
|
130
|
-
] }) });
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export { ResetPasswordBlock };
|
|
19
|
+
import '../../chunk-QYZT24TS.js';
|
|
@@ -7,5 +7,5 @@ interface SignUpBlockProps {
|
|
|
7
7
|
onSubmit?: (e: FormEvent<HTMLFormElement>) => void;
|
|
8
8
|
className?: string;
|
|
9
9
|
}
|
|
10
|
-
export declare function
|
|
10
|
+
export declare function SignUpBlock({ title, description, showSocial, signInHref, onSubmit, className, }: SignUpBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
11
11
|
export {};
|
|
@@ -14,7 +14,7 @@ import '../../chunk-QYZT24TS.js';
|
|
|
14
14
|
import Link from 'next/link';
|
|
15
15
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
16
16
|
|
|
17
|
-
function
|
|
17
|
+
function SignUpBlock({
|
|
18
18
|
title = `Create a ${siteConfig.name} Account`,
|
|
19
19
|
description = "Welcome! Create an account to get started",
|
|
20
20
|
showSocial = true,
|
|
@@ -171,4 +171,4 @@ function LoginPage({
|
|
|
171
171
|
) });
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
export {
|
|
174
|
+
export { SignUpBlock };
|
|
@@ -1,23 +1,19 @@
|
|
|
1
|
-
interface LogoItem {
|
|
1
|
+
export interface LogoItem {
|
|
2
2
|
name: string;
|
|
3
3
|
icon: (props: React.SVGProps<SVGSVGElement>) => React.ReactNode;
|
|
4
4
|
}
|
|
5
|
-
interface
|
|
6
|
-
logos?: LogoItem[];
|
|
7
|
-
title?: string;
|
|
8
|
-
className?: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function LogoCloud({ logos, title, className, }?: LogoCloudProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
interface SocialTestimonialItem {
|
|
5
|
+
export interface SocialTestimonialItem {
|
|
12
6
|
quote: string;
|
|
13
7
|
author: string;
|
|
14
8
|
role: string;
|
|
15
9
|
avatar: string;
|
|
16
10
|
}
|
|
17
|
-
|
|
11
|
+
export type SocialProofBlockVariant = "logo-cloud" | "testimonials";
|
|
12
|
+
export interface SocialProofBlockProps {
|
|
13
|
+
variant?: SocialProofBlockVariant;
|
|
14
|
+
logos?: LogoItem[];
|
|
18
15
|
title?: string;
|
|
19
16
|
testimonials?: SocialTestimonialItem[];
|
|
20
17
|
className?: string;
|
|
21
18
|
}
|
|
22
|
-
export declare function
|
|
23
|
-
export {};
|
|
19
|
+
export declare function SocialProofBlock({ variant, ...props }: SocialProofBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
|
|
2
|
+
export { SocialProofBlock } from '../../chunk-OHOOQUVJ.js';
|
|
3
|
+
import '../../chunk-DARC2ACH.js';
|
|
3
4
|
import '../../chunk-G5EO22OR.js';
|
|
4
5
|
import '../../chunk-ANBJ2OLC.js';
|
|
5
6
|
import '../../chunk-LV4LBWCS.js';
|
|
@@ -8,115 +9,15 @@ import '../../chunk-F3T2U7YL.js';
|
|
|
8
9
|
import '../../chunk-6DYFX5IR.js';
|
|
9
10
|
import '../../chunk-EB5PYS7Q.js';
|
|
10
11
|
import '../../chunk-OHX2LFAH.js';
|
|
11
|
-
import
|
|
12
|
-
import
|
|
12
|
+
import '../../chunk-SGI25ZJ6.js';
|
|
13
|
+
import '../../chunk-DQPK2XRL.js';
|
|
13
14
|
import '../../chunk-ULLTRLBD.js';
|
|
14
15
|
import '../../chunk-4O6L5YWT.js';
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
16
|
+
import '../../chunk-WI547C47.js';
|
|
17
|
+
import '../../chunk-A7NUWD76.js';
|
|
18
|
+
import '../../chunk-AH6YSYYT.js';
|
|
19
|
+
import '../../chunk-NAAU5IWU.js';
|
|
19
20
|
import '../../chunk-PD2YEH3H.js';
|
|
20
21
|
import '../../chunk-CRY67BIF.js';
|
|
21
22
|
import '../../chunk-HJC6U46F.js';
|
|
22
23
|
import '../../chunk-QYZT24TS.js';
|
|
23
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
24
|
-
|
|
25
|
-
var defaultLogos = [
|
|
26
|
-
{ name: "Vercel", icon: (props) => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", ...props, children: /* @__PURE__ */ jsx("path", { d: "M12 2L22 22H2L12 2Z", fill: "currentColor", stroke: "none" }) }) },
|
|
27
|
-
{ name: "Stripe", icon: (props) => /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", ...props, children: /* @__PURE__ */ jsx("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2" }) }) },
|
|
28
|
-
{ name: "OpenAI", icon: (props) => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", ...props, children: [
|
|
29
|
-
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
30
|
-
/* @__PURE__ */ jsx("path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20" })
|
|
31
|
-
] }) },
|
|
32
|
-
{ name: siteConfig.name, icon: (props) => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", ...props, children: [
|
|
33
|
-
/* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", ry: "2" }),
|
|
34
|
-
/* @__PURE__ */ jsx("path", { d: "M9 9h6v6H9z" })
|
|
35
|
-
] }) },
|
|
36
|
-
{ name: "Next.js", icon: (props) => /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", ...props, children: [
|
|
37
|
-
/* @__PURE__ */ jsx("path", { d: "M21 8v8a5 5 0 0 1-5 5H8a5 5 0 0 1-5-5V8a5 5 0 0 1 5-5h8a5 5 0 0 1 5 5z" }),
|
|
38
|
-
/* @__PURE__ */ jsx("path", { d: "M10 12h4" })
|
|
39
|
-
] }) }
|
|
40
|
-
];
|
|
41
|
-
function LogoCloud({
|
|
42
|
-
logos = defaultLogos,
|
|
43
|
-
title = "Trusted by innovative teams",
|
|
44
|
-
className
|
|
45
|
-
} = {}) {
|
|
46
|
-
return /* @__PURE__ */ jsx("div", { className: className ?? "w-full py-12 lg:py-16", children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto px-4 text-center", children: [
|
|
47
|
-
/* @__PURE__ */ jsx("p", { className: "mb-8 text-sm font-medium text-text-tertiary uppercase tracking-wider", children: title }),
|
|
48
|
-
/* @__PURE__ */ jsx(StaggerChildren, { staggerMs: 60, distance: 12, className: "flex flex-wrap gap-8 items-center justify-center opacity-70", children: logos.map((logo) => /* @__PURE__ */ jsxs(
|
|
49
|
-
"div",
|
|
50
|
-
{
|
|
51
|
-
className: "group flex items-center justify-center transition-all duration-300 hover:opacity-100 hover:scale-110",
|
|
52
|
-
children: [
|
|
53
|
-
/* @__PURE__ */ jsx(logo.icon, { className: "h-8 w-8 text-text-tertiary transition-colors group-hover:text-primary group-hover:drop-shadow-[0_0_8px_rgb(var(--color-primary)/0.5)]" }),
|
|
54
|
-
/* @__PURE__ */ jsx("span", { className: "ml-2 text-lg font-semibold text-text-tertiary group-hover:text-text-primary hidden md:inline-block", children: logo.name })
|
|
55
|
-
]
|
|
56
|
-
},
|
|
57
|
-
logo.name
|
|
58
|
-
)) })
|
|
59
|
-
] }) });
|
|
60
|
-
}
|
|
61
|
-
var defaultSocialTestimonials = [
|
|
62
|
-
{
|
|
63
|
-
quote: "Seed has completely transformed how we build AI interfaces. The depth and realism are unmatched.",
|
|
64
|
-
author: "Sarah Chen",
|
|
65
|
-
role: "Product Designer @ NeuralNet",
|
|
66
|
-
avatar: "SC"
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
quote: "The glassmorphism effects are incredibly performant. It feels like a native app running in the browser.",
|
|
70
|
-
author: "Marcus Rodriguez",
|
|
71
|
-
role: "Frontend Lead @ FutureScale",
|
|
72
|
-
avatar: "MR"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
quote: "Finally, a design system that understands what 'futuristic' actually means. No more flat, boring SaaS UI.",
|
|
76
|
-
author: "Elena Kowalski",
|
|
77
|
-
role: "CTO @ CyberSystems",
|
|
78
|
-
avatar: "EK"
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
quote: "Development velocity increased by 3x. The components are so easy to compose.",
|
|
82
|
-
author: "David Park",
|
|
83
|
-
role: "Indie Hacker",
|
|
84
|
-
avatar: "DP"
|
|
85
|
-
}
|
|
86
|
-
];
|
|
87
|
-
function Testimonials({
|
|
88
|
-
title = "Loved by Builders",
|
|
89
|
-
testimonials = defaultSocialTestimonials,
|
|
90
|
-
className
|
|
91
|
-
} = {}) {
|
|
92
|
-
return /* @__PURE__ */ jsx("section", { className: className ?? "py-16 md:py-24 relative overflow-hidden", children: /* @__PURE__ */ jsxs("div", { className: "container mx-auto px-6 lg:px-8", children: [
|
|
93
|
-
/* @__PURE__ */ jsx(Heading, { level: 2, size: "section", className: "text-center mb-12", children: /* @__PURE__ */ jsx(
|
|
94
|
-
ShimmeringText,
|
|
95
|
-
{
|
|
96
|
-
text: title,
|
|
97
|
-
color: "var(--color-text-primary)",
|
|
98
|
-
shimmeringColor: "var(--color-accent)",
|
|
99
|
-
duration: 2
|
|
100
|
-
}
|
|
101
|
-
) }),
|
|
102
|
-
/* @__PURE__ */ jsx(StaggerChildren, { staggerMs: 100, direction: "up", distance: 20, className: "flex flex-wrap justify-center gap-6", children: testimonials.map((t, i) => /* @__PURE__ */ jsx(Shine, { enableOnHover: true, loop: true, loopDelay: 200, color: "var(--color-accent)", opacity: 0.15, children: /* @__PURE__ */ jsx(Card, { interactive: true, className: "w-full max-w-md", children: /* @__PURE__ */ jsxs(CardContent, { className: "p-6", children: [
|
|
103
|
-
/* @__PURE__ */ jsxs("p", { className: "mb-4 text-lg text-text-secondary leading-relaxed", children: [
|
|
104
|
-
'"',
|
|
105
|
-
t.quote,
|
|
106
|
-
'"'
|
|
107
|
-
] }),
|
|
108
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
109
|
-
/* @__PURE__ */ jsxs(Avatar, { className: "h-10 w-10 border border-primary/20", children: [
|
|
110
|
-
/* @__PURE__ */ jsx(AvatarImage, { src: `https://api.dicebear.com/7.x/avataaars/svg?seed=${t.author}` }),
|
|
111
|
-
/* @__PURE__ */ jsx(AvatarFallback, { children: t.avatar })
|
|
112
|
-
] }),
|
|
113
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
114
|
-
/* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-text-primary", children: t.author }),
|
|
115
|
-
/* @__PURE__ */ jsx("div", { className: "text-xs text-text-tertiary", children: t.role })
|
|
116
|
-
] })
|
|
117
|
-
] })
|
|
118
|
-
] }) }) }, i)) })
|
|
119
|
-
] }) });
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export { LogoCloud, Testimonials };
|
|
@@ -17,5 +17,5 @@ interface StatsGenericProps {
|
|
|
17
17
|
stats?: StatItem[];
|
|
18
18
|
className?: string;
|
|
19
19
|
}
|
|
20
|
-
export declare function
|
|
20
|
+
export declare function StatsBlock({ stats, className, }: StatsGenericProps): import("react/jsx-runtime").JSX.Element;
|
|
21
21
|
export {};
|
|
@@ -157,7 +157,7 @@ var defaultStats = [
|
|
|
157
157
|
periodText: "since last hour"
|
|
158
158
|
}
|
|
159
159
|
];
|
|
160
|
-
function
|
|
160
|
+
function StatsBlock({
|
|
161
161
|
stats = defaultStats,
|
|
162
162
|
className
|
|
163
163
|
}) {
|
|
@@ -177,4 +177,4 @@ function StatsGeneric({
|
|
|
177
177
|
)) });
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
export {
|
|
180
|
+
export { StatsBlock };
|
|
@@ -10,5 +10,5 @@ interface StatsSectionProps {
|
|
|
10
10
|
stats?: StatItem[];
|
|
11
11
|
className?: string;
|
|
12
12
|
}
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function StatsMarketingBlock({ title, description, stats, className, }: StatsSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
14
14
|
export {};
|