nextworks 0.0.1 → 0.1.0-alpha.1
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/README.md +209 -30
- package/dist/.gitkeep +0 -0
- package/dist/cli_manifests/auth_manifest.json +86 -0
- package/dist/cli_manifests/blocks_manifest.json +185 -0
- package/dist/cli_manifests/data_manifest.json +51 -0
- package/dist/cli_manifests/forms_manifest.json +61 -0
- package/dist/commands/admin-posts.d.ts +2 -0
- package/dist/commands/admin-posts.d.ts.map +1 -0
- package/dist/commands/admin-posts.js +15 -0
- package/dist/commands/admin-posts.js.map +1 -0
- package/dist/commands/admin-users.d.ts +2 -0
- package/dist/commands/admin-users.d.ts.map +1 -0
- package/dist/commands/admin-users.js +15 -0
- package/dist/commands/admin-users.js.map +1 -0
- package/dist/commands/auth-core.d.ts +2 -0
- package/dist/commands/auth-core.d.ts.map +1 -0
- package/dist/commands/auth-core.js +83 -0
- package/dist/commands/auth-core.js.map +1 -0
- package/dist/commands/auth-forms.d.ts +2 -0
- package/dist/commands/auth-forms.d.ts.map +1 -0
- package/dist/commands/auth-forms.js +15 -0
- package/dist/commands/auth-forms.js.map +1 -0
- package/dist/commands/blocks-options.d.ts +7 -0
- package/dist/commands/blocks-options.d.ts.map +1 -0
- package/dist/commands/blocks-options.js +19 -0
- package/dist/commands/blocks-options.js.map +1 -0
- package/dist/commands/blocks.d.ts +7 -0
- package/dist/commands/blocks.d.ts.map +1 -0
- package/dist/commands/blocks.js +145 -0
- package/dist/commands/blocks.js.map +1 -0
- package/dist/commands/data.d.ts +3 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +88 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/forms.d.ts +6 -0
- package/dist/commands/forms.d.ts.map +1 -0
- package/dist/commands/forms.js +107 -0
- package/dist/commands/forms.js.map +1 -0
- package/dist/commands/remove-auth-core.d.ts +2 -0
- package/dist/commands/remove-auth-core.d.ts.map +1 -0
- package/dist/commands/remove-auth-core.js +69 -0
- package/dist/commands/remove-auth-core.js.map +1 -0
- package/dist/commands/remove-blocks.d.ts +2 -0
- package/dist/commands/remove-blocks.d.ts.map +1 -0
- package/dist/commands/remove-blocks.js +36 -0
- package/dist/commands/remove-blocks.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/kits/auth-core/README.md +106 -0
- package/dist/kits/auth-core/app/(protected)/dashboard/page.tsx +8 -0
- package/dist/kits/auth-core/app/(protected)/layout.tsx +18 -0
- package/dist/kits/auth-core/app/(protected)/settings/profile/page.tsx +15 -0
- package/dist/kits/auth-core/app/(protected)/settings/profile/profile-form.tsx +114 -0
- package/dist/kits/auth-core/app/api/auth/[...nextauth]/route.ts +1 -0
- package/dist/kits/auth-core/app/api/auth/forgot-password/route.ts +114 -0
- package/dist/kits/auth-core/app/api/auth/providers/route.ts +6 -0
- package/dist/kits/auth-core/app/api/auth/reset-password/route.ts +63 -0
- package/dist/kits/auth-core/app/api/auth/send-verify-email/route.ts +6 -0
- package/dist/kits/auth-core/app/api/signup/route.ts +41 -0
- package/dist/kits/auth-core/app/auth/forgot-password/page.tsx +21 -0
- package/dist/kits/auth-core/app/auth/login/page.tsx +5 -0
- package/dist/kits/auth-core/app/auth/reset-password/page.tsx +187 -0
- package/dist/kits/auth-core/app/auth/signup/page.tsx +5 -0
- package/dist/kits/auth-core/app/auth/verify-email/page.tsx +11 -0
- package/dist/kits/auth-core/components/admin/admin-header.tsx +57 -0
- package/dist/kits/auth-core/components/auth/dashboard.tsx +237 -0
- package/dist/kits/auth-core/components/auth/forgot-password-form.tsx +90 -0
- package/dist/kits/auth-core/components/auth/login-form.tsx +467 -0
- package/dist/kits/auth-core/components/auth/logout-button.tsx +50 -0
- package/dist/kits/auth-core/components/auth/minimal-logout-button.tsx +40 -0
- package/dist/kits/auth-core/components/auth/signup-form.tsx +468 -0
- package/dist/kits/auth-core/components/require-auth.tsx +59 -0
- package/dist/kits/auth-core/components/session-provider.tsx +11 -0
- package/dist/kits/auth-core/components/ui/README.txt +1 -0
- package/dist/kits/auth-core/components/ui/button.tsx +55 -0
- package/dist/kits/auth-core/components/ui/input.tsx +25 -0
- package/dist/kits/auth-core/components/ui/label.tsx +23 -0
- package/dist/kits/auth-core/lib/api/errors.ts +14 -0
- package/dist/kits/auth-core/lib/auth-helpers.ts +29 -0
- package/dist/kits/auth-core/lib/auth.ts +142 -0
- package/dist/kits/auth-core/lib/email/dev-transport.ts +42 -0
- package/dist/kits/auth-core/lib/email/index.ts +28 -0
- package/dist/kits/auth-core/lib/email/provider-smtp.ts +36 -0
- package/dist/kits/auth-core/lib/forms/map-errors.ts +11 -0
- package/dist/kits/auth-core/lib/hash.ts +6 -0
- package/dist/kits/auth-core/lib/prisma.ts +15 -0
- package/dist/kits/auth-core/lib/server/result.ts +45 -0
- package/dist/kits/auth-core/lib/utils.ts +6 -0
- package/dist/kits/auth-core/lib/validation/forms.ts +88 -0
- package/dist/kits/auth-core/package-deps.json +19 -0
- package/dist/kits/auth-core/prisma/auth-models.prisma +81 -0
- package/dist/kits/auth-core/prisma/schema.prisma +81 -0
- package/dist/kits/auth-core/scripts/populate-tokenhash.mjs +26 -0
- package/dist/kits/auth-core/scripts/promote-admin.mjs +33 -0
- package/dist/kits/auth-core/scripts/seed-demo.mjs +40 -0
- package/dist/kits/auth-core/types/next-auth.d.ts +25 -0
- package/dist/kits/blocks/README.md +53 -0
- package/dist/kits/blocks/app/globals.css +175 -0
- package/dist/kits/blocks/app/templates/digitalagency/PresetThemeVars.tsx +80 -0
- package/dist/kits/blocks/app/templates/digitalagency/README.md +36 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/About.tsx +99 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/CTA.tsx +74 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Contact.tsx +227 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Footer.tsx +89 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Hero.tsx +90 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Navbar.tsx +168 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/NetworkPattern.tsx +297 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Portfolio.tsx +157 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Pricing.tsx +114 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Process.tsx +59 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Services.tsx +55 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Team.tsx +28 -0
- package/dist/kits/blocks/app/templates/digitalagency/components/Testimonials.tsx +65 -0
- package/dist/kits/blocks/app/templates/digitalagency/page.tsx +38 -0
- package/dist/kits/blocks/app/templates/gallery/PresetThemeVars.tsx +85 -0
- package/dist/kits/blocks/app/templates/gallery/page.tsx +303 -0
- package/dist/kits/blocks/app/templates/productlaunch/PresetThemeVars.tsx +74 -0
- package/dist/kits/blocks/app/templates/productlaunch/README.md +55 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/About.tsx +178 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/CTA.tsx +93 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Contact.tsx +231 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/FAQ.tsx +93 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Features.tsx +84 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Footer.tsx +132 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Hero.tsx +89 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Navbar.tsx +162 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Pricing.tsx +106 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/ProcessTimeline.tsx +110 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/ServicesGrid.tsx +68 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Team.tsx +104 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/Testimonials.tsx +89 -0
- package/dist/kits/blocks/app/templates/productlaunch/components/TrustBadges.tsx +76 -0
- package/dist/kits/blocks/app/templates/productlaunch/page.tsx +45 -0
- package/dist/kits/blocks/app/templates/saasdashboard/PresetThemeVars.tsx +80 -0
- package/dist/kits/blocks/app/templates/saasdashboard/README.md +38 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Contact.tsx +176 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Dashboard.tsx +293 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/FAQ.tsx +55 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Features.tsx +91 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Footer.tsx +77 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Hero.tsx +105 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Hero_mask.tsx +127 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Navbar.tsx +159 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Pricing.tsx +90 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/SmoothScroll.tsx +97 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/Testimonials.tsx +72 -0
- package/dist/kits/blocks/app/templates/saasdashboard/components/TrustBadges.tsx +53 -0
- package/dist/kits/blocks/app/templates/saasdashboard/page.tsx +39 -0
- package/dist/kits/blocks/components/app-providers.tsx +1 -0
- package/dist/kits/blocks/components/enhanced-theme-provider.tsx +195 -0
- package/dist/kits/blocks/components/sections/About.tsx +291 -0
- package/dist/kits/blocks/components/sections/CTA.tsx +258 -0
- package/dist/kits/blocks/components/sections/Contact.tsx +267 -0
- package/dist/kits/blocks/components/sections/FAQ.tsx +226 -0
- package/dist/kits/blocks/components/sections/Features.tsx +269 -0
- package/dist/kits/blocks/components/sections/Footer.tsx +302 -0
- package/dist/kits/blocks/components/sections/HeroMotion.tsx +307 -0
- package/dist/kits/blocks/components/sections/HeroOverlay.tsx +358 -0
- package/dist/kits/blocks/components/sections/HeroSplit.tsx +352 -0
- package/dist/kits/blocks/components/sections/Navbar.tsx +353 -0
- package/dist/kits/blocks/components/sections/Newsletter.tsx +156 -0
- package/dist/kits/blocks/components/sections/PortfolioSimple.tsx +550 -0
- package/dist/kits/blocks/components/sections/Pricing.tsx +264 -0
- package/dist/kits/blocks/components/sections/ProcessTimeline.tsx +325 -0
- package/dist/kits/blocks/components/sections/ServicesGrid.tsx +210 -0
- package/dist/kits/blocks/components/sections/Team.tsx +309 -0
- package/dist/kits/blocks/components/sections/Testimonials.tsx +158 -0
- package/dist/kits/blocks/components/sections/TrustBadges.tsx +162 -0
- package/dist/kits/blocks/components/theme-provider.tsx +34 -0
- package/dist/kits/blocks/components/ui/alert-dialog.tsx +134 -0
- package/dist/kits/blocks/components/ui/brand-node.tsx +121 -0
- package/dist/kits/blocks/components/ui/button.tsx +122 -0
- package/dist/kits/blocks/components/ui/button_bck.tsx +93 -0
- package/dist/kits/blocks/components/ui/card.tsx +95 -0
- package/dist/kits/blocks/components/ui/checkbox.tsx +30 -0
- package/dist/kits/blocks/components/ui/cta-button.tsx +125 -0
- package/dist/kits/blocks/components/ui/dropdown-menu.tsx +201 -0
- package/dist/kits/blocks/components/ui/feature-card.tsx +91 -0
- package/dist/kits/blocks/components/ui/input.tsx +27 -0
- package/dist/kits/blocks/components/ui/label.tsx +29 -0
- package/dist/kits/blocks/components/ui/pricing-card.tsx +120 -0
- package/dist/kits/blocks/components/ui/select.tsx +25 -0
- package/dist/kits/blocks/components/ui/skeleton.tsx +13 -0
- package/dist/kits/blocks/components/ui/switch.tsx +78 -0
- package/dist/kits/blocks/components/ui/table.tsx +98 -0
- package/dist/kits/blocks/components/ui/testimonial-card.tsx +108 -0
- package/dist/kits/blocks/components/ui/textarea.tsx +26 -0
- package/dist/kits/blocks/components/ui/theme-selector.tsx +247 -0
- package/dist/kits/blocks/components/ui/theme-toggle.tsx +74 -0
- package/dist/kits/blocks/components/ui/toaster.tsx +7 -0
- package/dist/kits/blocks/lib/themes.ts +399 -0
- package/dist/kits/blocks/lib/themes_old.ts +37 -0
- package/dist/kits/blocks/lib/utils.ts +9 -0
- package/dist/kits/blocks/next.config.ts +11 -0
- package/dist/kits/blocks/notes/THEME_GUIDE.md +29 -0
- package/dist/kits/blocks/notes/THEMING_CONVERSION_SUMMARY.md +14 -0
- package/dist/kits/blocks/package-deps.json +22 -0
- package/dist/kits/blocks/public/placeholders/gallery/hero-pexels-broken-9945014.avif +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626431.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626432.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626434.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/gallery/pexels-googledeepmind-25626436.jpg +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_1.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_2.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_3.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/feature_4.png +0 -0
- package/dist/kits/blocks/public/placeholders/product_launch/hero.png +0 -0
- package/dist/kits/blocks/public/placeholders/saas_dashboard/analytics.png +0 -0
- package/dist/kits/blocks/public/placeholders/saas_dashboard/chat.png +0 -0
- package/dist/kits/blocks/public/placeholders/saas_dashboard/projectBoard.png +0 -0
- package/dist/kits/data/.gitkeep +0 -0
- package/dist/kits/data/README.md +104 -0
- package/dist/kits/data/app/(protected)/admin/posts/page.tsx +5 -0
- package/dist/kits/data/app/(protected)/admin/users/page.tsx +5 -0
- package/dist/kits/data/app/api/posts/[id]/route.ts +83 -0
- package/dist/kits/data/app/api/posts/route.ts +138 -0
- package/dist/kits/data/app/api/seed-demo/route.ts +45 -0
- package/dist/kits/data/app/api/users/[id]/route.ts +127 -0
- package/dist/kits/data/app/api/users/check-email/route.ts +18 -0
- package/dist/kits/data/app/api/users/check-unique/route.ts +27 -0
- package/dist/kits/data/app/api/users/route.ts +79 -0
- package/dist/kits/data/app/examples/demo/README.md +4 -0
- package/dist/kits/data/app/examples/demo/create-post-form.tsx +106 -0
- package/dist/kits/data/app/examples/demo/page.tsx +118 -0
- package/dist/kits/data/app/examples/demo/seed-demo-button.tsx +37 -0
- package/dist/kits/data/components/admin/posts-manager.tsx +719 -0
- package/dist/kits/data/components/admin/users-manager.tsx +432 -0
- package/dist/kits/data/lib/prisma.ts +15 -0
- package/dist/kits/data/lib/server/result.ts +90 -0
- package/dist/kits/data/package-deps.json +11 -0
- package/dist/kits/data/scripts/seed-demo.mjs +41 -0
- package/dist/kits/forms/.gitkeep +0 -0
- package/dist/kits/forms/README.md +49 -0
- package/dist/kits/forms/app/.gitkeep +0 -0
- package/dist/kits/forms/app/api/wizard/route.ts +71 -0
- package/dist/kits/forms/app/examples/forms/basic/page.tsx +124 -0
- package/dist/kits/forms/app/examples/forms/server-action/form-client.tsx +28 -0
- package/dist/kits/forms/app/examples/forms/server-action/page.tsx +71 -0
- package/dist/kits/forms/app/examples/forms/wizard/page.tsx +15 -0
- package/dist/kits/forms/app/examples/forms/wizard/wizard-client.tsx +2 -0
- package/dist/kits/forms/components/.gitkeep +0 -0
- package/dist/kits/forms/components/examples/wizard-client.tsx +231 -0
- package/dist/kits/forms/components/hooks/useCheckUnique.ts +79 -0
- package/dist/kits/forms/components/ui/button.tsx +122 -0
- package/dist/kits/forms/components/ui/checkbox.tsx +30 -0
- package/dist/kits/forms/components/ui/form/context.ts +33 -0
- package/dist/kits/forms/components/ui/form/form-control.tsx +28 -0
- package/dist/kits/forms/components/ui/form/form-description.tsx +22 -0
- package/dist/kits/forms/components/ui/form/form-field.tsx +36 -0
- package/dist/kits/forms/components/ui/form/form-item.tsx +21 -0
- package/dist/kits/forms/components/ui/form/form-label.tsx +24 -0
- package/dist/kits/forms/components/ui/form/form-message.tsx +29 -0
- package/dist/kits/forms/components/ui/form/form.tsx +26 -0
- package/dist/kits/forms/components/ui/input.tsx +27 -0
- package/dist/kits/forms/components/ui/label.tsx +29 -0
- package/dist/kits/forms/components/ui/select.tsx +25 -0
- package/dist/kits/forms/components/ui/switch.tsx +78 -0
- package/dist/kits/forms/components/ui/textarea.tsx +26 -0
- package/dist/kits/forms/lib/.gitkeep +0 -0
- package/dist/kits/forms/lib/forms/map-errors.ts +29 -0
- package/dist/kits/forms/lib/prisma.ts +16 -0
- package/dist/kits/forms/lib/utils.ts +9 -0
- package/dist/kits/forms/lib/validation/forms.ts +88 -0
- package/dist/kits/forms/lib/validation/wizard.ts +32 -0
- package/dist/kits/forms/package-deps.json +17 -0
- package/dist/utils/file-operations.d.ts +18 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +327 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/installation-tracker.d.ts +26 -0
- package/dist/utils/installation-tracker.d.ts.map +1 -0
- package/dist/utils/installation-tracker.js +98 -0
- package/dist/utils/installation-tracker.js.map +1 -0
- package/package.json +51 -21
- package/index.js +0 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Team as SharedTeam } from "@/components/sections/Team";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Product Launch preset for Team wired to the upgraded shared Team component
|
|
7
|
+
*/
|
|
8
|
+
export function Team() {
|
|
9
|
+
const teamMembers = [
|
|
10
|
+
{
|
|
11
|
+
name: "Dr. Sarah Chen",
|
|
12
|
+
role: "Chief AI Officer",
|
|
13
|
+
bio: "Leading AI researcher with 15+ years in machine learning and neural networks. PhD from MIT.",
|
|
14
|
+
avatar: "👩🔬",
|
|
15
|
+
socialLinks: [
|
|
16
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
17
|
+
{ platform: "Twitter", url: "#", icon: "🐦" },
|
|
18
|
+
{ platform: "GitHub", url: "#", icon: "💻" },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "Marcus Rodriguez",
|
|
23
|
+
role: "Head of AI Engineering",
|
|
24
|
+
bio: "Full-stack AI engineer specializing in scalable ML systems and cloud infrastructure.",
|
|
25
|
+
avatar: "👨💻",
|
|
26
|
+
socialLinks: [
|
|
27
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
28
|
+
{ platform: "GitHub", url: "#", icon: "💻" },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: "Dr. Emily Watson",
|
|
33
|
+
role: "AI Research Director",
|
|
34
|
+
bio: "Expert in natural language processing and computer vision with 12+ years of research experience.",
|
|
35
|
+
avatar: "👩🎓",
|
|
36
|
+
socialLinks: [
|
|
37
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
38
|
+
{ platform: "Twitter", url: "#", icon: "🐦" },
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "Alex Kim",
|
|
43
|
+
role: "AI Product Manager",
|
|
44
|
+
bio: "Strategic leader focused on bringing AI solutions to market with deep understanding of business needs.",
|
|
45
|
+
avatar: "👨💼",
|
|
46
|
+
socialLinks: [
|
|
47
|
+
{ platform: "LinkedIn", url: "#", icon: "💼" },
|
|
48
|
+
{ platform: "Twitter", url: "#", icon: "🐦" },
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<SharedTeam
|
|
55
|
+
teamHeadingText="Meet the AI Experts"
|
|
56
|
+
teamSubheadingText="Our world-class team of AI researchers, engineers, and strategists working to revolutionize your business with cutting-edge artificial intelligence."
|
|
57
|
+
teamMembers={teamMembers}
|
|
58
|
+
section={{
|
|
59
|
+
className: "py-20 md:py-24 lg:py-28 bg-gray-50 dark:bg-gray-900",
|
|
60
|
+
}}
|
|
61
|
+
container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-12" }}
|
|
62
|
+
header={{ className: "space-y-16 items-center" }}
|
|
63
|
+
heading={{
|
|
64
|
+
className:
|
|
65
|
+
"text-3xl md:text-4xl lg:text-5xl font-bold text-gray-800 dark:text-white text-center font-outfit",
|
|
66
|
+
}}
|
|
67
|
+
subheading={{
|
|
68
|
+
className:
|
|
69
|
+
"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",
|
|
70
|
+
}}
|
|
71
|
+
grid={{
|
|
72
|
+
className:
|
|
73
|
+
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8 md:gap-10 w-full",
|
|
74
|
+
}}
|
|
75
|
+
card={{
|
|
76
|
+
className:
|
|
77
|
+
"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",
|
|
78
|
+
}}
|
|
79
|
+
cardContent={{ className: "flex flex-col items-center space-y-6" }}
|
|
80
|
+
avatar={{
|
|
81
|
+
className:
|
|
82
|
+
"text-5xl md:text-6xl mb-3 group-hover:scale-110 transition-transform duration-300",
|
|
83
|
+
}}
|
|
84
|
+
name={{
|
|
85
|
+
className:
|
|
86
|
+
"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",
|
|
87
|
+
}}
|
|
88
|
+
role={{
|
|
89
|
+
className:
|
|
90
|
+
"text-base font-semibold text-purple-600 dark:text-purple-400 font-inter",
|
|
91
|
+
}}
|
|
92
|
+
bio={{
|
|
93
|
+
className:
|
|
94
|
+
"text-sm md:text-base text-gray-600 dark:text-gray-300 opacity-90 leading-relaxed font-inter",
|
|
95
|
+
}}
|
|
96
|
+
socialLinks={{ className: "flex gap-4 mt-4" }}
|
|
97
|
+
socialLink={{
|
|
98
|
+
className:
|
|
99
|
+
"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",
|
|
100
|
+
}}
|
|
101
|
+
ariaLabel="IntelliOpAI team section"
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { Testimonials as SharedTestimonials } from "@/components/sections/Testimonials";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Product Launch preset for Testimonials wired to the upgraded shared Testimonials component
|
|
7
|
+
*/
|
|
8
|
+
export function Testimonials() {
|
|
9
|
+
const testimonials = [
|
|
10
|
+
{
|
|
11
|
+
testimonialText:
|
|
12
|
+
"IntelliOpAI has completely transformed our workflow. The AI-powered automation saves us 40+ hours per week, and the accuracy is incredible.",
|
|
13
|
+
testimonialAuthor: " - Sarah Johnson, CEO at TechCorp",
|
|
14
|
+
testimonialAuthorInitials: "SJ",
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
testimonialText:
|
|
18
|
+
"The machine learning capabilities are outstanding. We've seen a 300% increase in productivity since implementing their AI solutions.",
|
|
19
|
+
testimonialAuthor: " - Michael Chen, CTO at InnovateLab",
|
|
20
|
+
testimonialAuthorInitials: "MC",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
testimonialText:
|
|
24
|
+
"Game-changing technology! The AI insights have helped us make better decisions and scale our business faster than ever before.",
|
|
25
|
+
testimonialAuthor: " - Emily Rodriguez, VP Operations at GrowthCo",
|
|
26
|
+
testimonialAuthorInitials: "ER",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
testimonialText:
|
|
30
|
+
"The implementation was seamless and the results exceeded our expectations. Our team loves working with the AI-powered tools.",
|
|
31
|
+
testimonialAuthor: " - David Kim, Head of Engineering at StartupXYZ",
|
|
32
|
+
testimonialAuthorInitials: "DK",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
testimonialText:
|
|
36
|
+
"IntelliOpAI's natural language processing capabilities have revolutionized how we handle customer support. Response times improved by 80%.",
|
|
37
|
+
testimonialAuthor:
|
|
38
|
+
" - Lisa Wang, Customer Success Director at ServicePro",
|
|
39
|
+
testimonialAuthorInitials: "LW",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
testimonialText:
|
|
43
|
+
"The predictive analytics features are phenomenal. We can now forecast trends and make data-driven decisions with confidence.",
|
|
44
|
+
testimonialAuthor:
|
|
45
|
+
" - James Thompson, Data Science Lead at AnalyticsPlus",
|
|
46
|
+
testimonialAuthorInitials: "JT",
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<SharedTestimonials
|
|
52
|
+
id="testimonials"
|
|
53
|
+
testimonials={testimonials}
|
|
54
|
+
testimonialSectionHeader="What Our AI Customers Say"
|
|
55
|
+
section={{
|
|
56
|
+
className: "py-20 md:py-24 lg:py-28 bg-gray-50 dark:bg-gray-900",
|
|
57
|
+
}}
|
|
58
|
+
container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-12" }}
|
|
59
|
+
header={{ className: "text-center mb-16" }}
|
|
60
|
+
heading={{
|
|
61
|
+
className:
|
|
62
|
+
"text-3xl md:text-4xl lg:text-5xl font-bold text-gray-800 dark:text-white text-center font-outfit",
|
|
63
|
+
}}
|
|
64
|
+
grid={{
|
|
65
|
+
className:
|
|
66
|
+
"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8 md:gap-10",
|
|
67
|
+
}}
|
|
68
|
+
card={{
|
|
69
|
+
className:
|
|
70
|
+
"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",
|
|
71
|
+
}}
|
|
72
|
+
content={{ className: "flex flex-col space-y-6" }}
|
|
73
|
+
text={{
|
|
74
|
+
className:
|
|
75
|
+
"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",
|
|
76
|
+
}}
|
|
77
|
+
author={{
|
|
78
|
+
className:
|
|
79
|
+
"text-gray-600 dark:text-gray-400 text-sm md:text-base font-medium font-inter",
|
|
80
|
+
}}
|
|
81
|
+
avatar={{
|
|
82
|
+
className:
|
|
83
|
+
"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",
|
|
84
|
+
}}
|
|
85
|
+
avatarText={{ className: "text-white font-bold" }}
|
|
86
|
+
ariaLabel="Customer testimonials for IntelliOpAI"
|
|
87
|
+
/>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { TrustBadges as SharedTrustBadges } from "@/components/sections/TrustBadges";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Product Launch preset for TrustBadges wired to the upgraded shared TrustBadges component
|
|
7
|
+
*/
|
|
8
|
+
export function TrustBadges() {
|
|
9
|
+
const badges = [
|
|
10
|
+
{
|
|
11
|
+
badgeText: "50,000+ AI Models",
|
|
12
|
+
badgeDescription: "Powered by",
|
|
13
|
+
badgeIcon: "🤖",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
badgeText: "99.9% Accuracy",
|
|
17
|
+
badgeDescription: "AI Performance",
|
|
18
|
+
badgeIcon: "🎯",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
badgeText: "SOC 2 Type II",
|
|
22
|
+
badgeDescription: "Enterprise Security",
|
|
23
|
+
badgeIcon: "🔒",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
badgeText: "24/7 Support",
|
|
27
|
+
badgeDescription: "Always Available",
|
|
28
|
+
badgeIcon: "⚡",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
badgeText: "Fortune 500",
|
|
32
|
+
badgeDescription: "Trusted by",
|
|
33
|
+
badgeIcon: "🏆",
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<SharedTrustBadges
|
|
39
|
+
id="trust-badges"
|
|
40
|
+
badges={badges}
|
|
41
|
+
trustBadgesSectionHeader="Trusted by Industry Leaders"
|
|
42
|
+
section={{
|
|
43
|
+
className:
|
|
44
|
+
"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",
|
|
45
|
+
}}
|
|
46
|
+
container={{ className: "max-w-7xl mx-auto px-6 md:px-8 lg:px-12" }}
|
|
47
|
+
header={{ className: "text-center mb-12" }}
|
|
48
|
+
heading={{
|
|
49
|
+
className:
|
|
50
|
+
"text-xl md:text-2xl lg:text-3xl font-bold text-gray-800 dark:text-white font-outfit",
|
|
51
|
+
}}
|
|
52
|
+
badgesContainer={{
|
|
53
|
+
className:
|
|
54
|
+
"flex flex-col sm:flex-row justify-center items-center gap-8 md:gap-12 lg:gap-16 flex-wrap",
|
|
55
|
+
}}
|
|
56
|
+
badge={{
|
|
57
|
+
className: "flex flex-col items-center text-center min-w-[180px] group",
|
|
58
|
+
}}
|
|
59
|
+
badgeContent={{ className: "flex flex-col items-center space-y-3" }}
|
|
60
|
+
icon={{
|
|
61
|
+
className:
|
|
62
|
+
"text-3xl md:text-4xl mb-3 group-hover:scale-105 transition-transform duration-500 ease-out",
|
|
63
|
+
}}
|
|
64
|
+
description={{
|
|
65
|
+
className:
|
|
66
|
+
"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",
|
|
67
|
+
}}
|
|
68
|
+
text={{
|
|
69
|
+
className:
|
|
70
|
+
"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",
|
|
71
|
+
}}
|
|
72
|
+
layout="horizontal"
|
|
73
|
+
ariaLabel="Trust badges for IntelliOpAI"
|
|
74
|
+
/>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Navbar } from "./components/Navbar";
|
|
2
|
+
import { CTA } from "./components/CTA";
|
|
3
|
+
import { Hero } from "./components/Hero";
|
|
4
|
+
import { About } from "./components/About";
|
|
5
|
+
import { Pricing } from "./components/Pricing";
|
|
6
|
+
import { ProcessTimeline } from "./components/ProcessTimeline";
|
|
7
|
+
import { FAQ } from "./components/FAQ";
|
|
8
|
+
import { Contact } from "./components/Contact";
|
|
9
|
+
import { Footer } from "./components/Footer";
|
|
10
|
+
import { Testimonials } from "./components/Testimonials";
|
|
11
|
+
import { TrustBadges } from "./components/TrustBadges";
|
|
12
|
+
import { Features } from "./components/Features";
|
|
13
|
+
|
|
14
|
+
import { PresetThemeVars } from "./PresetThemeVars";
|
|
15
|
+
|
|
16
|
+
export default function ProductLaunchPage() {
|
|
17
|
+
return (
|
|
18
|
+
// <PresetThemeVars>
|
|
19
|
+
<>
|
|
20
|
+
<Navbar />
|
|
21
|
+
<section id="home">
|
|
22
|
+
<Hero />
|
|
23
|
+
</section>
|
|
24
|
+
<TrustBadges />
|
|
25
|
+
<About />
|
|
26
|
+
<section id="features">
|
|
27
|
+
<Features />
|
|
28
|
+
<ProcessTimeline />
|
|
29
|
+
</section>
|
|
30
|
+
<Testimonials />
|
|
31
|
+
<CTA />
|
|
32
|
+
<section id="pricing">
|
|
33
|
+
<Pricing />
|
|
34
|
+
</section>
|
|
35
|
+
<section id="faq">
|
|
36
|
+
<FAQ />
|
|
37
|
+
</section>
|
|
38
|
+
<section id="contact">
|
|
39
|
+
<Contact />
|
|
40
|
+
</section>
|
|
41
|
+
<Footer />
|
|
42
|
+
</>
|
|
43
|
+
// </PresetThemeVars>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { cn } from "@/lib/utils";
|
|
3
|
+
|
|
4
|
+
type Props = React.PropsWithChildren<{ className?: string }>;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* SaaSDashboard template theme variables wrapper.
|
|
8
|
+
* Sky/blue leaning palette; adjust values to your preset branding.
|
|
9
|
+
*/
|
|
10
|
+
export function PresetThemeVars({ className, children }: Props) {
|
|
11
|
+
return (
|
|
12
|
+
<div
|
|
13
|
+
className={cn(
|
|
14
|
+
// Shared button ring
|
|
15
|
+
"[--btn-ring:theme(colors.sky.500)] dark:[--btn-ring:theme(colors.sky.400)]",
|
|
16
|
+
|
|
17
|
+
// Inputs
|
|
18
|
+
"[--input-bg:theme(colors.white)] dark:[--input-bg:theme(colors.gray.900)]",
|
|
19
|
+
"[--input-fg:theme(colors.gray.900)] dark:[--input-fg:theme(colors.gray.100)]",
|
|
20
|
+
"[--input-placeholder:theme(colors.gray.400)] dark:[--input-placeholder:theme(colors.gray.500)]",
|
|
21
|
+
"[--input-border:theme(colors.sky.200)] dark:[--input-border:theme(colors.sky.700)]",
|
|
22
|
+
"[--input-focus-ring:theme(colors.sky.500)] dark:[--input-focus-ring:theme(colors.sky.400)]",
|
|
23
|
+
"[--input-ring-offset:theme(colors.white)] dark:[--input-ring-offset:theme(colors.gray.900)]",
|
|
24
|
+
|
|
25
|
+
// Cards
|
|
26
|
+
"[--card-bg:theme(colors.white)] dark:[--card-bg:theme(colors.gray.900)]",
|
|
27
|
+
"[--card-fg:theme(colors.gray.900)] dark:[--card-fg:theme(colors.gray.100)]",
|
|
28
|
+
"[--card-title-fg:theme(colors.gray.900)] dark:[--card-title-fg:theme(colors.gray.100)]",
|
|
29
|
+
"[--card-muted-fg:theme(colors.gray.500)] dark:[--card-muted-fg:theme(colors.gray.400)]",
|
|
30
|
+
"[--card-border:theme(colors.gray.200)] dark:[--card-border:theme(colors.gray.800)]",
|
|
31
|
+
"[--card-shadow:0_6px_20px_rgba(0,0,0,0.06)]",
|
|
32
|
+
|
|
33
|
+
// Badges/Chips
|
|
34
|
+
"[--badge-bg:theme(colors.sky.50)] dark:[--badge-bg:theme(colors.sky.950)]",
|
|
35
|
+
"[--badge-fg:theme(colors.sky.700)] dark:[--badge-fg:theme(colors.sky.300)]",
|
|
36
|
+
"[--badge-border:theme(colors.sky.200)] dark:[--badge-border:theme(colors.sky.800)]",
|
|
37
|
+
"[--badge-active-bg:theme(colors.sky.600)] dark:[--badge-active-bg:theme(colors.sky.500)]",
|
|
38
|
+
"[--badge-active-fg:theme(colors.white)] dark:[--badge-active-fg:theme(colors.white)]",
|
|
39
|
+
"[--badge-active-border:theme(colors.sky.700)] dark:[--badge-active-border:theme(colors.sky.400)]",
|
|
40
|
+
|
|
41
|
+
// Headings/Subheadings
|
|
42
|
+
"[--heading-fg:theme(colors.gray.900)] dark:[--heading-fg:theme(colors.gray.100)]",
|
|
43
|
+
"[--subheading-fg:theme(colors.gray.600)] dark:[--subheading-fg:theme(colors.gray.300)]",
|
|
44
|
+
"[--description-fg:theme(colors.gray.700)] dark:[--description-fg:theme(colors.gray.200)]",
|
|
45
|
+
|
|
46
|
+
// Hero background (optional)
|
|
47
|
+
"[--hero-bg:theme(colors.white)] dark:[--hero-bg:theme(colors.slate.950)]",
|
|
48
|
+
|
|
49
|
+
// Footer
|
|
50
|
+
"[--footer-bg:transparent] dark:[--footer-bg:transparent]",
|
|
51
|
+
"[--footer-fg:theme(colors.gray.800)] dark:[--footer-fg:theme(colors.gray.100)]",
|
|
52
|
+
"[--footer-heading-fg:theme(colors.gray.900)] dark:[--footer-heading-fg:theme(colors.gray.100)]",
|
|
53
|
+
"[--footer-link-fg:theme(colors.gray.700)] dark:[--footer-link-fg:theme(colors.gray.300)]",
|
|
54
|
+
"[--footer-link-hover-fg:theme(colors.sky.700)] dark:[--footer-link-hover-fg:theme(colors.sky.400)]",
|
|
55
|
+
"[--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)]",
|
|
56
|
+
"[--footer-muted-fg:theme(colors.gray.500)] dark:[--footer-muted-fg:theme(colors.gray.400)]",
|
|
57
|
+
"[--footer-border:theme(colors.gray.200)] dark:[--footer-border:theme(colors.gray.800)]",
|
|
58
|
+
|
|
59
|
+
// Table (optional)
|
|
60
|
+
"[--table-fg:inherit]",
|
|
61
|
+
"[--table-muted-fg:theme(colors.gray.500)] dark:[--table-muted-fg:theme(colors.gray.400)]",
|
|
62
|
+
"[--table-head-fg:theme(colors.gray.700)] dark:[--table-head-fg:theme(colors.gray.300)]",
|
|
63
|
+
"[--table-border:theme(colors.gray.200)] dark:[--table-border:theme(colors.gray.800)]",
|
|
64
|
+
"[--table-row-hover-bg:theme(colors.gray.50)] dark:[--table-row-hover-bg:theme(colors.gray.900)]",
|
|
65
|
+
|
|
66
|
+
// FAQ specific (optional overrides; fall back to --btn-* and --card-*)
|
|
67
|
+
"[--faq-btn-bg:var(--btn-bg)] dark:[--faq-btn-bg:var(--btn-bg)]",
|
|
68
|
+
"[--faq-btn-fg:var(--btn-fg)] dark:[--faq-btn-fg:var(--btn-fg)]",
|
|
69
|
+
"[--faq-btn-hover-bg:var(--btn-hover-bg)] dark:[--faq-btn-hover-bg:var(--btn-hover-bg)]",
|
|
70
|
+
"[--faq-btn-hover-fg:var(--btn-hover-fg)] dark:[--faq-btn-hover-fg:var(--btn-hover-fg)]",
|
|
71
|
+
"[--faq-answer-bg:var(--card-bg)] dark:[--faq-answer-bg:var(--card-bg)]",
|
|
72
|
+
"[--faq-answer-fg:var(--card-fg)] dark:[--faq-answer-fg:var(--card-fg)]",
|
|
73
|
+
|
|
74
|
+
className,
|
|
75
|
+
)}
|
|
76
|
+
>
|
|
77
|
+
{children}
|
|
78
|
+
</div>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# SaaSDashboard Template Theming
|
|
2
|
+
|
|
3
|
+
This template is preset-first. It’s wrapped with `PresetThemeVars` to apply a sky/blue palette across shared components. Use local overrides sparingly (e.g., a CTA hover state unique to a section).
|
|
4
|
+
|
|
5
|
+
## Where it’s wired
|
|
6
|
+
|
|
7
|
+
- Wrapper: `components/templates/saasdashboard/PresetThemeVars.tsx`
|
|
8
|
+
- Page: `app/templates/saasdashboard/page.tsx`
|
|
9
|
+
|
|
10
|
+
## Core variables
|
|
11
|
+
|
|
12
|
+
- Buttons: `--btn-bg`, `--btn-fg`, `--btn-hover-bg`, `--btn-hover-fg`, `--btn-border`, `--btn-ring`
|
|
13
|
+
- Inputs/Textareas: `--input-bg`, `--input-fg`, `--input-placeholder`, `--input-border`, `--input-focus-ring`, `--input-ring-offset`
|
|
14
|
+
- Cards: `--card-bg`, `--card-fg`, `--card-title-fg`, `--card-muted-fg`, `--card-border`, `--card-shadow`
|
|
15
|
+
- Badges/Chips: `--badge-bg`, `--badge-fg`, `--badge-border`, active: `--badge-active-*`
|
|
16
|
+
- Headings: `--heading-fg`, `--subheading-fg`, `--description-fg`
|
|
17
|
+
- Footer: `--footer-bg`, `--footer-fg`, `--footer-heading-fg`, `--footer-link-fg`, `--footer-link-hover-fg`, `--footer-link-hover-bg`, `--footer-muted-fg`, `--footer-border`
|
|
18
|
+
- Table: `--table-fg`, `--table-muted-fg`, `--table-head-fg`, `--table-border`, `--table-row-hover-bg`
|
|
19
|
+
|
|
20
|
+
## Per-section overrides
|
|
21
|
+
|
|
22
|
+
This template should be styled primarily by PresetThemeVars. When a section needs to deviate, set overrides locally and keep them minimal.
|
|
23
|
+
|
|
24
|
+
Example to emphasize button rings inside Pricing only:
|
|
25
|
+
|
|
26
|
+
```tsx
|
|
27
|
+
<section className="[--btn-ring:theme(colors.sky.600)]">
|
|
28
|
+
<Pricing />
|
|
29
|
+
</section>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Outline buttons
|
|
33
|
+
|
|
34
|
+
For outline variants: set `--btn-bg:transparent` and keep a border width class.
|
|
35
|
+
|
|
36
|
+
## Should preset components be refactored?
|
|
37
|
+
|
|
38
|
+
Not required. Over time, simplify presets by removing redundant color classes in favor of the variables. Structure/motion classes should remain.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
import {
|
|
5
|
+
Contact as SharedContact,
|
|
6
|
+
ContactField,
|
|
7
|
+
} from "@/components/sections/Contact";
|
|
8
|
+
|
|
9
|
+
const saasContactFormData: ContactField[] = [
|
|
10
|
+
{
|
|
11
|
+
id: "name",
|
|
12
|
+
label: "Full Name",
|
|
13
|
+
placeholder: "Jane Doe",
|
|
14
|
+
required: true,
|
|
15
|
+
type: "text",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: "email",
|
|
19
|
+
label: "Work Email",
|
|
20
|
+
placeholder: "jane@company.com",
|
|
21
|
+
required: true,
|
|
22
|
+
type: "email",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: "company",
|
|
26
|
+
label: "Company",
|
|
27
|
+
placeholder: "Acme Inc.",
|
|
28
|
+
required: false,
|
|
29
|
+
type: "text",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "teamSize",
|
|
33
|
+
label: "Team Size",
|
|
34
|
+
placeholder: "e.g. 10–50",
|
|
35
|
+
required: false,
|
|
36
|
+
type: "text",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "useCase",
|
|
40
|
+
label: "Primary Use Case",
|
|
41
|
+
placeholder: "e.g. Product analytics, Ops dashboards",
|
|
42
|
+
required: false,
|
|
43
|
+
type: "text",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: "message",
|
|
47
|
+
label: "What would you like to see in the demo?",
|
|
48
|
+
placeholder: "Share goals, data sources, timeline…",
|
|
49
|
+
required: true,
|
|
50
|
+
type: "textarea",
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
export function Contact() {
|
|
55
|
+
const handleFormSubmit = (e: React.FormEvent<HTMLFormElement>) => {
|
|
56
|
+
e.preventDefault();
|
|
57
|
+
const data = Object.fromEntries(new FormData(e.currentTarget).entries());
|
|
58
|
+
console.log("Contact form submitted:", data);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<div className="relative">
|
|
63
|
+
{/* Gradient mesh overlay */}
|
|
64
|
+
<div
|
|
65
|
+
aria-hidden
|
|
66
|
+
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"
|
|
67
|
+
/>
|
|
68
|
+
{/* Fine noise/dots texture */}
|
|
69
|
+
<div
|
|
70
|
+
aria-hidden
|
|
71
|
+
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]"
|
|
72
|
+
/>
|
|
73
|
+
|
|
74
|
+
<SharedContact
|
|
75
|
+
id="contact"
|
|
76
|
+
ariaLabel="SaaS dashboard contact section"
|
|
77
|
+
fields={saasContactFormData}
|
|
78
|
+
contactHeaderText="Ready to See DashFlow in Action?"
|
|
79
|
+
contactSubHeaderText="Tell us a bit about your team and we'll reach out with a tailored demo."
|
|
80
|
+
// Root and section
|
|
81
|
+
className="w-full"
|
|
82
|
+
section={{
|
|
83
|
+
className:
|
|
84
|
+
"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",
|
|
85
|
+
}}
|
|
86
|
+
container={{ className: "mx-auto max-w-4xl" }}
|
|
87
|
+
// Header slots
|
|
88
|
+
headerWrapper={{ className: "mb-10 text-center" }}
|
|
89
|
+
headerText={{
|
|
90
|
+
className: "text-3xl font-bold font-inter text-white",
|
|
91
|
+
}}
|
|
92
|
+
subheaderText={{
|
|
93
|
+
className:
|
|
94
|
+
"mt-3 text-base text-white/90 max-w-2xl mx-auto font-inter",
|
|
95
|
+
}}
|
|
96
|
+
// Form container
|
|
97
|
+
form={{
|
|
98
|
+
className:
|
|
99
|
+
"bg-card p-8 rounded-xl shadow-xl border border-border bg-[var(--card-bg)] text-[var(--card-fg)] border-[var(--card-border)]",
|
|
100
|
+
}}
|
|
101
|
+
// Fields and inputs
|
|
102
|
+
fieldsWrapper={{ className: "space-y-4" }}
|
|
103
|
+
field={{ className: "space-y-2" }}
|
|
104
|
+
label={{
|
|
105
|
+
className:
|
|
106
|
+
"text-card-foreground text-sm font-medium font-poppins block",
|
|
107
|
+
}}
|
|
108
|
+
input={{
|
|
109
|
+
className:
|
|
110
|
+
"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)]",
|
|
111
|
+
}}
|
|
112
|
+
textarea={{
|
|
113
|
+
className:
|
|
114
|
+
"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)]",
|
|
115
|
+
}}
|
|
116
|
+
// Submit button (wrapper/style/text split)
|
|
117
|
+
submitButtonWrapper={{ className: "pt-2" }}
|
|
118
|
+
submitButtonStyle={{
|
|
119
|
+
variant: "default",
|
|
120
|
+
size: "lg",
|
|
121
|
+
className:
|
|
122
|
+
"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",
|
|
123
|
+
}}
|
|
124
|
+
submitButtonText="Send Request"
|
|
125
|
+
onSubmit={handleFormSubmit}
|
|
126
|
+
/>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// "use client";
|
|
132
|
+
|
|
133
|
+
// import { Contact as SharedContact } from "@/components/sections/Contact";
|
|
134
|
+
|
|
135
|
+
// export function Contact() {
|
|
136
|
+
// return (
|
|
137
|
+
// <div className="relative">
|
|
138
|
+
// {/* Gradient mesh overlay */}
|
|
139
|
+
// <div
|
|
140
|
+
// aria-hidden
|
|
141
|
+
// 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"
|
|
142
|
+
// />
|
|
143
|
+
// {/* Fine noise/dots texture */}
|
|
144
|
+
// <div
|
|
145
|
+
// aria-hidden
|
|
146
|
+
// 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]"
|
|
147
|
+
// />
|
|
148
|
+
// <SharedContact
|
|
149
|
+
// contactHeaderText="Ready to See DashFlow in Action?"
|
|
150
|
+
// contactSubHeaderText="Tell us a bit about your team and we'll reach out with a tailored demo."
|
|
151
|
+
// section={{
|
|
152
|
+
// className:
|
|
153
|
+
// "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",
|
|
154
|
+
// }}
|
|
155
|
+
// header={{
|
|
156
|
+
// className:
|
|
157
|
+
// "text-3xl font-bold font-inter text-white text-center mb-4",
|
|
158
|
+
// }}
|
|
159
|
+
// subheader={{
|
|
160
|
+
// className:
|
|
161
|
+
// "text-base text-white/90 text-center mb-10 max-w-2xl mx-auto font-inter",
|
|
162
|
+
// }}
|
|
163
|
+
// form={{
|
|
164
|
+
// className: "bg-white dark:bg-gray-800 p-8 rounded-xl shadow-xl",
|
|
165
|
+
// }}
|
|
166
|
+
// submitButton={{
|
|
167
|
+
// text: "Send Request",
|
|
168
|
+
// variant: "default",
|
|
169
|
+
// size: "lg",
|
|
170
|
+
// className:
|
|
171
|
+
// "w-full bg-blue-600 hover:bg-blue-700 text-white font-semibold font-inter shadow-lg hover:shadow-xl transition-all duration-200 hover:-translate-y-0.5",
|
|
172
|
+
// }}
|
|
173
|
+
// />
|
|
174
|
+
// </div>
|
|
175
|
+
// );
|
|
176
|
+
// }
|