nextworks 0.2.0-alpha.11 → 0.2.0-alpha.13

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.
Files changed (111) hide show
  1. package/README.md +283 -282
  2. package/dist/cli_manifests/blocks_manifest.json +198 -175
  3. package/dist/kits/blocks/.nextworks/docs/BLOCKS_QUICKSTART.md +101 -100
  4. package/dist/kits/blocks/.nextworks/docs/BLOCKS_README.md +105 -104
  5. package/dist/kits/blocks/.nextworks/docs/THEME_GUIDE.md +1 -1
  6. package/dist/kits/blocks/app/templates/aiworkflow/PresetThemeVars.tsx +58 -0
  7. package/dist/kits/blocks/app/templates/aiworkflow/README.md +46 -0
  8. package/dist/kits/blocks/app/templates/aiworkflow/components/CTA.tsx +44 -0
  9. package/dist/kits/blocks/app/templates/aiworkflow/components/Contact.tsx +105 -0
  10. package/dist/kits/blocks/app/templates/aiworkflow/components/FAQ.tsx +63 -0
  11. package/dist/kits/blocks/app/templates/aiworkflow/components/Features.tsx +65 -0
  12. package/dist/kits/blocks/app/templates/aiworkflow/components/Footer.tsx +109 -0
  13. package/dist/kits/blocks/app/templates/aiworkflow/components/Hero.tsx +636 -0
  14. package/dist/kits/blocks/app/templates/aiworkflow/components/Navbar.tsx +90 -0
  15. package/dist/kits/blocks/app/templates/aiworkflow/components/Pricing.tsx +86 -0
  16. package/dist/kits/blocks/app/templates/aiworkflow/components/ProcessTimeline.tsx +103 -0
  17. package/dist/kits/blocks/app/templates/aiworkflow/components/Testimonials.tsx +56 -0
  18. package/dist/kits/blocks/app/templates/aiworkflow/components/TrustBadges.tsx +59 -0
  19. package/dist/kits/blocks/app/templates/aiworkflow/page.tsx +43 -0
  20. package/dist/kits/blocks/app/templates/digitalagency/PresetThemeVars.tsx +80 -80
  21. package/dist/kits/blocks/app/templates/digitalagency/README.md +42 -42
  22. package/dist/kits/blocks/app/templates/digitalagency/components/Pricing.tsx +114 -114
  23. package/dist/kits/blocks/app/templates/digitalagency/components/Process.tsx +59 -59
  24. package/dist/kits/blocks/app/templates/digitalagency/components/Services.tsx +55 -55
  25. package/dist/kits/blocks/app/templates/digitalagency/components/Team.tsx +28 -28
  26. package/dist/kits/blocks/app/templates/digitalagency/components/Testimonials.tsx +65 -65
  27. package/dist/kits/blocks/app/templates/digitalagency/page.tsx +38 -38
  28. package/dist/kits/blocks/app/templates/gallery/PresetThemeVars.tsx +84 -84
  29. package/dist/kits/blocks/app/templates/productlaunch/PresetThemeVars.tsx +75 -75
  30. package/dist/kits/blocks/app/templates/productlaunch/README.md +62 -62
  31. package/dist/kits/blocks/app/templates/productlaunch/components/About.tsx +84 -84
  32. package/dist/kits/blocks/app/templates/productlaunch/components/CTA.tsx +50 -50
  33. package/dist/kits/blocks/app/templates/productlaunch/components/Contact.tsx +231 -231
  34. package/dist/kits/blocks/app/templates/productlaunch/components/FAQ.tsx +86 -86
  35. package/dist/kits/blocks/app/templates/productlaunch/components/Features.tsx +83 -83
  36. package/dist/kits/blocks/app/templates/productlaunch/components/Footer.tsx +132 -132
  37. package/dist/kits/blocks/app/templates/productlaunch/components/Hero.tsx +88 -88
  38. package/dist/kits/blocks/app/templates/productlaunch/components/Navbar.tsx +116 -116
  39. package/dist/kits/blocks/app/templates/productlaunch/components/Pricing.tsx +106 -106
  40. package/dist/kits/blocks/app/templates/productlaunch/components/ProcessTimeline.tsx +110 -110
  41. package/dist/kits/blocks/app/templates/productlaunch/components/ServicesGrid.tsx +68 -68
  42. package/dist/kits/blocks/app/templates/productlaunch/components/Team.tsx +104 -104
  43. package/dist/kits/blocks/app/templates/productlaunch/components/Testimonials.tsx +90 -90
  44. package/dist/kits/blocks/app/templates/productlaunch/components/TrustBadges.tsx +76 -76
  45. package/dist/kits/blocks/app/templates/productlaunch/page.tsx +43 -43
  46. package/dist/kits/blocks/app/templates/saasdashboard/PresetThemeVars.tsx +80 -80
  47. package/dist/kits/blocks/app/templates/saasdashboard/README.md +44 -44
  48. package/dist/kits/blocks/app/templates/saasdashboard/components/Contact.tsx +129 -129
  49. package/dist/kits/blocks/app/templates/saasdashboard/components/Dashboard.tsx +293 -293
  50. package/dist/kits/blocks/app/templates/saasdashboard/components/FAQ.tsx +55 -55
  51. package/dist/kits/blocks/app/templates/saasdashboard/components/Features.tsx +90 -90
  52. package/dist/kits/blocks/app/templates/saasdashboard/components/Footer.tsx +77 -77
  53. package/dist/kits/blocks/app/templates/saasdashboard/components/Hero.tsx +104 -104
  54. package/dist/kits/blocks/app/templates/saasdashboard/components/Hero_mask.tsx +126 -126
  55. package/dist/kits/blocks/app/templates/saasdashboard/components/Navbar.tsx +117 -117
  56. package/dist/kits/blocks/app/templates/saasdashboard/components/Pricing.tsx +90 -90
  57. package/dist/kits/blocks/app/templates/saasdashboard/components/SmoothScroll.tsx +96 -96
  58. package/dist/kits/blocks/app/templates/saasdashboard/components/Testimonials.tsx +72 -72
  59. package/dist/kits/blocks/app/templates/saasdashboard/components/TrustBadges.tsx +53 -53
  60. package/dist/kits/blocks/app/templates/saasdashboard/page.tsx +39 -39
  61. package/dist/kits/blocks/components/enhanced-theme-provider.tsx +195 -195
  62. package/dist/kits/blocks/components/providers/BlocksAppProviders.tsx +27 -27
  63. package/dist/kits/blocks/components/sections/About.tsx +291 -291
  64. package/dist/kits/blocks/components/sections/CTA.tsx +257 -257
  65. package/dist/kits/blocks/components/sections/Contact.tsx +267 -267
  66. package/dist/kits/blocks/components/sections/FAQ.tsx +214 -214
  67. package/dist/kits/blocks/components/sections/Features.tsx +268 -268
  68. package/dist/kits/blocks/components/sections/Footer.tsx +302 -302
  69. package/dist/kits/blocks/components/sections/HeroMotion.tsx +308 -308
  70. package/dist/kits/blocks/components/sections/HeroOverlay.tsx +358 -358
  71. package/dist/kits/blocks/components/sections/HeroProductDemo.tsx +236 -0
  72. package/dist/kits/blocks/components/sections/HeroSplit.tsx +352 -352
  73. package/dist/kits/blocks/components/sections/Navbar.tsx +350 -350
  74. package/dist/kits/blocks/components/sections/PortfolioSimple.tsx +549 -549
  75. package/dist/kits/blocks/components/sections/Pricing.tsx +264 -264
  76. package/dist/kits/blocks/components/sections/ProcessTimeline.tsx +325 -325
  77. package/dist/kits/blocks/components/sections/ServicesGrid.tsx +210 -210
  78. package/dist/kits/blocks/components/sections/Team.tsx +309 -309
  79. package/dist/kits/blocks/components/sections/Testimonials.tsx +158 -158
  80. package/dist/kits/blocks/components/sections/TrustBadges.tsx +162 -162
  81. package/dist/kits/blocks/components/sections/product-demo/ApprovalInboxPanel.tsx +125 -0
  82. package/dist/kits/blocks/components/sections/product-demo/DemoStage.tsx +397 -0
  83. package/dist/kits/blocks/components/sections/product-demo/DemoWindow.tsx +128 -0
  84. package/dist/kits/blocks/components/sections/product-demo/KnowledgePanel.tsx +127 -0
  85. package/dist/kits/blocks/components/sections/product-demo/RunConsolePanel.tsx +150 -0
  86. package/dist/kits/blocks/components/sections/product-demo/WorkflowStudioPanel.tsx +191 -0
  87. package/dist/kits/blocks/components/sections/product-demo/types.ts +193 -0
  88. package/dist/kits/blocks/components/theme-provider.tsx +1 -1
  89. package/dist/kits/blocks/components/ui/alert-dialog.tsx +134 -134
  90. package/dist/kits/blocks/components/ui/brand-node.tsx +121 -121
  91. package/dist/kits/blocks/components/ui/button.tsx +122 -122
  92. package/dist/kits/blocks/components/ui/card.tsx +95 -95
  93. package/dist/kits/blocks/components/ui/checkbox.tsx +30 -30
  94. package/dist/kits/blocks/components/ui/cta-button.tsx +125 -125
  95. package/dist/kits/blocks/components/ui/dropdown-menu.tsx +201 -201
  96. package/dist/kits/blocks/components/ui/feature-card.tsx +91 -91
  97. package/dist/kits/blocks/components/ui/input.tsx +27 -27
  98. package/dist/kits/blocks/components/ui/label.tsx +29 -29
  99. package/dist/kits/blocks/components/ui/pricing-card.tsx +120 -120
  100. package/dist/kits/blocks/components/ui/select.tsx +25 -25
  101. package/dist/kits/blocks/components/ui/skeleton.tsx +13 -13
  102. package/dist/kits/blocks/components/ui/table.tsx +98 -98
  103. package/dist/kits/blocks/components/ui/testimonial-card.tsx +108 -108
  104. package/dist/kits/blocks/components/ui/textarea.tsx +26 -26
  105. package/dist/kits/blocks/components/ui/theme-selector.tsx +243 -243
  106. package/dist/kits/blocks/components/ui/theme-toggle.tsx +74 -74
  107. package/dist/kits/blocks/components/ui/toaster.tsx +7 -7
  108. package/dist/kits/blocks/lib/themes.ts +400 -400
  109. package/dist/kits/blocks/lib/utils.ts +6 -6
  110. package/dist/kits/blocks/package-deps.json +3 -3
  111. package/package.json +1 -1
