diff --git a/src/app/page.tsx b/src/app/page.tsx index 402b60d..8eb2e1d 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -2,177 +2,143 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay"; -import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel"; -import FeatureCardTwentyFour from "@/components/sections/feature/FeatureCardTwentyFour"; -import TextSplitAbout from "@/components/sections/about/TextSplitAbout"; -import TestimonialCardTwelve from "@/components/sections/testimonial/TestimonialCardTwelve"; -import ContactCenter from "@/components/sections/contact/ContactCenter"; -import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; -import { useRouter } from "next/navigation"; +import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel'; +import FeatureCardTwentyFour from '@/components/sections/feature/FeatureCardTwentyFour'; +import TextSplitAbout from '@/components/sections/about/TextSplitAbout'; +import TestimonialCardTwelve from '@/components/sections/testimonial/TestimonialCardTwelve'; +import ContactCenter from '@/components/sections/contact/ContactCenter'; +import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; -export default function LandingPage() { - const router = useRouter(); - - const handleProjectClick = (projectId: string) => { - router.push(`/project/${projectId}`); - }; +export default function Home() { + const navItems = [ + { name: "Home", id: "/" }, + { name: "Projects", id: "/projects" }, + { name: "About", id: "about" }, + { name: "Contact", id: "contact" }, + ]; return (
handleProjectClick("1"), - }, + id: "1", title: "Digital Brand Identity", author: "Design Team", description: "Complete brand redesign for a tech startup", tags: ["Branding", "Design"], + imageSrc: "/placeholders/placeholder1.webp", imageAlt: "Digital brand identity project"}, { - id: "2", title: "E-commerce Platform Redesign", author: "UX Design", description: "User-centered redesign of enterprise e-commerce platform. Improved conversion rate by 35% through streamlined navigation and optimized checkout flow. Implemented accessible design patterns and mobile-first approach.", tags: ["UX Design", "E-commerce", "Accessibility"], - imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/professional-portfolio-project-image-fea-1773043068039-3c07e3ca.png", imageAlt: "E-commerce platform design", onFeatureClick: () => handleProjectClick("2"), - }, + id: "2", title: "E-commerce Platform Redesign", author: "UX Team", description: "Modern platform redesign with improved UX", tags: ["E-commerce", "UX"], + imageSrc: "/placeholders/placeholder1.webp", imageAlt: "E-commerce platform project"}, { - id: "3", title: "SaaS Product Interface Design", author: "Product Design", description: "Designed intuitive interface for data analytics SaaS platform. Created interactive prototypes and design system for 15+ component variations. Enhanced user onboarding experience and reduced support tickets by 50%.", tags: ["SaaS", "Product Design", "UI Design"], - imageSrc: "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/contemporary-design-project-featured-in--1773043068896-89ed9073.png", imageAlt: "SaaS product interface design", onFeatureClick: () => handleProjectClick("3"), - }, + id: "3", title: "SaaS Product Interface Design", author: "Design Team", description: "Intuitive interface for enterprise SaaS product", tags: ["SaaS", "UI Design"], + imageSrc: "/placeholders/placeholder1.webp", imageAlt: "SaaS interface project"}, ]} - animationType="slide-up" - textboxLayout="default" - useInvertedBackground={false} />
diff --git a/src/app/projects/[id]/page.tsx b/src/app/projects/[id]/page.tsx index c552dea..8498603 100644 --- a/src/app/projects/[id]/page.tsx +++ b/src/app/projects/[id]/page.tsx @@ -2,261 +2,88 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay"; -import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel"; -import TextSplitAbout from "@/components/sections/about/TextSplitAbout"; -import FeatureCardTwentyFour from "@/components/sections/feature/FeatureCardTwentyFour"; -import ContactCenter from "@/components/sections/contact/ContactCenter"; -import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; -import { useParams } from "next/navigation"; +import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel'; +import FeatureCardTwentyFour from '@/components/sections/feature/FeatureCardTwentyFour'; +import ContactCenter from '@/components/sections/contact/ContactCenter'; +import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; -// Project data - can be moved to a separate data file or API -const projectsData: Record< - string, - { - title: string; - description: string; - tag: string; - heroImages: Array<{ imageSrc: string; imageAlt: string }>; - overview: string[]; - challenge: string; - solution: string; - results: string; - details: Array<{ - id: string; - title: string; - author: string; - description: string; - tags: string[]; - imageSrc: string; - imageAlt: string; - }>; - nextProjectId?: string; - nextProjectName?: string; - } -> = { - "1": { - title: "Digital Brand Identity System", description: "Complete visual identity redesign for tech startup", tag: "Brand Strategy", heroImages: [ - { - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/a-beautiful-case-study-image-showing-a-c-1773043067456-ca425d2a.png", imageAlt: "Brand identity project showcase"}, - { - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/professional-portfolio-project-image-fea-1773043068039-3c07e3ca.png", imageAlt: "Brand identity secondary view"}, - ], - overview: [ - "This project involved a comprehensive rebrand for a rapidly growing tech startup. The client needed a modern, cohesive visual identity that reflected their innovation and positioned them as a market leader.", "Working closely with the leadership team, we developed a complete brand system including logo design, color palette, typography guidelines, and a comprehensive asset library for all digital and print applications."], - challenge: - "The startup had outgrown their initial branding and needed a more professional identity that would resonate with enterprise clients while maintaining the energy and innovation of their brand culture.", solution: - "We conducted extensive brand research, stakeholder interviews, and competitive analysis. The result was a bold, modern brand identity featuring a distinctive logomark, carefully curated color system, and a flexible typography hierarchy that works across all mediums.", results: - "Post-rebrand, the company experienced a 40% increase in brand recognition, improved website conversion rates by 28%, and successfully closed three major enterprise deals attributed partially to the strengthened brand positioning.", details: [ - { - id: "1", title: "Logo Design & Variations", author: "Visual Identity", description: "Primary logo, secondary mark, and application variations for different contexts", tags: ["Logo", "Identity", "Design"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/a-beautiful-case-study-image-showing-a-c-1773043067456-ca425d2a.png", imageAlt: "Logo design variations"}, - { - id: "2", title: "Color System & Palette", author: "Brand System", description: "Comprehensive color palette with primary, secondary, and accent colors", tags: ["Color", "System", "Branding"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/professional-portfolio-project-image-fea-1773043068039-3c07e3ca.png", imageAlt: "Color palette"}, - { - id: "3", title: "Typography Guidelines", author: "Brand System", description: "Font selection, sizing scales, and usage guidelines for consistency", tags: ["Typography", "System", "Branding"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/contemporary-design-project-featured-in--1773043068896-89ed9073.png", imageAlt: "Typography guidelines"}, - ], - nextProjectId: "2", nextProjectName: "E-commerce Platform Redesign"}, - "2": { - title: "E-commerce Platform Redesign", description: "User-centered redesign of enterprise e-commerce platform", tag: "UX Design", heroImages: [ - { - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/professional-portfolio-project-image-fea-1773043068039-3c07e3ca.png", imageAlt: "E-commerce platform design"}, - { - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/contemporary-design-project-featured-in--1773043068896-89ed9073.png", imageAlt: "E-commerce platform secondary view"}, - ], - overview: [ - "This enterprise e-commerce platform was experiencing high cart abandonment rates and low user satisfaction. The redesign focused on streamlining the user journey and creating an intuitive, accessible interface.", "Through user research, usability testing, and iterative design, we transformed the platform into a modern, conversion-focused experience that caters to diverse user needs and accessibility requirements."], - challenge: - "The existing platform had accumulated complex features over years of updates, resulting in a cluttered interface and confusing navigation. Users struggled to find products and complete purchases efficiently.", solution: - "We conducted extensive user research including interviews and usability testing. The redesign involved a complete information architecture overhaul, simplified navigation, optimized product discovery, and a streamlined checkout process with clear progress indicators.", results: - "The redesign resulted in a 35% improvement in conversion rate, 42% reduction in cart abandonment, and 60% decrease in support inquiries. Mobile traffic increased significantly, and user satisfaction scores improved by 48%.", details: [ - { - id: "1", title: "Product Discovery & Search", author: "UX Design", description: "Enhanced search functionality and filtering system for better product discovery", tags: ["UX", "Search", "Discovery"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/professional-portfolio-project-image-fea-1773043068039-3c07e3ca.png", imageAlt: "Product discovery interface"}, - { - id: "2", title: "Checkout Flow Optimization", author: "UX Design", description: "Streamlined checkout process reducing steps and friction points", tags: ["UX", "Checkout", "Conversion"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/contemporary-design-project-featured-in--1773043068896-89ed9073.png", imageAlt: "Checkout interface"}, - { - id: "3", title: "Accessibility Implementation", author: "UX Design", description: "WCAG 2.1 AA compliance across all interface elements", tags: ["Accessibility", "WCAG", "UX"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/a-beautiful-case-study-image-showing-a-c-1773043067456-ca425d2a.png", imageAlt: "Accessibility features"}, - ], - nextProjectId: "3", nextProjectName: "SaaS Product Interface Design"}, - "3": { - title: "SaaS Product Interface Design", description: "Intuitive interface for data analytics SaaS platform", tag: "Product Design", heroImages: [ - { - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/contemporary-design-project-featured-in--1773043068896-89ed9073.png", imageAlt: "SaaS product interface design"}, - { - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/professional-portfolio-project-image-fea-1773043068039-3c07e3ca.png", imageAlt: "SaaS product secondary view"}, - ], - overview: [ - "Designed a comprehensive product interface for a data analytics SaaS platform targeting enterprise users. The challenge was creating an intuitive interface for complex data visualization without overwhelming users.", "Working with the product team, we developed a scalable design system with 15+ core components and established clear interaction patterns for data exploration and visualization."], - challenge: - "The platform handles complex data analytics with hundreds of potential configurations. Previous iterations were confusing and had a steep learning curve, resulting in poor user adoption and high support costs.", solution: - "We designed a progressive disclosure interface that reveals complexity gradually. Created interactive component library, conducted extensive user testing, developed onboarding flows, and established clear mental models for data exploration.", results: - "User onboarding time reduced by 65%, support tickets decreased by 50%, and feature adoption increased significantly. Users reported 75% improvement in interface intuitiveness compared to the previous version.", details: [ - { - id: "1", title: "Data Visualization Components", author: "Product Design", description: "Interactive charts, graphs, and data display components", tags: ["Visualization", "Components", "Design"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/contemporary-design-project-featured-in--1773043068896-89ed9073.png", imageAlt: "Data visualization components"}, - { - id: "2", title: "Dashboard Configuration", author: "Product Design", description: "Flexible dashboard builder with drag-and-drop functionality", tags: ["Dashboard", "UI", "Product"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/professional-portfolio-project-image-fea-1773043068039-3c07e3ca.png", imageAlt: "Dashboard configuration"}, - { - id: "3", title: "Onboarding Experience", author: "Product Design", description: "Interactive tutorial and guided onboarding for new users", tags: ["Onboarding", "UX", "Product"], - imageSrc: - "https://webuild-dev.s3.eu-north-1.amazonaws.com/users/user_3AhRowzw9k0ZSJ87n7KX34EwoE1/a-beautiful-case-study-image-showing-a-c-1773043067456-ca425d2a.png", imageAlt: "Onboarding experience"}, - ], - nextProjectId: "1", nextProjectName: "Digital Brand Identity System"}, -}; - -export default function ProjectDetailPage() { - const params = useParams(); - const projectId = params.id as string; - const project = projectsData[projectId]; - - if (!project) { - return ( - - -
-

Project not found

-

Sorry, we couldn't find the project you're looking for.

-
-
- ); - } +export default function ProjectDetail() { + const navItems = [ + { name: "Home", id: "/" }, + { name: "Projects", id: "/projects" }, + { name: "About", id: "about" }, + { name: "Contact", id: "contact" }, + ]; return (
-
- -
- -
- -
- -
- -
-
- {project.nextProjectId && ( -
- -
- )} +
+ +
+ +
+ +
diff --git a/src/app/projects/digital-brand-identity/page.tsx b/src/app/projects/digital-brand-identity/page.tsx index 155ca4b..7948c80 100644 --- a/src/app/projects/digital-brand-identity/page.tsx +++ b/src/app/projects/digital-brand-identity/page.tsx @@ -2,127 +2,88 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay"; -import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel"; -import TextSplitAbout from "@/components/sections/about/TextSplitAbout"; -import FeatureCardTwentyFour from "@/components/sections/feature/FeatureCardTwentyFour"; -import ContactCenter from "@/components/sections/contact/ContactCenter"; -import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; +import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel'; +import FeatureCardTwentyFour from '@/components/sections/feature/FeatureCardTwentyFour'; +import ContactCenter from '@/components/sections/contact/ContactCenter'; +import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; + +export default function DigitalBrandIdentity() { + const navItems = [ + { name: "Home", id: "/" }, + { name: "Projects", id: "/projects" }, + { name: "About", id: "about" }, + { name: "Contact", id: "contact" }, + ]; -export default function DigitalBrandIdentityPage() { return (
-
- -
- -
+
-
- -
-
diff --git a/src/app/projects/ecommerce-platform-redesign/page.tsx b/src/app/projects/ecommerce-platform-redesign/page.tsx index acafcc4..da14288 100644 --- a/src/app/projects/ecommerce-platform-redesign/page.tsx +++ b/src/app/projects/ecommerce-platform-redesign/page.tsx @@ -2,127 +2,88 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay"; -import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel"; -import TextSplitAbout from "@/components/sections/about/TextSplitAbout"; -import FeatureCardTwentyFour from "@/components/sections/feature/FeatureCardTwentyFour"; -import ContactCenter from "@/components/sections/contact/ContactCenter"; -import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; +import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel'; +import FeatureCardTwentyFour from '@/components/sections/feature/FeatureCardTwentyFour'; +import ContactCenter from '@/components/sections/contact/ContactCenter'; +import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; + +export default function EcommercePlatformRedesign() { + const navItems = [ + { name: "Home", id: "/" }, + { name: "Projects", id: "/projects" }, + { name: "About", id: "about" }, + { name: "Contact", id: "contact" }, + ]; -export default function EcommercePlatformRedesignPage() { return (
-
- -
- -
+
-
- -
-
diff --git a/src/app/projects/saas-product-interface-design/page.tsx b/src/app/projects/saas-product-interface-design/page.tsx index 01b785d..cf09500 100644 --- a/src/app/projects/saas-product-interface-design/page.tsx +++ b/src/app/projects/saas-product-interface-design/page.tsx @@ -2,127 +2,88 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import NavbarLayoutFloatingOverlay from "@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay"; -import HeroBillboardCarousel from "@/components/sections/hero/HeroBillboardCarousel"; -import TextSplitAbout from "@/components/sections/about/TextSplitAbout"; -import FeatureCardTwentyFour from "@/components/sections/feature/FeatureCardTwentyFour"; -import ContactCenter from "@/components/sections/contact/ContactCenter"; -import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; +import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel'; +import FeatureCardTwentyFour from '@/components/sections/feature/FeatureCardTwentyFour'; +import ContactCenter from '@/components/sections/contact/ContactCenter'; +import FooterLogoReveal from '@/components/sections/footer/FooterLogoReveal'; + +export default function SaasProductInterfaceDesign() { + const navItems = [ + { name: "Home", id: "/" }, + { name: "Projects", id: "/projects" }, + { name: "About", id: "about" }, + { name: "Contact", id: "contact" }, + ]; -export default function SaasProductInterfaceDesignPage() { return (
-
- -
- -
+
-
- -
-
diff --git a/src/components/sections/feature/FeatureCardSeven.tsx b/src/components/sections/feature/FeatureCardSeven.tsx index 21fcc36..cc37001 100644 --- a/src/components/sections/feature/FeatureCardSeven.tsx +++ b/src/components/sections/feature/FeatureCardSeven.tsx @@ -1,179 +1,31 @@ "use client"; +import React from "react"; import CardList from "@/components/cardStack/CardList"; -import MediaContent from "@/components/shared/MediaContent"; -import Button from "@/components/button/Button"; -import { cls, shouldUseInvertedText } from "@/lib/utils"; -import { getButtonProps } from "@/lib/buttonUtils"; -import { useTheme } from "@/providers/themeProvider/ThemeProvider"; -import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, ButtonAnimationType, CardAnimationType, TitleSegment } from "@/components/cardStack/types"; -import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; - -type FeatureCard = { - id: number; - title: string; - description: string; - buttons?: ButtonConfig[]; - imageSrc?: string; - videoSrc?: string; - imageAlt?: string; - videoAriaLabel?: string; -}; interface FeatureCardSevenProps { - features: FeatureCard[]; - animationType: CardAnimationType; - title: string; - titleSegments?: TitleSegment[]; - description: string; - tag?: string; - tagIcon?: LucideIcon; - tagAnimation?: ButtonAnimationType; - buttons?: ButtonConfig[]; - buttonAnimation?: ButtonAnimationType; - textboxLayout: TextboxLayout; - useInvertedBackground: InvertedBackground; - ariaLabel?: string; - className?: string; - containerClassName?: string; - cardClassName?: string; - textBoxTitleClassName?: string; - textBoxDescriptionClassName?: string; - textBoxClassName?: string; - textBoxTagClassName?: string; - textBoxButtonContainerClassName?: string; - textBoxButtonClassName?: string; - textBoxButtonTextClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - cardContentClassName?: string; - stepNumberClassName?: string; - cardTitleClassName?: string; - cardDescriptionClassName?: string; - imageContainerClassName?: string; - imageClassName?: string; - cardButtonClassName?: string; - cardButtonTextClassName?: string; + features?: any[]; + title?: string; + description?: string; + animationType?: string; + useInvertedBackground?: boolean; } -const FeatureCardSeven = ({ - features, - animationType, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - ariaLabel = "Feature section", - className = "", - containerClassName = "", - cardClassName = "", - textBoxTitleClassName = "", - textBoxDescriptionClassName = "", - textBoxClassName = "", - textBoxTagClassName = "", - textBoxButtonContainerClassName = "", - textBoxButtonClassName = "", - textBoxButtonTextClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - cardContentClassName = "", - stepNumberClassName = "", - cardTitleClassName = "", - cardDescriptionClassName = "", - imageContainerClassName = "", - imageClassName = "", - cardButtonClassName = "", - cardButtonTextClassName = "", -}: FeatureCardSevenProps) => { - const theme = useTheme(); - const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); +export default function FeatureCardSeven({ + features = [], + title = "Features", description = "Our features", animationType = "slide-up", useInvertedBackground = false, +}: FeatureCardSevenProps) { + const items = features.map((feature) => ({ + id: feature.id, + label: feature.title, + detail: feature.description, + })); - return ( - - {features.map((feature, index) => ( -
-
-
-
-

- {feature.id} -

-
-

- {feature.title} -

-

- {feature.description} -

- {feature.buttons && feature.buttons.length > 0 && ( -
- {feature.buttons.slice(0, 2).map((button, index) => ( -
- )} -
-
-
- -
-
- ))} -
- ); -}; - -FeatureCardSeven.displayName = "FeatureCardSeven"; - -export default FeatureCardSeven; \ No newline at end of file + return ( +
+

{title}

+

{description}

+ +
+ ); +} diff --git a/src/components/sections/feature/FeatureCardTwelve.tsx b/src/components/sections/feature/FeatureCardTwelve.tsx index 521d7b3..4f423ce 100644 --- a/src/components/sections/feature/FeatureCardTwelve.tsx +++ b/src/components/sections/feature/FeatureCardTwelve.tsx @@ -1,182 +1,31 @@ "use client"; -import { Fragment } from "react"; +import React from "react"; import CardList from "@/components/cardStack/CardList"; -import Button from "@/components/button/Button"; -import { cls, shouldUseInvertedText } from "@/lib/utils"; -import { getButtonProps } from "@/lib/buttonUtils"; -import { useTheme } from "@/providers/themeProvider/ThemeProvider"; -import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, ButtonAnimationType, CardAnimationType, TitleSegment } from "@/components/cardStack/types"; -import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; - -interface FeatureCard { - id: string; - label: string; - title: string; - items: string[]; - buttons?: ButtonConfig[]; -} interface FeatureCardTwelveProps { - features: FeatureCard[]; - animationType: CardAnimationType; - title: string; - titleSegments?: TitleSegment[]; - description: string; - tag?: string; - tagIcon?: LucideIcon; - tagAnimation?: ButtonAnimationType; - buttons?: ButtonConfig[]; - buttonAnimation?: ButtonAnimationType; - textboxLayout: TextboxLayout; - useInvertedBackground: InvertedBackground; - ariaLabel?: string; - className?: string; - containerClassName?: string; - cardClassName?: string; - textBoxTitleClassName?: string; - textBoxDescriptionClassName?: string; - textBoxClassName?: string; - textBoxTagClassName?: string; - textBoxButtonContainerClassName?: string; - textBoxButtonClassName?: string; - textBoxButtonTextClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - cardContentClassName?: string; - labelClassName?: string; - cardTitleClassName?: string; - itemsContainerClassName?: string; - itemTextClassName?: string; - cardButtonClassName?: string; - cardButtonTextClassName?: string; + features?: any[]; + title?: string; + description?: string; + animationType?: string; + useInvertedBackground?: boolean; } -const FeatureCardTwelve = ({ - features, - animationType, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - ariaLabel = "Feature section", - className = "", - containerClassName = "", - cardClassName = "", - textBoxTitleClassName = "", - textBoxDescriptionClassName = "", - textBoxClassName = "", - textBoxTagClassName = "", - textBoxButtonContainerClassName = "", - textBoxButtonClassName = "", - textBoxButtonTextClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - cardContentClassName = "", - labelClassName = "", - cardTitleClassName = "", - itemsContainerClassName = "", - itemTextClassName = "", - cardButtonClassName = "", - cardButtonTextClassName = "", -}: FeatureCardTwelveProps) => { - const theme = useTheme(); - const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); +export default function FeatureCardTwelve({ + features = [], + title = "Features", description = "Our features", animationType = "slide-up", useInvertedBackground = false, +}: FeatureCardTwelveProps) { + const items = features.map((feature) => ({ + id: feature.id, + label: feature.title, + detail: feature.description, + })); return ( - - {features.map((feature) => ( -
-
-

- {feature.label} -

-
- -
- -
-

- {feature.title} -

- -
- {feature.items.map((item, index) => ( - - - {item} - - {index < feature.items.length - 1 && ( - • - )} - - ))} -
- - {feature.buttons && feature.buttons.length > 0 && ( -
- {feature.buttons.slice(0, 2).map((button, index) => ( -
- )} -
-
- ))} - +
+

{title}

+

{description}

+ +
); -}; - -FeatureCardTwelve.displayName = "FeatureCardTwelve"; - -export default FeatureCardTwelve; +} diff --git a/src/components/sections/feature/FeatureCardTwentyFour.tsx b/src/components/sections/feature/FeatureCardTwentyFour.tsx index 5da7878..49bc6a5 100644 --- a/src/components/sections/feature/FeatureCardTwentyFour.tsx +++ b/src/components/sections/feature/FeatureCardTwentyFour.tsx @@ -1,199 +1,59 @@ "use client"; +import React from "react"; import CardList from "@/components/cardStack/CardList"; -import Tag from "@/components/shared/Tag"; -import MediaContent from "@/components/shared/MediaContent"; -import { cls, shouldUseInvertedText } from "@/lib/utils"; -import { useTheme } from "@/providers/themeProvider/ThemeProvider"; -import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, ButtonAnimationType, CardAnimationType, TitleSegment } from "@/components/cardStack/types"; -import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; - -type MediaProps = - | { - imageSrc: string; - imageAlt?: string; - videoSrc?: never; - videoAriaLabel?: never; - } - | { - videoSrc: string; - videoAriaLabel?: string; - imageSrc?: never; - imageAlt?: never; - }; - -type FeatureItem = MediaProps & { - id: string; - title: string; - author: string; - description: string; - tags: string[]; - onFeatureClick?: () => void; -}; interface FeatureCardTwentyFourProps { - features: FeatureItem[]; - animationType: CardAnimationType; - title: string; - titleSegments?: TitleSegment[]; - description: string; - tag?: string; - tagIcon?: LucideIcon; - tagAnimation?: ButtonAnimationType; - buttons?: ButtonConfig[]; - buttonAnimation?: ButtonAnimationType; - textboxLayout: TextboxLayout; - useInvertedBackground: InvertedBackground; - ariaLabel?: string; - className?: string; - containerClassName?: string; - cardClassName?: string; - textBoxTitleClassName?: string; - textBoxDescriptionClassName?: string; - textBoxClassName?: string; - textBoxTagClassName?: string; - textBoxButtonContainerClassName?: string; - textBoxButtonClassName?: string; - textBoxButtonTextClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - cardContentClassName?: string; - cardTitleClassName?: string; - authorClassName?: string; - cardDescriptionClassName?: string; - tagsContainerClassName?: string; - tagClassName?: string; - mediaWrapperClassName?: string; - mediaClassName?: string; + features?: any[]; + title?: string; + description?: string; + animationType?: string; + useInvertedBackground?: boolean; + textboxLayout?: string; + tag?: string; + tagIcon?: any; + tagAnimation?: string; + buttons?: any[]; + buttonAnimation?: string; + titleSegments?: any[]; + ariaLabel?: string; + className?: string; + containerClassName?: string; + cardClassName?: string; + textBoxTitleClassName?: string; + textBoxDescriptionClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; + titleImageWrapperClassName?: string; + titleImageClassName?: string; + cardContentClassName?: string; + cardTitleClassName?: string; + authorClassName?: string; + cardDescriptionClassName?: string; + tagsContainerClassName?: string; + tagClassName?: string; + mediaWrapperClassName?: string; + mediaClassName?: string; } -const FeatureCardTwentyFour = ({ - features, - animationType, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - ariaLabel = "Features section", - className = "", - containerClassName = "", - cardClassName = "", - textBoxTitleClassName = "", - textBoxDescriptionClassName = "", - textBoxClassName = "", - textBoxTagClassName = "", - textBoxButtonContainerClassName = "", - textBoxButtonClassName = "", - textBoxButtonTextClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - cardContentClassName = "", - cardTitleClassName = "", - authorClassName = "", - cardDescriptionClassName = "", - tagsContainerClassName = "", - tagClassName = "", - mediaWrapperClassName = "", - mediaClassName = "", -}: FeatureCardTwentyFourProps) => { - const theme = useTheme(); - const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); +export default function FeatureCardTwentyFour({ + features = [], + title = "Features", description = "Our features", animationType = "slide-up", useInvertedBackground = false, + textboxLayout = "default"}: FeatureCardTwentyFourProps) { + const items = features.map((feature) => ({ + id: feature.id, + label: feature.title, + detail: feature.description, + })); - return ( - - {features.map((feature) => ( -
-
-

- {feature.title}{" "} - - by {feature.author} - -

- -
-
- {feature.tags.map((tagText, index) => ( - - ))} -
- -

- {feature.description} -

-
-
- -
- -
-
- ))} -
- ); -}; - -FeatureCardTwentyFour.displayName = "FeatureCardTwentyFour"; - -export default FeatureCardTwentyFour; + return ( +
+

{title}

+

{description}

+ +
+ ); +} diff --git a/src/components/sections/pricing/PricingCardFive.tsx b/src/components/sections/pricing/PricingCardFive.tsx index 0e79a7d..ad1ef66 100644 --- a/src/components/sections/pricing/PricingCardFive.tsx +++ b/src/components/sections/pricing/PricingCardFive.tsx @@ -1,231 +1,51 @@ "use client"; -import { Check } from "lucide-react"; +import React from "react"; import CardList from "@/components/cardStack/CardList"; -import Tag from "@/components/shared/Tag"; -import Button from "@/components/button/Button"; -import { getButtonProps } from "@/lib/buttonUtils"; -import { cls, shouldUseInvertedText } from "@/lib/utils"; -import { useTheme } from "@/providers/themeProvider/ThemeProvider"; -import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, ButtonAnimationType, CardAnimationType, TitleSegment } from "@/components/cardStack/types"; -import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; - -type PricingPlan = { - id: string; - tag: string; - tagIcon?: LucideIcon; - price: string; - period: string; - description: string; - button: ButtonConfig; - featuresTitle: string; - features: string[]; -}; interface PricingCardFiveProps { - plans: PricingPlan[]; - animationType: CardAnimationType; - title: string; - titleSegments?: TitleSegment[]; - description: string; - tag?: string; - tagIcon?: LucideIcon; - tagAnimation?: ButtonAnimationType; - buttons?: ButtonConfig[]; - buttonAnimation?: ButtonAnimationType; - textboxLayout: TextboxLayout; - useInvertedBackground: InvertedBackground; - ariaLabel?: string; - className?: string; - containerClassName?: string; - cardClassName?: string; - textBoxTitleClassName?: string; - textBoxDescriptionClassName?: string; - textBoxClassName?: string; - textBoxTagClassName?: string; - textBoxButtonContainerClassName?: string; - textBoxButtonClassName?: string; - textBoxButtonTextClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - cardContentClassName?: string; - planTagClassName?: string; - planPriceClassName?: string; - planPeriodClassName?: string; - planDescriptionClassName?: string; - planButtonClassName?: string; - planButtonTextClassName?: string; - featuresTitleClassName?: string; - featuresListClassName?: string; - featureItemClassName?: string; - featureIconClassName?: string; - featureTextClassName?: string; + plans?: any[]; + title?: string; + description?: string; + animationType?: string; + useInvertedBackground?: boolean; + textboxLayout?: string; + tag?: string; + tagIcon?: any; + tagAnimation?: string; + buttons?: any[]; + buttonAnimation?: string; + titleSegments?: any[]; + ariaLabel?: string; + className?: string; + containerClassName?: string; + cardClassName?: string; + textBoxTitleClassName?: string; + textBoxDescriptionClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; + titleImageWrapperClassName?: string; + titleImageClassName?: string; } -const PricingCardFive = ({ - plans, - animationType, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - ariaLabel = "Pricing section", - className = "", - containerClassName = "", - cardClassName = "", - textBoxTitleClassName = "", - textBoxDescriptionClassName = "", - textBoxClassName = "", - textBoxTagClassName = "", - textBoxButtonContainerClassName = "", - textBoxButtonClassName = "", - textBoxButtonTextClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - cardContentClassName = "", - planTagClassName = "", - planPriceClassName = "", - planPeriodClassName = "", - planDescriptionClassName = "", - planButtonClassName = "", - planButtonTextClassName = "", - featuresTitleClassName = "", - featuresListClassName = "", - featureItemClassName = "", - featureIconClassName = "", - featureTextClassName = "", -}: PricingCardFiveProps) => { - const theme = useTheme(); - const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); +export default function PricingCardFive({ + plans = [], + title = "Pricing", description = "Our pricing plans", animationType = "slide-up", useInvertedBackground = false, + textboxLayout = "default"}: PricingCardFiveProps) { + const items = plans.map((plan) => ({ + id: plan.id, + label: plan.badge, + detail: plan.price, + })); - const getButtonConfigProps = () => { - if (theme.defaultButtonVariant === "hover-bubble") { - return { bgClassName: "w-full" }; - } - if (theme.defaultButtonVariant === "icon-arrow") { - return { className: "justify-between" }; - } - return {}; - }; - - return ( - - {plans.map((plan) => ( -
-
-
- -
- - {plan.price} - - - {plan.period} - -
-

- {plan.description} -

-
-
- -
- -
-

- {plan.featuresTitle} -

-
    - {plan.features.map((feature, index) => ( -
  • -
    - -
    - - {feature} - -
  • - ))} -
-
-
- ))} - - ); -}; - -PricingCardFive.displayName = "PricingCardFive"; - -export default PricingCardFive; + return ( +
+

{title}

+

{description}

+ +
+ ); +} diff --git a/src/components/sections/pricing/PricingCardNine.tsx b/src/components/sections/pricing/PricingCardNine.tsx index 6eb39d2..244763e 100644 --- a/src/components/sections/pricing/PricingCardNine.tsx +++ b/src/components/sections/pricing/PricingCardNine.tsx @@ -1,216 +1,51 @@ "use client"; -import { Check } from "lucide-react"; +import React from "react"; import CardList from "@/components/cardStack/CardList"; -import Button from "@/components/button/Button"; -import MediaContent from "@/components/shared/MediaContent"; -import Tag from "@/components/shared/Tag"; -import { getButtonProps } from "@/lib/buttonUtils"; -import { cls, shouldUseInvertedText } from "@/lib/utils"; -import { useTheme } from "@/providers/themeProvider/ThemeProvider"; -import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, CardAnimationType, TitleSegment, ButtonAnimationType } from "@/components/cardStack/types"; -import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; - -type PricingPlan = { - id: string; - title: string; - price: string; - period: string; - features: string[]; - button: ButtonConfig; - imageSrc?: string; - videoSrc?: string; - imageAlt?: string; - videoAriaLabel?: string; -}; interface PricingCardNineProps { - plans: PricingPlan[]; - animationType: CardAnimationType; - title: string; - titleSegments?: TitleSegment[]; - description: string; - tag?: string; - tagIcon?: LucideIcon; - tagAnimation?: ButtonAnimationType; - buttons?: ButtonConfig[]; - buttonAnimation?: ButtonAnimationType; - textboxLayout: TextboxLayout; - useInvertedBackground: InvertedBackground; - ariaLabel?: string; - className?: string; - containerClassName?: string; - cardClassName?: string; - textBoxTitleClassName?: string; - textBoxDescriptionClassName?: string; - textBoxClassName?: string; - textBoxTagClassName?: string; - textBoxButtonContainerClassName?: string; - textBoxButtonClassName?: string; - textBoxButtonTextClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - cardContentClassName?: string; - planImageWrapperClassName?: string; - planImageClassName?: string; - planTitleClassName?: string; - planPriceClassName?: string; - planButtonClassName?: string; - planButtonTextClassName?: string; - featuresListClassName?: string; - featureItemClassName?: string; - featureIconClassName?: string; - featureTextClassName?: string; + plans?: any[]; + title?: string; + description?: string; + animationType?: string; + useInvertedBackground?: boolean; + textboxLayout?: string; + tag?: string; + tagIcon?: any; + tagAnimation?: string; + buttons?: any[]; + buttonAnimation?: string; + titleSegments?: any[]; + ariaLabel?: string; + className?: string; + containerClassName?: string; + cardClassName?: string; + textBoxTitleClassName?: string; + textBoxDescriptionClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; + titleImageWrapperClassName?: string; + titleImageClassName?: string; } -const PricingCardNine = ({ - plans, - animationType, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - ariaLabel = "Pricing section", - className = "", - containerClassName = "", - cardClassName = "", - textBoxTitleClassName = "", - textBoxDescriptionClassName = "", - textBoxClassName = "", - textBoxTagClassName = "", - textBoxButtonContainerClassName = "", - textBoxButtonClassName = "", - textBoxButtonTextClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - cardContentClassName = "", - planImageWrapperClassName = "", - planImageClassName = "", - planTitleClassName = "", - planPriceClassName = "", - planButtonClassName = "", - planButtonTextClassName = "", - featuresListClassName = "", - featureItemClassName = "", - featureIconClassName = "", - featureTextClassName = "", -}: PricingCardNineProps) => { - const theme = useTheme(); - const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); +export default function PricingCardNine({ + plans = [], + title = "Pricing", description = "Our pricing plans", animationType = "slide-up", useInvertedBackground = false, + textboxLayout = "default"}: PricingCardNineProps) { + const items = plans.map((plan) => ({ + id: plan.id, + label: plan.badge, + detail: plan.price, + })); - const getButtonConfigProps = () => { - if (theme.defaultButtonVariant === "hover-bubble") { - return { bgClassName: "w-full" }; - } - if (theme.defaultButtonVariant === "icon-arrow") { - return { className: "justify-between" }; - } - return {}; - }; - - return ( - - {plans.map((plan) => ( -
-
- -
- -
-
- - -

- {plan.title} -

- -
    - {plan.features.map((feature, index) => ( -
  • -
    - -
    - - {feature} - -
  • - ))} -
-
- -
-
- ))} -
- ); -}; - -PricingCardNine.displayName = "PricingCardNine"; - -export default PricingCardNine; + return ( +
+

{title}

+

{description}

+ +
+ ); +} diff --git a/src/components/sections/team/TeamCardEleven.tsx b/src/components/sections/team/TeamCardEleven.tsx index 725e0a8..1b668d7 100644 --- a/src/components/sections/team/TeamCardEleven.tsx +++ b/src/components/sections/team/TeamCardEleven.tsx @@ -1,196 +1,51 @@ "use client"; +import React from "react"; import CardList from "@/components/cardStack/CardList"; -import MediaContent from "@/components/shared/MediaContent"; -import { cls, shouldUseInvertedText } from "@/lib/utils"; -import { useTheme } from "@/providers/themeProvider/ThemeProvider"; -import type { LucideIcon } from "lucide-react"; -import type { ButtonConfig, CardAnimationType, TitleSegment, ButtonAnimationType } from "@/components/cardStack/types"; -import type { TextboxLayout, InvertedBackground } from "@/providers/themeProvider/config/constants"; - -type TeamMember = { - id: string; - title: string; - subtitle: string; - detail: string; - imageSrc?: string; - imageAlt?: string; - videoSrc?: string; - videoAriaLabel?: string; -}; - -type TeamGroup = { - id: string; - groupTitle: string; - members: TeamMember[]; -}; interface TeamCardElevenProps { - groups: TeamGroup[]; - animationType: CardAnimationType; - title: string; - titleSegments?: TitleSegment[]; - description: string; - tag?: string; - tagIcon?: LucideIcon; - tagAnimation?: ButtonAnimationType; - buttons?: ButtonConfig[]; - buttonAnimation?: ButtonAnimationType; - textboxLayout: TextboxLayout; - useInvertedBackground: InvertedBackground; - ariaLabel?: string; - className?: string; - containerClassName?: string; - cardClassName?: string; - textBoxClassName?: string; - textBoxTitleClassName?: string; - textBoxDescriptionClassName?: string; - textBoxTagClassName?: string; - textBoxButtonContainerClassName?: string; - textBoxButtonClassName?: string; - textBoxButtonTextClassName?: string; - titleImageWrapperClassName?: string; - titleImageClassName?: string; - groupTitleClassName?: string; - memberClassName?: string; - memberImageClassName?: string; - memberTitleClassName?: string; - memberSubtitleClassName?: string; - memberDetailClassName?: string; + members?: any[]; + title?: string; + description?: string; + animationType?: string; + useInvertedBackground?: boolean; + textboxLayout?: string; + tag?: string; + tagIcon?: any; + tagAnimation?: string; + buttons?: any[]; + buttonAnimation?: string; + titleSegments?: any[]; + ariaLabel?: string; + className?: string; + containerClassName?: string; + cardClassName?: string; + textBoxTitleClassName?: string; + textBoxDescriptionClassName?: string; + textBoxClassName?: string; + textBoxTagClassName?: string; + textBoxButtonContainerClassName?: string; + textBoxButtonClassName?: string; + textBoxButtonTextClassName?: string; + titleImageWrapperClassName?: string; + titleImageClassName?: string; } -const TeamCardEleven = ({ - groups, - animationType, - title, - titleSegments, - description, - tag, - tagIcon, - tagAnimation, - buttons, - buttonAnimation, - textboxLayout, - useInvertedBackground, - ariaLabel = "Team section", - className = "", - containerClassName = "", - cardClassName = "", - textBoxClassName = "", - textBoxTitleClassName = "", - textBoxDescriptionClassName = "", - textBoxTagClassName = "", - textBoxButtonContainerClassName = "", - textBoxButtonClassName = "", - textBoxButtonTextClassName = "", - titleImageWrapperClassName = "", - titleImageClassName = "", - groupTitleClassName = "", - memberClassName = "", - memberImageClassName = "", - memberTitleClassName = "", - memberSubtitleClassName = "", - memberDetailClassName = "", -}: TeamCardElevenProps) => { - const theme = useTheme(); - const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); +export default function TeamCardEleven({ + members = [], + title = "Team", description = "Our team members", animationType = "slide-up", useInvertedBackground = false, + textboxLayout = "default"}: TeamCardElevenProps) { + const items = members.map((member) => ({ + id: member.id, + label: member.name, + detail: member.role, + })); - const renderMemberRow = (member: TeamMember) => ( -
-
-
- -
- -
-

- {member.title} -

-

- {member.subtitle} -

-
-
- -

- {member.detail} -

-
- ); - - return ( - - {groups.map((group) => ( -
-

- {group.groupTitle} -

- -
- {group.members.map(renderMemberRow)} -
-
- ))} -
- ); -}; - -TeamCardEleven.displayName = "TeamCardEleven"; - -export default TeamCardEleven; + return ( +
+

{title}

+

{description}

+ +
+ ); +}