@nextworks/blocks-templates 0.1.0-alpha.11 → 0.1.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 (96) hide show
  1. package/package.json +3 -3
  2. package/dist/index.d.ts +0 -5
  3. package/dist/templates/digitalagency/Page.d.ts +0 -3
  4. package/dist/templates/digitalagency/Page.js +0 -18
  5. package/dist/templates/digitalagency/PresetThemeVars.d.ts +0 -11
  6. package/dist/templates/digitalagency/PresetThemeVars.js +0 -29
  7. package/dist/templates/digitalagency/components/About.d.ts +0 -3
  8. package/dist/templates/digitalagency/components/About.js +0 -45
  9. package/dist/templates/digitalagency/components/CTA.d.ts +0 -3
  10. package/dist/templates/digitalagency/components/CTA.js +0 -33
  11. package/dist/templates/digitalagency/components/Contact.d.ts +0 -3
  12. package/dist/templates/digitalagency/components/Contact.js +0 -91
  13. package/dist/templates/digitalagency/components/Footer.d.ts +0 -8
  14. package/dist/templates/digitalagency/components/Footer.js +0 -58
  15. package/dist/templates/digitalagency/components/Hero.d.ts +0 -7
  16. package/dist/templates/digitalagency/components/Hero.js +0 -69
  17. package/dist/templates/digitalagency/components/Navbar.d.ts +0 -21
  18. package/dist/templates/digitalagency/components/Navbar.js +0 -86
  19. package/dist/templates/digitalagency/components/NetworkPattern.d.ts +0 -8
  20. package/dist/templates/digitalagency/components/NetworkPattern.js +0 -38
  21. package/dist/templates/digitalagency/components/Portfolio.d.ts +0 -3
  22. package/dist/templates/digitalagency/components/Portfolio.js +0 -108
  23. package/dist/templates/digitalagency/components/Pricing.d.ts +0 -3
  24. package/dist/templates/digitalagency/components/Pricing.js +0 -82
  25. package/dist/templates/digitalagency/components/Process.d.ts +0 -3
  26. package/dist/templates/digitalagency/components/Process.js +0 -38
  27. package/dist/templates/digitalagency/components/Services.d.ts +0 -3
  28. package/dist/templates/digitalagency/components/Services.js +0 -34
  29. package/dist/templates/digitalagency/components/Team.d.ts +0 -3
  30. package/dist/templates/digitalagency/components/Team.js +0 -14
  31. package/dist/templates/digitalagency/components/Testimonials.d.ts +0 -3
  32. package/dist/templates/digitalagency/components/Testimonials.js +0 -38
  33. package/dist/templates/gallery/PresetThemeVars.d.ts +0 -15
  34. package/dist/templates/gallery/PresetThemeVars.js +0 -31
  35. package/dist/templates/gallery/page.d.ts +0 -2
  36. package/dist/templates/gallery/page.js +0 -151
  37. package/dist/templates/productlaunch/Page.d.ts +0 -2
  38. package/dist/templates/productlaunch/Page.js +0 -20
  39. package/dist/templates/productlaunch/PresetThemeVars.d.ts +0 -16
  40. package/dist/templates/productlaunch/PresetThemeVars.js +0 -28
  41. package/dist/templates/productlaunch/components/About.d.ts +0 -15
  42. package/dist/templates/productlaunch/components/About.js +0 -59
  43. package/dist/templates/productlaunch/components/CTA.d.ts +0 -3
  44. package/dist/templates/productlaunch/components/CTA.js +0 -39
  45. package/dist/templates/productlaunch/components/Contact.d.ts +0 -3
  46. package/dist/templates/productlaunch/components/Contact.js +0 -93
  47. package/dist/templates/productlaunch/components/FAQ.d.ts +0 -7
  48. package/dist/templates/productlaunch/components/FAQ.js +0 -64
  49. package/dist/templates/productlaunch/components/Features.d.ts +0 -6
  50. package/dist/templates/productlaunch/components/Features.js +0 -52
  51. package/dist/templates/productlaunch/components/Footer.d.ts +0 -5
  52. package/dist/templates/productlaunch/components/Footer.js +0 -103
  53. package/dist/templates/productlaunch/components/Hero.d.ts +0 -6
  54. package/dist/templates/productlaunch/components/Hero.js +0 -70
  55. package/dist/templates/productlaunch/components/Navbar.d.ts +0 -25
  56. package/dist/templates/productlaunch/components/Navbar.js +0 -82
  57. package/dist/templates/productlaunch/components/Pricing.d.ts +0 -5
  58. package/dist/templates/productlaunch/components/Pricing.js +0 -77
  59. package/dist/templates/productlaunch/components/ProcessTimeline.d.ts +0 -5
  60. package/dist/templates/productlaunch/components/ProcessTimeline.js +0 -63
  61. package/dist/templates/productlaunch/components/ServicesGrid.d.ts +0 -5
  62. package/dist/templates/productlaunch/components/ServicesGrid.js +0 -41
  63. package/dist/templates/productlaunch/components/Team.d.ts +0 -5
  64. package/dist/templates/productlaunch/components/Team.js +0 -72
  65. package/dist/templates/productlaunch/components/Testimonials.d.ts +0 -5
  66. package/dist/templates/productlaunch/components/Testimonials.js +0 -55
  67. package/dist/templates/productlaunch/components/TrustBadges.d.ts +0 -5
  68. package/dist/templates/productlaunch/components/TrustBadges.js +0 -50
  69. package/dist/templates/saasdashboard/Page.d.ts +0 -2
  70. package/dist/templates/saasdashboard/Page.js +0 -15
  71. package/dist/templates/saasdashboard/PresetThemeVars.d.ts +0 -11
  72. package/dist/templates/saasdashboard/PresetThemeVars.js +0 -27
  73. package/dist/templates/saasdashboard/components/Contact.d.ts +0 -3
  74. package/dist/templates/saasdashboard/components/Contact.js +0 -83
  75. package/dist/templates/saasdashboard/components/Dashboard.d.ts +0 -21
  76. package/dist/templates/saasdashboard/components/Dashboard.js +0 -120
  77. package/dist/templates/saasdashboard/components/FAQ.d.ts +0 -2
  78. package/dist/templates/saasdashboard/components/FAQ.js +0 -35
  79. package/dist/templates/saasdashboard/components/Features.d.ts +0 -2
  80. package/dist/templates/saasdashboard/components/Features.js +0 -55
  81. package/dist/templates/saasdashboard/components/Footer.d.ts +0 -2
  82. package/dist/templates/saasdashboard/components/Footer.js +0 -52
  83. package/dist/templates/saasdashboard/components/Hero.d.ts +0 -2
  84. package/dist/templates/saasdashboard/components/Hero.js +0 -65
  85. package/dist/templates/saasdashboard/components/Hero_mask.d.ts +0 -3
  86. package/dist/templates/saasdashboard/components/Hero_mask.js +0 -73
  87. package/dist/templates/saasdashboard/components/Navbar.d.ts +0 -25
  88. package/dist/templates/saasdashboard/components/Navbar.js +0 -83
  89. package/dist/templates/saasdashboard/components/Pricing.d.ts +0 -2
  90. package/dist/templates/saasdashboard/components/Pricing.js +0 -65
  91. package/dist/templates/saasdashboard/components/SmoothScroll.d.ts +0 -2
  92. package/dist/templates/saasdashboard/components/SmoothScroll.js +0 -87
  93. package/dist/templates/saasdashboard/components/Testimonials.d.ts +0 -2
  94. package/dist/templates/saasdashboard/components/Testimonials.js +0 -35
  95. package/dist/templates/saasdashboard/components/TrustBadges.d.ts +0 -2
  96. package/dist/templates/saasdashboard/components/TrustBadges.js +0 -37
