diff --git a/src/components/sections/faq/FaqSimple.tsx b/src/components/sections/faq/FaqSimple.tsx index fe60127..e69de29 100644 --- a/src/components/sections/faq/FaqSimple.tsx +++ b/src/components/sections/faq/FaqSimple.tsx @@ -1,107 +0,0 @@ -import { useState } from "react"; -import { motion, AnimatePresence } from "motion/react"; -import { Plus } from "lucide-react"; -import ScrollReveal from "@/components/ui/ScrollReveal"; -import Button from "@/components/ui/Button"; -import TextAnimation from "@/components/ui/TextAnimation"; -import { cls } from "@/lib/utils"; - -type FaqItem = { - question: string; - answer: string; -}; - -const FaqSimple = ({ - tag, - title, - description, - primaryButton, - secondaryButton, - items, -}: { - tag: string; - title: string; - description: string; - primaryButton?: { text: string; href: string }; - secondaryButton?: { text: string; href: string }; - items: FaqItem[]; -}) => { - const [activeIndex, setActiveIndex] = useState(null); - - const handleToggle = (index: number) => { - setActiveIndex(activeIndex === index ? null : index); - }; - - return ( -
-
-
-
-

{tag}

-
- - - - - - {(primaryButton || secondaryButton) && ( -
- {primaryButton &&
- )} -
- - - {items.map((item, index) => ( -
handleToggle(index)} - className="p-3 xl:p-3.5 2xl:p-4 rounded card cursor-pointer select-none" - > -
-

{item.question}

-
- -
-
- - {activeIndex === index && ( - -

{item.answer}

-
- )} -
-
- ))} -
-
-
- ); -}; - -export default FaqSimple; diff --git a/src/components/sections/faq/FaqSplitMedia.tsx b/src/components/sections/faq/FaqSplitMedia.tsx index 1232aeb..e69de29 100644 --- a/src/components/sections/faq/FaqSplitMedia.tsx +++ b/src/components/sections/faq/FaqSplitMedia.tsx @@ -1,122 +0,0 @@ -import { useState } from "react"; -import { motion, AnimatePresence } from "motion/react"; -import { Plus } from "lucide-react"; -import ScrollReveal from "@/components/ui/ScrollReveal"; -import Button from "@/components/ui/Button"; -import TextAnimation from "@/components/ui/TextAnimation"; -import ImageOrVideo from "@/components/ui/ImageOrVideo"; -import { cls } from "@/lib/utils"; - -type FaqItem = { - question: string; - answer: string; -}; - -type FaqSplitMediaProps = { - tag: string; - title: string; - description: string; - primaryButton?: { text: string; href: string }; - secondaryButton?: { text: string; href: string }; - items: FaqItem[]; -} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); - -const FaqSplitMedia = ({ - tag, - title, - description, - primaryButton, - secondaryButton, - items, - imageSrc, - videoSrc, -}: FaqSplitMediaProps) => { - const [activeIndex, setActiveIndex] = useState(null); - - const handleToggle = (index: number) => { - setActiveIndex(activeIndex === index ? null : index); - }; - - return ( -
-
-
-
-

{tag}

-
- - - - - - {(primaryButton || secondaryButton) && ( -
- {primaryButton &&
- )} -
- -
- - - - - - {items.map((item, index) => ( -
handleToggle(index)} - className="p-3 xl:p-3.5 2xl:p-4 rounded card cursor-pointer select-none" - > -
-

{item.question}

-
- -
-
- - {activeIndex === index && ( - -

{item.answer}

-
- )} -
-
- ))} -
-
-
-
- ); -}; - -export default FaqSplitMedia; diff --git a/src/components/sections/faq/FaqTwoColumn.tsx b/src/components/sections/faq/FaqTwoColumn.tsx index 3574668..e69de29 100644 --- a/src/components/sections/faq/FaqTwoColumn.tsx +++ b/src/components/sections/faq/FaqTwoColumn.tsx @@ -1,122 +0,0 @@ -import { useState } from "react"; -import { motion, AnimatePresence } from "motion/react"; -import { Plus } from "lucide-react"; -import ScrollReveal from "@/components/ui/ScrollReveal"; -import Button from "@/components/ui/Button"; -import TextAnimation from "@/components/ui/TextAnimation"; -import { cls } from "@/lib/utils"; - -type FaqItem = { - question: string; - answer: string; -}; - -const FaqTwoColumn = ({ - tag, - title, - description, - primaryButton, - secondaryButton, - items, -}: { - tag: string; - title: string; - description: string; - primaryButton?: { text: string; href: string }; - secondaryButton?: { text: string; href: string }; - items: FaqItem[]; -}) => { - const [activeIndex, setActiveIndex] = useState(null); - - const handleToggle = (index: number) => { - setActiveIndex(activeIndex === index ? null : index); - }; - - const halfLength = Math.ceil(items.length / 2); - const firstColumn = items.slice(0, halfLength); - const secondColumn = items.slice(halfLength); - - const renderAccordionItem = (item: FaqItem, index: number) => ( -
handleToggle(index)} - className="p-3 xl:p-3.5 2xl:p-4 rounded card cursor-pointer select-none" - > -
-

{item.question}

-
- -
-
- - {activeIndex === index && ( - -

{item.answer}

-
- )} -
-
- ); - - return ( -
-
-
-
-

{tag}

-
- - - - - - {(primaryButton || secondaryButton) && ( -
- {primaryButton &&
- )} -
- - -
-
- {firstColumn.map((item, index) => renderAccordionItem(item, index))} -
- {secondColumn.length > 0 && ( -
- {secondColumn.map((item, index) => renderAccordionItem(item, index + halfLength))} -
- )} -
-
-
-
- ); -}; - -export default FaqTwoColumn; diff --git a/src/components/sections/features/FeaturesMarqueeCards.tsx b/src/components/sections/features/FeaturesMarqueeCards.tsx index d37a2f3..e69de29 100644 --- a/src/components/sections/features/FeaturesMarqueeCards.tsx +++ b/src/components/sections/features/FeaturesMarqueeCards.tsx @@ -1,82 +0,0 @@ -import Button from "@/components/ui/Button"; -import TextAnimation from "@/components/ui/TextAnimation"; -import ImageOrVideo from "@/components/ui/ImageOrVideo"; -import ScrollReveal from "@/components/ui/ScrollReveal"; - -type FeatureItem = { - title?: string; - description?: string; -} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); - -interface FeaturesMarqueeCardsProps { - tag: string; - title: string; - description: string; - primaryButton?: { text: string; href: string }; - secondaryButton?: { text: string; href: string }; - items: FeatureItem[]; -} - -const FeaturesMarqueeCards = ({ - tag, - title, - description, - primaryButton, - secondaryButton, - items, -}: FeaturesMarqueeCardsProps) => { - const duplicated = [...items, ...items, ...items, ...items]; - - return ( -
-
-
-
-

{tag}

-
- - - - - - {(primaryButton || secondaryButton) && ( -
- {primaryButton &&
- )} -
- - -
-
- {duplicated.map((item, i) => ( -
- -
- ))} -
-
-
-
-
- ); -}; - -export default FeaturesMarqueeCards; diff --git a/src/components/sections/features/FeaturesMediaGrid.tsx b/src/components/sections/features/FeaturesMediaGrid.tsx index 65c715c..e69de29 100644 --- a/src/components/sections/features/FeaturesMediaGrid.tsx +++ b/src/components/sections/features/FeaturesMediaGrid.tsx @@ -1,82 +0,0 @@ -import Button from "@/components/ui/Button"; -import TextAnimation from "@/components/ui/TextAnimation"; -import ImageOrVideo from "@/components/ui/ImageOrVideo"; -import GridOrCarousel from "@/components/ui/GridOrCarousel"; -import ScrollReveal from "@/components/ui/ScrollReveal"; - -type FeatureItem = { - title: string; - description: string; -} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); - -interface FeaturesMediaGridProps { - tag: string; - title: string; - description: string; - primaryButton?: { text: string; href: string }; - secondaryButton?: { text: string; href: string }; - items: FeatureItem[]; -} - -const FeaturesMediaGrid = ({ - tag, - title, - description, - primaryButton, - secondaryButton, - items, -}: FeaturesMediaGridProps) => { - - return ( -
-
-
-
-

{tag}

-
- - - - - - {(primaryButton || secondaryButton) && ( -
- {primaryButton &&
- )} -
- - - - {items.map((item) => ( -
-
- -
-
-

{item.title}

-

{item.description}

-
-
- ))} -
-
-
-
- ); -}; - -export default FeaturesMediaGrid; diff --git a/src/components/sections/features/FeaturesRevealCardsBento.tsx b/src/components/sections/features/FeaturesRevealCardsBento.tsx index 239092e..e69de29 100644 --- a/src/components/sections/features/FeaturesRevealCardsBento.tsx +++ b/src/components/sections/features/FeaturesRevealCardsBento.tsx @@ -1,109 +0,0 @@ -import Button from "@/components/ui/Button"; -import TextAnimation from "@/components/ui/TextAnimation"; -import ImageOrVideo from "@/components/ui/ImageOrVideo"; -import ScrollReveal from "@/components/ui/ScrollReveal"; -import { cls } from "@/lib/utils"; - -type FeatureItem = { - title: string; - description: string; - href: string; -} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never }); - -interface FeaturesRevealCardsBentoProps { - tag: string; - title: string; - description: string; - primaryButton?: { text: string; href: string }; - secondaryButton?: { text: string; href: string }; - items: [FeatureItem, FeatureItem, FeatureItem, FeatureItem, FeatureItem, FeatureItem, FeatureItem]; -} - -const FeaturesRevealCardsBento = ({ tag, title, description, primaryButton, secondaryButton, items }: FeaturesRevealCardsBentoProps) => { - const gridClasses = [ - "md:col-span-2", - "md:col-span-4", - "md:col-span-3", - "md:col-span-3", - "md:col-span-2", - "md:col-span-2", - "md:col-span-2", - ]; - - const staggerDelays = [ - 0, - 0.1, - 0, - 0.1, - 0, - 0.1, - 0.2, - ]; - - return ( -
-
-
-
-

{tag}

-
- - - - - - {(primaryButton || secondaryButton) && ( -
- {primaryButton &&
- )} -
- -
- {items.map((item, index) => ( - - -
- -
-
-
- ); -}; - -export default FeaturesRevealCardsBento; diff --git a/src/components/sections/footer/FooterMinimal.tsx b/src/components/sections/footer/FooterMinimal.tsx index 594431e..e69de29 100644 --- a/src/components/sections/footer/FooterMinimal.tsx +++ b/src/components/sections/footer/FooterMinimal.tsx @@ -1,57 +0,0 @@ -import type { LucideIcon } from "lucide-react"; -import { useButtonClick } from "@/hooks/useButtonClick"; -import AutoFillText from "@/components/ui/AutoFillText"; -import { resolveIcon } from "@/utils/resolve-icon"; - -type SocialLink = { - icon: string | LucideIcon; - href?: string; - onClick?: () => void; -}; - -const SocialLinkItem = ({ icon, href, onClick }: SocialLink) => { - const Icon = resolveIcon(icon); - const handleClick = useButtonClick(href, onClick); - - return ( - - ); -}; - -const FooterMinimal = ({ - brand, - copyright, - socialLinks, -}: { - brand: string; - copyright: string; - socialLinks?: SocialLink[]; -}) => { - return ( -
-
- {brand} - -
- -
- {copyright} - {socialLinks && socialLinks.length > 0 && ( -
- {socialLinks.map((link, index) => ( - - ))} -
- )} -
-
-
- ); -}; - -export default FooterMinimal; diff --git a/src/components/ui/GridLinesBackground.tsx b/src/components/ui/GridLinesBackground.tsx index c629e13..e69de29 100644 --- a/src/components/ui/GridLinesBackground.tsx +++ b/src/components/ui/GridLinesBackground.tsx @@ -1,16 +0,0 @@ -import { cls } from "@/lib/utils"; - -type GridLinesBackgroundProps = { - position: "fixed" | "absolute"; -}; - -const GridLinesBackground = ({ position }: GridLinesBackgroundProps) => { - return ( -