@@ -1,90 +1,90 @@
1
- "use client";
2
-
3
- import { Pricing as SharedPricing } from "@/components/sections/Pricing";
4
- import { cn } from "@/lib/utils";
5
-
6
- const DefaultPricingData = [
7
- {
8
- pricingPlanHeaderText: "Starter Plan",
9
- pricingPlanPrice: "$29/month",
10
- pricingPlanFeatures: [
11
- "Up to 5 users",
12
- "3 projects",
13
- "Basic analytics",
14
- "email support",
15
- ],
16
- pricingPlanCTALabel: "Select Plan",
17
- pricingPlanCTAHref: "#contact",
18
- },
19
- {
20
- pricingPlanHeaderText: "Professional Plan",
21
- pricingPlanPrice: "$79.99/month",
22
- pricingPlanFeatures: [
23
- "Up to 25 users",
24
- "Unlimited projects",
25
- "Advanced analytics",
26
- "Priority support",
27
- "Api access",
28
- ],
29
- pricingPlanCTALabel: "Select Plan",
30
- pricingPlanCTAHref: "#contact",
31
- isPopular: true,
32
- },
33
- {
34
- pricingPlanHeaderText: "Enterprise Plan",
35
- pricingPlanPrice: "$199.99/month",
36
- pricingPlanFeatures: [
37
- "Unlimited users",
38
- "Custom integrations",
39
- "Dedicated account manager",
40
- "SLA guarantee",
41
- ],
42
- pricingPlanCTALabel: "Select Plan",
43
- pricingPlanCTAHref: "#contact",
44
- },
45
- ];
46
-
47
- export function Pricing() {
48
- return (
49
- <SharedPricing
50
- pricingPlans={DefaultPricingData}
51
- pricingHeadingText="Simple Pricing That Scales With You"
52
- className={cn("relative")}
53
- section={{
54
- className:
55
- "pt-20 pb-5 bg-[var(--section-bg,theme(colors.white))] dark:bg-[var(--section-bg,theme(colors.gray.900))]",
56
- }}
57
- heading={{
58
- className:
59
- "text-3xl font-bold font-inter text-center mb-8 text-[var(--heading-fg)]",
60
- }}
61
- card={{
62
- className:
63
- "relative rounded-lg transition-all duration-300 will-change-transform hover:-translate-y-1 bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)] shadow-[var(--card-shadow)]",
64
- }}
65
- title={{
66
- className:
67
- "text-xl font-bold font-inter mb-2 text-[var(--card-title-fg)]",
68
- }}
69
- price={{
70
- className:
71
- "text-2xl font-bold font-inter mb-4 text-[var(--card-title-fg)]",
72
- }}
73
- featureItem={{
74
- className:
75
- "flex items-center text-base font-inter text-[var(--card-muted-fg)]",
76
- }}
77
- cta={{
78
- variant: "default",
79
- size: "lg",
80
- className:
81
- "w-full font-semibold font-inter shadow-md hover:shadow-lg transition-all duration-200 hover:-translate-y-0.5 [--btn-bg:theme(colors.sky.600)] hover:[--btn-hover-bg:theme(colors.sky.700)] [--btn-fg:theme(colors.white)] hover:[--btn-hover-fg:theme(colors.white)] border-[var(--btn-border)] focus-visible:ring-[var(--btn-ring)]",
82
- }}
83
- popularBadge={{
84
- className:
85
- "absolute -top-3 left-1/2 -translate-x-1/2 px-4 py-1 rounded-full text-xs font-semibold bg-[var(--badge-active-bg)] text-[var(--badge-active-fg)] border-[var(--badge-active-border)]",
86
- }}
87
- ariaLabel="Pricing section"
88
- />
89
- );
90
- }
1
+ "use client";
2
+
3
+ import { Pricing as SharedPricing } from "@/components/sections/Pricing";
4
+ import { cn } from "@/lib/utils";
5
+
6
+ const DefaultPricingData = [
7
+ {
8
+ pricingPlanHeaderText: "Starter Plan",
9
+ pricingPlanPrice: "$29/month",
10
+ pricingPlanFeatures: [
11
+ "Up to 5 users",
12
+ "3 projects",
13
+ "Basic analytics",
14
+ "email support",
15
+ ],
16
+ pricingPlanCTALabel: "Select Plan",
17
+ pricingPlanCTAHref: "#contact",
18
+ },
19
+ {
20
+ pricingPlanHeaderText: "Professional Plan",
21
+ pricingPlanPrice: "$79.99/month",
22
+ pricingPlanFeatures: [
23
+ "Up to 25 users",
24
+ "Unlimited projects",
25
+ "Advanced analytics",
26
+ "Priority support",
27
+ "Api access",
28
+ ],
29
+ pricingPlanCTALabel: "Select Plan",
30
+ pricingPlanCTAHref: "#contact",
31
+ isPopular: true,
32
+ },
33
+ {
34
+ pricingPlanHeaderText: "Enterprise Plan",
35
+ pricingPlanPrice: "$199.99/month",
36
+ pricingPlanFeatures: [
37
+ "Unlimited users",
38
+ "Custom integrations",
39
+ "Dedicated account manager",
40
+ "SLA guarantee",
41
+ ],
42
+ pricingPlanCTALabel: "Select Plan",
43
+ pricingPlanCTAHref: "#contact",
44
+ },
45
+ ];
46
+
47
+ export function Pricing() {
48
+ return (
49
+ <SharedPricing
50
+ pricingPlans={DefaultPricingData}
51
+ pricingHeadingText="Simple Pricing That Scales With You"
52
+ className={cn("relative")}
53
+ section={{
54
+ className:
55
+ "pt-20 pb-5 bg-[var(--section-bg,theme(colors.white))] dark:bg-[var(--section-bg,theme(colors.gray.900))]",
56
+ }}
57
+ heading={{
58
+ className:
59
+ "text-3xl font-bold font-inter text-center mb-8 text-[var(--heading-fg)]",
60
+ }}
61
+ card={{
62
+ className:
63
+ "relative rounded-lg transition-all duration-300 will-change-transform hover:-translate-y-1 bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)] shadow-[var(--card-shadow)]",
64
+ }}
65
+ title={{
66
+ className:
67
+ "text-xl font-bold font-inter mb-2 text-[var(--card-title-fg)]",
68
+ }}
69
+ price={{
70
+ className:
71
+ "text-2xl font-bold font-inter mb-4 text-[var(--card-title-fg)]",
72
+ }}
73
+ featureItem={{
74
+ className:
75
+ "flex items-center text-base font-inter text-[var(--card-muted-fg)]",
76
+ }}
77
+ cta={{
78
+ variant: "default",
79
+ size: "lg",
80
+ className:
81
+ "w-full font-semibold font-inter shadow-md hover:shadow-lg transition-all duration-200 hover:-translate-y-0.5 [--btn-bg:theme(colors.sky.600)] hover:[--btn-hover-bg:theme(colors.sky.700)] [--btn-fg:theme(colors.white)] hover:[--btn-hover-fg:theme(colors.white)] border-[var(--btn-border)] focus-visible:ring-[var(--btn-ring)]",
82
+ }}
83
+ popularBadge={{
84
+ className:
85
+ "absolute -top-3 left-1/2 -translate-x-1/2 px-4 py-1 rounded-full text-xs font-semibold bg-[var(--badge-active-bg)] text-[var(--badge-active-fg)] border-[var(--badge-active-border)]",
86
+ }}
87
+ ariaLabel="Pricing section"
88
+ />
89
+ );
90
+ }
@@ -1,96 +1,96 @@
1
- "use client";
2
-
3
- import { useEffect } from "react";
4
-
5
- // Smoothly scrolls to section links with a faster duration
6
- export function SmoothScroll() {
7
- useEffect(() => {
8
- let suppressClick = false;
9
-
10
- const animateTo = (href: string) => {
11
- const el = document.querySelector(href) as HTMLElement | null;
12
- if (!el) return;
13
-
14
- const navbarOffsetPx = 64;
15
- const start = window.scrollY;
16
- const targetTop =
17
- el.getBoundingClientRect().top + window.scrollY - navbarOffsetPx;
18
- const distance = targetTop - start;
19
- const duration = 300; // ms
20
- const startTime = performance.now();
21
-
22
- const easeOutQuart = (t: number) => 1 - Math.pow(1 - t, 4);
23
-
24
- const step = (now: number) => {
25
- const elapsed = now - startTime;
26
- const t = Math.min(1, elapsed / duration);
27
- const eased = easeOutQuart(t);
28
- window.scrollTo(0, start + distance * eased);
29
- if (t < 1) requestAnimationFrame(step);
30
- else history.replaceState(null, "", href);
31
- };
32
-
33
- requestAnimationFrame(step);
34
- };
35
-
36
- const onPointerDown = (e: Event) => {
37
- const ev = e as PointerEvent;
38
- const target = e.currentTarget as HTMLAnchorElement;
39
- const href = target.getAttribute("href");
40
- if (!href || !href.startsWith("#")) return;
41
-
42
- if (
43
- ev.button !== 0 ||
44
- ev.metaKey ||
45
- ev.ctrlKey ||
46
- ev.altKey ||
47
- ev.shiftKey
48
- )
49
- return;
50
- e.preventDefault();
51
- suppressClick = true;
52
- animateTo(href);
53
- };
54
-
55
- const onClick = (e: Event) => {
56
- const target = e.currentTarget as HTMLAnchorElement;
57
- const href = target.getAttribute("href");
58
- if (!href || !href.startsWith("#")) return;
59
- if (suppressClick) {
60
- e.preventDefault();
61
- suppressClick = false;
62
- return;
63
- }
64
- e.preventDefault();
65
- animateTo(href);
66
- };
67
-
68
- const onKeyDown = (e: Event) => {
69
- const ev = e as KeyboardEvent;
70
- if (ev.key !== "Enter" && ev.key !== " ") return;
71
- const target = e.currentTarget as HTMLAnchorElement;
72
- const href = target.getAttribute("href");
73
- if (!href || !href.startsWith("#")) return;
74
- e.preventDefault();
75
- animateTo(href);
76
- };
77
-
78
- const links = Array.from(
79
- document.querySelectorAll('a[href^="#"]'),
80
- ) as HTMLAnchorElement[];
81
- links.forEach((a) => {
82
- a.addEventListener("pointerdown", onPointerDown);
83
- a.addEventListener("click", onClick);
84
- a.addEventListener("keydown", onKeyDown);
85
- });
86
- return () => {
87
- links.forEach((a) => {
88
- a.removeEventListener("pointerdown", onPointerDown);
89
- a.removeEventListener("click", onClick);
90
- a.removeEventListener("keydown", onKeyDown);
91
- });
92
- };
93
- }, []);
94
-
95
- return null;
96
- }
1
+ "use client";
2
+
3
+ import { useEffect } from "react";
4
+
5
+ // Smoothly scrolls to section links with a faster duration
6
+ export function SmoothScroll() {
7
+ useEffect(() => {
8
+ let suppressClick = false;
9
+
10
+ const animateTo = (href: string) => {
11
+ const el = document.querySelector(href) as HTMLElement | null;
12
+ if (!el) return;
13
+
14
+ const navbarOffsetPx = 64;
15
+ const start = window.scrollY;
16
+ const targetTop =
17
+ el.getBoundingClientRect().top + window.scrollY - navbarOffsetPx;
18
+ const distance = targetTop - start;
19
+ const duration = 300; // ms
20
+ const startTime = performance.now();
21
+
22
+ const easeOutQuart = (t: number) => 1 - Math.pow(1 - t, 4);
23
+
24
+ const step = (now: number) => {
25
+ const elapsed = now - startTime;
26
+ const t = Math.min(1, elapsed / duration);
27
+ const eased = easeOutQuart(t);
28
+ window.scrollTo(0, start + distance * eased);
29
+ if (t < 1) requestAnimationFrame(step);
30
+ else history.replaceState(null, "", href);
31
+ };
32
+
33
+ requestAnimationFrame(step);
34
+ };
35
+
36
+ const onPointerDown = (e: Event) => {
37
+ const ev = e as PointerEvent;
38
+ const target = e.currentTarget as HTMLAnchorElement;
39
+ const href = target.getAttribute("href");
40
+ if (!href || !href.startsWith("#")) return;
41
+
42
+ if (
43
+ ev.button !== 0 ||
44
+ ev.metaKey ||
45
+ ev.ctrlKey ||
46
+ ev.altKey ||
47
+ ev.shiftKey
48
+ )
49
+ return;
50
+ e.preventDefault();
51
+ suppressClick = true;
52
+ animateTo(href);
53
+ };
54
+
55
+ const onClick = (e: Event) => {
56
+ const target = e.currentTarget as HTMLAnchorElement;
57
+ const href = target.getAttribute("href");
58
+ if (!href || !href.startsWith("#")) return;
59
+ if (suppressClick) {
60
+ e.preventDefault();
61
+ suppressClick = false;
62
+ return;
63
+ }
64
+ e.preventDefault();
65
+ animateTo(href);
66
+ };
67
+
68
+ const onKeyDown = (e: Event) => {
69
+ const ev = e as KeyboardEvent;
70
+ if (ev.key !== "Enter" && ev.key !== " ") return;
71
+ const target = e.currentTarget as HTMLAnchorElement;
72
+ const href = target.getAttribute("href");
73
+ if (!href || !href.startsWith("#")) return;
74
+ e.preventDefault();
75
+ animateTo(href);
76
+ };
77
+
78
+ const links = Array.from(
79
+ document.querySelectorAll('a[href^="#"]'),
80
+ ) as HTMLAnchorElement[];
81
+ links.forEach((a) => {
82
+ a.addEventListener("pointerdown", onPointerDown);
83
+ a.addEventListener("click", onClick);
84
+ a.addEventListener("keydown", onKeyDown);
85
+ });
86
+ return () => {
87
+ links.forEach((a) => {
88
+ a.removeEventListener("pointerdown", onPointerDown);
89
+ a.removeEventListener("click", onClick);
90
+ a.removeEventListener("keydown", onKeyDown);
91
+ });
92
+ };
93
+ }, []);
94
+
95
+ return null;
96
+ }
@@ -1,72 +1,72 @@
1
- "use client";
2
-
3
- import { Testimonials as SharedTestimonials } from "@/components/sections/Testimonials";
4
- import { cn } from "@/lib/utils";
5
-
6
- export function Testimonials() {
7
- return (
8
- <div className="relative">
9
- {/* Gradient mesh and fine noise overlays for depth */}
10
- <div
11
- aria-hidden
12
- className="pointer-events-none absolute inset-0 -z-10 [background-image:radial-gradient(60rem_60rem_at_0%_0%,rgba(59,130,246,0.08),transparent_40%),radial-gradient(50rem_50rem_at_100%_100%,rgba(168,85,247,0.06),transparent_40%)] opacity-20"
13
- />
14
- <div
15
- aria-hidden
16
- className="pointer-events-none absolute inset-0 -z-10 [background-image:radial-gradient(rgba(255,255,255,0.07)_1px,transparent_1px)] [background-size:14px_14px] opacity-[0.05]"
17
- />
18
- <SharedTestimonials
19
- testimonials={[
20
- {
21
- testimonialText:
22
- "DashFlow replaced 6 different tools for us. Our team productivity increased 40% in the first month.",
23
- testimonialAuthor: "- Sarah Chen, Marketing Director at TechStart",
24
- testimonialAuthorInitials: "SC",
25
- },
26
- {
27
- testimonialText:
28
- "Finally, a dashboard that actually makes sense. Setup took 10 minutes, not 10 hours.",
29
- testimonialAuthor: "- Mike Rodriguez, Operations Manager",
30
- testimonialAuthorInitials: "MR",
31
- },
32
- {
33
- testimonialText:
34
- "The analytics alone pay for the subscription. We spot trends weeks earlier now.",
35
- testimonialAuthor: "- Lisa Park, CEO of GrowthCo",
36
- testimonialAuthorInitials: "LP",
37
- },
38
- ]}
39
- testimonialSectionHeader="What Our Customers Say"
40
- className={cn("relative")}
41
- section={{ className: "py-16 px-6 bg-background" }}
42
- container={{ className: "max-w-7xl mx-auto" }}
43
- header={{ className: "text-center mb-12" }}
44
- heading={{
45
- className:
46
- "text-3xl md:text-4xl font-bold font-inter text-[var(--heading-fg)]",
47
- }}
48
- grid={{
49
- className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",
50
- }}
51
- card={{
52
- className:
53
- "p-6 rounded-lg transition-transform duration-200 hover:-translate-y-1 bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)] shadow-[var(--card-shadow)]",
54
- }}
55
- text={{
56
- className:
57
- "italic font-inter font-normal text-base text-[var(--card-fg)]",
58
- }}
59
- author={{
60
- className:
61
- "text-sm font-medium font-inter text-[var(--card-muted-fg)]",
62
- }}
63
- avatar={{
64
- className:
65
- "w-12 h-12 rounded-full flex items-center justify-center text-lg font-bold bg-[var(--badge-bg)] text-[var(--badge-fg)] border-[var(--badge-border)]",
66
- }}
67
- avatarText={{ className: "font-bold" }}
68
- ariaLabel="Customer testimonials"
69
- />
70
- </div>
71
- );
72
- }
1
+ "use client";
2
+
3
+ import { Testimonials as SharedTestimonials } from "@/components/sections/Testimonials";
4
+ import { cn } from "@/lib/utils";
5
+
6
+ export function Testimonials() {
7
+ return (
8
+ <div className="relative">
9
+ {/* Gradient mesh and fine noise overlays for depth */}
10
+ <div
11
+ aria-hidden
12
+ className="pointer-events-none absolute inset-0 -z-10 [background-image:radial-gradient(60rem_60rem_at_0%_0%,rgba(59,130,246,0.08),transparent_40%),radial-gradient(50rem_50rem_at_100%_100%,rgba(168,85,247,0.06),transparent_40%)] opacity-20"
13
+ />
14
+ <div
15
+ aria-hidden
16
+ className="pointer-events-none absolute inset-0 -z-10 [background-image:radial-gradient(rgba(255,255,255,0.07)_1px,transparent_1px)] [background-size:14px_14px] opacity-[0.05]"
17
+ />
18
+ <SharedTestimonials
19
+ testimonials={[
20
+ {
21
+ testimonialText:
22
+ "DashFlow replaced 6 different tools for us. Our team productivity increased 40% in the first month.",
23
+ testimonialAuthor: "- Sarah Chen, Marketing Director at TechStart",
24
+ testimonialAuthorInitials: "SC",
25
+ },
26
+ {
27
+ testimonialText:
28
+ "Finally, a dashboard that actually makes sense. Setup took 10 minutes, not 10 hours.",
29
+ testimonialAuthor: "- Mike Rodriguez, Operations Manager",
30
+ testimonialAuthorInitials: "MR",
31
+ },
32
+ {
33
+ testimonialText:
34
+ "The analytics alone pay for the subscription. We spot trends weeks earlier now.",
35
+ testimonialAuthor: "- Lisa Park, CEO of GrowthCo",
36
+ testimonialAuthorInitials: "LP",
37
+ },
38
+ ]}
39
+ testimonialSectionHeader="What Our Customers Say"
40
+ className={cn("relative")}
41
+ section={{ className: "py-16 px-6 bg-background" }}
42
+ container={{ className: "max-w-7xl mx-auto" }}
43
+ header={{ className: "text-center mb-12" }}
44
+ heading={{
45
+ className:
46
+ "text-3xl md:text-4xl font-bold font-inter text-[var(--heading-fg)]",
47
+ }}
48
+ grid={{
49
+ className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8",
50
+ }}
51
+ card={{
52
+ className:
53
+ "p-6 rounded-lg transition-transform duration-200 hover:-translate-y-1 bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)] shadow-[var(--card-shadow)]",
54
+ }}
55
+ text={{
56
+ className:
57
+ "italic font-inter font-normal text-base text-[var(--card-fg)]",
58
+ }}
59
+ author={{
60
+ className:
61
+ "text-sm font-medium font-inter text-[var(--card-muted-fg)]",
62
+ }}
63
+ avatar={{
64
+ className:
65
+ "w-12 h-12 rounded-full flex items-center justify-center text-lg font-bold bg-[var(--badge-bg)] text-[var(--badge-fg)] border-[var(--badge-border)]",
66
+ }}
67
+ avatarText={{ className: "font-bold" }}
68
+ ariaLabel="Customer testimonials"
69
+ />
70
+ </div>
71
+ );
72
+ }
@@ -1,53 +1,53 @@
1
- "use client";
2
-
3
- import { TrustBadges as SharedTrustBadges } from "@/components/sections/TrustBadges";
4
- import { cn } from "@/lib/utils";
5
-
6
- const defaultBadgesInfo = [
7
- {
8
- badgeText: "10,000+ businesses",
9
- badgeDescription: "Trusted by",
10
- badgeIcon: "📊",
11
- },
12
- {
13
- badgeText: "SOC 2 Compliant",
14
- badgeDescription: "Enterprise security",
15
- badgeIcon: "🔒",
16
- },
17
- {
18
- badgeText: "99.9% Uptime",
19
- badgeDescription: "Reliable service",
20
- badgeIcon: "⚡",
21
- },
22
- {
23
- badgeText: "4.9/5 Rating",
24
- badgeDescription: "Customer satisfaction",
25
- badgeIcon: "⭐",
26
- },
27
- ];
28
-
29
- export function TrustBadges() {
30
- return (
31
- <SharedTrustBadges
32
- badges={defaultBadgesInfo}
33
- className={cn("relative")}
34
- section={{ className: "py-8 px-6 bg-blue-950/10 dark:bg-blue-950" }}
35
- heading={{
36
- className:
37
- "text-2xl font-bold font-inter text-gray-700 dark:text-gray-200",
38
- }}
39
- badgesContainer={{
40
- className: "flex flex-wrap items-center justify-center gap-8",
41
- }}
42
- badge={{
43
- className:
44
- "transition-all duration-200 grayscale hover:grayscale-0 hover:-translate-y-0.5",
45
- }}
46
- text={{
47
- className:
48
- "text-base font-medium font-inter text-gray-900 dark:text-white",
49
- }}
50
- ariaLabel="Trust badges section"
51
- />
52
- );
53
- }
1
+ "use client";
2
+
3
+ import { TrustBadges as SharedTrustBadges } from "@/components/sections/TrustBadges";
4
+ import { cn } from "@/lib/utils";
5
+
6
+ const defaultBadgesInfo = [
7
+ {
8
+ badgeText: "10,000+ businesses",
9
+ badgeDescription: "Trusted by",
10
+ badgeIcon: "📊",
11
+ },
12
+ {
13
+ badgeText: "SOC 2 Compliant",
14
+ badgeDescription: "Enterprise security",
15
+ badgeIcon: "🔒",
16
+ },
17
+ {
18
+ badgeText: "99.9% Uptime",
19
+ badgeDescription: "Reliable service",
20
+ badgeIcon: "⚡",
21
+ },
22
+ {
23
+ badgeText: "4.9/5 Rating",
24
+ badgeDescription: "Customer satisfaction",
25
+ badgeIcon: "⭐",
26
+ },
27
+ ];
28
+
29
+ export function TrustBadges() {
30
+ return (
31
+ <SharedTrustBadges
32
+ badges={defaultBadgesInfo}
33
+ className={cn("relative")}
34
+ section={{ className: "py-8 px-6 bg-blue-950/10 dark:bg-blue-950" }}
35
+ heading={{
36
+ className:
37
+ "text-2xl font-bold font-inter text-gray-700 dark:text-gray-200",
38
+ }}
39
+ badgesContainer={{
40
+ className: "flex flex-wrap items-center justify-center gap-8",
41
+ }}
42
+ badge={{
43
+ className:
44
+ "transition-all duration-200 grayscale hover:grayscale-0 hover:-translate-y-0.5",
45
+ }}
46
+ text={{
47
+ className:
48
+ "text-base font-medium font-inter text-gray-900 dark:text-white",
49
+ }}
50
+ ariaLabel="Trust badges section"
51
+ />
52
+ );
53
+ }