diff --git a/src/app/favicon.ico b/src/app/favicon.ico
new file mode 100644
index 0000000..718d6fe
Binary files /dev/null and b/src/app/favicon.ico differ
diff --git a/src/app/globals.css b/src/app/globals.css
new file mode 100644
index 0000000..04b35af
--- /dev/null
+++ b/src/app/globals.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
new file mode 100644
index 0000000..adfa1e8
--- /dev/null
+++ b/src/app/layout.tsx
@@ -0,0 +1,23 @@
+import type { Metadata } from "next";
+import { DM_Sans } from "next/font/google";
+import clsx from "clsx";
+import "./globals.css";
+
+const dmSans = DM_Sans({ subsets: ["latin"] });
+
+export const metadata: Metadata = {
+ title: "Saas Template - EldoraUI",
+ description: "Template for saas applications with dark theme",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
{children}
+
+ );
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
new file mode 100644
index 0000000..666f66c
--- /dev/null
+++ b/src/app/page.tsx
@@ -0,0 +1,33 @@
+import { Banner } from "@/components/Banner";
+import { Navbar } from "@/components/Navbar";
+import { Hero } from "@/components/Hero";
+import { LogoTicker } from "@/components/LogoTicker";
+import { Features } from "@/components/Features";
+import { ProductShowcase } from "@/components/ProductShowcase";
+import { FAQs } from "@/components/FAQs";
+import { CallToAction } from "@/components/CallToAction";
+import { Footer } from "@/components/Footer";
+import { Pricing } from "@/components/Pricingdemo";
+
+
+export default function Home() {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+}
diff --git a/src/assets/icons/arrow-w.svg b/src/assets/icons/arrow-w.svg
new file mode 100644
index 0000000..cca3f4b
--- /dev/null
+++ b/src/assets/icons/arrow-w.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/icons/ecosystem.svg b/src/assets/icons/ecosystem.svg
new file mode 100644
index 0000000..cbcc4ae
--- /dev/null
+++ b/src/assets/icons/ecosystem.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/icons/insta.svg b/src/assets/icons/insta.svg
new file mode 100644
index 0000000..5c9fc74
--- /dev/null
+++ b/src/assets/icons/insta.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/icons/linkedin.svg b/src/assets/icons/linkedin.svg
new file mode 100644
index 0000000..d56308e
--- /dev/null
+++ b/src/assets/icons/linkedin.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/icons/logo.svg b/src/assets/icons/logo.svg
new file mode 100644
index 0000000..f6bfa1e
--- /dev/null
+++ b/src/assets/icons/logo.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/assets/icons/menu.svg b/src/assets/icons/menu.svg
new file mode 100644
index 0000000..e8a84a9
--- /dev/null
+++ b/src/assets/icons/menu.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/minus.svg b/src/assets/icons/minus.svg
new file mode 100644
index 0000000..aa13ca2
--- /dev/null
+++ b/src/assets/icons/minus.svg
@@ -0,0 +1,4 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/pinterest.svg b/src/assets/icons/pinterest.svg
new file mode 100644
index 0000000..4bec68f
--- /dev/null
+++ b/src/assets/icons/pinterest.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/icons/plus.svg b/src/assets/icons/plus.svg
new file mode 100644
index 0000000..8c436b6
--- /dev/null
+++ b/src/assets/icons/plus.svg
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/tiktok.svg b/src/assets/icons/tiktok.svg
new file mode 100644
index 0000000..f89f74b
--- /dev/null
+++ b/src/assets/icons/tiktok.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/icons/x-social.svg b/src/assets/icons/x-social.svg
new file mode 100644
index 0000000..bebf984
--- /dev/null
+++ b/src/assets/icons/x-social.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/icons/x.svg b/src/assets/icons/x.svg
new file mode 100644
index 0000000..7d5875c
--- /dev/null
+++ b/src/assets/icons/x.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/youtube.svg b/src/assets/icons/youtube.svg
new file mode 100644
index 0000000..755911d
--- /dev/null
+++ b/src/assets/icons/youtube.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/assets/images/acme.png b/src/assets/images/acme.png
new file mode 100644
index 0000000..22fa36d
Binary files /dev/null and b/src/assets/images/acme.png differ
diff --git a/src/assets/images/apex.png b/src/assets/images/apex.png
new file mode 100644
index 0000000..ddcb73d
Binary files /dev/null and b/src/assets/images/apex.png differ
diff --git a/src/assets/images/app-screen.png b/src/assets/images/app-screen.png
new file mode 100644
index 0000000..a494ead
Binary files /dev/null and b/src/assets/images/app-screen.png differ
diff --git a/src/assets/images/celestial.png b/src/assets/images/celestial.png
new file mode 100644
index 0000000..63d292e
Binary files /dev/null and b/src/assets/images/celestial.png differ
diff --git a/src/assets/images/cursor.png b/src/assets/images/cursor.png
new file mode 100644
index 0000000..ff32f83
Binary files /dev/null and b/src/assets/images/cursor.png differ
diff --git a/src/assets/images/echo.png b/src/assets/images/echo.png
new file mode 100644
index 0000000..3a96fce
Binary files /dev/null and b/src/assets/images/echo.png differ
diff --git a/src/assets/images/eldoraui.png b/src/assets/images/eldoraui.png
new file mode 100644
index 0000000..fcda8cc
Binary files /dev/null and b/src/assets/images/eldoraui.png differ
diff --git a/src/assets/images/emojistar.png b/src/assets/images/emojistar.png
new file mode 100644
index 0000000..2470fe8
Binary files /dev/null and b/src/assets/images/emojistar.png differ
diff --git a/src/assets/images/helix2.png b/src/assets/images/helix2.png
new file mode 100644
index 0000000..ed4c9e3
Binary files /dev/null and b/src/assets/images/helix2.png differ
diff --git a/src/assets/images/logosaas.png b/src/assets/images/logosaas.png
new file mode 100644
index 0000000..00d4a83
Binary files /dev/null and b/src/assets/images/logosaas.png differ
diff --git a/src/assets/images/message.png b/src/assets/images/message.png
new file mode 100644
index 0000000..3e5857e
Binary files /dev/null and b/src/assets/images/message.png differ
diff --git a/src/assets/images/product.avif b/src/assets/images/product.avif
new file mode 100644
index 0000000..5246596
Binary files /dev/null and b/src/assets/images/product.avif differ
diff --git a/src/assets/images/pulse.png b/src/assets/images/pulse.png
new file mode 100644
index 0000000..141f268
Binary files /dev/null and b/src/assets/images/pulse.png differ
diff --git a/src/assets/images/quantum.png b/src/assets/images/quantum.png
new file mode 100644
index 0000000..fc51c01
Binary files /dev/null and b/src/assets/images/quantum.png differ
diff --git a/src/components/Banner.tsx b/src/components/Banner.tsx
new file mode 100644
index 0000000..a054225
--- /dev/null
+++ b/src/components/Banner.tsx
@@ -0,0 +1,28 @@
+"use client";
+
+import { ChevronRight } from "lucide-react";
+import Link from "next/link";
+
+
+export function Banner() {
+ return (
+
+
+
+ ✨
+
+ {" "}
+ ⭐WEBSITE BY YASH OZA
+ {" "}
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/CallToAction.tsx b/src/components/CallToAction.tsx
new file mode 100644
index 0000000..c7130e3
--- /dev/null
+++ b/src/components/CallToAction.tsx
@@ -0,0 +1,43 @@
+"use client"
+import HelixImage from '../assets/images/helix2.png'
+import EmojiImage from '../assets/images/emojistar.png'
+import Image from 'next/image';
+import { motion, useScroll, useTransform } from 'framer-motion';
+import { useRef } from 'react';
+
+export const CallToAction = () => {
+ const containerRef = useRef(null);
+
+ const { scrollYProgress } = useScroll({
+ target: containerRef,
+ offset: ["start end", "end end"]
+ })
+
+ const translateY = useTransform(scrollYProgress, [0, 1], [50, -50]);
+
+ return (
+
+
+
+
+
+
+
+
+
+
Maximize Your Solar Efficiency
+
Discover how our cutting-edge solar tracking system can boost your energy output and save on costs. Sign up now to get started with the most advanced solar technology.
+
+
+
+
+
+ )
+};
diff --git a/src/components/FAQs.tsx b/src/components/FAQs.tsx
new file mode 100644
index 0000000..ab55e2a
--- /dev/null
+++ b/src/components/FAQs.tsx
@@ -0,0 +1,72 @@
+"use client"
+import { useState } from "react";
+import PlusIcon from "../assets/icons/plus.svg";
+import MinusIcon from "../assets/icons/minus.svg";
+import clsx from "clsx";
+import {motion , AnimatePresence} from 'framer-motion';
+const items = [
+ {
+ question: "What is the cost of installing the solar tracking system?",
+ answer:
+ "The cost of installation depends on several factors, including the size of your solar array and your specific location. Please contact our sales team for a customized quote based on your needs and location.",
+ },
+ {
+ question: "How does the solar tracking system improve efficiency?",
+ answer:
+ "Our solar tracking system automatically adjusts the angle of your solar panels to follow the sun’s path throughout the day. This ensures that your panels receive maximum sunlight exposure, increasing energy production by up to 30% compared to fixed systems.",
+ },
+ {
+ question: "Can I retrofit the solar tracker to my existing solar panels?",
+ answer:
+ "Yes, our solar tracking system is designed to be compatible with most existing solar panel setups. Our installation team will evaluate your current system and make any necessary adjustments to ensure a smooth integration.",
+ },
+ {
+ question: "What maintenance is required for the solar tracking system?",
+ answer:
+ "The solar tracking system is designed for minimal maintenance. Regular checks and occasional cleaning of the panels are recommended to ensure optimal performance. Our support team provides detailed maintenance guidelines and is available for assistance if needed.",
+ },
+];
+
+const AccordinationItem = ({question, answer}:{question:string, answer: string}) => {
+ const[isOpen, setIsOpen] = useState(false);
+ return(
+
+ setIsOpen(!isOpen)}>
+
+
{question}
+ {isOpen ?
:
}
+
+
+
+ {isOpen && (
+ {answer}
+
+ )}
+
+
+
+
+
+ )
+}
+
+export const FAQs = () => {
+ return (
+
+
+
+ Frequently Asked Questions
+
+
+ {items.map(({question, answer}) => (
+
+ ))}
+
+
+
+ )
+};
diff --git a/src/components/Features.tsx b/src/components/Features.tsx
new file mode 100644
index 0000000..8665eec
--- /dev/null
+++ b/src/components/Features.tsx
@@ -0,0 +1,27 @@
+import Bentodemo from './bentogrid';
+
+export const Features = () => {
+ return (
+
+
+
+
+
Everything You Need
+
+
+ Experience unparalleled solar efficiency with our advanced tracking system. It seamlessly follows the sun path, delivering maximum energy output and transforming the way you harness solar power.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
new file mode 100644
index 0000000..e24d9d2
--- /dev/null
+++ b/src/components/Footer.tsx
@@ -0,0 +1,24 @@
+
+import InstaIcon from '../assets/icons/insta.svg'
+import XIcon from '../assets/icons/x-social.svg'
+import LinkedInIcon from '../assets/icons/linkedin.svg'
+import YoutubeIcon from '../assets/icons/youtube.svg'
+
+export const Footer = () => {
+ return(
+
+
+
+
YASH has rights are reserved
+
+
+
+
+
+ )
+};
diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx
new file mode 100644
index 0000000..c1d3fcf
--- /dev/null
+++ b/src/components/Hero.tsx
@@ -0,0 +1,36 @@
+"use client";
+import ArrowIcon from '../assets/icons/arrow-w.svg';
+import Image from 'next/image';
+import { motion } from 'framer-motion';
+import { AnimatedGradientTextDemo } from './animatedtext';
+
+export const Hero = () => {
+ return (
+
+
+
+
+
+
+
+ Project SunFlower
+
+
+
+
+
+ Experience the future of solar energy with our groundbreaking sun-tracking system! This revolutionary product transforms sunlight into maximum power, effortlessly following the sun path. Say goodbye to energy waste and hello to unmatched efficiency. It is not just a solar panel—
+
+
+ it is the smartest energy solution of all time!
+
+
+
+ Get for free
+
+
+
+ );
+};
diff --git a/src/components/LogoTicker.tsx b/src/components/LogoTicker.tsx
new file mode 100644
index 0000000..307dabb
--- /dev/null
+++ b/src/components/LogoTicker.tsx
@@ -0,0 +1,31 @@
+import acmeLogo from "../assets/images/acme.png";
+import quantumLogo from "../assets/images/quantum.png";
+import echoLogo from "../assets/images/echo.png";
+import celestialLogo from "../assets/images/celestial.png";
+import pulseLogo from "../assets/images/pulse.png";
+import apexLogo from "../assets/images/apex.png";
+import Image from 'next/image';
+import LogoCarousel from "./companylogos";
+
+const images = [
+ { src: acmeLogo, alt: "Acme Logo" },
+ { src: quantumLogo, alt: "Quantum Logo" },
+ { src: echoLogo, alt: "Echo Logo" },
+ { src: celestialLogo, alt: "Celestial Logo" },
+ { src: pulseLogo, alt: "Pulse Logo" },
+ { src: apexLogo, alt: "Apex Logo" },
+];
+
+export const LogoTicker = () => {
+ return(
+
+
+
Trusted by world's most innovative teams
+
+
+
+
+
+
+ )
+};
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
new file mode 100644
index 0000000..7614d18
--- /dev/null
+++ b/src/components/Navbar.tsx
@@ -0,0 +1,41 @@
+
+import LogoImage from '../assets/icons/logo.svg';
+import MenuIcon from '../assets/icons/menu.svg';
+
+
+export const Navbar = () => {
+ return (
+
+ )
+};
diff --git a/src/components/Pricingdemo.tsx b/src/components/Pricingdemo.tsx
new file mode 100644
index 0000000..ff509b0
--- /dev/null
+++ b/src/components/Pricingdemo.tsx
@@ -0,0 +1,29 @@
+import Bentodemo from './bentogrid';
+import PricingTable, { PricingTab } from './pricing';
+
+export const Pricing = () => {
+ return (
+
+
+
+
+
Choose Your Plan
+
+
+ Find the perfect solar tracking solution for your energy needs. Whether it is for residential, commercial, or industrial use, we have a plan designed to maximize your solar output and savings.
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/ProductShowcase.tsx b/src/components/ProductShowcase.tsx
new file mode 100644
index 0000000..fa7dba2
--- /dev/null
+++ b/src/components/ProductShowcase.tsx
@@ -0,0 +1,44 @@
+"use client"
+import appScreen from "../assets/images/product.avif";
+import Image from 'next/image';
+import {motion , useScroll, useTransform} from 'framer-motion';
+import { useEffect, useRef } from "react";
+export const ProductShowcase = () => {
+ const appImage = useRef(null);
+ const { scrollYProgress } = useScroll({
+ target: appImage,
+ offset: ["start end", "end end"]
+
+ });
+
+const rotateX = useTransform(scrollYProgress, [0, 1], [15,0]);
+const opacity = useTransform(scrollYProgress, [0, 1], [.3,1]);
+
+ return (
+
+
+
Intuitive Interface
+
+
+ Effortlessly monitor and control your solar tracker with our user-friendly interface. Get real-time insights, adjust settings, and maximize energy production—all at your fingertips.
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+};
diff --git a/src/components/animatedgradienttext.tsx b/src/components/animatedgradienttext.tsx
new file mode 100644
index 0000000..b98272b
--- /dev/null
+++ b/src/components/animatedgradienttext.tsx
@@ -0,0 +1,26 @@
+import { ReactNode } from "react";
+
+import { cn } from "../components/lib/utils";
+
+export default function AnimatedGradientText({
+ children,
+ className,
+}: {
+ children: ReactNode;
+ className?: string;
+}) {
+ return (
+
+ );
+}
\ No newline at end of file
diff --git a/src/components/animatedtext.tsx b/src/components/animatedtext.tsx
new file mode 100644
index 0000000..15ef363
--- /dev/null
+++ b/src/components/animatedtext.tsx
@@ -0,0 +1,23 @@
+"use client"
+import { ChevronRight } from "lucide-react";
+
+import { cn } from "../components/lib/utils";
+import AnimatedGradientText from "./animatedgradienttext";
+
+export function AnimatedGradientTextDemo() {
+ return (
+
+
+ 🎉 {" "}
+
+ Version 2.0 is here
+
+
+
+
+ );
+}
diff --git a/src/components/bentogrid.tsx b/src/components/bentogrid.tsx
new file mode 100644
index 0000000..668c9ab
--- /dev/null
+++ b/src/components/bentogrid.tsx
@@ -0,0 +1,304 @@
+"use client"
+import React, { useState, useEffect, useRef } from 'react';
+import { motion } from 'framer-motion';
+
+const logos = [
+ "https://res.cloudinary.com/dl2adjye7/image/upload/v1716817722/Amazon_icon.svg_a4qmtg.png",
+ "https://res.cloudinary.com/dl2adjye7/image/upload/v1716800282/Apple_logo_black.svg_seeetv.png",
+ "https://res.cloudinary.com/dl2adjye7/image/upload/v1716800359/WISE.L-b3d3de3c_rexehe.png"
+];
+
+const lineWidth = 80;
+const lineHeight = 2;
+
+const LogoBeam = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+const data = [50, 40, 300, 320, 500, 350, 200, 230, 500];
+const maxData = Math.max(...data);
+const chartHeight = 400;
+const chartWidth = 800;
+
+const CardWithEffect = ({ children }: { children: React.ReactNode }) => {
+ const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 });
+ const [isHovered, setIsHovered] = useState(false);
+
+ const handleMouseMove = (e: React.MouseEvent) => {
+ const rect = e.currentTarget.getBoundingClientRect();
+ setMousePosition({ x: e.clientX - rect.left, y: e.clientY - rect.top });
+ };
+
+ return (
+ setIsHovered(true)}
+ onMouseLeave={() => setIsHovered(false)}
+ style={{ willChange: 'transform' }}
+ >
+ {isHovered && (
+
+ )}
+ {children}
+
+ );
+};
+
+const AWSIcon = () => {
+
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Solar Tracking Integration
+
Seamlessly integrate our solar tracker with your existing systems.
+
+
+ );
+};
+
+const BentoBox1 = () => {
+ const chartRef = useRef(null);
+ const [isChartVisible, setIsChartVisible] = useState(false);
+
+ useEffect(() => {
+ const observer = new IntersectionObserver(
+ (entries) => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ setIsChartVisible(true);
+ observer.unobserve(entry.target);
+ }
+ });
+ },
+ {
+ threshold: 0.5,
+ }
+ );
+
+ if (chartRef.current) {
+ observer.observe(chartRef.current);
+ }
+
+ return () => {
+ if (chartRef.current) {
+ observer.unobserve(chartRef.current);
+ }
+ };
+ }, [chartRef]);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ `${(index / (data.length - 1)) * chartWidth},${chartHeight - (value / maxData) * chartHeight}`
+ )
+ .join(' ')} ${(data.length - 1) * (chartWidth / (data.length - 1))},${chartHeight}`}
+ />
+
+ `${(index / (data.length - 1)) * chartWidth},${chartHeight - (value / maxData) * chartHeight}`
+ )
+ .join(' ')}
+ initial={{ pathLength: 0 }}
+ animate={{ pathLength: isChartVisible ? 1 : 0 }}
+ transition={{ duration: 1.5, ease: 'easeInOut' }}
+ />
+
+
+ {Array.from(Array(7).keys()).map((i) => (
+
+
{`${10 + i * 10}%`}
+
+
+ ))}
+
+
+
+
+
Incredible Growth
+
Maximize Solar Power directly addresses the main benefit of your solar tracking system
+
+
+
+
+
+
+
+
+
Advanced Solar Tracking
+
Optimize energy capture effortlessly with state-of-the-art tracking technology that moves with the sun, ensuring maximum output every single day.
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+
+function Bentodemo() {
+ return (
+
+
+
+ );
+}
+
+export default Bentodemo;
+
\ No newline at end of file
diff --git a/src/components/companylogos.tsx b/src/components/companylogos.tsx
new file mode 100644
index 0000000..ba6e63d
--- /dev/null
+++ b/src/components/companylogos.tsx
@@ -0,0 +1,38 @@
+import Image from 'next/image'
+import acmeLogo from "../assets/images/acme.png";
+import quantumLogo from "../assets/images/quantum.png";
+import echoLogo from "../assets/images/echo.png";
+import celestialLogo from "../assets/images/celestial.png";
+import pulseLogo from "../assets/images/pulse.png";
+import apexLogo from "../assets/images/apex.png";
+
+export default function LogoCarousel() {
+
+ const logos = [
+ { src: acmeLogo, alt: "Acme Logo" },
+ { src: quantumLogo, alt: "Quantum Logo" },
+ { src: echoLogo, alt: "Echo Logo" },
+ { src: celestialLogo, alt: "Celestial Logo" },
+ { src: pulseLogo, alt: "Pulse Logo" },
+ { src: apexLogo, alt: "Apex Logo" },
+ ]
+
+ return (
+
+
+ {logos.map((logo, index) => (
+
+
+
+ ))}
+
+
+ {logos.map((logo, index) => (
+
+
+
+ ))}
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/components/lib/utils.ts b/src/components/lib/utils.ts
new file mode 100644
index 0000000..01c767d
--- /dev/null
+++ b/src/components/lib/utils.ts
@@ -0,0 +1,6 @@
+import { type ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
diff --git a/src/components/pricing.tsx b/src/components/pricing.tsx
new file mode 100644
index 0000000..2e35c3d
--- /dev/null
+++ b/src/components/pricing.tsx
@@ -0,0 +1,122 @@
+'use client'
+
+import { useState } from 'react'
+
+interface PricingTabProps {
+ yearly: boolean
+ popular?: boolean
+ planName: string
+ price: {
+ monthly: number
+ yearly: number
+ }
+ planDescription: string
+ features: string[]
+}
+
+export function PricingTab(props: PricingTabProps) {
+ return (
+
+
+ {props.popular && (
+
+ )}
+
+
{props.planName}
+
+ $
+ {props.yearly ? props.price.yearly : props.price.monthly}
+ /mo
+
+
{props.planDescription}
+
+ Purchase Plan
+
+
+
Includes:
+
+ {props.features.map((feature, index) => {
+ return (
+
+
+
+
+ {feature}
+
+ )
+ })}
+
+
+
+ )
+}
+
+export default function PricingTable() {
+ const [isAnnual, setIsAnnual] = useState(true)
+
+ return (
+
+
+ {/* Pricing toggle */}
+
+
+
+
+
+ setIsAnnual(true)} aria-pressed={isAnnual}>Yearly -20%
+ setIsAnnual(false)} aria-pressed={isAnnual}>Monthly
+
+
+
+
+
+ {/* Pricing tab 1 */}
+
+
+ {/* Pricing tab 2 */}
+
+
+ {/* Pricing tab 3 */}
+
+
+
+
+
+ )
+}
\ No newline at end of file