@@ -1,83 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Contact as SharedContact, } from "@nextworks/blocks-sections";
4
- const saasContactFormData = [
5
- {
6
- id: "name",
7
- label: "Full Name",
8
- placeholder: "Jane Doe",
9
- required: true,
10
- type: "text",
11
- },
12
- {
13
- id: "email",
14
- label: "Work Email",
15
- placeholder: "jane@company.com",
16
- required: true,
17
- type: "email",
18
- },
19
- {
20
- id: "company",
21
- label: "Company",
22
- placeholder: "Acme Inc.",
23
- required: false,
24
- type: "text",
25
- },
26
- {
27
- id: "teamSize",
28
- label: "Team Size",
29
- placeholder: "e.g. 10–50",
30
- required: false,
31
- type: "text",
32
- },
33
- {
34
- id: "useCase",
35
- label: "Primary Use Case",
36
- placeholder: "e.g. Product analytics, Ops dashboards",
37
- required: false,
38
- type: "text",
39
- },
40
- {
41
- id: "message",
42
- label: "What would you like to see in the demo?",
43
- placeholder: "Share goals, data sources, timeline…",
44
- required: true,
45
- type: "textarea",
46
- },
47
- ];
48
- export function Contact() {
49
- const handleFormSubmit = (e) => {
50
- e.preventDefault();
51
- const data = Object.fromEntries(new FormData(e.currentTarget).entries());
52
- console.log("Contact form submitted:", data);
53
- };
54
- return (_jsxs("div", { className: "relative", children: [_jsx("div", { "aria-hidden": true, 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" }), _jsx("div", { "aria-hidden": true, 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]" }), _jsx(SharedContact, { id: "contact", ariaLabel: "SaaS dashboard contact section", fields: saasContactFormData, contactHeaderText: "Ready to See DashFlow in Action?", contactSubHeaderText: "Tell us a bit about your team and we'll reach out with a tailored demo.",
55
- // Root and section
56
- className: "w-full", section: {
57
- className: "py-16 px-6 bg-gradient-to-b from-slate-900/95 via-slate-950 to-slate-900/95 dark:from-slate-950 dark:via-slate-900 dark:to-slate-950",
58
- }, container: { className: "mx-auto max-w-4xl" },
59
- // Header slots
60
- headerWrapper: { className: "mb-10 text-center" }, headerText: {
61
- className: "text-3xl font-bold font-inter text-white",
62
- }, subheaderText: {
63
- className: "mt-3 text-base text-white/90 max-w-2xl mx-auto font-inter",
64
- },
65
- // Form container
66
- form: {
67
- className: "bg-card p-8 rounded-xl shadow-xl border border-border bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)]",
68
- },
69
- // Fields and inputs
70
- fieldsWrapper: { className: "space-y-4" }, field: { className: "space-y-2" }, label: {
71
- className: "text-card-foreground text-sm font-medium font-poppins block",
72
- }, input: {
73
- className: "w-full p-3 rounded-md font-inter border-[var(--input-border)] bg-[var(--input-bg)] text-[var(--input-fg)] placeholder:text-[var(--input-placeholder)] focus-visible:ring-2 focus-visible:ring-[var(--input-focus-ring)] focus-visible:ring-offset-[var(--input-ring-offset)]",
74
- }, textarea: {
75
- className: "w-full p-3 rounded-md resize-vertical min-h-[120px] font-inter border-[var(--input-border)] bg-[var(--input-bg)] text-[var(--input-fg)] placeholder:text-[var(--input-placeholder)] focus-visible:ring-2 focus-visible:ring-[var(--input-focus-ring)] focus-visible:ring-offset-[var(--input-ring-offset)]",
76
- },
77
- // Submit button (wrapper/style/text split)
78
- submitButtonWrapper: { className: "pt-2" }, submitButtonStyle: {
79
- variant: "default",
80
- size: "lg",
81
- className: "w-full bg-blue-600 hover:bg-blue-700 dark:bg-blue-600 dark:hover:bg-blue-400 text-white font-semibold font-inter shadow-lg hover:shadow-xl transition-all duration-200 hover:-translate-y-0.5",
82
- }, submitButtonText: "Send Request", onSubmit: handleFormSubmit })] }));
83
- }
@@ -1,21 +0,0 @@
1
- import React from "react";
2
- type FloatingCard = {
3
- position: string;
4
- icon: string;
5
- text: string;
6
- };
7
- type Stat = {
8
- value: string;
9
- label: string;
10
- };
11
- interface DashboardProps {
12
- stats: Stat[];
13
- projects: string[];
14
- floatingCards: FloatingCard[];
15
- activeTab?: string;
16
- navItems?: string[];
17
- }
18
- export declare function Dashboard({ stats, projects, floatingCards, activeTab, navItems, }: DashboardProps): React.JSX.Element;
19
- declare function FloatingCard({ position, icon, text }: FloatingCard): React.JSX.Element;
20
- export {};
21
- //# sourceMappingURL=Dashboard.d.ts.map
@@ -1,120 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useEffect, useRef, useState } from "react";
4
- export function Dashboard({ stats, projects, floatingCards, activeTab = "Analytics", navItems = ["Analytics", "Projects", "Team"], }) {
5
- return (_jsxs("div", { className: "relative isolate", children: [_jsx(DashboardMockup, { stats: stats, projects: projects, activeTab: activeTab, navItems: navItems }), floatingCards.map(({ position, icon, text }) => (_jsx(FloatingCard, { position: position, icon: icon, text: text }, position))), _jsx("style", { children: `
6
- .dashboard-mockup {
7
- transform: perspective(1000px) rotateY(-5deg) rotateX(5deg);
8
- transition: transform 0.3s ease;
9
- box-shadow: 0 25px 50px rgba(0, 0, 0, 0.3);
10
- }
11
- .dashboard-mockup:hover {
12
- transform: perspective(1000px) rotateY(-2deg) rotateX(2deg);
13
- }
14
- .trend-line {
15
- clip-path: polygon(
16
- 0 100%,
17
- 20% 80%,
18
- 40% 85%,
19
- 60% 60%,
20
- 80% 50%,
21
- 100% 20%
22
- );
23
- }
24
- @keyframes growUp {
25
- 0% {
26
- height: 0;
27
- opacity: 0;
28
- }
29
- 100% {
30
- opacity: 1;
31
- }
32
- }
33
- @keyframes floatAnim {
34
- 0%,
35
- 100% {
36
- transform: translateY(0px);
37
- }
38
- 50% {
39
- transform: translateY(-20px);
40
- }
41
- }
42
- ` })] }));
43
- }
44
- function DashboardMockup({ stats, projects, activeTab, navItems, }) {
45
- const [tilt, setTilt] = useState({ rx: 0, ry: 0 });
46
- const targetTilt = useRef({ rx: 0, ry: 0 });
47
- const rafId = useRef(null);
48
- const animate = () => {
49
- setTilt((prev) => {
50
- const smoothing = 0.15;
51
- const nextRx = prev.rx + (targetTilt.current.rx - prev.rx) * smoothing;
52
- const nextRy = prev.ry + (targetTilt.current.ry - prev.ry) * smoothing;
53
- return { rx: nextRx, ry: nextRy };
54
- });
55
- rafId.current = requestAnimationFrame(animate);
56
- };
57
- const handleMove = (e) => {
58
- const rect = e.currentTarget.getBoundingClientRect();
59
- const x = e.clientX - rect.left;
60
- const y = e.clientY - rect.top;
61
- const rx = (y / rect.height - 0.5) * -6; // rotateX up to ~±3deg
62
- const ry = (x / rect.width - 0.5) * 6; // rotateY up to ~±3deg
63
- targetTilt.current = { rx, ry };
64
- if (rafId.current == null)
65
- rafId.current = requestAnimationFrame(animate);
66
- };
67
- const handleLeave = () => {
68
- targetTilt.current = { rx: 0, ry: 0 };
69
- };
70
- useEffect(() => {
71
- return () => {
72
- if (rafId.current != null)
73
- cancelAnimationFrame(rafId.current);
74
- };
75
- }, []);
76
- return (_jsxs("div", { className: "dashboard-mockup transform-gpu rounded-2xl border border-blue-500/20 p-6 shadow-2xl ring-1 ring-blue-500/10 backdrop-blur transition-transform duration-150 ease-out motion-reduce:transition-none " +
77
- "bg-slate-900/80 dark:bg-slate-900/80", style: {
78
- willChange: "transform",
79
- transform: `perspective(1000px) rotateX(${tilt.rx}deg) rotateY(${tilt.ry}deg)`,
80
- }, onMouseMove: handleMove, onMouseLeave: handleLeave, children: [_jsx(DashboardHeader, { activeTab: activeTab, navItems: navItems }), _jsx(DashboardGrid, { stats: stats, projects: projects })] }));
81
- }
82
- function DashboardHeader({ activeTab = "Analytics", navItems = ["Analytics", "Projects", "Team"], }) {
83
- return (_jsxs("div", { className: "mb-6 flex items-center justify-between border-b border-blue-500/10 pb-4", children: [_jsx("div", { className: "text-[1.1rem] font-semibold text-slate-200", children: "Business Overview" }), _jsx("div", { className: "hidden gap-3 md:flex", children: navItems.map((item) => (_jsx("div", { className: "rounded-md px-3 py-2 text-sm " +
84
- (item === activeTab
85
- ? "bg-gradient-to-br from-blue-500 to-purple-500 text-white"
86
- : "bg-blue-500/10 text-blue-400"), children: item }, item))) })] }));
87
- }
88
- function DashboardGrid({ stats, projects, }) {
89
- return (_jsxs("div", { className: "mb-4 grid grid-cols-[2fr_1fr] gap-4", children: [_jsx(ChartArea, {}), _jsx(StatsPanel, { stats: stats }), _jsx(ProjectList, { projects: projects })] }));
90
- }
91
- function ChartArea() {
92
- const barHeights = [30, 45, 35, 60, 55, 75, 70, 85, 90, 100];
93
- return (_jsxs("div", { className: "relative overflow-hidden rounded-lg border border-blue-500/10 bg-slate-900/50 p-4", children: [_jsx("div", { className: "mb-2 text-sm text-slate-300", children: "Revenue Growth" }), _jsxs("div", { className: "relative h-32 overflow-hidden rounded-md", style: {
94
- background: "linear-gradient(45deg, transparent 20%, rgba(59,130,246,0.1) 20%, rgba(59,130,246,0.1) 40%, transparent 40%, transparent 60%, rgba(139,92,246,0.1) 60%, rgba(139,92,246,0.1) 80%, transparent 80%)",
95
- }, children: [_jsx("div", { className: "absolute inset-[10px] flex items-end gap-[3px]", children: barHeights.map((h, i) => (_jsx("div", { className: "flex-1 rounded-t bg-gradient-to-b from-blue-500 to-purple-500", style: {
96
- minHeight: "20px",
97
- height: `${h}%`,
98
- animation: "growUp 2s ease-out both",
99
- animationDelay: `${(i + 1) * 0.1}s`,
100
- } }, i))) }), _jsx("div", { className: "trend-line absolute top-5 right-[5%] left-[5%] h-[2px] rounded bg-gradient-to-r from-emerald-500 to-blue-500 opacity-80" })] })] }));
101
- }
102
- function StatsPanel({ stats }) {
103
- return (_jsx("div", { className: "flex flex-col gap-2", children: stats.map((s, i) => (_jsxs("div", { className: "rounded-lg border border-blue-500/10 bg-slate-900/50 p-3", children: [_jsx("div", { className: "text-lg font-bold text-blue-500", children: s.value }), _jsx("div", { className: "text-[0.7rem] text-slate-400 uppercase", children: s.label })] }, i))) }));
104
- }
105
- function ProjectList({ projects }) {
106
- return (_jsxs("div", { className: "col-span-2 rounded-lg border border-blue-500/10 bg-slate-900/50 p-4", children: [_jsx("div", { className: "mb-2 text-sm text-slate-300", children: "Active Projects" }), _jsx("div", { className: "flex flex-wrap gap-2", children: projects.map((p, i) => (_jsx("div", { className: "rounded border border-blue-500/30 bg-gradient-to-br from-blue-500/20 to-purple-500/10 px-2 py-2 text-[0.8rem] text-slate-200", children: p }, i))) })] }));
107
- }
108
- function FloatingCard({ position, icon, text }) {
109
- const positionClasses = position === "card-1"
110
- ? "top-[10%] right-[6%]"
111
- : position === "card-2"
112
- ? "bottom-[20%] left-[2%]"
113
- : "top-0 left-0";
114
- return (_jsxs("div", { className: [
115
- "absolute z-10 transform-gpu rounded-lg border border-blue-500/20 p-4 shadow-lg",
116
- "animate-[floatAnim_6s_ease-in-out_infinite]",
117
- "bg-slate-800 dark:bg-slate-900",
118
- positionClasses,
119
- ].join(" "), style: { willChange: "transform" }, children: [_jsx("div", { className: "mb-2 flex h-[30px] w-[30px] items-center justify-center rounded-md bg-gradient-to-br from-blue-500 to-purple-500 text-sm text-white", children: icon }), _jsx("div", { className: "text-sm text-slate-300", children: text })] }));
120
- }
@@ -1,2 +0,0 @@
1
- export declare function FAQ(): import("react").JSX.Element;
2
- //# sourceMappingURL=FAQ.d.ts.map
@@ -1,35 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { FAQ as SharedFAQ } from "@nextworks/blocks-sections";
4
- const defaultFAQArray = [
5
- {
6
- question: "Can I migrate from other tools?",
7
- answer: "Yes, we help with data import.",
8
- },
9
- {
10
- question: "What integrations are available?",
11
- answer: "50+ apps including Slack, Google, Zapier.",
12
- },
13
- { question: "How long does setup take?", answer: "Less than 15 minutes." },
14
- {
15
- question: "Is there a free trial?",
16
- answer: "Yes — start a 14-day free trial with no credit card required.",
17
- },
18
- {
19
- question: "What support do you offer?",
20
- answer: "Email, chat, and dedicated onboarding for paid plans.",
21
- },
22
- {
23
- question: "Are there discounts for teams or annual billing?",
24
- answer: "Yes — we offer team pricing and discounts for annual subscriptions.",
25
- },
26
- ];
27
- export function FAQ() {
28
- return (_jsx(SharedFAQ, { faqData: defaultFAQArray, faqSectionHeaderText: "Frequently Asked Questions", section: { className: "py-10 px-5 bg-background text-[var(--card-fg)]" }, heading: {
29
- className: "text-3xl font-bold font-inter text-center mb-6 text-[var(--heading-fg)]",
30
- }, grid: { className: "grid grid-cols-2 gap-4" }, item: { className: "mb-0" }, questionButton: {
31
- className: "p-5 rounded-lg transition-all duration-200 flex items-center justify-between cursor-pointer shadow-lg hover:shadow-xl hover:-translate-y-0.5 font-inter bg-gradient-to-r from-sky-600 to-sky-700 hover:from-sky-700 hover:to-sky-800 text-white [--btn-ring:theme(colors.sky.500)] dark:[--btn-ring:theme(colors.sky.400)] [--btn-border:theme(colors.sky.500)] dark:[--btn-border:theme(colors.sky.400)]",
32
- }, questionText: { className: "font-inter font-semibold text-base" }, answer: {
33
- className: "mt-1 rounded-lg bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)]",
34
- }, answerText: { className: "font-inter text-base text-[var(--card-fg)]" }, allowMultipleOpen: true }));
35
- }
@@ -1,2 +0,0 @@
1
- export declare function Features(): import("react").JSX.Element;
2
- //# sourceMappingURL=Features.d.ts.map
@@ -1,55 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Features as SharedFeatures } from "@nextworks/blocks-sections";
4
- import { cn } from "@nextworks/blocks-core";
5
- const defaultFeaturesData = [
6
- {
7
- imageSrc: "/placeholders/saas_dashboard/projectBoard.png",
8
- imageAlt: "Project Management Dashboard",
9
- headingText: "Track Every Project",
10
- subheadingText: "Kanban boards, Gantt charts, and timeline views keep your team aligned and deadlines met",
11
- },
12
- {
13
- imageSrc: "/placeholders/saas_dashboard/analytics.png",
14
- imageAlt: "Analytics Dashboard",
15
- headingText: "Data-Driven Insights",
16
- subheadingText: "Real-time metrics, custom reports, and forecasting tools to make smarter business decisions",
17
- },
18
- {
19
- imageSrc: "/placeholders/saas_dashboard/chat.png",
20
- imageAlt: "Team Collaboration Tools",
21
- headingText: "Seamless Teamwork",
22
- subheadingText: "Built-in chat, file sharing, and @mentions keep everyone connected and productive",
23
- },
24
- ];
25
- export function Features() {
26
- return (_jsx(SharedFeatures, { sectionHeading: "Everything You Need to Run Your Business", sectionSubheading: "Powerful tools and insights to streamline your workflow and boost productivity", featuresData: defaultFeaturesData, className: cn("relative"), section: { className: "py-16 md:py-20 lg:py-24 bg-background" }, container: { className: "max-w-7xl mx-auto px-4 md:px-6 lg:px-8" }, header: { className: "text-center mb-12 md:mb-16" }, heading: {
27
- className: cn("font-inter mb-4 text-3xl font-bold text-[var(--heading-fg)] md:text-4xl lg:text-5xl"),
28
- }, subheading: {
29
- className: cn("font-inter mx-auto max-w-3xl text-lg leading-relaxed text-[var(--subheading-fg)] md:text-xl"),
30
- }, grid: {
31
- className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 md:gap-8",
32
- }, cardWrapper: {
33
- className: "group motion-reduce:transform-none motion-reduce:transition-none",
34
- }, card: {
35
- className: "h-full transition-all duration-300 hover:-translate-y-2 hover:shadow-xl bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)] rounded-lg shadow-md overflow-hidden",
36
- }, image: {
37
- className: "w-full h-48 md:h-56 object-cover transition-transform duration-300 group-hover:scale-[1.03]",
38
- }, cardHeading: {
39
- className: cn("font-inter mb-3 text-xl leading-tight font-semibold text-[var(--card-title-fg)] md:text-2xl"),
40
- }, cardSubheading: {
41
- className: cn("font-inter text-sm leading-relaxed text-[var(--card-muted-fg)] md:text-base"),
42
- },
43
- // Motion config showcasing upgraded API
44
- motionConfig: {
45
- initial: { opacity: 0, y: 12 },
46
- whileInView: { opacity: 1, y: 0 },
47
- viewport: { once: true, amount: 0.2 },
48
- transition: {
49
- type: "spring",
50
- stiffness: 125,
51
- damping: 50,
52
- delay: 0.12,
53
- },
54
- }, ariaLabel: "Features section" }));
55
- }
@@ -1,2 +0,0 @@
1
- export declare function Footer(): import("react").JSX.Element;
2
- //# sourceMappingURL=Footer.d.ts.map
@@ -1,52 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Footer as SharedFooter } from "@nextworks/blocks-sections";
4
- import { cn } from "@nextworks/blocks-core";
5
- const defaultNavLinks = [
6
- {
7
- heading: "Product",
8
- links: [
9
- { name: "Features", href: "#features" },
10
- { name: "Pricing", href: "#pricing" },
11
- { name: "Documentation", href: "#documentation" },
12
- { name: "FAQ", href: "#faq" },
13
- ],
14
- },
15
- {
16
- heading: "Company",
17
- links: [
18
- { name: "About", href: "#about" },
19
- { name: "Careers", href: "#careers" },
20
- { name: "Blog", href: "#blog" },
21
- { name: "Contact", href: "#contact" },
22
- ],
23
- },
24
- {
25
- heading: "Resources",
26
- links: [
27
- { name: "Help Center", href: "#help" },
28
- { name: "Terms of Service", href: "#terms" },
29
- { name: "Privacy Policy", href: "#privacy" },
30
- { name: "Status", href: "#status" },
31
- ],
32
- },
33
- ];
34
- export function Footer() {
35
- return (_jsx(SharedFooter, { footerBrandName: "Dash Flow", footerNavLinks: defaultNavLinks, className: cn("w-full"), section: {
36
- className: "w-full bg-blue-50 dark:bg-gray-900 text-gray-800 dark:text-white",
37
- }, container: { className: "max-w-7xl mx-auto px-6" }, brand: {
38
- className: "text-xl font-bold text-blue-600 dark:text-blue-400 font-outfit",
39
- }, brandWrapper: {
40
- className: "flex flex-col items-start text-left lg:pr-8",
41
- }, navSection: {
42
- className: "flex flex-col lg:flex-row items-start lg:items-start justify-center gap-8 lg:gap-12 pt-6.5 pb-8",
43
- }, navGroup: { className: "flex flex-col items-start text-left pt-1.5" }, navHeading: {
44
- className: "font-semibold text-gray-800 dark:text-white mb-3 text-xs uppercase tracking-wider font-inter",
45
- }, navLink: {
46
- className: "text-gray-600 dark:text-gray-300 hover:text-blue-500 dark:hover:text-blue-400 transition-colors duration-200 text-xs mb-2 block font-inter",
47
- }, socialSection: {
48
- className: "flex items-center justify-center gap-4 py-4",
49
- }, copyright: {
50
- className: "text-center text-xs text-gray-500 dark:text-gray-400 py-4 border-t border-gray-200 dark:border-gray-700 font-inter",
51
- }, ariaLabel: "Footer section" }));
52
- }
@@ -1,2 +0,0 @@
1
- export declare function Hero(): import("react").JSX.Element;
2
- //# sourceMappingURL=Hero.d.ts.map
@@ -1,65 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { HeroSplit as SharedHeroSplit } from "@nextworks/blocks-sections";
4
- import { Dashboard } from "./Dashboard";
5
- import { cn } from "@nextworks/blocks-core";
6
- const stats = [
7
- { value: "$124K", label: "Monthly Revenue" },
8
- { value: "+23%", label: "Growth Rate" },
9
- { value: "847", label: "Active Users" },
10
- ];
11
- const projects = ["Website Redesign", "Mobile App v2.0", "Marketing Campaign"];
12
- const floatingCards = [
13
- { position: "card-1", icon: "📊", text: "Real-time Analytics" },
14
- { position: "card-2", icon: "👥", text: "Team Collaboration" },
15
- ];
16
- const activeTab = "Analytics";
17
- const navItems = ["Analytics", "Projects", "Team"];
18
- export function Hero() {
19
- return (_jsx("div", { className: "relative", children: _jsx(SharedHeroSplit, { className: cn("relative"), heading: {
20
- text: "Manage Your Entire Business From One Powerful Dashboard",
21
- className: "text-3xl md:text-4xl lg:text-5xl font-bold leading-tight font-inter text-[var(--heading-fg)]",
22
- }, subheading: {
23
- text: "Stop switching between 12 different apps. DashFlow combines project management, analytics, team chat, and customer insights in one beautiful interface.",
24
- className: "text-base md:text-lg mt-6 mb-8 max-w-2xl font-inter font-normal text-[var(--subheading-fg)]",
25
- }, section: {
26
- className: "relative pt-1 px-8 pb-8 bg-[var(--hero-bg)] dark:bg-[var(--hero-bg)]",
27
- }, cta1: {
28
- label: "Start Free Trial",
29
- href: "#contact",
30
- variant: "default",
31
- size: "lg",
32
- className: [
33
- "text-base font-semibold font-inter shadow-lg hover:shadow-xl hover:-translate-y-0.5 transition-all duration-200 px-8 py-3",
34
- "[--btn-bg:theme(colors.sky.600)]",
35
- "hover:[--btn-hover-bg:theme(colors.sky.700)]",
36
- "[--btn-fg:theme(colors.white)]",
37
- "hover:[--btn-hover-fg:theme(colors.white)]",
38
- ].join(" "),
39
- }, cta2: {
40
- label: "Watch demo",
41
- href: "#demo",
42
- variant: "outline",
43
- size: "lg",
44
- className: [
45
- "text-base font-semibold font-inter shadow-lg hover:shadow-xl hover:-translate-y-0.5 transition-all duration-200 px-8 py-3",
46
- "[--btn-fg:theme(colors.sky.600)]",
47
- "[--btn-border:theme(colors.sky.600)]",
48
- "hover:[--btn-hover-bg:theme(colors.sky.50)]",
49
- "hover:[--btn-hover-fg:theme(colors.sky.600)]",
50
- "dark:[--btn-fg:theme(colors.sky.500)]",
51
- "dark:[--btn-border:theme(colors.sky.500)]",
52
- "dark:hover:[--btn-hover-bg:theme(colors.sky.950)]",
53
- "dark:hover:[--btn-hover-fg:theme(colors.sky.500)]",
54
- ].join(" "),
55
- }, image: { src: undefined, alt: "Dashboard preview" }, imageLayout: "padded", fallback: _jsx("div", { className: "flex h-full w-full items-center justify-center", children: _jsx("div", { className: "relative w-[min(100%,720px)] overflow-hidden rounded-xl bg-white p-0 p-1 opacity-100 md:pt-8 lg:pt-1 dark:bg-blue-950", children: _jsx(Dashboard, { stats: stats, projects: projects, floatingCards: floatingCards, navItems: navItems, activeTab: activeTab }) }) }), imageContainer: {
56
- className: "pl-0 relative self-start md:self-start md:flex-none md:shrink-0 w-full h-[24rem] sm:h-[32rem] md:h-[34rem] lg:h-[33rem] md:w-1/2 mb-0 md:mb-0 lg:mb-0 opacity-100",
57
- // "relative self-start md:self-start md:flex-none md:shrink-0 w-full h-[24rem] sm:h-[26rem] md:h-[28rem] md:w-1/2 mb-6 md:mb-0",
58
- }, textContainer: { className: "flex-1 p-5 lg:p-8" }, buttonsContainer: {
59
- className: [
60
- "flex flex-col sm:flex-row gap-4 mt-8 justify-center lg:justify-start",
61
- "[--btn-ring:theme(colors.sky.500)]",
62
- "dark:[--btn-ring:theme(colors.sky.400)]",
63
- ].join(" "),
64
- }, textAlign: "center", ariaLabel: "DashFlow hero section" }) }));
65
- }
@@ -1,3 +0,0 @@
1
- import React from "react";
2
- export declare function Hero(): React.JSX.Element;
3
- //# sourceMappingURL=Hero_mask.d.ts.map
@@ -1,73 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import React from "react";
4
- import { HeroSplit as SharedHeroSplit } from "@nextworks/blocks-sections";
5
- import { Dashboard } from "./Dashboard";
6
- import { cn } from "@nextworks/blocks-core";
7
- const stats = [
8
- { value: "$124K", label: "Monthly Revenue" },
9
- { value: "+23%", label: "Growth Rate" },
10
- { value: "847", label: "Active Users" },
11
- ];
12
- const projects = ["Website Redesign", "Mobile App v2.0", "Marketing Campaign"];
13
- const floatingCards = [
14
- { position: "card-1", icon: "📊", text: "Real-time Analytics" },
15
- { position: "card-2", icon: "👥", text: "Team Collaboration" },
16
- ];
17
- const activeTab = "Analytics";
18
- const navItems = ["Analytics", "Projects", "Team"];
19
- export function Hero() {
20
- const sectionRef = React.useRef(null);
21
- const dashRef = React.useRef(null);
22
- React.useLayoutEffect(() => {
23
- const measure = () => {
24
- const sec = sectionRef.current;
25
- const dash = dashRef.current;
26
- if (!sec || !dash)
27
- return;
28
- const sr = sec.getBoundingClientRect();
29
- const dr = dash.getBoundingClientRect();
30
- sec.style.setProperty("--hole-x", `${dr.left - sr.left}px`);
31
- sec.style.setProperty("--hole-y", `${dr.top - sr.top}px`);
32
- sec.style.setProperty("--hole-w", `${dr.width}px`);
33
- sec.style.setProperty("--hole-h", `${dr.height}px`);
34
- };
35
- measure();
36
- const ro = new ResizeObserver(measure);
37
- if (sectionRef.current)
38
- ro.observe(sectionRef.current);
39
- if (dashRef.current)
40
- ro.observe(dashRef.current);
41
- window.addEventListener("resize", measure);
42
- return () => {
43
- ro.disconnect();
44
- window.removeEventListener("resize", measure);
45
- };
46
- }, []);
47
- return (_jsxs("div", { className: "relative", children: [_jsxs("div", { className: "pointer-events-none absolute inset-0 -z-20 overflow-hidden", children: [_jsx("div", { className: "absolute -top-10 -left-10 h-72 w-72 rounded-full bg-blue-500/20 blur-3xl" }), _jsx("div", { className: "absolute right-0 bottom-0 h-72 w-72 rounded-full bg-purple-500/20 blur-3xl" })] }), _jsx("div", { ref: sectionRef, className: "relative before:absolute before:inset-0 before:-z-10 before:bg-gradient-to-br before:from-white before:via-blue-50 before:to-white before:[mask-image:linear-gradient(#000,#000),linear-gradient(#000,#000)] before:[mask-composite:exclude] before:[mask-size:auto,var(--hole-w)_var(--hole-h)] before:[mask-position:0_0,var(--hole-x)_var(--hole-y)] before:[mask-repeat:no-repeat] before:content-[''] before:[-webkit-mask-composite:xor] dark:before:from-gray-900 dark:before:via-blue-950/20 dark:before:to-gray-900", children: _jsx(SharedHeroSplit, { className: cn("relative"), heading: {
48
- text: "Manage Your Entire Business From One Powerful Dashboard",
49
- className: "text-3xl md:text-4xl lg:text-5xl font-bold leading-tight text-black dark:text-white font-inter",
50
- }, subheading: {
51
- text: "Stop switching between 12 different apps. DashFlow combines project management, analytics, team chat, and customer insights in one beautiful interface.",
52
- className: "text-base md:text-lg text-gray-700 dark:text-gray-100 mt-6 mb-8 max-w-2xl font-inter font-normal",
53
- }, section: {
54
- className: "relative bg-none bg-transparent pt-0 px-8 pb-8",
55
- }, cta1: {
56
- label: "Start Free Trial",
57
- href: "#contact",
58
- variant: "default",
59
- size: "lg",
60
- className: "bg-blue-600 hover:bg-blue-700 text-white text-base font-semibold font-inter shadow-lg hover:shadow-xl hover:-translate-y-0.5 transition-all duration-200 border-0 px-8 py-3",
61
- }, cta2: {
62
- label: "Watch demo",
63
- href: "#demo",
64
- variant: "outline",
65
- size: "lg",
66
- className: "border-blue-600 text-blue-600 hover:bg-blue-50 dark:border-blue-500 dark:text-blue-500 dark:hover:bg-blue-950 text-base font-semibold font-inter shadow-lg hover:shadow-xl hover:-translate-y-0.5 transition-all duration-200 px-8 py-3",
67
- }, image: { src: undefined, alt: "Dashboard preview" }, imageLayout: "padded", fallback: _jsx("div", { ref: dashRef, className: "relative z-10 flex h-full w-full items-center justify-center pl-0", children: _jsx("div", { className: "relative h-full w-[min(100%,720px)] overflow-hidden p-2", children: _jsx(Dashboard, { stats: stats, projects: projects, floatingCards: floatingCards, navItems: navItems, activeTab: activeTab }) }) }), imageContainer: {
68
- className: "relative self-start md:self-start md:flex-none md:shrink-0 w-full h-[24rem] sm:h-[26rem] md:h-[31rem] md:w-1/2 mb-6 md:mb-0",
69
- // "relative self-start md:self-start md:flex-none md:shrink-0 w-full h-[24rem] sm:h-[26rem] md:h-[28rem] md:w-1/2 mb-6 md:mb-0",
70
- }, textContainer: { className: "flex-1 p-5 lg:p-8" }, buttonsContainer: {
71
- className: "flex flex-col sm:flex-row gap-4 mt-8 justify-center lg:justify-start",
72
- }, textAlign: "center", ariaLabel: "DashFlow hero section" }) })] }));
73
- }
@@ -1,25 +0,0 @@
1
- import type { ComponentProps } from "react";
2
- import { Navbar as SharedNavbar } from "@nextworks/blocks-sections";
3
- /**
4
- * SaaS Dashboard preset Navbar
5
- *
6
- * - DashFlow branding with blue/purple gradient logo square (brandNode)
7
- * - Inter font for brand and links
8
- * - No CTA button (ctaButton = null)
9
- * - Blue hover states for links and theme toggle
10
- * - Glassy background with backdrop blur (light/dark)
11
- *
12
- * This preset exposes the Shared Navbar API so devs can override any prop/slot:
13
- *
14
- * Example:
15
- * <Navbar
16
- * brand="My SaaS"
17
- * links={{ className: "hover:text-emerald-600" }}
18
- * container={{ className: "max-w-6xl mx-auto" }}
19
- * />
20
- */
21
- type SharedNavbarProps = ComponentProps<typeof SharedNavbar>;
22
- type PresetOverrides = Partial<SharedNavbarProps>;
23
- export declare function Navbar(overrides?: PresetOverrides): import("react").JSX.Element;
24
- export {};
25
- //# sourceMappingURL=Navbar.d.ts.map
@@ -1,83 +0,0 @@
1
- "use client";
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Navbar as SharedNavbar } from "@nextworks/blocks-sections";
4
- const defaultProps = {
5
- brand: "DashFlow",
6
- // Preserve custom gradient logo block
7
- brandNode: (_jsx("div", { className: "flex h-8 w-8 items-center justify-center rounded-md bg-gradient-to-br from-blue-600 to-purple-600 font-bold text-white shadow-sm ring-1 ring-white/40", children: "DF" })),
8
- menuItems: [
9
- { label: "Home", href: "#home" },
10
- { label: "Features", href: "#features" },
11
- { label: "Pricing", href: "#pricing" },
12
- { label: "Contact", href: "#contact" },
13
- ],
14
- ctaButton: null,
15
- showColorModeToggle: true,
16
- navHeight: "h-16",
17
- sticky: true,
18
- ariaLabel: "DashFlow main navigation",
19
- // Allow layout constraints to be added at page-level
20
- className: "",
21
- // Style slots tuned for the blue SaaS theme
22
- nav: {
23
- className: "bg-white/60 dark:bg-gray-900/60 backdrop-blur supports-[backdrop-filter]:bg-white/60 supports-[backdrop-filter]:dark:bg-gray-900/60 text-gray-800 dark:text-white " +
24
- // Accent variables for this preset (read by toggle, links, mobile links)
25
- "[--navbar-accent:theme(colors.blue.700)] dark:[--navbar-accent:theme(colors.blue.400)] " +
26
- "[--navbar-toggle-bg:theme(colors.white)] dark:[--navbar-toggle-bg:theme(colors.gray.900)] " +
27
- "[--navbar-hover-bg:theme(colors.blue.50)] dark:[--navbar-hover-bg:color-mix(in oklab,oklch(0.23 0.05 264) 20%, transparent)] " +
28
- "[--navbar-ring:theme(colors.blue.500)] dark:[--navbar-ring:theme(colors.blue.400)] " +
29
- "[--navbar-border:theme(colors.gray.200)] dark:[--navbar-border:theme(colors.gray.800)]",
30
- },
31
- brandText: {
32
- className: "text-xl font-bold font-inter text-blue-700 dark:text-blue-500",
33
- },
34
- links: {
35
- className: "text-sm font-medium font-inter text-gray-800 dark:text-white hover:text-blue-700 dark:hover:text-blue-400 " +
36
- "focus:ring-[var(--navbar-ring)]",
37
- },
38
- // Preset keeps CTA hidden; if enabled, provide subtle interactive defaults
39
- ctaButtonStyle: {
40
- variant: "default",
41
- size: "default",
42
- className: "shadow-lg hover:shadow-xl transition-all duration-200 hover:-translate-y-0.5",
43
- },
44
- // Additional slots that weren't styled before, now aligned to the theme
45
- mobileMenu: {
46
- className: "border-t border-gray-200/80 dark:border-gray-800/80",
47
- },
48
- container: {
49
- className: "max-w-7xl mx-auto",
50
- },
51
- brandWrapper: {
52
- className: "",
53
- },
54
- desktopMenu: {
55
- className: "hidden items-center space-x-1 md:flex lg:space-x-6",
56
- },
57
- toggleButton: {
58
- className: "md:hidden flex items-center justify-center rounded-md p-2 transition-colors " +
59
- "hover:bg-blue-50 dark:hover:bg-blue-900/20 " +
60
- "focus:outline-none focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400",
61
- },
62
- colorModeWrapper: {
63
- className: "ml-2",
64
- },
65
- // With variables above, ThemeToggle can rely on them; explicit override optional
66
- // themeToggle: { ... }
67
- ctaButtonWrapper: {
68
- className: "ml-2",
69
- },
70
- mobileMenuInner: {
71
- className: "space-y-2 px-4 pt-2 pb-4",
72
- },
73
- // Mobile links will read --navbar-hover-bg; explicit class optional
74
- mobileLinks: {
75
- className: "hover:bg-[var(--navbar-hover-bg)]",
76
- },
77
- };
78
- export function Navbar(overrides = {}) {
79
- // Shallow-merge: passing a style-slot object (e.g., links, nav, etc.)
80
- // replaces the default for that slot. Keeps the API simple and predictable.
81
- const props = Object.assign(Object.assign({}, defaultProps), overrides);
82
- return _jsx(SharedNavbar, Object.assign({}, props));
83
- }