@nextworks/blocks-templates 0.2.0-alpha.6 → 0.2.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/templates/digitalagency/PresetThemeVars.jsx +31 -0
- package/dist/templates/digitalagency/components/About.jsx +43 -0
- package/dist/templates/digitalagency/components/CTA.jsx +31 -0
- package/dist/templates/digitalagency/components/Contact.d.ts.map +1 -1
- package/dist/templates/digitalagency/components/Contact.jsx +89 -0
- package/dist/templates/digitalagency/components/Footer.d.ts +8 -0
- package/dist/templates/digitalagency/components/Footer.jsx +58 -0
- package/dist/templates/digitalagency/components/Hero.d.ts +7 -0
- package/dist/templates/digitalagency/components/Hero.jsx +71 -0
- package/dist/templates/digitalagency/components/Navbar.d.ts +20 -0
- package/dist/templates/digitalagency/components/Navbar.d.ts.map +1 -1
- package/dist/templates/digitalagency/components/Navbar.jsx +85 -0
- package/dist/templates/digitalagency/components/NetworkPattern.d.ts +7 -0
- package/dist/templates/digitalagency/components/NetworkPattern.d.ts.map +1 -0
- package/dist/templates/digitalagency/components/NetworkPattern.jsx +125 -0
- package/dist/templates/digitalagency/components/Portfolio.jsx +104 -0
- package/dist/templates/gallery/PresetThemeVars.d.ts +15 -0
- package/dist/templates/gallery/PresetThemeVars.jsx +33 -0
- package/dist/templates/gallery/page.d.ts.map +1 -1
- package/dist/templates/gallery/page.jsx +215 -0
- package/dist/templates/productlaunch/PresetThemeVars.jsx +30 -0
- package/dist/templates/productlaunch/components/About.d.ts.map +1 -1
- package/dist/templates/productlaunch/components/About.jsx +55 -0
- package/dist/templates/productlaunch/components/CTA.jsx +37 -0
- package/dist/templates/productlaunch/components/Contact.d.ts.map +1 -1
- package/dist/templates/productlaunch/components/Contact.jsx +91 -0
- package/dist/templates/productlaunch/components/FAQ.d.ts +5 -0
- package/dist/templates/productlaunch/components/FAQ.d.ts.map +1 -1
- package/dist/templates/productlaunch/components/FAQ.jsx +55 -0
- package/dist/templates/productlaunch/components/Features.d.ts +5 -0
- package/dist/templates/productlaunch/components/Features.d.ts.map +1 -1
- package/dist/templates/productlaunch/components/Features.jsx +50 -0
- package/dist/templates/productlaunch/components/Footer.d.ts +5 -0
- package/dist/templates/productlaunch/components/Footer.jsx +102 -0
- package/dist/templates/productlaunch/components/Hero.d.ts +5 -0
- package/dist/templates/productlaunch/components/Hero.d.ts.map +1 -1
- package/dist/templates/productlaunch/components/Hero.jsx +68 -0
- package/dist/templates/productlaunch/components/Navbar.d.ts +25 -0
- package/dist/templates/productlaunch/components/Navbar.jsx +81 -0
- package/dist/templates/productlaunch/components/Pricing.d.ts +5 -0
- package/dist/templates/productlaunch/components/Pricing.jsx +76 -0
- package/dist/templates/productlaunch/components/ProcessTimeline.d.ts +5 -0
- package/dist/templates/productlaunch/components/ProcessTimeline.jsx +62 -0
- package/dist/templates/productlaunch/components/ServicesGrid.d.ts +5 -0
- package/dist/templates/productlaunch/components/ServicesGrid.jsx +40 -0
- package/dist/templates/productlaunch/components/Team.d.ts +5 -0
- package/dist/templates/productlaunch/components/Team.jsx +71 -0
- package/dist/templates/productlaunch/components/Testimonials.d.ts +5 -0
- package/dist/templates/productlaunch/components/Testimonials.jsx +54 -0
- package/dist/templates/productlaunch/components/TrustBadges.d.ts +5 -0
- package/dist/templates/productlaunch/components/TrustBadges.jsx +49 -0
- package/dist/templates/saasdashboard/PresetThemeVars.jsx +29 -0
- package/dist/templates/saasdashboard/components/Contact.jsx +89 -0
- package/dist/templates/saasdashboard/components/Dashboard.d.ts.map +1 -0
- package/dist/templates/saasdashboard/components/Dashboard.jsx +168 -0
- package/dist/templates/saasdashboard/components/Features.jsx +54 -0
- package/dist/templates/saasdashboard/components/Footer.jsx +51 -0
- package/dist/templates/saasdashboard/components/Hero.d.ts.map +1 -1
- package/dist/templates/saasdashboard/components/Hero.jsx +69 -0
- package/dist/templates/saasdashboard/components/Hero_mask.d.ts.map +1 -1
- package/dist/templates/saasdashboard/components/Hero_mask.jsx +84 -0
- package/dist/templates/saasdashboard/components/Navbar.d.ts +25 -0
- package/dist/templates/saasdashboard/components/Navbar.d.ts.map +1 -1
- package/dist/templates/saasdashboard/components/Navbar.jsx +83 -0
- package/dist/templates/saasdashboard/components/Pricing.jsx +64 -0
- package/dist/templates/saasdashboard/components/SmoothScroll.d.ts.map +1 -0
- package/dist/templates/saasdashboard/components/SmoothScroll.jsx +86 -0
- package/dist/templates/saasdashboard/components/Testimonials.jsx +39 -0
- package/dist/templates/saasdashboard/components/TrustBadges.jsx +36 -0
- package/package.json +34 -34
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Team as SharedTeam } from "@nextworks/blocks-sections";
|
|
3
|
+
/**
|
|
4
|
+
* Product Launch preset for Team wired to the shared Team component
|
|
5
|
+
*/
|
|
6
|
+
export function Team() {
|
|
7
|
+
const teamMembers = [
|
|
8
|
+
{
|
|
9
|
+
name: "Dr. Sarah Chen",
|
|
10
|
+
role: "Chief AI Officer",
|
|
11
|
+
bio: "Leading AI researcher with 15+ years in machine learning and neural networks. PhD from MIT.",
|
|
12
|
+
avatar: "👩🔬",
|
|
13
|
+
socialLinks: [
|
|
14
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
15
|
+
{ platform: "Twitter", url: "#", icon: "🐦" },
|
|
16
|
+
{ platform: "GitHub", url: "#", icon: "💻" },
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "Marcus Rodriguez",
|
|
21
|
+
role: "Head of AI Engineering",
|
|
22
|
+
bio: "Full-stack AI engineer specializing in scalable ML systems and cloud infrastructure.",
|
|
23
|
+
avatar: "👨💻",
|
|
24
|
+
socialLinks: [
|
|
25
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
26
|
+
{ platform: "GitHub", url: "#", icon: "💻" },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "Dr. Emily Watson",
|
|
31
|
+
role: "AI Research Director",
|
|
32
|
+
bio: "Expert in natural language processing and computer vision with 12+ years of research experience.",
|
|
33
|
+
avatar: "👩🎓",
|
|
34
|
+
socialLinks: [
|
|
35
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
36
|
+
{ platform: "Twitter", url: "#", icon: "🐦" },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "Alex Kim",
|
|
41
|
+
role: "AI Product Manager",
|
|
42
|
+
bio: "Strategic leader focused on bringing AI solutions to market with deep understanding of business needs.",
|
|
43
|
+
avatar: "👨💼",
|
|
44
|
+
socialLinks: [
|
|
45
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
46
|
+
{ platform: "Twitter", url: "#", icon: "🐦" },
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
return (<SharedTeam teamHeadingText="Meet the AI Experts" teamSubheadingText="Our world-class team of AI researchers, engineers, and strategists working to revolutionize your business with cutting-edge artificial intelligence." teamMembers={teamMembers} section={{
|
|
51
|
+
className: "py-20 md:py-24 lg:py-28 bg-gray-50 dark:bg-gray-900",
|
|
52
|
+
}} container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-12" }} header={{ className: "space-y-16 items-center" }} heading={{
|
|
53
|
+
className: "text-3xl md:text-4xl lg:text-5xl font-bold text-gray-800 dark:text-white text-center font-outfit",
|
|
54
|
+
}} subheading={{
|
|
55
|
+
className: "text-lg md:text-xl text-gray-600 dark:text-gray-300 opacity-90 leading-relaxed text-center max-w-4xl mx-auto font-inter",
|
|
56
|
+
}} grid={{
|
|
57
|
+
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8 md:gap-10 w-full",
|
|
58
|
+
}} card={{
|
|
59
|
+
className: "bg-white dark:bg-gray-800 p-8 rounded-xl shadow-lg text-center transition-all duration-300 hover:-translate-y-2 hover:shadow-2xl group border border-gray-200 dark:border-gray-700",
|
|
60
|
+
}} cardContent={{ className: "flex flex-col items-center space-y-6" }} avatar={{
|
|
61
|
+
className: "text-5xl md:text-6xl mb-3 group-hover:scale-110 transition-transform duration-300",
|
|
62
|
+
}} name={{
|
|
63
|
+
className: "text-lg md:text-xl font-bold text-gray-800 dark:text-white font-outfit group-hover:text-purple-600 dark:group-hover:text-purple-400 transition-colors duration-300",
|
|
64
|
+
}} role={{
|
|
65
|
+
className: "text-base font-semibold text-purple-600 dark:text-purple-400 font-inter",
|
|
66
|
+
}} bio={{
|
|
67
|
+
className: "text-sm md:text-base text-gray-600 dark:text-gray-300 opacity-90 leading-relaxed font-inter",
|
|
68
|
+
}} socialLinks={{ className: "flex gap-4 mt-4" }} socialLink={{
|
|
69
|
+
className: "text-xl text-purple-600 hover:text-purple-700 dark:text-purple-400 dark:hover:text-purple-300 transition-colors duration-200 hover:scale-110 transform",
|
|
70
|
+
}} ariaLabel="IntelliOpAI team section"/>);
|
|
71
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Testimonials as SharedTestimonials } from "@nextworks/blocks-sections";
|
|
3
|
+
/**
|
|
4
|
+
* Product Launch preset for Testimonials wired to the shared Testimonials component
|
|
5
|
+
*/
|
|
6
|
+
export function Testimonials() {
|
|
7
|
+
const testimonials = [
|
|
8
|
+
{
|
|
9
|
+
testimonialText: "IntelliOpAI has completely transformed our workflow. The AI-powered automation saves us 40+ hours per week, and the accuracy is incredible.",
|
|
10
|
+
testimonialAuthor: " - Sarah Johnson, CEO at TechCorp",
|
|
11
|
+
testimonialAuthorInitials: "SJ",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
testimonialText: "The machine learning capabilities are outstanding. We've seen a 300% increase in productivity since implementing their AI solutions.",
|
|
15
|
+
testimonialAuthor: " - Michael Chen, CTO at InnovateLab",
|
|
16
|
+
testimonialAuthorInitials: "MC",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
testimonialText: "Game-changing technology! The AI insights have helped us make better decisions and scale our business faster than ever before.",
|
|
20
|
+
testimonialAuthor: " - Emily Rodriguez, VP Operations at GrowthCo",
|
|
21
|
+
testimonialAuthorInitials: "ER",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
testimonialText: "The implementation was seamless and the results exceeded our expectations. Our team loves working with the AI-powered tools.",
|
|
25
|
+
testimonialAuthor: " - David Kim, Head of Engineering at StartupXYZ",
|
|
26
|
+
testimonialAuthorInitials: "DK",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
testimonialText: "IntelliOpAI's natural language processing capabilities have revolutionized how we handle customer support. Response times improved by 80%.",
|
|
30
|
+
testimonialAuthor: " - Lisa Wang, Customer Success Director at ServicePro",
|
|
31
|
+
testimonialAuthorInitials: "LW",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
testimonialText: "The predictive analytics features are phenomenal. We can now forecast trends and make data-driven decisions with confidence.",
|
|
35
|
+
testimonialAuthor: " - James Thompson, Data Science Lead at AnalyticsPlus",
|
|
36
|
+
testimonialAuthorInitials: "JT",
|
|
37
|
+
},
|
|
38
|
+
];
|
|
39
|
+
return (<SharedTestimonials id="testimonials" testimonials={testimonials} testimonialSectionHeader="What Our AI Customers Say" section={{
|
|
40
|
+
className: "py-20 md:py-24 lg:py-28 bg-gray-50 dark:bg-gray-900",
|
|
41
|
+
}} container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-12" }} header={{ className: "text-center mb-16" }} heading={{
|
|
42
|
+
className: "text-3xl md:text-4xl lg:text-5xl font-bold text-gray-800 dark:text-white text-center font-outfit",
|
|
43
|
+
}} grid={{
|
|
44
|
+
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 md:gap-10",
|
|
45
|
+
}} card={{
|
|
46
|
+
className: "bg-white dark:bg-gray-800 p-8 rounded-xl shadow-lg transition-all duration-300 hover:-translate-y-2 hover:shadow-2xl hover:shadow-purple-500/10 group border border-gray-200 dark:border-gray-700 hover:border-purple-300 dark:hover:border-purple-600",
|
|
47
|
+
}} content={{ className: "flex flex-col space-y-6" }} text={{
|
|
48
|
+
className: "text-gray-700 dark:text-gray-300 text-base md:text-lg leading-relaxed italic font-inter group-hover:text-purple-600 dark:group-hover:text-purple-400 transition-colors duration-300",
|
|
49
|
+
}} author={{
|
|
50
|
+
className: "text-gray-600 dark:text-gray-400 text-sm md:text-base font-medium font-inter",
|
|
51
|
+
}} avatar={{
|
|
52
|
+
className: "w-16 h-16 bg-gradient-to-br from-purple-600 to-purple-700 text-white rounded-full flex items-center justify-center text-xl font-bold shadow-lg group-hover:scale-110 transition-transform duration-300",
|
|
53
|
+
}} avatarText={{ className: "text-white font-bold" }} ariaLabel="Customer testimonials for IntelliOpAI"/>);
|
|
54
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { TrustBadges as SharedTrustBadges } from "@nextworks/blocks-sections";
|
|
3
|
+
/**
|
|
4
|
+
* Product Launch preset for TrustBadges wired to the shared TrustBadges component
|
|
5
|
+
*/
|
|
6
|
+
export function TrustBadges() {
|
|
7
|
+
const badges = [
|
|
8
|
+
{
|
|
9
|
+
badgeText: "50,000+ AI Models",
|
|
10
|
+
badgeDescription: "Powered by",
|
|
11
|
+
badgeIcon: "🤖",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
badgeText: "99.9% Accuracy",
|
|
15
|
+
badgeDescription: "AI Performance",
|
|
16
|
+
badgeIcon: "🎯",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
badgeText: "SOC 2 Type II",
|
|
20
|
+
badgeDescription: "Enterprise Security",
|
|
21
|
+
badgeIcon: "🔒",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
badgeText: "24/7 Support",
|
|
25
|
+
badgeDescription: "Always Available",
|
|
26
|
+
badgeIcon: "⚡",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
badgeText: "Fortune 500",
|
|
30
|
+
badgeDescription: "Trusted by",
|
|
31
|
+
badgeIcon: "🏆",
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
return (<SharedTrustBadges id="trust-badges" badges={badges} trustBadgesSectionHeader="Trusted by Industry Leaders" section={{
|
|
35
|
+
className: "py-12 md:py-16 bg-gradient-to-r from-gray-50 to-white dark:from-gray-900 dark:to-gray-800 border-t border-b border-gray-200 dark:border-gray-700",
|
|
36
|
+
}} container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-12" }} header={{ className: "text-center mb-12" }} heading={{
|
|
37
|
+
className: "text-xl md:text-2xl lg:text-3xl font-bold text-gray-800 dark:text-white font-outfit",
|
|
38
|
+
}} badgesContainer={{
|
|
39
|
+
className: "flex flex-col sm:flex-row justify-center items-center gap-8 md:gap-12 lg:gap-16 flex-wrap",
|
|
40
|
+
}} badge={{
|
|
41
|
+
className: "flex flex-col items-center text-center min-w-[180px] group",
|
|
42
|
+
}} badgeContent={{ className: "flex flex-col items-center space-y-3" }} icon={{
|
|
43
|
+
className: "text-3xl md:text-4xl mb-3 group-hover:scale-105 transition-transform duration-500 ease-out",
|
|
44
|
+
}} description={{
|
|
45
|
+
className: "text-xs md:text-sm font-medium text-gray-600 dark:text-gray-400 group-hover:text-purple-500 dark:group-hover:text-purple-400 transition-colors duration-500 ease-out",
|
|
46
|
+
}} text={{
|
|
47
|
+
className: "text-base md:text-lg font-bold text-gray-900 dark:text-white group-hover:text-purple-600 dark:group-hover:text-purple-400 transition-colors duration-500 ease-out font-outfit",
|
|
48
|
+
}} layout="horizontal" ariaLabel="Trust badges for IntelliOpAI"/>);
|
|
49
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cn } from "@nextworks/blocks-core";
|
|
3
|
+
/**
|
|
4
|
+
* SaaSDashboard template theme variables wrapper.
|
|
5
|
+
* Sky/blue leaning palette; adjust values to your preset branding.
|
|
6
|
+
*/
|
|
7
|
+
export function PresetThemeVars({ className, children }) {
|
|
8
|
+
return (<div className={cn(
|
|
9
|
+
// Shared button ring
|
|
10
|
+
"[--btn-ring:theme(colors.sky.500)] dark:[--btn-ring:theme(colors.sky.400)]",
|
|
11
|
+
// Inputs
|
|
12
|
+
"[--input-bg:theme(colors.white)] dark:[--input-bg:theme(colors.gray.900)]", "[--input-fg:theme(colors.gray.900)] dark:[--input-fg:theme(colors.gray.100)]", "[--input-placeholder:theme(colors.gray.400)] dark:[--input-placeholder:theme(colors.gray.500)]", "[--input-border:theme(colors.sky.200)] dark:[--input-border:theme(colors.sky.700)]", "[--input-focus-ring:theme(colors.sky.500)] dark:[--input-focus-ring:theme(colors.sky.400)]", "[--input-ring-offset:theme(colors.white)] dark:[--input-ring-offset:theme(colors.gray.900)]",
|
|
13
|
+
// Cards
|
|
14
|
+
"[--card-bg:theme(colors.white)] dark:[--card-bg:theme(colors.gray.900)]", "[--card-fg:theme(colors.gray.900)] dark:[--card-fg:theme(colors.gray.100)]", "[--card-title-fg:theme(colors.gray.900)] dark:[--card-title-fg:theme(colors.gray.100)]", "[--card-muted-fg:theme(colors.gray.500)] dark:[--card-muted-fg:theme(colors.gray.400)]", "[--card-border:theme(colors.gray.200)] dark:[--card-border:theme(colors.gray.800)]", "[--card-shadow:0_6px_20px_rgba(0,0,0,0.06)]",
|
|
15
|
+
// Badges/Chips
|
|
16
|
+
"[--badge-bg:theme(colors.sky.50)] dark:[--badge-bg:theme(colors.sky.950)]", "[--badge-fg:theme(colors.sky.700)] dark:[--badge-fg:theme(colors.sky.300)]", "[--badge-border:theme(colors.sky.200)] dark:[--badge-border:theme(colors.sky.800)]", "[--badge-active-bg:theme(colors.sky.600)] dark:[--badge-active-bg:theme(colors.sky.500)]", "[--badge-active-fg:theme(colors.white)] dark:[--badge-active-fg:theme(colors.white)]", "[--badge-active-border:theme(colors.sky.700)] dark:[--badge-active-border:theme(colors.sky.400)]",
|
|
17
|
+
// Headings/Subheadings
|
|
18
|
+
"[--heading-fg:theme(colors.gray.900)] dark:[--heading-fg:theme(colors.gray.100)]", "[--subheading-fg:theme(colors.gray.600)] dark:[--subheading-fg:theme(colors.gray.300)]", "[--description-fg:theme(colors.gray.700)] dark:[--description-fg:theme(colors.gray.200)]",
|
|
19
|
+
// Hero background (optional)
|
|
20
|
+
"[--hero-bg:theme(colors.white)] dark:[--hero-bg:theme(colors.slate.950)]",
|
|
21
|
+
// Footer
|
|
22
|
+
"[--footer-bg:transparent] dark:[--footer-bg:transparent]", "[--footer-fg:theme(colors.gray.800)] dark:[--footer-fg:theme(colors.gray.100)]", "[--footer-heading-fg:theme(colors.gray.900)] dark:[--footer-heading-fg:theme(colors.gray.100)]", "[--footer-link-fg:theme(colors.gray.700)] dark:[--footer-link-fg:theme(colors.gray.300)]", "[--footer-link-hover-fg:theme(colors.sky.700)] dark:[--footer-link-hover-fg:theme(colors.sky.400)]", "[--footer-link-hover-bg:theme(colors.sky.50)] dark:[--footer-link-hover-bg:color-mix(in_oklab,oklch(0.18_0.05_235)_20%,transparent)]", "[--footer-muted-fg:theme(colors.gray.500)] dark:[--footer-muted-fg:theme(colors.gray.400)]", "[--footer-border:theme(colors.gray.200)] dark:[--footer-border:theme(colors.gray.800)]",
|
|
23
|
+
// Table (optional)
|
|
24
|
+
"[--table-fg:inherit]", "[--table-muted-fg:theme(colors.gray.500)] dark:[--table-muted-fg:theme(colors.gray.400)]", "[--table-head-fg:theme(colors.gray.700)] dark:[--table-head-fg:theme(colors.gray.300)]", "[--table-border:theme(colors.gray.200)] dark:[--table-border:theme(colors.gray.800)]", "[--table-row-hover-bg:theme(colors.gray.50)] dark:[--table-row-hover-bg:theme(colors.gray.900)]",
|
|
25
|
+
// FAQ specific (optional overrides; fall back to --btn-* and --card-*)
|
|
26
|
+
"[--faq-btn-bg:var(--btn-bg)] dark:[--faq-btn-bg:var(--btn-bg)]", "[--faq-btn-fg:var(--btn-fg)] dark:[--faq-btn-fg:var(--btn-fg)]", "[--faq-btn-hover-bg:var(--btn-hover-bg)] dark:[--faq-btn-hover-bg:var(--btn-hover-bg)]", "[--faq-btn-hover-fg:var(--btn-hover-fg)] dark:[--faq-btn-hover-fg:var(--btn-hover-fg)]", "[--faq-answer-bg:var(--card-bg)] dark:[--faq-answer-bg:var(--card-bg)]", "[--faq-answer-fg:var(--card-fg)] dark:[--faq-answer-fg:var(--card-fg)]", className)}>
|
|
27
|
+
{children}
|
|
28
|
+
</div>);
|
|
29
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React from "react";
|
|
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
|
+
};
|
|
53
|
+
return (<div className="relative">
|
|
54
|
+
{/* Gradient mesh overlay */}
|
|
55
|
+
<div aria-hidden 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"/>
|
|
56
|
+
{/* Fine noise/dots texture */}
|
|
57
|
+
<div aria-hidden 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]"/>
|
|
58
|
+
|
|
59
|
+
<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."
|
|
60
|
+
// Root and section
|
|
61
|
+
className="w-full" section={{
|
|
62
|
+
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",
|
|
63
|
+
}} container={{ className: "mx-auto max-w-4xl" }}
|
|
64
|
+
// Header slots
|
|
65
|
+
headerWrapper={{ className: "mb-10 text-center" }} headerText={{
|
|
66
|
+
className: "text-3xl font-bold font-inter text-white",
|
|
67
|
+
}} subheaderText={{
|
|
68
|
+
className: "mt-3 text-base text-white/90 max-w-2xl mx-auto font-inter",
|
|
69
|
+
}}
|
|
70
|
+
// Form container
|
|
71
|
+
form={{
|
|
72
|
+
className: "bg-card p-8 rounded-xl shadow-xl border border-border bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)]",
|
|
73
|
+
}}
|
|
74
|
+
// Fields and inputs
|
|
75
|
+
fieldsWrapper={{ className: "space-y-4" }} field={{ className: "space-y-2" }} label={{
|
|
76
|
+
className: "text-card-foreground text-sm font-medium font-poppins block",
|
|
77
|
+
}} input={{
|
|
78
|
+
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)]",
|
|
79
|
+
}} textarea={{
|
|
80
|
+
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)]",
|
|
81
|
+
}}
|
|
82
|
+
// Submit button (wrapper/style/text split)
|
|
83
|
+
submitButtonWrapper={{ className: "pt-2" }} submitButtonStyle={{
|
|
84
|
+
variant: "default",
|
|
85
|
+
size: "lg",
|
|
86
|
+
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",
|
|
87
|
+
}} submitButtonText="Send Request" onSubmit={handleFormSubmit}/>
|
|
88
|
+
</div>);
|
|
89
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.d.ts","sourceRoot":"","sources":["../../../../src/templates/saasdashboard/components/Dashboard.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,KAAK,YAAY,GAAG;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,IAAI,GAAG;IACV,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,UAAU,cAAc;IACtB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,aAAa,EACb,SAAuB,EACvB,QAA4C,GAC7C,EAAE,cAAc,qBA2DhB;AAoLD,iBAAS,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,YAAY,qBAwB3D"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
3
|
+
export function Dashboard({ stats, projects, floatingCards, activeTab = "Analytics", navItems = ["Analytics", "Projects", "Team"], }) {
|
|
4
|
+
return (<div className="relative isolate">
|
|
5
|
+
<DashboardMockup stats={stats} projects={projects} activeTab={activeTab} navItems={navItems}/>
|
|
6
|
+
|
|
7
|
+
{floatingCards.map(({ position, icon, text }) => (<FloatingCard key={position} position={position} icon={icon} text={text}/>))}
|
|
8
|
+
|
|
9
|
+
<style>{`
|
|
10
|
+
.dashboard-mockup {
|
|
11
|
+
transform: perspective(1000px) rotateY(-5deg) rotateX(5deg);
|
|
12
|
+
transition: transform 0.3s ease;
|
|
13
|
+
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.3);
|
|
14
|
+
}
|
|
15
|
+
.dashboard-mockup:hover {
|
|
16
|
+
transform: perspective(1000px) rotateY(-2deg) rotateX(2deg);
|
|
17
|
+
}
|
|
18
|
+
.trend-line {
|
|
19
|
+
clip-path: polygon(
|
|
20
|
+
0 100%,
|
|
21
|
+
20% 80%,
|
|
22
|
+
40% 85%,
|
|
23
|
+
60% 60%,
|
|
24
|
+
80% 50%,
|
|
25
|
+
100% 20%
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
@keyframes growUp {
|
|
29
|
+
0% {
|
|
30
|
+
height: 0;
|
|
31
|
+
opacity: 0;
|
|
32
|
+
}
|
|
33
|
+
100% {
|
|
34
|
+
opacity: 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
@keyframes floatAnim {
|
|
38
|
+
0%,
|
|
39
|
+
100% {
|
|
40
|
+
transform: translateY(0px);
|
|
41
|
+
}
|
|
42
|
+
50% {
|
|
43
|
+
transform: translateY(-20px);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`}</style>
|
|
47
|
+
</div>);
|
|
48
|
+
}
|
|
49
|
+
function DashboardMockup({ stats, projects, activeTab, navItems, }) {
|
|
50
|
+
const [tilt, setTilt] = useState({ rx: 0, ry: 0 });
|
|
51
|
+
const targetTilt = useRef({ rx: 0, ry: 0 });
|
|
52
|
+
const rafId = useRef(null);
|
|
53
|
+
const animate = () => {
|
|
54
|
+
setTilt((prev) => {
|
|
55
|
+
const smoothing = 0.15;
|
|
56
|
+
const nextRx = prev.rx + (targetTilt.current.rx - prev.rx) * smoothing;
|
|
57
|
+
const nextRy = prev.ry + (targetTilt.current.ry - prev.ry) * smoothing;
|
|
58
|
+
return { rx: nextRx, ry: nextRy };
|
|
59
|
+
});
|
|
60
|
+
rafId.current = requestAnimationFrame(animate);
|
|
61
|
+
};
|
|
62
|
+
const handleMove = (e) => {
|
|
63
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
64
|
+
const x = e.clientX - rect.left;
|
|
65
|
+
const y = e.clientY - rect.top;
|
|
66
|
+
const rx = (y / rect.height - 0.5) * -6;
|
|
67
|
+
const ry = (x / rect.width - 0.5) * 6;
|
|
68
|
+
targetTilt.current = { rx, ry };
|
|
69
|
+
if (rafId.current == null)
|
|
70
|
+
rafId.current = requestAnimationFrame(animate);
|
|
71
|
+
};
|
|
72
|
+
const handleLeave = () => {
|
|
73
|
+
targetTilt.current = { rx: 0, ry: 0 };
|
|
74
|
+
};
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
return () => {
|
|
77
|
+
if (rafId.current != null)
|
|
78
|
+
cancelAnimationFrame(rafId.current);
|
|
79
|
+
};
|
|
80
|
+
}, []);
|
|
81
|
+
return (<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 " +
|
|
82
|
+
"bg-slate-900/80 dark:bg-slate-900/80"} style={{
|
|
83
|
+
willChange: "transform",
|
|
84
|
+
transform: `perspective(1000px) rotateX(${tilt.rx}deg) rotateY(${tilt.ry}deg)`,
|
|
85
|
+
}} onMouseMove={handleMove} onMouseLeave={handleLeave}>
|
|
86
|
+
<DashboardHeader activeTab={activeTab} navItems={navItems}/>
|
|
87
|
+
<DashboardGrid stats={stats} projects={projects}/>
|
|
88
|
+
</div>);
|
|
89
|
+
}
|
|
90
|
+
function DashboardHeader({ activeTab = "Analytics", navItems = ["Analytics", "Projects", "Team"], }) {
|
|
91
|
+
return (<div className="mb-6 flex items-center justify-between border-b border-blue-500/10 pb-4">
|
|
92
|
+
<div className="text-[1.1rem] font-semibold text-slate-200">
|
|
93
|
+
Business Overview
|
|
94
|
+
</div>
|
|
95
|
+
<div className="hidden gap-3 md:flex">
|
|
96
|
+
{navItems.map((item) => (<div key={item} className={"rounded-md px-3 py-2 text-sm " +
|
|
97
|
+
(item === activeTab
|
|
98
|
+
? "bg-gradient-to-br from-blue-500 to-purple-500 text-white"
|
|
99
|
+
: "bg-blue-500/10 text-blue-400")}>
|
|
100
|
+
{item}
|
|
101
|
+
</div>))}
|
|
102
|
+
</div>
|
|
103
|
+
</div>);
|
|
104
|
+
}
|
|
105
|
+
function DashboardGrid({ stats, projects, }) {
|
|
106
|
+
return (<div className="mb-4 grid grid-cols-[2fr_1fr] gap-4">
|
|
107
|
+
<ChartArea />
|
|
108
|
+
<StatsPanel stats={stats}/>
|
|
109
|
+
<ProjectList projects={projects}/>
|
|
110
|
+
</div>);
|
|
111
|
+
}
|
|
112
|
+
function ChartArea() {
|
|
113
|
+
const barHeights = [30, 45, 35, 60, 55, 75, 70, 85, 90, 100];
|
|
114
|
+
return (<div className="relative overflow-hidden rounded-lg border border-blue-500/10 bg-slate-900/50 p-4">
|
|
115
|
+
<div className="mb-2 text-sm text-slate-300">Revenue Growth</div>
|
|
116
|
+
<div className="relative h-32 overflow-hidden rounded-md" style={{
|
|
117
|
+
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%)",
|
|
118
|
+
}}>
|
|
119
|
+
<div className="absolute inset-[10px] flex items-end gap-[3px]">
|
|
120
|
+
{barHeights.map((h, i) => (<div key={i} className="flex-1 rounded-t bg-gradient-to-b from-blue-500 to-purple-500" style={{
|
|
121
|
+
minHeight: "20px",
|
|
122
|
+
height: `${h}%`,
|
|
123
|
+
animation: "growUp 2s ease-out both",
|
|
124
|
+
animationDelay: `${(i + 1) * 0.1}s`,
|
|
125
|
+
}}/>))}
|
|
126
|
+
</div>
|
|
127
|
+
<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"/>
|
|
128
|
+
</div>
|
|
129
|
+
</div>);
|
|
130
|
+
}
|
|
131
|
+
function StatsPanel({ stats }) {
|
|
132
|
+
return (<div className="flex flex-col gap-2">
|
|
133
|
+
{stats.map((s, i) => (<div key={i} className="rounded-lg border border-blue-500/10 bg-slate-900/50 p-3">
|
|
134
|
+
<div className="text-lg font-bold text-blue-500">{s.value}</div>
|
|
135
|
+
<div className="text-[0.7rem] text-slate-400 uppercase">
|
|
136
|
+
{s.label}
|
|
137
|
+
</div>
|
|
138
|
+
</div>))}
|
|
139
|
+
</div>);
|
|
140
|
+
}
|
|
141
|
+
function ProjectList({ projects }) {
|
|
142
|
+
return (<div className="col-span-2 rounded-lg border border-blue-500/10 bg-slate-900/50 p-4">
|
|
143
|
+
<div className="mb-2 text-sm text-slate-300">Active Projects</div>
|
|
144
|
+
<div className="flex flex-wrap gap-2">
|
|
145
|
+
{projects.map((p, i) => (<div key={i} 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">
|
|
146
|
+
{p}
|
|
147
|
+
</div>))}
|
|
148
|
+
</div>
|
|
149
|
+
</div>);
|
|
150
|
+
}
|
|
151
|
+
function FloatingCard({ position, icon, text }) {
|
|
152
|
+
const positionClasses = position === "card-1"
|
|
153
|
+
? "top-[10%] right-[6%]"
|
|
154
|
+
: position === "card-2"
|
|
155
|
+
? "bottom-[20%] left-[2%]"
|
|
156
|
+
: "top-0 left-0";
|
|
157
|
+
return (<div className={[
|
|
158
|
+
"absolute z-10 transform-gpu rounded-lg border border-blue-500/20 p-4 shadow-lg",
|
|
159
|
+
"animate-[floatAnim_6s_ease-in-out_infinite]",
|
|
160
|
+
"bg-slate-800 dark:bg-slate-900",
|
|
161
|
+
positionClasses,
|
|
162
|
+
].join(" ")} style={{ willChange: "transform" }}>
|
|
163
|
+
<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">
|
|
164
|
+
{icon}
|
|
165
|
+
</div>
|
|
166
|
+
<div className="text-sm text-slate-300">{text}</div>
|
|
167
|
+
</div>);
|
|
168
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Features as SharedFeatures } from "@nextworks/blocks-sections";
|
|
3
|
+
import { cn } from "@nextworks/blocks-core";
|
|
4
|
+
const defaultFeaturesData = [
|
|
5
|
+
{
|
|
6
|
+
imageSrc: "/placeholders/saas_dashboard/projectBoard.png",
|
|
7
|
+
imageAlt: "Project Management Dashboard",
|
|
8
|
+
headingText: "Track Every Project",
|
|
9
|
+
subheadingText: "Kanban boards, Gantt charts, and timeline views keep your team aligned and deadlines met",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
imageSrc: "/placeholders/saas_dashboard/analytics.png",
|
|
13
|
+
imageAlt: "Analytics Dashboard",
|
|
14
|
+
headingText: "Data-Driven Insights",
|
|
15
|
+
subheadingText: "Real-time metrics, custom reports, and forecasting tools to make smarter business decisions",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
imageSrc: "/placeholders/saas_dashboard/chat.png",
|
|
19
|
+
imageAlt: "Team Collaboration Tools",
|
|
20
|
+
headingText: "Seamless Teamwork",
|
|
21
|
+
subheadingText: "Built-in chat, file sharing, and @mentions keep everyone connected and productive",
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
export function Features() {
|
|
25
|
+
return (<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={{
|
|
26
|
+
className: cn("font-inter mb-4 text-3xl font-bold text-[var(--heading-fg)] md:text-4xl lg:text-5xl"),
|
|
27
|
+
}} subheading={{
|
|
28
|
+
className: cn("font-inter mx-auto max-w-3xl text-lg leading-relaxed text-[var(--subheading-fg)] md:text-xl"),
|
|
29
|
+
}} grid={{
|
|
30
|
+
className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 md:gap-8",
|
|
31
|
+
}} cardWrapper={{
|
|
32
|
+
className: "group motion-reduce:transform-none motion-reduce:transition-none",
|
|
33
|
+
}} card={{
|
|
34
|
+
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",
|
|
35
|
+
}} image={{
|
|
36
|
+
className: "w-full h-48 md:h-56 object-cover transition-transform duration-300 group-hover:scale-[1.03]",
|
|
37
|
+
}} cardHeading={{
|
|
38
|
+
className: cn("font-inter mb-3 text-xl leading-tight font-semibold text-[var(--card-title-fg)] md:text-2xl"),
|
|
39
|
+
}} cardSubheading={{
|
|
40
|
+
className: cn("font-inter text-sm leading-relaxed text-[var(--card-muted-fg)] md:text-base"),
|
|
41
|
+
}}
|
|
42
|
+
// Motion config showcasing upgraded API
|
|
43
|
+
motionConfig={{
|
|
44
|
+
initial: { opacity: 0, y: 12 },
|
|
45
|
+
whileInView: { opacity: 1, y: 0 },
|
|
46
|
+
viewport: { once: true, amount: 0.2 },
|
|
47
|
+
transition: {
|
|
48
|
+
type: "spring",
|
|
49
|
+
stiffness: 125,
|
|
50
|
+
damping: 50,
|
|
51
|
+
delay: 0.12,
|
|
52
|
+
},
|
|
53
|
+
}} ariaLabel="Features section"/>);
|
|
54
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Footer as SharedFooter } from "@nextworks/blocks-sections";
|
|
3
|
+
import { cn } from "@nextworks/blocks-core";
|
|
4
|
+
const defaultNavLinks = [
|
|
5
|
+
{
|
|
6
|
+
heading: "Product",
|
|
7
|
+
links: [
|
|
8
|
+
{ name: "Features", href: "#features" },
|
|
9
|
+
{ name: "Pricing", href: "#pricing" },
|
|
10
|
+
{ name: "Documentation", href: "#documentation" },
|
|
11
|
+
{ name: "FAQ", href: "#faq" },
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
heading: "Company",
|
|
16
|
+
links: [
|
|
17
|
+
{ name: "About", href: "#about" },
|
|
18
|
+
{ name: "Careers", href: "#careers" },
|
|
19
|
+
{ name: "Blog", href: "#blog" },
|
|
20
|
+
{ name: "Contact", href: "#contact" },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
heading: "Resources",
|
|
25
|
+
links: [
|
|
26
|
+
{ name: "Help Center", href: "#help" },
|
|
27
|
+
{ name: "Terms of Service", href: "#terms" },
|
|
28
|
+
{ name: "Privacy Policy", href: "#privacy" },
|
|
29
|
+
{ name: "Status", href: "#status" },
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
export function Footer() {
|
|
34
|
+
return (<SharedFooter footerBrandName="Dash Flow" footerNavLinks={defaultNavLinks} className={cn("w-full")} section={{
|
|
35
|
+
className: "w-full bg-blue-50 dark:bg-gray-900 text-gray-800 dark:text-white",
|
|
36
|
+
}} container={{ className: "max-w-7xl mx-auto px-6" }} brand={{
|
|
37
|
+
className: "text-xl font-bold text-blue-600 dark:text-blue-400 font-outfit",
|
|
38
|
+
}} brandWrapper={{
|
|
39
|
+
className: "flex flex-col items-start text-left lg:pr-8",
|
|
40
|
+
}} navSection={{
|
|
41
|
+
className: "flex flex-col lg:flex-row items-start lg:items-start justify-center gap-8 lg:gap-12 pt-6.5 pb-8",
|
|
42
|
+
}} navGroup={{ className: "flex flex-col items-start text-left pt-1.5" }} navHeading={{
|
|
43
|
+
className: "font-semibold text-gray-800 dark:text-white mb-3 text-xs uppercase tracking-wider font-inter",
|
|
44
|
+
}} navLink={{
|
|
45
|
+
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",
|
|
46
|
+
}} socialSection={{
|
|
47
|
+
className: "flex items-center justify-center gap-4 py-4",
|
|
48
|
+
}} copyright={{
|
|
49
|
+
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",
|
|
50
|
+
}} ariaLabel="Footer section"/>);
|
|
51
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hero.d.ts","sourceRoot":"","sources":["../../../../src/templates/saasdashboard/components/Hero.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,IAAI,
|
|
1
|
+
{"version":3,"file":"Hero.d.ts","sourceRoot":"","sources":["../../../../src/templates/saasdashboard/components/Hero.tsx"],"names":[],"mappings":"AAsBA,wBAAgB,IAAI,gCAiFnB"}
|